From fc628e3bea73cc36076268a77c02ff0cc5cdf613 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 10 Feb 2025 14:30:13 -0800 Subject: [PATCH 01/91] add websocket test --- server/monitor-types/websocket.js | 69 +++++++++++++++++++++++++++++++ server/uptime-kuma-server.js | 2 + src/pages/EditMonitor.vue | 6 ++- 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 server/monitor-types/websocket.js diff --git a/server/monitor-types/websocket.js b/server/monitor-types/websocket.js new file mode 100644 index 00000000..47ac1df2 --- /dev/null +++ b/server/monitor-types/websocket.js @@ -0,0 +1,69 @@ +const { MonitorType } = require("./monitor-type"); +const { UP } = require("../../src/util"); +const childProcessAsync = require("promisify-child-process"); + +class websocket extends MonitorType { + name = "websocket"; + + /** + * @inheritdoc + */ + async check(monitor, heartbeat, _server) { + //let status_code = await this.attemptUpgrade(monitor.url); + let statusCode = await this.curlTest(monitor.url); + this.updateStatus(heartbeat, statusCode); + } + + /** + * Attempts to upgrade HTTP/HTTPs connection to Websocket. Use curl to send websocket headers to server and returns response code. Close the connection after 1 second and wrap command in bash to return exit code 0 instead of 28. + * @param {string} url Full URL of Websocket server + * @returns {string} HTTP response code + */ + async curlTest(url) { + let res = await childProcessAsync.spawn("bash", [ "-c", "curl -s -o /dev/null -w '%{http_code}' --http1.1 -N --max-time 1 -H 'Upgrade: websocket' -H 'Sec-WebSocket-Key: test' -H 'Sec-WebSocket-Version: 13' " + url + " || true" ], { + timeout: 5000, + encoding: "utf8", + }); + return res.stdout.toString(); + } + + /** + * Checks if status code is 101 and sets status + * @param {object} heartbeat The heartbeat object to update. + * @param {string} statusCode Status code from curl + * @returns {void} + */ + updateStatus(heartbeat, statusCode) { + if (statusCode === "101") { + heartbeat.status = UP; + } + heartbeat.msg = statusCode; + } + + // Attempt at using websocket library. Abandoned this idea because of the lack of control of headers. Certain websocket servers don't return the Sec-WebSocket-Accept, which causes websocket to error out. + // async attemptUpgrade(hostname) { + // return new Promise((resolve) => { + // const ws = new WebSocket('wss://' + hostname); + + // ws.addEventListener("open", (event) => { + // ws.close(); + // }); + + // ws.onerror = (error) => { + // console.log(error.message); + // }; + + // ws.onclose = (event) => { + // if (event.code === 1005) { + // resolve(true); + // } else { + // resolve(false); + // } + // }; + // }) + // } +} + +module.exports = { + websocket, +}; diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js index 062f098d..dcf80327 100644 --- a/server/uptime-kuma-server.js +++ b/server/uptime-kuma-server.js @@ -111,6 +111,7 @@ class UptimeKumaServer { // Set Monitor Types UptimeKumaServer.monitorTypeList["real-browser"] = new RealBrowserMonitorType(); UptimeKumaServer.monitorTypeList["tailscale-ping"] = new TailscalePing(); + UptimeKumaServer.monitorTypeList["websocket"] = new websocket(); UptimeKumaServer.monitorTypeList["dns"] = new DnsMonitorType(); UptimeKumaServer.monitorTypeList["mqtt"] = new MqttMonitorType(); UptimeKumaServer.monitorTypeList["snmp"] = new SNMPMonitorType(); @@ -549,6 +550,7 @@ module.exports = { // Must be at the end to avoid circular dependencies const { RealBrowserMonitorType } = require("./monitor-types/real-browser-monitor-type"); const { TailscalePing } = require("./monitor-types/tailscale-ping"); +const { websocket } = require("./monitor-types/websocket"); const { DnsMonitorType } = require("./monitor-types/dns"); const { MqttMonitorType } = require("./monitor-types/mqtt"); const { SNMPMonitorType } = require("./monitor-types/snmp"); diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index a83f91ca..b17b6be2 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -46,6 +46,10 @@ + + @@ -113,7 +117,7 @@ -
+
From 587699d7b3a523c977a977d8cdadc737df65189d Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 17 Feb 2025 17:04:58 -0800 Subject: [PATCH 02/91] Add Websocket Test v2 --- README.md | 2 +- .../2025-02-15-2312-add-wstest.js | 15 ++++ server/model/monitor.js | 10 +++ server/monitor-types/websocket.js | 64 +++++++++------- server/server.js | 2 + src/lang/en.json | 1 + src/pages/EditMonitor.vue | 24 +++++- test/backend-test/test-websocket.js | 76 +++++++++++++++++++ 8 files changed, 163 insertions(+), 31 deletions(-) create mode 100644 db/knex_migrations/2025-02-15-2312-add-wstest.js create mode 100644 test/backend-test/test-websocket.js diff --git a/README.md b/README.md index 34e34020..d0b1ac17 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ It is a temporary live demo, all data will be deleted after 10 minutes. Sponsore ## ⭐ Features -- Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / HTTP(s) Json Query / Ping / DNS Record / Push / Steam Game Server / Docker Containers +- Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / HTTP(s) Json Query / Websocket / Ping / DNS Record / Push / Steam Game Server / Docker Containers - Fancy, Reactive, Fast UI/UX - Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications) - 20-second intervals diff --git a/db/knex_migrations/2025-02-15-2312-add-wstest.js b/db/knex_migrations/2025-02-15-2312-add-wstest.js new file mode 100644 index 00000000..966cff13 --- /dev/null +++ b/db/knex_migrations/2025-02-15-2312-add-wstest.js @@ -0,0 +1,15 @@ +// Add websocket URL +exports.up = function (knex) { + return knex.schema + .alterTable("monitor", function (table) { + table.text("wsurl"); + table.boolean("ws_ignore_headers").notNullable().defaultTo(false); + }); +}; + +exports.down = function (knex) { + return knex.schema.alterTable("monitor", function (table) { + table.dropColumn("wsurl"); + table.dropColumn("ws_ignore_headers"); + }); +}; diff --git a/server/model/monitor.js b/server/model/monitor.js index 3ad8cfaf..77498fa3 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -96,6 +96,8 @@ class Monitor extends BeanModel { parent: this.parent, childrenIDs: preloadData.childrenIDs.get(this.id) || [], url: this.url, + wsurl: this.wsurl, + wsIgnoreHeaders: this.getWsIgnoreHeaders(), method: this.method, hostname: this.hostname, port: this.port, @@ -255,6 +257,14 @@ class Monitor extends BeanModel { return Boolean(this.ignoreTls); } + /** + * Parse to boolean + * @returns {boolean} Should WS headers be ignored? + */ + getWsIgnoreHeaders() { + return Boolean(this.wsIgnoreHeaders); + } + /** * Parse to boolean * @returns {boolean} Is the monitor in upside down mode? diff --git a/server/monitor-types/websocket.js b/server/monitor-types/websocket.js index 47ac1df2..3e84b5b8 100644 --- a/server/monitor-types/websocket.js +++ b/server/monitor-types/websocket.js @@ -1,5 +1,6 @@ const { MonitorType } = require("./monitor-type"); -const { UP } = require("../../src/util"); +const WebSocket = require("ws"); +const { UP, DOWN } = require("../../src/util"); const childProcessAsync = require("promisify-child-process"); class websocket extends MonitorType { @@ -9,8 +10,8 @@ class websocket extends MonitorType { * @inheritdoc */ async check(monitor, heartbeat, _server) { - //let status_code = await this.attemptUpgrade(monitor.url); - let statusCode = await this.curlTest(monitor.url); + let statusCode = await this.attemptUpgrade(monitor); + //let statusCode = await this.curlTest(monitor.url); this.updateStatus(heartbeat, statusCode); } @@ -28,40 +29,45 @@ class websocket extends MonitorType { } /** - * Checks if status code is 101 and sets status + * Checks if status code is 1000(Normal Closure) and sets status and message * @param {object} heartbeat The heartbeat object to update. - * @param {string} statusCode Status code from curl + * @param {[ string, int ]} status Array containing a status message and response code * @returns {void} */ - updateStatus(heartbeat, statusCode) { - if (statusCode === "101") { - heartbeat.status = UP; - } - heartbeat.msg = statusCode; + updateStatus(heartbeat, [ message, code ]) { + heartbeat.status = code === 1000 ? UP : DOWN; + heartbeat.msg = message; } - // Attempt at using websocket library. Abandoned this idea because of the lack of control of headers. Certain websocket servers don't return the Sec-WebSocket-Accept, which causes websocket to error out. - // async attemptUpgrade(hostname) { - // return new Promise((resolve) => { - // const ws = new WebSocket('wss://' + hostname); + /** + * Uses the builtin Websocket API to establish a connection to target server + * @param {object} monitor The monitor object for input parameters. + * @returns {[ string, int ]} Array containing a status message and response code + */ + async attemptUpgrade(monitor) { + return new Promise((resolve) => { + const ws = new WebSocket(monitor.wsurl); - // ws.addEventListener("open", (event) => { - // ws.close(); - // }); + ws.addEventListener("open", (event) => { + ws.close(1000); + }); - // ws.onerror = (error) => { - // console.log(error.message); - // }; + ws.onerror = (error) => { + // console.log(error.message); + // Give user the choice to ignore Sec-WebSocket-Accept header + if (monitor.wsIgnoreHeaders && error.message === "Invalid Sec-WebSocket-Accept header") { + resolve([ "101 - OK", 1000 ]); + } + resolve([ error.message, error.code ]); + }; - // ws.onclose = (event) => { - // if (event.code === 1005) { - // resolve(true); - // } else { - // resolve(false); - // } - // }; - // }) - // } + ws.onclose = (event) => { + // console.log(event.message); + // console.log(event.code); + resolve([ "101 - OK", event.code ]); + }; + }); + } } module.exports = { diff --git a/server/server.js b/server/server.js index ec5ad49f..0e19b6e6 100644 --- a/server/server.js +++ b/server/server.js @@ -790,6 +790,8 @@ let needSetup = false; bean.parent = monitor.parent; bean.type = monitor.type; bean.url = monitor.url; + bean.wsurl = monitor.wsurl; + bean.wsIgnoreHeaders = monitor.wsIgnoreHeaders; bean.method = monitor.method; bean.body = monitor.body; bean.headers = monitor.headers; diff --git a/src/lang/en.json b/src/lang/en.json index e215f103..81adc073 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -86,6 +86,7 @@ "ignoreTLSError": "Ignore TLS/SSL errors for HTTPS websites", "ignoreTLSErrorGeneral": "Ignore TLS/SSL error for connection", "upsideDownModeDescription": "Flip the status upside down. If the service is reachable, it is DOWN.", + "wsIgnoreHeadersDescription": "Test non compliant Websocket servers that don't respond with correct headers.", "maxRedirectDescription": "Maximum number of redirects to follow. Set to 0 to disable redirects.", "Upside Down Mode": "Upside Down Mode", "Max. Redirects": "Max. Redirects", diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index b17b6be2..679eac29 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -117,11 +117,17 @@
-
+
+ +
+ + +
+
@@ -625,6 +631,16 @@
+
+ + +
+ {{ $t("wsIgnoreHeadersDescription") }} +
+
+
-
+
@@ -631,10 +631,10 @@
-
+
{{ $t("wsIgnoreHeadersDescription") }} diff --git a/test/backend-test/test-websocket.js b/test/backend-test/test-websocket.js index 4ef4b412..e5d88580 100644 --- a/test/backend-test/test-websocket.js +++ b/test/backend-test/test-websocket.js @@ -1,12 +1,12 @@ const { describe, test } = require("node:test"); const assert = require("node:assert"); -const { websocket } = require("../../server/monitor-types/websocket"); +const { WebSocketMonitorType } = require("../../server/monitor-types/websocket-upgrade"); const { UP, DOWN, PENDING } = require("../../src/util"); describe("Websocket Test", { }, () => { test("Non Websocket Server", {}, async () => { - const websocketMonitor = new websocket(); + const websocketMonitor = new WebSocketMonitorType(); const monitor = { wsurl: "wss://example.org", @@ -20,11 +20,11 @@ describe("Websocket Test", { await websocketMonitor.check(monitor, heartbeat, {}); assert.strictEqual(heartbeat.status, DOWN); - assert.strictEqual(heartbeat.msg, "Unexpected server response: 200"); + assert.strictEqual(heartbeat.msg, undefined); }); test("Secure Websocket", async () => { - const websocketMonitor = new websocket(); + const websocketMonitor = new WebSocketMonitorType(); const monitor = { wsurl: "wss://echo.websocket.org", @@ -38,13 +38,13 @@ describe("Websocket Test", { await websocketMonitor.check(monitor, heartbeat, {}); assert.strictEqual(heartbeat.status, UP); - assert.strictEqual(heartbeat.msg, "101 - OK"); + assert.strictEqual(heartbeat.msg, 1000); }); test("Insecure Websocket", { skip: !!process.env.CI, }, async () => { - const websocketMonitor = new websocket(); + const websocketMonitor = new WebSocketMonitorType(); const monitor = { wsurl: "ws://ws.ifelse.io", @@ -57,12 +57,13 @@ describe("Websocket Test", { }; await websocketMonitor.check(monitor, heartbeat, {}); + console.log("Insecure WS Test:", heartbeat.msg, heartbeat.status); assert.strictEqual(heartbeat.status, UP); - assert.strictEqual(heartbeat.msg, "101 - OK"); + assert.strictEqual(heartbeat.msg, 1000); }); test("Test a non compliant WS server without ignore", async () => { - const websocketMonitor = new websocket(); + const websocketMonitor = new WebSocketMonitorType(); const monitor = { wsurl: "wss://c.img-cdn.net/yE4s7KehTFyj/", @@ -76,11 +77,11 @@ describe("Websocket Test", { await websocketMonitor.check(monitor, heartbeat, {}); assert.strictEqual(heartbeat.status, DOWN); - assert.strictEqual(heartbeat.msg, "Invalid Sec-WebSocket-Accept header"); + assert.strictEqual(heartbeat.msg, undefined); }); test("Test a non compliant WS server with ignore", async () => { - const websocketMonitor = new websocket(); + const websocketMonitor = new WebSocketMonitorType(); const monitor = { wsurl: "wss://c.img-cdn.net/yE4s7KehTFyj/", @@ -94,6 +95,6 @@ describe("Websocket Test", { await websocketMonitor.check(monitor, heartbeat, {}); assert.strictEqual(heartbeat.status, UP); - assert.strictEqual(heartbeat.msg, "101 - OK"); + assert.strictEqual(heartbeat.msg, 1000); }); }); From 725892c9014311d376211df03cd771f16f2976b4 Mon Sep 17 00:00:00 2001 From: PoleTransformer Date: Tue, 18 Feb 2025 16:08:51 -0800 Subject: [PATCH 10/91] increase test verbosity --- server/monitor-types/websocket-upgrade.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/monitor-types/websocket-upgrade.js b/server/monitor-types/websocket-upgrade.js index 308ed983..5d484200 100644 --- a/server/monitor-types/websocket-upgrade.js +++ b/server/monitor-types/websocket-upgrade.js @@ -1,7 +1,6 @@ const { MonitorType } = require("./monitor-type"); const WebSocket = require("ws"); const { UP, DOWN } = require("../../src/util"); -const childProcessAsync = require("promisify-child-process"); class WebSocketMonitorType extends MonitorType { name = "websocket-upgrade"; @@ -14,6 +13,7 @@ class WebSocketMonitorType extends MonitorType { heartbeat.status = code === 1000 ? UP : DOWN; //heartbeat.msg = message; heartbeat.msg = code; //unit testing + console.log(message); //temporary test to pass eslint check } /** From 492d9f503f58f76eeaf5302f930a38ce3e4f02c3 Mon Sep 17 00:00:00 2001 From: PoleTransformer Date: Tue, 18 Feb 2025 16:29:19 -0800 Subject: [PATCH 11/91] one assert per testcase --- server/monitor-types/websocket-upgrade.js | 5 +-- test/backend-test/test-websocket.js | 45 ++++++++++++++++------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/server/monitor-types/websocket-upgrade.js b/server/monitor-types/websocket-upgrade.js index 5d484200..eb9a3714 100644 --- a/server/monitor-types/websocket-upgrade.js +++ b/server/monitor-types/websocket-upgrade.js @@ -11,9 +11,8 @@ class WebSocketMonitorType extends MonitorType { async check(monitor, heartbeat, _server) { const [ message, code ] = await this.attemptUpgrade(monitor); heartbeat.status = code === 1000 ? UP : DOWN; - //heartbeat.msg = message; - heartbeat.msg = code; //unit testing - console.log(message); //temporary test to pass eslint check + heartbeat.msg = message; + console.log(code, message); //temp unit testing } /** diff --git a/test/backend-test/test-websocket.js b/test/backend-test/test-websocket.js index e5d88580..ee62eef2 100644 --- a/test/backend-test/test-websocket.js +++ b/test/backend-test/test-websocket.js @@ -18,9 +18,13 @@ describe("Websocket Test", { status: PENDING, }; + const expected = { + msg: "Unexpected server response: 200", + status: DOWN, + }; + await websocketMonitor.check(monitor, heartbeat, {}); - assert.strictEqual(heartbeat.status, DOWN); - assert.strictEqual(heartbeat.msg, undefined); + assert.deepStrictEqual(heartbeat, expected); }); test("Secure Websocket", async () => { @@ -36,14 +40,16 @@ describe("Websocket Test", { status: PENDING, }; + const expected = { + msg: "101 - OK", + status: UP, + }; + await websocketMonitor.check(monitor, heartbeat, {}); - assert.strictEqual(heartbeat.status, UP); - assert.strictEqual(heartbeat.msg, 1000); + assert.deepStrictEqual(heartbeat, expected); }); - test("Insecure Websocket", { - skip: !!process.env.CI, - }, async () => { + test("Insecure Websocket", async () => { const websocketMonitor = new WebSocketMonitorType(); const monitor = { @@ -56,10 +62,13 @@ describe("Websocket Test", { status: PENDING, }; + const expected = { + msg: "101 - OK", + status: UP, + }; + await websocketMonitor.check(monitor, heartbeat, {}); - console.log("Insecure WS Test:", heartbeat.msg, heartbeat.status); - assert.strictEqual(heartbeat.status, UP); - assert.strictEqual(heartbeat.msg, 1000); + assert.deepStrictEqual(heartbeat, expected); }); test("Test a non compliant WS server without ignore", async () => { @@ -75,9 +84,13 @@ describe("Websocket Test", { status: PENDING, }; + const expected = { + msg: "Invalid Sec-WebSocket-Accept header", + status: DOWN, + }; + await websocketMonitor.check(monitor, heartbeat, {}); - assert.strictEqual(heartbeat.status, DOWN); - assert.strictEqual(heartbeat.msg, undefined); + assert.deepStrictEqual(heartbeat, expected); }); test("Test a non compliant WS server with ignore", async () => { @@ -93,8 +106,12 @@ describe("Websocket Test", { status: PENDING, }; + const expected = { + msg: "101 - OK", + status: UP, + }; + await websocketMonitor.check(monitor, heartbeat, {}); - assert.strictEqual(heartbeat.status, UP); - assert.strictEqual(heartbeat.msg, 1000); + assert.deepStrictEqual(heartbeat, expected); }); }); From 5bca760d58c249f3fc42c2b8e24575d22f325e1f Mon Sep 17 00:00:00 2001 From: PoleTransformer Date: Tue, 18 Feb 2025 17:26:52 -0800 Subject: [PATCH 12/91] local ws for unit test + touchups --- server/monitor-types/websocket-upgrade.js | 3 ++- src/lang/en.json | 2 +- test/backend-test/test-websocket.js | 7 +++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/server/monitor-types/websocket-upgrade.js b/server/monitor-types/websocket-upgrade.js index eb9a3714..9b12c1a7 100644 --- a/server/monitor-types/websocket-upgrade.js +++ b/server/monitor-types/websocket-upgrade.js @@ -12,7 +12,6 @@ class WebSocketMonitorType extends MonitorType { const [ message, code ] = await this.attemptUpgrade(monitor); heartbeat.status = code === 1000 ? UP : DOWN; heartbeat.msg = message; - console.log(code, message); //temp unit testing } /** @@ -34,10 +33,12 @@ class WebSocketMonitorType extends MonitorType { if (monitor.wsIgnoreHeaders && error.message === "Invalid Sec-WebSocket-Accept header") { resolve([ "101 - OK", 1000 ]); } + // Upgrade failed, return message to user resolve([ error.message, error.code ]); }; ws.onclose = (event) => { + // Upgrade success, connection closed successfully resolve([ "101 - OK", event.code ]); }; }); diff --git a/src/lang/en.json b/src/lang/en.json index 1f1b473c..ff2923b5 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -86,7 +86,7 @@ "ignoreTLSError": "Ignore TLS/SSL errors for HTTPS websites", "ignoreTLSErrorGeneral": "Ignore TLS/SSL error for connection", "upsideDownModeDescription": "Flip the status upside down. If the service is reachable, it is DOWN.", - "wsIgnoreHeadersDescription": "Test non compliant Websocket servers.", + "wsIgnoreHeadersDescription": "The websocket upgrade succeeds, but the server does not reply with Sec-WebSocket-Accept header.", "Ignore Sec-WebSocket-Accept header": "Ignore Sec-WebSocket-Accept header", "maxRedirectDescription": "Maximum number of redirects to follow. Set to 0 to disable redirects.", "Upside Down Mode": "Upside Down Mode", diff --git a/test/backend-test/test-websocket.js b/test/backend-test/test-websocket.js index ee62eef2..4898e3c5 100644 --- a/test/backend-test/test-websocket.js +++ b/test/backend-test/test-websocket.js @@ -1,3 +1,4 @@ +const { WebSocketServer } = require("ws"); const { describe, test } = require("node:test"); const assert = require("node:assert"); const { WebSocketMonitorType } = require("../../server/monitor-types/websocket-upgrade"); @@ -49,11 +50,13 @@ describe("Websocket Test", { assert.deepStrictEqual(heartbeat, expected); }); - test("Insecure Websocket", async () => { + test("Insecure Websocket", async (t) => { + t.after(() => wss.close()); const websocketMonitor = new WebSocketMonitorType(); + const wss = new WebSocketServer({ port: 8080 }); const monitor = { - wsurl: "ws://ws.ifelse.io", + wsurl: "ws://localhost:8080", wsIgnoreHeaders: false, }; From 2ad0d7805afc6104291be07ac70c69f53a5943b8 Mon Sep 17 00:00:00 2001 From: PoleTransformer Date: Mon, 24 Feb 2025 16:06:53 -0800 Subject: [PATCH 13/91] merge wsurl with url --- .../2025-02-15-2312-add-wstest.js | 4 +--- server/model/monitor.js | 1 - server/monitor-types/websocket-upgrade.js | 2 +- server/server.js | 1 - src/pages/EditMonitor.vue | 18 +++++------------- test/backend-test/test-websocket.js | 10 +++++----- 6 files changed, 12 insertions(+), 24 deletions(-) diff --git a/db/knex_migrations/2025-02-15-2312-add-wstest.js b/db/knex_migrations/2025-02-15-2312-add-wstest.js index 966cff13..c2b640f3 100644 --- a/db/knex_migrations/2025-02-15-2312-add-wstest.js +++ b/db/knex_migrations/2025-02-15-2312-add-wstest.js @@ -1,15 +1,13 @@ -// Add websocket URL +// Add websocket ignore headers exports.up = function (knex) { return knex.schema .alterTable("monitor", function (table) { - table.text("wsurl"); table.boolean("ws_ignore_headers").notNullable().defaultTo(false); }); }; exports.down = function (knex) { return knex.schema.alterTable("monitor", function (table) { - table.dropColumn("wsurl"); table.dropColumn("ws_ignore_headers"); }); }; diff --git a/server/model/monitor.js b/server/model/monitor.js index 77498fa3..fecde2d2 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -96,7 +96,6 @@ class Monitor extends BeanModel { parent: this.parent, childrenIDs: preloadData.childrenIDs.get(this.id) || [], url: this.url, - wsurl: this.wsurl, wsIgnoreHeaders: this.getWsIgnoreHeaders(), method: this.method, hostname: this.hostname, diff --git a/server/monitor-types/websocket-upgrade.js b/server/monitor-types/websocket-upgrade.js index 9b12c1a7..aa18ef07 100644 --- a/server/monitor-types/websocket-upgrade.js +++ b/server/monitor-types/websocket-upgrade.js @@ -21,7 +21,7 @@ class WebSocketMonitorType extends MonitorType { */ async attemptUpgrade(monitor) { return new Promise((resolve) => { - const ws = new WebSocket(monitor.wsurl); + const ws = new WebSocket(monitor.url); ws.addEventListener("open", (event) => { // Immediately close the connection diff --git a/server/server.js b/server/server.js index 0e19b6e6..d8aa67a3 100644 --- a/server/server.js +++ b/server/server.js @@ -790,7 +790,6 @@ let needSetup = false; bean.parent = monitor.parent; bean.type = monitor.type; bean.url = monitor.url; - bean.wsurl = monitor.wsurl; bean.wsIgnoreHeaders = monitor.wsIgnoreHeaders; bean.method = monitor.method; bean.body = monitor.body; diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 0a418be0..c5a61f6b 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -117,15 +117,9 @@
-
+
- -
- - -
- - +
@@ -1094,7 +1088,6 @@ const monitorDefaults = { name: "", parent: null, url: "https://", - wsurl: "wss://", wsIgnoreHeaders: false, method: "GET", interval: 60, @@ -1444,6 +1437,9 @@ message HealthCheckResponse { }, "monitor.type"(newType, oldType) { + if (oldType && this.monitor.type === "websocket-upgrade") { + this.monitor.url = "wss://"; + } if (this.monitor.type === "push") { if (! this.monitor.pushToken) { // ideally this would require checking if the generated token is already used @@ -1749,10 +1745,6 @@ message HealthCheckResponse { this.monitor.url = this.monitor.url.trim(); } - if (this.monitor.wsurl) { - this.monitor.wsurl = this.monitor.wsurl.trim(); - } - let createdNewParent = false; if (this.draftGroupName && this.monitor.parent === -1) { diff --git a/test/backend-test/test-websocket.js b/test/backend-test/test-websocket.js index 4898e3c5..72bf549e 100644 --- a/test/backend-test/test-websocket.js +++ b/test/backend-test/test-websocket.js @@ -10,7 +10,7 @@ describe("Websocket Test", { const websocketMonitor = new WebSocketMonitorType(); const monitor = { - wsurl: "wss://example.org", + url: "wss://example.org", wsIgnoreHeaders: false, }; @@ -32,7 +32,7 @@ describe("Websocket Test", { const websocketMonitor = new WebSocketMonitorType(); const monitor = { - wsurl: "wss://echo.websocket.org", + url: "wss://echo.websocket.org", wsIgnoreHeaders: false, }; @@ -56,7 +56,7 @@ describe("Websocket Test", { const wss = new WebSocketServer({ port: 8080 }); const monitor = { - wsurl: "ws://localhost:8080", + url: "ws://localhost:8080", wsIgnoreHeaders: false, }; @@ -78,7 +78,7 @@ describe("Websocket Test", { const websocketMonitor = new WebSocketMonitorType(); const monitor = { - wsurl: "wss://c.img-cdn.net/yE4s7KehTFyj/", + url: "wss://c.img-cdn.net/yE4s7KehTFyj/", wsIgnoreHeaders: false, }; @@ -100,7 +100,7 @@ describe("Websocket Test", { const websocketMonitor = new WebSocketMonitorType(); const monitor = { - wsurl: "wss://c.img-cdn.net/yE4s7KehTFyj/", + url: "wss://c.img-cdn.net/yE4s7KehTFyj/", wsIgnoreHeaders: true, }; From 5bc9a0d64a70aed61d39930d5e80f28a277e5ae2 Mon Sep 17 00:00:00 2001 From: PoleTransformer Date: Sun, 9 Mar 2025 17:30:12 -0700 Subject: [PATCH 14/91] add subprotocol selection + translation keys --- .../2025-02-15-2312-add-wstest.js | 4 +- server/model/monitor.js | 1 + server/monitor-types/websocket-upgrade.js | 4 +- server/server.js | 1 + src/lang/en.json | 31 ++++++++ src/pages/EditMonitor.vue | 71 +++++++++++++++++++ 6 files changed, 110 insertions(+), 2 deletions(-) diff --git a/db/knex_migrations/2025-02-15-2312-add-wstest.js b/db/knex_migrations/2025-02-15-2312-add-wstest.js index c2b640f3..36f81acf 100644 --- a/db/knex_migrations/2025-02-15-2312-add-wstest.js +++ b/db/knex_migrations/2025-02-15-2312-add-wstest.js @@ -1,13 +1,15 @@ -// Add websocket ignore headers +// Add websocket ignore headers and websocket subprotocol exports.up = function (knex) { return knex.schema .alterTable("monitor", function (table) { table.boolean("ws_ignore_headers").notNullable().defaultTo(false); + table.string("subprotocol", 255).notNullable().defaultTo(""); }); }; exports.down = function (knex) { return knex.schema.alterTable("monitor", function (table) { table.dropColumn("ws_ignore_headers"); + table.dropColumn("subprotocol"); }); }; diff --git a/server/model/monitor.js b/server/model/monitor.js index fecde2d2..e5f2f449 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -97,6 +97,7 @@ class Monitor extends BeanModel { childrenIDs: preloadData.childrenIDs.get(this.id) || [], url: this.url, wsIgnoreHeaders: this.getWsIgnoreHeaders(), + subprotocol: this.subprotocol, method: this.method, hostname: this.hostname, port: this.port, diff --git a/server/monitor-types/websocket-upgrade.js b/server/monitor-types/websocket-upgrade.js index aa18ef07..8b2b64be 100644 --- a/server/monitor-types/websocket-upgrade.js +++ b/server/monitor-types/websocket-upgrade.js @@ -21,7 +21,9 @@ class WebSocketMonitorType extends MonitorType { */ async attemptUpgrade(monitor) { return new Promise((resolve) => { - const ws = new WebSocket(monitor.url); + let ws; + //If user selected a subprotocol, sets Sec-WebSocket-Protocol header. Subprotocol Identifier column: https://www.iana.org/assignments/websocket/websocket.xml#subprotocol-name + ws = monitor.subprotocol === "" ? new WebSocket(monitor.url) : new WebSocket(monitor.url, monitor.subprotocol); ws.addEventListener("open", (event) => { // Immediately close the connection diff --git a/server/server.js b/server/server.js index d8aa67a3..2d5a911e 100644 --- a/server/server.js +++ b/server/server.js @@ -791,6 +791,7 @@ let needSetup = false; bean.type = monitor.type; bean.url = monitor.url; bean.wsIgnoreHeaders = monitor.wsIgnoreHeaders; + bean.subprotocol = monitor.subprotocol; bean.method = monitor.method; bean.body = monitor.body; bean.headers = monitor.headers; diff --git a/src/lang/en.json b/src/lang/en.json index ff2923b5..22d5ac2e 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -88,6 +88,37 @@ "upsideDownModeDescription": "Flip the status upside down. If the service is reachable, it is DOWN.", "wsIgnoreHeadersDescription": "The websocket upgrade succeeds, but the server does not reply with Sec-WebSocket-Accept header.", "Ignore Sec-WebSocket-Accept header": "Ignore Sec-WebSocket-Accept header", + "wamp": "WAMP (The WebSocket Application Messaging Protocol)", + "sip": "WebSocket Transport for SIP (Session Initiation Protocol)", + "notificationchannel-netapi-rest.openmobilealliance.org": "OMA RESTful Network API for Notification Channel", + "wpcp": "Web Process Control Protocol (WPCP)", + "amqp": "Advanced Message Queuing Protocol (AMQP) 1.0+", + "jsflow": "jsFlow pubsub/queue protocol", + "rwpcp": "Reverse Web Process Control Protocol (RWPCP)", + "xmpp": "WebSocket Transport for the Extensible Messaging and Presence Protocol (XMPP)", + "ship": "SHIP - Smart Home IP", + "mielecloudconnect": "Miele Cloud Connect Protocol", + "v10.pcp.sap.com": "Push Channel Protocol", + "msrp": "WebSocket Transport for MSRP (Message Session Relay Protocol)", + "bfcp": "WebSocket Transport for BFCP (Binary Floor Control Protocol)", + "sldp.softvelum.com": "Softvelum Low Delay Protocol", + "opcua+uacp": "OPC UA Connection Protocol", + "opcua+uajson": "OPC UA JSON Encoding", + "v1.swindon-lattice+json": "Swindon Web Server Protocol (JSON encoding)", + "v1.usp": "USP (Broadband Forum User Services Platform)", + "coap": "Constrained Application Protocol (CoAP)", + "webrtc.softvelum.com": "Softvelum WebSocket signaling protocol", + "cobra.v2.json": "Cobra Real Time Messaging Protocol", + "drp": "Declarative Resource Protocol", + "hub.bsc.bacnet.org": "BACnet Secure Connect Hub Connection", + "dc.bsc.bacnet.org": "BACnet Secure Connect Direct Connection", + "jmap": "WebSocket Transport for JMAP (JSON Meta Application Protocol)", + "t140": "ITU-T T.140 Real-Time Text", + "done": "Done.best IoT Protocol", + "collection-update": "The Collection Update Websocket Subprotocol", + "text.ircv3.net": "Text IRC Protocol", + "binary.ircv3.net": "Binary IRC Protocol", + "v3.penguin-stats.live+proto": "Penguin Statistics Live Protocol v3 (Protobuf encoding)", "maxRedirectDescription": "Maximum number of redirects to follow. Set to 0 to disable redirects.", "Upside Down Mode": "Upside Down Mode", "Max. Redirects": "Max. Redirects", diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index c5a61f6b..aa686850 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -122,6 +122,77 @@
+ +
+ + +
+
From e3e019ce37ef07cb6134320dbdd906e21c008689 Mon Sep 17 00:00:00 2001 From: PoleTransformer Date: Sun, 30 Mar 2025 15:23:29 -0700 Subject: [PATCH 15/91] variable renaming + update translation keys + additional unit tests --- .../2025-02-15-2312-add-wstest.js | 8 +- server/model/monitor.js | 8 +- server/monitor-types/websocket-upgrade.js | 4 +- server/server.js | 4 +- src/lang/en.json | 66 +++++++-------- src/pages/EditMonitor.vue | 78 +++++++++--------- test/backend-test/test-websocket.js | 81 +++++++++++++++++-- 7 files changed, 158 insertions(+), 91 deletions(-) diff --git a/db/knex_migrations/2025-02-15-2312-add-wstest.js b/db/knex_migrations/2025-02-15-2312-add-wstest.js index 36f81acf..43736878 100644 --- a/db/knex_migrations/2025-02-15-2312-add-wstest.js +++ b/db/knex_migrations/2025-02-15-2312-add-wstest.js @@ -2,14 +2,14 @@ exports.up = function (knex) { return knex.schema .alterTable("monitor", function (table) { - table.boolean("ws_ignore_headers").notNullable().defaultTo(false); - table.string("subprotocol", 255).notNullable().defaultTo(""); + table.boolean("ws_ignore_sec_websocket_accept_header").notNullable().defaultTo(false); + table.string("ws_subprotocol", 255).notNullable().defaultTo(""); }); }; exports.down = function (knex) { return knex.schema.alterTable("monitor", function (table) { - table.dropColumn("ws_ignore_headers"); - table.dropColumn("subprotocol"); + table.dropColumn("ws_ignore_sec_websocket_accept_header"); + table.dropColumn("ws_subprotocol"); }); }; diff --git a/server/model/monitor.js b/server/model/monitor.js index e5f2f449..b984a9c8 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -96,8 +96,8 @@ class Monitor extends BeanModel { parent: this.parent, childrenIDs: preloadData.childrenIDs.get(this.id) || [], url: this.url, - wsIgnoreHeaders: this.getWsIgnoreHeaders(), - subprotocol: this.subprotocol, + wsIgnoreSecWebsocketAcceptHeader: this.getWsIgnoreSecWebsocketAcceptHeader(), + wsSubprotocol: this.wsSubprotocol, method: this.method, hostname: this.hostname, port: this.port, @@ -261,8 +261,8 @@ class Monitor extends BeanModel { * Parse to boolean * @returns {boolean} Should WS headers be ignored? */ - getWsIgnoreHeaders() { - return Boolean(this.wsIgnoreHeaders); + getWsIgnoreSecWebsocketAcceptHeader() { + return Boolean(this.wsIgnoreSecWebsocketAcceptHeader); } /** diff --git a/server/monitor-types/websocket-upgrade.js b/server/monitor-types/websocket-upgrade.js index 8b2b64be..e85c4baa 100644 --- a/server/monitor-types/websocket-upgrade.js +++ b/server/monitor-types/websocket-upgrade.js @@ -23,7 +23,7 @@ class WebSocketMonitorType extends MonitorType { return new Promise((resolve) => { let ws; //If user selected a subprotocol, sets Sec-WebSocket-Protocol header. Subprotocol Identifier column: https://www.iana.org/assignments/websocket/websocket.xml#subprotocol-name - ws = monitor.subprotocol === "" ? new WebSocket(monitor.url) : new WebSocket(monitor.url, monitor.subprotocol); + ws = monitor.wsSubprotocol === "" ? new WebSocket(monitor.url) : new WebSocket(monitor.url, monitor.wsSubprotocol); ws.addEventListener("open", (event) => { // Immediately close the connection @@ -32,7 +32,7 @@ class WebSocketMonitorType extends MonitorType { ws.onerror = (error) => { // Give user the choice to ignore Sec-WebSocket-Accept header - if (monitor.wsIgnoreHeaders && error.message === "Invalid Sec-WebSocket-Accept header") { + if (monitor.wsIgnoreSecWebsocketAcceptHeader && error.message === "Invalid Sec-WebSocket-Accept header") { resolve([ "101 - OK", 1000 ]); } // Upgrade failed, return message to user diff --git a/server/server.js b/server/server.js index 2d5a911e..78a7fba3 100644 --- a/server/server.js +++ b/server/server.js @@ -790,8 +790,8 @@ let needSetup = false; bean.parent = monitor.parent; bean.type = monitor.type; bean.url = monitor.url; - bean.wsIgnoreHeaders = monitor.wsIgnoreHeaders; - bean.subprotocol = monitor.subprotocol; + bean.wsIgnoreSecWebsocketAcceptHeader = monitor.wsIgnoreSecWebsocketAcceptHeader; + bean.wsSubprotocol = monitor.wsSubprotocol; bean.method = monitor.method; bean.body = monitor.body; bean.headers = monitor.headers; diff --git a/src/lang/en.json b/src/lang/en.json index 22d5ac2e..b91eb6af 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -86,39 +86,39 @@ "ignoreTLSError": "Ignore TLS/SSL errors for HTTPS websites", "ignoreTLSErrorGeneral": "Ignore TLS/SSL error for connection", "upsideDownModeDescription": "Flip the status upside down. If the service is reachable, it is DOWN.", - "wsIgnoreHeadersDescription": "The websocket upgrade succeeds, but the server does not reply with Sec-WebSocket-Accept header.", - "Ignore Sec-WebSocket-Accept header": "Ignore Sec-WebSocket-Accept header", - "wamp": "WAMP (The WebSocket Application Messaging Protocol)", - "sip": "WebSocket Transport for SIP (Session Initiation Protocol)", - "notificationchannel-netapi-rest.openmobilealliance.org": "OMA RESTful Network API for Notification Channel", - "wpcp": "Web Process Control Protocol (WPCP)", - "amqp": "Advanced Message Queuing Protocol (AMQP) 1.0+", - "jsflow": "jsFlow pubsub/queue protocol", - "rwpcp": "Reverse Web Process Control Protocol (RWPCP)", - "xmpp": "WebSocket Transport for the Extensible Messaging and Presence Protocol (XMPP)", - "ship": "SHIP - Smart Home IP", - "mielecloudconnect": "Miele Cloud Connect Protocol", - "v10.pcp.sap.com": "Push Channel Protocol", - "msrp": "WebSocket Transport for MSRP (Message Session Relay Protocol)", - "bfcp": "WebSocket Transport for BFCP (Binary Floor Control Protocol)", - "sldp.softvelum.com": "Softvelum Low Delay Protocol", - "opcua+uacp": "OPC UA Connection Protocol", - "opcua+uajson": "OPC UA JSON Encoding", - "v1.swindon-lattice+json": "Swindon Web Server Protocol (JSON encoding)", - "v1.usp": "USP (Broadband Forum User Services Platform)", - "coap": "Constrained Application Protocol (CoAP)", - "webrtc.softvelum.com": "Softvelum WebSocket signaling protocol", - "cobra.v2.json": "Cobra Real Time Messaging Protocol", - "drp": "Declarative Resource Protocol", - "hub.bsc.bacnet.org": "BACnet Secure Connect Hub Connection", - "dc.bsc.bacnet.org": "BACnet Secure Connect Direct Connection", - "jmap": "WebSocket Transport for JMAP (JSON Meta Application Protocol)", - "t140": "ITU-T T.140 Real-Time Text", - "done": "Done.best IoT Protocol", - "collection-update": "The Collection Update Websocket Subprotocol", - "text.ircv3.net": "Text IRC Protocol", - "binary.ircv3.net": "Binary IRC Protocol", - "v3.penguin-stats.live+proto": "Penguin Statistics Live Protocol v3 (Protobuf encoding)", + "ignoreSecWebsocketAcceptHeaderDescription": "Allows the server to not reply with Sec-WebSocket-Accept header, if the websocket upgrade succeeds.", + "Ignore Sec-WebSocket-Accept header": "Ignore {0} header", + "WebSocket Application Messaging Protocol": "WAMP (The WebSocket Application Messaging Protocol)", + "Session Initiation Protocol": "WebSocket Transport for SIP (Session Initiation Protocol)", + "Network API for Notification Channel": "OMA RESTful Network API for Notification Channel", + "Web Process Control Protocol": "Web Process Control Protocol (WPCP)", + "Advanced Message Queuing Protocol": "Advanced Message Queuing Protocol (AMQP) 1.0+", + "jsflow": "jsFlow pubsub/queue Protocol", + "Reverse Web Process Control": "Reverse Web Process Control Protocol (RWPCP)", + "Extensible Messaging and Presence Protocol": "WebSocket Transport for the Extensible Messaging and Presence Protocol (XMPP)", + "Smart Home IP": "SHIP - Smart Home IP", + "Miele Cloud Connect Protocol": "Miele Cloud Connect Protocol", + "Push Channel Protocol": "Push Channel Protocol", + "Message Session Relay Protocol": "WebSocket Transport for MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "WebSocket Transport for BFCP (Binary Floor Control Protocol)", + "Softvelum Low Delay Protocol": "Softvelum Low Delay Protocol", + "OPC UA Connection Protocol": "OPC UA Connection Protocol", + "OPC UA JSON Encoding": "OPC UA JSON Encoding", + "Swindon Web Server Protocol": "Swindon Web Server Protocol (JSON encoding)", + "Broadband Forum User Services Platform": "USP (Broadband Forum User Services Platform)", + "Constrained Application Protocol": "Constrained Application Protocol (CoAP)", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket Signaling Protocol", + "Cobra Real Time Messaging Protocol": "Cobra Real Time Messaging Protocol", + "Declarative Resource Protocol": "Declarative Resource Protocol", + "BACnet Secure Connect Hub Connection": "BACnet Secure Connect Hub Connection", + "BACnet Secure Connect Direct Connection": "BACnet Secure Connect Direct Connection", + "WebSocket Transport for JMAP": "WebSocket Transport for JMAP (JSON Meta Application Protocol)", + "ITU-T T.140 Real-Time Text": "ITU-T T.140 Real-Time Text", + "Done.best IoT Protocol": "Done.best IoT Protocol", + "Collection Update": "The Collection Update Websocket Subprotocol", + "Text IRC Protocol": "Text IRC Protocol", + "Binary IRC Protocol": "Binary IRC Protocol", + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protocol v3 (Protobuf encoding)", "maxRedirectDescription": "Maximum number of redirects to follow. Set to 0 to disable redirects.", "Upside Down Mode": "Upside Down Mode", "Max. Redirects": "Max. Redirects", diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index aa686850..27832d0a 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -122,15 +122,15 @@
- +
- - - + @@ -141,28 +141,28 @@ - - - - + + + + - - - - - - + + + + + + - - - - - - + + + + + + - + @@ -172,20 +172,20 @@ - - - - - - - - + + + + + + + + - + - - - + + + @@ -697,12 +697,12 @@
- - + + + Sec-Websocket-Accept +
- {{ $t("wsIgnoreHeadersDescription") }} + {{ $t("ignoreSecWebsocketAcceptHeaderDescription") }}
@@ -1159,7 +1159,7 @@ const monitorDefaults = { name: "", parent: null, url: "https://", - wsIgnoreHeaders: false, + wsSubprotocol: "", method: "GET", interval: 60, retryInterval: 60, diff --git a/test/backend-test/test-websocket.js b/test/backend-test/test-websocket.js index 72bf549e..a84930bd 100644 --- a/test/backend-test/test-websocket.js +++ b/test/backend-test/test-websocket.js @@ -11,7 +11,7 @@ describe("Websocket Test", { const monitor = { url: "wss://example.org", - wsIgnoreHeaders: false, + wsIgnoreSecWebsocketAcceptHeader: false, }; const heartbeat = { @@ -33,7 +33,7 @@ describe("Websocket Test", { const monitor = { url: "wss://echo.websocket.org", - wsIgnoreHeaders: false, + wsIgnoreSecWebsocketAcceptHeader: false, }; const heartbeat = { @@ -57,7 +57,7 @@ describe("Websocket Test", { const monitor = { url: "ws://localhost:8080", - wsIgnoreHeaders: false, + wsIgnoreSecWebsocketAcceptHeader: false, }; const heartbeat = { @@ -74,12 +74,12 @@ describe("Websocket Test", { assert.deepStrictEqual(heartbeat, expected); }); - test("Test a non compliant WS server without ignore", async () => { + test("Non compliant WS server without IgnoreSecWebsocket", async () => { const websocketMonitor = new WebSocketMonitorType(); const monitor = { url: "wss://c.img-cdn.net/yE4s7KehTFyj/", - wsIgnoreHeaders: false, + wsIgnoreSecWebsocketAcceptHeader: false, }; const heartbeat = { @@ -96,12 +96,12 @@ describe("Websocket Test", { assert.deepStrictEqual(heartbeat, expected); }); - test("Test a non compliant WS server with ignore", async () => { + test("Non compliant WS server with IgnoreSecWebsocket", async () => { const websocketMonitor = new WebSocketMonitorType(); const monitor = { url: "wss://c.img-cdn.net/yE4s7KehTFyj/", - wsIgnoreHeaders: true, + wsIgnoreSecWebsocketAcceptHeader: true, }; const heartbeat = { @@ -117,4 +117,71 @@ describe("Websocket Test", { await websocketMonitor.check(monitor, heartbeat, {}); assert.deepStrictEqual(heartbeat, expected); }); + + test("Compliant WS server with IgnoreSecWebsocket", async () => { + const websocketMonitor = new WebSocketMonitorType(); + + const monitor = { + url: "wss://echo.websocket.org", + wsIgnoreSecWebsocketAcceptHeader: true, + }; + + const heartbeat = { + msg: "", + status: PENDING, + }; + + const expected = { + msg: "101 - OK", + status: UP, + }; + + await websocketMonitor.check(monitor, heartbeat, {}); + assert.deepStrictEqual(heartbeat, expected); + }); + + test("Non WS server with IgnoreSecWebsocket", async () => { + const websocketMonitor = new WebSocketMonitorType(); + + const monitor = { + url: "wss://example.org", + wsIgnoreSecWebsocketAcceptHeader: true, + }; + + const heartbeat = { + msg: "", + status: PENDING, + }; + + const expected = { + msg: "Unexpected server response: 200", + status: DOWN, + }; + + await websocketMonitor.check(monitor, heartbeat, {}); + assert.deepStrictEqual(heartbeat, expected); + }); + + test("Secure Websocket with Subprotocol", async () => { + const websocketMonitor = new WebSocketMonitorType(); + + const monitor = { + url: "wss://echo.websocket.org", + wsIgnoreSecWebsocketAcceptHeader: false, + wsSubprotocol: "ocpp1.6", + }; + + const heartbeat = { + msg: "", + status: PENDING, + }; + + const expected = { + msg: "Server sent no subprotocol", + status: DOWN, + }; + + await websocketMonitor.check(monitor, heartbeat, {}); + assert.deepStrictEqual(heartbeat, expected); + }); }); From 722a081adc3960cd0219e82f00dd9246a303e387 Mon Sep 17 00:00:00 2001 From: PoleTransformer Date: Sun, 30 Mar 2025 15:54:30 -0700 Subject: [PATCH 16/91] fix linter --- src/pages/EditMonitor.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 27832d0a..6af2d466 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -698,9 +698,9 @@
- - Sec-Websocket-Accept - + + Sec-Websocket-Accept +
{{ $t("ignoreSecWebsocketAcceptHeaderDescription") }}
From ee4a34a94f94b0c36b9c963cbfee399d09b793b3 Mon Sep 17 00:00:00 2001 From: PoleTransformer Date: Wed, 2 Apr 2025 18:28:37 -0700 Subject: [PATCH 17/91] add hyperlinks + open new tabs --- src/lang/en.json | 1 + src/pages/EditMonitor.vue | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/lang/en.json b/src/lang/en.json index 3d70d6f2..fdcb3706 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -88,6 +88,7 @@ "upsideDownModeDescription": "Flip the status upside down. If the service is reachable, it is DOWN.", "ignoreSecWebsocketAcceptHeaderDescription": "Allows the server to not reply with Sec-WebSocket-Accept header, if the websocket upgrade succeeds.", "Ignore Sec-WebSocket-Accept header": "Ignore {0} header", + "wsSubprotocolDescription": "For more information on subprotocols, please consult the {documentation}", "WebSocket Application Messaging Protocol": "WAMP (The WebSocket Application Messaging Protocol)", "Session Initiation Protocol": "WebSocket Transport for SIP (Session Initiation Protocol)", "Network API for Notification Channel": "OMA RESTful Network API for Notification Channel", diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 6af2d466..559f77fd 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -191,6 +191,11 @@ + + +
@@ -410,8 +415,8 @@
- jsonata.org - {{ $t('playground') }} + jsonata.org + {{ $t('playground') }}
@@ -550,8 +555,8 @@ - jsonata.org - {{ $t('here') }} + jsonata.org + {{ $t('here') }}
@@ -621,7 +626,7 @@
@@ -630,8 +635,8 @@ - jsonata.org - {{ $t('here') }} + jsonata.org + {{ $t('here') }}
From 5bf9a5152256b3331165a966de6d831d47f5bd46 Mon Sep 17 00:00:00 2001 From: Nelson Chan <3271800+chakflying@users.noreply.github.com> Date: Mon, 1 Dec 2025 10:12:47 +0800 Subject: [PATCH 18/91] Feat: Add warning for cert. hostname mismatch (#3942) Co-authored-by: Louis Lam Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- server/model/monitor.js | 4 +- server/util-server.js | 24 ++++++++++ src/icon.js | 2 + src/lang/en.json | 1 + src/pages/Details.vue | 21 +++++---- test/backend-test/test-cert-hostname-match.js | 47 +++++++++++++++++++ 6 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 test/backend-test/test-cert-hostname-match.js diff --git a/server/model/monitor.js b/server/model/monitor.js index 2ea2f958..b2ea982c 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -9,7 +9,7 @@ const { log, UP, DOWN, PENDING, MAINTENANCE, flipStatus, MAX_INTERVAL_SECOND, MI PING_PER_REQUEST_TIMEOUT_MIN, PING_PER_REQUEST_TIMEOUT_MAX, PING_PER_REQUEST_TIMEOUT_DEFAULT } = require("../../src/util"); const { ping, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, setSetting, httpNtlm, radius, - kafkaProducerAsync, getOidcTokenClientCredentials, rootCertificatesFingerprints, axiosAbortSignal + kafkaProducerAsync, getOidcTokenClientCredentials, rootCertificatesFingerprints, axiosAbortSignal, checkCertificateHostname } = require("../util-server"); const { R } = require("redbean-node"); const { BeanModel } = require("redbean-node/dist/bean-model"); @@ -565,6 +565,7 @@ class Monitor extends BeanModel { tlsSocket.once("secureConnect", async () => { tlsInfo = checkCertificate(tlsSocket); tlsInfo.valid = tlsSocket.authorized || false; + tlsInfo.hostnameMatchMonitorUrl = checkCertificateHostname(tlsInfo.certInfo.raw, this.getUrl()?.hostname); await this.handleTlsInfo(tlsInfo); }); @@ -587,6 +588,7 @@ class Monitor extends BeanModel { if (tlsSocket) { tlsInfo = checkCertificate(tlsSocket); tlsInfo.valid = tlsSocket.authorized || false; + tlsInfo.hostnameMatchMonitorUrl = checkCertificateHostname(tlsInfo.certInfo.raw, this.getUrl()?.hostname); await this.handleTlsInfo(tlsInfo); } diff --git a/server/util-server.js b/server/util-server.js index 250f897b..80110399 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -636,6 +636,30 @@ exports.checkCertificate = function (socket) { }; }; +/** + * Checks if the certificate is valid for the provided hostname. + * Defaults to true if feature `X509Certificate` is not available, or input is not valid. + * @param {Buffer} certBuffer - The certificate buffer. + * @param {string} hostname - The hostname to compare against. + * @returns {boolean} True if the certificate is valid for the provided hostname, false otherwise. + */ +exports.checkCertificateHostname = function (certBuffer, hostname) { + let X509Certificate; + try { + X509Certificate = require("node:crypto").X509Certificate; + } catch (_) { + // X509Certificate is not available in this version of Node.js + return true; + } + + if (!X509Certificate || !certBuffer || !hostname) { + return true; + } + + let certObject = new X509Certificate(certBuffer); + return certObject.checkHost(hostname) !== undefined; +}; + /** * Check if the provided status code is within the accepted ranges * @param {number} status The status code to check diff --git a/src/icon.js b/src/icon.js index fc50c8a1..882c0b56 100644 --- a/src/icon.js +++ b/src/icon.js @@ -12,6 +12,7 @@ import { faArrowUp, faCog, faEdit, + faExclamationTriangle, faEye, faEyeSlash, faList, @@ -60,6 +61,7 @@ library.add( faArrowUp, faCog, faEdit, + faExclamationTriangle, faEye, faEyeSlash, faList, diff --git a/src/lang/en.json b/src/lang/en.json index 968b4433..0d076db0 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -445,6 +445,7 @@ "Query": "Query", "settingsCertificateExpiry": "TLS Certificate Expiry", "certificationExpiryDescription": "HTTPS Monitors trigger notification when TLS certificate expires in:", + "certHostnameMismatch": "Certificate hostname does not match the monitor URL.", "Setup Docker Host": "Set Up Docker Host", "Connection Type": "Connection Type", "Docker Daemon": "Docker Daemon", diff --git a/src/pages/Details.vue b/src/pages/Details.vue index db0a890d..ca46c19f 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -294,15 +294,8 @@ />)

- {{ tlsInfo.certInfo.daysRemaining }} - {{ - $tc("day", tlsInfo.certInfo.daysRemaining) - }} + {{ tlsInfo.certInfo.daysRemaining }} {{ $tc("day", tlsInfo.certInfo.daysRemaining) }} +
@@ -1140,4 +1133,14 @@ table { opacity: 0.7; } } + +.cert-info-warn { + margin-left: 4px; + opacity: 0.5; + + .dark & { + opacity: 0.7; + } +} + diff --git a/test/backend-test/test-cert-hostname-match.js b/test/backend-test/test-cert-hostname-match.js new file mode 100644 index 00000000..fb7c822e --- /dev/null +++ b/test/backend-test/test-cert-hostname-match.js @@ -0,0 +1,47 @@ +const { test } = require("node:test"); + +const assert = require("node:assert"); + +const { checkCertificateHostname } = require("../../server/util-server"); + +const testCert = ` +-----BEGIN CERTIFICATE----- +MIIFCTCCA/GgAwIBAgISBEROD0/r+BjpW4TvWCcZYxjpMA0GCSqGSIb3DQEBCwUA +MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD +EwJSMzAeFw0yMzA5MDQxMjExMThaFw0yMzEyMDMxMjExMTdaMBQxEjAQBgNVBAMM +CSouZWZmLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALywpmHr +GOFlhw9CcW11fVloL6dceeUexbIwVd/gOt0/rIlgBViOGCh1pFYA/Essty4vXBzx +cp6W4WurmwU6ZOJA0/T6rxnmsjxSdrHVGBGgW18HJ9IWqBl9MigjpRo9h4SlAPJq +cAsiBfPhQ0oSe/8IqwgKA4HTvlcTf5/HKnbe0MyQt7WNILWHm+zpfLE0AmLVXxqA +MNc/ynQDLTsWDZnqqri4MKOW1yOAMbUoAWSsNaagoGnZU4bg8uhu/2JTi/vdjl0g +fTDOjsELc70cWekZ9Mv4ND4w3SEthotbMCCtZE5bUqcGzSm4pQEJ37kQ7xjJ0onT +RRcuZI6/jDWzwZ0CAwEAAaOCAjUwggIxMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUE +FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU +hTqVTd8TZ2pknzGJtKw2JaIrPJAwHwYDVR0jBBgwFoAUFC6zF7dYVsuuUAlA5h+v +nYsUwsYwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUFBzABhhVodHRwOi8vcjMuby5s +ZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9yMy5pLmxlbmNyLm9yZy8wPwYD +VR0RBDgwNoIJKi5lZmYub3JnghEqLnN0YWdpbmcuZWZmLm9yZ4IWd3d3Lmh0dHBz +LXJ1bGVzZXRzLm9yZzATBgNVHSAEDDAKMAgGBmeBDAECATCCAQMGCisGAQQB1nkC +BAIEgfQEgfEA7wB2ALc++yTfnE26dfI5xbpY9Gxd/ELPep81xJ4dCYEl7bSZAAAB +imBRp0EAAAQDAEcwRQIhAMW3HZwWZWXPWfahH2pr/lxCcoSluHv2huAW6rlzU3zn +AiAOzD/p8F3gT1bzDgdSW+X5WDBeU+EutRbHMSV+Cx0mZwB1AHoyjFTYty22IOo4 +4FIe6YQWcDIThU070ivBOlejUutSAAABimBRqRQAAAQDAEYwRAIgFXvRRZS3xx83 +XdTsnto5SxSnGi1+YfzYobMdV1yqHGACIDurLvkt58TwifUbyXflGZJmOMhcC2G1 +KUd29yCUjIahMA0GCSqGSIb3DQEBCwUAA4IBAQA6t2F3PKMLlb2A/JsQhPFUJLS3 +6cx+97dzROQLBdnUQIMxPkJBN/lltNdsVxJa4A3DMbrJOayefX2l8UIvFiEFVseF +WrxbmXDF68fwhBKBgeqZ25/S8jEdP5PWYWXHgXvx0zRdhfe9vuba5WeFyz79cR7K +t3bSyv6GMJ2z3qBkVFGHSeYakcxPWes3CNmGxInwZNBXA2oc7xuncFrjno/USzUI +nEefDfF3H3jC+0iP3IpsK8orwgWz4lOkcMYdan733lSZuVJ6pm7C9phTV04NGF3H +iPenGDCg1awOyRnvxNq1MtMDkR9AHwksukzwiYNexYjyvE2t0UzXhFXwazQ3 +-----END CERTIFICATE----- +`; + +test("Certificate and hostname match", () => { + const result = checkCertificateHostname(testCert, "www.eff.org"); + assert.strictEqual(result, true); +}); + +test("Certificate and hostname mismatch", () => { + const result = checkCertificateHostname(testCert, "example.com"); + assert.strictEqual(result, false); +}); From 756f1792198630e132d535111fea18cfee4a393d Mon Sep 17 00:00:00 2001 From: Amirparsa Baghdadi <76398455+amirparsadd@users.noreply.github.com> Date: Wed, 3 Dec 2025 16:49:19 +0330 Subject: [PATCH 19/91] feat: make mariadb max pool connections controllable via env (#6386) Co-authored-by: Frank Elsinga --- server/database.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/server/database.js b/server/database.js index d22ceb29..a65a7fdc 100644 --- a/server/database.js +++ b/server/database.js @@ -223,9 +223,24 @@ class Database { let config = {}; + let parsedMaxPoolConnections = parseInt(process.env.UPTIME_KUMA_DB_POOL_MAX_CONNECTIONS); + + if (!process.env.UPTIME_KUMA_DB_POOL_MAX_CONNECTIONS) { + parsedMaxPoolConnections = 10; + } else if (Number.isNaN(parsedMaxPoolConnections)) { + log.warn("db", "Max database connections defaulted to 10 because UPTIME_KUMA_DB_POOL_MAX_CONNECTIONS was invalid."); + parsedMaxPoolConnections = 10; + } else if (parsedMaxPoolConnections < 1) { + log.warn("db", "Max database connections defaulted to 10 because UPTIME_KUMA_DB_POOL_MAX_CONNECTIONS was less than 1."); + parsedMaxPoolConnections = 10; + } else if (parsedMaxPoolConnections > 100) { + log.warn("db", "Max database connections capped to 100 because Mysql/Mariadb connections are heavy. consider using a proxy like ProxySQL or MaxScale."); + parsedMaxPoolConnections = 100; + } + let mariadbPoolConfig = { min: 0, - max: 10, + max: parsedMaxPoolConnections, idleTimeoutMillis: 30000, }; From 48bc6cd029cbee08cc77b0cfb0b426b04678dae0 Mon Sep 17 00:00:00 2001 From: Yernar Tursynali Date: Wed, 3 Dec 2025 18:29:36 +0500 Subject: [PATCH 20/91] fix: Optimize margins of admin buttons on the status page for mobile devices (#4727) Co-authored-by: Frank Elsinga --- src/pages/StatusPage.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/StatusPage.vue b/src/pages/StatusPage.vue index bf35ab21..74a5c3f6 100644 --- a/src/pages/StatusPage.vue +++ b/src/pages/StatusPage.vue @@ -161,14 +161,14 @@ -
+
- - + {{ $t("Go to Dashboard") }} From 91edeaeb9c1c5e6aee909572b1b83d438f14c709 Mon Sep 17 00:00:00 2001 From: Dalton Pearson <32880838+daltonpearson@users.noreply.github.com> Date: Thu, 4 Dec 2025 09:16:06 -0500 Subject: [PATCH 21/91] Extracted the postgresql monitor to its own monitor-type (#6443) Co-authored-by: Dalton Pearson Co-authored-by: Frank Elsinga --- package-lock.json | 64 +++++++++++++++++++++-- package.json | 3 +- server/model/monitor.js | 10 +--- server/monitor-types/postgres.js | 83 ++++++++++++++++++++++++++++++ server/uptime-kuma-server.js | 2 + server/util-server.js | 60 --------------------- test/backend-test/test-postgres.js | 60 +++++++++++++++++++++ 7 files changed, 209 insertions(+), 73 deletions(-) create mode 100644 server/monitor-types/postgres.js create mode 100644 test/backend-test/test-postgres.js diff --git a/package-lock.json b/package-lock.json index a1c94ee7..8c0506ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -98,6 +98,7 @@ "@playwright/test": "~1.39.0", "@popperjs/core": "~2.10.2", "@testcontainers/hivemq": "^10.13.1", + "@testcontainers/postgresql": "^11.9.0", "@testcontainers/rabbitmq": "^10.13.2", "@types/bootstrap": "~5.1.9", "@types/node": "^20.8.6", @@ -5680,6 +5681,63 @@ "testcontainers": "^10.28.0" } }, + "node_modules/@testcontainers/postgresql": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/@testcontainers/postgresql/-/postgresql-11.9.0.tgz", + "integrity": "sha512-beLyLdLygFllktviM132Xd6tQ4i5FnuyZP+4BQEjUb5sJYHYnIrV/ZBzRRflIlF8gugt1GXgudkmr/HxM9vtKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "testcontainers": "^11.9.0" + } + }, + "node_modules/@testcontainers/postgresql/node_modules/docker-compose": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-1.3.0.tgz", + "integrity": "sha512-7Gevk/5eGD50+eMD+XDnFnOrruFkL0kSd7jEG4cjmqweDSUhB7i0g8is/nBdVpl+Bx338SqIB2GLKm32M+Vs6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "yaml": "^2.2.2" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@testcontainers/postgresql/node_modules/testcontainers": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-11.9.0.tgz", + "integrity": "sha512-SQ6OqQUig7HcGVF72i+ZVIMvxPSpEz8cgC/B63ekqMzgf98DnveoBbOmqux/Wa5wQAQCt4mEPNMa/Jz7vMg9fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@balena/dockerignore": "^1.0.2", + "@types/dockerode": "^3.3.47", + "archiver": "^7.0.1", + "async-lock": "^1.4.1", + "byline": "^5.0.0", + "debug": "^4.4.3", + "docker-compose": "^1.3.0", + "dockerode": "^4.0.9", + "get-port": "^7.1.0", + "proper-lockfile": "^4.1.2", + "properties-reader": "^2.3.0", + "ssh-remote-port-forward": "^1.0.4", + "tar-fs": "^3.1.1", + "tmp": "^0.2.5", + "undici": "^7.16.0" + } + }, + "node_modules/@testcontainers/postgresql/node_modules/undici": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", + "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, "node_modules/@testcontainers/rabbitmq": { "version": "10.28.0", "resolved": "https://registry.npmjs.org/@testcontainers/rabbitmq/-/rabbitmq-10.28.0.tgz", @@ -5789,9 +5847,9 @@ } }, "node_modules/@types/dockerode": { - "version": "3.3.44", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.44.tgz", - "integrity": "sha512-fUpIHlsbYpxAJb285xx3vp7q5wf5mjqSn3cYwl/MhiM+DB99OdO5sOCPlO0PjO+TyOtphPs7tMVLU/RtOo/JjA==", + "version": "3.3.47", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.47.tgz", + "integrity": "sha512-ShM1mz7rCjdssXt7Xz0u1/R2BJC7piWa3SJpUBiVjCf2A3XNn4cP6pUVaD8bLanpPVVn4IKzJuw3dOvkJ8IbYw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 343de935..6088015b 100644 --- a/package.json +++ b/package.json @@ -121,6 +121,7 @@ "nanoid": "~3.3.4", "net-snmp": "^3.11.2", "node-cloudflared-tunnel": "~1.0.9", + "node-radius-utils": "~1.2.0", "nodemailer": "~6.9.13", "nostr-tools": "^2.10.4", "notp": "~2.0.3", @@ -135,7 +136,6 @@ "protobufjs": "~7.2.4", "qs": "~6.10.4", "radius": "~1.1.4", - "node-radius-utils": "~1.2.0", "redbean-node": "~0.3.0", "redis": "~5.9.0", "semver": "~7.5.4", @@ -159,6 +159,7 @@ "@playwright/test": "~1.39.0", "@popperjs/core": "~2.10.2", "@testcontainers/hivemq": "^10.13.1", + "@testcontainers/postgresql": "^11.9.0", "@testcontainers/rabbitmq": "^10.13.2", "@types/bootstrap": "~5.1.9", "@types/node": "^20.8.6", diff --git a/server/model/monitor.js b/server/model/monitor.js index b2ea982c..eff8add9 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -8,7 +8,7 @@ const { log, UP, DOWN, PENDING, MAINTENANCE, flipStatus, MAX_INTERVAL_SECOND, MI PING_COUNT_MIN, PING_COUNT_MAX, PING_COUNT_DEFAULT, PING_PER_REQUEST_TIMEOUT_MIN, PING_PER_REQUEST_TIMEOUT_MAX, PING_PER_REQUEST_TIMEOUT_DEFAULT } = require("../../src/util"); -const { ping, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, setSetting, httpNtlm, radius, +const { ping, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, mysqlQuery, setSetting, httpNtlm, radius, kafkaProducerAsync, getOidcTokenClientCredentials, rootCertificatesFingerprints, axiosAbortSignal, checkCertificateHostname } = require("../util-server"); const { R } = require("redbean-node"); @@ -783,14 +783,6 @@ class Monitor extends BeanModel { await mssqlQuery(this.databaseConnectionString, this.databaseQuery || "SELECT 1"); - bean.msg = ""; - bean.status = UP; - bean.ping = dayjs().valueOf() - startTime; - } else if (this.type === "postgres") { - let startTime = dayjs().valueOf(); - - await postgresQuery(this.databaseConnectionString, this.databaseQuery || "SELECT 1"); - bean.msg = ""; bean.status = UP; bean.ping = dayjs().valueOf() - startTime; diff --git a/server/monitor-types/postgres.js b/server/monitor-types/postgres.js new file mode 100644 index 00000000..6d694019 --- /dev/null +++ b/server/monitor-types/postgres.js @@ -0,0 +1,83 @@ +const { MonitorType } = require("./monitor-type"); +const { log, UP } = require("../../src/util"); +const dayjs = require("dayjs"); +const postgresConParse = require("pg-connection-string").parse; +const { Client } = require("pg"); + +class PostgresMonitorType extends MonitorType { + name = "postgres"; + + /** + * @inheritdoc + */ + async check(monitor, heartbeat, _server) { + let startTime = dayjs().valueOf(); + + let query = monitor.databaseQuery; + // No query provided by user, use SELECT 1 + if (!query || (typeof query === "string" && query.trim() === "")) { + query = "SELECT 1"; + } + await this.postgresQuery(monitor.databaseConnectionString, query); + + heartbeat.msg = ""; + heartbeat.status = UP; + heartbeat.ping = dayjs().valueOf() - startTime; + } + + /** + * Run a query on Postgres + * @param {string} connectionString The database connection string + * @param {string} query The query to validate the database with + * @returns {Promise<(string[] | object[] | object)>} Response from + * server + */ + async postgresQuery(connectionString, query) { + return new Promise((resolve, reject) => { + const config = postgresConParse(connectionString); + + // Fix #3868, which true/false is not parsed to boolean + if (typeof config.ssl === "string") { + config.ssl = config.ssl === "true"; + } + + if (config.password === "") { + // See https://github.com/brianc/node-postgres/issues/1927 + reject(new Error("Password is undefined.")); + return; + } + const client = new Client(config); + + client.on("error", (error) => { + log.debug("postgres", "Error caught in the error event handler."); + reject(error); + }); + + client.connect((err) => { + if (err) { + reject(err); + client.end(); + } else { + // Connected here + try { + client.query(query, (err, res) => { + if (err) { + reject(err); + } else { + resolve(res); + } + client.end(); + }); + } catch (e) { + reject(e); + client.end(); + } + } + }); + }); + } +} + +module.exports = { + PostgresMonitorType, +}; diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js index d91f6be8..982af6cf 100644 --- a/server/uptime-kuma-server.js +++ b/server/uptime-kuma-server.js @@ -113,6 +113,7 @@ class UptimeKumaServer { UptimeKumaServer.monitorTypeList["tailscale-ping"] = new TailscalePing(); UptimeKumaServer.monitorTypeList["websocket-upgrade"] = new WebSocketMonitorType(); UptimeKumaServer.monitorTypeList["dns"] = new DnsMonitorType(); + UptimeKumaServer.monitorTypeList["postgres"] = new PostgresMonitorType(); UptimeKumaServer.monitorTypeList["mqtt"] = new MqttMonitorType(); UptimeKumaServer.monitorTypeList["smtp"] = new SMTPMonitorType(); UptimeKumaServer.monitorTypeList["group"] = new GroupMonitorType(); @@ -558,6 +559,7 @@ const { RealBrowserMonitorType } = require("./monitor-types/real-browser-monitor const { TailscalePing } = require("./monitor-types/tailscale-ping"); const { WebSocketMonitorType } = require("./monitor-types/websocket-upgrade"); const { DnsMonitorType } = require("./monitor-types/dns"); +const { PostgresMonitorType } = require("./monitor-types/postgres"); const { MqttMonitorType } = require("./monitor-types/mqtt"); const { SMTPMonitorType } = require("./monitor-types/smtp"); const { GroupMonitorType } = require("./monitor-types/group"); diff --git a/server/util-server.js b/server/util-server.js index 80110399..d28f05a9 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -11,8 +11,6 @@ const iconv = require("iconv-lite"); const chardet = require("chardet"); const chroma = require("chroma-js"); const mssql = require("mssql"); -const { Client } = require("pg"); -const postgresConParse = require("pg-connection-string").parse; const mysql = require("mysql2"); const { NtlmClient } = require("./modules/axios-ntlm/lib/ntlmClient.js"); const { Settings } = require("./settings"); @@ -349,64 +347,6 @@ exports.mssqlQuery = async function (connectionString, query) { } }; -/** - * Run a query on Postgres - * @param {string} connectionString The database connection string - * @param {string} query The query to validate the database with - * @returns {Promise<(string[] | object[] | object)>} Response from - * server - */ -exports.postgresQuery = function (connectionString, query) { - return new Promise((resolve, reject) => { - const config = postgresConParse(connectionString); - - // Fix #3868, which true/false is not parsed to boolean - if (typeof config.ssl === "string") { - config.ssl = config.ssl === "true"; - } - - if (config.password === "") { - // See https://github.com/brianc/node-postgres/issues/1927 - reject(new Error("Password is undefined.")); - return; - } - const client = new Client(config); - - client.on("error", (error) => { - log.debug("postgres", "Error caught in the error event handler."); - reject(error); - }); - - client.connect((err) => { - if (err) { - reject(err); - client.end(); - } else { - // Connected here - try { - // No query provided by user, use SELECT 1 - if (!query || (typeof query === "string" && query.trim() === "")) { - query = "SELECT 1"; - } - - client.query(query, (err, res) => { - if (err) { - reject(err); - } else { - resolve(res); - } - client.end(); - }); - } catch (e) { - reject(e); - client.end(); - } - } - }); - - }); -}; - /** * Run a query on MySQL/MariaDB * @param {string} connectionString The database connection string diff --git a/test/backend-test/test-postgres.js b/test/backend-test/test-postgres.js new file mode 100644 index 00000000..71d26d3a --- /dev/null +++ b/test/backend-test/test-postgres.js @@ -0,0 +1,60 @@ +const { describe, test } = require("node:test"); +const assert = require("node:assert"); +const { PostgreSqlContainer } = require("@testcontainers/postgresql"); +const { PostgresMonitorType } = require("../../server/monitor-types/postgres"); +const { UP, PENDING } = require("../../src/util"); + +describe( + "Postgres Single Node", + { + skip: + !!process.env.CI && + (process.platform !== "linux" || process.arch !== "x64"), + }, + () => { + test("Postgres is running", async () => { + // The default timeout of 30 seconds might not be enough for the container to start + const postgresContainer = await new PostgreSqlContainer( + "postgres:latest" + ) + .withStartupTimeout(60000) + .start(); + const postgresMonitor = new PostgresMonitorType(); + const monitor = { + databaseConnectionString: postgresContainer.getConnectionUri(), + }; + + const heartbeat = { + msg: "", + status: PENDING, + }; + + try { + await postgresMonitor.check(monitor, heartbeat, {}); + assert.strictEqual(heartbeat.status, UP); + } finally { + postgresContainer.stop(); + } + }); + + test("Postgres is not running", async () => { + const postgresMonitor = new PostgresMonitorType(); + const monitor = { + databaseConnectionString: "http://localhost:15432", + }; + + const heartbeat = { + msg: "", + status: PENDING, + }; + + // regex match any string + const regex = /.+/; + + await assert.rejects( + postgresMonitor.check(monitor, heartbeat, {}), + regex + ); + }); + } +); From 2135adfed584544fbd136c9a4340cd1fdf6e223e Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 5 Dec 2025 14:04:42 +0800 Subject: [PATCH 22/91] Fix swapped up/down sound in Pushover component (#6458) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Louis Lam --- src/components/notifications/Pushover.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/notifications/Pushover.vue b/src/components/notifications/Pushover.vue index e2fecd29..606a9b15 100644 --- a/src/components/notifications/Pushover.vue +++ b/src/components/notifications/Pushover.vue @@ -17,14 +17,14 @@ - + - + + +
{{ monitor.humanReadableInterval }}
+ +
+ {{ $t("minimumIntervalWarning") }} +
@@ -736,7 +752,19 @@ {{ $t("Heartbeat Retry Interval") }} ({{ $t("retryCheckEverySecond", [ monitor.retryInterval ]) }}) - + +
+ {{ $t("minimumIntervalWarning") }} +
@@ -1251,6 +1279,10 @@ + +

{{ $t("lowIntervalWarning") }}

+

{{ $t("Please use this option carefully!") }}

+
@@ -1261,6 +1293,7 @@ import { useToast } from "vue-toastification"; import ActionSelect from "../components/ActionSelect.vue"; import CopyableInput from "../components/CopyableInput.vue"; import CreateGroupDialog from "../components/CreateGroupDialog.vue"; +import Confirm from "../components/Confirm.vue"; import NotificationDialog from "../components/NotificationDialog.vue"; import DockerHostDialog from "../components/DockerHostDialog.vue"; import RemoteBrowserDialog from "../components/RemoteBrowserDialog.vue"; @@ -1336,6 +1369,7 @@ export default { ProxyDialog, CopyableInput, CreateGroupDialog, + Confirm, NotificationDialog, DockerHostDialog, RemoteBrowserDialog, @@ -1368,6 +1402,10 @@ export default { }, draftGroupName: null, remoteBrowsersEnabled: false, + lowIntervalConfirmation: { + confirmed: false, + editedValue: false, + }, }; }, @@ -1995,6 +2033,11 @@ message HealthCheckResponse { this.monitor.pushToken = genSecret(pushTokenLength); }, + handleIntervalConfirm() { + this.lowIntervalConfirmation.confirmed = true; + this.submit(); + }, + /** * Submit the form data for processing * @returns {Promise} @@ -2003,6 +2046,15 @@ message HealthCheckResponse { this.processing = true; + // Check user has confirmed use of low interval value. Only + // do this if the interval value has changed since last save. + if (this.lowIntervalConfirmation.editedValue && (this.monitor.interval < 20 || this.monitor.retryInterval < 20) && !this.lowIntervalConfirmation.confirmed) { + // The dialog will then re-call submit + this.$refs.confirmLowIntervalValue.show(); + this.processing = false; + return; + } + if (!this.monitor.name) { this.monitor.name = this.defaultFriendlyName; } @@ -2012,6 +2064,9 @@ message HealthCheckResponse { return; } + this.lowIntervalConfirmation.confirmed = false; + this.lowIntervalConfirmation.editedValue = false; + // Beautify the JSON format (only if httpBodyEncoding is not set or === json) if (this.monitor.body && (!this.monitor.httpBodyEncoding || this.monitor.httpBodyEncoding === "json")) { this.monitor.body = JSON.stringify(JSON.parse(this.monitor.body), null, 4); diff --git a/src/util.js b/src/util.js index e6b77d18..a156ae76 100644 --- a/src/util.js +++ b/src/util.js @@ -30,7 +30,7 @@ exports.SQL_DATE_FORMAT = "YYYY-MM-DD"; exports.SQL_DATETIME_FORMAT = "YYYY-MM-DD HH:mm:ss"; exports.SQL_DATETIME_FORMAT_WITHOUT_SECOND = "YYYY-MM-DD HH:mm"; exports.MAX_INTERVAL_SECOND = 2073600; -exports.MIN_INTERVAL_SECOND = 20; +exports.MIN_INTERVAL_SECOND = 1; exports.PING_PACKET_SIZE_MIN = 1; exports.PING_PACKET_SIZE_MAX = 65500; exports.PING_PACKET_SIZE_DEFAULT = 56; diff --git a/src/util.ts b/src/util.ts index f689abbe..2fe92bf7 100644 --- a/src/util.ts +++ b/src/util.ts @@ -44,7 +44,7 @@ export const SQL_DATETIME_FORMAT = "YYYY-MM-DD HH:mm:ss"; export const SQL_DATETIME_FORMAT_WITHOUT_SECOND = "YYYY-MM-DD HH:mm"; export const MAX_INTERVAL_SECOND = 2073600; // 24 days -export const MIN_INTERVAL_SECOND = 20; // 20 seconds +export const MIN_INTERVAL_SECOND = 1; // 1 second // Packet Size limits export const PING_PACKET_SIZE_MIN = 1; From 429ffc98b560afae8d57aa2dcd25cfc35a292878 Mon Sep 17 00:00:00 2001 From: MrEddX Date: Thu, 11 Dec 2025 02:44:25 +0000 Subject: [PATCH 25/91] Translated using Weblate (Bulgarian) Currently translated at 100.0% (1232 of 1232 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (1198 of 1198 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (1193 of 1193 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (1189 of 1189 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (1188 of 1188 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (1186 of 1186 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (1178 of 1178 strings) Co-authored-by: MrEddX Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/bg-BG.json | 62 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index 058aadfd..a8ae230c 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -516,7 +516,7 @@ "Retype the address.": "Повторно въвеждане на адреса.", "Go back to the previous page.": "Да се върнете към предишната страница.", "Coming Soon": "Очаквайте скоро", - "wayToGetClickSendSMSToken": "Можете да получите API потребителско име и API ключ от {0} .", + "wayToGetClickSendSMSToken": "Можете да получите API потребителско име и API ключ от {here}.", "dnsPortDescription": "DNS порт на сървъра. По подразбиране е 53. Можете да го промените по всяко време.", "error": "грешка", "critical": "критично", @@ -1222,5 +1222,63 @@ "Invalid mobile": "Невалиден мобилен телефон [{mobile}]", "Invalid userId": "Невалидно потребителско ID [{userId}]", "Maximum Retries": "Максимален брой повторни опити", - "Number of retry attempts if webhook fails": "Брой повторни опити (на всеки 60-180 секунди), ако уеб куката се првали." + "Number of retry attempts if webhook fails": "Брой повторни опити (на всеки 60-180 секунди), ако уеб куката се првали.", + "HTTP Method": "HTTP Метод", + "webhookPostMethodDesc": "POST е подходящ за повечето съвременни HTTP сървъри.", + "descriptionHelpText": "Показва се на вътрешното табло. Markdown е разрешен и се обработва (запазва интервалите и отстъпите) преди показване.", + "webhookGetMethodDesc": "GET изпраща данни като параметри на заявката и не позволява конфигуриране на тяло. Полезно за задействане на Uptime Kuma Push монитори.", + "deleteGroupMsg": "Сигурни ли сте, че желаете да изтриете тази група?", + "deleteChildrenMonitors": "Също така изтрий директните подмонитори и подподмонитори, ако има такива | Също така изтрий всички {count} директни подмонитори и техните подподмонитори, ако има такива", + "Clone Maintenance": "Клонирай поддръжката", + "ariaPauseMaintenance": "Пауза на този график за поддръжка", + "ariaResumeMaintenance": "Възстанови този график за поддръжка", + "ariaCloneMaintenance": "Създай копие на този график за поддръжка", + "ariaEditMaintenance": "Редактирай този график за поддръжка", + "ariaDeleteMaintenance": "Изтрий този график за поддръжка", + "Template ID": "ID на шаблона", + "wayToGetClickSMSIRTemplateID": "Вашият шаблон трябва да съдържа поле {uptkumaalert}. Можете да създадете нов шаблон {here}.", + "Recipient Numbers": "Номера на получател", + "twilioMessagingServiceSID": "SID на услугата за съобщения (по избор)", + "twilioApiKeyHelptext": "API ключът е по избор, но е препоръчителен. Можете да предоставите или Account SID и AuthToken от страницата на TwilioConsole, или Account SID и двойката Api Key и Api Key secret", + "twilloMessagingServiceSIDHelptext": "Въведете SID на вашата услуга за съобщения тук, ако използвате {twillo_messaging_service_help_link} за управление на податели и функции", + "showOnlyLastHeartbeat": "Показвай само последната проверка", + "Allow Notifications": "Разреши известяванията", + "Webpush Helptext": "Web push работи само със SSL (HTTPS) връзки. За iOS устройства уеб страницата трябва да бъде предварително добавена към началния екран.", + "Notifications Enabled": "Известяванията са активирани", + "Browser not supported": "Браузърът не се поддържа", + "Unable to get permission to notify": "Неуспешно получаване на разрешение за известяване (заявката е отказана или игнорирана).", + "ignoreSecWebsocketAcceptHeaderDescription": "Позволява на сървъра да не отговаря със Sec-WebSocket-Accept хедър, ако надстройката на websocket е успешна.", + "Network API for Notification Channel": "OMA RESTful мрежов API ключ за канал за известия", + "Extensible Messaging and Presence Protocol": "WebSocket транспорт за Extensible Messaging and Presence Protocol (XMPP)", + "Softvelum Low Delay Protocol": "Softvelum протокол с ниска степен закъснение", + "Declarative Resource Protocol": "Declarative Resource протокол", + "WebSocket Transport for JMAP": "WebSocket транспорт за JMAP (JSON Meta Application Protocol)", + "Ignore Sec-WebSocket-Accept header": "Игнорирай {0} хедър", + "wsSubprotocolDescription": "За повече информация относно подпротоколите, моля, вижте {documentation}", + "WebSocket Application Messaging Protocol": "WAMP (The WebSocket Application Messaging Protocol)", + "Session Initiation Protocol": "WebSocket транспорт за SIP (Session Initiation Protocol)", + "Web Process Control Protocol": "Web Process Control Protocol (WPCP)", + "Advanced Message Queuing Protocol": "Advanced Message Queuing Protocol (AMQP) 1.0+", + "jsflow": "jsFlow pubsub/queue протокол", + "Reverse Web Process Control": "Reverse Web Process Control Protocol (RWPCP)", + "Smart Home IP": "SHIP - Smart Home IP", + "Miele Cloud Connect Protocol": "Miele Cloud Connect протокол", + "Push Channel Protocol": "Push Channel протокол", + "Message Session Relay Protocol": "WebSocket транспорт за MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "WebSocket транспорт за BFCP (Binary Floor Control Protocol)", + "OPC UA Connection Protocol": "OPC UA протокол за свързване", + "OPC UA JSON Encoding": "OPC UA JSON кодировка", + "Swindon Web Server Protocol": "Swindon уеб сървърен протокол (JSON кодировка)", + "Broadband Forum User Services Platform": "USP (Broadband Forum User Services Platform)", + "Constrained Application Protocol": "Constrained Application Protocol (CoAP)", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket Signaling протокол", + "Cobra Real Time Messaging Protocol": "Cobra Real Time Messaging протокол", + "BACnet Secure Connect Hub Connection": "BACnet Secure Connect Hub свързване", + "BACnet Secure Connect Direct Connection": "BACnet Secure Connect директна свръзка", + "ITU-T T.140 Real-Time Text": "ITU-T T.140 текст в реално време", + "Done.best IoT Protocol": "Done.best IoT протокол", + "Collection Update": "The Collection Update Websocket подпротокол", + "Text IRC Protocol": "Text IRC протокол", + "Binary IRC Protocol": "Binary IRC протокол", + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live протокол v3 (Protobuf кодировка)" } From dae2dc2e21adce3c70c9537ad2563f9c2065969d Mon Sep 17 00:00:00 2001 From: Gringo Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 26/91] Translated using Weblate (Italian) Currently translated at 100.0% (1198 of 1198 strings) Translated using Weblate (Italian) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Italian) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Italian) Currently translated at 100.0% (1188 of 1188 strings) Translated using Weblate (Italian) Currently translated at 100.0% (1178 of 1178 strings) Co-authored-by: Gringo Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/it-IT.json | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index ead1fd08..661809c7 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -657,7 +657,7 @@ "onebotUserOrGroupId": "Gruppo/ID utente", "Badge Color": "Colore insegna", "Monitor Group": "Gruppo monitoraggio", - "setupDatabaseEmbeddedMariaDB": "Non devi impostare niente. Questa immagine Docker include un MariaDB già configurato e pronto all'uso. Uptime Kuma si collegherà a questo database attraverso l'unix socket.", + "setupDatabaseEmbeddedMariaDB": "Non devi impostare niente. Questa immagine Docker include un database MariaDB già configurato e pronto all'uso. Uptime Kuma si collegherà a questo database attraverso il socket Unix.", "dbName": "Nome Database", "Group": "Gruppo", "pushOthers": "Altro", @@ -685,7 +685,7 @@ "forumPostName": "Nome forum del post", "threadForumPostID": "ID della conversazione / Forum del post", "e.g. {discordThreadID}": "es. {discordThreadID}", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Inserisci il nome di sistema del server a cui ti vuoi connettere o {localhost} se vuoi usare {local_mta}", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Inserisci il nome di sistema del server a cui ti vuoi connettere, o {localhost} se vuoi usare {local_mta}", "templateLimitedToUpDownCertNotifications": "disponibile solo per le notifiche ATTIVO/SPENTO/Scadenza certificato", "emailTemplateMsg": "Messaggio della notifica", "emailTemplateLimitedToUpDownNotification": "disponibile solo per controlli ATTIVO/SPENTO, altrimenti nullo", @@ -875,7 +875,7 @@ "PushDeer Server": "Server PushDeer", "pushDeerServerDescription": "Lascia vuoto per utilizzare il server ufficiale", "PushDeer Key": "Chiave PushDeer", - "wayToGetClickSendSMSToken": "Puoi ottenere il nome utente API e la chiave API da {0}.", + "wayToGetClickSendSMSToken": "Puoi ottenere il nome utente API e la chiave API da {here}.", "Google Analytics ID": "ID di Google Analytics", "API Keys": "Chiavi API", "Expiry date": "Data di scadenza", @@ -1201,5 +1201,29 @@ "Enter a list of mobile": "Inserisci un elenco di cellulari", "Invalid userId": "ID utente non valido [{userId}]", "Maximum Retries": "Tentativi massimi", - "Number of retry attempts if webhook fails": "Numero di tentativi di ripetizione (ogni 60-180 secondi) se il webhook fallisce." + "Number of retry attempts if webhook fails": "Numero di tentativi di ripetizione (ogni 60-180 secondi) se il webhook fallisce.", + "HTTP Method": "Metodo HTTP", + "webhookPostMethodDesc": "POST è adatto alla maggior parte dei server HTTP moderni.", + "webhookGetMethodDesc": "GET invia dati come parametri di query e non consente la configurazione di un corpo. Utile per attivare i monitoraggi Push di Uptime Kuma.", + "descriptionHelpText": "Mostrato sul cruscotto interno. La formattazione è consentita e adattata (conserva spazi e rientri) prima della visualizzazione.", + "deleteChildrenMonitors": "Elimina anche i monitoraggi figlio diretti e i relativi figli, se presenti | Elimina anche tutti i {count} monitoraggi figlio diretti e i relativi figli, se presenti", + "Template ID": "ID modello", + "wayToGetClickSMSIRTemplateID": "Il tuo modello deve contenere un campo {uptkumaalert}. Puoi creare un nuovo modello {qui}.", + "deleteGroupMsg": "Sei sicuro di voler eliminare questo gruppo?", + "Clone Maintenance": "Clona manutenzione", + "ariaPauseMaintenance": "Metti in pausa questa pianifica di manutenzione", + "ariaResumeMaintenance": "Riprendi questa pianifica di manutenzione", + "ariaCloneMaintenance": "Crea una copia di questa pianifica di manutenzione", + "ariaEditMaintenance": "Modifica questa pianifica di manutenzione", + "ariaDeleteMaintenance": "Elimina questa pianifica di manutenzione", + "Recipient Numbers": "Numeri dei destinatari", + "twilioApiKeyHelptext": "La chiave API è facoltativa ma consigliata. È possibile fornire l'Account SID e l'AuthToken dalla pagina TwilioConsole oppure l'Account SID e la coppia chiave Api e chiave segreta Api", + "twilioMessagingServiceSID": "SID del servizio di messaggistica (facoltativo)", + "twilloMessagingServiceSIDHelptext": "Inserisci qui il SID del tuo servizio di messaggistica se utilizzi {twillo_messaging_service_help_link} per gestire mittenti e funzionalità", + "Allow Notifications": "Consenti notifiche", + "Browser not supported": "Browser non supportato", + "showOnlyLastHeartbeat": "Mostra solo l'ultimo segnale di vita", + "Notifications Enabled": "Notifiche abilitate", + "Unable to get permission to notify": "Impossibile ottenere l'autorizzazione per la notifica (richiesta negata o ignorata).", + "Webpush Helptext": "La funzionalità Web push funziona solo con connessioni SSL (HTTPS). Per i dispositivi iOS, la pagina web deve essere aggiunta in anticipo alla schermata iniziale." } From 7c1f611d0f351a614206d6a8ad717f21b73fbe6f Mon Sep 17 00:00:00 2001 From: d Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 27/91] Translated using Weblate (Catalan) Currently translated at 52.5% (619 of 1178 strings) Co-authored-by: d Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ca.json | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lang/ca.json b/src/lang/ca.json index dd2183cd..2a1a5d29 100644 --- a/src/lang/ca.json +++ b/src/lang/ca.json @@ -614,5 +614,26 @@ "tagAlreadyStaged": "Aquesta etiqueta (nom i valor) ja està preparada per a aquest lot.", "tagNameExists": "Ja existeix una etiqueta del sistema amb aquest nom. Seleccioneu-la de la llista o utilitzeu un nom diferent.", "high": "alt", - "defaultFriendlyName": "Nou monitor" + "defaultFriendlyName": "Nou monitor", + "descriptionHelpText": "Es mostra al tauler intern. S’admet l’ús de Markdown i s’aplica una neteja segura (es conserven els espais i la sagnia) abans de mostrar-se.", + "Clear All Events": "Neteja tots els esdeveniments", + "Could not clear events": "No s'han pogut netejar {failed}/{total} esdeveniments", + "invertKeywordDescription": "Busca que la paraula clau no hi sigui present, en lloc de que hi sigui.", + "backupDescription": "Podeu fer una còpia de seguretat de tots els monitors i notificacions en un fitxer JSON.", + "backupDescription3": "Les dades sensibles, com els tokens de notificació, estan incloses al fitxer d’exportació. Assegura’t de desar-lo de manera segura.", + "octopushAPIKey": "Clau d’API obtinguda de les credencials HTTP al tauler de control.", + "octopushLogin": "Nom d’usuari de les credencials de l’API HTTP al tauler de control.", + "promosmsLogin": "Nom d’inici de sessió de l’API", + "promosmsPassword": "Contrasenya de l’API", + "supportBaleChatID": "Admet xat directe, grups i ID de canals de xat.", + "wayToGetBaleChatID": "Pots obtenir el teu ID de xat enviant un missatge al bot i anant a aquesta URL per veure el chat_id:", + "wayToGetBaleToken": "Pots obtenir un token des de {0}.", + "Events cleared successfully": "Els esdeveniments s'han esborrat correctament.", + "No monitors found": "No s'ha trobat cap monitor.", + "clearAllEventsMsg": "Esteu segur que voleu suprimir tots els esdeveniments?", + "endpoint": "endpoint", + "keywordDescription": "Cerca paraules clau en HTML pla o en resposta JSON. La cerca distingeix entre majúscules i minúscules.", + "jsonQueryDescription": "Analitza i extreu dades específiques de la resposta JSON del servidor mitjançant una JSON query, o bé utilitza “$” per mostrar la resposta en cru si no s’espera un JSON.\nEl resultat es compara amb el valor esperat com a cadenes de text. Consulta {0} per veure la documentació i fes servir {1} per provar consultes.", + "auto-select": "Selecció Automàtica", + "backupDescription2": "Nota: les dades d’historial i d’esdeveniments no estan incloses." } From af90a3365b992136faa3b5f18dee3e74a8c4a64e Mon Sep 17 00:00:00 2001 From: Aluisio Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 28/91] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1235 of 1235 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1193 of 1193 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1178 of 1178 strings) Co-authored-by: Aluisio Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/pt-BR.json | 71 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 4 deletions(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index ea36be88..936464ef 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -594,7 +594,7 @@ "Saved.": "Salvo.", "Feishu WebHookUrl": "URL de Webhook do Feishu", "serwersmsAPIUser": "Nome de usuário da API (incluindo o prefixo webapi_)", - "setupDatabaseEmbeddedMariaDB": "Você não precisa definir nada. Esta imagem docker incorporou e configurou um MariaDB para você automaticamente. Uptime Kuma se conectará a este banco de dados via soquete unix.", + "setupDatabaseEmbeddedMariaDB": "Você não precisa definir nada. Esta imagem Docker incorporou e configurou um MariaDB para você automaticamente. Uptime Kuma se conectará a este banco de dados via soquete Unix.", "Select": "Selecione", "supportTelegramChatID": "Suporte para o ID de bate-papo direto / grupo / canal do chat", "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Uma lista de Serviços de Notificação pode ser encontrada no Home Assistant em \"Ferramentas de Desenvolvimento > Serviços\". Pesquise por \"notificação\" para encontrar o nome do seu dispositivo/telefone.", @@ -704,7 +704,7 @@ "onebotMessageType": "Tipo de Mensagem do OneBot", "PushDeer Server": "Servidor PushDeer", "PushDeer Key": "Chave PushDeer", - "wayToGetClickSendSMSToken": "Você pode obter o Nome de Usuário da API e a Chave da API em {0}.", + "wayToGetClickSendSMSToken": "Você pode obter o Nome de Usuário da API e a Chave da API aqui {here}.", "Custom Monitor Type": "Tipo de Monitor Personalizado", "Body Encoding": "Codificação do Corpo", "API Keys": "Chaves da API", @@ -946,7 +946,7 @@ "Refresh Interval": "Intervalo de atualização", "Refresh Interval Description": "A página de status fará uma atualização completa do site a cada {0} segundos", "locally configured mail transfer agent": "configurado de agente de transferência de e-mail localmente", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Insira o nome do host do servidor ao qual deseja se conectar ou {localhost} se pretende usar um {local_mta}", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Insira o nome do host do servidor ao qual deseja se conectar, ou {localhost} se pretende usar um {local_mta}", "ignoreTLSErrorGeneral": "Ignorar erro TLS/SSL para conexão", "threemaRecipientTypePhoneFormat": "E.164, sem o sinal de \"+\" no início", "threemaApiAuthenticationSecret": "ID secreto do Gateway", @@ -1184,5 +1184,68 @@ "Dingtalk User List": "Lista de IDs de usuário", "Enter a list of mobile": "Insira uma lista de dispositivos móveis", "Invalid mobile": "Celular inválido [{mobile}]", - "Invalid userId": "ID de usuário inválido [{userId}]" + "Invalid userId": "ID de usuário inválido [{userId}]", + "Number of retry attempts if webhook fails": "Número de tentativas de reenvio (a cada 60-180 segundos) caso o webhook falhe.", + "Maximum Retries": "Máximo de Tentativas", + "HTTP Method": "Método HTTP", + "webhookGetMethodDesc": "GET envia dados como parâmetros de consulta e não permite a configuração de um corpo. Útil para acionar monitores Uptime Kuma Push.", + "descriptionHelpText": "Exibido no painel interno. Markdown é permitido e sanitizado (preserva espaços e recuos) antes da exibição.", + "webhookPostMethodDesc": "O POST é bom para a maioria dos servidores HTTP modernos.", + "Template ID": "ID do modelo", + "wayToGetClickSMSIRTemplateID": "Seu modelo deve conter um campo {uptkumaalert}. Você pode criar um novo modelo {aqui}.", + "Recipient Numbers": "Números de destinatários", + "deleteGroupMsg": "Tem certeza de que deseja excluir este grupo?", + "deleteChildrenMonitors": "Exclua também os monitores filhos diretos e seus filhos, se houver | Exclua também todos os {count} monitores filhos diretos e seus filhos, se houver", + "twilioMessagingServiceSID": "SID do serviço de mensagens (opcional)", + "twilioApiKeyHelptext": "A chave de API é opcional, mas recomendada. Você pode fornecer o SID da conta e o token de autenticação da página do TwilioConsole ou o SID da conta e o par de chave de API e segredo da chave de API", + "twilloMessagingServiceSIDHelptext": "Insira aqui o SID do seu serviço de mensagens se estiver usando {twillo_messaging_service_help_link} para gerenciar remetentes e recursos", + "Clone Maintenance": "Clonar manutenção", + "ariaPauseMaintenance": "Pausar este agendamento de manutenção", + "ariaResumeMaintenance": "Retomar este agendamento de manutenção", + "ariaCloneMaintenance": "Criar uma cópia deste agendamento de manutenção", + "ariaEditMaintenance": "Editar este agendamento de manutenção", + "ariaDeleteMaintenance": "Excluir este agendamento de manutenção", + "showOnlyLastHeartbeat": "Mostrar apenas o último heartbeat", + "Notifications Enabled": "Notificações ativadas", + "Allow Notifications": "Permitir notificações", + "Web Process Control Protocol": "Protocolo de Controle de Processos Web (WPCP)", + "Collection Update": "O subprotocolo Websocket de atualização de coleção", + "Browser not supported": "Navegador não suportado", + "Unable to get permission to notify": "Não foi possível obter permissão para notificar (a solicitação foi negada ou ignorada).", + "ignoreSecWebsocketAcceptHeaderDescription": "Permite que o servidor não responda com o cabeçalho Sec-WebSocket-Accept, caso a atualização do websocket seja bem-sucedida.", + "Ignore Sec-WebSocket-Accept header": "Ignorar cabeçalho {0}", + "wsSubprotocolDescription": "Para obter mais informações sobre sub protocolos, consulte a {documentação}.", + "WebSocket Application Messaging Protocol": "WAMP (O Protocolo de Mensagens de Aplicação WebSocket)", + "Session Initiation Protocol": "Transporte WebSocket para SIP (Protocolo de Iniciação de Sessão)", + "Network API for Notification Channel": "API de rede RESTful OMA para canal de notificação", + "Advanced Message Queuing Protocol": "Protocolo Avançado de Enfileiramento de Mensagens (AMQP) 1.0+", + "jsflow": "Protocolo jsFlow pubsub/queue", + "Reverse Web Process Control": "Protocolo de Controle de Processo Web Reverso (RWPCP)", + "Extensible Messaging and Presence Protocol": "Transporte WebSocket para o Protocolo Extensível de Mensagens e Presença (XMPP)", + "Smart Home IP": "SHIP - IP para Casa Inteligente", + "Miele Cloud Connect Protocol": "Protocolo Miele Cloud Connect", + "Push Channel Protocol": "Protocolo de canal de push", + "Message Session Relay Protocol": "Transporte WebSocket para MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "Transporte WebSocket para BFCP (Protocolo de Controle de Piso Binário)", + "Softvelum Low Delay Protocol": "Protocolo de baixa latência Softvelum", + "OPC UA Connection Protocol": "Protocolo de conexão OPC UA", + "OPC UA JSON Encoding": "Codificação JSON OPC UA", + "Swindon Web Server Protocol": "Protocolo do servidor web Swindon (codificação JSON)", + "Broadband Forum User Services Platform": "USP (Plataforma de Serviços ao Usuário do Fórum de Banda Larga)", + "Constrained Application Protocol": "Protocolo de Aplicação Restrita (CoAP)", + "Softvelum WebSocket signaling protocol": "Protocolo de sinalização WebSocket Softvelum", + "Cobra Real Time Messaging Protocol": "Protocolo de mensagens em tempo real Cobra", + "Declarative Resource Protocol": "Protocolo de Recursos Declarativos", + "BACnet Secure Connect Hub Connection": "Conexão segura BACnet ao Hub", + "BACnet Secure Connect Direct Connection": "Conexão direta segura BACnet", + "WebSocket Transport for JMAP": "Transporte WebSocket para JMAP (Protocolo de Aplicação Meta JSON)", + "ITU-T T.140 Real-Time Text": "Texto em tempo real ITU-T T.140", + "Done.best IoT Protocol": "Protocolo IoT Done.best", + "Text IRC Protocol": "Protocolo IRC de texto", + "Binary IRC Protocol": "Protocolo IRC Binário", + "Penguin Statistics Live Protocol v3": "Protocolo de Estatísticas do Pinguim em Tempo Real v3 (codificação Protobuf)", + "certHostnameMismatch": "O nome do host do certificado não corresponde ao URL do monitor.", + "Webpush Helptext": "A notificação push na web funciona apenas com conexões SSL (HTTPS). Em dispositivos iOS, a página da web precisa ser adicionada à tela inicial previamente.", + "minimumIntervalWarning": "Intervalos abaixo de 20 segundos podem resultar em desempenho ruim.", + "lowIntervalWarning": "Tem certeza de que deseja definir o valor do intervalo abaixo de 20 segundos? O desempenho pode ser degradado, especialmente se houver um grande número de monitores." } From 2379452c6a1f365b3dbb82a1c5d9149cf46ddd68 Mon Sep 17 00:00:00 2001 From: Taskin Khaleque Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 29/91] Translated using Weblate (Bengali) Currently translated at 25.0% (295 of 1178 strings) Co-authored-by: Taskin Khaleque Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bn/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/bn.json | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/lang/bn.json b/src/lang/bn.json index 18772837..22f620d1 100644 --- a/src/lang/bn.json +++ b/src/lang/bn.json @@ -268,5 +268,34 @@ "pushoversounds persistent": "স্থায়ী (দীর্ঘ)", "pushoversounds echo": "Pushover ইকো (দীর্ঘ)", "notificationDescription": "নোটিফিকেশনগুলো কার্যকর হতে হলে সেগুলোকে কোনো মনিটরের সাথে যুক্ত করতে হবে।", - "keywordDescription": "সাধারণ HTML বা JSON প্রতিক্রিয়ায় কীওয়ার্ড অনুসন্ধান করুন। এই অনুসন্ধানটি কেস-সেনসিটিভ।" + "keywordDescription": "সাধারণ HTML বা JSON প্রতিক্রিয়ায় কীওয়ার্ড অনুসন্ধান করুন। এই অনুসন্ধানটি কেস-সেনসিটিভ।", + "pushoversounds updown": "উপরে নিচে", + "pushoversounds vibrate": "শুধু কম্পন", + "pushoversounds none": "নীরব (নিঃশব্দ)", + "pushyAPIKey": "গোপন API কী", + "pushyToken": "ডিভাইস টোকেন", + "Guild ID": "গিল্ড আইডি", + "User Key": "ইউজার কী", + "Device": "ডিভাইস", + "pushoverMessageTtl": "বার্তার TTL (সেকেন্ড)", + "Check octopush prices": "Octopush এর দাম যাচাই করুন {0}", + "issueWithGoogleChatOnAndroidHelptext": "এটি {issuetackerURL}-এর মতো আপস্ট্রিম বাগগুলো এড়িয়ে যেতে সাহায্য করে", + "wayToGetKookBotToken": "অ্যাপ্লিকেশন তৈরি করুন এবং আপনার বট টোকেন {0} থেকে সংগ্রহ করুন", + "wayToGetKookGuildID": "Kook সেটিংসে ‘ডেভেলপার মোড’ চালু করুন, তারপর গিল্ডে ডান ক্লিক করে তার আইডি সংগ্রহ করুন", + "GoogleChat": "গুগল চ্যাট (শুধুমাত্র গুগল ওয়ার্কস্পেসের জন্য)", + "Template plain text instead of using cards": "কার্ডের পরিবর্তে সাধারণ টেক্সট টেমপ্লেট", + "apprise": "অ্যাপরাইজ (৫০টিরও বেশি নোটিফিকেশন পরিষেবা সমর্থন করে)", + "SMS Type": "এসএমএস ধরন", + "pushoverDesc2": "যদি আপনি বিভিন্ন ডিভাইসে নোটিফিকেশন পাঠাতে চান, তাহলে ডিভাইস ঘরটি পূরণ করুন।", + "Message Title": "বার্তার শিরোনাম", + "checkPrice": "{0}-এর দাম যাচাই করুন:", + "apiCredentials": "API শংসাপত্র", + "octopushLegacyHint": "আপনি কি Octopush-এর পুরোনো সংস্করণ (২০১১–২০২০) ব্যবহার করছেন, নাকি নতুন সংস্করণ?", + "Notification Sound": "নোটিফিকেশন সাউন্ড", + "More info on:": "আরও তথ্যের জন্য: {0}", + "pushoverDesc1": "জরুরি অগ্রাধিকার (২)-এর ক্ষেত্রে প্রতিটি পুনরায় চেষ্টার মধ্যে ডিফল্ট ৩০ সেকেন্ডের টাইমআউট থাকে এবং এটি ১ ঘণ্টা পরে মেয়াদোত্তীর্ণ হবে।", + "octopushPhoneNumber": "ফোন নম্বর (আন্তর্জাতিক ফরম্যাট, যেমন: +33612345678) ", + "octopushSMSSender": "এসএমএস প্রেরকের নাম: ৩–১১টি বর্ণ ও সংখ্যা (a-zA-Z0-9) এবং স্পেস ব্যবহারযোগ্য", + "octopushTypePremium": "প্রিমিয়াম (দ্রুত - সতর্কতার জন্য প্রস্তাবিত)", + "octopushTypeLowCost": "লো কস্ট (ধীর — কখনও কখনও অপারেটর দ্বারা ব্লক করা হয়)" } From 0c38d49caea53c1897a65e0029b737180760df16 Mon Sep 17 00:00:00 2001 From: Virenbar Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 30/91] Translated using Weblate (Russian) Currently translated at 100.0% (1193 of 1193 strings) Translated using Weblate (Russian) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Russian) Currently translated at 100.0% (1189 of 1189 strings) Translated using Weblate (Russian) Currently translated at 100.0% (1188 of 1188 strings) Translated using Weblate (Russian) Currently translated at 100.0% (1178 of 1178 strings) Co-authored-by: Virenbar Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 52 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index b7283c5e..8edbda08 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -219,7 +219,7 @@ "wayToGetTelegramToken": "Вы можете получить токен здесь - {0}.", "Chat ID": "ID чата", "supportTelegramChatID": "Поддерживаются ID чатов, групп и каналов", - "wayToGetTelegramChatID": "Вы можете взять ID вашего чата, отправив сообщение боту и перейдя по этому URL для просмотра chat_id:", + "wayToGetTelegramChatID": "Вы можете получить ID вашего чата, отправив сообщение боту и перейдя по этому URL для просмотра chat_id:", "YOUR BOT TOKEN HERE": "ВАШ ТОКЕН БОТА ЗДЕСЬ", "chatIDNotFound": "ID чата не найден; пожалуйста отправьте сначала сообщение боту", "Post URL": "Post URL", @@ -272,7 +272,7 @@ "octopushPhoneNumber": "Номер телефона (межд. формат, например: +79831234567) ", "octopushSMSSender": "Имя отправителя SMS: 3-11 символов алфавита, цифр и пробелов (a-zA-Z0-9)", "LunaSea Device ID": "ID устройства LunaSea", - "Apprise URL": "Ссылка Уведомления", + "Apprise URL": "URL-адрес Apprise", "Example:": "Пример: {0}", "Read more:": "Подробнее: {0}", "Status:": "Статус: {0}", @@ -297,7 +297,7 @@ "promosmsTypeSpeed": "SMS SPEED - наивысший приоритет в системе. Очень быстро и надёжно, но очень дорого (в два раза дороже, чем SMS FULL).", "promosmsPhoneNumber": "Номер телефона (для получателей из Польши можно пропустить код региона)", "promosmsSMSSender": "Имя отправителя SMS: Зарегистрированное или одно из имён по умолчанию: InfoSMS, SMS Info, MaxSMS, INFO, SMS", - "Feishu WebHookUrl": "URL-адрес Feishu WebHook", + "Feishu WebHookUrl": "URL-адрес вебхука Feishu", "matrixHomeserverURL": "URL сервера (вместе с http(s):// и по желанию порт)", "Internal Room Id": "Внутренний ID комнаты", "matrixDesc1": "Внутренний ID комнаты можно найти в Подробностях в параметрах канала вашего Matrix клиента. Он должен выглядеть примерно как !QMdRCpUIfLwsfjxye6:home.server.", @@ -417,8 +417,8 @@ "Bark Endpoint": "Конечная точка Bark", "Bark Group": "Группа Bark", "Bark Sound": "Звук уведомления Bark", - "WebHookUrl": "Url- адрес WebHook", - "SecretKey": "Секретный Ключ", + "WebHookUrl": "URL-адрес вебхука", + "SecretKey": "Секретный ключ", "For safety, must use secret key": "В целях безопасности необходимо использовать секретный ключ", "Device Token": "Токен устройства", "Platform": "Платформа", @@ -468,7 +468,7 @@ "onebotPrivateMessage": "Private", "onebotUserOrGroupId": "ID группы/пользователя", "onebotSafetyTips": "В целях безопасности необходимо установить токен доступа", - "PushDeer Key": "ключ PushDeer", + "PushDeer Key": "Ключ PushDeer", "Footer Text": "Текст нижнего колонтитула", "Show Powered By": "Показывать на чем создано", "Domain Names": "Доменные имена", @@ -528,7 +528,7 @@ "Retype the address.": "Повторите адрес.", "Go back to the previous page.": "Вернуться на предыдущую страницу.", "Coming Soon": "Скоро", - "wayToGetClickSendSMSToken": "Вы можете получить имя пользователя API и ключ API {0}.", + "wayToGetClickSendSMSToken": "Вы можете получить имя пользователя API и ключ API {here}.", "Connection String": "Строка подключения", "Query": "Запрос", "settingsCertificateExpiry": "Окончание TLS сертификата", @@ -702,7 +702,7 @@ "Add New Tag": "Добавить новый тег", "Body Encoding": "Тип содержимого запроса.(JSON or XML)", "Strategy": "Стратегия", - "Free Mobile User Identifier": "Бесплатный мобильный идентификатор пользователя", + "Free Mobile User Identifier": "Идентификатор пользователя Free Mobile", "Auto resolve or acknowledged": "Автоматическое разрешение или подтверждение", "auto acknowledged": "автоматическое подтверждение", "auto resolve": "автоматическое разрешение", @@ -1199,7 +1199,7 @@ "wayToWriteEvolutionRecipient": "Телефонный номер с международным префиксом, без знака плюс в начале ({0}), ИД Контакта ({1}) или ИД Группы ({2}).", "wayToGetEvolutionUrlAndToken": "Вы можете получить API URL и токен перейдя в желанный канал через {0}", "evolutionRecipient": "Телефонный номер / ИД Контакта / ИД Группы", - "evolutionInstanceName": "Имя Экземпляра", + "evolutionInstanceName": "Имя экземпляра", "brevoApiKey": "Ключ API Brevo", "brevoApiHelp": "Создайте ключ API здесь: {0}", "brevoFromName": "Имя отправителя", @@ -1217,5 +1217,37 @@ "Nextcloud host": "Хост Nextcloud", "Installing a Nextcloud Talk bot requires administrative access to the server.": "Для установки бота Nextcloud Talk требуется административный доступ к серверу.", "Conversation token": "Токен разговора", - "auto-select": "Автоматический выбор" + "auto-select": "Автоматический выбор", + "Maximum Retries": "Максимальное количество попыток", + "Number of retry attempts if webhook fails": "Количество повторных попыток (каждые 60-180 секунд) в случае сбоя вебхука.", + "webhookPostMethodDesc": "POST подходит для большинства современных HTTP-серверов.", + "Enter a list of mobile": "Введите список мобильных", + "Dingtalk Mobile List": "Список мобильных", + "Mention Mobile List": "Упомянуть список мобильных", + "Mention User List": "Упомянуть список ID пользователей", + "Invalid userId": "Неверный ID пользователя [{userId}]", + "wayToGetBaleToken": "Вы можете получить токен здесь - {0}.", + "supportBaleChatID": "Поддерживаются ID чатов, групп и каналов", + "wayToGetBaleChatID": "Вы можете получить ID вашего чата, отправив сообщение боту и перейдя по этому URL для просмотра chat_id:", + "descriptionHelpText": "Отображается на внутренней панели. Markdown разрешен и очищается (сохраняет пробелы и отступы) перед отображением.", + "webhookGetMethodDesc": "GET отправляет данные в качестве параметров запроса и не позволяет настраивать тело запроса. Полезно для Push монитора Uptime Kuma.", + "Enter a list of userId": "Введите список ID пользователей", + "Dingtalk User List": "Список ID пользователей", + "HTTP Method": "HTTP-метод", + "Invalid mobile": "Неверный мобильный [{mobile}]", + "Template ID": "ID шаблона", + "wayToGetClickSMSIRTemplateID": "Ваш шаблон должен содержать поле {uptkumaalert}. Вы можете создать новый шаблон {здесь}.", + "deleteGroupMsg": "Вы уверены что хотите удалить эту группу?", + "deleteChildrenMonitors": "Также удалить дочерние мониторы и их дочерние элементы, если они есть | Также удалить все {count} дочерних монитора и их дочерние элементы, если они есть", + "Clone Maintenance": "Копировать техобслуживание", + "ariaPauseMaintenance": "Приостановить расписание этого техобслуживания", + "ariaCloneMaintenance": "Создать копию расписания этого техобслуживания", + "ariaResumeMaintenance": "Возобновить расписание этого техобслуживания", + "ariaEditMaintenance": "Изменить расписание этого техобслуживания", + "ariaDeleteMaintenance": "Удалить расписание этого техобслуживания", + "Recipient Numbers": "Номера получателя", + "twilioMessagingServiceSID": "SID службы обмена сообщениями (необязательно)", + "twilioApiKeyHelptext": "Ключ API является необязательным, но рекомендуется. Вы можете указать либо Account SID и authToken со странице TwilioConsole, либо Account SID и пару из ключа API и секретного ключа API", + "twilloMessagingServiceSIDHelptext": "Введите здесь свой SID службы обмена сообщениями, если вы используете {twillo_messaging_service_help_link} для управления отправителями и функциями", + "showOnlyLastHeartbeat": "Показывать только последнюю проверку" } From 9216d0903c2a3044504569a99b621d91eeaf12a4 Mon Sep 17 00:00:00 2001 From: Avish Jha Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 31/91] Translated using Weblate (Hindi) Currently translated at 9.9% (117 of 1178 strings) Co-authored-by: Avish Jha Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hi/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/hi.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lang/hi.json b/src/lang/hi.json index 101cb3a8..855bcd32 100644 --- a/src/lang/hi.json +++ b/src/lang/hi.json @@ -42,7 +42,7 @@ "Status": "स्थिति", "showCertificateExpiry": "प्रमाणपत्र समाप्ति दिखाएँ", "setupDatabaseEmbeddedMariaDB": "आपको कुछ भी सेट करने की जरूरत नहीं है. इस डॉकर छवि ने आपके लिए मारियाडीबी को स्वचालित रूप से एम्बेड और कॉन्फ़िगर किया है। अपटाइम कुमा यूनिक्स सॉकेट के माध्यम से इस डेटाबेस से कनेक्ट होगा।", - "setupDatabaseChooseDatabase": "आप किस डेटाबेस का उपयोग करना चाहेंगे?", + "setupDatabaseChooseDatabase": "आप कौन सा डेटाबेस प्रयोग करना चाहते हैं ?", "setupDatabaseMariaDB": "किसी बाहरी मारियाडीबी डेटाबेस से कनेक्ट करें। आपको डेटाबेस कनेक्शन जानकारी सेट करने की आवश्यकता है।", "setupDatabaseSQLite": "एक सरल डेटाबेस फ़ाइल, जो छोटे पैमाने पर तैनाती के लिए अनुशंसित है। V2.0.0 से पहले, अपटाइम कुमा ने डिफ़ॉल्ट डेटाबेस के रूप में SQLite का उपयोग किया था।", "settingUpDatabaseMSG": "डेटाबेस की स्थापना. इसमें थोड़ा समय लग सकता है, कृपया धैर्य रखें।", @@ -106,5 +106,14 @@ "styleElapsedTimeShowNoLine": "दिखाएँ (कोई रेखा नहीं)", "Expected Value": "अपेक्षित मान", "ignoreTLSError": "HTTPS वेबसाइटों के लिए TLS/SSL त्रुटियों को अनदेखा करें", - "pushViewCode": "पुश मॉनिटर का उपयोग कैसे करें? (कोड देखें)" + "pushViewCode": "पुश मॉनिटर का उपयोग कैसे करें? (कोड देखें)", + "Timezone": "समय क्षेत्र", + "Bottom": "नीचे", + "Current Password": "वर्तमान पासवर्ड", + "Repeat New Password": "नया पासवर्ड दोहराएँ", + "None": "कुछ नहीं", + "New Password": "नया पासवर्ड", + "Update Password": "पासवर्ड अपडेट करें", + "Change Password": "पासवर्ड बदलें", + "Normal": "सामान्य" } From 524f42084136f3e8492668aa742043ed79f7a91e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Buchti=C4=8D?= Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 32/91] Translated using Weblate (Czech) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (1189 of 1189 strings) Translated using Weblate (Czech) Currently translated at 100.0% (1178 of 1178 strings) Co-authored-by: Buchtič Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/cs-CZ.json | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json index a01d1e0b..6e18747e 100644 --- a/src/lang/cs-CZ.json +++ b/src/lang/cs-CZ.json @@ -950,7 +950,7 @@ "receiverSevenIO": "Přijímací číslo", "apiKeySevenIO": "API klíč SevenIO", "locally configured mail transfer agent": "místně nakonfigurovaný agent pro přenos pošty", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Zadejte název hostitele serveru, ke kterému se chcete připojit, nebo {localhost}, pokud hodláte použít {local_mta}", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Zadejte název serveru, ke kterému se chcete připojit. Případně zadejte {localhost}, pokud chcete využít {local_mta}", "receiverInfoSevenIO": "Pokud se přijímající číslo nenachází v Německu, musíte před číslo přidat kód země (např. pro kód země 420 z ČR použijte 420603603603 místo 603603603)", "Command": "Příkaz", "mongodbCommandDescription": "Spusťte příkaz MongoDB proti databázi. Informace o dostupných příkazech najdete v {dokumentaci}", @@ -1215,5 +1215,20 @@ "Enter a list of mobile": "Zadejte seznam telefonních čísel", "Invalid mobile": "Neplatné telefonní číslo [{mobile}]", "Invalid userId": "Neplatné userID [{userId}]", - "auto-select": "Automatický výběr" + "auto-select": "Automatický výběr", + "webhookPostMethodDesc": "POST je vhodný pro většinu moderních HTTP serverů.", + "descriptionHelpText": "Zobrazí se na interní nástěnce. Markdown je povolen a před zobrazením dojde k jeho očištění (zůstanou zachovány mezery a odsazení).", + "HTTP Method": "HTTP metoda", + "webhookGetMethodDesc": "GET odesílá data jako parametry dotazu a neumožňuje konfiguraci těla. Užitečné pro spouštění Uptime Kuma Push dohledů.", + "Recipient Numbers": "Počet příjemců", + "deleteGroupMsg": "Opravdu chcete smazat tuto skupinu?", + "deleteChildrenMonitors": "Tímto dojde rovněž k odstranění přímých potomků tohoto dohledu a jejich potomků, pokud nějaké mají | Tímto dojde rovněž k odstranění všech {count} přímých potomků tohoto dohledu a jejich potomků, pokud nějaké mají", + "Template ID": "ID šablony", + "wayToGetClickSMSIRTemplateID": "Vaše šablona musí obsahovat pole {uptkumaalert}. Novou šablonu můžete vytvořit {here}.", + "Clone Maintenance": "Duplikovat údržbu", + "ariaPauseMaintenance": "Pozastavit tento plán údržby", + "ariaResumeMaintenance": "Pokračovat v tomto plánu údržby", + "ariaCloneMaintenance": "Vytvořit kopii tohoto plánu údržby", + "ariaEditMaintenance": "Upravit tento plán údržby", + "ariaDeleteMaintenance": "Odstranit tento plán údržby" } From 6784ab2fb3794561b36cf31b24f5356d4cf6e57c Mon Sep 17 00:00:00 2001 From: AnnAngela Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 33/91] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1178 of 1178 strings) Co-authored-by: AnnAngela Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 4446fa67..83fd0715 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -1211,5 +1211,22 @@ "Bot secret": "机器人密钥", "Conversation token": "会话令牌", "Nextcloud host": "Nextcloud 主机", - "auto-select": "自动选择" + "auto-select": "自动选择", + "Maximum Retries": "最大重试次数", + "Number of retry attempts if webhook fails": "webhook 失败后的重试次数(60-180秒为一周期)。", + "webhookPostMethodDesc": "POST 适用于大多数现代 HTTP 服务器。", + "HTTP Method": "HTTP 方法", + "webhookGetMethodDesc": "GET 将数据作为查询参数发送,不允许配置请求体。对于触发 Uptime Kuma Push 监控非常有用。", + "Invalid userId": "不合法的 userId [{userId}]", + "Invalid mobile": "不合法的电话号码 [{mobile}]", + "descriptionHelpText": "在内部仪表板上显示。允许使用 Markdown,显示前会进行净化处理(保留空格和缩进)。", + "Enter a list of mobile": "输入手机号码列表", + "Enter a list of userId": "输入 usedId 列表", + "Dingtalk User List": "UserId 列表", + "Dingtalk Mobile List": "手机号码列表", + "Mention User List": "需提及的 userId 列表", + "Mention Mobile List": "需提及的手机号码列表", + "wayToGetBaleToken": "你可以从 {0} 获取一个令牌。", + "wayToGetBaleChatID": "你可以通过向机器人发送消息并访问此 URL 来查看 chat_id:", + "supportBaleChatID": "支持私聊/群聊/频道的聊天ID" } From 5882ed89fdfa07156175b34fd3dc9e59da45fcd9 Mon Sep 17 00:00:00 2001 From: JuenTingShie Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 34/91] Translated using Weblate (Chinese (Traditional)) Currently translated at 92.5% (1090 of 1178 strings) Co-authored-by: JuenTingShie Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-TW.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index 28c47b29..ab651c63 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -1132,5 +1132,9 @@ "Clear Form": "清除表單", "pause": "暫停", "Staged Tags for Batch Add": "暫存標籤以批次新增", - "Add Another Tag": "新增標籤" + "Add Another Tag": "新增標籤", + "Path": "路徑", + "defaultFriendlyName": "新監測器", + "Add Tags": "加入標籤", + "tagAlreadyOnMonitor": "此標籤(名稱與值)已經存在監視器或等待加入中。" } From 3bc689404230960fc3bbbbd06b322027cbad1ad1 Mon Sep 17 00:00:00 2001 From: MD Shourav Hossain Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 35/91] Translated using Weblate (Bengali) Currently translated at 100.0% (1178 of 1178 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1178 of 1178 strings) Translated using Weblate (English) Currently translated at 100.0% (1178 of 1178 strings) Translated using Weblate (Bengali) Currently translated at 98.4% (1160 of 1178 strings) Translated using Weblate (Bengali) Currently translated at 56.0% (660 of 1178 strings) Translated using Weblate (Bengali) Currently translated at 42.5% (501 of 1178 strings) Translated using Weblate (Bengali) Currently translated at 25.2% (298 of 1178 strings) Co-authored-by: MD Shourav Hossain Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bn/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/bn.json | 891 +++++++++++++++++++++++++++++++++++++++++++- src/lang/en.json | 4 +- src/lang/zh-CN.json | 48 +-- 3 files changed, 911 insertions(+), 32 deletions(-) diff --git a/src/lang/bn.json b/src/lang/bn.json index 22f620d1..22deeb82 100644 --- a/src/lang/bn.json +++ b/src/lang/bn.json @@ -163,7 +163,7 @@ "-day": "-দিন", "hour": "ঘন্টা", "Host URL": "হোস্ট ইউআরএল", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "আপনি যে সার্ভারে সংযোগ করতে চান তার হোস্টনেম প্রবেশ করুন অথবা যদি আপনি একটি {local_mta} ব্যবহার করার পরিকল্পনা করেন, তাহলে {localhost} লিখুন", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "আপনি যে সার্ভারে সংযোগ করতে চান তার হোস্টনেম প্রবেশ করুন, অথবা যদি আপনি একটি {local_mta} ব্যবহার করার পরিকল্পনা করেন, তাহলে {localhost} লিখুন", "ignoreTLSErrorGeneral": "সংযোগের জন্য TLS/SSL ত্রুটি উপেক্ষা করুন", "Upside Down Mode": "আপসাইড ডাউন মোড", "Pending": "প্রক্রিয়াধীন", @@ -220,7 +220,7 @@ "Heartbeat Retry Interval": "হার্টবিট রিট্রাই ইন্টারভাল", "Advanced": "অ্যাডভান্স", "retriesDescription": "সার্ভিসটি ডাউন হিসেবে চিহ্নিত হওয়ার আগে এবং একটি নোটিফিকেশন পাঠানোর জন্য সর্বোচ্চ পুনরায় চেষ্টা করার সংখ্যা", - "upsideDownModeDescription": "স্ট্যাটাসটি উল্টো করে দিন। যদি সার্ভিসটি পৌঁছানো যায়, তবে এটি DOWN হবে।", + "upsideDownModeDescription": "স্ট্যাটাসটি উল্টে দিন। যদি পরিষেবাটি পৌঁছানো যায়, তাহলে এটি বন্ধ।", "maxRedirectDescription": "অনুসরণ করার জন্য সর্বোচ্চ রিডাইরেক্ট সংখ্যা। রিডাইরেক্ট নিষ্ক্রিয় করতে 0 সেট করুন।", "ignoreTLSError": "HTTPS ওয়েবসাইটগুলির জন্য TLS/SSL ত্রুটিগুলি উপেক্ষা করুন", "pushViewCode": "পুশ মনিটর কীভাবে ব্যবহার করবেন? (কোড দেখুন)", @@ -230,9 +230,9 @@ "atLeastOneMonitor": "অন্তত একটি প্রভাবিত মনিটর নির্বাচন করুন", "pushoversounds cashregister": "নগদ রেজিস্টার", "pushoversounds incoming": "আগত", - "importHandleDescription": "আপনি যদি একই নামের প্রতিটি মনিটর অথবা নোটিফিকেশান এড়িয়ে যেতে চান তাহলে 'যেটা এখন আছে' সেটা এড়িয়ে যান । 'ওভাররাইট' প্রতিটি বিদ্যমান মনিটর এবং নোটিফিকেশান মুছে ফেলবে।", + "importHandleDescription": "আপনি যদি একই নামের প্রতিটি মনিটর অথবা নোটিফিকেশান এড়িয়ে যেতে চান তাহলে 'যেটা এখন আছে' সেটা এড়িয়ে যান । 'ওভাররাইট' প্রতিটি বিদ্যমান মনিটর এবং নোটিফিকেশান মুছে ফেলবে।", "confirmImportMsg": "তুমি কি নিশ্চিত যে তুমি ব্যাকআপটি ইমপোর্ট করতে চাও? অনুগ্রহ করে যাচাই করো তুমি সঠিক ইমপোর্ট অপশনটি নির্বাচন করেছ কিনা।", - "twoFAVerifyLabel": "দয়া করে আপনার টোকেনটি প্রবেশ করুন ২-ধাপ যাচাইকরণের (2FA) জন্যঃ", + "twoFAVerifyLabel": "দয়া করে আপনার টোকেনটি প্রবেশ করুন ২-ধাপ যাচাইকরণের (2FA) জন্য:", "tokenValidSettingsMsg": "টোকেনটি বৈধ! এখন আপনি ২-ধাপ যাচাইকরণের (2FA) সেটিংস সংরক্ষণ করতে পারেন।", "confirmEnableTwoFAMsg": "তুমি কি নিশ্চিত যে তুমি ২-ধাপ যাচাইকরণ (2FA) চালু করতে চাও?", "confirmDisableTwoFAMsg": "তুমি কি নিশ্চিত যে তুমি ২-ধাপ যাচাইকরণ (2FA) বন্ধ করতে চাও?", @@ -278,7 +278,7 @@ "User Key": "ইউজার কী", "Device": "ডিভাইস", "pushoverMessageTtl": "বার্তার TTL (সেকেন্ড)", - "Check octopush prices": "Octopush এর দাম যাচাই করুন {0}", + "Check octopush prices": "Octopush এর দাম যাচাই করুন {0}.", "issueWithGoogleChatOnAndroidHelptext": "এটি {issuetackerURL}-এর মতো আপস্ট্রিম বাগগুলো এড়িয়ে যেতে সাহায্য করে", "wayToGetKookBotToken": "অ্যাপ্লিকেশন তৈরি করুন এবং আপনার বট টোকেন {0} থেকে সংগ্রহ করুন", "wayToGetKookGuildID": "Kook সেটিংসে ‘ডেভেলপার মোড’ চালু করুন, তারপর গিল্ডে ডান ক্লিক করে তার আইডি সংগ্রহ করুন", @@ -297,5 +297,884 @@ "octopushPhoneNumber": "ফোন নম্বর (আন্তর্জাতিক ফরম্যাট, যেমন: +33612345678) ", "octopushSMSSender": "এসএমএস প্রেরকের নাম: ৩–১১টি বর্ণ ও সংখ্যা (a-zA-Z0-9) এবং স্পেস ব্যবহারযোগ্য", "octopushTypePremium": "প্রিমিয়াম (দ্রুত - সতর্কতার জন্য প্রস্তাবিত)", - "octopushTypeLowCost": "লো কস্ট (ধীর — কখনও কখনও অপারেটর দ্বারা ব্লক করা হয়)" + "octopushTypeLowCost": "কম খরচ (ধীর - কখনও অপারেটর দ্বারা ব্লক করা হয়)", + "Path": "পথ", + "defaultFriendlyName": "নতুন মনিটর", + "Cert Exp.": "সার্টি এক্সপ্রেস.", + "Add one": "একটি যোগ করুন", + "Untitled Group": "শিরোনামহীন গ্রুপ", + "Services": "সেবা", + "Discard": "বাতিল করুন", + "Cancel": "বাতিল করুন", + "Installed": "ইনস্টল করা হয়েছে", + "Running": "চলছে", + "Not running": "চলছে না", + "Remove Token": "টোকেন সরান", + "Start": "শুরু করুন", + "Stop": "থামো", + "Slug": "স্লাগ", + "Accept characters:": "অক্ষর গ্রহণ করুন:", + "startOrEndWithOnly": "শুধুমাত্র {0} দিয়ে শুরু বা শেষ করুন", + "No consecutive dashes": "কোনও ধারাবাহিক ড্যাশ নেই", + "The slug is already taken. Please choose another slug.": "স্লাগটি ইতিমধ্যেই নেওয়া হয়েছে। অনুগ্রহ করে অন্য একটি স্লাগ বেছে নিন।", + "Authentication": "প্রমাণীকরণ", + "HTTP Basic Auth": "HTTP বেসিক প্রমাণীকরণ", + "New Status Page": "নতুন স্ট্যাটাস পৃষ্ঠা", + "Page Not Found": "পৃষ্ঠাটি খুঁজে পাওয়া যায়নি", + "Reverse Proxy": "বিপরীত প্রক্সি", + "Backup": "ব্যাকআপ", + "About": "সম্পর্কে", + "wayToGetCloudflaredURL": "({0} থেকে cloudflared ডাউনলোড করুন)", + "cloudflareWebsite": "ক্লাউডফ্লেয়ার ওয়েবসাইট", + "Message:": "বার্তা:", + "HTTP Headers": "HTTP হেডার", + "Please read": "অনুগ্রহ করে পড়ুন", + "Valid To:": "বৈধ:", + "Days Remaining:": "বাকি দিন:", + "Issuer:": "ইস্যুকারী:", + "Fingerprint:": "আঙুলের ছাপ:", + "No status pages": "কোনও স্ট্যাটাস পৃষ্ঠা নেই", + "Domain Name Expiry Notification": "ডোমেন নামের মেয়াদ শেষ হওয়ার বিজ্ঞপ্তি", + "Add a new expiry notification day": "একটি নতুন মেয়াদ শেষ হওয়ার বিজ্ঞপ্তির দিন যোগ করুন", + "Remove the expiry notification": "মেয়াদ শেষ হওয়ার বিজ্ঞপ্তির দিনটি সরিয়ে দিন", + "Proxy": "প্রক্সি", + "Date Created": "তৈরির তারিখ", + "Footer Text": "পাদলেখ টেক্সট", + "Refresh Interval": "রিফ্রেশ ব্যবধান", + "Show Powered By": "দ্বারা চালিত দেখান", + "Domain Names": "ডোমেইন নাম", + "signedInDisp": "{0} হিসেবে সাইন ইন করেছেন", + "signedInDispDisabled": "প্রমাণীকরণ অক্ষম।", + "RadiusSecret": "রেডিয়াস সিক্রেট", + "RadiusSecretDescription": "ক্লায়েন্ট এবং সার্ভারের মধ্যে ভাগ করা গোপনীয়তা", + "RadiusCalledStationId": "স্টেশন আইডি বলা হয়", + "RadiusCallingStationId": "কলিং স্টেশন আইডি", + "RadiusCallingStationIdDescription": "কলিং ডিভাইসের শনাক্তকারী", + "API Key": "এপিআই কী", + "Show update if available": "উপলব্ধ থাকলে আপডেট দেখান", + "Also check beta release": "বিটা রিলিজও পরীক্ষা করুন", + "Using a Reverse Proxy?": "রিভার্স প্রক্সি ব্যবহার করছেন?", + "What you can try:": "আপনি যা চেষ্টা করতে পারেন:", + "Go back to the previous page.": "আগের পৃষ্ঠায় ফিরে যান।", + "templateHostnameOrURL": "হোস্টনাম অথবা URL", + "Other Software": "অন্যান্য সফটওয়্যার", + "For example: nginx, Apache and Traefik.": "উদাহরণস্বরূপ: nginx, Apache এবং Traefik।", + "Subject:": "বিষয়:", + "Trust Proxy": "প্রক্সি বিশ্বাস করুন", + "API Username": "API ব্যবহারকারীর নাম", + "Most likely causes:": "সবচেয়ে সম্ভাব্য কারণ:", + "There might be a typing error in the address.": "ঠিকানায় টাইপিং ত্রুটি থাকতে পারে।", + "Steam Game Server": "স্টিম গেম সার্ভার", + "Retype the address.": "ঠিকানাটি পুনরায় টাইপ করুন।", + "Connection String": "সংযোগ স্ট্রিং", + "Query": "প্রশ্ন", + "certificationExpiryDescription": "TLS সার্টিফিকেটের মেয়াদ শেষ হলে HTTPS মনিটর বিজ্ঞপ্তি ট্রিগার করে:", + "Setup Docker Host": "ডকার হোস্ট সেট আপ করুন", + "Connection Type": "সংযোগের ধরণ", + "Container Name / ID": "কন্টেইনারের নাম / আইডি", + "None": "কেউ না", + "tagAlreadyStaged": "এই ট্যাগটি (নাম এবং মান) ইতিমধ্যেই এই ব্যাচের জন্য মঞ্চস্থ করা হয়েছে।", + "templateStatus": "অবস্থা", + "webhookBodyCustomOption": "কাস্টম বডি", + "Webhook URL": "ওয়েবহুক ইউআরএল", + "Application Token": "অ্যাপ্লিকেশন টোকেন", + "Server URL": "সার্ভার ইউআরএল", + "Method": "পদ্ধতি", + "Body": "শরীর", + "Headers": "শিরোনাম", + "BodyInvalidFormat": "অনুরোধের মূল অংশটি বৈধ JSON নয়: ", + "Monitor History": "মনিটরের ইতিহাস", + "PasswordsDoNotMatch": "পাসওয়ার্ড মিলছে না।", + "records": "রেকর্ড", + "One record": "একটি রেকর্ড", + "Current User": "বর্তমান ব্যবহারকারী", + "topic": "বিষয়", + "topicExplanation": "পর্যবেক্ষণের জন্য MQTT বিষয়", + "mqttWebSocketPath": "MQTT ওয়েবসকেট পাথ", + "mqttWebsocketPathInvalid": "অনুগ্রহ করে একটি বৈধ ওয়েবসকেট পাথ ফর্ম্যাট ব্যবহার করুন", + "successKeyword": "সাফল্যের মূলশব্দ", + "successKeywordExplanation": "MQTT কীওয়ার্ড যা সফল হিসাবে বিবেচিত হবে", + "recent": "সাম্প্রতিক", + "Reset Token": "টোকেন রিসেট করুন", + "Done": "সম্পন্ন", + "Info": "তথ্য", + "Security": "নিরাপত্তা", + "Steam API Key": "স্টিম এপিআই কী", + "Pick a RR-Type...": "একটি RR-টাইপ বেছে নিন…", + "Default": "ডিফল্ট", + "HTTP Options": "HTTP বিকল্প", + "Create Incident": "ঘটনা তৈরি করুন", + "Title": "শিরোনাম", + "Style": "স্টাইল", + "info": "তথ্য", + "warning": "সতর্কতা", + "danger": "বিপদ", + "error": "ত্রুটি", + "critical": "সমালোচনামূলক", + "light": "আলো", + "dark": "অন্ধকার", + "Post": "পোস্ট", + "Please input title and content": "অনুগ্রহ করে শিরোনাম এবং বিষয়বস্তু লিখুন", + "Created": "তৈরি করা হয়েছে", + "Switch to Dark Theme": "কালো থিমে স্যুইচ করুন", + "Show Tags": "ট্যাগ দেখান", + "Hide Tags": "ট্যাগ লুকান", + "templateServiceName": "পরিষেবার নাম", + "Pick Accepted Status Codes...": "গৃহীত স্ট্যাটাস কোডগুলি বেছে নিন…", + "No Monitors, please": "দয়া করে কোন মনিটর নেই", + "Add Tags": "ট্যাগ যোগ করুন", + "tagAlreadyOnMonitor": "এই ট্যাগটি (নাম এবং মান) ইতিমধ্যেই মনিটরে আছে অথবা সংযোজনের অপেক্ষায় আছে।", + "tagNameExists": "এই নামের একটি সিস্টেম ট্যাগ ইতিমধ্যেই বিদ্যমান। তালিকা থেকে এটি নির্বাচন করুন অথবা অন্য একটি নাম ব্যবহার করুন।", + "Add New Status Page": "নতুন স্ট্যাটাস পৃষ্ঠা যোগ করুন", + "webhookAdditionalHeadersDesc": "ওয়েবহুকের সাথে পাঠানো অতিরিক্ত হেডার সেট করে। প্রতিটি হেডারকে একটি JSON কী/মান হিসেবে সংজ্ঞায়িত করা উচিত।", + "HeadersInvalidFormat": "অনুরোধের শিরোনামগুলি বৈধ JSON নয়: ", + "clearDataOlderThan": "মনিটরের ইতিহাসের ডেটা {0} দিনের জন্য রাখুন।", + "Next": "পরবর্তী", + "steamApiKeyDescription": "স্টিম গেম সার্ভার পর্যবেক্ষণের জন্য আপনার একটি স্টিম ওয়েব-এপিআই কী প্রয়োজন। আপনি এখানে আপনার এপিআই কী নিবন্ধন করতে পারেন: ", + "mqttWebsocketPathExplanation": "ওয়েবসকেট সংযোগের মাধ্যমে MQTT-এর জন্য ওয়েবসকেট পাথ (যেমন, /mqtt)", + "Chat ID": "চ্যাট আইডি", + "mqttHostnameTip": "অনুগ্রহ করে এই ফর্ম্যাটটি {hostnameFormat} ব্যবহার করুন", + "Shrink Database": "ডাটাবেস সঙ্কুচিত করুন", + "shrinkDatabaseDescriptionSqlite": "SQLite এর জন্য ডাটাবেস {vacuum} ট্রিগার করুন। {auto_vacuum} ইতিমধ্যেই সক্রিয় আছে কিন্তু এটি ডাটাবেসকে ডিফ্র্যাগমেন্ট করে না বা {vacuum} কমান্ডের মতো পৃথক ডাটাবেস পৃষ্ঠাগুলিকে পুনরায় প্যাক করে না।", + "Content": "কন্টেন্ট", + "primary": "প্রাথমিক", + "Last Updated": "শেষ আপডেট করা হয়েছে", + "descriptionHelpText": "অভ্যন্তরীণ ড্যাশবোর্ডে দেখানো হয়েছে। প্রদর্শনের আগে মার্কডাউন অনুমোদিত এবং স্যানিটাইজ করা হয়েছে (স্থান এবং ইন্ডেন্টেশন সংরক্ষণ করে)।", + "No monitors available.": "কোনও মনিটর পাওয়া যাচ্ছে না।", + "Custom CSS": "কাস্টম সিএসএস", + "deleteStatusPageMsg": "আপনি কি নিশ্চিত যে এই স্ট্যাটাস পৃষ্ঠাটি মুছে ফেলতে চান?", + "deleteProxyMsg": "আপনি কি নিশ্চিত যে সকল মনিটরের জন্য এই প্রক্সিটি মুছে ফেলতে চান?", + "enableProxyDescription": "এই প্রক্সিটি সক্রিয় না হওয়া পর্যন্ত মনিটরের অনুরোধগুলিতে প্রভাব ফেলবে না। আপনি অ্যাক্টিভেশন স্ট্যাটাসের মাধ্যমে সমস্ত মনিটর থেকে অস্থায়ীভাবে প্রক্সিটি নিষ্ক্রিয় করতে পারেন।", + "Not installed": "ইনস্টল করা নেই", + "statusPageSpecialSlugDesc": "বিশেষ স্লাগ {0}: কোনও স্লাগ না থাকলে এই পৃষ্ঠাটি দেখানো হবে", + "Don't know how to get the token? Please read the guide:": "টোকেন কিভাবে পাবেন জানেন না? অনুগ্রহ করে নির্দেশিকাটি পড়ুন:", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "আপনি যদি বর্তমানে Cloudflare Tunnel এর মাধ্যমে সংযোগ স্থাপন করেন তবে বর্তমান সংযোগটি বিচ্ছিন্ন হতে পারে। আপনি কি নিশ্চিতভাবে এটি বন্ধ করতে চান? এটি নিশ্চিত করতে আপনার বর্তমান পাসওয়ার্ডটি টাইপ করুন।", + "Refresh Interval Description": "স্ট্যাটাস পৃষ্ঠাটি প্রতি {0} সেকেন্ডে একটি সম্পূর্ণ সাইট রিফ্রেশ করবে", + "RadiusCalledStationIdDescription": "কল করা ডিভাইসের শনাক্তকারী", + "Certificate Expiry Notification": "সার্টিফিকেটের মেয়াদ শেষ হওয়ার বিজ্ঞপ্তি", + "Check how to config it for WebSocket": "রিভার্স প্রক্সি ব্যবহার করছেন", + "The resource is no longer available.": "রিসোর্সটি আর উপলব্ধ নেই।", + "settingsCertificateExpiry": "TLS সার্টিফিকেটের মেয়াদ শেষ", + "Docker Daemon": "ডকার ডেমন", + "DockerHostRequired": "এই মনিটরের জন্য ডকার হোস্ট সেট করুন।", + "deleteDockerHostMsg": "আপনি কি নিশ্চিত যে সমস্ত মনিটরের জন্য এই ডকার হোস্টটি মুছে ফেলতে চান?", + "tailscalePingWarning": "টেইলস্কেল পিং মনিটর ব্যবহার করার জন্য, আপনাকে ডকার ছাড়াই আপটাইম কুমা ইনস্টল করতে হবে এবং আপনার সার্ভারে টেইলস্কেল ক্লায়েন্টও ইনস্টল করতে হবে।", + "auto-select": "স্বয়ংক্রিয় নির্বাচন", + "Certificate Chain": "সার্টিফিকেট চেইন", + "Select": "নির্বাচন করুন", + "selectedMonitorCount": "নির্বাচিত: {0}", + "Check/Uncheck": "চেক/আনচেক করুন", + "Powered by": "দ্বারা চালিত", + "Customize": "কাস্টমাইজ করুন", + "Custom Footer": "কাস্টম ফুটার", + "Proxies": "প্রক্সি", + "default": "ডিফল্ট", + "enabled": "সক্ষম করা হয়েছে", + "setAsDefault": "ডিফল্ট হিসেবে সেট করুন", + "proxyDescription": "প্রক্সিগুলি কাজ করার জন্য একটি মনিটরে বরাদ্দ করতে হবে।", + "setAsDefaultProxyDescription": "নতুন মনিটরের জন্য এই প্রক্সিটি ডিফল্টরূপে সক্রিয় থাকবে। আপনি এখনও প্রতিটি মনিটরের জন্য আলাদাভাবে প্রক্সিটি অক্ষম করতে পারেন।", + "Valid": "বৈধ", + "Invalid": "অবৈধ", + "User": "ব্যবহারকারী", + "No Proxy": "কোনও প্রক্সি নেই", + "Coming Soon": "শীঘ্রই আসছে", + "noDockerHostMsg": "উপলব্ধ নেই। প্রথমে একটি ডকার হোস্ট সেট আপ করুন।", + "socket": "সকেট", + "tcp": "টিসিপি / এইচটিটিপি", + "Docker Container": "ডকার কন্টেইনার", + "Docker Host": "ডকার হোস্ট", + "Docker Hosts": "ডকার হোস্ট", + "Domain": "ডোমেইন", + "Workstation": "ওয়ার্কস্টেশন", + "Packet Size": "প্যাকেটের আকার", + "Bot Token": "বট টোকেন", + "wayToGetTelegramToken": "আপনি {0} থেকে একটি টোকেন পেতে পারেন।", + "telegramMessageThreadID": "(ঐচ্ছিক) মেসেজ থ্রেড আইডি", + "Switch to Light Theme": "সাদা থিমে স্যুইচ করুন", + "Description": "বিবরণ", + "No Monitors": "কোনও মনিটর নেই", + "templateLimitedToUpDownCertNotifications": "শুধুমাত্র UP/DOWN/সার্টিফিকেটের মেয়াদ শেষ হওয়ার বিজ্ঞপ্তির জন্য উপলব্ধ", + "webhookBodyPresetOption": "প্রিসেট - {0}", + "Priority": "অগ্রাধিকার", + "emojiCheatSheet": "ইমোজি চিট শিট: {0}", + "Read more": "আরও পড়ুন", + "appriseInstalled": "অ্যাপ্রিজ ইনস্টল করা আছে।", + "appriseNotInstalled": "অ্যাপ্রিজ ইনস্টল করা নেই। {0}", + "PushUrl": "পুশ ইউআরএল", + "Resend Notification if Down X times consecutively": "টানা X বার ডাউন হলে বিজ্ঞপ্তি পুনরায় পাঠান", + "resendDisabled": "পুনরায় পাঠানো বন্ধ আছে", + "telegramSendSilentlyDescription": "নীরবে বার্তা পাঠায়। ব্যবহারকারীরা কোনও শব্দ ছাড়াই একটি বিজ্ঞপ্তি পাবেন।", + "telegramProtectContent": "ফরোয়ার্ডিং/সঞ্চয় রক্ষা করুন", + "telegramProtectContentDescription": "যদি সক্ষম করা হয়, তাহলে টেলিগ্রামের বট বার্তাগুলি ফরোয়ার্ড এবং সংরক্ষণ থেকে সুরক্ষিত থাকবে।", + "telegramUseTemplate": "কাস্টম মেসেজ টেমপ্লেট ব্যবহার করুন", + "telegramUseTemplateDescription": "সক্রিয় থাকলে, একটি কাস্টম টেমপ্লেট ব্যবহার করে বার্তাটি পাঠানো হবে।", + "telegramTemplateFormatDescription": "টেলিগ্রাম বার্তাগুলির জন্য বিভিন্ন মার্কআপ ভাষা ব্যবহারের অনুমতি দেয়, নির্দিষ্ট বিবরণের জন্য টেলিগ্রাম {0} দেখুন।", + "telegramServerUrlDescription": "টেলিগ্রামের বট এপিআই সীমাবদ্ধতা তুলে নিতে অথবা অবরুদ্ধ এলাকায় (চীন, ইরান, ইত্যাদি) অ্যাক্সেস পেতে। আরও তথ্যের জন্য {0} এ ক্লিক করুন। ডিফল্ট: {1", + "disableCloudflaredNoAuthMsg": "আপনি No Auth মোডে আছেন, পাসওয়ার্ডের প্রয়োজন নেই।", + "wayToGetLineNotifyToken": "আপনি {0} থেকে একটি অ্যাক্সেস টোকেন পেতে পারেন", + "Examples": "উদাহরণ", + "Home Assistant URL": "হোম অ্যাসিস্ট্যান্ট ইউআরএল", + "Notification Service": "বিজ্ঞপ্তি পরিষেবা", + "cronExpression": "ক্রোন এক্সপ্রেশন", + "dayOfMonth": "মাসের দিন", + "lastDay": "শেষ দিন", + "lastDay1": "মাসের শেষ দিন", + "lastDay3": "মাসের ৩য় শেষ দিন", + "lastDay4": "মাসের ৪র্থ শেষ দিন", + "No Maintenance": "রক্ষণাবেক্ষণ নেই", + "pauseMaintenanceMsg": "তুমি কি নিশ্চিতভাবে বিরতি দিতে চাও?", + "maintenanceStatus-under-maintenance": "রক্ষণাবেক্ষণাধীন", + "maintenanceStatus-inactive": "নিষ্ক্রিয়", + "maintenanceStatus-scheduled": "নির্ধারিত", + "maintenanceStatus-ended": "শেষ হয়েছে", + "Display Timezone": "টাইমজোন প্রদর্শন করুন", + "Server Timezone": "সার্ভার টাইমজোন", + "statusPageMaintenanceEndDate": "শেষ", + "IconUrl": "আইকন URL", + "Enable": "সক্রিয় করুন", + "chromeExecutable": "ক্রোম/ক্রোমিয়াম এক্সিকিউটেবল", + "chromeExecutableAutoDetect": "স্বয়ংক্রিয় সনাক্তকরণ", + "dnsCacheDescription": "এটি কিছু IPv6 পরিবেশে কাজ নাও করতে পারে, যদি আপনার কোনও সমস্যা হয় তবে এটি অক্ষম করুন।", + "Clone": "ক্লোন", + "cloneOf": "{0} এর ক্লোন", + "emailCustomBody": "কাস্টম বডি", + "leave blank for default body": "ডিফল্ট বডির জন্য ফাঁকা রাখুন", + "emailTemplateHeartbeatJSON": "হৃদস্পন্দন বর্ণনাকারী বস্তু", + "emailTemplateMsg": "বিজ্ঞপ্তির বার্তা", + "Discord Webhook URL": "ডিসকর্ড ওয়েবহুক ইউআরএল", + "Bot Display Name": "বট প্রদর্শনের নাম", + "Prefix Custom Message": "প্রিফিক্স কাস্টম বার্তা", + "Hello @everyone is...": "হ্যালো {'@'}সবাই…", + "Select message type": "বার্তার ধরণ নির্বাচন করুন", + "Send to channel": "চ্যানেলে পাঠান", + "postToExistingThread": "বিদ্যমান থ্রেড / ফোরাম পোস্টে পোস্ট করুন", + "forumPostName": "ফোরাম পোস্টের নাম", + "threadForumPostID": "থ্রেড / ফোরাম পোস্ট আইডি", + "wayToGetDiscordThreadId": "একটি থ্রেড / ফোরাম পোস্ট আইডি পাওয়া চ্যানেল আইডি পাওয়ার মতোই। আইডি কীভাবে পাবেন সে সম্পর্কে আরও পড়ুন {0}", + "wayToGetZohoCliqURL": "আপনি কীভাবে একটি ওয়েবহুক URL {0} তৈরি করবেন তা শিখতে পারেন।", + "wayToCheckSignalURL": "কিভাবে সেট আপ করবেন তা দেখতে আপনি এই URL টি দেখতে পারেন:", + "Number": "সংখ্যা", + "Recipients": "প্রাপক", + "Channel access token": "চ্যানেল অ্যাক্সেস টোকেন", + "lineDevConsoleTo": "লাইন ডেভেলপার কনসোল - {0}", + "Basic Settings": "মৌলিক সেটিংস", + "User ID": "ব্যবহারকারী আইডি", + "Your User ID": "আপনার ব্যবহারকারী আইডি", + "Icon URL": "আইকন URL", + "aboutMattermostChannelName": "\"চ্যানেলের নাম\" ফিল্ডে চ্যানেলের নাম লিখে ওয়েবহুক যে ডিফল্ট চ্যানেলে পোস্ট করে, আপনি সেটিকে ওভাররাইড করতে পারেন। এটি ম্যাটারমোস্ট ওয়েবহুক সেটিংসে সক্রিয় করতে হবে। যেমন: #other-channel", + "infiniteRetention": "অসীম ধরে রাখার জন্য 0 তে সেট করুন।", + "enableGRPCTls": "TLS সংযোগের মাধ্যমে gRPC অনুরোধ পাঠানোর অনুমতি দিন", + "acceptedStatusCodesDescription": "সফল প্রতিক্রিয়া হিসেবে বিবেচিত স্ট্যাটাস কোডগুলি নির্বাচন করুন।", + "deleteMonitorMsg": "আপনি কি নিশ্চিত যে এই মনিটরটি মুছে ফেলতে চান?", + "telegramServerUrl": "(ঐচ্ছিক) সার্ভার ইউআরএল", + "chatIDNotFound": "চ্যাট আইডি খুঁজে পাওয়া যাচ্ছে না; অনুগ্রহ করে প্রথমে এই বটে একটি বার্তা পাঠান", + "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "\"ডেভেলপার টুলস > সার্ভিসেস\" এর অধীনে হোম অ্যাসিস্ট্যান্টে নোটিফিকেশন পরিষেবার একটি তালিকা পাওয়া যাবে এবং আপনার ডিভাইস/ফোনের নাম খুঁজে পেতে \"নোটিফিকেশন\" অনুসন্ধান করুন।", + "Automations can optionally be triggered in Home Assistant:": "হোম অ্যাসিস্ট্যান্টে ঐচ্ছিকভাবে অটোমেশন ট্রিগার করা যেতে পারে:", + "Trigger type:": "ট্রিগারের ধরণ:", + "Event type:": "ইভেন্টের ধরণ:", + "Event data:": "ইভেন্ট ডেটা:", + "Then choose an action, for example switch the scene to where an RGB light is red.": "তারপর একটি অ্যাকশন বেছে নিন, উদাহরণস্বরূপ দৃশ্যটি এমন জায়গায় স্যুইচ করুন যেখানে একটি RGB আলো লাল।", + "Frontend Version": "ফ্রন্টএন্ড সংস্করণ", + "Frontend Version do not match backend version!": "ফ্রন্টএন্ড ভার্সন ব্যাকএন্ড ভার্সনের সাথে মেলে না!", + "backupRecommend": "অনুগ্রহ করে ভলিউম অথবা ডেটা ফোল্ডার (./data/) সরাসরি ব্যাকআপ করুন।", + "weekdayShortThu": "বৃহস্পতি", + "supportBaleChatID": "সরাসরি চ্যাট / গ্রুপ / চ্যানেলের চ্যাট আইডি সমর্থন করুন", + "wayToGetBaleChatID": "আপনি বটে একটি বার্তা পাঠিয়ে এবং chat_id দেখতে এই URL-এ গিয়ে আপনার চ্যাট আইডি পেতে পারেন:", + "wayToGetBaleToken": "আপনি {0} থেকে একটি টোকেন পেতে পারেন।", + "Long-Lived Access Token": "দীর্ঘজীবী অ্যাক্সেস টোকেন", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "আপনার প্রোফাইল নামের উপর (নীচে বাম দিকে) ক্লিক করে এবং নীচে স্ক্রোল করে তারপর Create Token ক্লিক করে দীর্ঘস্থায়ী অ্যাক্সেস টোকেন তৈরি করা যেতে পারে। ", + "default: notify all devices": "ডিফল্ট: সমস্ত ডিভাইসকে অবহিত করুন", + "weekdayShortSat": "শনি", + "weekdayShortSun": "রবি", + "dayOfWeek": "সপ্তাহের দিন", + "weekdayShortFri": "শুক্র", + "Maintenance Time Window of a Day": "দিনের রক্ষণাবেক্ষণের সময়সূচী", + "Effective Date Range": "কার্যকর তারিখের পরিসর (ঐচ্ছিক)", + "DateTime Range": "তারিখসময় পরিসীমা", + "plugin": "প্লাগইন | প্লাগইন", + "install": "ইনস্টল করুন", + "installing": "ইনস্টল করা হচ্ছে", + "uninstall": "আনইনস্টল করুন", + "uninstalling": "আনইনস্টল করা হচ্ছে", + "notificationRegional": "আঞ্চলিক", + "Clone Monitor": "ক্লোন মনিটর", + "smtp": "ইমেল (SMTP)", + "Use HTML for custom E-mail body": "কাস্টম ইমেল বডির জন্য HTML ব্যবহার করুন", + "secureOptionNone": "কোনটিই নয় / STARTTLS (25, 587)", + "secureOptionTLS": "টিএলএস (৪৬৫)", + "Ignore TLS Error": "TLS ত্রুটি উপেক্ষা করুন", + "From Email": "ইমেল থেকে", + "emailCustomisableContent": "কাস্টমাইজযোগ্য কন্টেন্ট", + "smtpLiquidIntroduction": "নিম্নলিখিত দুটি ক্ষেত্র তরল টেমপ্লেটিং ভাষার মাধ্যমে টেমপ্লেটযোগ্য। ব্যবহারের নির্দেশাবলীর জন্য অনুগ্রহ করে {0} দেখুন। এগুলি উপলব্ধ ভেরিয়েবল:", + "emailCustomSubject": "কাস্টম বিষয়", + "leave blank for default subject": "ডিফল্ট বিষয়ের জন্য ফাঁকা রাখুন", + "Channel access token (Long-lived)": "চ্যানেল অ্যাক্সেস টোকেন (দীর্ঘস্থায়ী)", + "and": "এবং", + "or": "অথবা", + "sameAsServerTimezone": "সার্ভার টাইমজোনের মতোই", + "Optional": "ঐচ্ছিক", + "Date and Time": "তারিখ এবং সময়", + "dataRetentionTimeError": "ধরে রাখার সময়কাল অবশ্যই ০ বা তার বেশি হতে হবে", + "telegramSendSilently": "নীরবে পাঠান", + "To Email": "ইমেল করতে", + "smtpCC": "সিসি", + "smtpBCC": "বিসিসি", + "telegramMessageThreadIDDescription": "ফোরামের টার্গেট মেসেজ থ্রেড (বিষয়) এর জন্য ঐচ্ছিক অনন্য শনাক্তকারী; শুধুমাত্র ফোরাম সুপারগ্রুপের জন্য", + "trustProxyDescription": "'X-Forwarded-*' হেডারগুলিতে বিশ্বাস করুন। যদি আপনি সঠিক ক্লায়েন্ট আইপি পেতে চান এবং আপনার আপটাইম কুমা Nginx বা Apache এর মতো প্রক্সির পিছনে থাকে, তাহলে আপনার এটি সক্ষম করা উচিত।", + "backupOutdatedWarning": "বন্ধ: যেহেতু অনেক বৈশিষ্ট্য যোগ করা হয়েছে এবং এই ব্যাকআপ বৈশিষ্ট্যটি কিছুটা রক্ষণাবেক্ষণ করা হয়নি, তাই এটি সম্পূর্ণ ব্যাকআপ তৈরি বা পুনরুদ্ধার করতে পারে না।", + "lastDay2": "মাসের দ্বিতীয় শেষ দিন", + "maintenanceStatus-unknown": "অজানা", + "Disable": "অক্ষম করুন", + "enableNSCD": "সকল DNS অনুরোধ ক্যাশ করার জন্য NSCD (Name Service Cache Daemon) সক্ষম করুন", + "chromeExecutableDescription": "ডকার ব্যবহারকারীদের জন্য, যদি Chromium এখনও ইনস্টল না করা থাকে, তাহলে পরীক্ষার ফলাফল ইনস্টল করতে এবং প্রদর্শন করতে কয়েক মিনিট সময় লাগতে পারে। এতে ১ গিগাবাইট ডিস্ক স্পেস লাগে।", + "Single Maintenance Window": "একক রক্ষণাবেক্ষণ উইন্ডো", + "Edit Maintenance": "রক্ষণাবেক্ষণ সম্পাদনা করুন", + "loadingError": "তথ্য আনা যাচ্ছে না, দয়া করে পরে আবার চেষ্টা করুন।", + "confirmUninstallPlugin": "আপনি কি নিশ্চিত যে এই প্লাগইনটি আনইনস্টল করতে চান?", + "emailTemplateMonitorJSON": "মনিটরের বর্ণনাকারী বস্তু", + "emailTemplateLimitedToUpDownNotification": "শুধুমাত্র উপরে/নিচে হৃদস্পন্দনের জন্য উপলব্ধ, অন্যথায় শূন্য", + "wayToGetDiscordURL": "আপনি সার্ভার সেটিংস -> ইন্টিগ্রেশন -> ওয়েবহুক দেখুন -> নতুন ওয়েবহুক-এ গিয়ে এটি পেতে পারেন", + "Create new forum post": "নতুন ফোরাম পোস্ট তৈরি করুন", + "e.g. {discordThreadID}": "যেমন {discordThreadID}", + "whatHappensAtForumPost": "একটি নতুন ফোরাম পোস্ট তৈরি করুন। এটি বিদ্যমান পোস্টে বার্তা পোস্ট করে না। বিদ্যমান পোস্টে পোস্ট করতে \"{option}\" ব্যবহার করুন", + "wayToGetTeamsURL": "আপনি কীভাবে একটি ওয়েবহুক URL {0} তৈরি করবেন তা শিখতে পারেন।", + "needSignalAPI": "আপনার REST API সহ একটি সিগন্যাল ক্লায়েন্ট থাকা দরকার।", + "Line Developers Console": "লাইন ডেভেলপার কনসোল", + "Messaging API": "মেসেজিং এপিআই", + "wayToGetLineChannelToken": "প্রথমে {0} অ্যাক্সেস করুন, একটি প্রোভাইডার এবং চ্যানেল (মেসেজিং API) তৈরি করুন, তারপর আপনি উপরে উল্লিখিত মেনু আইটেমগুলি থেকে চ্যানেল অ্যাক্সেস টোকেন এবং ব্যবহারকারী আইডি পেতে পারেন।", + "aboutIconURL": "ডিফল্ট প্রোফাইল ছবি ওভাররাইড করার জন্য আপনি \"আইকন URL\"-এ একটি ছবির লিঙ্ক দিতে পারেন। আইকন ইমোজি সেট করা থাকলে ব্যবহার করা হবে না।", + "confirmDeleteTagMsg": "আপনি কি নিশ্চিত যে আপনি এই ট্যাগটি মুছে ফেলতে চান? এই ট্যাগের সাথে সম্পর্কিত মনিটরগুলি মুছে ফেলা হবে না।", + "grpcMethodDescription": "পদ্ধতির নাম camelCase ফর্ম্যাটে রূপান্তর করা হয় যেমন sayHello, check, ইত্যাদি।", + "supportTelegramChatID": "সরাসরি চ্যাট / গ্রুপ / চ্যানেলের চ্যাট আইডি সমর্থন করুন", + "wayToGetTelegramChatID": "আপনি বটে একটি বার্তা পাঠিয়ে এবং chat_id দেখতে এই URL-এ গিয়ে আপনার চ্যাট আইডি পেতে পারেন:", + "YOUR BOT TOKEN HERE": "তোমার বট টোকেন এখানে", + "recurringInterval": "ব্যবধান", + "startDateTime": "শুরুর তারিখ/সময়", + "endDateTime": "শেষ তারিখ/সময়", + "cronSchedule": "সময়সূচী: ", + "invalidCronExpression": "অবৈধ ক্রোন এক্সপ্রেশন: {0}", + "Recurring": "পুনরাবৃত্তিমূলক", + "strategyManual": "সক্রিয়/নিষ্ক্রিয় ম্যানুয়ালি", + "warningTimezone": "এটি সার্ভারের টাইমজোন ব্যবহার করছে", + "weekdayShortMon": "সোম", + "weekdayShortTue": "মঙ্গল", + "weekdayShortWed": "বুধ", + "Schedule Maintenance": "সময়সূচী রক্ষণাবেক্ষণ", + "Access Token": "অ্যাক্সেস টোকেন", + "Enable DNS Cache": "(অবঞ্চিত) HTTP(গুলি) মনিটরের জন্য DNS ক্যাশে সক্ষম করুন", + "ipFamilyDescriptionAutoSelect": "আইপি ফ্যামিলি নির্ধারণের জন্য {happyEyeballs} ব্যবহার করে।", + "Ip Family": "আইপি পরিবার", + "HTTP Method": "HTTP পদ্ধতি", + "Saved.": "সংরক্ষিত।", + "authUserInactiveOrDeleted": "ব্যবহারকারী নিষ্ক্রিয় অথবা মুছে ফেলা হয়েছে।", + "authInvalidToken": "অবৈধ টোকেন।", + "authIncorrectCreds": "ভুল ব্যবহারকারীর নাম বা পাসওয়ার্ড।", + "2faAlreadyEnabled": "2FA ইতিমধ্যেই সক্রিয় আছে।", + "2faEnabled": "2FA সক্রিয়।", + "2faDisabled": "2FA অক্ষম।", + "successBackupRestored": "ব্যাকআপ সফলভাবে পুনরুদ্ধার করা হয়েছে।", + "successDisabled": "সফলভাবে অক্ষম করা হয়েছে।", + "tagNotFound": "ট্যাগ পাওয়া যায়নি।", + "foundChromiumVersion": "Chromium/Chrome পাওয়া গেছে। সংস্করণ: {0}", + "Remote Browsers": "রিমোট ব্রাউজার", + "evolutionInstanceName": "ইনস্ট্যান্স নাম", + "What is a Remote Browser?": "রিমোট ব্রাউজার কী?", + "documentationOf": "{0} ডকুমেন্টেশন", + "gtxMessagingApiKeyHint": "আপনি আপনার API কীটি এখানে খুঁজে পেতে পারেন: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)", + "To Phone Number": "ফোন নম্বরে", + "gtxMessagingToHint": "আন্তর্জাতিক ফর্ম্যাট, যার আগে \"+\" ({e164}, {e212} বা {e214}) থাকবে", + "Alphanumeric (recommended)": "বর্ণসংখ্যাসূচক (প্রস্তাবিত)", + "Telephone number": "টেলিফোন নম্বর", + "cellsyntOriginatortypeAlphanumeric": "আলফানিউমেরিক স্ট্রিং (সর্বোচ্চ ১১টি বর্ণানুক্রমিক অক্ষর)। প্রাপকরা বার্তার উত্তর দিতে পারবেন না।", + "Originator": "প্রবর্তক", + "Destination": "গন্তব্য", + "Allow Long SMS": "দীর্ঘ এসএমএস মঞ্জুর করুন", + "cellsyntSplitLongMessages": "লম্বা বার্তাগুলিকে সর্বোচ্চ ৬টি ভাগে ভাগ করুন। ১৫৩ x ৬ = ৯১৮ অক্ষর।", + "max 15 digits": "সর্বোচ্চ ১৫টি সংখ্যা", + "max 11 alphanumeric characters": "সর্বোচ্চ ১১টি বর্ণসাংখ্যিক অক্ষর", + "Community String": "কমিউনিটি স্ট্রিং", + "OID (Object Identifier)": "OID (বস্তু শনাক্তকারী)", + "snmpOIDHelptext": "আপনি যে সেন্সর বা স্ট্যাটাসটি পর্যবেক্ষণ করতে চান তার OID লিখুন। OID সম্পর্কে নিশ্চিত না হলে MIB ব্রাউজার বা SNMP সফ্টওয়্যারের মতো নেটওয়ার্ক ম্যানেজমেন্ট টুল ব্যবহার করুন।", + "Condition": "অবস্থা", + "Please enter a valid OID.": "দয়া করে একটি বৈধ OID লিখুন।", + "apiKeysDisabledMsg": "প্রমাণীকরণ অক্ষম থাকার কারণে API কীগুলি অক্ষম করা হয়েছে।", + "Host Onesender": "হোস্ট ওয়ানসেন্ডার", + "Token Onesender": "টোকেন ওয়ানসেন্ডার", + "Private Number": "ব্যক্তিগত নম্বর", + "groupOnesenderDesc": "নিশ্চিত করুন যে GroupIDটি বৈধ। Group-এ বার্তা পাঠাতে, উদাহরণস্বরূপ: 628123456789-342345", + "Group ID": "গ্রুপ আইডি", + "New Group": "নতুন গ্রুপ", + "Authentication Method": "প্রমাণীকরণ পদ্ধতি", + "Form Data Body": "ফর্ম ডেটা বডি", + "OAuth Token URL": "OAuth টোকেন ইউআরএল", + "Client ID": "ক্লায়েন্ট আইডি", + "Client Secret": "ক্লায়েন্ট সিক্রেট", + "OAuth Scope": "OAuth স্কোপ", + "Go back to home page.": "হোম পেজে ফিরে যান।", + "Lost connection to the socket server.": "সকেট সার্ভারের সাথে সংযোগ বিচ্ছিন্ন।", + "SIGNL4": "SIGNL4 সম্পর্কে", + "Conditions": "শর্তাবলী", + "conditionAdd": "শর্ত যোগ করুন", + "not starts with": "দিয়ে শুরু হয় না", + "not ends with": "শেষ হয় না", + "less than": "এর চেয়ে কম", + "greater than": "এর চেয়ে বড়", + "Arcade": "আর্কেড", + "Correct": "সঠিক", + "Fail": "ব্যর্থ", + "Harp": "বীণা", + "Reveal": "প্রকাশ করুন", + "Bubble": "বুদ্বুদ", + "Doorbell": "ডোরবেল", + "Flute": "বাঁশি", + "Money": "টাকা", + "Time Sensitive (iOS Only)": "সময় সংবেদনশীল (শুধুমাত্র iOS)", + "From": "থেকে", + "Can be found on:": "এখানে পাওয়া যাবে: {0}", + "The phone number of the recipient in E.164 format.": "প্রাপকের ফোন নম্বর E.164 ফর্ম্যাটে।", + "Separate multiple email addresses with commas": "একাধিক ইমেল ঠিকানা কমা দিয়ে আলাদা করুন", + "pingIntervalAdjustedInfo": "প্যাকেট গণনা, গ্লোবাল টাইমআউট এবং প্রতি-পিং টাইমআউটের উপর ভিত্তি করে ব্যবধান সমন্বয় করা হয়েছে", + "OneChatBotId": "সবচেয়ে সক্রিয় বট", + "YZJ Robot Token": "YZJ রোবট টোকেন", + "Plain Text": "সরল লেখা", + "Message Template": "বার্তা টেমপ্লেট", + "smsplanetApiToken": "SMSPlanet API-এর জন্য টোকেন", + "smsplanetApiDocs": "API টোকেন প্রাপ্তির বিস্তারিত তথ্য {the_smsplanet_documentation}-এ পাওয়া যাবে।", + "smsplanetNeedToApproveName": "ক্লায়েন্ট প্যানেলে অনুমোদিত হতে হবে", + "Disable URL in Notification": "বিজ্ঞপ্তিতে URL অক্ষম করুন", + "Happy Eyeballs algorithm": "হ্যাপি আইবলস অ্যালগরিদম", + "openModalTo": "{0} তে মোডাল খুলুন", + "Add a domain": "একটি ডোমেন যোগ করুন", + "Remove domain": "'{0}' ডোমেনটি সরান", + "Icon Emoji": "আইকন ইমোজি", + "Authorization Header": "অনুমোদনের শিরোনাম", + "OAuth Audience": "OAuth শ্রোতা", + "Optional: The audience to request the JWT for": "ঐচ্ছিক: JWT-এর কাছে অনুরোধ করার জন্য দর্শকরা", + "SIGNL4 Webhook URL": "SIGNL4 ওয়েবহুক ইউআরএল", + "not equals": "সমান নয়", + "contains": "ধারণ করে", + "conditionValuePlaceholder": "মূল্য", + "Mentioning": "উল্লেখ করা", + "onebotMessageType": "ওয়ানবট মেসেজের ধরণ", + "senderSevenIO": "নম্বর বা নাম পাঠানো হচ্ছে", + "Originator type": "উৎপত্তিকারীর ধরণ", + "Font Twemoji by Twitter licensed under": "টুইটারের ফন্ট টুইমোজি লাইসেন্সপ্রাপ্ত", + "deleteMaintenanceMsg": "আপনি কি নিশ্চিত যে এই রক্ষণাবেক্ষণটি মুছে ফেলতে চান?", + "dnsPortDescription": "DNS সার্ভার পোর্ট। ডিফল্ট 53। আপনি যেকোনো সময় পোর্ট পরিবর্তন করতে পারেন।", + "resolverserverDescription": "ক্লাউডফ্লেয়ার হল ডিফল্ট সার্ভার। আপনি যেকোনো সময় রেজলভার সার্ভার পরিবর্তন করতে পারেন।", + "rrtypeDescription": "আপনি যে RR টাইপটি পর্যবেক্ষণ করতে চান তা নির্বাচন করুন", + "pauseMonitorMsg": "তুমি কি নিশ্চিতভাবে বিরতি দিতে চাও?", + "enableDefaultNotificationDescription": "নতুন মনিটরের জন্য এই বিজ্ঞপ্তিটি ডিফল্টরূপে সক্রিয় থাকবে। আপনি এখনও প্রতিটি মনিটরের জন্য আলাদাভাবে বিজ্ঞপ্তিটি অক্ষম করতে পারেন।", + "Clear All Events": "সকল ইভেন্ট সাফ করুন", + "clearAllEventsMsg": "আপনি কি নিশ্চিত যে সমস্ত ইভেন্ট মুছে ফেলতে চান?", + "Events cleared successfully": "ইভেন্টগুলি সফলভাবে সাফ করা হয়েছে।", + "No monitors found": "কোন মনিটর পাওয়া যায়নি।", + "Strategy": "কৌশল", + "Free Mobile User Identifier": "বিনামূল্যে মোবাইল ব্যবহারকারী শনাক্তকারী", + "Free Mobile API Key": "বিনামূল্যে মোবাইল API কী", + "Enable TLS": "TLS সক্ষম করুন", + "goAlertIntegrationKeyInfo": "পরিষেবার জন্য জেনেরিক API ইন্টিগ্রেশন কী এই ফর্ম্যাটে পান \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" সাধারণত কপি করা URL এর টোকেন প্যারামিটারের মান।", + "SecretAccessKey": "অ্যাক্সেসকি সিক্রেট", + "PhoneNumbers": "ফোন নম্বর", + "SignName": "সাইননাম", + "Bark API Version": "বার্ক এপিআই সংস্করণ", + "Bark Endpoint": "বার্ক এন্ডপয়েন্ট", + "For safety, must use secret key": "নিরাপত্তার জন্য, গোপন চাবি ব্যবহার করতে হবে", + "Mention group": "{গ্রুপ} উল্লেখ করুন", + "Mention Mobile List": "মোবাইল তালিকা উল্লেখ করুন", + "Dingtalk Mobile List": "মোবাইল তালিকা", + "Dingtalk User List": "ব্যবহারকারী আইডি তালিকা", + "Enter a list of userId": "ব্যবহারকারীর আইডির একটি তালিকা লিখুন", + "Invalid mobile": "অবৈধ মোবাইল [{মোবাইল}]", + "Invalid userId": "অবৈধ ব্যবহারকারী আইডি [{userId}]", + "Platform": "প্ল্যাটফর্ম", + "High": "উচ্চ", + "Retry": "পুনরায় চেষ্টা করুন", + "Topic": "বিষয়", + "WeCom Bot Key": "WeCom বট কী", + "Proxy server has authentication": "প্রক্সি সার্ভারের প্রমাণীকরণ আছে", + "aboutNotifyChannel": "নোটিফাই চ্যানেল চ্যানেলের সকল সদস্যের জন্য একটি ডেস্কটপ বা মোবাইল বিজ্ঞপ্তি ট্রিগার করবে, তাদের উপলব্ধতা সক্রিয় বা দূরে সেট করা হোক না কেন।", + "signalImportant": "গুরুত্বপূর্ণ: আপনি প্রাপকদের মধ্যে গ্রুপ এবং সংখ্যা মিশ্রিত করতে পারবেন না!", + "smtpDkimSettings": "DKIM সেটিংস", + "smtpDkimDesc": "ব্যবহারের জন্য অনুগ্রহ করে Nodemailer DKIM {0} দেখুন।", + "documentation": "ডকুমেন্টেশন", + "smtpDkimDomain": "ডোমেইন নাম", + "smtpDkimKeySelector": "কী নির্বাচক", + "smtpDkimPrivateKey": "ব্যক্তিগত চাবি", + "smtpDkimHashAlgo": "হ্যাশ অ্যালগরিদম (ঐচ্ছিক)", + "smtpDkimheaderFieldNames": "স্বাক্ষর করার জন্য হেডার কী (ঐচ্ছিক)", + "Integration Key": "ইন্টিগ্রেশন কী", + "do nothing": "কিছু করো না", + "auto acknowledged": "স্বয়ংক্রিয়ভাবে স্বীকৃত", + "alertaEnvironment": "পরিবেশ", + "alertaApiKey": "API কী", + "smseagleContact": "ফোনবুকের যোগাযোগের নাম(গুলি)", + "smseagleContactV2": "ফোনবুক যোগাযোগ আইডি(গুলি)", + "smseagleRecipientType": "প্রাপকের ধরণ", + "smseagleEncoding": "ইউনিকোড হিসেবে পাঠান (ডিফল্ট=GSM-7)", + "smspartnerSenderName": "এসএমএস প্রেরকের নাম", + "Recipient Number": "প্রাপকের নম্বর", + "From Name/Number": "নাম/নম্বর থেকে", + "Legacy Octopush-DM": "লিগ্যাসি অক্টোপাস-ডিএম", + "Server URL should not contain the nfty topic": "ntfy বিষয়", + "onebotHttpAddress": "ওয়ানবট HTTP ঠিকানা", + "onebotGroupMessage": "গ্রুপ", + "onebotPrivateMessage": "ব্যক্তিগত", + "onebotUserOrGroupId": "গ্রুপ/ব্যবহারকারী আইডি", + "PushDeer Server": "পুশডিয়ার সার্ভার", + "PushDeer Key": "পুশডিয়ার কী", + "wayToGetClickSendSMSToken": "আপনি {0} থেকে API ব্যবহারকারীর নাম এবং API কী পেতে পারেন।", + "Custom Monitor Type": "কাস্টম মনিটরের ধরণ", + "disableAPIKeyMsg": "আপনি কি নিশ্চিত যে আপনি এই API কীটি অক্ষম করতে চান?", + "Generate": "উৎপন্ন করুন", + "Badge Label Prefix": "ব্যাজ লেবেল উপসর্গ", + "Badge Up Color": "ব্যাজ আপ রঙ", + "Badge Pending Color": "ব্যাজ মুলতুবি রঙ", + "Badge Maintenance Color": "ব্যাজ রক্ষণাবেক্ষণের রঙ", + "Badge Warn Days": "ব্যাজ সতর্কীকরণ দিনগুলি", + "Badge Down Days": "ব্যাজ ডাউন ডেজ", + "Badge Style": "ব্যাজ স্টাইল", + "Badge URL": "ব্যাজ ইউআরএল", + "Group": "গ্রুপ", + "Monitor Group": "মনিটর গ্রুপ", + "monitorToastMessagesLabel": "টোস্ট বিজ্ঞপ্তিগুলি পর্যবেক্ষণ করুন", + "toastErrorTimeout": "ত্রুটি বিজ্ঞপ্তির জন্য সময়সীমা শেষ", + "toastSuccessTimeout": "সাফল্যের বিজ্ঞপ্তির সময়সীমা শেষ", + "Kafka Brokers": "কাফকা ব্রোকার্স", + "Enter the list of brokers": "ব্রোকারদের তালিকা লিখুন", + "Kafka SASL Options": "কাফকা SASL বিকল্পগুলি", + "FlashDuty Severity": "তীব্রতা", + "Mechanism": "প্রক্রিয়া", + "FlashDuty Push URL": "পুশ ইউআরএল", + "FlashDuty Push URL Placeholder": "সতর্কতামূলক ইন্টিগ্রেশন পৃষ্ঠা থেকে কপি করুন", + "AccessKey Id": "অ্যাক্সেস কী আইডি", + "Secret AccessKey": "গোপন অ্যাক্সেস কী", + "Session Token": "সেশন টোকেন", + "Close": "বন্ধ করা", + "cacheBusterParam": "{0} প্যারামিটার যোগ করুন", + "cacheBusterParamDescription": "ক্যাশে এড়িয়ে যাওয়ার জন্য এলোমেলোভাবে তৈরি প্যারামিটার।", + "gamedigGuessPort": "গেমডিগ: গেস পোর্ট", + "Message format": "বার্তার ফর্ম্যাট", + "successPaused": "সফলভাবে বিরতি দেওয়া হয়েছে।", + "successResumed": "সফলভাবে পুনরায় শুরু হয়েছে।", + "successEdited": "সফলভাবে সম্পাদিত।", + "Remote Browser not found!": "রিমোট ব্রাউজার খুঁজে পাওয়া যায়নি!", + "self-hosted container": "স্ব-হোস্টেড কন্টেইনার", + "useRemoteBrowser": "একটি রিমোট ব্রাউজার ব্যবহার করুন", + "GrafanaOncallUrl": "গ্রাফানা অনকল ইউআরএল", + "Browser Screenshot": "ব্রাউজারের স্ক্রিনশট", + "Command": "কমান্ড", + "wayToGetSevenIOApiKey": "app.seven.io > ডেভেলপার > api কী > সবুজ অ্যাড বোতামের অধীনে ড্যাশবোর্ডে যান", + "receiverSevenIO": "গ্রহণকারী নম্বর", + "apiKeySevenIO": "SevenIO API কী", + "wayToWriteWhapiRecipient": "আন্তর্জাতিক উপসর্গ সহ ফোন নম্বর, কিন্তু শুরুতে ({0}), যোগাযোগ আইডি ({1}) অথবা গ্রুপ আইডি ({2}) ছাড়া।", + "evolutionRecipient": "ফোন নম্বর / যোগাযোগ আইডি / গ্রুপ আইডি", + "threemaRecipientTypeIdentity": "থ্রিমা-আইডি", + "threemaRecipientTypeEmail": "ইমেইল ঠিকানা", + "threemaRecipientTypeIdentityFormat": "৮টি অক্ষর", + "threemaRecipientTypePhone": "ফোন নম্বর", + "threemaRecipientTypePhoneFormat": "E.164, লিডিং + ছাড়াই", + "threemaSenderIdentity": "গেটওয়ে-আইডি", + "threemaApiAuthenticationSecret": "গেটওয়ে-আইডি সিক্রেট", + "conditionDelete": "শর্ত মুছে ফেলুন", + "conditionAddGroup": "গ্রুপ যোগ করুন", + "signl4Docs": "SIGNL4 কীভাবে কনফিগার করবেন এবং SIGNL4 ওয়েবহুক URL কীভাবে পাবেন সে সম্পর্কে আরও তথ্য আপনি {0}-এ পেতে পারেন।", + "brevoApiHelp": "এখানে একটি API কী তৈরি করুন: {0}", + "brevoApiKey": "ব্রেভো এপিআই কী", + "brevoFromEmail": "ইমেল থেকে", + "brevoLeaveBlankForDefaultName": "ডিফল্ট নামের জন্য ফাঁকা রাখুন", + "brevoFromName": "নাম থেকে", + "Custom URL": "কাস্টম URL", + "the smsplanet documentation": "smsplanet ডকুমেন্টেশন", + "Phone numbers": "ফোন নম্বর", + "SNMP Version": "SNMP সংস্করণ", + "clearEventsMsg": "আপনি কি এই মনিটরের জন্য সমস্ত ইভেন্ট মুছে ফেলার বিষয়ে নিশ্চিত?", + "clearHeartbeatsMsg": "আপনি কি নিশ্চিত যে এই মনিটরের জন্য সমস্ত হার্টবিট মুছে ফেলতে চান?", + "confirmClearStatisticsMsg": "আপনি কি নিশ্চিত যে আপনি সমস্ত পরিসংখ্যান মুছে ফেলতে চান?", + "You can divide numbers with": "তুমি সংখ্যাগুলিকে ভাগ করতে পারো", + "Base URL": "বেস ইউআরএল", + "AccessKeyId": "অ্যাক্সেসকি আইডি", + "aboutKumaURL": "যদি আপনি Uptime Kuma URL ক্ষেত্রটি ফাঁকা রাখেন, তাহলে এটি Project GitHub পৃষ্ঠায় ডিফল্টভাবে প্রদর্শিত হবে।", + "pagertreeUrgency": "জরুরি অবস্থা", + "pagertreeSilent": "নীরব", + "pagertreeLow": "কম", + "pagertreeHigh": "উচ্চ", + "pagertreeCritical": "সমালোচনামূলক", + "pagertreeResolve": "অটো রিসলভ", + "pagertreeDoNothing": "কিছু করো না", + "lunaseaDeviceID": "ডিভাইস আইডি", + "lunaseaTarget": "লক্ষ্য", + "ntfyUsernameAndPassword": "ব্যবহারকারীর নাম এবং পাসওয়ার্ড", + "twilioAccountSID": "অ্যাকাউন্ট SID", + "twilioToNumber": "সংখ্যায়", + "Monitor Setting": "{0} এর মনিটর সেটিং", + "starts with": "দিয়ে শুরু হয়", + "Custom sound to override default notification sound": "ডিফল্ট বিজ্ঞপ্তি শব্দকে ওভাররাইড করার জন্য কাস্টম শব্দ", + "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "উত্তর পেতে চাইলে হয় একটি টেক্সট প্রেরক আইডি অথবা E.164 ফর্ম্যাটের একটি ফোন নম্বর।", + "RabbitMQ Nodes": "RabbitMQ ম্যানেজমেন্ট নোড", + "rabbitmqNodesDescription": "প্রোটোকল এবং পোর্ট সহ RabbitMQ ম্যানেজমেন্ট নোডের URL লিখুন। উদাহরণ: {0}", + "rabbitmqNodesRequired": "এই মনিটরের জন্য নোডগুলি সেট করুন।", + "equals": "সমান", + "not contains": "নেই", + "rabbitmqNodesInvalid": "RabbitMQ নোডের জন্য অনুগ্রহ করে একটি সম্পূর্ণ যোগ্যতাসম্পন্ন ('http' দিয়ে শুরু) URL ব্যবহার করুন।", + "RabbitMQ Username": "RabbitMQ ব্যবহারকারীর নাম", + "customUrlDescription": "মনিটরের URL এর পরিবর্তে ক্লিকযোগ্য URL হিসেবে ব্যবহার করা হবে।", + "OneChatAccessToken": "ওয়ানচ্যাট অ্যাক্সেস টোকেন", + "OneChatUserIdOrGroupId": "ওয়ানচ্যাট ব্যবহারকারী আইডি বা গ্রুপ আইডি", + "SecretKey": "সিক্রেটকি", + "Bark Sound": "বার্ক সাউন্ড", + "WebHookUrl": "ওয়েবহুকইউআরএল", + "Setup Proxy": "প্রক্সি সেট আপ করুন", + "Proxy Server": "প্রক্সি সার্ভার", + "ntfy Topic": "ntfy বিষয়", + "Badge Type": "ব্যাজের ধরণ", + "showCertificateExpiry": "সার্টিফিকেটের মেয়াদ দেখান", + "deleteNotificationMsg": "আপনি কি নিশ্চিত যে সমস্ত মনিটরের জন্য এই বিজ্ঞপ্তিটি মুছে ফেলতে চান?", + "API URL": "এপিআই ইউআরএল", + "Feishu WebHookUrl": "ফেইশু ওয়েবহুক ইউআরএল", + "matrixHomeserverURL": "হোমসার্ভার URL (http(s):// এবং ঐচ্ছিকভাবে পোর্ট সহ)", + "Internal Room Id": "অভ্যন্তরীণ কক্ষ আইডি", + "promosmsAllowLongSMS": "দীর্ঘ SMS-এর অনুমতি দিন", + "Uptime Kuma URL": "আপটাইম কুমা ইউআরএল", + "Integration URL": "ইন্টিগ্রেশন ইউআরএল", + "auto resolve": "স্বয়ংক্রিয় সমাধান", + "alertaRecoverState": "অবস্থা পুনরুদ্ধার করুন", + "serwersmsAPIPassword": "এপিআই পাসওয়ার্ড", + "serwersmsPhoneNumber": "ফোন নম্বর", + "smseagleTo": "ফোন নম্বর(গুলি)", + "smseagleGroup": "ফোনবুক গ্রুপের নাম(গুলি)", + "smseagleUrl": "API অ্যাক্সেস টোকেন", + "smseagleApiType": "এপিআই সংস্করণ", + "Octopush API Version": "অক্টোপাস এপিআই সংস্করণ", + "Edit Tag": "ট্যাগ সম্পাদনা করুন", + "Learn More": "আরও জানুন", + "Body Encoding": "বডি এনকোডিং", + "API Keys": "এপিআই কী", + "Expiry date": "মেয়াদ শেষ হওয়ার তারিখ", + "Continue": "চালিয়ে যান", + "Add Another": "আরেকটি যোগ করুন", + "Key Added": "কী যোগ করা হয়েছে", + "Don't expire": "মেয়াদ শেষ করবেন না", + "apiKey-active": "সক্রিয়", + "apiKey-expired": "মেয়াদোত্তীর্ণ", + "apiKey-inactive": "নিষ্ক্রিয়", + "Expires": "মেয়াদ শেষ", + "Add API Key": "API কী যোগ করুন", + "No API Keys": "কোনও API কী নেই", + "ntfyAuthenticationMethod": "প্রমাণীকরণ পদ্ধতি", + "lunaseaUserID": "ব্যবহারকারী আইডি", + "ntfyPriorityHelptextAllEvents": "সকল ইভেন্ট সর্বোচ্চ অগ্রাধিকার দিয়ে পাঠানো হয়।সকল ইভেন্ট সর্বোচ্চ অগ্রাধিকার দিয়ে পাঠানো হয়।সকল ইভেন্ট সর্বোচ্চ অগ্রাধিকার দিয়ে পাঠানো হয়", + "ntfyPriorityDown": "ডাউন-ইভেন্টের জন্য অগ্রাধিকার", + "ntfyPriorityHelptextPriorityHigherThanDown": "নিয়মিত অগ্রাধিকার {0} অগ্রাধিকারের চেয়ে বেশি হওয়া উচিত। অগ্রাধিকার {1}, {0} অগ্রাধিকার {2} এর চেয়ে বেশি", + "twilioApiKey": "এপিআই কী (ঐচ্ছিক)", + "twilioAuthToken": "Auth টোকেন / Api কী সিক্রেট", + "twilioFromNumber": "নম্বর থেকে", + "Show Clickable Link": "ক্লিকযোগ্য লিঙ্ক দেখান", + "Show Clickable Link Description": "যদি চেক করা থাকে, তাহলে এই স্ট্যাটাস পৃষ্ঠায় যাদের অ্যাক্সেস আছে তারা সকলেই মনিটরের URL অ্যাক্সেস করতে পারবেন।", + "Badge Label": "ব্যাজ লেবেল", + "Open Badge Generator": "ব্যাজ জেনারেটর খুলুন", + "Badge Generator": "{0} এর ব্যাজ জেনারেটর", + "Badge Duration (in hours)": "ব্যাজের সময়কাল (ঘণ্টায়)", + "Badge Prefix": "ব্যাজ মান উপসর্গ", + "Badge Suffix": "ব্যাজ মান প্রত্যয়", + "Badge Label Color": "ব্যাজ লেবেলের রঙ", + "Badge Color": "ব্যাজের রঙ", + "Badge Preview": "ব্যাজ প্রিভিউ", + "Badge Label Suffix": "ব্যাজ লেবেল প্রত্যয়", + "Badge Down Color": "ব্যাজ ডাউন কালার", + "Kafka Topic Name": "কাফকা বিষয়ের নাম", + "Enable Kafka SSL": "কাফকা SSL সক্ষম করুন", + "Enable Kafka Producer Auto Topic Creation": "কাফকা প্রযোজক অটো টপিক তৈরি সক্ষম করুন", + "nostrRelaysHelp": "প্রতি লাইনে একটি রিলে URL", + "nostrRelays": "আমাদের রিলে", + "nostrRecipients": "প্রাপকদের পাবলিক কী (npub)", + "Bitrix24 Webhook URL": "Bitrix24 ওয়েবহুক ইউআরএল", + "successAdded": "সফলভাবে যোগ করা হয়েছে।", + "threemaRecipient": "প্রাপক", + "Group Name": "গ্রুপের নাম", + "OAuth2: Client Credentials": "OAuth2: ক্লায়েন্ট শংসাপত্র", + "conditionDeleteGroup": "গ্রুপ মুছুন", + "record": "রেকর্ড", + "Sound": "শব্দ", + "Alphanumerical string and hyphens only": "শুধুমাত্র বর্ণানুক্রমিক স্ট্রিং এবং হাইফেন", + "Pop": "পপ", + "Template Format": "টেমপ্লেট ফর্ম্যাট", + "Request Body": "অনুরোধের মূল অংশ", + "smtpDkimskipFields": "স্বাক্ষর না করার জন্য হেডার কী (ঐচ্ছিক)", + "SpugPush Template Code": "টেমপ্লেট কোড", + "Clear": "পরিষ্কার", + "Elevator": "লিফট", + "pingCountLabel": "সর্বোচ্চ প্যাকেট", + "Could not clear events": "{failed}/{total}টি ইভেন্ট সাফ করা যায়নি", + "gamedigGuessPortDescription": "ভালভ সার্ভার কোয়েরি প্রোটোকল দ্বারা ব্যবহৃত পোর্ট ক্লায়েন্ট পোর্ট থেকে আলাদা হতে পারে। যদি মনিটর আপনার সার্ভারের সাথে সংযোগ করতে না পারে তবে এটি চেষ্টা করুন।", + "LunaSea Device ID": "লুনাসি ডিভাইস আইডি", + "Send rich messages": "সমৃদ্ধ বার্তা পাঠান", + "SMSManager API Docs": "SMSManager API ডক্স ", + "wayToGetBitrix24Webhook": "আপনি {0}-এ দেওয়া ধাপগুলি অনুসরণ করে একটি ওয়েবহুক তৈরি করতে পারেন", + "Gateway Type": "গেটওয়ের ধরণ", + "goAlertInfo": "GoAlert হল অন-কল শিডিউলিং, স্বয়ংক্রিয় এসকেলেশন এবং বিজ্ঞপ্তি (যেমন SMS বা ভয়েস কল) এর জন্য একটি ওপেন সোর্স অ্যাপ্লিকেশন। সঠিক ব্যক্তিকে, সঠিক উপায়ে এবং সঠিক সময়ে স্বয়ংক্রিয়ভাবে যুক্ত করুন! {0}", + "bitrix24SupportUserID": "Bitrix24 এ আপনার ব্যবহারকারী আইডি লিখুন। আপনি ব্যবহারকারীর প্রোফাইলে গিয়ে লিঙ্কটি থেকে আইডিটি খুঁজে পেতে পারেন।", + "TemplateCode": "টেমপ্লেটকোড", + "successDeleted": "সফলভাবে মুছে ফেলা হয়েছে।", + "Sms template must contain parameters: ": "এসএমএস টেমপ্লেটে অবশ্যই নিম্নলিখিত প্যারামিটার থাকতে হবে: ", + "successAuthChangePassword": "পাসওয়ার্ড সফলভাবে আপডেট করা হয়েছে।", + "Don't mention people": "মানুষের কথা উল্লেখ করো না", + "Mention User List": "ব্যবহারকারীর আইডি তালিকা উল্লেখ করুন", + "successEnabled": "সফলভাবে সক্ষম করা হয়েছে।", + "Enter a list of mobile": "মোবাইলের একটি তালিকা লিখুন", + "Remote Browser": "রিমোট ব্রাউজার", + "Device Token": "ডিভাইস টোকেন", + "Add a Remote Browser": "একটি রিমোট ব্রাউজার যোগ করুন", + "Huawei": "হুয়াওয়ে", + "remoteBrowsersDescription": "দূরবর্তী ব্রাউজারগুলি স্থানীয়ভাবে Chromium চালানোর বিকল্প। browserless.io এর মতো একটি পরিষেবা দিয়ে সেট আপ করুন অথবা আপনার নিজস্ব পরিষেবার সাথে সংযোগ করুন", + "Proxy Protocol": "প্রক্সি প্রোটোকল", + "remoteBrowserToggle": "ডিফল্টরূপে Chromium Uptime Kuma কন্টেইনারের ভিতরে চলে। আপনি এই সুইচটি টগল করে একটি রিমোট ব্রাউজার ব্যবহার করতে পারেন।", + "promosmsTypeEco": "SMS ECO - সস্তা কিন্তু ধীর এবং প্রায়শই অতিরিক্ত লোডযুক্ত। শুধুমাত্র পোলিশ গ্রাহকদের জন্য সীমাবদ্ধ।", + "deleteRemoteBrowserMessage": "আপনি কি নিশ্চিত যে সমস্ত মনিটরের জন্য এই রিমোট ব্রাউজারটি মুছে ফেলতে চান?", + "promosmsTypeFlash": "এসএমএস ফ্ল্যাশ - বার্তাটি স্বয়ংক্রিয়ভাবে প্রাপকের ডিভাইসে প্রদর্শিত হবে। শুধুমাত্র পোলিশ প্রাপকদের জন্য সীমাবদ্ধ।", + "mongodbCommandDescription": "ডাটাবেসের বিরুদ্ধে একটি MongoDB কমান্ড চালান। উপলব্ধ কমান্ড সম্পর্কে তথ্যের জন্য {ডকুমেন্টেশন} দেখুন", + "promosmsTypeFull": "এসএমএস ফুল - প্রিমিয়াম স্তরের এসএমএস, আপনি আপনার প্রেরকের নাম ব্যবহার করতে পারেন (প্রথমে আপনার নাম নিবন্ধন করতে হবে)। সতর্কতার জন্য নির্ভরযোগ্য।", + "receiverInfoSevenIO": "যদি রিসিভিং নম্বরটি জার্মানিতে অবস্থিত না হয়, তাহলে আপনাকে নম্বরের সামনে দেশের কোড যোগ করতে হবে (যেমন, মার্কিন যুক্তরাষ্ট্রের দেশের কোড ১ এর জন্য 017612121212 এর পরিবর্তে 1176121212 ব্যবহার করুন)", + "wayToGetWhapiUrlAndToken": "{0} থেকে আপনার পছন্দসই চ্যানেলে গিয়ে আপনি API URL এবং টোকেন পেতে পারেন", + "promosmsTypeSpeed": "এসএমএস স্পিড - সিস্টেমে সর্বোচ্চ অগ্রাধিকার। খুব দ্রুত এবং নির্ভরযোগ্য কিন্তু ব্যয়বহুল (এসএমএস এর সম্পূর্ণ মূল্যের প্রায় দ্বিগুণ)।", + "promosmsPhoneNumber": "ফোন নম্বর (পোলিশ প্রাপকের জন্য আপনি এরিয়া কোড এড়িয়ে যেতে পারেন)", + "whapiRecipient": "ফোন নম্বর / যোগাযোগ আইডি / গ্রুপ আইডি", + "promosmsSMSSender": "এসএমএস প্রেরকের নাম: পূর্ব-নিবন্ধিত নাম অথবা ডিফল্টগুলির মধ্যে একটি: ইনফোএসএমএস, এসএমএস তথ্য, ম্যাক্সএসএমএস, ইনফো, এসএমএস", + "wayToWriteEvolutionRecipient": "আন্তর্জাতিক উপসর্গ সহ ফোন নম্বর, কিন্তু শুরুতে ({0}), যোগাযোগ আইডি ({1}) অথবা গ্রুপ আইডি ({2}) ছাড়া।", + "matrixDesc1": "আপনার ম্যাট্রিক্স ক্লায়েন্টের রুম সেটিংসের অ্যাডভান্সড বিভাগে অনুসন্ধান করে আপনি অভ্যন্তরীণ রুম আইডি খুঁজে পেতে পারেন। এটি দেখতে !QMdRCpUIfLwsfjxye6:home.server এর মতো হওয়া উচিত।", + "wayToGetEvolutionUrlAndToken": "{0} থেকে আপনার পছন্দসই চ্যানেলে গিয়ে আপনি API URL এবং টোকেন পেতে পারেন", + "matrixDesc2": "আপনার নিজস্ব ম্যাট্রিক্স ব্যবহারকারীর অ্যাক্সেস টোকেন ব্যবহার না করে একটি নতুন ব্যবহারকারী তৈরি করার পরামর্শ দেওয়া হচ্ছে কারণ এটি আপনার অ্যাকাউন্ট এবং আপনি যে সমস্ত রুমে যোগদান করেছেন তাতে সম্পূর্ণ অ্যাক্সেস দেবে। পরিবর্তে, একটি নতুন ব্যবহারকারী তৈরি করুন এবং শুধুমাত্র সেই রুমে আমন্ত্রণ জানান যেখানে আপনি বিজ্ঞপ্তি পেতে চান। আপনি {0} চালিয়ে অ্যাক্সেস টোকেন পেতে পারেন", + "wayToGetHeiiOnCallDetails": "ট্রিগার আইডি এবং এপিআই কী কীভাবে পাবেন তা {ডকুমেন্টেশন}-এ ব্যাখ্যা করা হয়েছে", + "Notify Channel": "চ্যানেলটি জানান", + "callMeBotGet": "এখানে আপনি {0}, {1} এবং {2} এর জন্য একটি এন্ডপয়েন্ট তৈরি করতে পারেন। মনে রাখবেন যে আপনি সীমিত হার পেতে পারেন। হারের সীমাগুলি মনে হচ্ছে: {3}", + "aboutWebhooks": "ওয়েবহুক সম্পর্কে আরও তথ্য এখানে: {0}", + "From Phone Number / Transmission Path Originating Address (TPOA)": "ফোন নম্বর / ট্রান্সমিশন পাথ অরিজিনেটিং অ্যাড্রেস (TPOA) থেকে", + "aboutSlackUsername": "বার্তা প্রেরকের প্রদর্শন নাম পরিবর্তন করে। যদি আপনি কাউকে উল্লেখ করতে চান, তাহলে বন্ধুত্বপূর্ণ নামে এটি অন্তর্ভুক্ত করুন।", + "gtxMessagingFromHint": "মোবাইল ফোনে, আপনার প্রাপক বার্তার প্রেরক হিসেবে TPOA দেখতে পাবেন। অনুমোদিত সংখ্যা হল সর্বোচ্চ ১১টি বর্ণসাংখ্যিক অক্ষর, একটি শর্টকোড, স্থানীয় লংকোড অথবা আন্তর্জাতিক নম্বর ({e164}, {e212} অথবা {e214})", + "aboutChannelName": "ওয়েবহুক চ্যানেল বাইপাস করতে চাইলে {0} চ্যানেল নেম ফিল্ডে চ্যানেলের নাম লিখুন। যেমন: #other-channel", + "cellsyntOriginatortypeNumeric": "আন্তর্জাতিক ফর্ম্যাটে টেলিফোন নম্বর সহ সংখ্যাসূচক মান (সর্বোচ্চ ১৫ সংখ্যা) যার আগে 00 নেই (উদাহরণস্বরূপ UK নম্বর 07920 110 000 447920110000 হিসাবে সেট করা উচিত)। প্রাপকরা বার্তার উত্তর দিতে পারেন।", + "cellsyntOriginator": "বার্তার উৎস হিসেবে প্রাপকের মোবাইল ফোনে দৃশ্যমান। অনুমোদিত মান এবং কার্যকারিতা প্যারামিটার উৎসের ধরণ অনুসারে নির্ভর করে।", + "wayToGetPagerDutyKey": "আপনি এটি পরিষেবা -> পরিষেবা ডিরেক্টরি -> (একটি পরিষেবা নির্বাচন করুন) -> ইন্টিগ্রেশন -> ইন্টিগ্রেশন যোগ করুন এ গিয়ে পেতে পারেন। এখানে আপনি \"ইভেন্টস API V2\" অনুসন্ধান করতে পারেন। আরও তথ্য {0}", + "Auto resolve or acknowledged": "স্বয়ংক্রিয় সমাধান বা স্বীকৃত", + "cellsyntDestination": "প্রাপকের টেলিফোন নম্বর আন্তর্জাতিক ফর্ম্যাটে, যার আগে 00 থাকে এবং তারপর দেশের কোড থাকে, যেমন যুক্তরাজ্যের 07920 110 000 নম্বরের জন্য 00447920110000 (মোট সর্বোচ্চ 17 সংখ্যা)। প্রতি HTTP অনুরোধে সর্বাধিক 25000 কমা দ্বারা পৃথক প্রাপক।", + "alertaApiEndpoint": "এপিআই এন্ডপয়েন্ট", + "snmpCommunityStringHelptext": "এই স্ট্রিংটি SNMP-সক্ষম ডিভাইসগুলিতে অ্যাক্সেস প্রমাণীকরণ এবং নিয়ন্ত্রণ করার জন্য একটি পাসওয়ার্ড হিসাবে কাজ করে। এটি আপনার SNMP ডিভাইসের কনফিগারেশনের সাথে মিলিয়ে নিন।", + "alertaAlertState": "সতর্কতার অবস্থা", + "wayToGetThreemaGateway": "আপনি থ্রিমা গেটওয়ে {0}-এর জন্য নিবন্ধন করতে পারেন।", + "serwersmsAPIUser": "API ব্যবহারকারীর নাম (webapi_ উপসর্গ সহ)", + "threemaSenderIdentityFormat": "৮টি অক্ষর, সাধারণত * দিয়ে শুরু হয়", + "serwersmsSenderName": "এসএমএস প্রেরকের নাম (গ্রাহক পোর্টালের মাধ্যমে নিবন্ধিত)", + "threemaBasicModeInfo": "দ্রষ্টব্য: এই ইন্টিগ্রেশনটি বেসিক মোডে (সার্ভার-ভিত্তিক এনক্রিপশন) থ্রিমা গেটওয়ে ব্যবহার করে। আরও বিশদ বিবরণ {0}-এ পাওয়া যাবে।", + "smseagleGroupV2": "ফোনবুক গ্রুপ আইডি(গুলি)", + "Recipient Type": "প্রাপকের ধরণ", + "smseagleRecipient": "প্রাপক (একাধিক কমা দিয়ে আলাদা করতে হবে)", + "privateOnesenderDesc": "নিশ্চিত করুন যে নম্বরের ফোন নম্বরটি বৈধ। ব্যক্তিগত নম্বরের ফোন নম্বরে বার্তা পাঠাতে, যেমন: 628123456789", + "smseagleToken": "API অ্যাক্সেস টোকেন", + "smseagleTtsModel": "টেক্সট-টু-স্পিচ মডেল আইডি", + "smspartnerPhoneNumberHelptext": "সংখ্যাটি আন্তর্জাতিক ফর্ম্যাটে {0}, {1} হতে হবে। একাধিক সংখ্যাকে {2} দ্বারা পৃথক করতে হবে", + "wayToGetOnesenderUrlandToken": "আপনি Onesender ওয়েবসাইটে গিয়ে URL এবং টোকেন পেতে পারেন। আরও তথ্য {0}", + "smspartnerSenderNameInfo": "৩..=১১ টি নিয়মিত অক্ষরের মধ্যে হতে হবে", + "Add Remote Browser": "রিমোট ব্রাউজার যোগ করুন", + "Leave blank to use a shared sender number.": "একটি ভাগ করা প্রেরক নম্বর ব্যবহার করার জন্য ফাঁকা ছেড়ে দিন।", + "onebotSafetyTips": "নিরাপত্তার জন্য, অ্যাক্সেস টোকেন সেট করতে হবে", + "Optional: Space separated list of scopes": "ঐচ্ছিক: স্থান পৃথক করে স্কোপ তালিকা", + "pushDeerServerDescription": "অফিসিয়াল সার্ভার ব্যবহার করার জন্য ফাঁকা রাখুন", + "No tags found.": "কোন ট্যাগ পাওয়া যায়নি।", + "Google Analytics ID": "গুগল অ্যানালিটিক্স আইডি", + "Cannot connect to the socket server.": "সকেট সার্ভারের সাথে সংযোগ স্থাপন করা যাচ্ছে না।", + "Server Address": "সার্ভার ঠিকানা", + "ends with": "দিয়ে শেষ হয়", + "apiKeyAddedMsg": "আপনার API কী যোগ করা হয়েছে। দয়া করে এটি মনে রাখবেন কারণ এটি আর দেখানো হবে না।", + "less than or equal to": "এর চেয়ে কম বা সমান", + "deleteAPIKeyMsg": "আপনি কি নিশ্চিত যে আপনি এই API কীটি মুছে ফেলতে চান?", + "greater than or equal to": "এর চেয়ে বড় বা সমান", + "pagertreeIntegrationUrl": "ইন্টিগ্রেশন ইউআরএল", + "pagertreeMedium": "মাঝারি", + "Notification Channel": "বিজ্ঞপ্তি চ্যানেল", + "wayToGetPagerTreeIntegrationURL": "PagerTree-তে Uptime Kuma ইন্টিগ্রেশন তৈরি করার পর, Endpoint কপি করুন। সম্পূর্ণ বিবরণ দেখুন {0}", + "Scifi": "সাইফাই", + "ntfyPriorityHelptextAllExceptDown": "সমস্ত ইভেন্ট এই অগ্রাধিকার সহ পাঠানো হয়, {0}-ইভেন্ট ছাড়া, যার অগ্রাধিকার {1}", + "Guitar": "গিটার", + "Badge value (For Testing only.)": "ব্যাজ মান (শুধুমাত্র পরীক্ষার জন্য।)", + "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "ডিভাইসটি বিরক্ত করবেন না মোডে থাকলেও, সময় সংবেদনশীল বিজ্ঞপ্তিগুলি অবিলম্বে বিতরণ করা হবে।", + "monitorToastMessagesDescription": "মনিটরের জন্য টোস্ট বিজ্ঞপ্তিগুলি নির্দিষ্ট সময়ের পরে কয়েক সেকেন্ডে অদৃশ্য হয়ে যায়। -1 এ সেট করলে টাইমআউট বন্ধ হয়ে যায়। 0 এ সেট করলে টোস্ট বিজ্ঞপ্তিগুলি বন্ধ হয়ে যায়।", + "RabbitMQ Password": "RabbitMQ পাসওয়ার্ড", + "Press Enter to add broker": "ব্রোকার যোগ করতে এন্টার টিপুন", + "rabbitmqHelpText": "মনিটরটি ব্যবহার করার জন্য, আপনার RabbitMQ সেটআপে ম্যানেজমেন্ট প্লাগইন সক্ষম করতে হবে। আরও তথ্যের জন্য, অনুগ্রহ করে {rabitmq_documentation} দেখুন।", + "Kafka Producer Message": "কাফকা প্রযোজকের বার্তা", + "SendGrid API Key": "সেন্ডগ্রিড এপিআই কী", + "Pick a SASL Mechanism...": "একটি SASL মেকানিজম বেছে নিন…", + "wayToGetWahaSession": "এই সেশন থেকে WAHA চ্যাট আইডিতে বিজ্ঞপ্তি পাঠায়। আপনি এটি WAHA ড্যাশবোর্ডে খুঁজে পেতে পারেন।", + "noGroupMonitorMsg": "উপলব্ধ নেই। প্রথমে একটি গ্রুপ মনিটর তৈরি করুন।", + "webhookPostMethodDesc": "POST বেশিরভাগ আধুনিক HTTP সার্ভারের জন্য ভালো।", + "webhookGetMethodDesc": "GET কোয়েরি প্যারামিটার হিসেবে ডেটা পাঠায় এবং বডি কনফিগার করার অনুমতি দেয় না। আপটাইম কুমা পুশ মনিটর ট্রিগার করার জন্য কার্যকর।", + "wayToGetFlashDutyKey": "আপটাইম কুমাকে ফ্ল্যাশডিউটির সাথে ইন্টিগ্রেট করতে: চ্যানেল > একটি চ্যানেল নির্বাচন করুন > ইন্টিগ্রেশন > একটি নতুন ইন্টিগ্রেশন যোগ করুন এ যান, আপটাইম কুমা নির্বাচন করুন এবং পুশ ইউআরএলটি অনুলিপি করুন।", + "wayToWriteWahaChatId": "আন্তর্জাতিক উপসর্গ সহ ফোন নম্বর, কিন্তু শুরুতে প্লাস চিহ্ন ({0}), যোগাযোগ আইডি ({1}) অথবা গ্রুপ আইডি ({2}) ছাড়াই। WAHA সেশন থেকে এই চ্যাট আইডিতে বিজ্ঞপ্তি পাঠানো হয়।", + "nostrSender": "প্রেরকের ব্যক্তিগত কী (nsec)", + "Expiry": "মেয়াদ শেষ", + "nostrRecipientsHelp": "npub ফর্ম্যাট, প্রতি লাইনে একটি", + "noOrBadCertificate": "না/খারাপ সার্টিফিকেট", + "YZJ Webhook URL": "YZJ ওয়েবহুক ইউআরএল", + "Authorization Identity": "অনুমোদনের পরিচয়", + "Sender name": "প্রেরকের নাম", + "Apprise URL": "ইউআরএল জানান", + "Example:": "উদাহরণ: {0}", + "Read more:": "আরও পড়ুন: {0}", + "Status:": "স্থিতি: {0}", + "Proto Method": "প্রোটো পদ্ধতি", + "Proto Content": "প্রোটো কন্টেন্ট", + "Economy": "অর্থনীতি", + "Lowcost": "কম খরচে", + "high": "উচ্চ", + "Proto Service Name": "প্রোটো পরিষেবার নাম", + "SendKey": "সেন্ডকি", + "Channel Name": "চ্যানেলের নাম", + "setup a new monitor group": "একটি নতুন মনিটর গ্রুপ সেট আপ করুন", + "smseagleMsgTts": "টেক্সট-টু-স্পিচ কল", + "smseagleMsgTtsAdvanced": "টেক্সট-টু-স্পিচ উন্নত কল", + "smseagleDuration": "সময়কাল (সেকেন্ডে)", + "smseagleApiv1": "APIv1 (বিদ্যমান প্রকল্প এবং ব্যাকওয়ার্ড সামঞ্জস্যের জন্য)", + "smseagleApiv2": "APIv2 (নতুন ইন্টিগ্রেশনের জন্য প্রস্তাবিত)", + "smseagleDocs": "ডকুমেন্টেশন অথবা APIv2 এর প্রাপ্যতা পরীক্ষা করুন: {0}", + "smseagleComma": "একাধিককে কমা দিয়ে আলাদা করতে হবে", + "smspartnerApiurl": "আপনি আপনার ড্যাশবোর্ডে {0} ঠিকানায় আপনার API কী খুঁজে পেতে পারেন", + "smspartnerPhoneNumber": "ফোন নম্বর(গুলি)", + "smseaglePriority": "বার্তার অগ্রাধিকার (০-৯, সর্বোচ্চ অগ্রাধিকার = ৯)", + "smseagleMsgType": "বার্তার ধরণ", + "smseagleMsgSms": "এসএমএস বার্তা (ডিফল্ট)", + "smseagleMsgRing": "রিং কল", + "threemaRecipientType": "প্রাপকের ধরণ", + "brevoToEmail": "ইমেল করতে", + "brevoCcEmail": "সিসি ইমেল", + "brevoBccEmail": "বিসিসি ইমেল", + "brevoSeparateMultipleEmails": "একাধিক ইমেল ঠিকানা কমা দিয়ে আলাদা করুন", + "brevoSubject": "বিষয়", + "pingNumericLabel": "সংখ্যাসূচক আউটপুট", + "pingNumericDescription": "যদি চেক করা থাকে, তাহলে প্রতীকী হোস্টনামের পরিবর্তে আইপি ঠিকানাগুলি আউটপুট হবে", + "pingGlobalTimeoutLabel": "গ্লোবাল টাইমআউট", + "brevoLeaveBlankForDefaultSubject": "ডিফল্ট বিষয়ের জন্য ফাঁকা রাখুন", + "pingCountDescription": "থামার আগে পাঠানোর জন্য প্যাকেটের সংখ্যা", + "wahaSession": "অধিবেশন", + "wahaChatId": "চ্যাট আইডি (ফোন নম্বর / যোগাযোগ আইডি / গ্রুপ আইডি)", + "wayToGetWahaApiUrl": "আপনার WAHA ইনস্ট্যান্স URL।", + "pingGlobalTimeoutDescription": "পিং থামার আগে সেকেন্ডে মোট সময়, পাঠানো প্যাকেট নির্বিশেষে", + "pingPerRequestTimeoutLabel": "প্রতি-পিং টাইমআউট", + "pingPerRequestTimeoutDescription": "একটি একক পিং প্যাকেট হারিয়ে যাওয়ার আগে এটি সর্বোচ্চ অপেক্ষার সময় (সেকেন্ডে)", + "smtpHelpText": "'SMTPS' পরীক্ষা করে যে SMTP/TLS কাজ করছে; 'TLS উপেক্ষা করুন' প্লেইনটেক্সটের মাধ্যমে সংযোগ করে; 'STARTTLS' সংযোগ করে, একটি STARTTLS কমান্ড জারি করে এবং সার্ভার সার্টিফিকেট যাচাই করে। এর কোনটিই ইমেল পাঠায় না।", + "wayToGetWahaApiKey": "API কী হল WHATSAPP_API_KEY এনভায়রনমেন্ট ভেরিয়েবল মান যা আপনি WAHA চালানোর জন্য ব্যবহার করেছিলেন।", + "Number of retry attempts if webhook fails": "ওয়েবহুক ব্যর্থ হলে পুনরায় চেষ্টা করার সংখ্যা (প্রতি ৬০-১৮০ সেকেন্ডে)।", + "Manual": "ম্যানুয়াল", + "Add Another Tag": "আরেকটি ট্যাগ যোগ করুন", + "Staged Tags for Batch Add": "ব্যাচ অ্যাডের জন্য স্টেজড ট্যাগ", + "Clear Form": "ফর্ম পরিষ্কার করুন", + "Send UP silently": "চুপিচুপি পাঠান", + "Maximum Retries": "সর্বোচ্চ পুনঃপ্রচেষ্টা", + "Bark Group": "বার্ক গ্রুপ", + "Badge Warn Color": "ব্যাজ সতর্কতার রঙ", + "pause": "বিরতি", + "Conversation token": "কথোপকথনের টোকেন", + "Bot secret": "বট গোপন", + "Nextcloud host": "নেক্সটক্লাউড হোস্ট", + "Send DOWN silently": "নীরবে নিচে পাঠান", + "Installing a Nextcloud Talk bot requires administrative access to the server.": "নেক্সটক্লাউড টক বট ইনস্টল করার জন্য সার্ভারে প্রশাসনিক অ্যাক্সেস প্রয়োজন।" } diff --git a/src/lang/en.json b/src/lang/en.json index 81b6350e..c8d69973 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -1,7 +1,7 @@ { "languageName": "English", "setupDatabaseChooseDatabase": "Which database would you like to use?", - "setupDatabaseEmbeddedMariaDB": "You don't need to set anything. This docker image has embedded and configured MariaDB for you automatically. Uptime Kuma will connect to this database via unix socket.", + "setupDatabaseEmbeddedMariaDB": "You don't need to set anything. This Docker image has embedded and configured MariaDB for you automatically. Uptime Kuma will connect to this database via Unix socket.", "setupDatabaseMariaDB": "Connect to an external MariaDB database. You need to set the database connection information.", "setupDatabaseSQLite": "A simple database file, recommended for small-scale deployments. Prior to v2.0.0, Uptime Kuma used SQLite as the default database.", "settingUpDatabaseMSG": "Setting up the database. It may take a while, please be patient.", @@ -69,7 +69,7 @@ "Hostname": "Hostname", "Host URL": "Host URL", "locally configured mail transfer agent": "locally configured mail transfer agent", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Either enter the hostname of the server you want to connect to or {localhost} if you intend to use a {local_mta}", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Either enter the hostname of the server you want to connect to, or {localhost} if you intend to use a {local_mta}", "Port": "Port", "Path": "Path", "Heartbeat Interval": "Heartbeat Interval", diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 83fd0715..a879f795 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -73,7 +73,7 @@ "Delete": "删除", "Current": "当前", "Uptime": "在线时间", - "Cert Exp.": "证书有效期", + "Cert Exp.": "证书有效期.", "day": "天", "-day": "天", "hour": "小时", @@ -440,11 +440,11 @@ "Certificate Chain": "证书链", "Valid": "有效", "Invalid": "无效", - "AccessKeyId": "AccessKey ID", + "AccessKeyId": "访问密钥 ID", "SecretAccessKey": "AccessKey 密码", "PhoneNumbers": "电话号码", - "TemplateCode": "TemplateCode", - "SignName": "SignName", + "TemplateCode": "模板代码", + "SignName": "签名", "Sms template must contain parameters: ": "短信模板必须包含以下变量: ", "Bark Endpoint": "Bark 接入点", "Bark Group": "Bark 群组", @@ -546,15 +546,15 @@ "pushoversounds cashregister": "收银机", "pushoversounds classical": "Classical", "pushoversounds cosmic": "宇宙", - "pushoversounds falling": "Falling", + "pushoversounds falling": "坠落", "pushoversounds gamelan": "GameLAN", - "pushoversounds incoming": "Incoming", - "pushoversounds intermission": "Intermission", - "pushoversounds magic": "Magic", - "pushoversounds mechanical": "Mechanical", - "pushoversounds pianobar": "Piano Bar", - "pushoversounds siren": "Siren", - "pushoversounds spacealarm": "Space Alarm", + "pushoversounds incoming": "即将到来", + "pushoversounds intermission": "中场休息", + "pushoversounds magic": "魔法", + "pushoversounds mechanical": "机械的", + "pushoversounds pianobar": "钢琴酒吧", + "pushoversounds siren": "警笛", + "pushoversounds spacealarm": "太空警报", "pushoversounds tugboat": "汽笛", "pushoversounds alien": "Alien Alarm(长铃声)", "pushoversounds climb": "Climb(长铃声)", @@ -620,7 +620,7 @@ "backupRecommend": "请改为直接备份 docker 卷或者数据文件夹(./data/)。", "Optional": "可选的", "squadcast": "Squadcast", - "SendKey": "SendKey", + "SendKey": "发送密钥", "SMSManager API Docs": "SMSManager API 文档 ", "Gateway Type": "网关类型", "SMSManager": "SMSManager", @@ -1130,7 +1130,7 @@ "Use HTML for custom E-mail body": "使用 HTML 作为自定义电子邮件内容", "smseagleDuration": "时长 (以秒为单位)", "smseagleApiv1": "APIv1 (用于现有项目和向后兼容性)", - "ntfyPriorityHelptextPriorityHigherThanDown": "常规优先级应高于 {0} 优先级。优先级 {1} 高于 {0} 优先级 {2}", + "ntfyPriorityHelptextPriorityHigherThanDown": "常规优先级应高于优先级{0}。优先级{1}高于优先级{0}和优先级{2}", "FlashDuty Push URL Placeholder": "从警告集成页面复制", "pingNumericDescription": "如果勾选,将输出IP地址而不是符号主机名", "pingPerRequestTimeoutDescription": "在视作单次ping数据包丢失前的最大等待时间 (以秒为单位)", @@ -1219,14 +1219,14 @@ "webhookGetMethodDesc": "GET 将数据作为查询参数发送,不允许配置请求体。对于触发 Uptime Kuma Push 监控非常有用。", "Invalid userId": "不合法的 userId [{userId}]", "Invalid mobile": "不合法的电话号码 [{mobile}]", - "descriptionHelpText": "在内部仪表板上显示。允许使用 Markdown,显示前会进行净化处理(保留空格和缩进)。", - "Enter a list of mobile": "输入手机号码列表", - "Enter a list of userId": "输入 usedId 列表", - "Dingtalk User List": "UserId 列表", - "Dingtalk Mobile List": "手机号码列表", - "Mention User List": "需提及的 userId 列表", - "Mention Mobile List": "需提及的手机号码列表", - "wayToGetBaleToken": "你可以从 {0} 获取一个令牌。", - "wayToGetBaleChatID": "你可以通过向机器人发送消息并访问此 URL 来查看 chat_id:", - "supportBaleChatID": "支持私聊/群聊/频道的聊天ID" + "descriptionHelpText": "显示在内部仪表盘上。允许使用Markdown,但在显示前会经过消毒处理(保留空格和缩进)。", + "Enter a list of mobile": "输入手机列表", + "Enter a list of userId": "输入用户ID列表", + "Dingtalk User List": "用户ID列表", + "Dingtalk Mobile List": "移动列表", + "Mention User List": "提及用户ID列表", + "Mention Mobile List": "提及移动列表", + "wayToGetBaleToken": "你可以从{0}获取令牌。", + "wayToGetBaleChatID": "您可以通过向机器人发送消息并访问此网址来查看聊天ID:", + "supportBaleChatID": "支持直接聊天/群组/频道的聊天ID" } From 3db1aeb8a5402b3898f25ee40e1bc73313da4520 Mon Sep 17 00:00:00 2001 From: Kf637 Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 36/91] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 60.6% (714 of 1178 strings) Co-authored-by: Kf637 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nb_NO/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/nb-NO.json | 118 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 1 deletion(-) diff --git a/src/lang/nb-NO.json b/src/lang/nb-NO.json index f620a758..1b4d1d69 100644 --- a/src/lang/nb-NO.json +++ b/src/lang/nb-NO.json @@ -618,5 +618,121 @@ "templateServiceName": "tjenestenavn", "templateHostnameOrURL": "hostname og URL", "templateStatus": "status", - "No Monitors": "Ingen monitorer." + "No Monitors": "Ingen overvåkere", + "supportBaleChatID": "Støtter direkte chat / gruppe / kanalens chat-ID", + "wayToGetBaleChatID": "Du kan få chat-ID-en din ved å sende en melding til boten og gå til denne URL-en for å se chat_id-en:", + "wayToGetBaleToken": "Du kan få et token fra {0}.", + "and": "og", + "chromeExecutable": "Chrome/Chromium-kjørbar fil", + "chromeExecutableAutoDetect": "Automatisk oppdaging", + "dataRetentionTimeError": "Bevaringsperioden må være 0 eller høyere", + "mqttWebsocketPathInvalid": "Vennligst bruk et gyldig format for WebSocket-sti", + "mqttHostnameTip": "Vennligst bruk dette formatet {hostnameFormat}", + "shrinkDatabaseDescriptionSqlite": "Utløs databasekommandoen {vacuum} for SQLite. {auto_vacuum} er allerede aktivert, men dette defragmenterer ikke databasen eller ompakker individuelle database­sider slik {vacuum}-kommandoen gjør.", + "Enable DNS Cache": "(Utdatert) Aktiver DNS-buffer for HTTP(s)-overvåkere", + "Enable": "Aktiver", + "descriptionHelpText": "Vises på det interne dashbordet. Markdown er tillatt og renses (bevarer mellomrom og innrykk) før visning.", + "proxyDescription": "Proxyer må tilordnes en overvåking for å fungere.", + "enableProxyDescription": "Denne proxyen vil ikke påvirke overvåkingsforespørsler før den er aktivert. Du kan midlertidig deaktivere proxyen for alle overvåkninger ved å endre aktiveringsstatus.", + "setAsDefaultProxyDescription": "Denne proxyen vil være aktivert som standard for nye overvåkninger. Du kan fortsatt deaktivere proxyen separat for hver overvåking.", + "Running": "Kjører", + "Not running": "Kjører ikke", + "The slug is already taken. Please choose another slug.": "Slug-en er allerede tatt. Vennligst velg en annen slug.", + "Refresh Interval Description": "Statussiden vil utføre en full oppdatering av nettstedet hvert {0} sekund", + "Using a Reverse Proxy?": "Bruker du en omvendt proxy?", + "Check how to config it for WebSocket": "Sjekk hvordan du konfigurerer den for WebSocket", + "socket": "Sokkel", + "tailscalePingWarning": "For å bruke Tailscale Ping-overvåkeren må du installere Uptime Kuma uten Docker og også installere Tailscale-klienten på serveren din.", + "Docker Container": "Docker-beholder", + "telegramSendSilently": "Send stille", + "telegramProtectContentDescription": "Hvis aktivert, vil bot-meldinger i Telegram beskyttes mot videresending og lagring.", + "trustProxyDescription": "Stol på ‘X-Forwarded-*’-headere. Hvis du vil få riktig klient-IP og din Uptime Kuma er bak en proxy som Nginx eller Apache, bør du aktivere dette.", + "Automations can optionally be triggered in Home Assistant:": "Automatiseringer kan valgfritt utløses i Home Assistant:", + "Frontend Version": "Frontend-versjon", + "Frontend Version do not match backend version!": "Frontend-versjonen samsvarer ikke med backend-versjonen!", + "cronExpression": "Cron-uttrykk", + "cronSchedule": "Tidsplan: ", + "strategyManual": "Aktiv/Inaktiv manuelt", + "warningTimezone": "Den bruker serverens tidssone", + "lastDay2": "Nest siste dag i måneden", + "dnsCacheDescription": "Det kan hende det ikke fungerer i enkelte IPv6-miljøer, deaktiver det hvis du opplever problemer.", + "Single Maintenance Window": "Enkelt vedlikeholdsvindu", + "Maintenance Time Window of a Day": "Vedlikeholdstidsvindu for en dag", + "Effective Date Range": "Gyldig datoperiode (valgfritt)", + "loadingError": "Kan ikke hente data, vennligst prøv igjen senere.", + "plugin": "Programtillegg | Programtillegg", + "install": "Installer", + "installing": "Installerer", + "Clone": "Klon", + "cloneOf": "Kopi av {0}", + "emailCustomisableContent": "Tilpassbart innhold", + "emailCustomSubject": "Egendefinert emne", + "leave blank for default subject": "la stå tomt for standardemne", + "emailCustomBody": "Egendefinert brødtekst", + "leave blank for default body": "la stå tomt for standardtekst", + "emailTemplateMonitorJSON": "objekt som beskriver overvåkeren", + "emailTemplateHeartbeatJSON": "objekt som beskriver pulssignalet", + "emailTemplateMsg": "melding fra varslingen", + "emailTemplateLimitedToUpDownNotification": "kun tilgjengelig for OPP/NED-pulssignaler, ellers null", + "Send to channel": "Send til kanal", + "postToExistingThread": "Post til eksisterende tråd / foruminnlegg", + "forumPostName": "Navn på foruminnlegg", + "Your User ID": "Din bruker-ID", + "infiniteRetention": "Sett til 0 for ubegrenset bevaring.", + "confirmDeleteTagMsg": "Er du sikker på at du vil slette denne taggen? Overvåkere som er tilknyttet denne taggen vil ikke bli slettet.", + "enableGRPCTls": "Tillat å sende gRPC-forespørsel med TLS-tilkobling", + "telegramServerUrl": "(Valgfritt) Server-URL", + "telegramServerUrlDescription": "For å fjerne Telegrams bot-API-begrensninger eller få tilgang i blokkerte områder (Kina, Iran, osv.). For mer informasjon klikk {0}. Standard: {1}", + "Slug": "Slug", + "startOrEndWithOnly": "Start eller slutt kun med {0}", + "No consecutive dashes": "Ingen påfølgende bindestreker", + "statusPageSpecialSlugDesc": "Spesiell slug {0}: denne siden vises når ingen slug er angitt", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Den nåværende tilkoblingen kan gå tapt hvis du for øyeblikket er koblet til via Cloudflare Tunnel. Er du sikker på at du vil stoppe den? Skriv inn ditt nåværende passord for å bekrefte.", + "RadiusCallingStationIdDescription": "Identifikator for den oppringende enheten", + "telegramMessageThreadID": "(Valgfritt) Meldings-tråd-ID", + "telegramMessageThreadIDDescription": "Valgfri unik identifikator for målmeldings-tråden (emnet) i forumet; kun for forum-supergrupper", + "telegramTemplateFormatDescription": "Telegram tillater bruk av forskjellige oppmerkingsspråk for meldinger, se Telegram {0} for spesifikke detaljer.", + "Then choose an action, for example switch the scene to where an RGB light is red.": "Velg deretter en handling, for eksempel å bytte scenen til der et RGB-lys er rødt.", + "backupOutdatedWarning": "Utdatert: Siden mange funksjoner har blitt lagt til og denne sikkerhetskopifunksjonen er lite vedlikeholdt, kan den ikke generere eller gjenopprette en fullstendig sikkerhetskopi.", + "invalidCronExpression": "Ugyldig Cron-uttrykk: {0}", + "enableNSCD": "Aktiver NSCD (Name Service Cache Daemon) for å bufre alle DNS-forespørsler", + "chromeExecutableDescription": "For Docker-brukere, hvis Chromium ikke er installert ennå, kan det ta noen minutter å installere og vise testresultatet. Det krever 1 GB diskplass.", + "Clone Monitor": "Klon overvåker", + "Use HTML for custom E-mail body": "Bruk HTML for egendefinert e-posttekst", + "smtpLiquidIntroduction": "De to følgende feltene kan brukes som maler via Liquid-malspråket. Se {0} for bruksinstruksjoner. Dette er de tilgjengelige variablene:", + "Create new forum post": "Opprett nytt foruminnlegg", + "wayToGetDiscordThreadId": "Å hente en tråd- / foruminnlegg-ID ligner på å hente en kanal-ID. Les mer om hvordan du får ID-er {0}", + "wayToGetCloudflaredURL": "(Last ned cloudflared fra {0})", + "Don't know how to get the token? Please read the guide:": "Vet du ikke hvordan du får tokenet? Vennligst les guiden:", + "RadiusSecret": "Radius-hemmelighet", + "RadiusSecretDescription": "Delt hemmelighet mellom klient og server", + "RadiusCalledStationId": "Kalt stasjons-ID", + "RadiusCalledStationIdDescription": "Identifikator for den oppringte enheten", + "RadiusCallingStationId": "Oppringende stasjons-ID", + "telegramUseTemplate": "Bruk egendefinert meldingsmal", + "telegramUseTemplateDescription": "Hvis aktivert, vil meldingen bli sendt ved bruk av en egendefinert mal.", + "backupRecommend": "Vennligst sikkerhetskopier volumet eller datamappen (./data/) direkte i stedet.", + "lastDay3": "Tredje siste dag i måneden", + "lastDay4": "Fjerde siste dag i måneden", + "Channel access token (Long-lived)": "Kanaltilgangstoken (langvarig)", + "tagAlreadyOnMonitor": "Denne taggen (navn og verdi) er allerede på overvåkningen eller venter på å bli lagt til.", + "tagAlreadyStaged": "Denne taggen (navn og verdi) er allerede klargjort for denne batchen.", + "tagNameExists": "Et systemmerke med dette navnet finnes allerede. Velg det fra listen, eller bruk et annet navn.", + "Check/Uncheck": "Merk/Fjern merking", + "Certificate Expiry Notification": "Varsel om sertifikatutløp", + "deleteDockerHostMsg": "Er du sikker på at du vil slette denne Docker-verten for alle overvåkere?", + "Select message type": "Velg meldingstype", + "auto-select": "Automatisk valg", + "certificationExpiryDescription": "HTTPS-overvåkere utløser varsling når TLS-sertifikatet utløper om:", + "Setup Docker Host": "Sett opp Docker-vert", + "noDockerHostMsg": "Ikke tilgjengelig. Sett opp en Docker-vert først.", + "DockerHostRequired": "Vennligst angi Docker-verten for denne overvåkeren.", + "telegramSendSilentlyDescription": "Sender meldingen stille. Brukere vil motta et varsel uten lyd.", + "telegramProtectContent": "Beskytt videresending/lagring", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Langvarig tilgangstoken kan opprettes ved å klikke på profilnavnet ditt (nederst til venstre), bla til bunnen og deretter klikke på Opprett token. ", + "DateTime Range": "Dato- og tidsområde", + "threadForumPostID": "Tråd- / foruminnlegg-ID", + "e.g. {discordThreadID}": "f.eks. {discordThreadID}", + "whatHappensAtForumPost": "Opprett et nytt foruminnlegg. Dette legger IKKE ut meldinger i et eksisterende innlegg. For å poste i et eksisterende innlegg, bruk \"{option}\"", + "wayToGetZohoCliqURL": "Du kan lære hvordan du oppretter en webhook-URL {0}." } From fd7851321d041e94c8871ab157f24838d60d9925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 37/91] Translated using Weblate (Japanese) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 96.8% (1141 of 1178 strings) Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ja.json | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/lang/ja.json b/src/lang/ja.json index 875cb794..aa14bf8d 100644 --- a/src/lang/ja.json +++ b/src/lang/ja.json @@ -1142,5 +1142,21 @@ "smtpHelpText": "SMTPSは『SMTP/TLSが機能しているかテスト』Ignore TLSは『プレーンテキストで接続』STARTTLSは『接続し、STARTTLSコマンドを発行し、サーバー証明書を検証』いずれもメールを送信しない。", "Custom URL": "カスタムURL", "customUrlDescription": "モニターのURLの代わりにクリック可能なURLとして使用されます。", - "OneChatAccessToken": "OneChat アクセストークン" + "OneChatAccessToken": "OneChat アクセストークン", + "mqttWebSocketPath": "MQTT WebSocket パス", + "mqttWebsocketPathInvalid": "有効な WebSocket パスフォーマットを使用してください", + "mqttHostnameTip": "次のフォーマットを使用してください {hostnameFormat}", + "HTTP Method": "HTTP メソッド", + "Clear All Events": "すべてのイベントをクリア", + "clearAllEventsMsg": "本当にすべてのイベントを削除しますか?", + "No monitors found": "モニターはありません。", + "wayToGetBaleToken": "{0} からトークンを入手できます。", + "Path": "パス", + "Events cleared successfully": "イベントが正常にクリアされました。", + "Could not clear events": "{total} 個中 {failed} 個のイベントをクリアできませんでした", + "webhookPostMethodDesc": "モダンな HTTP サーバーでは POST が最もおすすめです。", + "webhookGetMethodDesc": "GET はデータをクエリパラメータとして送信し、Body の設定は許可しません。Uptime Kuma Push モニターのトリガーとして便利です。", + "evolutionInstanceName": "インスタンス名", + "descriptionHelpText": "内部ダッシュボードに表示されます。Markdownを使用できますが、表示前にサニタイズ処理(スペースとインデントは保持)されます。", + "auto-select": "自動選択" } From 0464e7a88aa1fef83a2f85b87708d55efb133de7 Mon Sep 17 00:00:00 2001 From: Amirparsa Baghdadi Date: Thu, 11 Dec 2025 02:44:26 +0000 Subject: [PATCH 38/91] Translated using Weblate (Persian) Currently translated at 99.5% (1184 of 1189 strings) Translated using Weblate (Persian) Currently translated at 99.4% (1181 of 1188 strings) Translated using Weblate (Persian) Currently translated at 100.0% (1178 of 1178 strings) Co-authored-by: Amirparsa Baghdadi Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/fa.json | 61 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/src/lang/fa.json b/src/lang/fa.json index d9db71af..4050ac38 100644 --- a/src/lang/fa.json +++ b/src/lang/fa.json @@ -1133,5 +1133,64 @@ "Happy Eyeballs algorithm": "الگوریتم Happy Eyeballs", "Ip Family": "خانواده IP", "ipFamilyDescriptionAutoSelect": "از {happyEyeballs} برای تعیین خانواده IP استفاده می‌کند.", - "Manual": "راهنما" + "Manual": "راهنما", + "Maximum Retries": "حداکثر تعداد تلاش مجدد", + "Number of retry attempts if webhook fails": "تعداد تلاش‌های مجدد (هر ۶۰ تا ۱۸۰ ثانیه) در صورت عدم موفقیت وبهوک.", + "HTTP Method": "متد HTTP", + "webhookPostMethodDesc": "متد POST برای بیشتر سرورهای HTTP مدرن مناسب است.", + "brevoToEmail": "به ایمیل", + "brevoBccEmail": "ایمیل رونوشت مخفی (BCC Email)", + "brevoSubject": "موضوع", + "brevoLeaveBlankForDefaultSubject": "برای موضوع پیشفرض خالی بگذارید", + "brevoApiKey": "کلید API بریوو (Brevo API Key)", + "Bot secret": "سیکرت بات", + "wayToGetBaleToken": "شما میتوانید از {0} یک توکن دریافت کنید.", + "mqttWebsocketPathInvalid": "لطفا از یک فرمت وب ساکت درست استفاده کنید", + "mqttHostnameTip": "لطفا از این فرمت استفاده کنید: {hostnameFormat}", + "clearAllEventsMsg": "آیا از پاک کردن تمامی رویداد ها مطمعنی؟", + "No monitors found": "هیچ مانیتوری پیدا نشد.", + "Could not clear events": "نتوانستیم {failed}/{total} رویداد را پاک کنیم", + "Template plain text instead of using cards": "استفاده از متن ساده به‌جای کارت‌ها در قالب", + "issueWithGoogleChatOnAndroidHelptext": "این همچنین امکان دور زدن باگ‌های بالادست مانند {issuetackerURL} را فراهم می‌کند", + "Mention User List": "ذکر فهرست شناسه کاربر (User ID List)", + "Dingtalk Mobile List": "لیست موبایل", + "Dingtalk User List": "لیست شناسه کاربر (User ID)", + "Enter a list of userId": "یک فهرست از شناسه‌های کاربری (userId) وارد کنید", + "Invalid mobile": "شماره موبایل نامعتبر [{mobile}]", + "Invalid userId": "شناسه کاربری نامعتبر [{userId}]", + "OAuth Audience": "مخاطب اوآوث (OAuth Audience)", + "brevoApiHelp": "ایجاد یک کلید API در اینجا: {0}", + "brevoFromEmail": "ایمیل فرستنده (From Email)", + "brevoFromName": "از اسم", + "brevoLeaveBlankForDefaultName": "برای نام پیشفرض خالی بگذارید", + "Send UP silently": "ارسال UP به صورت بی صدا", + "Send DOWN silently": "ارسال DOWN به صورت بی صدا", + "Path": "مسیر", + "mqttWebSocketPath": "مسیر وب ساکت MQTT", + "mqttWebsocketPathExplanation": "مسیر وب ساکت برای MQTT روی اتصالات وب ساکت (مثال:‌/mqtt)", + "supportBaleChatID": "چت مستقیم پشتیبانی / گروه / چت آیدی چنل", + "Clear All Events": "پاک کردن تمامی رویداد ها", + "Events cleared successfully": "تمامی رویداد ها با موفقیت پاک شدند.", + "descriptionHelpText": "در داشبورد داخلی نمایش داده می‌شود. مارک‌داون مجاز است و پیش از نمایش، پاک‌سازی می‌شود (فاصله‌ها و تورفتگی‌ها را حفظ می‌کند).", + "wayToGetBaleChatID": "می‌توانید با فرستادن یک پیام به ربات و رفتن به این آدرس، شناسه چت (chat_id) خود را مشاهده کنید:", + "Mention Mobile List": "ذکر فهرست موبایل", + "Enter a list of mobile": "یک فهرست از شماره‌های موبایل وارد کنید", + "webhookGetMethodDesc": "متد GET داده‌ها را به‌صورت پارامترهای کوئری ارسال می‌کند و اجازه پیکربندی بدنه (body) را نمی‌دهد. برای فعال‌سازی مانیتورهای Uptime Kuma Push مفید است.", + "brevoCcEmail": "ایمیل رونوشت (CC Email)", + "brevoSeparateMultipleEmails": "برای چندین آدرس ایمیل، آن‌ها را با کاما جدا کنید", + "Nextcloud host": "هاست Nextcloud", + "Conversation token": "توکن گفتوگو (Conversation token)", + "wayToWriteEvolutionRecipient": "شماره تلفن با پیش‌شماره بین‌المللی، اما بدون علامت بعلاوه (+) در ابتدای آن ({0})، شناسه مخاطب ({1}) یا شناسه گروه ({2}).", + "evolutionRecipient": "شماره تلفن / شناسه مخاطب / شناسه گروه", + "evolutionInstanceName": "نام نمونه (Instance Name)", + "wayToGetEvolutionUrlAndToken": "می‌توانید آدرس API و توکن را با ورود به کانال موردنظر خود از {0} دریافت کنید", + "auto-select": "انتخاب خودکار", + "Optional: The audience to request the JWT for": "اختیاری: مخاطبی که برای آن JWT درخواست می‌شود", + "Installing a Nextcloud Talk bot requires administrative access to the server.": "نصب یک بات Nextcloud Talk نیاز به دسترسی مدیریتی به سرور دارد.", + "Clone Maintenance": "کپی‌کردن نگهداری", + "ariaPauseMaintenance": "توقف این برنامه نگهداری", + "ariaResumeMaintenance": "ادامه این برنامه نگهداری", + "Template ID": "کد قالب", + "wayToGetClickSMSIRTemplateID": "قالب شما باید یک فیلد {uptkumaalert} داشته باشد. از {here} میتوانید یک قالب جدید ایجاد کنید.", + "Recipient Numbers": "شماره مشترکین" } From 922ed888c3a49bcf20ab6c3c396f586ba7ed0f26 Mon Sep 17 00:00:00 2001 From: simonghpub Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 39/91] Translated using Weblate (Danish) Currently translated at 65.9% (781 of 1184 strings) Co-authored-by: simonghpub Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/da/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/da-DK.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json index 2fa31db5..cff6e69c 100644 --- a/src/lang/da-DK.json +++ b/src/lang/da-DK.json @@ -813,5 +813,6 @@ "telegramServerUrl": "(Valgfrit) Server URL", "Clear All Events": "Ryd alle begivenheder", "clearAllEventsMsg": "Er du sikker på du vil slette alle begivenheder?", - "Remove domain": "Fjern domæne '{0}'" + "Remove domain": "Fjern domæne '{0}'", + "tagNameExists": "Et system tag med dette navn eksisterer allerede. Vælg det fra listen eller brug et andet navn." } From cc1b0c692a74038174b130d14905139d58197428 Mon Sep 17 00:00:00 2001 From: Cyril59310 Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 40/91] Translated using Weblate (French) Currently translated at 100.0% (1235 of 1235 strings) Translated using Weblate (French) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (French) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (French) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (French) Currently translated at 100.0% (1189 of 1189 strings) Translated using Weblate (French) Currently translated at 100.0% (1188 of 1188 strings) Translated using Weblate (French) Currently translated at 100.0% (1186 of 1186 strings) Translated using Weblate (French) Currently translated at 100.0% (1184 of 1184 strings) Co-authored-by: Cyril59310 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/fr-FR.json | 67 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 73fd2d24..519de556 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -573,7 +573,7 @@ "Retype the address.": "Retaper l'adresse.", "Go back to the previous page.": "Retourner à la page précédente.", "Coming Soon": "Prochainement", - "wayToGetClickSendSMSToken": "Vous pouvez obtenir le nom d'utilisateur API et la clé API à partir de {0} .", + "wayToGetClickSendSMSToken": "Vous pouvez obtenir le nom d’utilisateur API et la clé API depuis {here}.", "Connection String": "Chaîne de connexion", "Query": "Requête", "settingsCertificateExpiry": "Expiration du certificat TLS", @@ -841,7 +841,7 @@ "styleElapsedTime": "Temps écoulé sous la barre d'état", "enableNSCD": "Activer NSCD (Name Service Cache Daemon) pour mettre en cache toutes les demandes DNS", "setupDatabaseChooseDatabase": "Quelle base de données souhaitez-vous utiliser ?", - "setupDatabaseEmbeddedMariaDB": "Vous n'avez rien à définir. Cette image Docker a intégré et configuré MariaDB automatiquement pour vous. Uptime Kuma se connectera à cette base de données via un socket Unix.", + "setupDatabaseEmbeddedMariaDB": "Vous n’avez rien besoin de configurer. Cette image Docker inclut et configure automatiquement MariaDB pour vous. Uptime Kuma se connectera à cette base de données via un socket Unix.", "setupDatabaseSQLite": "Un fichier de base de données simple, recommandé pour les déploiements à petite échelle. Avant la v2.0.0, Uptime Kuma utilisait SQLite comme base de données par défaut.", "setupDatabaseMariaDB": "Connectez-vous à une base de données MariaDB externe. Vous devez définir les informations de connexion à la base de données.", "dbName": "Nom de la base de données", @@ -944,7 +944,7 @@ "whapiRecipient": "Numéro de téléphone / ID de contact / ID de groupe", "API URL": "URL de l'API", "wayToWriteWhapiRecipient": "Le numéro de téléphone avec le préfixe international, mais sans le signe plus au début ({0}), l'ID de contact ({1}) ou l'ID de groupe ({2}).", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Entrez le nom d'hôte du serveur auquel vous souhaitez vous connecter ou {localhost} si vous avez l'intention d'utiliser un {local_mta}", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Saisissez soit le nom d’hôte du serveur auquel vous souhaitez vous connecter, soit {localhost} si vous comptez utiliser un {local_mta}", "locally configured mail transfer agent": "Agent de transfert de courrier configuré localement", "Don't mention people": "Ne mentionne pas les personnes", "Mention group": "Mentionne {groupe}", @@ -1200,7 +1200,7 @@ "brevoSubject": "Objet", "brevoLeaveBlankForDefaultSubject": "laisser vide pour l’objet par défaut", "brevoApiKey": "Clé API Brevo", - "brevoLeaveBlankForDefaultName": "laisser vide pour le nom par défaut", + "brevoLeaveBlankForDefaultName": "laisser vide pour garder le nom par défaut", "brevoCcEmail": "E-mail en copie (CC)", "brevoSeparateMultipleEmails": "Séparez plusieurs adresses e-mail par des virgules", "Bot secret": "Secret du bot", @@ -1226,5 +1226,62 @@ "HTTP Method": "Méthode HTTP", "webhookPostMethodDesc": "POST convient à la plupart des serveurs HTTP modernes.", "webhookGetMethodDesc": "GET envoie les données sous forme de paramètres de requête et ne permet pas de configurer un corps. Utile pour déclencher les sondes Push d’Uptime Kuma.", - "descriptionHelpText": "Affiché sur le tableau de bord interne. Le Markdown est autorisé et assaini (les espaces et l’indentation sont conservés) avant l’affichage." + "descriptionHelpText": "Affiché sur le tableau de bord interne. Le Markdown est autorisé et assaini (les espaces et l’indentation sont conservés) avant l’affichage.", + "Clone Maintenance": "Cloner la maintenance", + "ariaPauseMaintenance": "Mettre en pause ce programme de maintenance", + "ariaResumeMaintenance": "Reprendre ce programme de maintenance", + "ariaCloneMaintenance": "Créer une copie de ce programme de maintenance", + "ariaEditMaintenance": "Modifier ce programme de maintenance", + "ariaDeleteMaintenance": "Supprimer ce programme de maintenance", + "deleteChildrenMonitors": "Supprimer également les sondes enfants directs et leurs sous-éléments s’il y en a | Supprimer également les {count} sondes enfants directs et leurs sous-éléments s’ils en ont", + "deleteGroupMsg": "Êtes-vous sûr de vouloir supprimer ce groupe ?", + "Template ID": "ID du modèle", + "wayToGetClickSMSIRTemplateID": "Votre modèle doit contenir un champ {uptkumaalert}. Vous pouvez créer un nouveau modèle {here}.", + "Recipient Numbers": "Numéros des destinataires", + "twilioMessagingServiceSID": "SID du service de messagerie (optionnel)", + "twilloMessagingServiceSIDHelptext": "Saisissez votre SID de service de messagerie ici si vous utilisez {twillo_messaging_service_help_link} pour gérer les expéditeurs et les fonctionnalités", + "twilioApiKeyHelptext": "La clé API est facultative mais recommandée. Vous pouvez fournir soit le SID de compte et l’AuthToken depuis la page principale de la Twilio Console, soit le SID de compte et le couple clé API / secret de clé API", + "Swindon Web Server Protocol": "Protocole de serveur Web Swindon (encodage JSON)", + "Cobra Real Time Messaging Protocol": "Protocole de messagerie en temps réel Cobra", + "WebSocket Transport for JMAP": "Transport WebSocket pour JMAP (JSON Meta Application Protocol)", + "Collection Update": "Sous-protocole WebSocket de mise à jour de collection", + "Penguin Statistics Live Protocol v3": "Protocole en direct Penguin Statistics v3 (encodage Protobuf)", + "certHostnameMismatch": "Le nom d’hôte du certificat ne correspond pas à l’URL de la sonde.", + "Notifications Enabled": "Notifications activées", + "Allow Notifications": "Autoriser les notifications", + "Browser not supported": "Navigateur non pris en charge", + "Webpush Helptext": "Les notifications push Web ne fonctionnent qu’avec des connexions SSL (HTTPS). Pour les appareils iOS, la page web doit être ajoutée à l’écran d’accueil au préalable.", + "ignoreSecWebsocketAcceptHeaderDescription": "Permet au serveur de ne pas répondre avec l’en-tête Sec-WebSocket-Accept si la mise à niveau WebSocket réussit.", + "Ignore Sec-WebSocket-Accept header": "Ignorer l’en-tête {0}", + "wsSubprotocolDescription": "Pour plus d'informations sur les sous-protocoles, veuillez consulter la {documentation}", + "WebSocket Application Messaging Protocol": "WAMP (le protocole de messagerie applicative WebSocket)", + "Session Initiation Protocol": "Transport WebSocket pour SIP (Session Initiation Protocol)", + "Network API for Notification Channel": "API réseau RESTful OMA pour le canal de notification", + "Web Process Control Protocol": "Protocole de contrôle des processus Web (WPCP)", + "Advanced Message Queuing Protocol": "Protocole de file d’attente de messages avancé (AMQP) 1.0+)", + "jsflow": "Protocole jsFlow pubsub/queue", + "Reverse Web Process Control": "Protocole de contrôle des processus Web inversé (RWPCP)", + "Extensible Messaging and Presence Protocol": "Transport WebSocket pour le protocole extensible de messagerie et de présence (XMPP)", + "Smart Home IP": "SHIP - IP pour maison intelligente", + "Miele Cloud Connect Protocol": "Protocole de connexion Miele Cloud", + "Push Channel Protocol": "Protocole de canal Push", + "Message Session Relay Protocol": "Transport WebSocket pour MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "Transport WebSocket pour BFCP (Binary Floor Control Protocol)", + "Softvelum Low Delay Protocol": "Protocole Softvelum à faible latence", + "OPC UA Connection Protocol": "Protocole de connexion OPC UA", + "OPC UA JSON Encoding": "Encodage JSON OPC UA", + "Broadband Forum User Services Platform": "USP (User Services Platform du Broadband Forum)", + "Constrained Application Protocol": "Protocole d’application contraint (CoAP)", + "Softvelum WebSocket signaling protocol": "Protocole de signalisation Softvelum WebSocket", + "Declarative Resource Protocol": "Protocole de ressources déclaratives", + "BACnet Secure Connect Hub Connection": "Connexion au hub BACnet Secure Connect", + "BACnet Secure Connect Direct Connection": "Connexion directe BACnet Secure Connect", + "ITU-T T.140 Real-Time Text": "Texte en temps réel ITU-T T.140", + "Done.best IoT Protocol": "Done. Meilleur protocole IoT", + "Text IRC Protocol": "Protocole IRC textuel", + "Binary IRC Protocol": "Protocole IRC binaire", + "Unable to get permission to notify": "Impossible d’obtenir l’autorisation de notification (la demande a été refusée ou ignorée).", + "showOnlyLastHeartbeat": "Afficher uniquement la dernière vérification", + "minimumIntervalWarning": "Des intervalles inférieurs à 20 secondes peuvent entraîner de mauvaises performances.", + "lowIntervalWarning": "Êtes-vous sûr de vouloir définir l’intervalle en dessous de 20 secondes ? Les performances pourraient être dégradées, en particulier s’il y a un grand nombre de sondes." } From 1b6b66592ebacd9fb4c4e33f40ccfa2a6e230a4f Mon Sep 17 00:00:00 2001 From: Jozef Gaal Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 41/91] Translated using Weblate (Slovak) Currently translated at 100.0% (1235 of 1235 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (1232 of 1232 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (1193 of 1193 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (1189 of 1189 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (1188 of 1188 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (1186 of 1186 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (1184 of 1184 strings) Co-authored-by: Jozef Gaal Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sk/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/sk.json | 111 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 84 insertions(+), 27 deletions(-) diff --git a/src/lang/sk.json b/src/lang/sk.json index 8a6e4784..3b2be0f0 100644 --- a/src/lang/sk.json +++ b/src/lang/sk.json @@ -35,7 +35,7 @@ "Friendly Name": "Názov", "Port": "Port", "Retries": "Opakovania", - "Resend Notification if Down X times consecutively": "Znovu odoslať upozornenie, ak je X-krát po sebe nedostupné", + "Resend Notification if Down X times consecutively": "Znovu odoslať oznámenie, ak je X-krát po sebe nedostupné", "Advanced": "Pokročilé", "checkEverySecond": "Skontrolovať každých {0} sekúnd", "retryCheckEverySecond": "Zopakovať každých {0} sekúnd", @@ -48,9 +48,9 @@ "Accepted Status Codes": "Akceptované stavové kódy", "Push URL": "Push URL", "Save": "Uložiť", - "Notifications": "Notifikácie", + "Notifications": "Oznámenia", "Not available, please setup.": "Nedostupné, prosím nastavte.", - "Setup Notification": "Nastavenie notifikácií", + "Setup Notification": "Nastaviť oznámenie", "Dark": "Tmavá", "Light": "Svetlá", "Auto": "Automaticky", @@ -103,7 +103,7 @@ "Login": "Prihlásiť sa", "No Monitors, please": "Žiadne sledovanie, prosím", "add one": "pridať jeden", - "Notification Type": "Typ notifikácie", + "Notification Type": "Typ oznámenia", "Email": "E-mail", "Test": "Test", "Certificate Info": "Informácie o certifikáte", @@ -222,7 +222,7 @@ "successKeywordExplanation": "Kľúčové slovo MQTT, ktoré sa bude považovať za úspešné", "setupDatabaseChooseDatabase": "Ktorú databázu chcete použiť?", "pushViewCode": "Ako používať Push sledovanie? (Zobraziť kód)", - "setupDatabaseEmbeddedMariaDB": "Nemusíte nič nastavovať. Tento obraz dockera má automaticky vloženú a nakonfigurovanú databázu MariaDB. Uptime Kuma sa k tejto databáze pripojí prostredníctvom unixového socketu.", + "setupDatabaseEmbeddedMariaDB": "Nemusíte nič nastavovať. Tento obraz Docker má automaticky integrovanú a nakonfigurovanú databázu MariaDB. Uptime Kuma sa pripojí k tejto databáze prostredníctvom Unix socketu.", "setupDatabaseMariaDB": "Pripojenie k externej databáze MariaDB. Musíte nastaviť informácie o pripojení k databáze.", "setupDatabaseSQLite": "Jednoduchý databázový súbor, ktorý sa odporúča pre malé nasadenia. Pred verziou 2.0.0 používal Uptime Kuma ako predvolenú databázu SQLite.", "Host URL": "URL adresa servera", @@ -258,8 +258,8 @@ "ignoreTLSErrorGeneral": "Ignorovať chybu TLS/SSL pre pripojenie", "programmingLanguages": "Programovacie jazyky", "No monitors available.": "Žiadne sledovania nie sú k dispozícii.", - "templateLimitedToUpDownCertNotifications": "dostupné len pre upozornenia DOSTUPNÉ/NEDOSTUPNÉ/Platnosť certifikátu", - "templateLimitedToUpDownNotifications": "dostupné iba pre upozornenia DOSTUPNÉ/NEDOSTUPNÉ", + "templateLimitedToUpDownCertNotifications": "dostupné len pre oznámenia typu DOSTUPNÉ/NEDOSTUPNÉ/Platnosť certifikátu", + "templateLimitedToUpDownNotifications": "dostupné iba pre oznámenia typu DOSTUPNÉ/NEDOSTUPNÉ", "BodyInvalidFormat": "Telo požiadavky nie je platný JSON: ", "liquidIntroduction": "Šablóna sa dosahuje pomocou šablónovacieho jazyka Liquid. Pokyny na použitie nájdete v {0}. Toto sú dostupné premenné:", "templateMsg": "správa oznámenia", @@ -282,7 +282,7 @@ "Description": "Popis", "Page Not Found": "Stránka sa nenašla", "locally configured mail transfer agent": "lokálne nakonfigurovaný agent na prenos pošty", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Zadajte adresu servera, ku ktorému chcete pripojiť, alebo {localhost} ak chcete používať {local_mta}", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Zadajte buď názov hostiteľa servera, ku ktorému sa chcete pripojiť, alebo {localhost}, ak chcete používať {local_mta}", "Reset Token": "Resetovať token", "Done": "Hotovo", "Info": "Informácie", @@ -361,7 +361,7 @@ "smtpLiquidIntroduction": "Nasledujúce dve polia je možné šablónovať pomocou šablónovacieho jazyka Liquid. Pokyny na použitie nájdete v časti {0}. Toto sú dostupné premenné:", "wayToGetDiscordURL": "Toto nastavenie nájdete v časti Nastavenia servera -> Integrácie -> Zobraziť webhooky -> Nový webhook", "wayToGetLineChannelToken": "Najprv pristupte k {0}, vytvorte poskytovateľa a kanál ( Rozhranie API správ), potom môžete získať prístupový token kanála a ID používateľa z vyššie uvedených položiek ponuky.", - "enableDefaultNotificationDescription": "Toto upozornenie bude predvolene povolené pre nové sledovania. Toto oznámenie môžete stále vypnúť pre každé sledovanie samostatne.", + "enableDefaultNotificationDescription": "Toto oznámenie bude predvolene povolené pre nové sledovania. Toto oznámenie môžete stále vypnúť pre každé sledovanie samostatne.", "or": "alebo", "strategyManual": "Aktívne/neaktívne ručne", "cloneOf": "Duplikát {0}", @@ -378,7 +378,7 @@ "Issuer:": "Vydavateľ:", "Fingerprint:": "Odtlačok:", "No status pages": "Žiadne stavové stránky", - "Domain Name Expiry Notification": "Oznámiť o vypršaní platnosti domény", + "Domain Name Expiry Notification": "Oznámenie o vypršaní platnosti domény", "Remove the expiry notification": "Odstrániť deň oznámenia o vypršaní platnosti", "Proxy": "Proxy", "Date Created": "Dátum vytvorenia", @@ -398,7 +398,7 @@ "Retype the address.": "Znovu zadajte adresu.", "Go back to the previous page.": "Návrat na predchádzajúcu stránku.", "settingsCertificateExpiry": "Vypršanie platnosti certifikátu TLS", - "certificationExpiryDescription": "HTTPS sledovania aktivujú upozornenie, keď vyprší platnosť certifikátu TLS v:", + "certificationExpiryDescription": "HTTPS sledovania aktivujú oznámenie, keď vyprší platnosť certifikátu TLS v:", "Setup Docker Host": "Nastavenie Docker hostiteľa", "Connection Type": "Typ pripojenia", "Docker Daemon": "Docker démon", @@ -555,7 +555,7 @@ "smtpCC": "CC", "smtpBCC": "BCC", "default: notify all devices": "predvolené: upozorniť všetky zariadenia", - "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Zoznam notifikačných služieb nájdete v aplikácii Home Assistant v časti „Nástroje pre vývojárov > Služby“, kde vyhľadajte položku „ notifikácia“ a nájdite názov svojho zariadenia/telefónu.", + "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Zoznam oznamovacích služieb nájdete v aplikácii Home Assistant v časti „Nástroje pre vývojárov > Služby“, kde vyhľadajte položku „oznámenie“ a nájdite názov svojho zariadenia/telefónu.", "tailscalePingWarning": "Ak chcete používať sledovanie Tailscale Ping, musíte nainštalovať aplikáciu Uptime Kuma bez nástroja Docker a tiež nainštalovať klienta Tailscale na server.", "Enable": "Povoliť", "Enable DNS Cache": "(Zastarané) Povoliť vyrovnávaciu pamäť DNS pre HTTP(s) sledovania", @@ -590,7 +590,7 @@ "recurringIntervalMessage": "Spustiť raz denne | Spustiť raz každých {0} dní", "affectedMonitorsDescription": "Vyberte sledovania, ktoré sú ovplyvnené aktuálnou údržbou", "keywordDescription": "Vyhľadajte kľúčové slovo v obyčajnej HTML alebo JSON odpovedi. Vyhľadávanie rozlišuje veľké a malé písmená.", - "backupDescription": "Všetky sledovania a upozornenia si môžete zálohovať do súboru JSON.", + "backupDescription": "Všetky sledovania a oznámenia si môžete zálohovať do súboru JSON.", "backupDescription2": "Poznámka: história a údaje o udalostiach nie sú zahrnuté.", "pushoversounds climb": "Stúpanie (dlhé)", "pushoversounds persistent": "Trvalé (dlhé)", @@ -612,7 +612,7 @@ "confirmEnableTwoFAMsg": "Naozaj chcete povoliť 2FA?", "confirmDisableTwoFAMsg": "Naozaj chcete vypnúť 2FA?", "affectedStatusPages": "Zobraziť túto správu o údržbe na vybraných stavových stránkach", - "notificationDescription": "Aby upozornenia fungovali, musia byť priradené k sledovaniu.", + "notificationDescription": "Aby oznámenia fungovali, musia byť priradené k sledovaniu.", "invertKeywordDescription": "Hľadajte, či kľúčové slovo chýba, skôr ako to, že je prítomné.", "backupDescription3": "Citlivé údaje, ako napríklad tokeny oznámení, sú zahrnuté v exportovanom súbore; export si, prosím, bezpečne uložte.", "pushyAPIKey": "Tajný kľúč API", @@ -622,12 +622,12 @@ "octopushLegacyHint": "Používate staršiu verziu Octopush (2011 – 2020) alebo novú verziu?", "octopushSMSSender": "Meno odosielateľa SMS: 3 – 11 alfanumerických znakov a medzera (a – z, A – Z, 0 – 9)", "You can divide numbers with": "Čísla môžete oddeliť pomocou", - "goAlertInfo": "GoAlert je aplikácia s otvoreným zdrojovým kódom na plánovanie pohotovostí, automatizované eskalácie a upozornenia (ako sú SMS alebo hlasové hovory). Automaticky oslovte správnu osobu správnym spôsobom a v správnom čase! {0}", + "goAlertInfo": "GoAlert je aplikácia s otvoreným zdrojovým kódom na plánovanie pohotovostí, automatizované eskalácie a oznámenia (ako sú SMS alebo hlasové hovory). Automaticky oslovte správnu osobu správnym spôsobom a v správnom čase! {0}", "For safety, must use secret key": "Z bezpečnostných dôvodov je potrebné použiť tajný kľúč", "promosmsTypeFlash": "SMS FLASH – Správa sa automaticky zobrazí na zariadení príjemcu. Obmedzené len na poľských príjemcov.", "promosmsPhoneNumber": "Telefónne číslo (pre poľského príjemcu, môžete vynechať smerové čísla)", "matrixDesc1": "Interné ID miestnosti nájdete v rozšírenej sekcii nastavení miestnosti vo vašom klientovi Matrix. Malo by vyzerať takto: !QMdRCpUIfLwsfjxye6:home.server.", - "matrixDesc2": "Dôrazne sa odporúča vytvoriť nového používateľa a nepoužívať vlastný prístupový token používateľa Matrix, pretože vám to umožní plný prístup k vášmu účtu a všetkým miestnostiam, ku ktorým ste sa pripojili. Namiesto toho vytvorte nového používateľa a pozvite ho iba do miestnosti, v ktorej chcete dostávať upozornenia. Prístupový token získate spustením príkazu {0}", + "matrixDesc2": "Dôrazne sa odporúča vytvoriť nového používateľa a nepoužívať vlastný prístupový token používateľa Matrix, pretože vám to umožní plný prístup k vášmu účtu a všetkým miestnostiam, ku ktorým ste sa pripojili. Namiesto toho vytvorte nového používateľa a pozvite ho iba do miestnosti, v ktorej chcete dostávať oznámenia. Prístupový token získate spustením príkazu {0}", "aboutKumaURL": "Ak necháte pole URL adresy Uptime Kuma prázdne, predvolene sa zobrazí stránka projektu GitHub.", "PhoneNumbers": "Telefónne čísla", "telegramServerUrl": "(Voliteľné) URL adresa servera", @@ -661,15 +661,15 @@ "pushoversounds spacealarm": "Vesmírny alarm", "pushoversounds tugboat": "Remorkér", "pushyToken": "Token zariadenia", - "apprise": "Apprise (Podpora viac ako 50 notifikačných služieb)", + "apprise": "Apprise (Podpora viac ako 50 oznamovacích služieb)", "GoogleChat": "Google Chat (iba Google Workspace)", "Guild ID": "Guild ID", "User Key": "Používateľský kľúč", "Message Title": "Názov správy", - "Notification Sound": "Zvuk upozornenia", + "Notification Sound": "Zvuk oznámenia", "More info on:": "Viac informácií o: {0}", "pushoverMessageTtl": "Správa TTL (sekundy)", - "pushoverDesc2": "Ak chcete posielať upozornenia na rôzne zariadenia, vyplňte pole Zariadenia.", + "pushoverDesc2": "Ak chcete posielať oznámenia na rôzne zariadenia, vyplňte pole Zariadenia.", "SMS Type": "Typ SMS", "octopushTypeLowCost": "Nízka cena (Pomalé - niekedy blokované operátorom)", "octopushTypePremium": "Prémiový (Rýchle – odporúča sa pre upozornenia)", @@ -725,7 +725,7 @@ "Internal Room Id": "Vnútorné ID miestnosti", "Channel Name": "Názov kanála", "Notify Channel": "Upozorniť kanál", - "aboutNotifyChannel": "Upozornenie kanála spustí upozornenie na ploche alebo mobilnom zariadení pre všetkých členov kanála, bez ohľadu na to, či sú aktívni alebo neprítomní.", + "aboutNotifyChannel": "Oznamovací kanál spustí oznámenie na počítači alebo mobilnom zariadení pre všetkých členov kanála, bez ohľadu na to, či je ich dostupnosť nastavená na aktívnu alebo neprítomnú.", "Uptime Kuma URL": "URL adresa Uptime Kuma", "setup a new monitor group": "nastaviť novú skupinu pre sledovanie", "openModalTo": "otvoriť modálne okno do {0}", @@ -741,7 +741,7 @@ "smtpDkimKeySelector": "Výber kľúča", "smtpDkimPrivateKey": "Súkromný kľúč", "smtpDkimHashAlgo": "Hašovací algoritmus (voliteľné)", - "importHandleDescription": "Vyberte možnosť „Preskočiť existujúce“, ak chcete preskočiť všetky sledovania alebo upozornenia s rovnakým názvom. Možnosť „Prepísať“ vymaže všetky existujúce sledovania a upozornenia.", + "importHandleDescription": "Vyberte možnosť „Preskočiť existujúce“, ak chcete preskočiť všetky sledovania alebo oznámenia s rovnakým názvom. Možnosť „Prepísať“ vymaže všetky existujúce sledovania a oznámenia.", "confirmImportMsg": "Naozaj chcete importovať zálohu? Skontrolujte, či ste vybrali správnu možnosť importu.", "atLeastOneMonitor": "Vyberte aspoň jedno príslušné sledovanie", "passwordNotMatchMsg": "Opakované heslo sa nezhoduje.", @@ -760,7 +760,7 @@ "Integration Key": "Integračný kľúč", "Integration URL": "Integračná URL adresa", "pushDeerServerDescription": "Nechajte prázdne, ak chcete použiť oficiálny server", - "wayToGetClickSendSMSToken": "Používateľské meno API a kľúč API môžete získať z {0} .", + "wayToGetClickSendSMSToken": "Používateľské meno API a kľúč API môžete získať z {here}.", "Google Analytics ID": "ID služby Google Analytics", "Learn More": "Zistiť viac", "API Keys": "Kľúče API", @@ -1033,7 +1033,7 @@ "not contains": "neobsahuje", "less than or equal to": "menšia alebo rovná", "Alphanumerical string and hyphens only": "Iba alfanumerický reťazec a spojovníky", - "Custom sound to override default notification sound": "Vlastný zvuk, ktorý prepíše predvolený zvuk upozornenia", + "Custom sound to override default notification sound": "Vlastný zvuk, ktorý prepíše predvolený zvuk oznámenia", "Pop": "Pop", "Money": "Peniaze", "Flute": "Flauta", @@ -1137,9 +1137,9 @@ "gamedigGuessPort": "Gamedig: Odhadnúť port", "smtpDkimheaderFieldNames": "Hlavičkové kľúče na podpísanie (voliteľné)", "smtpDkimskipFields": "Hlavičkové kľúče, ktoré sa nemajú podpísať (voliteľné)", - "Badge Warn Color": "Farba znaku upozornenia", - "Badge Warn Days": "Dni upozornenia znaku", - "Badge Down Days": "Dni znaku mimo prevádzky", + "Badge Warn Color": "Farba odznaku upozornenia", + "Badge Warn Days": "Odznak dní upozornení", + "Badge Down Days": "Odznak dní mimo prevádzky", "Originator": "Odosielateľ", "cellsyntOriginator": "Viditeľné na mobilnom telefóne príjemcu ako odosielateľ správy. Povolené hodnoty a funkcia závisia od parametra \"originatortype\".", "Arcade": "Arkáda", @@ -1182,5 +1182,62 @@ "webhookGetMethodDesc": "GET odosiela údaje ako parametre dopytu a neumožňuje konfiguráciu tela. Je užitočné na spúšťanie Push monitorov Uptime Kuma.", "descriptionHelpText": "Zobrazené na internom paneli. Markdown je povolený a pred zobrazením je očistený (zachováva medzery a odsadenie).", "HTTP Method": "Metóda HTTP", - "webhookPostMethodDesc": "POST je vhodný pre väčšinu moderných HTTP serverov." + "webhookPostMethodDesc": "POST je vhodný pre väčšinu moderných HTTP serverov.", + "ariaPauseMaintenance": "Pozastaviť tento plán údržby", + "ariaResumeMaintenance": "Pokračovať v tomto pláne údržby", + "ariaCloneMaintenance": "Vytvoriť kópiu tohto plánu údržby", + "ariaEditMaintenance": "Upraviť tento plán údržby", + "ariaDeleteMaintenance": "Odstrániť tento plán údržby", + "Clone Maintenance": "Naklonovať údržbu", + "deleteChildrenMonitors": "Vymazať aj priame podriadené monitory a ich podriadené monitory, ak nejaké existujú | Vymazať aj všetkých {count} priamych podriadených monitorov a ich podriadených monitorov, ak nejaké existujú", + "deleteGroupMsg": "Určite chcete túto skupinu odstrániť?", + "Template ID": "ID šablóny", + "wayToGetClickSMSIRTemplateID": "Vaša šablóna musí obsahovať pole {uptkumaalert}. Novú šablónu môžete vytvoriť {tu}.", + "Recipient Numbers": "Čísla príjemcu", + "twilioMessagingServiceSID": "SID služby zasielania správ (voliteľné)", + "twilloMessagingServiceSIDHelptext": "Ak používate {twillo_messaging_service_help_link} na spravovanie odosielateľov a funkcií, zadajte sem svoje SID služby zasielania správ", + "twilioApiKeyHelptext": "Kľúč API je voliteľný, ale odporúčaný. Môžete poskytnúť buď SID účtu a AuthToken zo stránky TwilioConsole alebo SID účtu a pár API kľúča a API tajného kľúča", + "showOnlyLastHeartbeat": "Zobraziť len posledný pulz", + "wsSubprotocolDescription": "Ďalšie informácie o podprotokoloch nájdete na {documentation}", + "WebSocket Application Messaging Protocol": "WAMP (WebSocket Application Messaging Protocol)", + "Extensible Messaging and Presence Protocol": "WebSocket Transport pre protokol XMPP (Extensible Messaging and Presence Protocol)", + "Webpush Helptext": "Webové push správy fungujú iba s pripojeniami SSL (HTTPS). V prípade zariadení iOS je potrebné najskôr pridať webovú stránku na domovskú obrazovku.", + "Notifications Enabled": "Oznámenia povolené", + "Allow Notifications": "Povoliť oznámenia", + "Browser not supported": "Prehliadač nie je podporovaný", + "Unable to get permission to notify": "Nie je možné získať povolenie na zasielanie oznámení (žiadosť bola zamietnutá alebo ignorovaná).", + "ignoreSecWebsocketAcceptHeaderDescription": "Umožňuje serveru neodpovedať hlavičkou Sec-WebSocket-Accept, ak je aktualizácia websocket úspešná.", + "Ignore Sec-WebSocket-Accept header": "Ignorovať hlavičku {0}", + "Session Initiation Protocol": "WebSocket Transport pre SIP (Session Initiation Protocol)", + "Network API for Notification Channel": "OMA RESTful sieťové API pre oznamovací kanál", + "Web Process Control Protocol": "Web Process Control Protocol (WPCP)", + "Advanced Message Queuing Protocol": "Advanced Message Queuing Protocol (AMQP) 1.0+", + "jsflow": "jsFlow pubsub/queue protokol", + "Reverse Web Process Control": "Reverse Web Process Control Protocol (RWPCP)", + "Smart Home IP": "SHIP - Smart Home IP", + "Miele Cloud Connect Protocol": "Miele Cloud Connect Protokol", + "Push Channel Protocol": "Push Channel Protokol", + "Message Session Relay Protocol": "WebSocket Transport pre MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "WebSocket Transport pre BFCP (Binary Floor Control Protocol)", + "Softvelum Low Delay Protocol": "Softvelum Low Delay Protokol", + "OPC UA Connection Protocol": "OPC UA Connection Protocol", + "OPC UA JSON Encoding": "Kódovanie OPC UA JSON", + "Swindon Web Server Protocol": "Protokol webového servera Swindon (kódovanie JSON)", + "Broadband Forum User Services Platform": "USP (Broadband Forum User Services Platform)", + "Constrained Application Protocol": "Constrained Application Protocol (CoAP)", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket Signaling Protocol", + "Cobra Real Time Messaging Protocol": "Protokol Cobra Real Time Messaging", + "Declarative Resource Protocol": "Declarative Resource Protocol", + "BACnet Secure Connect Hub Connection": "BACnet Secure Connect Hub Connection", + "BACnet Secure Connect Direct Connection": "BACnet Secure Connect Direct Connection", + "WebSocket Transport for JMAP": "WebSocket Transport pre JMAP (JSON Meta Application Protocol)", + "ITU-T T.140 Real-Time Text": "ITU-T T.140 Real-Time Text", + "Done.best IoT Protocol": "Done.best IoT Protokol", + "Collection Update": "Collection Update Websocket Subprotocol", + "Text IRC Protocol": "Protokol textového IRC", + "Binary IRC Protocol": "Protokol binárneho IRC", + "Penguin Statistics Live Protocol v3": "Protokol Penguin Statistics Live v3 (kódovanie Protobuf)", + "certHostnameMismatch": "Certifikát hostiteľa sa nezhoduje s URL adresou monitora.", + "minimumIntervalWarning": "Intervaly kratšie ako 20 sekúnd môžu mať za následok zníženie výkonu.", + "lowIntervalWarning": "Naozaj chcete nastaviť interval na hodnotu nižšiu ako 20 sekúnd? Výkon sa môže znížiť, najmä ak je veľký počet monitorov." } From d564228e54a0794416dca55b90b5fb10bd191273 Mon Sep 17 00:00:00 2001 From: Marco Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 42/91] Translated using Weblate (German) Currently translated at 100.0% (1235 of 1235 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1235 of 1235 strings) Translated using Weblate (German) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (German) Currently translated at 99.0% (1221 of 1233 strings) Translated using Weblate (German (Switzerland)) Currently translated at 99.0% (1221 of 1233 strings) Translated using Weblate (German) Currently translated at 98.8% (1219 of 1233 strings) Translated using Weblate (German (Switzerland)) Currently translated at 98.8% (1219 of 1233 strings) Translated using Weblate (German) Currently translated at 100.0% (1193 of 1193 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1193 of 1193 strings) Translated using Weblate (German) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (German) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (German) Currently translated at 100.0% (1189 of 1189 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1189 of 1189 strings) Translated using Weblate (German) Currently translated at 100.0% (1188 of 1188 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1188 of 1188 strings) Translated using Weblate (German) Currently translated at 100.0% (1186 of 1186 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1186 of 1186 strings) Co-authored-by: Marco Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-CH.json | 61 +++++++++++++++++++++++++++++++++++++++++++-- src/lang/de-DE.json | 61 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 118 insertions(+), 4 deletions(-) diff --git a/src/lang/de-CH.json b/src/lang/de-CH.json index 5fc1c8ec..8a6b2bc0 100644 --- a/src/lang/de-CH.json +++ b/src/lang/de-CH.json @@ -544,7 +544,7 @@ "Retype the address.": "Schreibe die Adresse erneut.", "Go back to the previous page.": "Gehe zur vorigen Seite.", "Coming Soon": "Kommt bald", - "wayToGetClickSendSMSToken": "Du kannst einen API Nutzernamen und Schlüssel unter {0} erhalten.", + "wayToGetClickSendSMSToken": "Du kannst einen API Nutzernamen und Schlüssel unter {here} erhalten.", "Connection String": "Verbindungstext", "Query": "Abfrage", "settingsCertificateExpiry": "TLS Zertifikatsablauf", @@ -1223,5 +1223,62 @@ "descriptionHelpText": "Wird auf dem internen Dashboard angezeigt. Markdown ist zulässig und wird vor der Anzeige bereinigt (Leerzeichen und Einrückungen bleiben erhalten).", "HTTP Method": "HTTP-Methode", "webhookPostMethodDesc": "POST eignet sich für die meisten modernen HTTP-Server.", - "webhookGetMethodDesc": "GET sendet Daten als Abfrageparameter und erlaubt keine Konfiguration eines Bodys. Nützlich zum Auslösen von Uptime Kuma Push-Überwachungen." + "webhookGetMethodDesc": "GET sendet Daten als Abfrageparameter und erlaubt keine Konfiguration eines Bodys. Nützlich zum Auslösen von Uptime Kuma Push-Überwachungen.", + "deleteGroupMsg": "Möchtest du diese Gruppe wirklich löschen?", + "deleteChildrenMonitors": "Lösche auch die direkten untergeordneten Monitore und deren untergeordnete Elemente, falls vorhanden | Lösche auch alle {count} direkten untergeordneten Monitore und deren untergeordnete Elemente, falls vorhanden", + "Clone Maintenance": "Wartung klonen", + "ariaCloneMaintenance": "Kopie des Wartungsplans erstellen", + "ariaEditMaintenance": "Wartungsplan bearbeiten", + "ariaDeleteMaintenance": "Wartungsplan löschen", + "ariaPauseMaintenance": "Wartungsplan pausieren", + "ariaResumeMaintenance": "Wartungsplan wieder aufnehmen", + "Template ID": "Vorlagen-ID", + "wayToGetClickSMSIRTemplateID": "Die Vorlage muss ein Feld {uptkumaalert} enthalten. Eine neue Vorlage kann {here} erstellt werden.", + "Recipient Numbers": "Empfängernummern", + "twilioApiKeyHelptext": "Der API-Schlüssel ist optional, wird jedoch empfohlen. Du kannst entweder die Konto-SID und den AuthToken von der TwilioConsole-Seite oder die Konto-SID und das Paar aus API-Schlüssel und API-Schlüssel-Geheimnis angeben.", + "twilioMessagingServiceSID": "Messaging-Dienst-SID (optional)", + "twilloMessagingServiceSIDHelptext": "Messaging-Service-SID eingeben, wenn {twillo_messaging_service_help_link} zur Verwaltung von Absendern und Funktionen verwendet wird.", + "showOnlyLastHeartbeat": "Nur letzten Heartbeat anzeigen", + "WebSocket Application Messaging Protocol": "WAMP (The WebSocket Application Messaging Protocol)", + "ignoreSecWebsocketAcceptHeaderDescription": "Ermöglicht es dem Server, nicht mit dem Sec-WebSocket-Accept-Header zu antworten, wenn das WebSocket-Upgrade erfolgreich ist.", + "Ignore Sec-WebSocket-Accept header": "Ignoriere {0} Header", + "wsSubprotocolDescription": "Weitere Informationen zu Subprotokollen findest du in der {documentation}", + "Session Initiation Protocol": "WebSocket-Transport für SIP (Session Initiation Protocol)", + "Network API for Notification Channel": "OMA RESTful-Netzwerk-API für Benachrichtigungskanal", + "Web Process Control Protocol": "Web Process Control Protocol (WPCP)", + "Advanced Message Queuing Protocol": "Advanced Message Queuing Protocol (AMQP) 1.0+", + "jsflow": "jsFlow pubsub/queue Protocol", + "Reverse Web Process Control": "Reverse Web Process Control Protocol (RWPCP)", + "Extensible Messaging and Presence Protocol": "WebSocket-Transport für das Extensible Messaging and Presence Protocol (XMPP)", + "Smart Home IP": "SHIP - Smart Home IP", + "Miele Cloud Connect Protocol": "Miele Cloud Connect Protokoll", + "Push Channel Protocol": "Push Channel Protokoll", + "Message Session Relay Protocol": "WebSocket Transport für MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "WebSocket Transport für BFCP (Binary Floor Control Protocol)", + "Softvelum Low Delay Protocol": "Softvelum Low Delay Protokoll", + "OPC UA Connection Protocol": "OPC UA Connection Protokoll", + "OPC UA JSON Encoding": "OPC UA JSON Encoding", + "Swindon Web Server Protocol": "Swindon Web Server Protokoll (JSON encoding)", + "Broadband Forum User Services Platform": "USP (Broadband Forum User Services Platform)", + "Constrained Application Protocol": "Constrained Application Protokoll (CoAP)", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket Signaling Protokoll", + "Cobra Real Time Messaging Protocol": "Cobra Real Time Messaging Protokoll", + "Declarative Resource Protocol": "Declarative Resource Protokoll", + "BACnet Secure Connect Hub Connection": "BACnet Secure Connect Hub Connection", + "WebSocket Transport for JMAP": "WebSocket Transport für JMAP (JSON Meta Application Protocol)", + "BACnet Secure Connect Direct Connection": "BACnet Secure Connect Direct Connection", + "Notifications Enabled": "Benachrichtigungen aktiviert", + "Allow Notifications": "Benachrichtigungen zulassen", + "Browser not supported": "Browser wird nicht unterstützt", + "Unable to get permission to notify": "Keine Berechtigung für Benachrichtigungen (die Anfrage wurde abgelehnt oder ignoriert).", + "certHostnameMismatch": "Der Hostname des Zertifikats stimmt nicht mit der Monitor-URL überein.", + "ITU-T T.140 Real-Time Text": "ITU-T T.140 Real-Time Text", + "Done.best IoT Protocol": "Done.best IoT Protokoll", + "Collection Update": "The Collection Update Websocket Subprotokoll", + "Text IRC Protocol": "Text IRC Protokoll", + "Binary IRC Protocol": "Binary IRC Protokoll", + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protokoll v3 (Protobuf encoding)", + "Webpush Helptext": "Web-Push funktioniert nur mit SSL-Verbindungen (HTTPS). Bei iOS-Geräten muss die Webseite zuvor zum Startbildschirm hinzugefügt werden.", + "minimumIntervalWarning": "Intervalle unter 20 Sekunden können zu einer schlechten Leistung führen.", + "lowIntervalWarning": "Möchtest du den Intervallwert wirklich auf unter 20 Sekunden einstellen? Dies kann zu Leistungseinbussen führen, insbesondere wenn eine grosse Anzahl von Monitoren vorhanden ist." } diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index e13b4342..b543e805 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -544,7 +544,7 @@ "Retype the address.": "Schreibe die Adresse erneut.", "Go back to the previous page.": "Gehe zur vorigen Seite.", "Coming Soon": "Kommt bald", - "wayToGetClickSendSMSToken": "Du kannst einen API Nutzernamen und Schlüssel unter {0} erhalten.", + "wayToGetClickSendSMSToken": "Du kannst einen API Nutzernamen und Schlüssel unter {here} erhalten.", "Connection String": "Verbindungstext", "Query": "Abfrage", "settingsCertificateExpiry": "TLS Zertifikatsablauf", @@ -1226,5 +1226,62 @@ "webhookPostMethodDesc": "POST eignet sich für die meisten modernen HTTP-Server.", "descriptionHelpText": "Wird auf dem internen Dashboard angezeigt. Markdown ist zulässig und wird vor der Anzeige bereinigt (Leerzeichen und Einrückungen bleiben erhalten).", "HTTP Method": "HTTP-Methode", - "webhookGetMethodDesc": "GET sendet Daten als Abfrageparameter und erlaubt keine Konfiguration eines Bodys. Nützlich zum Auslösen von Uptime Kuma Push-Überwachungen." + "webhookGetMethodDesc": "GET sendet Daten als Abfrageparameter und erlaubt keine Konfiguration eines Bodys. Nützlich zum Auslösen von Uptime Kuma Push-Überwachungen.", + "deleteGroupMsg": "Möchtest du diese Gruppe wirklich löschen?", + "deleteChildrenMonitors": "Lösche auch die direkten untergeordneten Monitore und deren untergeordnete Elemente, falls vorhanden | Lösche auch alle {count} direkten untergeordneten Monitore und deren untergeordnete Elemente, falls vorhanden", + "Clone Maintenance": "Wartung klonen", + "ariaCloneMaintenance": "Kopie des Wartungsplans erstellen", + "ariaEditMaintenance": "Wartungsplan bearbeiten", + "ariaDeleteMaintenance": "Wartungsplan löschen", + "ariaPauseMaintenance": "Wartungsplan pausieren", + "ariaResumeMaintenance": "Wartungsplan wieder aufnehmen", + "Template ID": "Vorlagen-ID", + "wayToGetClickSMSIRTemplateID": "Die Vorlage muss ein Feld {uptkumaalert} enthalten. Eine neue Vorlage kann {here} erstellt werden.", + "Recipient Numbers": "Empfängernummern", + "twilioApiKeyHelptext": "Der API-Schlüssel ist optional, wird jedoch empfohlen. Du kannst entweder die Konto-SID und den AuthToken von der TwilioConsole-Seite oder die Konto-SID und das Paar aus API-Schlüssel und API-Schlüssel-Geheimnis angeben.", + "twilioMessagingServiceSID": "Messaging-Dienst-SID (optional)", + "twilloMessagingServiceSIDHelptext": "Messaging-Service-SID eingeben, wenn {twillo_messaging_service_help_link} zur Verwaltung von Absendern und Funktionen verwendet wird.", + "showOnlyLastHeartbeat": "Nur letzten Heartbeat anzeigen", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket Signaling Protokoll", + "ignoreSecWebsocketAcceptHeaderDescription": "Ermöglicht es dem Server, nicht mit dem Sec-WebSocket-Accept-Header zu antworten, wenn das WebSocket-Upgrade erfolgreich ist.", + "Ignore Sec-WebSocket-Accept header": "Ignoriere {0} Header", + "wsSubprotocolDescription": "Weitere Informationen zu Subprotokollen findest du in der {documentation}", + "Session Initiation Protocol": "WebSocket-Transport für SIP (Session Initiation Protocol)", + "WebSocket Application Messaging Protocol": "WAMP (The WebSocket Application Messaging Protocol)", + "Network API for Notification Channel": "OMA RESTful-Netzwerk-API für Benachrichtigungskanal", + "Web Process Control Protocol": "Web Process Control Protocol (WPCP)", + "Advanced Message Queuing Protocol": "Advanced Message Queuing Protocol (AMQP) 1.0+", + "jsflow": "jsFlow pubsub/queue Protocol", + "Reverse Web Process Control": "Reverse Web Process Control Protocol (RWPCP)", + "Extensible Messaging and Presence Protocol": "WebSocket-Transport für das Extensible Messaging and Presence Protocol (XMPP)", + "Smart Home IP": "SHIP - Smart Home IP", + "Miele Cloud Connect Protocol": "Miele Cloud Connect Protokoll", + "Push Channel Protocol": "Push Channel Protokoll", + "Message Session Relay Protocol": "WebSocket Transport für MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "WebSocket Transport für BFCP (Binary Floor Control Protocol)", + "Softvelum Low Delay Protocol": "Softvelum Low Delay Protokoll", + "OPC UA Connection Protocol": "OPC UA Connection Protokoll", + "OPC UA JSON Encoding": "OPC UA JSON Encoding", + "Swindon Web Server Protocol": "Swindon Web Server Protokoll (JSON encoding)", + "Broadband Forum User Services Platform": "USP (Broadband Forum User Services Platform)", + "Constrained Application Protocol": "Constrained Application Protokoll (CoAP)", + "Cobra Real Time Messaging Protocol": "Cobra Real Time Messaging Protokoll", + "Declarative Resource Protocol": "Declarative Resource Protokoll", + "BACnet Secure Connect Hub Connection": "BACnet Secure Connect Hub Connection", + "BACnet Secure Connect Direct Connection": "BACnet Secure Connect Direct Connection", + "WebSocket Transport for JMAP": "WebSocket Transport für JMAP (JSON Meta Application Protocol)", + "Notifications Enabled": "Benachrichtigungen aktiviert", + "Allow Notifications": "Benachrichtigungen zulassen", + "Browser not supported": "Browser wird nicht unterstützt", + "Unable to get permission to notify": "Keine Berechtigung für Benachrichtigungen (die Anfrage wurde abgelehnt oder ignoriert).", + "Webpush Helptext": "Web-Push funktioniert nur mit SSL-Verbindungen (HTTPS). Bei iOS-Geräten muss die Webseite zuvor zum Startbildschirm hinzugefügt werden.", + "certHostnameMismatch": "Der Hostname des Zertifikats stimmt nicht mit der Monitor-URL überein.", + "ITU-T T.140 Real-Time Text": "ITU-T T.140 Real-Time Text", + "Done.best IoT Protocol": "Done.best IoT Protokoll", + "Collection Update": "The Collection Update Websocket Subprotokoll", + "Text IRC Protocol": "Text IRC Protokoll", + "Binary IRC Protocol": "Binary IRC Protokoll", + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protokoll v3 (Protobuf encoding)", + "minimumIntervalWarning": "Intervalle unter 20 Sekunden können zu einer schlechten Leistung führen.", + "lowIntervalWarning": "Möchtest du den Intervallwert wirklich auf unter 20 Sekunden einstellen? Dies kann zu Leistungseinbußen führen, insbesondere wenn eine große Anzahl von Monitoren vorhanden ist." } From 98fc5c5b5a61088e2240082e9d8923549970479b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aindri=C3=BA=20Mac=20Giolla=20Eoin?= Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 43/91] Translated using Weblate (Irish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (1235 of 1235 strings) Translated using Weblate (Irish) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (Irish) Currently translated at 98.4% (1214 of 1233 strings) Translated using Weblate (Irish) Currently translated at 100.0% (1189 of 1189 strings) Translated using Weblate (Irish) Currently translated at 100.0% (1186 of 1186 strings) Co-authored-by: Aindriú Mac Giolla Eoin Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ga/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ga.json | 71 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 4 deletions(-) diff --git a/src/lang/ga.json b/src/lang/ga.json index fdccee20..b0284c9a 100644 --- a/src/lang/ga.json +++ b/src/lang/ga.json @@ -60,7 +60,7 @@ "languageName": "Gaeilge", "setupDatabaseChooseDatabase": "Cén bunachar sonraí is mian leat a úsáid?", "setupDatabaseSQLite": "Comhad bunachar sonraí simplí, molta do sholáthairí beaga scála. Roimh v2.0.0, úsáid Uptime Kuma SQLite mar an bunachar sonraí réamhshocraithe.", - "setupDatabaseEmbeddedMariaDB": "Ní gá duit aon rud a shocrú. Tá MariaDB leabaithe agus cumraithe ag an íomhá Docker seo go huathoibríoch duit. Ceanglóidh Uptime Kuma leis an mbunachar sonraí seo trí soicéad unix.", + "setupDatabaseEmbeddedMariaDB": "Ní gá duit aon rud a shocrú. Tá MariaDB leabaithe agus cumraithe go huathoibríoch ag an íomhá Docker seo duit. Ceanglóidh Uptime Kuma leis an mbunachar sonraí seo trí soicéad Unix.", "Check Update On GitHub": "Seiceáil an Nuashonrú ar GitHub", "statusMaintenance": "Cothabháil", "Reconnecting...": "Ag athcheangal…", @@ -741,7 +741,7 @@ "onebotSafetyTips": "Ar mhaithe le sábháilteacht, ní mór comhartha rochtana a shocrú", "PushDeer Server": "Freastalaí PushDeer", "PushDeer Key": "Eochair PushDeer", - "wayToGetClickSendSMSToken": "Is féidir leat Ainm Úsáideora API agus Eochair API a fháil ó {0} .", + "wayToGetClickSendSMSToken": "Is féidir leat Ainm Úsáideora API agus Eochair API a fháil ó {here}.", "Custom Monitor Type": "Cineál Monatóir an Chustaim", "Google Analytics ID": "Aitheantas Google Analytics", "Edit Tag": "Cuir Clib in Eagar", @@ -908,7 +908,7 @@ "Originator": "Tionscnóir", "wayToWriteWhapiRecipient": "An uimhir theileafóin leis an réimír idirnáisiúnta, ach gan an comhartha móide ag an tús ({0}), an ID Teagmhála ({1}) nó an Grúpa ID ({2}).", "wayToGetWhapiUrlAndToken": "Is féidir leat an URL API agus an comhartha a fháil ach dul isteach sa chainéal atá uait ó {0}", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Cuir isteach óstainm an fhreastalaí a bhfuil tú ag iarraidh ceangal leis nó {localhost} má tá sé ar intinn agat {local_mta} a úsáid", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Cuir isteach ainm óstach an fhreastalaí ar mhaith leat ceangal leis, nó {localhost} más mian leat {local_mta} a úsáid", "Refresh Interval": "Eatramh Athnuaigh", "Refresh Interval Description": "Déanfaidh an leathanach stádais athnuachan iomlán ar an suíomh gach {0} soicind", "whatHappensAtForumPost": "Cruthaigh post fóraim nua. NÍ phostann sé seo teachtaireachtaí sa phostáil reatha. Chun postáil sa phostáil reatha úsáid \"{option}\"", @@ -1175,5 +1175,68 @@ "brevoLeaveBlankForDefaultSubject": "fág bán don ábhar réamhshocraithe", "Send UP silently": "Seol SUAS go ciúin", "Send DOWN silently": "Seol SÍOS go ciúin", - "auto-select": "Roghnaigh Uathoibríoch" + "auto-select": "Roghnaigh Uathoibríoch", + "HTTP Method": "Modh HTTP", + "Maximum Retries": "Uasmhéid Athiarracht", + "ariaPauseMaintenance": "Cuir an sceideal cothabhála seo ar sos", + "ariaDeleteMaintenance": "Scrios an sceideal cothabhála seo", + "deleteGroupMsg": "An bhfuil tú cinnte gur mian leat an grúpa seo a scriosadh?", + "deleteChildrenMonitors": "Scrios na monatóirí díreacha leanaí agus a leanaí freisin más ann dóibh | Scrios gach {count} monatóir díreach leanaí agus a leanaí freisin más ann dóibh", + "webhookPostMethodDesc": "Tá POST maith don chuid is mó de na freastalaithe HTTP nua-aimseartha.", + "webhookGetMethodDesc": "Seolann GET sonraí mar pharaiméadair fiosrúcháin agus ní cheadaíonn sé corp a chumrú. Úsáideach chun monatóirí Uptime Kuma Push a spreagadh.", + "Number of retry attempts if webhook fails": "Líon na n-iarrachtaí athdhéanta (gach 60-180 soicind) má theipeann ar an webhook.", + "descriptionHelpText": "Taispeántar ar an deais inmheánach é. Ceadaítear marcáil anuas agus déantar é a shláintiú (coinnítear spásanna agus eangú) roimh an taispeántas.", + "Clone Maintenance": "Cothabháil Clónála", + "ariaResumeMaintenance": "Atosaigh an sceideal cothabhála seo", + "ariaCloneMaintenance": "Cruthaigh cóip den sceideal cothabhála seo", + "ariaEditMaintenance": "Cuir an sceideal cothabhála seo in eagar", + "Template ID": "Aitheantas Teimpléid", + "Recipient Numbers": "Uimhreacha Faighteoirí", + "wayToGetClickSMSIRTemplateID": "Ní mór réimse {uptkumaalert} a bheith i do theimpléad. Is féidir leat teimpléad nua a chruthú {here}.", + "ignoreSecWebsocketAcceptHeaderDescription": "Ceadaíonn sé seo don fhreastalaí gan freagra a thabhairt leis an gceanntásc Sec-WebSocket-Accept, má éiríonn leis an uasghrádú websocket.", + "Ignore Sec-WebSocket-Accept header": "Déan neamhaird den cheanntásc {0}", + "wsSubprotocolDescription": "Chun tuilleadh eolais a fháil faoi fho-phrótacail, féach ar an {documentation} le do thoil", + "WebSocket Application Messaging Protocol": "WAMP (Prótacal Teachtaireachtaí Feidhmchláir WebSocket)", + "Session Initiation Protocol": "Iompar Soicéad Gréasáin le haghaidh SIP (Prótacal Tionscnaimh Seisiúin)", + "Network API for Notification Channel": "API Líonra RESTful OMA le haghaidh Cainéal Fógra", + "Web Process Control Protocol": "Prótacal Rialaithe Próisis Gréasáin (WPCP)", + "Advanced Message Queuing Protocol": "Prótacal Ciúála Teachtaireachtaí Ardleibhéil (AMQP) 1.0+", + "jsflow": "Prótacal pubsub/queue jsFlow", + "Reverse Web Process Control": "Prótacal Rialaithe Próisis Gréasáin Droim ar Ais (RWPCP)", + "Extensible Messaging and Presence Protocol": "Iompar WebSocket don Phrótacal Teachtaireachtaí agus Láithreachta Inleathnaithe (XMPP)", + "Smart Home IP": "LOING - IP Baile Cliste", + "Miele Cloud Connect Protocol": "Prótacal Miele Cloud Connect", + "Push Channel Protocol": "Prótacal Brúigh Cainéal", + "Message Session Relay Protocol": "Iompar WebSocket le haghaidh MSRP (Prótacal Athsheolta Seisiúin Teachtaireachtaí)", + "Binary Floor Control Protocol": "Iompar Soicéad Gréasáin le haghaidh BFCP (Prótacal Rialaithe Urláir Dénártha)", + "Softvelum Low Delay Protocol": "Prótacal Moille Íseal Softvelum", + "OPC UA Connection Protocol": "Prótacal Ceangail OPC UA", + "OPC UA JSON Encoding": "Ionchódú OPC UA JSON", + "Swindon Web Server Protocol": "Prótacal Freastalaí Gréasáin Swindon (ionchódú JSON)", + "Broadband Forum User Services Platform": "USP (Ardán Seirbhísí Úsáideoirí Fóram Leathanbhanda)", + "Constrained Application Protocol": "Prótacal Iarratais Srianta (CoAP)", + "Softvelum WebSocket signaling protocol": "Prótacal Comharthaíochta Softvelum WebSocket", + "Cobra Real Time Messaging Protocol": "Prótacal Teachtaireachtaí Fíor-Ama Cobra", + "Declarative Resource Protocol": "Prótacal Acmhainní Dearbhaithe", + "BACnet Secure Connect Hub Connection": "Nasc Mol Slán BACnet", + "Allow Notifications": "Ceadaigh Fógraí", + "Notifications Enabled": "Fógraí Cumasaithe", + "Browser not supported": "Ní thacaítear le brabhsálaí", + "certHostnameMismatch": "Ní hionann ainm óstach an deimhnithe agus URL an mhonatóra.", + "twilioMessagingServiceSID": "SID Seirbhíse Teachtaireachtaí (roghnach)", + "twilloMessagingServiceSIDHelptext": "Cuir isteach d’Aitheantas Sóisialta Seirbhíse Teachtaireachtaí anseo má tá tú ag úsáid {twillo_messaging_service_help_link} chun seoltóirí agus gnéithe a bhainistiú", + "twilioApiKeyHelptext": "Tá an eochair API roghnach ach moltar í. Is féidir leat SID an Chuntais agus AuthToken a sholáthar ó leathanach TwilioConsole nó SID an Chuntais agus an péire Eochair API agus rún Eochair API", + "BACnet Secure Connect Direct Connection": "Ceangal Díreach Slán BACnet", + "WebSocket Transport for JMAP": "Iompar WebSocket do JMAP (Prótacal Meitea-Fheidhmchláir JSON)", + "ITU-T T.140 Real-Time Text": "Téacs Fíor-Ama ITU-T T.140", + "Done.best IoT Protocol": "Prótacal Idirlín na Rudaí Done.best", + "Collection Update": "Fophrótacal Gréasáin Nuashonraithe an Bhailiúcháin", + "Text IRC Protocol": "Prótacal IRC Téacs", + "Binary IRC Protocol": "Prótacal IRC Dénártha", + "Penguin Statistics Live Protocol v3": "Prótacal Beo Staitisticí Penguin v3 (ionchódú Protobuf)", + "Unable to get permission to notify": "Ní féidir cead a fháil chun fógra a thabhairt (diúltaíodh nó neamhaird déanta ar an iarratas).", + "Webpush Helptext": "Ní oibríonn brú gréasáin ach le naisc SSL (HTTPS). I gcás gléasanna iOS, ní mór leathanach gréasáin a chur leis an scáileán baile roimh ré.", + "showOnlyLastHeartbeat": "Taispeáin an Buille Croí Deireanach Amháin", + "minimumIntervalWarning": "D’fhéadfadh eatraimh faoi bhun 20 soicind drochfheidhmíocht a bheith mar thoradh air.", + "lowIntervalWarning": "An bhfuil tú cinnte gur mian leat an luach eatraimh a shocrú faoi bhun 20 soicind? D’fhéadfadh an fheidhmíocht dul in olcas, go háirithe má tá líon mór monatóirí ann." } From c2ea9e12d49b751b3ac58605a0206416e589854f Mon Sep 17 00:00:00 2001 From: Yo-code_back Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 44/91] Translated using Weblate (Chinese (Traditional)) Currently translated at 96.2% (1145 of 1189 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 94.5% (1124 of 1189 strings) Co-authored-by: Yo-code_back Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-TW.json | 67 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 59 insertions(+), 8 deletions(-) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index ab651c63..67c94e89 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -73,7 +73,7 @@ "Delete": "刪除", "Current": "目前", "Uptime": "運作率", - "Cert Exp.": "憑證期限", + "Cert Exp.": "憑證期限。", "day": "天", "-day": "天", "hour": "小時", @@ -391,8 +391,8 @@ "smseagleRecipient": "收件者 (用逗號分隔)", "smseagleToken": "API 存取權杖", "smseagleUrl": "您的 SMSEagle 裝置網址", - "smseagleEncoding": "以 Unicode 傳送", - "smseaglePriority": "訊息優先度 (0-9,預設 = 0)", + "smseagleEncoding": "以 Unicode 傳送 (預設:GSM-7)", + "smseaglePriority": "訊息優先度 (0-9,最高為9)", "stackfield": "Stackfield", "Customize": "自訂", "Custom Footer": "自訂頁尾", @@ -442,7 +442,7 @@ "Bark Group": "Bark 群組", "Bark Sound": "Bark 鈴聲", "WebHookUrl": "WebHookURL", - "SecretKey": "SecretKey", + "SecretKey": "祕密金鑰", "For safety, must use secret key": "為了安全起見,必須使用秘密金鑰", "Device Token": "裝置權杖", "Platform": "平臺", @@ -657,7 +657,7 @@ "DateTime Range": "DateTime 範圍", "Strategy": "策略", "Free Mobile User Identifier": "免費的行動用戶識別碼", - "Free Mobile API Key": "Free Mobile API 金鑰", + "Free Mobile API Key": "免費行動裝置 API 金鑰", "Enable TLS": "啟用 TLS", "Proto Service Name": "Proto 服務名稱", "Proto Method": "Proto 方式", @@ -779,7 +779,7 @@ "Expected Value": "預期值", "Json Query": "JSON 查詢", "setupDatabaseChooseDatabase": "您想使用哪個資料庫?", - "setupDatabaseEmbeddedMariaDB": "您不需要做任何設定。此 Docker 映像檔已內建並設定了 MariaDB。Uptime Kuma 將透過 unix socket 連線到該資料庫。", + "setupDatabaseEmbeddedMariaDB": "您不需要做任何設定。此 Docker 映像檔已內建並設定了 MariaDB。Uptime Kuma 將透過 Unix socket 連線到該資料庫。", "setupDatabaseMariaDB": "連線到外部 MariaDB 資料庫。 需要設定資料庫連線資訊。", "dbName": "資料庫名稱", "Show Clickable Link": "顯示可點選連結", @@ -879,7 +879,7 @@ "DockerHostRequired": "請為此監控設定 Docker 主機。", "Show Clickable Link Description": "如果勾選,所有能存取此狀態頁面的人都能存取監控網址。", "Badge Label": "徽章標籤", - "wayToGetFlashDutyKey": "您可以前往「頻道 -> (選擇一個頻道) -> 整合 -> 新增一個新的整合」頁面,新增一個「自訂事件」以取得推送地址,並複製地址中的整合金鑰。欲知更多資訊,請訪問", + "wayToGetFlashDutyKey": "如果要將 Uptime Kuma 和 Flashduty 整合: 前往 頻道>選擇頻道>整合>新增整合,選擇 Uptime Kuma,然後複製推送網址。", "FlashDuty Severity": "嚴重性", "nostrRelays": "Nostr 中繼", "nostrRelaysHelp": "每行一個中繼網址", @@ -1136,5 +1136,56 @@ "Path": "路徑", "defaultFriendlyName": "新監測器", "Add Tags": "加入標籤", - "tagAlreadyOnMonitor": "此標籤(名稱與值)已經存在監視器或等待加入中。" + "tagAlreadyOnMonitor": "此標籤(名稱與值)已經存在監視器或等待加入中。", + "Events cleared successfully": "事件清除成功。", + "No monitors found": "未找到監控。", + "Could not clear events": "無法清除事件 {failed}/{total}", + "brevoBccEmail": "BCC郵件", + "auto-select": "自動選擇", + "deleteGroupMsg": "你確定要刪除此群組嗎?", + "clearAllEventsMsg": "你確定要刪除所有事件嗎?", + "brevoCcEmail": "CC郵件", + "brevoFromEmail": "來自郵件", + "brevoFromName": "來自名稱", + "brevoApiHelp": "在此創建API:{0}", + "brevoSubject": "標題", + "descriptionHelpText": "將顯示在內部控制面板,可以使用Markdown格式,內容會在顯示前處理(保留空格和縮排)。", + "Clear All Events": "清除所有事件", + "FlashDuty Push URL": "推送網址", + "supportBaleChatID": "支援 私訊/群組/頻道 ID", + "wayToGetBaleChatID": "你可以傳送訊息給這個機器人然後用此連結查看你的頻道ID:", + "wayToGetBaleToken": "你可以從{0}取得Token。", + "brevoToEmail": "給郵件", + "mqttWebSocketPath": "MQTT WebSocket路徑", + "mqttWebsocketPathExplanation": "用於經由WebSocket連線的MQTT的WebSocket路徑(例如:/mqtt)", + "mqttWebsocketPathInvalid": "請使用有效的WebSocket格式", + "mqttHostnameTip": "請使用以下格式:{hostnameFormat}", + "ariaPauseMaintenance": "暫停此維護排程", + "ariaResumeMaintenance": "重啟這個維護排程", + "ariaCloneMaintenance": "複製此維護排程", + "ariaEditMaintenance": "編輯此維護排程", + "ariaDeleteMaintenance": "刪除此維護排程", + "tagAlreadyStaged": "這個標籤(名稱和數值)已經準備就緒。", + "tagNameExists": "已經有與此表情同名的系統標籤,請從清單中選擇或使用其他名稱。", + "issueWithGoogleChatOnAndroidHelptext": "這也能規避掉像是 {issustackerURL} 的問題", + "Dingtalk User List": "使用者ID列表", + "Enter a list of userId": "輸入使用者ID列表", + "Dingtalk Mobile List": "行動裝置列表", + "Enter a list of mobile": "輸入行動裝置列表", + "Invalid mobile": "無效的行動裝置(電話) [{mobile}]", + "Invalid userId": "無效的使用者ID [{userId}]", + "webhookPostMethodDesc": "POST 適用於大多的現代化HTTP伺服器。", + "webhookGetMethodDesc": "GET 可以將數據作為查詢參數發送,不允許配置請求體。對於觸發 Uptime Kuma Push 的 監控來說非常有用。", + "HTTP Method": "HTTP方法", + "wayToGetEvolutionUrlAndToken": "您可以從 {0} 獲取所需頻道的 API網址 和 Token(密鑰)", + "Mention Mobile List": "提及行動裝置列表", + "Mention User List": "提及使用者ID列表", + "wayToWriteEvolutionRecipient": "帶有國際前綴但開頭沒有加號的電話號碼 ({0})、聯絡人 ID ({1}) 或群組 ID ({2})。", + "evolutionRecipient": "電話號碼 / 聯絡ID / 群組ID", + "FlashDuty Push URL Placeholder": "從警報整合頁面複製", + "Clone Maintenance": "複製維護", + "smseagleMsgRing": "鈴聲呼叫 (電話呼叫)", + "smseagleMsgTts": "文字轉語音通話", + "smseagleMsgTtsAdvanced": "文字轉語音進階通話", + "smseagleDocs": "檢查文件或 APIv2 的可用性: {0}" } From cc2bf6be29ed61107699c38ff89fc384b5b9fc41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Bratovi=C4=87?= Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 45/91] Translated using Weblate (Croatian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (1192 of 1192 strings) Translated using Weblate (Croatian) Currently translated at 100.0% (1189 of 1189 strings) Co-authored-by: Ivan Bratović Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/hr-HR.json | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/lang/hr-HR.json b/src/lang/hr-HR.json index fe3972b0..9af524f0 100644 --- a/src/lang/hr-HR.json +++ b/src/lang/hr-HR.json @@ -542,7 +542,7 @@ "Retype the address.": "Ponovno napišite adresu.", "Go back to the previous page.": "Vratite se na prethodnu stranicu.", "Coming Soon": "Dolazi uskoro", - "wayToGetClickSendSMSToken": "Možete dobiti API korisničko ime i API ključ sa {0}.", + "wayToGetClickSendSMSToken": "Možete dobiti API korisničko ime i API ključ sa {here}.", "Connection String": "Tekst veze", "Query": "Upit", "settingsCertificateExpiry": "TLS istek certifikata", @@ -648,7 +648,7 @@ "webhookBodyCustomOption": "Prilagođeno tijelo zahtjeva", "selectedMonitorCount": "Odabrano: {0}", "Check/Uncheck": "Označi/odznači", - "telegramMessageThreadID": "(Neobvezno) Identivikator dretve poruka", + "telegramMessageThreadID": "(Neobvezno) Identifikator dretve poruka", "telegramMessageThreadIDDescription": "Neobavezni jedinstveni identifikator za dretvu poruka (temu) foruma; samo za forumske supergrupe", "telegramSendSilently": "Pošalji nečujno", "telegramSendSilentlyDescription": "Šalje poruku nečujno. Primatelji će dobiti obavijest bez zvuka.", @@ -1220,5 +1220,19 @@ "Dingtalk User List": "Popis korisničkih ID-jeva", "Enter a list of userId": "Unesite popis korisničkih ID-jeva", "Enter a list of mobile": "Unesite popis mobilnih uređaja", - "Invalid mobile": "Nevažeći mobitel [{mobile}]" + "Invalid mobile": "Nevažeći mobitel [{mobile}]", + "Recipient Numbers": "Brojevi primatelja", + "deleteChildrenMonitors": "Također izbriši podređene monitore i njihovu djecu ako takvi postoje | Također izbriši sve {count} podređene monitore i njihovu djecu ako takvi postoje", + "Template ID": "Identifikator predloška", + "wayToGetClickSMSIRTemplateID": "Predložak mora sadržavati polje {uptkumaalert}. Novi predložak može se stvoriti {ovdje}.", + "deleteGroupMsg": "Jeste li sigurni da želite izbrisati ovu grupu?", + "Clone Maintenance": "Kloniraj održavanje", + "ariaPauseMaintenance": "Pauziraj ovaj raspored održavanja", + "ariaResumeMaintenance": "Pokreni ovaj raspored održavanja", + "ariaCloneMaintenance": "Stvori kopiju ovog rasporeda održavanja", + "ariaEditMaintenance": "Uredi ovaj raspored održavanja", + "ariaDeleteMaintenance": "Obriši ovaj raspored održavanja", + "twilioApiKeyHelptext": "API ključ je neobvezan, ali se preporučuje. Možete navesti ili SID računa i AuthToken s Twilio konzole ili SID računa te API ključ s tajnom", + "twilioMessagingServiceSID": "SID usluge za slanje poruka (neobvezno)", + "twilloMessagingServiceSIDHelptext": "Ovdje unesite SID svoje usluge za slanje poruka ako koristite {twillo_messaging_service_help_link} za upravljanje pošiljateljima i ostalim značajkama" } From 71f39ba032562f13a6909adafd85c99d3b846ef6 Mon Sep 17 00:00:00 2001 From: Alex Nagy Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 46/91] Translated using Weblate (Hungarian) Currently translated at 94.7% (1130 of 1192 strings) Co-authored-by: Alex Nagy Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/hu.json | 82 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 9 deletions(-) diff --git a/src/lang/hu.json b/src/lang/hu.json index 2eb829c6..a1124929 100644 --- a/src/lang/hu.json +++ b/src/lang/hu.json @@ -542,14 +542,14 @@ "chromeExecutableAutoDetect": "Automatikus felismerés", "emailTemplateStatus": "Státusz", "deleteMaintenanceMsg": "Biztosan törölni szeretné ezt a karbantartást?", - "apiKeyAddedMsg": "Az ön API kulcsa létrejött. Kérjük jegyezze fel, mert nem lesz a felületen elérhető a jövőben!", + "apiKeyAddedMsg": "Az ön API kulcsa létrejött. Kérjük jegyezze fel, mert nem lesz a felületen elérhető a jövőben.", "Expires": "Lejár", "disableAPIKeyMsg": "Biztosan le fel szeretné függeszteni ezt az API kulcsot?", "Key Added": "Kulcs létrehozva", "selectedMonitorCount": "Kiválasztva: {0}", "sameAsServerTimezone": "A szerver időzónájával megegyező", "setupDatabaseChooseDatabase": "Melyik adatbázist szeretné használni?", - "setupDatabaseEmbeddedMariaDB": "Nem kell semmit beállítani. Ez a docker imagefájl automatikusan beágyazott és konfigurált egy MariaDB-t a számodra. Az Uptime Kuma unix socket-en keresztül fog csatlakozni ehhez az adatbázishoz.", + "setupDatabaseEmbeddedMariaDB": "Nem kell semmit beállítani. Ez a Docker imagefájl automatikusan beágyazott és konfigurált egy MariaDB-t a számodra. Az Uptime Kuma Unix socket-en keresztül fog csatlakozni ehhez az adatbázishoz.", "setupDatabaseMariaDB": "Kapcsolódás egy külső MariaDB adatbázishoz. Meg kell adnia az adatbázis kapcsolat információit.", "setupDatabaseSQLite": "Egy egyszerű adatbázisfájl, amely kis méretű telepítésekhez ajánlott. A v2.0.0 előtt az Uptime Kuma az SQLite-ot használta alapértelmezett adatbázisként.", "dbName": "Adazbázis neve", @@ -595,7 +595,7 @@ "webhookBodyPresetOption": "Előbeállítás - {0}", "startOrEndWithOnly": "Csak {0}-val kezdődő vagy végződő", "PushDeer Key": "PushDeer kulcs", - "wayToGetClickSendSMSToken": "Az API felhasználónevet és az API kulcsot a {0} oldalon kaphatja meg.", + "wayToGetClickSendSMSToken": "Az API felhasználónevet és az API kulcsot a {here} oldalon kaphatja meg.", "pushOthers": "Egyebek", "programmingLanguages": "Programozási Nyelvek", "Docker Container": "Docker Konténer", @@ -735,7 +735,7 @@ "RadiusSecretDescription": "Megosztott titok az ügyfél és a szerver között", "RadiusCalledStationId": "Hívott állomás azonosítója", "Date and Time": "Dátum és idő", - "enableNSCD": "Az NSCD (Name Service Cache Daemon) engedélyezése az összes DNS-kérés gyorsítótárazásához.", + "enableNSCD": "Az NSCD (Name Service Cache Daemon) engedélyezése az összes DNS-kérés gyorsítótárazásához", "Edit Maintenance": "Karbantartás szerkesztése", "smseagleGroup": "Telefonkönyv csoport neve(i)", "styleElapsedTime": "Az eltelt idő a heartbeat sáv alatt", @@ -760,8 +760,8 @@ "smseagleRecipient": "Címzett(ek) (több címzettet vesszővel kell elválasztani)", "smseagleToken": "API hozzáférési jelszó", "smseagleUrl": "Az Ön SMSEagle eszközének URL címe", - "smseagleEncoding": "Unicode-ként küldés", - "smseaglePriority": "Üzenet prioritása (0-9, alapértelmezett = 0)", + "smseagleEncoding": "Unicode-ként küldés (alapértelmezett=GSM-7)", + "smseaglePriority": "Üzenet prioritása (0-9, legmagasabb prioritás = 9)", "Recipient Number": "Fogadó telefonszáma", "From Name/Number": "A névtől/számtól", "Leave blank to use a shared sender number.": "Hagyd üresen, ha megosztott feladószámot szeretnél használni.", @@ -838,7 +838,7 @@ "threadForumPostID": "Szál / Fórum üzenet ID", "e.g. {discordThreadID}": "például. {discordThreadID}", "locally configured mail transfer agent": "helyileg beállított email továbbító", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Adja meg a csatlakoztatni kívánt szerver gazdagép nevét vagy {localhost} ha a {local_mta}-t szeretné használni", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Adja meg a csatlakoztatni kívánt szerver gazdagép nevét vagy {localhost}, ha a {local_mta}-t szeretné használni", "ignoreTLSErrorGeneral": "Mellőzze a TLS/SSL hibákat a csatlakozáshoz", "threemaRecipientTypeIdentityFormat": "8 karakter", "threemaRecipientTypeEmail": "Email cím", @@ -884,7 +884,7 @@ "jsonQueryDescription": "Végezzen JSON-lekérdezést a válasz alapján, és ellenőrizze a várt értéket (a visszatérési értéket a rendszer karakterlánccá alakítja az összehasonlításhoz). Nézze meg a {0} webhelyet a lekérdezés paramétereivel kapcsolatos dokumentációért. A test környezet itt található: {1}.", "Authorization Identity": "Jogosultság Identitás", "noGroupMonitorMsg": "Nem lehetséges. Először létre kell hozni egy monitorozandó csoportot.", - "wayToGetFlashDutyKey": "Menjen a Csatorna -> (Csatorna kiválasztása) -> Integrációk -> Új integráció hozzáadása oldalra, adjon hozzá egy 'Uptime Kuma' push címet, másolja az Integrációs kulcsot a címbe. További információkért kérjük, látogasson el a", + "wayToGetFlashDutyKey": "Az Uptime Kuma Flashduty-val való integrálásához: Lépjen a Csatornák > Válasszon ki egy csatornát > Integrációk > Új integráció hozzáadása menüpontra, válassza az Uptime Kuma lehetőséget, és másolja ki a Push URL-t.", "gamedigGuessPortDescription": "A Valve Server Query Protocol által használt port eltérhet az kliens portjától. Próbáld ki ezt, ha a monitor nem tud csatlakozni a kiszolgálóhoz.", "remoteBrowsersDescription": "A távoli böngészők a Chromium helyi futtatásának alternatívája. Állítsa be egy olyan szolgáltatással, mint a browserless.io, vagy csatlakozzon a sajátjával", "mongodbCommandDescription": "Egy utasítás futtatásának kérése a MongoDB adatbázishoz. A rendelkezésre álló parancsokról a {documentation}", @@ -1099,5 +1099,69 @@ "templateStatus": "státusz", "telegramUseTemplate": "Egyéni üzenetsablon használata", "telegramUseTemplateDescription": "Ha engedélyezve van, az üzenet egy egyéni sablon szerint lesz elküldve.", - "telegramTemplateFormatDescription": "Telegram különböző jelölőnyelvek használatát engedi, további információkért lásd {0}." + "telegramTemplateFormatDescription": "Telegram különböző jelölőnyelvek használatát engedi, további információkért lásd {0}.", + "webhookPostMethodDesc": "POST jó modern HTTP szerverek számára.", + "HTTP Method": "HTTP metódus", + "webhookGetMethodDesc": "A GET lekérdezési paraméterként küldi az adatokat, és nem teszi lehetővé a törzs konfigurálását. Hasznos az Uptime Kuma Push monitorok elindításához.", + "defaultFriendlyName": "Új Monitor", + "smseagleContactV2": "Telefonkönyv kontakt ID-k", + "deleteGroupMsg": "Biztosan törölni szeretné ezt a csoportot?", + "deleteChildrenMonitors": "Törölje a közvetlen alárendelt monitorokat és azok gyermekeit is, ha vannak ilyenek | Törölje az összes {count} közvetlen alárendelt monitort és azok gyermekeit is, ha vannak ilyenek", + "Events cleared successfully": "Események sikeresen törölve.", + "No monitors found": "Nem találhatóak monitor-ok.", + "Could not clear events": "Nem sikerült törölni {failed}/{total} eseményt", + "Mention User List": "Felhasználói azonosító lista említése", + "Dingtalk Mobile List": "Mobilszám lista", + "Dingtalk User List": "Felhasználói ID lista", + "Enter a list of userId": "Adjon meg egy felhasználói ID listát", + "Invalid mobile": "Érvénytelen mobilszám [{mobile}]", + "Invalid userId": "Érvénytelen felhasználói ID [{userId}]", + "smseagleMsgType": "Üzenet típusa", + "smseagleMsgTtsAdvanced": "Text-to-speech haladó hívás", + "smseagleTtsModel": "Text-to-speech modell ID", + "smseagleApiType": "API verzió", + "smseagleApiv1": "APIv1 (meglevő projektek és visszafelé kompatibilitás miatt)", + "smseagleApiv2": "APIv2 (új integrációk számára ajánlott)", + "smseagleDuration": "Időtartam (másodpercben)", + "supportBaleChatID": "Közvetlen csevegés / csoport / csatorna csevegés ID támogatása", + "wayToGetBaleChatID": "A chat azonosítódat úgy szerezheted meg, hogy üzenetet küldesz a bot-nak, és erre az URL-re kattintva megtekinted a chat_id-t:", + "wayToGetBaleToken": "Token-t szerezhetsz innen {0}.", + "smseagleGroupV2": "Telefonkönyv csoport ID-k", + "smseagleMsgSms": "SMS üzenet (alapértelmezett)", + "smseagleMsgRing": "Csörgés", + "smseagleMsgTts": "Text-to-speech hívás", + "smseagleComma": "Több felsorolása esetén vesszővel kell elválasztani", + "Path": "Útvonal", + "mqttWebSocketPath": "MQTT WebSocket Útvonal", + "mqttWebsocketPathExplanation": "WebSocket útvonal az MQTT-hez WebSocket kapcsolatokon keresztül (pl. /mqtt)", + "mqttWebsocketPathInvalid": "Kérem egy érvényes WebSocket útvonal formátumot használjon", + "mqttHostnameTip": "Kérjük ezt a formátumot használja {hostnameFormat}", + "FlashDuty Push URL Placeholder": "Másolás a riasztási integrációs oldalról", + "twilioApiKeyHelptext": "Az API-kulcs megadása opcionális, de ajánlott. Megadhatja a TwilioConsole oldalról származó fiók SID-jét és AuthToken-jét, vagy a fiók SID-jét és az API-kulcs, valamint az API-kulcs titkos kódjának párosát", + "twilioMessagingServiceSID": "Üzenetküldő szolgáltatás SID (opcionális)", + "twilloMessagingServiceSIDHelptext": "Add meg az üzenetküldő szolgáltatás SID azonosítóját, ha a {twillo_messaging_service_help_link} szolgáltatást használod a küldők és funkciók kezeléséhez", + "Add Tags": "Címkék hozzáadása", + "tagAlreadyStaged": "Ez a címke (név és érték) már elő van készítve ehhez a köteghez.", + "tagNameExists": "Egy rendszer címke már létezik ezzel a névvel. Válassza ki a listából vagy használjon egy másik nevet.", + "tagAlreadyOnMonitor": "Ez a címke (név és érték) már szerepel a monitor-on vagy hozzáadás alatt áll.", + "Mention Mobile List": "Mobilszám lista említése", + "Enter a list of mobile": "Adjon meg egy mobilszám listát", + "smseagleDocs": "Ellenőrizze a dokumentációt vagy az APIv2 elérhetőségét: {0}", + "Template plain text instead of using cards": "Sima szöveg sablon használata kártyák helyett", + "issueWithGoogleChatOnAndroidHelptext": "Ez lehetővé teszi a hibák, például a {issuetackerURL} megkerülését is", + "descriptionHelpText": "A belső irányítópulton látható. A Markdown engedélyezett és a megjelenítés előtt szanitizálva van (megőrzi a szóközöket és a behúzást).", + "ntfyPriorityHelptextPriorityHigherThanDown": "A normál prioritásnak magasabbnak kell lennie, mint a(z) {0} prioritás. A(z) {1} prioritás magasabb, mint a(z) {0} prioritás {2}", + "auto-select": "Automatikus kiválasztás", + "Clone Maintenance": "Karbantartás klónozása", + "ariaPauseMaintenance": "Karbantartási ütemterv szüneteltetése", + "ariaResumeMaintenance": "Karbantartási ütemterv folytatása", + "ariaCloneMaintenance": "Másolat készítése a karbantartási ütemtervről", + "ariaEditMaintenance": "Szerkessze ezt a karbantartási ütemtervet", + "ariaDeleteMaintenance": "Törölje ezt a karbantartási ütemtervet", + "ntfyPriorityDown": "DOWN-események prioritása", + "Use HTML for custom E-mail body": "HTML használata egyedi E-mail törzshöz", + "FlashDuty Push URL": "Push URL", + "Clear All Events": "Összes esemény törlése", + "clearAllEventsMsg": "Biztosan törölni szeretné az összes eseményt?", + "SpugPush Template Code": "Sablon kód" } From 048d2189adf63044e67ea95ac3f4c6ecd499c113 Mon Sep 17 00:00:00 2001 From: andersnordh Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 47/91] Translated using Weblate (Swedish) Currently translated at 82.1% (979 of 1192 strings) Co-authored-by: andersnordh Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sv/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/sv-SE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index bc6efada..f5498dbc 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -43,7 +43,7 @@ "Delete": "Ta bort", "Current": "Nuvarande", "Uptime": "Drifttid", - "Cert Exp.": "Certifikat utlöpt.", + "Cert Exp.": "Certifikat utlöper", "day": "dag | dagar", "-day": "-dag", "hour": "timme", From 00da7b0310d8897fa10a9e3de33016964a49e937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Metehan=20=C5=9Eenyer?= Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 48/91] Translated using Weblate (Turkish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (1192 of 1192 strings) Co-authored-by: Metehan Şenyer Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/tr-TR.json | 73 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 3e972731..d36e5110 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -19,7 +19,7 @@ "resolverserverDescription": "Cloudflare varsayılan sunucudur, çözümleyici sunucusunu istediğiniz zaman değiştirebilirsiniz.", "rrtypeDescription": "İzlemek istediğiniz servisin RR-Tipini seçin", "pauseMonitorMsg": "Durdurmak istediğinden emin misin?", - "enableDefaultNotificationDescription": "Bu bildirim yeni monitörler için varsayılan olarak etkinleştirilecektir. Bildirimi her monitör için ayrı ayrı devre dışı bırakabilirsiniz.", + "enableDefaultNotificationDescription": "Bu bildirim, yeni monitörler için varsayılan olarak etkinleştirilir. Yine de her monitör için ayrı ayrı devre dışı bırakabilirsiniz.", "clearEventsMsg": "Bu servisin bütün kayıtlarını silmek istediğinden emin misin?", "clearHeartbeatsMsg": "Bu servis için tüm sağlık durumunu silmek istediğinden emin misin?", "confirmClearStatisticsMsg": "Tüm istatistikleri silmek istediğinden emin misin?", @@ -291,7 +291,7 @@ "promosmsSMSSender": "SMS Gönderici Adı : Ön kayıtlı ad veya varsayılanlardan biri: InfoSMS, SMS Info, MaxSMS, INFO, SMS", "Feishu WebHookUrl": "Feishu WebHookURL", "matrixHomeserverURL": "Homeserver URL (http(s):// ve isteğe bağlı olarak bağlantı noktası ile)", - "Internal Room Id": "Internal Room ID", + "Internal Room Id": "Dahili Oda Kimliği", "matrixDesc1": "Internal Room ID'sini, Matrix istemcinizdeki oda ayarlarının gelişmiş bölümüne bakarak bulabilirsiniz. !QMdRCpUIfLwsfjxye6:home.server gibi görünmelidir.", "matrixDesc2": "Hesabınıza ve katıldığınız tüm odalara tam erişime izin vereceğinden, yeni bir kullanıcı oluşturmanız ve kendi Matrix kullanıcınızın erişim belirtecini kullanmamanız şiddetle tavsiye edilir. Bunun yerine, yeni bir kullanıcı oluşturun ve onu yalnızca bildirimi almak istediğiniz odaya davet edin. {0} komutunu çalıştırarak erişim tokenini alabilirsiniz", "Method": "Yöntem", @@ -395,17 +395,17 @@ "Certificate Chain": "Sertifika Zinciri", "Valid": "Geçerli", "Invalid": "Geçersiz", - "AccessKeyId": "AccessKey ID", + "AccessKeyId": "Erişim Anahtarı Kimliği", "SecretAccessKey": "AccessKey Gizli Anahtarı", "PhoneNumbers": "Telefon numaraları", - "TemplateCode": "TemplateCode", - "SignName": "SignName", + "TemplateCode": "ŞablonKodu", + "SignName": "İmzaAdı", "Sms template must contain parameters: ": "Sms şablonu parametreleri içermelidir: ", "Bark Endpoint": "Bark Uç Noktası", "Bark Group": "Bark Grubu", "Bark Sound": "Havlama Sesi", "WebHookUrl": "WebHookUrl", - "SecretKey": "SecretKey", + "SecretKey": "GizliAnahtar", "For safety, must use secret key": "Güvenlik için gizli anahtar kullanılmalıdır", "Device Token": "Cihaz Tokeni", "Platform": "Platform", @@ -530,7 +530,7 @@ "Retype the address.": "Adresi tekrar yazın.", "Go back to the previous page.": "Bir önceki sayfaya geri git.", "Coming Soon": "Yakında Gelecek", - "wayToGetClickSendSMSToken": "API Kullanıcı Adı ve API Anahtarını {0} adresinden alabilirsiniz.", + "wayToGetClickSendSMSToken": "API Kullanıcı Adı ve API Anahtarını {here} üzerinden alabilirsiniz.", "Connection String": "Bağlantı Dizisi", "Query": "Sorgu", "settingsCertificateExpiry": "TLS Sertifikasının Geçerlilik Süresi", @@ -840,7 +840,7 @@ "styleElapsedTime": "Kalp atışı çubuğunun altında geçen süre", "styleElapsedTimeShowWithLine": "Göster (Satır ile birlikte)", "enableNSCD": "Tüm DNS isteklerini önbelleğe almak için NSCD'yi (Ad Hizmeti Önbellek Programı) etkinleştirin", - "setupDatabaseEmbeddedMariaDB": "Hiçbir şey ayarlamanıza gerek yok. Bu Docker görseli, MariaDB’yi otomatik olarak gömülü ve yapılandırılmış şekilde içerir. Uptime Kuma bu veri tabanına unix soketi aracılığıyla bağlanacaktır.", + "setupDatabaseEmbeddedMariaDB": "Hiçbir şey ayarlamanıza gerek yok. Bu Docker görseli, MariaDB’yi otomatik olarak gömülü ve yapılandırılmış şekilde içerir. Uptime Kuma bu veri tabanına Unix soketi aracılığıyla bağlanacaktır.", "setupDatabaseSQLite": "Küçük ölçekli dağıtımlar için önerilen basit bir veri tabanı dosyası. v2.0.0'dan önce Uptime Kuma, varsayılan veri tabanı olarak SQLite'ı kullanıyordu.", "setupDatabaseChooseDatabase": "Hangi veritabanını kullanmak istersiniz?", "setupDatabaseMariaDB": "Harici bir MariaDB veri tabanına bağlanın. Veri tabanı bağlantı bilgilerini ayarlamanız gerekir.", @@ -946,7 +946,7 @@ "max 11 alphanumeric characters": "maksimum 11 alfanümerik karakter", "Mentioning": "Bahsetme", "Don't mention people": "İnsanlardan bahsetme", - "Mention group": "Mention {grup}", + "Mention group": "{group}'tan bahset", "wayToGetSevenIOApiKey": "App.seven.io > geliştirici > API anahtarı > yeşil ekle düğmesi altındaki kontrol panelini ziyaret edin", "senderSevenIO": "Numara veya isim gönderiliyor", "receiverSevenIO": "Alıcı numarası", @@ -979,7 +979,7 @@ "smspartnerSenderNameInfo": "3..=11 normal karakter arasında olmalıdır", "threemaRecipient": "Alıcı", "threemaRecipientType": "Alıcı Tipi", - "threemaRecipientTypeIdentity": "Threema-ID", + "threemaRecipientTypeIdentity": "Threema Kimliği", "threemaRecipientTypePhone": "Telefon numarası", "threemaRecipientTypeEmail": "E-posta Adresi", "threemaSenderIdentity": "Ağ Geçidi Kimliği", @@ -1154,7 +1154,7 @@ "pingIntervalAdjustedInfo": "Paket sayısına, genel zaman aşımına ve ping başına zaman aşımına göre ayarlanan aralık", "Custom URL": "Özel URL", "customUrlDescription": "Tıklanabilir URL olarak monitörünki yerine kullanılacaktır.", - "OneChatBotId": "OneChat Bot ID", + "OneChatBotId": "OneChat Bot Kimliği", "the smsplanet documentation": "smsplanet dokümantasyonu", "Phone numbers": "Telefon numaraları", "Sender name": "Gönderen adı", @@ -1191,5 +1191,54 @@ "supportBaleChatID": "Destek Direkt Mesaj / Grup / Kanalın Mesaj ID'si", "Events cleared successfully": "Etkinlikler başarıyla temizlendi.", "No monitors found": "Monitör bulunamadı.", - "issueWithGoogleChatOnAndroidHelptext": "Bu ayrıca {issuetackerURL} gibi üst akıştaki hataları aşmayı sağlar" + "issueWithGoogleChatOnAndroidHelptext": "Bu ayrıca {issuetackerURL} gibi üst akıştaki hataları aşmayı sağlar", + "Number of retry attempts if webhook fails": "Webhook başarısız olursa yeniden deneme sayısı (her 60-180 saniyede bir).", + "Maximum Retries": "Maksimum Yeniden Deneme", + "wayToGetClickSMSIRTemplateID": "Şablonunuz {uptkumaalert} alanını içermelidir. {here} üzerinden yeni bir şablon oluşturabilirsiniz.", + "Template ID": "Şablon Kimliği", + "brevoApiHelp": "Buradan bir API anahtarı oluşturun: {0}", + "brevoApiKey": "Brevo API Anahtarı", + "brevoFromEmail": "Gönderen E-posta", + "brevoBccEmail": "BCC E-posta", + "Conversation token": "Konuşma token'ı", + "Nextcloud host": "Nextcloud sunucusu", + "Bot secret": "Bot gizli anahtarı", + "HTTP Method": "HTTP Metodu", + "brevoSeparateMultipleEmails": "Birden fazla e-posta adresini virgülle ayırın", + "brevoSubject": "Konu", + "descriptionHelpText": "İç pano üzerinde gösterilir. Markdown kullanımı serbesttir ve görüntülenmeden önce boşlukları ve girintileri koruyacak şekilde temizlenir.", + "deleteGroupMsg": "Bu grubu silmek istediğinizden emin misiniz?", + "deleteChildrenMonitors": "Ayrıca, varsa doğrudan alt monitörleri ve bunların alt monitörlerini de silin | Ayrıca, varsa tüm ({count}) doğrudan alt monitörleri ve bunların alt monitörlerini de silin", + "Mention Mobile List": "Mobil listeden bahset", + "Enter a list of userId": "Kullanıcı kimliği listesini girin", + "Enter a list of mobile": "Mobil cihazların bir listesini girin", + "Mention User List": "Kullanıcı kimlik listesinden bahset", + "Dingtalk Mobile List": "Mobil liste", + "Dingtalk User List": "Kullanıcı Kimlik listesi", + "Invalid mobile": "Geçersiz mobil [{mobile}]", + "Invalid userId": "Geçersiz kullanıcı kimliği [{userId}]", + "twilioMessagingServiceSID": "Mesajlaşma Hizmeti SID (isteğe bağlı)", + "twilloMessagingServiceSIDHelptext": "Göndericileri ve özellikleri yönetmek için {twillo_messaging_service_help_link} kullanıyorsanız, Mesajlaşma Hizmeti SID’inizi buraya girin", + "webhookPostMethodDesc": "POST çoğu modern HTTP sunucusu için uygundur.", + "wayToWriteEvolutionRecipient": "Başında artı işareti olmayan uluslararası kodlu telefon numarası ({0}), Kişi Kimliği ({1}) veya Grup Kimliği ({2}).", + "wayToGetEvolutionUrlAndToken": "API URL'sini ve token değerini, {0} üzerinden istediğiniz kanala giderek alabilirsiniz", + "evolutionRecipient": "Telefon Numarası / Kişi Kimliği / Grup Kimliği", + "evolutionInstanceName": "Örnek Adı", + "brevoFromName": "Gönderen İsmi", + "brevoToEmail": "Alıcı E-posta", + "brevoCcEmail": "CC E-posta", + "brevoLeaveBlankForDefaultSubject": "varsayılan konu için boş bırakın", + "Send UP silently": "UP bildirimini sessiz gönder", + "Send DOWN silently": "DOWN bildirimini sessiz gönder", + "twilioApiKeyHelptext": "API anahtarı isteğe bağlıdır ancak önerilir. TwilioConsole sayfasından Hesap SID ve Kimlik Doğrulama Token'ı ikilisini ya da Hesap SID ile API Anahtarı ve API Gizli Anahtarı çiftini sağlayabilirsiniz", + "webhookGetMethodDesc": "GET, verileri sorgu parametreleri olarak gönderir ve gövde (body) yapılandırmasına izin vermez. Uptime Kuma Push monitörlerini tetiklemek için kullanışlıdır.", + "brevoLeaveBlankForDefaultName": "varsayılan ad için boş bırakın", + "Installing a Nextcloud Talk bot requires administrative access to the server.": "Nextcloud Talk botu kurmak, sunucuda yönetici erişimi gerektirir.", + "Recipient Numbers": "Alıcı Numaraları", + "Clone Maintenance": "Bakım Kopyası", + "ariaPauseMaintenance": "Bu bakım programını duraklatın", + "ariaResumeMaintenance": "Bu bakım programını devam ettir", + "ariaCloneMaintenance": "Bu bakım programının bir kopyasını oluşturun", + "ariaEditMaintenance": "Bu bakım programını düzenle", + "ariaDeleteMaintenance": "Bu bakım programını sil" } From d0b23b80c4bf02ffa347f992d081a58d00736a77 Mon Sep 17 00:00:00 2001 From: AnnAngela Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 49/91] Translated using Weblate (Chinese (Simplified)) Currently translated at 99.9% (1232 of 1233 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.9% (1231 of 1232 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.9% (1191 of 1192 strings) Co-authored-by: AnnAngela Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 67 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 6 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index a879f795..2c1441c9 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -28,7 +28,7 @@ "keywordDescription": "在纯 HTML 或 JSON 响应中搜索关键字,区分大小写。", "pauseDashboardHome": "暂停", "deleteMonitorMsg": "确定要删除此监控项吗?", - "deleteMaintenanceMsg": "确定要删除此维护吗?", + "deleteMaintenanceMsg": "确定要删除此维护事件吗?", "deleteNotificationMsg": "确定要为所有监控项删除此通知吗?", "dnsPortDescription": "DNS 服务器端口,默认为 53,您可以在任何时候更改此端口。", "resolverserverDescription": "默认服务器是 Cloudflare。您随时可以修改解析服务器。", @@ -644,7 +644,7 @@ "lastDay2": "每月倒数第二天", "lastDay3": "每月倒数第三天", "lastDay4": "每月倒数第四天", - "No Maintenance": "无维护计划", + "No Maintenance": "无维护事件", "pauseMaintenanceMsg": "确定要暂停吗?", "maintenanceStatus-under-maintenance": "正在维护", "maintenanceStatus-inactive": "未启用", @@ -659,7 +659,7 @@ "Enable": "启用", "Disable": "禁用", "dnsCacheDescription": "可能无法在某些 IPv6 环境工作,如果遇到问题请禁用。", - "Single Maintenance Window": "单一时间窗口", + "Single Maintenance Window": "单一维护时间窗口", "Maintenance Time Window of a Day": "每日维护时间窗口", "Effective Date Range": "生效日期范围(可选)", "Schedule Maintenance": "计划维护", @@ -783,7 +783,7 @@ "Monitor Group": "监控项组", "Cannot connect to the socket server": "无法连接到后端服务器", "Reconnecting...": "重连中……", - "Edit Maintenance": "编辑维护计划", + "Edit Maintenance": "编辑维护事件", "Home": "首页", "noGroupMonitorMsg": "暂无可用,请先创建一个监控项组。", "Close": "关闭", @@ -1216,7 +1216,7 @@ "Number of retry attempts if webhook fails": "webhook 失败后的重试次数(60-180秒为一周期)。", "webhookPostMethodDesc": "POST 适用于大多数现代 HTTP 服务器。", "HTTP Method": "HTTP 方法", - "webhookGetMethodDesc": "GET 将数据作为查询参数发送,不允许配置请求体。对于触发 Uptime Kuma Push 监控非常有用。", + "webhookGetMethodDesc": "GET 将数据作为查询参数发送,不允许配置请求体。对于触发 Uptime Kuma Push 监控项非常有用。", "Invalid userId": "不合法的 userId [{userId}]", "Invalid mobile": "不合法的电话号码 [{mobile}]", "descriptionHelpText": "显示在内部仪表盘上。允许使用Markdown,但在显示前会经过消毒处理(保留空格和缩进)。", @@ -1228,5 +1228,60 @@ "Mention Mobile List": "提及移动列表", "wayToGetBaleToken": "你可以从{0}获取令牌。", "wayToGetBaleChatID": "您可以通过向机器人发送消息并访问此网址来查看聊天ID:", - "supportBaleChatID": "支持直接聊天/群组/频道的聊天ID" + "supportBaleChatID": "支持直接聊天/群组/频道的聊天ID", + "deleteChildrenMonitors": "也删除所有直接子监视器及其子项(如果有) | 也删除所有 {count} 个直接子监视器及其子项(如果有)", + "deleteGroupMsg": "确定要删除此分组吗?", + "wayToGetClickSMSIRTemplateID": "你的模板必须包含一个{uptkumaalert}字段。你可以在{here}创建一个新模板。", + "Template ID": "模板 ID", + "Recipient Numbers": "收件人手机号码", + "twilioMessagingServiceSID": "消息服务 SID(可选)", + "twilloMessagingServiceSIDHelptext": "如果使用 {twillo_messaging_service_help_link} 来管理发件人和功能,请在此处输入消息服务 SID", + "twilioApiKeyHelptext": "API 密钥是可选的,但也是推荐项。你可以提供 Twilio 控制台页面中的 Account SID 和 AuthToken,或提供 Account SID、API Key 和 API Key Secret", + "ariaDeleteMaintenance": "删除此维护计划", + "ariaEditMaintenance": "编辑此维护计划", + "ariaCloneMaintenance": "克隆此维护计划", + "ariaResumeMaintenance": "重启此维护计划", + "ariaPauseMaintenance": "暂停此维护计划", + "Clone Maintenance": "克隆维护事件", + "Swindon Web Server Protocol": "Swindon 网络服务器协议(JSON 编码)", + "WebSocket Transport for JMAP": "通过 WebSocket 传输的 JSON 元应用协议(JMAP)", + "Miele Cloud Connect Protocol": "Miele 云连接协议", + "Extensible Messaging and Presence Protocol": "通过 WebSocket 传输的可扩展消息和表示协议(XMPP)", + "Network API for Notification Channel": "用于通知渠道的 OMA RESTful API", + "ignoreSecWebsocketAcceptHeaderDescription": "如果 WebSocket 升级成功,则允许服务器不回复 Sec-WebSocket-Accept 标头。", + "Unable to get permission to notify": "无法获得通知权限(请求被拒绝或忽略)。", + "Browser not supported": "浏览器不支持", + "Allow Notifications": "允许通知", + "Notifications Enabled": "通知已启用", + "showOnlyLastHeartbeat": "仅显示最后一次心跳信息", + "Reverse Web Process Control": "反向网络进程控制协议(RWPCP)", + "jsflow": "jsFlow 发布、订阅、队列协议", + "Advanced Message Queuing Protocol": "高级消息队列协议(AMQP)1.0+", + "Web Process Control Protocol": "网络进程控制协议(WPCP)", + "Session Initiation Protocol": "通过 WebSocket 传输的会话发起协议(SIP)", + "WebSocket Application Messaging Protocol": "WebSocket 应用消息协议(WAMP)", + "wsSubprotocolDescription": "有关子协议的更多信息,请参阅{documentation}", + "Ignore Sec-WebSocket-Accept header": "忽视 {0} 标头", + "Smart Home IP": "智能家居互联网协议(SHIP)", + "OPC UA JSON Encoding": "OPC UA JSON 编码", + "OPC UA Connection Protocol": "OPC UA 连接协议", + "Softvelum Low Delay Protocol": "Softvelum 低延迟协议 (SLDP)", + "Binary Floor Control Protocol": "通过 WebSocket 传输的二进制发言权控制协议(BFCP)", + "Message Session Relay Protocol": "通过 WebSocket 传输的消息会话中继协议(MSRP)", + "Push Channel Protocol": "推送通道协议(PCP)", + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protocol v3 (Protobuf 编码)", + "Binary IRC Protocol": "二进制 IRC 协议", + "Text IRC Protocol": "纯文本 IRC 协议", + "Collection Update": "Collection Update Websocket Subprotocol", + "BACnet Secure Connect Direct Connection": "BACnet 安全连接直连方式", + "BACnet Secure Connect Hub Connection": "BACnet 安全连接 Hub 转发方式", + "Cobra Real Time Messaging Protocol": "Cobra 实时消息协议", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket 信令协议", + "Constrained Application Protocol": "受限应用协议(CoAP)", + "Broadband Forum User Services Platform": "USP(宽带论坛用户服务平台)", + "Done.best IoT Protocol": "Done.best 物联网(IoT)协议", + "ITU-T T.140 Real-Time Text": "ITU-T T.140 实时传输文本(RTT)协议", + "Declarative Resource Protocol": "声明式资源协议(Declarative Resource Protocol)", + "Webpush Helptext": "Web push 仅支持 SSL (HTTPS) 连接。对于 iOS 设备,必须事先将其网页添加到主屏幕。", + "certHostnameMismatch": "证书的域名与监控项的地址不符。" } From c29bae007aa02ec832c91acea87b7e82a3f80a2f Mon Sep 17 00:00:00 2001 From: Kang Dongheon Date: Thu, 11 Dec 2025 02:44:27 +0000 Subject: [PATCH 50/91] Translated using Weblate (Korean) Currently translated at 77.7% (927 of 1192 strings) Co-authored-by: Kang Dongheon Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ko-KR.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index dafaf13d..d45aafc4 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -781,7 +781,7 @@ "Monitor Setting": "{0}의 모니터 설정", "now": "지금", "time ago": "{0} 전", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "연결하려는 서버의 호스트 이름을 입력하거나, {local_mta}를 사용하려는 경우 {localhost}를 입력합니다.", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "연결하려는 서버의 호스트 이름을 입력하거나, {local_mta}를 사용하려는 경우 {localhost}를 입력합니다", "-year": "년", "Json Query Expression": "Json 쿼리 표현식", "Host URL": "호스트 URL", @@ -960,5 +960,6 @@ "SNMP Version": "SNMP 버전", "Originator": "발신자", "cellsyntOriginator": "수신자의 휴대폰에 메시지 발신자로 표시됩니다. 허용되는 값과 기능은 originatortype 매개변수에 따라 다릅니다.", - "Message Template": "메세지 템플릿" + "Message Template": "메세지 템플릿", + "descriptionHelpText": "내부 대시보드에 표시됩니다. 마크다운 사용이 허용되며, 표시 전에 정제 처리됩니다(공백과 들여쓰기 유지)." } From 71f936d3fe67b9c26655bb702d0b4ba18e4c57a8 Mon Sep 17 00:00:00 2001 From: Ekaterine Papava Date: Thu, 11 Dec 2025 02:44:28 +0000 Subject: [PATCH 51/91] Translated using Weblate (Georgian) Currently translated at 24.8% (306 of 1232 strings) Translated using Weblate (Georgian) Currently translated at 22.8% (272 of 1192 strings) Translated using Weblate (Georgian) Currently translated at 21.4% (256 of 1192 strings) Translated using Weblate (Georgian) Currently translated at 10.2% (122 of 1192 strings) Translated using Weblate (Georgian) Currently translated at 10.2% (122 of 1192 strings) Co-authored-by: Ekaterine Papava Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ka/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ka.json | 311 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 270 insertions(+), 41 deletions(-) diff --git a/src/lang/ka.json b/src/lang/ka.json index 1eeb1815..cbd173be 100644 --- a/src/lang/ka.json +++ b/src/lang/ka.json @@ -3,34 +3,34 @@ "Help": "დახმარება", "New Update": "ახალი განახლება", "Language": "ენა", - "Appearance": "ვიზუალი", - "Theme": "სტილი", + "Appearance": "გარეგნობა", + "Theme": "თემა", "Game": "თამაში", "Version": "ვერსია", - "Quick Stats": "მოკლე სტატისტიკა", - "Up": "მაღლა", - "Pending": "მოლოდინი", + "Quick Stats": "სწრაფი სტატისტიკა", + "Up": "ჩართ", + "Pending": "რიგშია", "languageName": "ქართული", - "Settings": "პარამეტრები", - "General": "ძირითადი", - "Check Update On GitHub": "GitHub ზე განახლების შემოწმება", + "Settings": "მორგება", + "General": "ზოგადი", + "Check Update On GitHub": "განახლების შემოწმება GitHub-ზე", "List": "სია", "Add": "დამატება", "Add New Monitor": "ახალი მონიტორის დამატება", - "Down": "დაბლა", + "Down": "გამორთ", "setupDatabaseChooseDatabase": "რომელი მონაცემთა ბაზის გამოყენება გსურთ?", "here": "აქ", - "Required": "აუცილებელი", + "Required": "აუცილებელია", "high": "მაღალი", - "greater than": "მეტი", + "greater than": "მეტი, ვიდრე", "less than or equal to": "ნაკლები ან ტოლი", "greater than or equal to": "მეტი ან ტოლი", "record": "ჩანაწერი", - "Notification Channel": "შეტყობინებების არხი", + "Notification Channel": "გაფრთხილების არხი", "Sound": "ხმა", - "less than": "ნაკლები", + "less than": "ნაკლები, ვიდრე", "-hour": "-საათი", - "Friendly Name": "სახელი", + "Friendly Name": "მეგობრული სახელი", "hour": "საათი", "-year": "-წელი", "Response": "პასუხი", @@ -39,41 +39,270 @@ "Keyword": "საკვანძო სიტყვა", "Unknown": "უცნობი", "dbName": "მონაცემთა ბაზის სახელი", - "Home": "მთავარი", - "Setup Notification": "შეტყობინების გამართვა", - "Notification Type": "შეტყობინების ტიპი", - "Schedule maintenance": "ტექნიკური მომსახურების დაგეგმვა", - "Notifications": "შეტყობინებები", + "Home": "საწყისი", + "Setup Notification": "შეტყობინების მორგება", + "Notification Type": "გაფრთხილების ტიპი", + "Schedule maintenance": "რემონტის დაგეგმვა", + "Notifications": "გაფრთხილებები", "Search Engine Visibility": "საძიებო სისტემებში ხილვადობა", - "Discourage search engines from indexing site": "საძიებო სისტემებისთვის საიტის ინდექსირების აკრძალვა", + "Discourage search engines from indexing site": "საძიებო სისტემებისთვის საიტის დაინდექსების აკრძალვა", "Entry Page": "საწყისი გვერდი", "Monitor History": "მონიტორის ისტორია", - "telegramSendSilentlyDescription": "შეტყობინებას ჩუმად აგზავნის. მომხმარებლი შეტყობინებას ხმის გარეშე მიიღებს.", - "telegramProtectContentDescription": "ჩართვის შემთხვევაში, Telegram-ში ბოტის შეტყობინებები დაცული იქნება გადამისამართებისა და შენახვისგან.", - "Body Encoding": "ტანის ენკოდირება", - "Expires": "ვადა იწურება", - "Auto Get": "ავტომატური შევსება", - "Display Timezone": "საჩვენებელი დროის სარტყელი", + "telegramSendSilentlyDescription": "აგზავნის შეტყობინებას ჩუმად. მომხმარებელი შეტყობინებას ხმის გარეშე მიიღებს.", + "telegramProtectContentDescription": "თუ ჩართულია Telegram-ში ბოტის შეტყობინებები დაცული იქნება გადამისამართებისა და შენახვისაგან.", + "Body Encoding": "სხეულის კოდირება", + "Expires": "ვადა", + "Auto Get": "ავტომატური მიღება", + "Display Timezone": "დროის სარტყლის ჩვენება", "notificationRegional": "რეგიონალური", - "Clone Monitor": "მონიტორის კლონირება", - "Clone": "კლონირება", - "cloneOf": "დაკლონე {0}", - "API Keys": "API გასაღებები", - "Add API Key": "API გასაღების დამატება", + "Clone Monitor": "მონიტორის ასლის შექმნა", + "Clone": "ასლი", + "cloneOf": "{0}-ის ასლი", + "API Keys": "API-ის გასაღებები", + "Add API Key": "API-ის გასაღების დამატება", "supportTelegramChatID": "პირდაპირი ჩატის / ჯგუფის / არხის ჩატის ID-ის მხარდაჭერა", "Powered by": "მხარდაჭერილია", "Proxies": "პროქსიები", - "Reverse Proxy": "საპირისპირო პროქსი", + "Reverse Proxy": "უკუპროქსი", "Bot Token": "ბოტის ტოკენი", - "Chat ID": "ჩათის ID", - "telegramMessageThreadID": "(ნებაყოფლობითი) შეტყობინების ნაკადის ID", + "Chat ID": "ჩატის ID", + "telegramMessageThreadID": "(არასავალდებულო) შეტყობინების ნაკადის ID", "telegramProtectContent": "გადამისამართებისგან/შენახვისგან დაცვა", "Save": "შენახვა", - "setupDatabaseMariaDB": "გარე MariaDB მონაცემთა ბაზასთან დაკავშირება. საჭიროა შეავსო მონაცემთა ბაზასთან დასაკავშირებელი ინფორმაცია.", - "settingUpDatabaseMSG": "მიმდინარეობს მონაცემთა ბაზის დაყენება. შესაძლოა გარკვეული დრო დასჭირდეს, გთხოვთ, მოთმინება გამოიჩინოთ.", - "Cannot connect to the socket server": "socket სერვერთან დაკავშირება შეუძლებელია", - "Reconnecting...": "მიმდინარეობს დაკავშირება...", - "Primary Base URL": "ძირითადი ძირი URL", - "Maintenance": "მოვლა", - "statusMaintenance": "მუშავდება" + "setupDatabaseMariaDB": "გარე MariaDB მონაცემთა ბაზასთან კავშირი. საჭიროა მონაცემთა ბაზასთან დასაკავშირებელი ინფორმაციის შევსება.", + "settingUpDatabaseMSG": "მიმდინარეობს მონაცემთა ბაზის მორგება. ამას, შეიძლება, გარკვეული დრო დასჭირდეს. გამოიჩინეთ მოთმინება.", + "Cannot connect to the socket server": "სოკეტის სერვერთან დაკავშირება შეუძლებელია", + "Reconnecting...": "თავიდან დაკავშირება...", + "Primary Base URL": "ძირითადი საბაზისო URL", + "Maintenance": "რემონტი", + "statusMaintenance": "რემონტი", + "Auto": "ავტო", + "None": "არცერთი", + "Timezone": "დროის სარტყელი", + "Leave": "გასვლა", + "Confirm": "დადასტურება", + "Yes": "დიახ", + "No": "არა", + "Password": "პაროლი", + "Email": "ელფოსტა", + "Test": "ტესტი", + "Export": "გატანა", + "Import": "შემოტანა", + "Create": "შექმნა", + "Events": "მოვლენები", + "Heartbeats": "გულისცემები", + "Options": "მორგება", + "Token": "ტოკენი", + "Tags": "ჭდეები", + "color": "ფერი", + "Light": "ღია", + "Dark": "მუქი", + "Normal": "ნორმალური", + "Bottom": "ქვედა", + "Username": "მომხმარებლის სახელი", + "notAvailableShort": "N/A", + "Active": "აქტიური", + "Inactive": "არააქტიური", + "Status": "სტატუსი", + "DateTime": "დრო და თარიღი", + "Message": "შეტყობინება", + "-day": "-დღე", + "Advanced": "დამატებით", + "Overwrite": "თავზე გადაწერა", + "pauseDashboardHome": "პაუზა", + "Pause": "პაუზა", + "Name": "სახელი", + "Resume": "გაგრძელება", + "Edit": "ჩასწორება", + "Delete": "წაშლა", + "Current": "მიმდინარე", + "Uptime": "ჩართულობის დრო", + "URL": "URL", + "Hostname": "ჰოსტის სახელი", + "Port": "პორტი", + "Retries": "თავიდან ცდები", + "Green": "მწვანე", + "Blue": "ლურჯი", + "Indigo": "ინდიგო", + "Purple": "იისფერი", + "Custom": "მომხმარებლის", + "topic": "თემა", + "Done": "მზადაა", + "Info": "ინფორმაცია", + "Security": "უსაფრთხოება", + "Title": "სათაური", + "Content": "შემცველობა", + "Style": "სტილი", + "info": "ინფორმაცია", + "warning": "გაფრთხილება", + "error": "შეცდომა", + "critical": "კრიტიკული", + "primary": "ძირითადი", + "light": "ღია", + "dark": "მუქი", + "Post": "დაპოსტვა", + "Created": "შექმნილია", + "Description": "აღწერა", + "Domain": "დომენი", + "Optional": "არასავალდებულო", + "Recipients": "მიმღებები", + "pushoversounds intermission": "დროებით შესვენება", + "Proxy": "პროქსი", + "Search...": "ძებნა…", + "pushoversounds classical": "კლასიკური", + "pushoversounds cosmic": "კოსმოსური", + "pushoversounds falling": "ვარდება", + "pushoversounds gamelan": "გამელანი", + "pushoversounds incoming": "შემომავალი", + "pushoversounds magic": "მაგია", + "pushoversounds mechanical": "მექანიკური", + "pushoversounds siren": "სირენა", + "Strategy": "სტრატეგია", + "Economy": "ეკონომია", + "WebHookUrl": "WebHookUrl", + "SecretKey": "საიდუმლოგასაღები", + "Retry": "თავიდან ცდა", + "Platform": "პლატფორმა", + "Huawei": "Huawei", + "High": "მაღალი", + "Topic": "თემა", + "onebotGroupMessage": "ჯგუფი", + "onebotPrivateMessage": "პირადი", + "Continue": "გაგრძელება", + "apiKey-expired": "ვადაამოწურულია", + "apiKey-inactive": "არააქტიური", + "Generate": "გენერაცია", + "pagertreeUrgency": "სასწრაფოობა", + "pagertreeSilent": "ჩუმი", + "pagertreeLow": "დაბალი", + "pagertreeMedium": "საშუალო", + "pagertreeHigh": "მაღალი", + "pagertreeCritical": "კრიტიკული", + "lunaseaTarget": "სამიზნე", + "endpoint": "ბოლოწერტილი", + "Number": "ნომერი", + "SignName": "ხელმოწერისსახელი", + "TemplateCode": "შაბლონისკოდი", + "maintenanceStatus-scheduled": "დაგეგმილი", + "maintenanceStatus-ended": "დასრულდა", + "maintenanceStatus-unknown": "უცნობი", + "statusPageMaintenanceEndDate": "დასრულება", + "maintenanceStatus-inactive": "არააქტიური", + "Priority": "პრიორიტეტი", + "Method": "მეთოდი", + "Headers": "თავსართები", + "Body": "სხეული", + "records": "ჩანაწერი", + "recent": "უახლესი", + "Default": "ნაგულისხმევი", + "danger": "საშიშროება", + "Fingerprint:": "ანაბეჭდი:", + "weekdayShortThu": "ხუთშ", + "smtpCC": "CC", + "documentation": "დოკუმენტაცია", + "Services": "სერვისები", + "Discard": "მოცილება", + "Cancel": "გაუქმება", + "Valid": "სწორია", + "Invalid": "არასწორია", + "User": "მომხმარებელი", + "Installed": "დაყენებულია", + "Running": "გაშვებულია", + "Start": "გაშვება", + "Stop": "გაჩერება", + "Slug": "Slug", + "Next": "შემდეგი", + "Authentication": "ავთენტიკაცია", + "Backup": "მარქაფი", + "About": "შესახებ", + "Message:": "შეტყობინება:", + "Subject:": "თემა:", + "Issuer:": "გამომცემელი:", + "socket": "სოკეტი", + "Workstation": "სამუშაო სადგური", + "Examples": "მაგალითები", + "recurringInterval": "ინტერვალი", + "Recurring": "გამეორებადი", + "weekdayShortMon": "ორშ", + "weekdayShortTue": "სამშ", + "weekdayShortWed": "ოთხშ", + "weekdayShortFri": "პარ", + "weekdayShortSat": "შაბ", + "weekdayShortSun": "კვი", + "Enable": "ჩართვა", + "Disable": "გამორთვა", + "cronSchedule": "გეგმა: ", + "alertaEnvironment": "გარემო", + "apiKey-active": "აქტიური", + "Customize": "მორგება", + "default": "ნაგულისხმევი", + "enabled": "ჩართულია", + "uninstall": "წაშლა", + "uninstalling": "იშლება", + "or": "ან", + "smtpBCC": "BCC", + "install": "დაყენება", + "installing": "მიმდინარეობს დაყენება", + "pushoversounds bike": "მოტოციკლეტი", + "Lowcost": "იაფი", + "SendKey": "გაგზავნის გასაღები", + "PhoneNumbers": "ტელეფონისნომრები", + "pushoversounds bugle": "ბუკი", + "Device": "მოწყობილობა", + "Expiry": "ვადა", + "Query": "მოთხოვნა", + "Gray": "ნაცრისფერი", + "Red": "წითელი", + "Orange": "ნარინჯისფერი", + "Pink": "ვარდისფერი", + "filterActive": "აქტიური", + "filterActivePaused": "შეჩერებული", + "Mentioning": "ხსენება", + "Originator": "წყარო", + "Destination": "სამიზნე", + "Close": "დახურვა", + "Group": "ჯგუფი", + "Mechanism": "მექანიზმი", + "FlashDuty Severity": "სიმძიმე", + "threemaRecipientTypeIdentity": "Threema-ID", + "Command": "ბრძანება", + "threemaRecipient": "მიმღები", + "Saved.": "შენახულია.", + "Select": "არჩევა", + "Check/Uncheck": "მონიშვნა/მოხსნა", + "pushOthers": "სხვები", + "and": "და", + "Money": "ფული", + "Scifi": "სამეცნიერო ფანტასტიკა", + "Path": "ბილიკი", + "Condition": "პირობა", + "threemaSenderIdentity": "ნაგულისხმევი რაუტერის-ID", + "Conditions": "პირობები", + "conditionValuePlaceholder": "მნიშვნელობა", + "Pop": "პოპი", + "wahaSession": "სესია", + "brevoSubject": "თემა", + "pause": "შეჩერება", + "Manual": "ხელით", + "equals": "უდრის", + "Correct": "გასწორება", + "Harp": "არფა", + "Reveal": "გამოჩენა", + "Flute": "ფლეიტა", + "Fail": "ჩავარდნა", + "SIGNL4": "SIGNL4", + "From": "საიდან", + "contains": "შეიცავს", + "Arcade": "არკადა", + "Doorbell": "კარის ზარი", + "Clear": "გასუფთავება", + "Elevator": "ლიფტი", + "Guitar": "გიტარა", + "templateStatus": "სტატუსი", + "Bubble": "ბუშტი", + "now": "ახლა", + "resendDisabled": "თავიდან გაგზავნა გამორთულია", + "Cert Exp.": "სერტ. ვადა.", + "Max. Redirects": "მაქს. გადამისამართებები", + "Heartbeat Interval": "გულისცემის შუალედი" } From 1bbd1a2dc432bc59a9262730e7ad9c1aef6866f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=BCleyman=20=C3=9Cnl=C3=BC?= Date: Thu, 11 Dec 2025 02:44:28 +0000 Subject: [PATCH 52/91] Translated using Weblate (Turkish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (1198 of 1198 strings) Co-authored-by: Süleyman Ünlü Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/tr-TR.json | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index d36e5110..31edeab3 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -19,7 +19,7 @@ "resolverserverDescription": "Cloudflare varsayılan sunucudur, çözümleyici sunucusunu istediğiniz zaman değiştirebilirsiniz.", "rrtypeDescription": "İzlemek istediğiniz servisin RR-Tipini seçin", "pauseMonitorMsg": "Durdurmak istediğinden emin misin?", - "enableDefaultNotificationDescription": "Bu bildirim, yeni monitörler için varsayılan olarak etkinleştirilir. Yine de her monitör için ayrı ayrı devre dışı bırakabilirsiniz.", + "enableDefaultNotificationDescription": "Bu bildirim, yeni eklenen izleyiciler için varsayılan olarak etkin olacaktır. Yine de her izleyici için bildirimi ayrı ayrı devre dışı bırakabilirsiniz.", "clearEventsMsg": "Bu servisin bütün kayıtlarını silmek istediğinden emin misin?", "clearHeartbeatsMsg": "Bu servis için tüm sağlık durumunu silmek istediğinden emin misin?", "confirmClearStatisticsMsg": "Tüm istatistikleri silmek istediğinden emin misin?", @@ -289,7 +289,7 @@ "promosmsTypeSpeed": "SMS HIZI - Sistemde en yüksek öncelik. Çok hızlı ve güvenilir ancak maliyetli (SMS FULL fiyatının yaklaşık iki katı).", "promosmsPhoneNumber": "Telefon numarası (Polonyalı alıcı için Alan kodlarını atlayabilirsiniz)", "promosmsSMSSender": "SMS Gönderici Adı : Ön kayıtlı ad veya varsayılanlardan biri: InfoSMS, SMS Info, MaxSMS, INFO, SMS", - "Feishu WebHookUrl": "Feishu WebHookURL", + "Feishu WebHookUrl": "Feishu Webhook URL’si", "matrixHomeserverURL": "Homeserver URL (http(s):// ve isteğe bağlı olarak bağlantı noktası ile)", "Internal Room Id": "Dahili Oda Kimliği", "matrixDesc1": "Internal Room ID'sini, Matrix istemcinizdeki oda ayarlarının gelişmiş bölümüne bakarak bulabilirsiniz. !QMdRCpUIfLwsfjxye6:home.server gibi görünmelidir.", @@ -404,7 +404,7 @@ "Bark Endpoint": "Bark Uç Noktası", "Bark Group": "Bark Grubu", "Bark Sound": "Havlama Sesi", - "WebHookUrl": "WebHookUrl", + "WebHookUrl": "Webhook URL’si", "SecretKey": "GizliAnahtar", "For safety, must use secret key": "Güvenlik için gizli anahtar kullanılmalıdır", "Device Token": "Cihaz Tokeni", @@ -506,7 +506,7 @@ "pushoversounds magic": "Büyü", "pushoversounds mechanical": "Mekanik", "pushoversounds pianobar": "Piano", - "pushoversounds siren": "Siren", + "pushoversounds siren": "Uyarı Sesi", "pushoversounds spacealarm": "Uzay Alarmı", "pushoversounds tugboat": "Römorkör", "pushoversounds alien": "Uzaylı Alarmı (uzun)", @@ -606,7 +606,7 @@ "smseaglePriority": "Mesaj önceliği (0-9, en yüksek öncelik = 9)", "Optional": "İsteğe bağlı", "squadcast": "Squadcast", - "SendKey": "SendKey", + "SendKey": "Gönderim Anahtarı", "SMSManager API Docs": "SMSManager API Dökümanları ", "Gateway Type": "Ağ Geçidi Türü", "SMSManager": "SMSManager", @@ -1069,7 +1069,7 @@ "Arcade": "Çarşı", "Correct": "Doğru", "Fail": "Hata", - "Harp": "Harp", + "Harp": "Arp", "Reveal": "Ortaya çıkarmak", "Bubble": "Kabarcık", "Doorbell": "Kapı zili", @@ -1240,5 +1240,11 @@ "ariaResumeMaintenance": "Bu bakım programını devam ettir", "ariaCloneMaintenance": "Bu bakım programının bir kopyasını oluşturun", "ariaEditMaintenance": "Bu bakım programını düzenle", - "ariaDeleteMaintenance": "Bu bakım programını sil" + "ariaDeleteMaintenance": "Bu bakım programını sil", + "Browser not supported": "Tarayıcı desteklenmiyor", + "Notifications Enabled": "Bildirimler Etkinleştirildi", + "Allow Notifications": "Bildirimlere İzin Ver", + "Unable to get permission to notify": "Bildirim izni alınamadı (talep reddedildi veya yok sayıldı).", + "Webpush Helptext": "Web push yalnızca SSL (HTTPS) bağlantılarıyla çalışır. iOS cihazlarda, web sayfasının önceden ana ekrana eklenmesi gerekir.", + "showOnlyLastHeartbeat": "Yalnızca Son Ping’i Göster" } From 4fcb44d9eb656958739cb14ca2416202d87f45e4 Mon Sep 17 00:00:00 2001 From: DJEDIVER Date: Thu, 11 Dec 2025 02:44:28 +0000 Subject: [PATCH 53/91] Translated using Weblate (Russian) Currently translated at 100.0% (1232 of 1232 strings) Co-authored-by: DJEDIVER Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 8edbda08..a1ea809a 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -43,7 +43,7 @@ "Delete": "Удалить", "Current": "Текущий", "Uptime": "Время безотказной работы", - "Cert Exp.": "Окончание сертификата", + "Cert Exp.": "Окончание сертификата.", "day": "день | дней", "-day": "-дней", "hour": "час", @@ -1249,5 +1249,44 @@ "twilioMessagingServiceSID": "SID службы обмена сообщениями (необязательно)", "twilioApiKeyHelptext": "Ключ API является необязательным, но рекомендуется. Вы можете указать либо Account SID и authToken со странице TwilioConsole, либо Account SID и пару из ключа API и секретного ключа API", "twilloMessagingServiceSIDHelptext": "Введите здесь свой SID службы обмена сообщениями, если вы используете {twillo_messaging_service_help_link} для управления отправителями и функциями", - "showOnlyLastHeartbeat": "Показывать только последнюю проверку" + "showOnlyLastHeartbeat": "Показывать только последнюю проверку", + "Binary Floor Control Protocol": "WebSocket Transport для BFCP (Протокол управления на двоичном уровне)", + "Swindon Web Server Protocol": "Протокол веб-сервера Swindon (кодирование JSON)", + "Softvelum WebSocket signaling protocol": "Протокол сигнализации Softvelum WebSocket", + "BACnet Secure Connect Hub Connection": "Подключение BACnet Secure Connect Hub", + "Done.best IoT Protocol": "Протокол Интернета вещей Done.best", + "Binary IRC Protocol": "Двоичный протокол IRC", + "Browser not supported": "Браузер не поддерживается", + "Unable to get permission to notify": "Не удалось получить разрешение на уведомление (запрос отклонен или проигнорирован).", + "Webpush Helptext": "Функция Web Push работает только при использовании SSL-подключений (HTTPS). Для устройств iOS веб-страницу необходимо предварительно добавить на главный экран.", + "Notifications Enabled": "Уведомления Включены", + "Allow Notifications": "Разрешить Уведомления", + "ignoreSecWebsocketAcceptHeaderDescription": "Позволяет серверу не отвечать заголовком Sec-WebSocket-Accept, если обновление веб-сокета прошло успешно.", + "Ignore Sec-WebSocket-Accept header": "Игнорировать {0} заголовок", + "wsSubprotocolDescription": "Более подробную информацию о подпротоколах см. в {documentation}", + "WebSocket Application Messaging Protocol": "WAMP (протокол обмена сообщениями приложений WebSocket)", + "Session Initiation Protocol": "WebSocket Transport для SIP (протокол инициирования сеанса)", + "Network API for Notification Channel": "API OMA RESTful Network для канала уведомлений", + "Web Process Control Protocol": "Протокол управления веб-процессами (WPCP)", + "Advanced Message Queuing Protocol": "Расширенный протокол очереди сообщений (AMQP) 1.0+", + "jsflow": "Протокол pubsub/queue jsFlow", + "Reverse Web Process Control": "Протокол обратного управления веб-процессами (RWPCP)", + "Extensible Messaging and Presence Protocol": "WebSocket Transport для расширяемого протокола обмена сообщениями и присутствия (XMPP)", + "Smart Home IP": "SHIP - IP Умный дом", + "Miele Cloud Connect Protocol": "Протокол Miele Cloud Connect", + "Push Channel Protocol": "Протокол Push-канала", + "Message Session Relay Protocol": "WebSocket Transport для MSRP (протокол ретрансляции сеансов сообщений)", + "Softvelum Low Delay Protocol": "Протокол Softvelum с низкой задержкой", + "OPC UA Connection Protocol": "Протокол соединения OPC UA", + "OPC UA JSON Encoding": "Кодирование OPC UA JSON", + "Broadband Forum User Services Platform": "USP (платформа услуг для пользователей широкополосного форума)", + "Constrained Application Protocol": "Протокол ограниченных приложений (CoAP)", + "Cobra Real Time Messaging Protocol": "Протокол обмена сообщениями в реальном времени Cobra", + "Declarative Resource Protocol": "Протокол декларативных ресурсов", + "BACnet Secure Connect Direct Connection": "Прямое подключение BACnet Secure Connect Hub", + "WebSocket Transport for JMAP": "WebSocket Transport для JMAP (протокол метаприложений JSON)", + "ITU-T T.140 Real-Time Text": "Текст в реальном времени ITU-T T.140", + "Collection Update": "Подпротокол Websocket обновления коллекции", + "Text IRC Protocol": "Текстовый протокол IRC", + "Penguin Statistics Live Protocol v3": "Протокол Penguin Statistics Live v3 (кодирование Protobuf)" } From ea5a8fd9527f7a5077b82ccd9d5b7f98b463daf1 Mon Sep 17 00:00:00 2001 From: Virenbar Date: Thu, 11 Dec 2025 02:44:28 +0000 Subject: [PATCH 54/91] Translated using Weblate (Russian) Currently translated at 100.0% (1233 of 1233 strings) Co-authored-by: Virenbar Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index a1ea809a..631c0ce0 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -1288,5 +1288,6 @@ "ITU-T T.140 Real-Time Text": "Текст в реальном времени ITU-T T.140", "Collection Update": "Подпротокол Websocket обновления коллекции", "Text IRC Protocol": "Текстовый протокол IRC", - "Penguin Statistics Live Protocol v3": "Протокол Penguin Statistics Live v3 (кодирование Protobuf)" + "Penguin Statistics Live Protocol v3": "Протокол Penguin Statistics Live v3 (кодирование Protobuf)", + "certHostnameMismatch": "Имя хоста сертификата не соответствует URL-адресу монитора." } From e2a157f3111b8cd613b0f96cf04729960d860b50 Mon Sep 17 00:00:00 2001 From: Gunnar Norin Date: Thu, 11 Dec 2025 02:44:28 +0000 Subject: [PATCH 55/91] Translated using Weblate (Swedish) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (Swedish) Currently translated at 95.0% (1172 of 1233 strings) Co-authored-by: Gunnar Norin Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sv/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/sv-SE.json | 262 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 255 insertions(+), 7 deletions(-) diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json index f5498dbc..bc44d90a 100644 --- a/src/lang/sv-SE.json +++ b/src/lang/sv-SE.json @@ -43,7 +43,7 @@ "Delete": "Ta bort", "Current": "Nuvarande", "Uptime": "Drifttid", - "Cert Exp.": "Certifikat utlöper", + "Cert Exp.": "Certifikat utlöper.", "day": "dag | dagar", "-day": "-dag", "hour": "timme", @@ -383,7 +383,7 @@ "invalidCronExpression": "Ogiltigt cronuttryck: {0}", "backupRecommend": "Vänligen säkerhetskopiera volymen eller mappen (./data/) direkt istället.", "disableCloudflaredNoAuthMsg": "Du är i Auth-läge, ett lösenord krävs inte.", - "setupDatabaseEmbeddedMariaDB": "Du behöver inte ställa in någonting. Denna dockeravbild har inbyggd och konfigurerade MariaDB automatiskt. Uptime Kuma kommer att ansluta till databasen via en unixsocket.", + "setupDatabaseEmbeddedMariaDB": "Du behöver inte ställa in någonting. Denna dockeravbild har inbyggd och konfigurerade MariaDB automatiskt. Uptime Kuma kommer att ansluta till databasen via en Unixsocket.", "setupDatabaseMariaDB": "Anslut till en extern MariaDB databas. Du måste ange anslutningsinformation till databasen.", "setupDatabaseSQLite": "En enkel databasfil, rekommenderas för småskaliga installationer. Före v2.0.0, använde Uptime Kuma SQLite som standarddatabas.", "Reset Token": "Återställ token", @@ -736,8 +736,8 @@ "Recipient Number": "Mottagarens nummer", "From Name/Number": "Från namn/nummer", "Leave blank to use a shared sender number.": "Lämna tomt för att använda ett delat avsändarnummer.", - "smseagleEncoding": "Skicka som unicode", - "smseaglePriority": "Meddelandeprioritet (0-9, standard = 0)", + "smseagleEncoding": "Skicka som unicode (standard=GSM-7)", + "smseaglePriority": "Meddelandeprioritet (0-9, högsta prioritet= 9)", "onebotGroupMessage": "Grupp", "onebotPrivateMessage": "Privat", "onebotUserOrGroupId": "Grupp/användar-ID", @@ -746,7 +746,7 @@ "Google Analytics ID": "Google Analytics-ID", "Edit Tag": "Redigera tagg", "Server Address": "Serveradress", - "wayToGetClickSendSMSToken": "Du kan hitta API-användarnamn och API-nyckel från {0} .", + "wayToGetClickSendSMSToken": "Du kan hitta API-användarnamn och API-nyckel från {här} .", "pagertreeDoNothing": "Gör ingenting", "lunaseaTarget": "Mål", "lunaseaDeviceID": "Enhetsid", @@ -859,7 +859,7 @@ "Badge Suffix": "Brickvärdesuffix", "Badge Color": "Brickfärg", "monitorToastMessagesLabel": "Övervakar-toastnotifiering", - "wayToGetFlashDutyKey": "Du kan gå till Kanal -> (Välj en kanal) -> Integrationer -> Lägg till ny integrationssidan, lägg till en 'Uptime Kuma' för att få en pushadress, kopiera integrationsnyckeln i adressen. För mer information, besök", + "wayToGetFlashDutyKey": "För att integrera Uptime Kuma med Flashduty: Gå till kanaler > Välj en kanal > Integrationer > Lägg till ny integration, välj Uptime Kuma och kopiera pushadressen.", "gamedigGuessPortDescription": "Porten som används av Valve-serverns förfrågningsprotokol kan vara annorlunda från klientporten. Prova detta om övervakaren inte kan kontakta din server.", "monitorToastMessagesDescription": "Toastnotifieringar för övervakare försvinner efter angiven tid i sekunder. Ange -1 för att inaktivera timeout. Ange 0 för att inkaktivera toastnotifieringar.", "Mechanism": "Mekanism", @@ -998,5 +998,253 @@ "templateStatus": "status", "defaultFriendlyName": "Ny övervakare", "Add Tags": "Lägg till taggar", - "tagAlreadyOnMonitor": "Denna tagg (namn och värde) finns redan på övervakaren eller är köad för tillägg." + "tagAlreadyOnMonitor": "Denna tagg (namn och värde) finns redan på övervakaren eller är köad för tillägg.", + "conditionAdd": "Lägg till villkor", + "not ends with": "slutar inte med", + "greater than or equal to": "större än eller lika med", + "record": "registrera", + "contains": "Innehåller", + "Separate multiple email addresses with commas": "Separera flera e-postadresser med kommatecken", + "SpugPush Template Code": "Mallkod", + "smseagleGroupV2": "Telefonboksgrupp-ID(n)", + "telegramUseTemplate": "Använd anpassad meddelandemall", + "brevoLeaveBlankForDefaultName": "lämna tomt för standardnamn", + "Session Initiation Protocol": "WebSocket-transport för SIP (Session Initiation Protocol)", + "RabbitMQ Nodes": "RabbitMQ-hanteringsnoder", + "pingPerRequestTimeoutLabel": "Per-Ping timeout", + "Ip Family": "IP-familj", + "Manual": "Manuell", + "Notifications Enabled": "Notifieringar aktiva", + "Allow Notifications": "Tillåt notifieringar", + "Browser not supported": "Webbläsare stöds inte", + "Maximum Retries": "Maximalt antal omförsök", + "auto-select": "Välj automatiskt", + "Correct": "Korrekt", + "Font Twemoji by Twitter licensed under": "Font Twemoji av Twitter licensierad under", + "Phone numbers": "Telefonnummer", + "Sender name": "Avsändarnamn", + "the smsplanet documentation": "smsplanet-dokumentationen", + "smsplanetApiToken": "Token för SMSPlanet API:et", + "Template ID": "Mall-ID", + "Recipient Numbers": "Mottagarantal", + "brevoApiKey": "Brevo API-nyckel", + "YZJ Webhook URL": "YZJ-Webhook-URL", + "YZJ Robot Token": "YZJ Robot-token", + "HTTP Method": "HTTP-metod", + "cacheBusterParamDescription": "Slumpmässigt genererad parameter för att skippa caches.", + "OAuth Scope": "OAuth omfattning", + "OAuth Audience": "OAuth-publik", + "OAuth Token URL": "OAuth-token-URL", + "Fail": "Fel", + "Harp": "Harp", + "Bubble": "Bubbla", + "Doorbell": "Dörrklocka", + "brevoFromEmail": "Från epost", + "rabbitmqNodesRequired": "Vänligen ange noderna för den här monitorn.", + "Guitar": "Gitarr", + "Use HTML for custom E-mail body": "Använd HTML för anpassad e-posttext", + "RabbitMQ Username": "RabbitMQ Användarnamn", + "brevoToEmail": "Till epost", + "SendGrid API Key": "SendGrid API-nyckel", + "OneChatAccessToken": "OneChat-åtkomsttoken", + "Clear All Events": "Rensa alla händelser", + "OneChatBotId": "OneChat bott-ID", + "Ignore Sec-WebSocket-Accept header": "Ignorera {0} header", + "jsflow": "jsFlow pubsub/queue-protokoll", + "Push Channel Protocol": "Push Channel Protokoll", + "Declarative Resource Protocol": "Deklarativt resursprotokoll", + "Miele Cloud Connect Protocol": "Miele Cloud Connect-protokoll", + "Softvelum Low Delay Protocol": "Softvelum-protokoll med låg fördröjning", + "OPC UA Connection Protocol": "OPC UA-anslutningsprotokoll", + "OPC UA JSON Encoding": "OPC UA JSON-kodning", + "Constrained Application Protocol": "Begränsat applikationsprotokoll (CoAP)", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket-signalprotokoll", + "Web Process Control Protocol": "Web Process Control Protocol (WPCP)", + "Smart Home IP": "SHIP - Smart Home IP", + "Cobra Real Time Messaging Protocol": "Cobra realtidsmeddelandeprotokoll", + "BACnet Secure Connect Hub Connection": "BACnet Secure Connect Hub-anslutning", + "WebSocket Application Messaging Protocol": "WAMP (The WebSocket Application Messaging Protocol)", + "Advanced Message Queuing Protocol": "Advanced Message Queuing Protocol (AMQP) 1.0+", + "Reverse Web Process Control": "Reverse Web Process Control Protocol (RWPCP)", + "Swindon Web Server Protocol": "Swindon Web Server Protocol (JSON encoding)", + "Broadband Forum User Services Platform": "USP (Broadband Forum User Services Platform)", + "BACnet Secure Connect Direct Connection": "BACnet Secure Connect Direktanslutning", + "ITU-T T.140 Real-Time Text": "ITU-T T.140 realtidstext", + "Done.best IoT Protocol": "Done.best IoT-protokoll", + "Text IRC Protocol": "Text IRC-protokoll", + "Binary IRC Protocol": "Binärt IRC-protokoll", + "Collection Update": "Samlingsuppdateringen av Websocket-underprotokollet", + "smseagleMsgType": "Meddelandetyp", + "smseagleMsgRing": "Ringsamtal", + "smseagleMsgTts": "Text-till-tal samtal", + "smseagleMsgSms": "SMS-meddelande (standard)", + "smseagleMsgTtsAdvanced": "Text-till-tal avancerat samtal", + "smseagleDuration": "Varaktighet (i sekunder)", + "smseagleApiv2": "APIv2 (rekommenderas för nya integrationer)", + "smseagleDocs": "Kontrollera dokumentation eller APIv2-tillgänglighet: {0}", + "smseagleComma": "Flera måste separeras med kommatecken", + "Optional: Space separated list of scopes": "Valfritt: Mellanslagsavgränsad lista över omfång", + "Cannot connect to the socket server.": "Kan inte ansluta till socket-servern.", + "not starts with": "börjar inte med", + "Sound": "Ljud", + "greater than": "större än", + "Alphanumerical string and hyphens only": "Endast alfanumeriska strängar och bindestreck", + "Arcade": "Arkad", + "Flute": "Flöjt", + "Clear": "Rensa", + "Money": "Pengar", + "Scifi": "Scifi", + "pingCountDescription": "Antal paket att skicka innan stopp", + "mqttWebSocketPath": "MQTT WebSocket-sökväg", + "mqttWebsocketPathInvalid": "Använd ett giltigt WebSocket-sökvägsformat", + "wayToGetBaleToken": "Du kan få en token från {0}.", + "smseagleApiType": "API-version", + "RabbitMQ Password": "RabbitMQ Lösenord", + "telegramServerUrl": "(Valfritt) Server-URL", + "twilioMessagingServiceSID": "Meddelandetjänstens SID (valfritt)", + "showOnlyLastHeartbeat": "Visa endast senaste hjärtslag", + "pingNumericLabel": "Numerisk utdata", + "Events cleared successfully": "Händelser har rensats.", + "No monitors found": "Inga monitorer hittades.", + "Could not clear events": "Kunde inte rensa {failed}/{total} händelser", + "jsonQueryDescription": "Analysera och extrahera specifik data från serverns JSON-svar genom en JSON-fråga eller använd \"$\" för det råa svaret om du inte förväntas JSON. Resultatet jämförs sedan med det förväntade värdet som en sträng. Se {0} för dokumentation och använd {1} för att experimentera med frågor.", + "Template plain text instead of using cards": "Mall för vanlig text istället för att använda kort", + "Dingtalk Mobile List": "Mobillista", + "Mention Mobile List": "Nämn mobillista", + "Dingtalk User List": "Användar-ID lista", + "Invalid mobile": "Ogiltig mobil [{mobile}]", + "Invalid userId": "Ogiltigt användar-ID [{userId}]", + "Mention User List": "Nämn användar-ID-lista", + "Enter a list of userId": "Ange en lista med användar-ID:n", + "Enter a list of mobile": "Ange en lista över mobila enheter", + "smseagleContactV2": "Kontakt-ID i telefonboken", + "FlashDuty Push URL": "Push-URL", + "Send rich messages": "Skicka formaterade meddelanden", + "FlashDuty Push URL Placeholder": "Kopiera från sidan för aviseringsintegration", + "Lost connection to the socket server.": "Tappade anslutning till socket-servern.", + "signl4Docs": "Du hittar mer information om hur du konfigurerar SIGNL4 och hur du införskaffar SIGNL4 webhook URL i {0}.", + "Conditions": "Villkor", + "conditionDelete": "Ta bort villkor", + "conditionAddGroup": "Lägg till grupp", + "conditionDeleteGroup": "Ta bort grupp", + "conditionValuePlaceholder": "Värde", + "not contains": "innehåller inte", + "starts with": "börjar med", + "ends with": "slutar med", + "less than": "mindre än", + "From": "Från", + "SIGNL4": "SIGNL4", + "equals": "lika med", + "Elevator": "Hiss", + "not equals": "Inte lika med", + "evolutionInstanceName": "Instansnamn", + "brevoFromName": "Från namn", + "brevoCcEmail": "Kopia epost", + "brevoBccEmail": "Blind kopia epost", + "SIGNL4 Webhook URL": "SIGNL4 Webhook-URL", + "Can be found on:": "Finns på: {0}", + "brevoApiHelp": "Skapa en API-nyckel här: {0}", + "Add Another Tag": "Lägg till ytterligare en tagg", + "Clear Form": "Rensa formulär", + "pause": "Pausa", + "wahaSession": "Session", + "brevoSubject": "Ämne", + "Plain Text": "Ren text", + "Template Format": "Mallformat", + "pingCountLabel": "Max paket", + "pingGlobalTimeoutLabel": "Global timeout", + "Custom URL": "Egen URL", + "Nextcloud host": "Nextcloud-värd", + "Conversation token": "Konversationstoken", + "Bot secret": "Botthemlighet", + "Happy Eyeballs algorithm": "Happy Eyeballs algoritm", + "Send UP silently": "Skicka UPP tyst", + "wayToGetWahaApiUrl": "Din WAHA-instans-URL.", + "Disable URL in Notification": "Inaktivera URL i meddelande", + "Staged Tags for Batch Add": "Etappade taggar för batchtillägg", + "brevoLeaveBlankForDefaultSubject": "lämna tomt för standardämne", + "OneChatUserIdOrGroupId": "OneChat användar-ID eller grupp-ID", + "brevoSeparateMultipleEmails": "Separera flera e-postadresser med kommatecken", + "Send DOWN silently": "Skicka NER tyst", + "Reveal": "Visa", + "Clone Maintenance": "Klonunderhåll", + "ariaPauseMaintenance": "Pausa detta underhållsschema", + "ariaResumeMaintenance": "Återuppta detta underhållsschema", + "ariaEditMaintenance": "Redigera detta underhållsschema", + "ariaDeleteMaintenance": "Ta bort detta underhållsschema", + "ariaCloneMaintenance": "Skapa en kopia av detta underhållsschema", + "smseagleTtsModel": "Text-till-tal-modell-ID", + "smseagleApiv1": "APIv1 (för befintliga projekt och bakåtkompatibilitet)", + "ntfyPriorityDown": "Prioritet för NED-händelse", + "less than or equal to": "mindre än eller lika med", + "Notification Channel": "Notifieringskanal", + "Message Template": "Meddelandemall", + "wayToGetOnesenderUrlandToken": "Du får URL och Token genom att gå till Onesenders hemsida. Mer info {0}", + "Host Onesender": "Värd Onesender", + "Token Onesender": "Token Onesender", + "Form Data Body": "Formulärdatakropp", + "Pop": "Pop", + "Time Sensitive (iOS Only)": "Tidskänslig (endast iOS)", + "Custom sound to override default notification sound": "Anpassat ljud för att åsidosätta standardmeddelandeljudet", + "rabbitmqNodesDescription": "Ange URL:en för RabbitMQ-hanteringsnoderna inklusive protokoll och port. Exempel: {0}", + "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Antingen ett avsändar-ID för SMS eller ett telefonnummer i E.164-format om du vill kunna ta emot svar.", + "pingPerRequestTimeoutDescription": "Detta är den maximala väntetiden (i sekunder) innan ett enskilt pingpaket anses vara förlorat", + "WebSocket Transport for JMAP": "WebSocket-transport för JMAP (JSON Meta Application Protocol)", + "telegramUseTemplateDescription": "Om aktiverat skickas meddelandet med en anpassad mall.", + "pingGlobalTimeoutDescription": "Total tid i sekunder innan pingen slutar, oavsett skickade paket", + "descriptionHelpText": "Visas på den interna instrumentpanelen. Nedskrivning är tillåten och saneras (bevarar mellanslag och indrag) före visning.", + "aboutSlackUsername": "Ändrar visningsnamnet för meddelandets avsändare. Om du vill nämna någon, inkludera det i det vänliga namnet istället.", + "telegramServerUrlDescription": "För att häva Telegrams bot-API-begränsningar eller få åtkomst i blockerade områden (Kina, Iran, etc.). För mer information klicka på {0}. Standard: {1}", + "Number of retry attempts if webhook fails": "Antal återförsök (var 60–180:e sekund) om webhooken misslyckas.", + "smsplanetApiDocs": "Detaljerad information om hur man hämtar API-tokens finns i {the_smsplanet_documentation}.", + "wayToGetClickSMSIRTemplateID": "Din mall måste innehålla ett {uptkumaalert}-fält. Du kan skapa en ny mall {här}.", + "webhookGetMethodDesc": "GET skickar data som frågeparametrar och tillåter inte konfigurering av en brödtext. Användbart för att utlösa Uptime Kuma Push-monitorer.", + "webhookPostMethodDesc": "POST fungerar bra för de flesta moderna HTTP-servrar.", + "rabbitmqHelpText": "För att använda monitorn måste du aktivera Management Plugin i din RabbitMQ-installation. För mer information, vänligen se {rabitmq_documentation}.", + "deleteGroupMsg": "Är du säker på att du vill ta bort den här gruppen?", + "Network API for Notification Channel": "OMA RESTful Network API för aviseringskanal", + "Message Session Relay Protocol": "WebSocket-transport för MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "WebSocket-transport för BFCP (Binary Floor Control Protocol)", + "wsSubprotocolDescription": "För mer information om delprotokoll, vänligen se {dokumentationen}", + "Extensible Messaging and Presence Protocol": "WebSocket-transport för Extensible Messaging and Presence Protocol (XMPP)", + "ignoreSecWebsocketAcceptHeaderDescription": "Tillåter att servern inte svarar med Sec-WebSocket-Accept-headern om websocket-uppgraderingen lyckas.", + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protocol v3 (Protobuf-kodning)", + "mqttWebsocketPathExplanation": "WebSocket-sökväg för MQTT över WebSocket-anslutningar (t.ex. /mqtt)", + "shrinkDatabaseDescriptionSqlite": "Aktivera databasen {vacuum} för SQLite. {auto_vacuum} är redan aktiverat men detta defragmenterar inte databasen eller packar om enskilda databassidor på samma sätt som kommandot {vacuum} gör.", + "snmpOIDHelptext": "Ange OID för den sensor eller status du vill övervaka. Använd nätverkshanteringsverktyg som MIB-webbläsare eller SNMP-programvara om du är osäker på OID.", + "Optional: The audience to request the JWT for": "Valfritt: Målgruppen att begära JWT för", + "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Tidskänsliga aviseringar levereras omedelbart, även om enheten är i stör ej-läge.", + "supportBaleChatID": "Stöd för direktchatt / grupp / kanals chatt-ID", + "wayToGetBaleChatID": "Du kan få ditt chatt-ID genom att skicka ett meddelande till boten och gå till den här URL:en för att se chat_id:n:", + "clearAllEventsMsg": "Är du säker på att du vill radera alla händelser?", + "certHostnameMismatch": "Certifikatets värdnamn matchar inte övervakarens URL.", + "telegramTemplateFormatDescription": "Telegram tillåter användning av olika markupspråk för meddelanden, se Telegram {0} för specifika detaljer.", + "deleteChildrenMonitors": "Ta även bort de direkta underordnade övervakarna och dess underordnade om det finns några | Ta även bort alla {count} direkta underordnade övervakare och deras underordnade om det finns några", + "issueWithGoogleChatOnAndroidHelptext": "Detta gör det också möjligt att kringgå buggar uppströms som {issuetackerURL}", + "twilloMessagingServiceSIDHelptext": "Ange ditt meddelandetjänst-SID här om du använder {twillo_messaging_service_help_link} för att hantera avsändare och funktioner", + "twilioApiKeyHelptext": "API-nyckeln är valfri men rekommenderas. Du kan ange antingen konto-SID och AuthToken från TwilioConsole-sidan eller konto-SID och paret API-nyckel och API-nyckelhemlighet", + "evolutionRecipient": "Telefonnummer / Kontakt-ID / Grupp-ID", + "The phone number of the recipient in E.164 format.": "Mottagarens telefonnummer i E.164-format.", + "rabbitmqNodesInvalid": "Använd en fullständigt kvalificerad (som börjar med 'http') URL för RabbitMQ-noder.", + "wayToGetEvolutionUrlAndToken": "Du kan få API-URL:en och token genom att gå in i önskad kanal från {0}", + "snmpCommunityStringHelptext": "Den här strängen fungerar som ett lösenord för att autentisera och kontrollera åtkomst till SNMP-aktiverade enheter. Matcha den med din SNMP-enhets konfiguration.", + "wayToWriteEvolutionRecipient": "Telefonnumret med det internationella prefixet, men utan plustecknet i början ({0}), kontakt-ID ({1}) eller grupp-ID ({2}).", + "smsplanetNeedToApproveName": "Måste godkännas i klientpanelen", + "ipFamilyDescriptionAutoSelect": "Använder {happyEyeballs} för att bestämma IP-familjen.", + "wahaChatId": "Chatt-ID (Telefonnummer / Kontakt-ID / Grupp-ID)", + "pingNumericDescription": "Om markerad kommer IP-adresser att matas ut istället för symboliska värdnamn", + "pingIntervalAdjustedInfo": "Intervall justeras baserat på paketantal, global timeout och timeout per ping", + "wayToGetWahaApiKey": "API-nyckeln är miljövariabelvärdet WHATSAPP_API_KEY som du använde för att köra WAHA.", + "customUrlDescription": "Kommer att användas som klickbar URL istället för övervakarens.", + "wayToGetWahaSession": "Från den här sessionen skickar WAHA aviseringar till Chat ID. Du hittar det i WAHA Dashboard.", + "smtpHelpText": "'SMTPS' testar att SMTP/TLS fungerar; 'Ignorera TLS' ansluter via klartext; 'STARTTLS' ansluter, utfärdar ett STARTTLS-kommando och verifierar servercertifikatet. Inget av dessa skickar ett e-postmeddelande.", + "wayToWriteWahaChatId": "Telefonnumret med det internationella prefixet, men utan plustecknet i början ({0}), kontakt-ID ({1}) eller grupp-ID ({2}). Meddelanden skickas till detta chatt-ID från WAHA-sessionen.", + "Installing a Nextcloud Talk bot requires administrative access to the server.": "Att installera en Nextcloud Talk-bot kräver administrativ åtkomst till servern.", + "Unable to get permission to notify": "Det gick inte att få behörighet att meddela (begäran antingen nekad eller ignorerad).", + "Webpush Helptext": "Webbpush fungerar bara med SSL-anslutningar (HTTPS). För iOS-enheter måste webbsidan läggas till på startskärmen i förväg.", + "ntfyPriorityHelptextPriorityHigherThanDown": "Vanlig prioritet bör vara högre än {0} prioritet. Prioritet {1} är högre än {0} prioritet {2}", + "tagAlreadyStaged": "Den här taggen (namn och värde) är redan satt för den här batchen.", + "tagNameExists": "En systemtagg med det här namnet finns redan. Välj den från listan eller använd ett annat namn.", + "groupOnesenderDesc": "Se till att grupp-ID:t är giltigt. För att skicka meddelande till gruppen, t.ex.: 628123456789-342345", + "privateOnesenderDesc": "Se till att telefonnumret är giltigt. För att skicka meddelande till ett privat telefonnummer, t.ex.: 628123456789" } From 7c0f1c166775c96bb6e0bfdd7784739014a4f17c Mon Sep 17 00:00:00 2001 From: KALASHAS Date: Thu, 11 Dec 2025 02:44:28 +0000 Subject: [PATCH 56/91] Translated using Weblate (Lithuanian) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (Lithuanian) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (Lithuanian) Currently translated at 100.0% (1233 of 1233 strings) Translated using Weblate (Lithuanian) Currently translated at 94.4% (1164 of 1233 strings) Translated using Weblate (Lithuanian) Currently translated at 94.3% (1163 of 1233 strings) Co-authored-by: KALASHAS Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/lt/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/lt.json | 170 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 152 insertions(+), 18 deletions(-) diff --git a/src/lang/lt.json b/src/lang/lt.json index 7ce6ee26..35524429 100644 --- a/src/lang/lt.json +++ b/src/lang/lt.json @@ -1,8 +1,8 @@ { "languageName": "Lietuvių", - "settingUpDatabaseMSG": "Vyksta duomenų bazės sąranka. Tai gali užtrukti, būkite kantrūs.", + "settingUpDatabaseMSG": "Duomenų bazės nustatymas vykdomas. Tai gali užtrukti, prašome palaukti.", "Settings": "Parametrai", - "Dashboard": "Skydelis", + "Dashboard": "Informacijos suvestinė", "Help": "Pagalba", "New Update": "Naujas atnaujinimas", "Language": "Kalba", @@ -12,7 +12,7 @@ "List": "Sąrašas", "Home": "Pradžia", "Add": "Pridėti", - "Add New Monitor": "Pridėti naują stebėjimą", + "Add New Monitor": "Įtraukti naują monitorių", "Quick Stats": "Greita statistika", "Up": "Veikia", "statusMaintenance": "Profilaktikos darbai", @@ -22,7 +22,7 @@ "General Monitor Type": "Bendras stebėjimo tipas", "Passive Monitor Type": "Pasyvus stebėjimo tipas", "markdownSupported": "Palaikoma Markdown sintaksė", - "Pause": "Pristabdyti", + "Pause": "Pauzė", "Name": "Pavadinimas", "Status": "Būsena", "DateTime": "Data ir laikas", @@ -85,9 +85,9 @@ "Enable Auth": "Įjungti autentifikavimą", "disableauth.message1": "Ar tikrai norite {disableAuth}?", "setupDatabaseChooseDatabase": "Kurią duomenų bazę norėtumėte naudoti?", - "setupDatabaseMariaDB": "Prisijunkite prie išorinės MariaDB duomenų bazės. Reikia nustatyti duomenų bazės prisijungimo informaciją.", - "setupDatabaseSQLite": "Paprastas duomenų bazės failas, rekomenduojamas nedidelės apimties diegimui. Iki versijos 2.0.0, Uptime Kuma, kaip numatytąją duomenų bazę, naudojo SQLite.", - "setupDatabaseEmbeddedMariaDB": "Nereikia nieko nustatyti. Šiame Docker atvaizde MariaDB įdiegta ir sukonfigūruota automatiškai. Uptime Kuma prie šios duomenų bazės prisijungs per Unix lizdą.", + "setupDatabaseMariaDB": "Prisijunkite prie išorinės MariaDB duomenų bazės. Reikia nurodyti duomenų bazės prisijungimo informaciją.", + "setupDatabaseSQLite": "Paprastas duomenų bazės failas, rekomenduojamas mažoms diegimo aplinkoms. Iki v2.0.0 Uptime Kuma pagal numatytuosius nustatymus naudojo SQLite.", + "setupDatabaseEmbeddedMariaDB": "Nieko nustatyti nereikia. Ši Docker versija automatiškai įdiegia ir sukonfigūruoja MariaDB. Uptime Kuma prisijungs prie šios duomenų bazės per Unix socket.", "dbName": "Duomenų bazės pavadinimas", "Theme": "Tema", "Game": "Žaidimas", @@ -96,15 +96,15 @@ "Down": "Neveikia", "Pending": "Laukiama", "Maintenance": "Profilaktikos darbai", - "Specific Monitor Type": "Konkretus stebėjimo tipas", - "pauseDashboardHome": "Pristabdyta", + "Specific Monitor Type": "Specifinis stebėjimo tipas", + "pauseDashboardHome": "Pauzė", "No important events": "Jokių svarbių įvykių", "Monitor": "Stebėjimas | Stebėjimai", "Response": "Atsakymas", "Expected Value": "Tikėtina vertė", "Hostname": "Pagrindinio kompiuterio vardas", "Host URL": "Priimančiojo URL adresas", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Įveskite serverio, prie kurio norite prisijungti, pagrindinį kompiuterio vardą arba {localhost}, jei ketinate naudoti {local_mta}", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Įveskite serverio, prie kurio norite prisijungti, pagrindinio kompiuterio pavadinimą (hostname) arba {localhost}, jei ketinate naudoti {local_mta}", "Port": "Prievadas", "Heartbeat Interval": "Patikros signalo intervalas", "Resend Notification if Down X times consecutively": "Pakartotinis pranešimo siuntimas, jei neveikia X kartų iš eilės", @@ -386,7 +386,7 @@ "monitorToastMessagesDescription": "Iššokančios žinutės stebėjimams išnyksta po nurodyto laiko sekundėmis. Nustatykite -1, kad išjungtumėte laiko limitą, arba 0, kad išjungtumėte iššokančias žinutes.", "Enable Kafka Producer Auto Topic Creation": "Įjungti automatinį Kafka gamintojo temų kūrimą", "noGroupMonitorMsg": "Neprieinama. Pirmiausia sukurkite grupės stebėjimą.", - "wayToGetFlashDutyKey": "Galite eiti į „Kanalas -> (Pasirinkite kanalą) -> Integracijos -> Pridėti naują integraciją“ puslapį, pridėti „Uptime Kuma“, kad gautumėte push adresą, ir nukopijuoti integracijos raktą iš adreso. Daugiau informacijos rasite apsilankę", + "wayToGetFlashDutyKey": "Norėdami integruoti Uptime Kuma su Flashduty: eikite į Channels > pasirinkite kanalą > Integrations > Add a new integration, pasirinkite Uptime Kuma ir nukopijuokite Push URL.", "Plain Text": "Paprastas tekstas", "Message Template": "Žinutės šablonas", "Template Format": "Šablono formatas", @@ -439,7 +439,7 @@ "Long-Lived Access Token": "Ilgalaikis prieigos raktas", "Notification Service": "Pranešimų paslauga", "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Pranešimų paslaugų sąrašą rasite Home Assistant skiltyje „Kūrėjo įrankiai > Paslaugos“, ieškodami žodžio „notification“, kad rastumėte savo įrenginio/telefono pavadinimą.", - "Home Assistant URL": "Home Assistant URL", + "Home Assistant URL": "Namų Asistento URL", "Automations can optionally be triggered in Home Assistant:": "Automatizacijas galima pasirinktinai paleisti Home Assistant sistemoje:", "Trigger type:": "Paleidimo tipas:", "Event type:": "Įvykio tipas:", @@ -615,15 +615,15 @@ "Base URL": "Bazinis URL", "high": "aukštas", "SMSManager API Docs": "SMSManager API dokumentacija ", - "SendKey": "SendKey", + "SendKey": "SiuntimoRaktas", "Gateway Type": "Šliuzo tipas", "You can divide numbers with": "Galite atskirti skaičius su", "goAlertIntegrationKeyInfo": "Gaukite bendrą API integravimo raktą paslaugai šiuo formatu „aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee”, dažniausiai tai bus prieigos rakto parametro reikšmė nukopijuotame URL.", "AccessKeyId": "Prieigos rakto ID", - "PhoneNumbers": "PhoneNumbers", - "TemplateCode": "TemplateCode", + "PhoneNumbers": "TelefonoNumeriai", + "TemplateCode": "SablonoKodas", "SecretAccessKey": "Prieigos rakto slaptasis raktas", - "SignName": "SignName", + "SignName": "ParasoVardas", "Sms template must contain parameters: ": "SMS šablone turi būti nurodyti parametrai: ", "Bark API Version": "Bark API versija", "Bark Endpoint": "Bark endpointas", @@ -795,7 +795,7 @@ "aboutChannelName": "Įveskite kanalo pavadinimą {0} lauke „Kanalo pavadinimas“, jei norite apeiti Webhook kanalą. Pvz.: #kitas-kanalas", "aboutKumaURL": "Jei paliksite Uptime Kuma URL lauką tuščią, jis bus automatiškai nustatytas kaip Projekto GitHub puslapis.", "PushDeer Key": "PushDeer raktas", - "wayToGetClickSendSMSToken": "API vartotojo vardą ir API raktą galite gauti adresu {0}.", + "wayToGetClickSendSMSToken": "API naudotojo vardą ir API raktą galite gauti čia: {0}.", "Custom Monitor Type": "Pasirinktinis stebėjimo tipas", "lunaseaTarget": "Tikslas", "Edit Tag": "Redaguoti žymę", @@ -1098,5 +1098,139 @@ "tagAlreadyStaged": "Ši žymė (pavadinimas ir reikšmė) jau laukia vykdymo šioje partijoje.", "tagNameExists": "Sisteminė žymė su tokiu pavadinimu jau egzistuoja. Pasirinkite ją iš sąrašo arba naudokite kitą pavadinimą.", "smseagleMsgType": "Žinutes tipas", - "issueWithGoogleChatOnAndroidHelptext": "Tai taip pat leidžia apeiti aukščiau esančias klaidas, pvz., {issuetackerURL}" + "issueWithGoogleChatOnAndroidHelptext": "Tai taip pat leidžia apeiti aukščiau esančias klaidas, pvz., {issuetackerURL}", + "WebSocket Transport for JMAP": "WebSocket perdavimo kanalas JMAP (JSON metataikomųjų programų protokolui)", + "Enter a list of userId": "Įveskite naudotojų ID sąrašą", + "Enter a list of mobile": "Įveskite mobiliųjų įrenginių sąrašą", + "smseagleMsgRing": "Skambučio signalas", + "twilloMessagingServiceSIDHelptext": "Įveskite savo pranešimų paslaugos SID čia, jei naudojate {twillo_messaging_service_help_link} siuntėjams ir funkcijoms valdyti", + "ignoreSecWebsocketAcceptHeaderDescription": "Leidžia serveriui neatsakyti su Sec-WebSocket-Accept antrašte, jei „websocket“ atnaujinimas pavyksta.", + "Ignore Sec-WebSocket-Accept header": "Ignoruoti {0} antraštę", + "wsSubprotocolDescription": "Daugiau informacijos apie subprotokolus rasite {dokumentacijoje}", + "WebSocket Application Messaging Protocol": "WAMP (WebSocket programų pranešimų perdavimo protokolas)", + "Session Initiation Protocol": "WebSocket perdavimo kanalas SIP (sesijos inicijavimo protokolui)", + "Network API for Notification Channel": "OMA RESTful tinklo API pranešimų kanalui", + "Web Process Control Protocol": "Žiniatinklio procesų valdymo protokolas (WPCP)", + "Advanced Message Queuing Protocol": "Išplėstinis pranešimų eilių protokolas (AMQP) 1.0+", + "jsflow": "jsFlow publikavimo/prenumeratos (pubsub) ir eilių protokolas", + "Reverse Web Process Control": "Atvirkštinis žiniatinklio procesų valdymo protokolas (RWPCP)", + "Extensible Messaging and Presence Protocol": "WebSocket perdavimo kanalas išplečiamajam pranešimų ir būsenos protokolui (XMPP)", + "Smart Home IP": "SHIP – išmaniųjų namų IP protokolas", + "Miele Cloud Connect Protocol": "Miele debesijos jungties protokolas", + "Push Channel Protocol": "Pranešimų siuntimo kanalo protokolas", + "Message Session Relay Protocol": "WebSocket perdavimo kanalas MSRP (pranešimų sesijos perdavimo protokolui)", + "Binary Floor Control Protocol": "WebSocket perdavimo kanalas BFCP (dvejetainiam Floor valdymo protokolui)", + "Softvelum Low Delay Protocol": "Softvelum mažos delsos protokolas", + "OPC UA Connection Protocol": "OPC UA ryšio protokolas", + "OPC UA JSON Encoding": "OPC UA JSON kodavimas", + "Swindon Web Server Protocol": "OPC UA JSON kodavimas", + "Broadband Forum User Services Platform": "OPC UA JSON kodavimas", + "Constrained Application Protocol": "Apribotų išteklių taikomųjų programų protokolas (CoAP)", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket Signalo protokolas", + "Cobra Real Time Messaging Protocol": "Cobra realaus laiko pranešimų protokolas", + "Declarative Resource Protocol": "Deklaratyviųjų išteklių protokolas", + "BACnet Secure Connect Hub Connection": "BACnet Secure Connect mazgo (hub) ryšys", + "BACnet Secure Connect Direct Connection": "BACnet Secure Connect tiesioginis ryšys", + "ITU-T T.140 Real-Time Text": "ITU-T T.140 Realaus laiko tekstas", + "Done.best IoT Protocol": "Done.best IoT protokolas", + "Collection Update": "Kolekcijos atnaujinimo WebSocket subprotokolas", + "Text IRC Protocol": "Tekstinis IRC protokolas", + "Binary IRC Protocol": "Dvejetainis IRC protokolas", + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live protokolas v3 (Protobuf kodavimas)", + "Invalid userId": "Neteisingas naudotojo ID [{userId}]", + "HTTP Method": "HTTP metodas", + "deleteGroupMsg": "Ar tikrai norite ištrinti šią grupę?", + "webhookGetMethodDesc": "GET siunčia duomenis kaip užklausos parametrus ir neleidžia konfigūruoti turinio. Naudinga, kai reikia suaktyvinti „Uptime Kuma“ Push stebėjimo elementus.", + "wayToGetBaleToken": "Galite gauti prieigos raktą iš {0}.", + "supportBaleChatID": "Palaiko tiesioginio pokalbio, grupės arba kanalo pokalbio ID", + "wayToGetBaleChatID": "Galite gauti savo pokalbio ID išsiųsdami pranešimą botui ir apsilankę šiame URL, kad peržiūrėtumėte **chat_id**:", + "certHostnameMismatch": "Sertifikato pagrindinio kompiuterio (hostname) pavadinimas nesutampa su stebimos (monitor) URL nuoroda.", + "deleteChildrenMonitors": "Taip pat ištrinti tiesioginius antrinius stebėjimo elementus ir jų antrinius elementus, jei tokių yra | Taip pat ištrinti visus {count} tiesioginius antrinius stebėjimo elementus ir jų antrinius elementus, jei tokių yra", + "Invalid mobile": "Neteisingas mobiliojo įrenginio numeris [{mobile}]", + "ntfyPriorityDown": "Prioritetas „DOWN“ įvykiams", + "twilioApiKeyHelptext": "API raktas neprivalomas, bet rekomenduojamas. Galite pateikti Account SID ir AuthToken iš Twilio Console puslapio arba Account SID su API raktu ir API rakto slaptu kodu", + "twilioMessagingServiceSID": "Pranešimų paslaugos SID (neprivaloma)", + "webhookPostMethodDesc": "POST tinka daugumai šiuolaikinių HTTP serverių.", + "Template plain text instead of using cards": "Naudoti paprastą teksto šabloną vietoje kortelių", + "descriptionHelpText": "Rodoma vidinėje informacijos suvestinėje. Leidžiamas „Markdown“ formatas, kuris prieš rodymą išvalomas (išlaikomi tarpai ir įtrauka).", + "Mention Mobile List": "Paminėti mobiliųjų įrenginių sąrašą", + "Mention User List": "Paminėti naudotojų ID sąrašą", + "Dingtalk Mobile List": "Mobiliųjų įrenginių sąrašas", + "Dingtalk User List": "Naudotojų ID sąrašas", + "Clone Maintenance": "Klonų Priežiūra", + "ariaPauseMaintenance": "Pristabdyti šį priežiūros tvarkaraštį", + "ariaResumeMaintenance": "Tęsti šį priežiūros tvarkaraštį", + "ariaCloneMaintenance": "Sukurti šio priežiūros tvarkaraščio kopiją", + "ariaEditMaintenance": "Redaguoti šį priežiūros tvarkaraštį", + "ariaDeleteMaintenance": "Ištrinti šį priežiūros tvarkaraštį", + "smseagleMsgTts": "Text-to-speech skambutis", + "auto-select": "Automatinis pasirinkimas", + "smseagleMsgTtsAdvanced": "Išplėstinis teksto į kalbą skambutis", + "Ip Family": "IP Šeima", + "ipFamilyDescriptionAutoSelect": "Naudoja {happyEyeballs}, kad nustatytų IP šeimą.", + "Notifications Enabled": "Pranešimai įjungti", + "Allow Notifications": "Leisti pranešimus", + "Browser not supported": "Naršyklė nepalaikoma", + "Unable to get permission to notify": "Nepavyko gauti leidimo siųsti pranešimus (užklausa atmesta arba ignoruota).", + "Maximum Retries": "Didžiausias pakartojimų skaičius", + "wayToWriteEvolutionRecipient": "Telefono numeris su tarptautiniu prefiksu, bet be pliuso ženklo pradžioje ({0}), kontaktinio asmens ID ({1}) arba grupės ID ({2}).", + "smsplanetApiDocs": "Išsami informacija apie API prieigos raktų gavimą pateikta {the_smsplanet_documentation}.", + "Manual": "Rankinis", + "Installing a Nextcloud Talk bot requires administrative access to the server.": "Norint įdiegti „Nextcloud Talk“ botą, reikia administratoriaus prieigos prie serverio.", + "Webpush Helptext": "Žiniatinklio pranešimai („Web Push“) veikia tik su SSL (HTTPS) ryšiais. iOS įrenginiuose tinklalapį reikia iš anksto pridėti prie pradžios ekrano.", + "Number of retry attempts if webhook fails": "Bandymų pakartoti skaičius (kas 60–180 sekundžių), jei webhook užklausa nepavyksta.", + "pingPerRequestTimeoutLabel": "Laiko limitas vienam ping siuntimui", + "Recipient Numbers": "Gavėjų numeriai", + "Optional: The audience to request the JWT for": "Neprivaloma: auditorija, kuriai prašomas JWT", + "OAuth Audience": "OAuth Auditorija", + "pingCountDescription": "Paketų skaičius, kuriuos siųsti prieš sustojant", + "smsplanetApiToken": "Prieigos raktas SMSPlanet API paslaugai", + "Template ID": "Šablono ID", + "wayToGetClickSMSIRTemplateID": "Jūsų šablone turi būti laukas {uptkumaalert}. Naują šabloną galite sukurti {here}.", + "evolutionRecipient": "Telefono numeris / Kontaktinio asmens ID / Grupės ID", + "wayToGetEvolutionUrlAndToken": "API URL ir prieigos raktą galite gauti atsidarę norimą kanalą per {0}", + "evolutionInstanceName": "Egzemplioriaus Pavadinimas", + "brevoCcEmail": "Kopijos (CC) el. paštas", + "brevoSeparateMultipleEmails": "Kelis el. pašto adresus atskirkite kableliais", + "brevoBccEmail": "Nematomos kopijos (BCC) el. paštas", + "brevoSubject": "Tema", + "pingNumericLabel": "Skaitmeninė išvestis", + "pingNumericDescription": "Pažymėjus bus išvedami IP adresai, o ne simboliniai mazgų pavadinimai", + "pingGlobalTimeoutDescription": "Bendras laikas sekundėmis, po kurio ping sustos, neatsižvelgiant į išsiųstų paketų skaičių", + "customUrlDescription": "Bus naudojamas kaip paspaudžiamas URL, vietoj stebėjimo elemento URL.", + "Add Another Tag": "Pridėti kitą žymą", + "pause": "Pristabdyti", + "brevoApiKey": "Brevo API Raktas", + "brevoApiHelp": "Sukurkite API raktą čia: {0}", + "brevoFromEmail": "Siuntėjo el. paštas", + "pingIntervalAdjustedInfo": "Intervalas koreguojamas atsižvelgiant į paketų skaičių, bendrą laiko limitą ir vieno ping siuntimo laiko limitą", + "brevoFromName": "Siuntėjo vardas", + "brevoLeaveBlankForDefaultName": "Palikite tuščią, kad būtų naudojamas numatytasis vardas", + "Nextcloud host": "Nextcloud serveris", + "Bot secret": "Boto slaptas raktas", + "pingGlobalTimeoutLabel": "Bendras laiko limitas", + "OneChatBotId": "OneChat boto ID", + "brevoLeaveBlankForDefaultSubject": "Palikite tuščią, kad būtų naudojama numatytoji tema", + "Clear Form": "Išvalyti formą", + "FlashDuty Push URL": "Siuntimo URL", + "brevoToEmail": "Gavėjo el. paštas", + "pingPerRequestTimeoutDescription": "Didžiausias laukimo laikas (sekundėmis) prieš laikant vieną ping paketą prarastu", + "OneChatAccessToken": "OneChat Prieigos Tokenas", + "OneChatUserIdOrGroupId": "OneChat naudotojo ID arba grupės ID", + "the smsplanet documentation": "SMSPlanet dokumentacijoje", + "Phone numbers": "Telefono numeriai", + "Sender name": "Siuntėjo vardas", + "smsplanetNeedToApproveName": "Turi būti patvirtintas kliento skydelyje", + "Disable URL in Notification": "Išjungti URL pranešime", + "Happy Eyeballs algorithm": "Happy Eyeballs algoritmas", + "Staged Tags for Batch Add": "Paruoštos žymos masiniam pridėjimui", + "Conversation token": "Pokalbio prieigos raktas", + "Send UP silently": "Siųsti UP tyliai", + "Send DOWN silently": "Siųsti DOWN tyliai", + "pingCountLabel": "Maksimalus paketų skaičius", + "smtpHelpText": "„SMTPS“ tikrina, ar SMTP/TLS veikia; „Ignore TLS“ jungiasi nešifruotu ryšiu; „STARTTLS“ jungiasi, siunčia STARTTLS komandą ir patikrina serverio sertifikatą. Nė vienas iš šių režimų nesiunčia el. laiško.", + "Custom URL": "Pasirinktinis URL", + "Font Twemoji by Twitter licensed under": "Šriftas „Twemoji“, sukurtas „Twitter“, licencijuotas pagal", + "showOnlyLastHeartbeat": "Rodyti tik paskutinį heartbeat", + "FlashDuty Push URL Placeholder": "Nukopijuokite iš įspėjimų integracijos puslapio" } From e43b10471722806c7525642735bc55cc72835f74 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Thu, 11 Dec 2025 02:44:28 +0000 Subject: [PATCH 57/91] Translated using Weblate (Polish) Currently translated at 94.9% (1171 of 1233 strings) Co-authored-by: Adam Stachowicz Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/pl.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/lang/pl.json b/src/lang/pl.json index 1d03efa0..923d61ed 100644 --- a/src/lang/pl.json +++ b/src/lang/pl.json @@ -842,7 +842,7 @@ "enableNSCD": "Włącz NSCD (Name Service Cache Daemon) do buforowania wszystkich żądań DNS", "Saved.": "Zapisano.", "setupDatabaseChooseDatabase": "Której bazy danych chcesz używać?", - "setupDatabaseEmbeddedMariaDB": "Nie musisz niczego ustawiać. Ten obraz docker automatycznie osadził i skonfigurował MariaDB. Uptime Kuma połączy się z tą bazą danych za pośrednictwem gniazda Unix.", + "setupDatabaseEmbeddedMariaDB": "Nie musisz niczego ustawiać. Ten obraz Docker automatycznie osadził i skonfigurował MariaDB. Uptime Kuma połączy się z tą bazą danych za pośrednictwem gniazda Unix.", "setupDatabaseMariaDB": "Połącz z zewnętrzną bazą danych MariaDB. Należy ustawić informacje o połączeniu z bazą danych.", "setupDatabaseSQLite": "Prosty plik bazy danych, zalecany do wdrożeń na małą skalę. Przed wersją 2.0.0 Uptime Kuma używała SQLite jako domyślnej bazy danych.", "dbName": "Nazwa bazy danych", @@ -1220,5 +1220,10 @@ "tagNameExists": "Tag systemowy o tej nazwie już istnieje. Wybierz go z listy lub użyj innej nazwy.", "auto-select": "Wybór automatyczny", "issueWithGoogleChatOnAndroidHelptext": "Pozwala to również ominąć błędy upstream, takie jak {issuetackerURL}", - "ipFamilyDescriptionAutoSelect": "Używa {happyEyeballs} do określania rodziny adresów IP." + "ipFamilyDescriptionAutoSelect": "Używa {happyEyeballs} do określania rodziny adresów IP.", + "Ignore Sec-WebSocket-Accept header": "Ignoruj nagłówek {0}", + "Web Process Control Protocol": "Web Process Control Protocol (WPCP)", + "Advanced Message Queuing Protocol": "Advanced Message Queuing Protocol (AMQP) 1.0+", + "WebSocket Application Messaging Protocol": "WAMP (The WebSocket Application Messaging Protocol)", + "Reverse Web Process Control": "Reverse Web Process Control Protocol (RWPCP)" } From 2a687ab67aa71b3cb36167f9eea7f5d77da32641 Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Sun, 14 Dec 2025 14:46:24 +0100 Subject: [PATCH 58/91] chore: trim the pull request template (#6492) --- .github/PULL_REQUEST_TEMPLATE.md | 56 ++++++++------------------------ 1 file changed, 13 insertions(+), 43 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 71a2f7fc..407d97b1 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,63 +1,34 @@ -## ❗ Important Announcements +_ℹ️ To keep reviews fast and effective, please make sure you’ve [read our pull request guidelines](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma)_ -
Click here for more details: -

+## 📝 Summary of changes done and why they are done -**⚠️ Please Note: We do not accept all types of pull requests, and we want to ensure we don’t waste your time. Before submitting, make sure you have read our pull request guidelines: [Pull Request Rules](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma)** + -### 🚫 Please Avoid Unnecessary Pinging of Maintainers -We kindly ask you to refrain from pinging maintainers unless absolutely necessary. Pings are for critical/urgent pull requests that require immediate attention. +## 📋 Related issues -

-
- -## 📋 Overview - - - -- **What problem does this pull request address?** - - Please provide a detailed explanation here. -- **What features or functionality does this pull request introduce or enhance?** - - Please provide a detailed explanation here. - - - -- Relates to #issue-number -- Resolves #issue-number - -## 🛠️ Type of change - - - -- [ ] 🐛 Bugfix (a non-breaking change that resolves an issue) -- [ ] ✨ New feature (a non-breaking change that adds new functionality) -- [ ] ⚠️ Breaking change (a fix or feature that alters existing functionality in a way that could cause issues) -- [ ] 🎨 User Interface (UI) updates -- [ ] 📄 New Documentation (addition of new documentation) -- [ ] 📄 Documentation Update (modification of existing documentation) -- [ ] 📄 Documentation Update Required (the change requires updates to related documentation) -- [ ] 🔧 Other (please specify): - - Provide additional details here. + +- Relates to #issue-number +- Resolves #issue-number ## 📄 Checklist - +
+Please follow this checklist to avoid unnecessary back and forth (click to expand) +- [ ] ⚠️ If there are Breaking change (a fix or feature that alters existing functionality in a way that could cause issues) I have called them out - [ ] 🔍 My code adheres to the style guidelines of this project. - [ ] 🦿 I have indicated where (if any) I used an LLM for the contributions - [ ] ✅ I ran ESLint and other code linters for modified files. +- [ ] ⚠️ My changes generate no new warnings. - [ ] 🛠️ I have reviewed and tested my code. - [ ] 📝 I have commented my code, especially in hard-to-understand areas (e.g., using JSDoc for methods). -- [ ] ⚠️ My changes generate no new warnings. - [ ] 🤖 My code needed automated testing. I have added them (this is an optional task). - [ ] 📄 Documentation updates are included (if applicable). - [ ] 🔒 I have considered potential security impacts and mitigated risks. - [ ] 🧰 Dependency updates are listed and explained. -- [ ] 📚 I have read and understood the [Pull Request guidelines](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#recommended-pull-request-guideline). + +
## 📷 Screenshots or Visual Changes @@ -66,7 +37,6 @@ If this pull request introduces visual changes, please provide the following det If not, remove this section. Please upload the image directly here by pasting it or dragging and dropping. -Avoid using external image services as the image will be uploaded automatically. --> - **UI Modifications**: Highlight any changes made to the user interface. From 3b0ab450d3619bfc1145cdb9469cce58e99397c6 Mon Sep 17 00:00:00 2001 From: iotux <46082385+iotux@users.noreply.github.com> Date: Wed, 17 Dec 2025 17:50:28 +0700 Subject: [PATCH 59/91] fix: tags are not saved if you don't save 2 times (#6491) --- server/server.js | 6 ++++++ server/uptime-kuma-server.js | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/server/server.js b/server/server.js index d8088bc9..c639d459 100644 --- a/server/server.js +++ b/server/server.js @@ -1248,6 +1248,8 @@ let needSetup = false; value, ]); + await server.sendUpdateMonitorIntoList(socket, monitorID); + callback({ ok: true, msg: "successAdded", @@ -1272,6 +1274,8 @@ let needSetup = false; monitorID, ]); + await server.sendUpdateMonitorIntoList(socket, monitorID); + callback({ ok: true, msg: "successEdited", @@ -1296,6 +1300,8 @@ let needSetup = false; value, ]); + await server.sendUpdateMonitorIntoList(socket, monitorID); + callback({ ok: true, msg: "successDeleted", diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js index 982af6cf..b528cc3b 100644 --- a/server/uptime-kuma-server.js +++ b/server/uptime-kuma-server.js @@ -222,7 +222,9 @@ class UptimeKumaServer { */ async sendUpdateMonitorIntoList(socket, monitorID) { let list = await this.getMonitorJSONList(socket.userID, monitorID); - this.io.to(socket.userID).emit("updateMonitorIntoList", list); + if (list && list[monitorID]) { + this.io.to(socket.userID).emit("updateMonitorIntoList", list); + } } /** From a36616c855e3964624b0b6cf589d155d07e7f4ce Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Thu, 18 Dec 2025 10:06:58 +0800 Subject: [PATCH 60/91] [GitHub Workflow] Fix e2e test + cache node_modules (#6500) --- .github/workflows/auto-test.yml | 49 +++++++++++++++++---- .github/workflows/close-incorrect-issue.yml | 1 - test/e2e/specs/monitor-form.spec.js | 8 ++-- 3 files changed, 45 insertions(+), 13 deletions(-) diff --git a/.github/workflows/auto-test.yml b/.github/workflows/auto-test.yml index 46fe5d23..f0dfdfa5 100644 --- a/.github/workflows/auto-test.yml +++ b/.github/workflows/auto-test.yml @@ -15,7 +15,7 @@ on: jobs: auto-test: - needs: [ check-linters ] + needs: [ e2e-test ] runs-on: ${{ matrix.os }} timeout-minutes: 15 @@ -33,6 +33,13 @@ jobs: - run: git config --global core.autocrlf false # Mainly for Windows - uses: actions/checkout@v4 + - name: Cache/Restore node_modules + uses: actions/cache@v4 + id: node-modules-cache + with: + path: node_modules + key: node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} + - name: Use Node.js ${{ matrix.node }} uses: actions/setup-node@v6 with: @@ -46,7 +53,7 @@ jobs: # As a lot of dev dependencies are not supported on ARMv7, we have to test it separately and just test if `npm ci --production` works armv7-simple-test: - needs: [ ] + needs: [ e2e-test ] runs-on: ${{ matrix.os }} timeout-minutes: 15 if: ${{ github.repository == 'louislam/uptime-kuma' }} @@ -60,11 +67,18 @@ jobs: - run: git config --global core.autocrlf false # Mainly for Windows - uses: actions/checkout@v4 + - name: Cache/Restore node_modules + uses: actions/cache@v4 + id: node-modules-cache + with: + path: node_modules + key: node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} + - name: Use Node.js ${{ matrix.node }} uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} - - run: npm ci --production + - run: npm install --production check-linters: runs-on: ubuntu-latest @@ -73,6 +87,13 @@ jobs: - run: git config --global core.autocrlf false # Mainly for Windows - uses: actions/checkout@v4 + - name: Cache/Restore node_modules + uses: actions/cache@v4 + id: node-modules-cache + with: + path: node_modules + key: node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} + - name: Use Node.js 20 uses: actions/setup-node@v6 with: @@ -81,17 +102,29 @@ jobs: - run: npm run lint:prod e2e-test: - needs: [ ] - runs-on: ubuntu-24.04-arm + needs: [ check-linters ] + runs-on: ARM64 + env: + PLAYWRIGHT_VERSION: ~1.39.0 steps: - run: git config --global core.autocrlf false # Mainly for Windows - uses: actions/checkout@v4 - - name: Use Node.js 20 + - name: Cache/Restore node_modules + uses: actions/cache@v4 + id: node-modules-cache + with: + path: node_modules + key: node-modules-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} + + - name: Setup Node.js uses: actions/setup-node@v6 with: - node-version: 20 + node-version: 22 - run: npm install - - run: npx playwright install + + - name: Install Playwright ${{ env.PLAYWRIGHT_VERSION }} + run: npx playwright@${{ env.PLAYWRIGHT_VERSION }} install + - run: npm run build - run: npm run test-e2e diff --git a/.github/workflows/close-incorrect-issue.yml b/.github/workflows/close-incorrect-issue.yml index 9d461693..f618cd7c 100644 --- a/.github/workflows/close-incorrect-issue.yml +++ b/.github/workflows/close-incorrect-issue.yml @@ -20,6 +20,5 @@ jobs: uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} - cache: 'npm' - run: npm ci - run: node extra/close-incorrect-issue.js ${{ secrets.GITHUB_TOKEN }} ${{ github.event.issue.number }} ${{ github.event.issue.user.login }} diff --git a/test/e2e/specs/monitor-form.spec.js b/test/e2e/specs/monitor-form.spec.js index b41f6ceb..c8734fa9 100644 --- a/test/e2e/specs/monitor-form.spec.js +++ b/test/e2e/specs/monitor-form.spec.js @@ -53,7 +53,7 @@ test.describe("Monitor Form", () => { const friendlyName = "Example DNS NS"; await page.getByTestId("friendly-name-input").fill(friendlyName); - await page.getByTestId("hostname-input").fill("example.com"); + await page.getByTestId("hostname-input").fill("kuma.pet"); const resolveTypeSelect = page.getByTestId("resolve-type-select"); await resolveTypeSelect.click(); @@ -65,9 +65,9 @@ test.describe("Monitor Form", () => { await page.getByTestId("add-condition-button").click(); expect(await page.getByTestId("condition").count()).toEqual(2); // 2 explicitly added - await page.getByTestId("condition-value").nth(0).fill("a.iana-servers.net"); + await page.getByTestId("condition-value").nth(0).fill("carl.ns.cloudflare.com"); await page.getByTestId("condition-and-or").nth(0).selectOption("or"); - await page.getByTestId("condition-value").nth(1).fill("b.iana-servers.net"); + await page.getByTestId("condition-value").nth(1).fill("jean.ns.cloudflare.com"); await screenshot(testInfo, page); await page.getByTestId("save-button").click(); @@ -86,7 +86,7 @@ test.describe("Monitor Form", () => { const friendlyName = "Example DNS NS"; await page.getByTestId("friendly-name-input").fill(friendlyName); - await page.getByTestId("hostname-input").fill("example.com"); + await page.getByTestId("hostname-input").fill("kuma.pet"); const resolveTypeSelect = page.getByTestId("resolve-type-select"); await resolveTypeSelect.click(); From 5d955f954b60410cd2dc5370d429753de524a2ef Mon Sep 17 00:00:00 2001 From: iotux <46082385+iotux@users.noreply.github.com> Date: Thu, 18 Dec 2025 09:53:47 +0700 Subject: [PATCH 61/91] feat: add platform/arch information to `sendInfo` (#6497) Co-authored-by: Frank Elsinga --- server/client.js | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/server/client.js b/server/client.js index 72f0a4e8..4076242c 100644 --- a/server/client.js +++ b/server/client.js @@ -142,27 +142,23 @@ async function sendAPIKeyList(socket) { * @returns {Promise} */ async function sendInfo(socket, hideVersion = false) { - let version; - let latestVersion; - let isContainer; - let dbType; - - if (!hideVersion) { - version = checkVersion.version; - latestVersion = checkVersion.latestVersion; - isContainer = (process.env.UPTIME_KUMA_IS_CONTAINER === "1"); - dbType = Database.dbConfig.type; - } - - socket.emit("info", { - version, - latestVersion, - isContainer, - dbType, + const info = { primaryBaseURL: await setting("primaryBaseURL"), serverTimezone: await server.getTimezone(), serverTimezoneOffset: server.getTimezoneOffset(), - }); + }; + if (!hideVersion) { + info.version = checkVersion.version; + info.latestVersion = checkVersion.latestVersion; + info.isContainer = (process.env.UPTIME_KUMA_IS_CONTAINER === "1"); + info.dbType = Database.dbConfig.type; + info.runtime = { + platform: process.platform, // linux or win32 + arch: process.arch, // x86 or arm + }; + } + + socket.emit("info", info); } /** From a851badb37dddc1e4f8f76e017afda9e68305c54 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 19 Dec 2025 21:50:00 +0000 Subject: [PATCH 62/91] Translated using Weblate (German) Currently translated at 100.0% (1235 of 1235 strings) Co-authored-by: Michael Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-DE.json | 1196 +++++++++++++++++++++---------------------- 1 file changed, 598 insertions(+), 598 deletions(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index b543e805..49dc2780 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -1,11 +1,11 @@ { "languageName": "Deutsch", "Settings": "Einstellungen", - "Dashboard": "Überblick", - "New Update": "Aktualisierung verfügbar", + "Dashboard": "Dashboard", + "New Update": "Update verfügbar", "Language": "Sprache", "Appearance": "Erscheinungsbild", - "Theme": "Erscheinungsbild", + "Theme": "Design", "General": "Allgemein", "Version": "Version", "Check Update On GitHub": "Auf GitHub nach Updates suchen", @@ -14,17 +14,17 @@ "Add": "Hinzufügen", "Add New Monitor": "Neuen Monitor hinzufügen", "Quick Stats": "Übersicht", - "Up": "Aktiv", - "Down": "Inaktiv", + "Up": "Online", + "Down": "Offline", "Pending": "Ausstehend", "Unknown": "Unbekannt", - "Cannot connect to the socket server": "Es kann keine Verbindung zum Socket-Server hergestellt werden", - "Reconnecting...": "Die Verbindung wird wiederhergestellt...", + "Cannot connect to the socket server": "Verbindung zum Socket-Server fehlgeschlagen", + "Reconnecting...": "Verbinde erneut...", "Pause": "Pausieren", "pauseDashboardHome": "Pausiert", "Name": "Name", "Status": "Status", - "DateTime": "Datum / Uhrzeit", + "DateTime": "Datum / Zeit", "Message": "Nachricht", "No important events": "Keine wichtigen Ereignisse", "Resume": "Fortsetzen", @@ -32,61 +32,61 @@ "Delete": "Löschen", "Current": "Aktuell", "Uptime": "Verfügbarkeit", - "Cert Exp.": "Zertifikatsablauf", + "Cert Exp.": "Zertifikat läuft ab", "day": "Tag | Tage", "-day": "-Tage", "hour": "Stunde", "-hour": "-Stunden", - "checkEverySecond": "Überprüfe alle {0} Sekunden", + "checkEverySecond": "Alle {0} Sekunden überprüfen", "Response": "Antwortzeit", "Ping": "Ping", "Monitor Type": "Monitor-Typ", - "Keyword": "Suchwort", + "Keyword": "Suchbegriff", "Friendly Name": "Anzeigename", "URL": "URL", "Hostname": "Hostname", "Port": "Port", "Heartbeat Interval": "Prüfintervall", "Retries": "Wiederholungen", - "retriesDescription": "Maximale Wiederholungen, bevor der Dienst als inaktiv markiert und eine Benachrichtigung gesendet wird", + "retriesDescription": "Maximale Anzahl an Wiederholungen, bevor der Dienst als 'Offline' markiert und eine Benachrichtigung gesendet wird.", "Advanced": "Erweitert", - "ignoreTLSError": "Ignoriere TLS-/SSL-Fehler von Webseiten", + "ignoreTLSError": "TLS/SSL-Fehler bei HTTPS-Webseiten ignorieren", "Upside Down Mode": "Umgekehrter Modus", - "upsideDownModeDescription": "Im umgekehrten Modus wird der Dienst als inaktiv angezeigt, wenn er erreichbar ist.", + "upsideDownModeDescription": "Im umgekehrten Modus gilt der Dienst als 'Offline', wenn er erreichbar ist.", "Max. Redirects": "Max. Weiterleitungen", "maxRedirectDescription": "Maximale Anzahl von Weiterleitungen, denen gefolgt werden soll. Auf 0 setzen, um Weiterleitungen zu deaktivieren.", - "Accepted Status Codes": "Erlaubte HTTP-Statuscodes", - "acceptedStatusCodesDescription": "Statuscodes auswählen, die als erfolgreiche Verbindung gelten sollen.", + "Accepted Status Codes": "Akzeptierte Statuscodes", + "acceptedStatusCodesDescription": "Wähle die Statuscodes, die als erfolgreiche Antwort gelten sollen.", "Save": "Speichern", "Notifications": "Benachrichtigungen", "Not available, please setup.": "Nicht verfügbar, bitte einrichten.", "Setup Notification": "Benachrichtigung einrichten", "Light": "Hell", "Dark": "Dunkel", - "Auto": "Auto", - "Theme - Heartbeat Bar": "Erscheinungsbild - Zeitleiste", + "Auto": "Automatisch", + "Theme - Heartbeat Bar": "Design - Zeitleiste", "Normal": "Normal", "Bottom": "Unten", "None": "Keine", "Timezone": "Zeitzone", "Search Engine Visibility": "Sichtbarkeit für Suchmaschinen", - "Allow indexing": "Indizierung zulassen", - "Discourage search engines from indexing site": "Suchmaschinen darum bitten, die Seite nicht zu indizieren", + "Allow indexing": "Indizierung erlauben", + "Discourage search engines from indexing site": "Suchmaschinen davon abhalten, die Seite zu indizieren", "Change Password": "Passwort ändern", "Current Password": "Aktuelles Passwort", "New Password": "Neues Passwort", "Repeat New Password": "Neues Passwort wiederholen", - "passwordNotMatchMsg": "Passwörter stimmen nicht überein.", + "passwordNotMatchMsg": "Die Passwörter stimmen nicht überein.", "Update Password": "Passwort aktualisieren", "Disable Auth": "Authentifizierung deaktivieren", "Enable Auth": "Authentifizierung aktivieren", - "disableauth.message1": "Bist du sicher das du die {disableAuth} möchtest?", + "disableauth.message1": "Bist du sicher, dass du die {disableAuth} möchtest?", "disable authentication": "Authentifizierung deaktivieren", - "disableauth.message2": "Dies ist für Szenarien gedacht, {intendThirdPartyAuth} vor Uptime Kuma geschaltet hat, wie z.B. Cloudflare Access, Authelia oder andere Authentifizierungsmechanismen.", - "where you intend to implement third-party authentication": "in denen man eine externe Authentifizierung", - "Please use this option carefully!": "Bitte mit Vorsicht nutzen!", - "Logout": "Ausloggen", - "notificationDescription": "Benachrichtigungen müssen einem Monitor zugewiesen werden, damit diese funktionieren.", + "disableauth.message2": "Dies ist für Szenarien gedacht, {intendThirdPartyAuth} vor Uptime Kuma geschaltet hast, wie z.B. Cloudflare Access, Authelia oder andere Authentifizierungsmechanismen.", + "where you intend to implement third-party authentication": "in denen du eine externe Authentifizierung", + "Please use this option carefully!": "Bitte nutze diese Option mit Vorsicht!", + "Logout": "Abmelden", + "notificationDescription": "Benachrichtigungen müssen einem Monitor zugewiesen werden, damit sie funktionieren.", "Leave": "Verlassen", "I understand, please disable": "Ich verstehe, bitte deaktivieren", "Confirm": "Bestätigen", @@ -98,49 +98,49 @@ "Login": "Einloggen", "No Monitors, please": "Keine Monitore, bitte", "add one": "hinzufügen", - "Notification Type": "Benachrichtigungsdienst", + "Notification Type": "Benachrichtigungstyp", "Email": "E-Mail", - "Test": "Test", - "Certificate Info": "Zertifikatsinformation", - "keywordDescription": "Ein Suchwort in der HTML- oder JSON-Ausgabe finden. Bitte beachte: es wird zwischen Groß-/Kleinschreibung unterschieden.", - "deleteMonitorMsg": "Bist du sicher, dass du den Monitor löschen möchtest?", + "Test": "Testen", + "Certificate Info": "Zertifikatsinformationen", + "keywordDescription": "Suchbegriff in der HTML- oder JSON-Antwort finden. Groß-/Kleinschreibung wird beachtet.", + "deleteMonitorMsg": "Möchtest du diesen Monitor wirklich löschen?", "deleteNotificationMsg": "Möchtest du diese Benachrichtigung wirklich für alle Monitore löschen?", - "resolverserverDescription": "Cloudflare ist als der Standardserver festgelegt. Dieser kann jederzeit geändert werden.", - "Resolver Server": "Auflösungsserver", - "rrtypeDescription": "Wähle den RR-Typ aus, welchen du überwachen möchtest", + "resolverserverDescription": "Cloudflare ist der Standardserver. Du kannst den DNS-Server jederzeit ändern.", + "Resolver Server": "DNS-Server", + "rrtypeDescription": "Wähle den RR-Typ, den du überwachen möchtest", "Last Result": "Letztes Ergebnis", - "pauseMonitorMsg": "Bist du sicher, dass du den Monitor pausieren möchtest?", - "clearEventsMsg": "Bist du sicher, dass du alle Ereignisse für diesen Monitor löschen möchtest?", - "clearHeartbeatsMsg": "Bist du sicher, dass du alle Prüfintervalle für diesen Monitor löschen möchtest?", - "Clear Data": "Lösche Daten", + "pauseMonitorMsg": "Möchtest du den Monitor wirklich pausieren?", + "clearEventsMsg": "Möchtest du wirklich alle Ereignisse für diesen Monitor löschen?", + "clearHeartbeatsMsg": "Möchtest du wirklich alle Heartbeat-Einträge für diesen Monitor löschen?", + "Clear Data": "Daten löschen", "Events": "Ereignisse", - "Heartbeats": "Prüfintervalle", - "confirmClearStatisticsMsg": "Bist du dir sicher, dass du ALLE Statistiken löschen möchtest?", - "Create your admin account": "Erstelle dein Admin-Konto", - "Repeat Password": "Passwort erneut eingeben", - "Resource Record Type": "Ressourcen Record Typ", - "Export": "Export", - "Import": "Import", + "Heartbeats": "Heartbeats", + "confirmClearStatisticsMsg": "Bist du sicher, dass du ALLE Statistiken löschen möchtest?", + "Create your admin account": "Admin-Konto erstellen", + "Repeat Password": "Passwort wiederholen", + "Resource Record Type": "Resource Record Typ", + "Export": "Exportieren", + "Import": "Importieren", "respTime": "Antw.-Zeit (ms)", "notAvailableShort": "N/A", "Default enabled": "Standardmäßig aktiviert", "Apply on all existing monitors": "Auf alle existierenden Monitore anwenden", - "enableDefaultNotificationDescription": "Für jeden neuen Monitor wird diese Benachrichtigung standardmäßig aktiviert. Die Benachrichtigung kann weiterhin für jeden Monitor separat deaktiviert werden.", + "enableDefaultNotificationDescription": "Diese Benachrichtigung wird für jeden neuen Monitor standardmäßig aktiviert. Du kannst sie weiterhin für jeden Monitor einzeln deaktivieren.", "Create": "Erstellen", - "Auto Get": "Auto Get", - "backupDescription": "Es können alle Monitore und Benachrichtigungen in einer JSON-Datei gesichert werden.", - "backupDescription2": "PS: Verlaufs- und Ereignisdaten sind nicht enthalten.", - "backupDescription3": "Sensible Daten wie Benachrichtigungstoken sind in der Exportdatei enthalten, bitte bewahre sie sorgfältig auf.", + "Auto Get": "Automatisch abrufen", + "backupDescription": "Du kannst alle Monitore und Benachrichtigungen in einer JSON-Datei sichern.", + "backupDescription2": "Hinweis: Verlaufs- und Ereignisdaten sind nicht enthalten.", + "backupDescription3": "Sensible Daten wie Benachrichtigungs-Token sind in der Exportdatei enthalten. Bitte bewahre sie sicher auf.", "alertNoFile": "Bitte wähle eine Datei zum Importieren aus.", "alertWrongFileType": "Bitte wähle eine JSON-Datei aus.", - "Clear all statistics": "Lösche alle Statistiken", - "importHandleDescription": "Wähle 'Vorhandene überspringen' aus, wenn jeder Monitor oder jede Benachrichtigung mit demselben Namen übersprungen werden soll. 'Überschreiben' löscht jeden vorhandenen Monitor sowie Benachrichtigungen.", + "Clear all statistics": "Alle Statistiken löschen", + "importHandleDescription": "Wähle 'Vorhandene überspringen', wenn Monitore oder Benachrichtigungen mit demselben Namen ignoriert werden sollen. 'Überschreiben' ersetzt existierende Einträge.", "Skip existing": "Vorhandene überspringen", "Overwrite": "Überschreiben", "Options": "Optionen", - "confirmImportMsg": "Möchtest du das Backup wirklich importieren? Bitte stelle sicher, dass die richtige Import-Option ausgewählt ist.", + "confirmImportMsg": "Möchtest du das Backup wirklich importieren? Bitte stelle sicher, dass die richtige Import-Option gewählt ist.", "Keep both": "Beide behalten", - "twoFAVerifyLabel": "Bitte trage deinen Token ein, um zu verifizieren, dass 2FA funktioniert:", + "twoFAVerifyLabel": "Bitte gib deinen Token ein, um die 2FA zu verifizieren:", "Verify Token": "Token verifizieren", "Setup 2FA": "2FA einrichten", "Enable 2FA": "2FA aktivieren", @@ -148,14 +148,14 @@ "2FA Settings": "2FA-Einstellungen", "confirmEnableTwoFAMsg": "Bist du sicher, dass du 2FA aktivieren möchtest?", "confirmDisableTwoFAMsg": "Bist du sicher, dass du 2FA deaktivieren möchtest?", - "tokenValidSettingsMsg": "Token gültig! Du kannst jetzt die 2FA-Einstellungen speichern.", + "tokenValidSettingsMsg": "Token ist gültig! Du kannst die 2FA-Einstellungen jetzt speichern.", "Two Factor Authentication": "Zwei-Faktor-Authentifizierung", "Active": "Aktiv", "Inactive": "Inaktiv", "Token": "Token", "Show URI": "URI anzeigen", "Tags": "Tags", - "Add New below or Select...": "Einen bestehenden Tag auswählen oder neuen hinzufügen…", + "Add New below or Select...": "Neu hinzufügen oder auswählen…", "Tag with this name already exist.": "Ein Tag mit diesem Namen existiert bereits.", "Tag with this value already exist.": "Ein Tag mit diesem Wert existiert bereits.", "color": "Farbe", @@ -169,27 +169,27 @@ "Purple": "Lila", "Pink": "Pink", "Search...": "Suchen…", - "Heartbeat Retry Interval": "Überprüfungsintervall", - "Resend Notification if Down X times consecutively": "Benachrichtigung erneut senden, wenn inaktiv X Mal hintereinander", - "retryCheckEverySecond": "Alle {0} Sekunden neu versuchen", - "resendEveryXTimes": "Erneut versenden alle {0} mal", - "resendDisabled": "Erneut versenden deaktiviert", + "Heartbeat Retry Interval": "Wiederholungsintervall", + "Resend Notification if Down X times consecutively": "Benachrichtigung erneut senden, wenn X Mal hintereinander 'Offline'", + "retryCheckEverySecond": "Alle {0} Sekunden erneut versuchen", + "resendEveryXTimes": "Alle {0} Mal erneut senden", + "resendDisabled": "Erneutes Senden deaktiviert", "Import Backup": "Backup importieren", "Export Backup": "Backup exportieren", - "Avg. Ping": "Durchschn. Ping", - "Avg. Response": "Durchschn. Antwort", - "Entry Page": "Einstiegsseite", - "statusPageNothing": "Noch ist hier nichts. Bitte füge eine Gruppe oder einen Monitor hinzu.", + "Avg. Ping": "Ø Ping", + "Avg. Response": "Ø Antwortzeit", + "Entry Page": "Startseite", + "statusPageNothing": "Hier ist noch nichts. Bitte füge eine Gruppe oder einen Monitor hinzu.", "No Services": "Keine Dienste", - "All Systems Operational": "Alle Systeme betriebsbereit", + "All Systems Operational": "Alle Systeme funktionieren", "Partially Degraded Service": "Teilweise beeinträchtigter Dienst", "Degraded Service": "Eingeschränkter Dienst", "Add Group": "Gruppe hinzufügen", "Add a monitor": "Monitor hinzufügen", "Edit Status Page": "Statusseite bearbeiten", - "Go to Dashboard": "Gehe zum Dashboard", - "Status Page": "Status-Seite", - "Status Pages": "Status-Seiten", + "Go to Dashboard": "Zum Dashboard", + "Status Page": "Statusseite", + "Status Pages": "Statusseiten", "telegram": "Telegram", "webhook": "Webhook", "smtp": "E-Mail (SMTP)", @@ -204,29 +204,29 @@ "octopush": "Octopush", "promosms": "PromoSMS", "lunasea": "LunaSea", - "apprise": "Apprise (Unterstützung für 50+ Benachrichtigungsdienste)", + "apprise": "Apprise (Support für 50+ Dienste)", "GoogleChat": "Google Chat (nur Google Workspace)", "pushbullet": "Pushbullet", "line": "Line Messenger", "mattermost": "Mattermost", "Primary Base URL": "Primäre Basis-URL", - "Push URL": "Push URL", + "Push URL": "Push-URL", "needPushEvery": "Du solltest diese URL alle {0} Sekunden aufrufen.", "pushOptionalParams": "Optionale Parameter: {0}", "defaultNotificationName": "Mein {notification} Alarm ({number})", "here": "hier", "Required": "Erforderlich", - "Bot Token": "Bot Token", - "wayToGetTelegramToken": "Hier kannst du einen Token erhalten {0}.", - "Chat ID": "Chat ID", - "supportTelegramChatID": "Unterstützt Direkt Chat / Gruppe / Kanal Chat-ID's", - "wayToGetTelegramChatID": "Du kannst deine Chat-ID erhalten, indem du eine Nachricht an den Bot sendest und zu dieser URL gehst, um die chat_id zu sehen:", - "YOUR BOT TOKEN HERE": "HIER DEIN BOT TOKEN", - "chatIDNotFound": "Chat-ID wurde nicht gefunden: bitte sende zuerst eine Nachricht an diesen Bot", - "Post URL": "Post URL", + "Bot Token": "Bot-Token", + "wayToGetTelegramToken": "Du kannst hier einen Token erhalten: {0}.", + "Chat ID": "Chat-ID", + "supportTelegramChatID": "Unterstützt Direktchat / Gruppe / Kanal Chat-IDs", + "wayToGetTelegramChatID": "Du erhältst deine Chat-ID, indem du eine Nachricht an den Bot sendest und diese URL aufrufst:", + "YOUR BOT TOKEN HERE": "HIER DEIN BOT-TOKEN", + "chatIDNotFound": "Chat-ID nicht gefunden: Bitte sende zuerst eine Nachricht an diesen Bot.", + "Post URL": "Post-URL", "Content Type": "Content Type", - "webhookJsonDesc": "{0} ist gut für alle modernen HTTP-Server, wie z.B. Express.js, geeignet", - "webhookFormDataDesc": "{multipart} ist gut für PHP. Das JSON muss mit {decodeFunction} verarbeitet werden", + "webhookJsonDesc": "{0} eignet sich für moderne HTTP-Server wie z.B. Express.js.", + "webhookFormDataDesc": "{multipart} eignet sich für PHP. Das JSON muss mit {decodeFunction} verarbeitet werden.", "secureOptionNone": "Keine / STARTTLS (25, 587)", "secureOptionTLS": "TLS (465)", "Ignore TLS Error": "TLS-Fehler ignorieren", @@ -235,27 +235,27 @@ "To Email": "Empfänger E-Mail", "smtpCC": "CC", "smtpBCC": "BCC", - "Discord Webhook URL": "Discord Webhook URL", - "wayToGetDiscordURL": "Du kannst diese erhalten, indem du zu den Servereinstellungen gehst -> Integrationen -> WebHooks anzeigen -> Neuer WebHook", + "Discord Webhook URL": "Discord Webhook-URL", + "wayToGetDiscordURL": "Zu finden unter: Servereinstellungen -> Integrationen -> WebHooks -> Neuer WebHook", "Bot Display Name": "Bot-Anzeigename", - "Prefix Custom Message": "Benutzerdefinierter Nachrichten Präfix", + "Prefix Custom Message": "Präfix für benutzerdefinierte Nachricht", "Hello @everyone is...": "Hallo {'@'}everyone ist…", - "Webhook URL": "Webhook URL", - "wayToGetTeamsURL": "Wie eine Webhook-URL erstellt werden kann, erfährst du {0}.", + "Webhook URL": "Webhook-URL", + "wayToGetTeamsURL": "Erfahre hier, wie du eine Webhook-URL erstellst: {0}.", "Number": "Nummer", "Recipients": "Empfänger", - "needSignalAPI": "Es wird ein Signal Client mit REST-API benötigt.", - "wayToCheckSignalURL": "Du kannst diese URL aufrufen, um zu sehen, wie du eine einrichtest:", - "signalImportant": "WICHTIG: Gruppen und Nummern können in Empfängern nicht gemischt werden!", - "Application Token": "Anwendungs Token", - "Server URL": "Server URL", + "needSignalAPI": "Es wird ein Signal-Client mit REST-API benötigt.", + "wayToCheckSignalURL": "Rufe diese URL auf, um zu sehen, wie die Einrichtung funktioniert:", + "signalImportant": "WICHTIG: Gruppen und Nummern können bei Empfängern nicht gemischt werden!", + "Application Token": "Anwendungs-Token", + "Server URL": "Server-URL", "Priority": "Priorität", - "Icon Emoji": "Icon Emoji", + "Icon Emoji": "Icon-Emoji", "Channel Name": "Kanalname", "Uptime Kuma URL": "Uptime Kuma URL", - "aboutWebhooks": "Weitere Informationen zu Webhooks auf: {0}", - "aboutChannelName": "Gebe den Kanalnamen ein in {0} Feld Kanalname, falls du den Webhook-Kanal umgehen möchtest. Ex: #other-channel", - "aboutKumaURL": "Wenn du das Feld für die Uptime Kuma URL leer lässt, wird es standardmäßig auf die Projekt-GitHub-Seite gesetzt.", + "aboutWebhooks": "Weitere Informationen zu Webhooks: {0}", + "aboutChannelName": "Gib den Kanalnamen im Feld '{0}' ein, falls du den Standard Webhook-Kanal umgehen möchtest. Bsp: #anderer-kanal", + "aboutKumaURL": "Wenn du das Feld für die Uptime Kuma URL leer lässt, wird standardmäßig auf die GitHub-Projektseite verlinkt.", "emojiCheatSheet": "Emoji Cheat Sheet: {0}", "User Key": "Benutzerschlüssel", "Device": "Gerät", @@ -263,132 +263,132 @@ "Notification Sound": "Benachrichtigungston", "More info on:": "Mehr Infos auf: {0}", "pushoverDesc1": "Notfallpriorität (2) hat standardmäßig 30 Sekunden Auszeit zwischen den Versuchen und läuft nach 1 Stunde ab.", - "pushoverDesc2": "Fülle das Geräte Feld aus, wenn du Benachrichtigungen an verschiedene Geräte senden möchtest.", - "pushoverMessageTtl": "Message TTL (Sekunden)", - "SMS Type": "SMS Typ", - "octopushTypePremium": "Premium (Schnell - zur Benachrichtigung empfohlen)", - "octopushTypeLowCost": "Kostengünstig (Langsam - manchmal vom Betreiber gesperrt)", - "checkPrice": "Prüfe {0} Preise:", + "pushoverDesc2": "Fülle das Feld 'Gerät' aus, wenn du Benachrichtigungen an spezifische Geräte senden möchtest.", + "pushoverMessageTtl": "Nachricht TTL (Sekunden)", + "SMS Type": "SMS-Typ", + "octopushTypePremium": "Premium (Schnell - für Alarme empfohlen)", + "octopushTypeLowCost": "Kostengünstig (Langsam - manchmal vom Betreiber blockiert)", + "checkPrice": "{0}-Preise prüfen:", "octopushLegacyHint": "Verwendest du die Legacy-Version von Octopush (2011-2020) oder die neue Version?", - "Check octopush prices": "Vergleiche die Oktopush Preise {0}.", - "octopushPhoneNumber": "Telefonnummer (Internationales Format, z.B : +49612345678) ", - "octopushSMSSender": "Name des SMS-Absenders : 3-11 alphanumerische Zeichen und Leerzeichen (a-zA-Z0-9)", - "LunaSea Device ID": "LunaSea Geräte ID", - "Apprise URL": "Apprise URL", + "Check octopush prices": "Octopush-Preise {0} überprüfen.", + "octopushPhoneNumber": "Telefonnummer (Internationales Format, z.B.: +4915112345678) ", + "octopushSMSSender": "SMS-Absendername: 3-11 alphanumerische Zeichen und Leerzeichen (a-zA-Z0-9)", + "LunaSea Device ID": "LunaSea Geräte-ID", + "Apprise URL": "Apprise-URL", "Example:": "Beispiel: {0}", "Read more:": "Weiterlesen: {0}", "Status:": "Status: {0}", "Read more": "Weiterlesen", "appriseInstalled": "Apprise ist installiert.", "appriseNotInstalled": "Apprise ist nicht installiert. {0}", - "Access Token": "Zugriffstoken", - "Channel access token": "Kanalzugriffstoken", - "Line Developers Console": "Zeile Entwickler Konsole", + "Access Token": "Zugriffs-Token", + "Channel access token": "Kanalzugriffs-Token", + "Line Developers Console": "Line Entwicklerkonsole", "lineDevConsoleTo": "Line Entwicklerkonsole - {0}", "Basic Settings": "Grundeinstellungen", - "User ID": "User ID", + "User ID": "User-ID", "Messaging API": "Messaging API", - "wayToGetLineChannelToken": "Rufe zuerst {0} auf, erstelle dann einen Provider und Channel (Messaging API). Als nächstes kannst du den Channel access token und die User ID aus den oben genannten Menüpunkten abrufen.", - "Icon URL": "Icon URL", - "aboutIconURL": "Du kannst einen Link zu einem Bild in 'Icon URL' übergeben um das Standardprofilbild zu überschreiben. Wird nicht verwendet, wenn ein Icon Emoji gesetzt ist.", - "aboutMattermostChannelName": "Du kannst den Standardkanal, auf dem der Webhook gesendet wird überschreiben, indem der Kanalnamen in das Feld 'Channel Name' eingeben wird. Dies muss in den Mattermost Webhook-Einstellungen aktiviert werden. Ex: #other-channel", + "wayToGetLineChannelToken": "Rufe zuerst {0} auf, erstelle dann Provider und Channel (Messaging API). Anschließend kannst du den 'Channel access token' und die 'User ID' dort abrufen.", + "Icon URL": "Icon-URL", + "aboutIconURL": "Du kannst hier einen Link zu einem Bild angeben, um das Standardprofilbild zu überschreiben. Wird ignoriert, wenn ein Icon-Emoji gesetzt ist.", + "aboutMattermostChannelName": "Du kannst den Standardkanal überschreiben, indem du den Kanalnamen in das Feld 'Channel Name' eingibst. Dies muss in den Mattermost Webhook-Einstellungen aktiviert sein. Bsp: #anderer-kanal", "matrix": "Matrix", - "promosmsTypeEco": "SMS ECO - billig, aber langsam und oft überladen. Auf polnische Empfänger beschränkt.", - "promosmsTypeFlash": "SMS FLASH - Die Nachricht wird automatisch auf dem Empfängergerät angezeigt. Auf polnische Empfänger beschränkt.", - "promosmsTypeFull": "SMS FULL - Premium Stufe von SMS, es kann der Absendernamen verwendet werden (Der Name musst zuerst registriert werden). Zuverlässig für Warnungen.", - "promosmsTypeSpeed": "SMS SPEED - Höchste Priorität im System. Sehr schnell und zuverlässig, aber teuer (Ungefähr das doppelte von SMS FULL).", - "promosmsPhoneNumber": "Telefonnummer (für polnische Empfänger können die Vorwahlen übersprungen werden)", - "promosmsSMSSender": "Name des SMS-Absenders : vorregistrierter Name oder einer der Standardwerte: InfoSMS, SMS Info, MaxSMS, INFO, SMS", - "Feishu WebHookUrl": "Feishu Webhook URL", - "matrixHomeserverURL": "Heimserver URL (mit http(s):// und optionalen Ports)", + "promosmsTypeEco": "SMS ECO - günstig, aber langsam und oft überlastet. Nur für polnische Empfänger.", + "promosmsTypeFlash": "SMS FLASH - Nachricht wird automatisch auf dem Gerät angezeigt. Nur für polnische Empfänger.", + "promosmsTypeFull": "SMS FULL - Premium-SMS, Absendername möglich (muss registriert werden). Zuverlässig für Alarme.", + "promosmsTypeSpeed": "SMS SPEED - Höchste Priorität. Sehr schnell und zuverlässig, aber teuer (ca. doppelt so teuer wie SMS FULL).", + "promosmsPhoneNumber": "Telefonnummer (für polnische Empfänger kann die Vorwahl weggelassen werden)", + "promosmsSMSSender": "SMS-Absendername: vorregistrierter Name oder Standardwerte (InfoSMS, SMS Info, MaxSMS, INFO, SMS)", + "Feishu WebHookUrl": "Feishu Webhook-URL", + "matrixHomeserverURL": "Homeserver-URL (mit http(s):// und optional Port)", "Internal Room Id": "Interne Raum-ID", - "matrixDesc1": "Die interne Raum-ID findest du im erweiterten Bereich der Raumeinstellungen im Matrix-Client. Es sollte aussehen wie z.B. !QMdRCpUIfLwsfjxye6:home.server.", - "matrixDesc2": "Es wird dringend empfohlen einen neuen Benutzer anzulegen und nicht den Zugriffstoken deines eigenen Matrix-Benutzers zu verwenden. Anderenfalls ermöglicht es vollen Zugriff auf dein Konto und alle Räume, denen du beigetreten bist. Erstelle stattdessen einen neuen Benutzer und lade ihn nur in den Raum ein, in dem du die Benachrichtigung erhalten möchtest. Du kannst den Zugriffstoken erhalten, indem du Folgendes ausführst {0}", + "matrixDesc1": "Die interne Raum-ID findest du in den erweiterten Raumeinstellungen deines Matrix-Clients. Format z.B.: !QMdRCpUIfLwsfjxye6:home.server.", + "matrixDesc2": "Es wird dringend empfohlen, einen neuen Benutzer anzulegen und nicht den Token deines eigenen Matrix-Benutzers zu verwenden, da dies vollen Zugriff auf dein Konto gewährt. Erstelle einen Bot-User und lade ihn in den gewünschten Raum ein. Den Access-Token erhältst du so: {0}", "Method": "Methode", "Body": "Body", "Headers": "Header", - "PushUrl": "Push URL", + "PushUrl": "Push-URL", "HeadersInvalidFormat": "Der Header ist kein gültiges JSON: ", "BodyInvalidFormat": "Der Body ist kein gültiges JSON: ", - "Monitor History": "Monitor Verlauf", - "clearDataOlderThan": "Bewahre die Monitor-Verlaufsdaten für {0} Tage auf.", + "Monitor History": "Monitor-Verlauf", + "clearDataOlderThan": "Monitor-Verlaufsdaten für {0} Tage aufbewahren.", "PasswordsDoNotMatch": "Passwörter stimmen nicht überein.", "records": "Einträge", "One record": "Ein Eintrag", - "steamApiKeyDescription": "Um einen Steam Game Server zu überwachen, wird ein Steam Web-API-Schlüssel benötigt. Dieser kann hier registriert werden: ", + "steamApiKeyDescription": "Um einen Steam-Gameserver zu überwachen, wird ein Steam Web-API-Schlüssel benötigt. Registrierung hier: ", "Current User": "Aktueller Benutzer", - "recent": "Letzte", + "recent": "Kürzlich", "Done": "Fertig", "Info": "Info", "Security": "Sicherheit", - "Steam API Key": "Steam API-Schlüssel", + "Steam API Key": "Steam-API-Schlüssel", "Shrink Database": "Datenbank verkleinern", - "Pick a RR-Type...": "Wähle ein RR-Typ aus…", - "Pick Accepted Status Codes...": "Wähle akzeptierte Statuscodes aus…", + "Pick a RR-Type...": "RR-Typ auswählen…", + "Pick Accepted Status Codes...": "Akzeptierte Statuscodes auswählen…", "Default": "Standard", - "HTTP Options": "HTTP Optionen", + "HTTP Options": "HTTP-Optionen", "Create Incident": "Vorfall erstellen", "Title": "Titel", "Content": "Inhalt", "Style": "Stil", - "info": "info", - "warning": "warnung", - "danger": "gefahr", - "primary": "primär", - "light": "hell", - "dark": "dunkel", + "info": "Info", + "warning": "Warnung", + "danger": "Gefahr", + "primary": "Primär", + "light": "Hell", + "dark": "Dunkel", "Post": "Veröffentlichen", "Please input title and content": "Bitte Titel und Inhalt eingeben", "Created": "Erstellt", "Last Updated": "Zuletzt aktualisiert", "Unpin": "Loslösen", - "Switch to Light Theme": "Zu hellem Thema wechseln", - "Switch to Dark Theme": "Zum dunklen Thema wechseln", + "Switch to Light Theme": "Helles Design aktivieren", + "Switch to Dark Theme": "Dunkles Design aktivieren", "Show Tags": "Tags anzeigen", "Hide Tags": "Tags ausblenden", "Description": "Beschreibung", "No monitors available.": "Keine Monitore verfügbar.", "Add one": "Hinzufügen", "No Monitors": "Keine Monitore", - "Untitled Group": "Gruppe ohne Titel", + "Untitled Group": "Unbenannte Gruppe", "Services": "Dienste", "Discard": "Verwerfen", "Cancel": "Abbrechen", - "Powered by": "Erstellt mit", + "Powered by": "Powered by", "serwersms": "SerwerSMS.pl", - "serwersmsAPIUser": "API Benutzername (inkl. webapi_ prefix)", - "serwersmsAPIPassword": "API Passwort", + "serwersmsAPIUser": "API-Benutzername (inkl. webapi_ Präfix)", + "serwersmsAPIPassword": "API-Passwort", "serwersmsPhoneNumber": "Telefonnummer", - "serwersmsSenderName": "Name des SMS-Absenders (über Kundenportal registriert)", + "serwersmsSenderName": "SMS-Absendername (im Kundenportal registriert)", "stackfield": "Stackfield", "clicksendsms": "ClickSend SMS", - "apiCredentials": "API Zugangsdaten", - "smtpDkimSettings": "DKIM Einstellungen", - "smtpDkimDesc": "Details zur Konfiguration sind in der Nodemailer DKIM {0} zu finden.", + "apiCredentials": "API-Zugangsdaten", + "smtpDkimSettings": "DKIM-Einstellungen", + "smtpDkimDesc": "Konfigurationsdetails sind in der Nodemailer DKIM {0} zu finden.", "documentation": "Dokumentation", - "smtpDkimDomain": "Domain Name", - "smtpDkimKeySelector": "Schlüssel Auswahl", + "smtpDkimDomain": "Domainname", + "smtpDkimKeySelector": "Key Selector", "smtpDkimPrivateKey": "Privater Schlüssel", "smtpDkimHashAlgo": "Hash-Algorithmus (Optional)", - "smtpDkimheaderFieldNames": "Zu validierende Header-Schlüssel (optional)", - "smtpDkimskipFields": "Zu ignorierende Header Schlüssel (optional)", + "smtpDkimheaderFieldNames": "Zu signierende Header-Keys (optional)", + "smtpDkimskipFields": "Zu ignorierende Header-Keys (optional)", "PushByTechulus": "Push by Techulus", "gorush": "Gorush", "alerta": "Alerta", - "alertaApiEndpoint": "API Endpunkt", + "alertaApiEndpoint": "API-Endpunkt", "alertaEnvironment": "Umgebung", - "alertaApiKey": "API Schlüssel", + "alertaApiKey": "API-Schlüssel", "alertaAlertState": "Alarmstatus", "alertaRecoverState": "Wiederherstellungsstatus", - "deleteStatusPageMsg": "Bist du sicher, dass du diese Status-Seite löschen willst?", + "deleteStatusPageMsg": "Bist du sicher, dass du diese Statusseite löschen willst?", "Proxies": "Proxys", "default": "Standard", "enabled": "Aktiviert", "setAsDefault": "Als Standard setzen", "deleteProxyMsg": "Bist du sicher, dass du diesen Proxy für alle Monitore löschen willst?", "proxyDescription": "Proxys müssen einem Monitor zugewiesen werden, um zu funktionieren.", - "enableProxyDescription": "Dieser Proxy wird keinen Effekt auf Monitor-Anfragen haben, bis er aktiviert ist. Du kannst ihn temporär von allen Monitoren nach Aktivierungsstatus deaktivieren.", - "setAsDefaultProxyDescription": "Dieser Proxy wird standardmäßig für alle neuen Monitore aktiviert sein. Du kannst den Proxy immer noch für jeden Monitor einzeln deaktivieren.", + "enableProxyDescription": "Dieser Proxy hat keine Auswirkung auf Monitor-Anfragen, bis er aktiviert ist. Du kannst ihn temporär deaktivieren, ohne die Zuordnung zu löschen.", + "setAsDefaultProxyDescription": "Dieser Proxy wird standardmäßig für alle neuen Monitore aktiviert. Du kannst ihn für einzelne Monitore deaktivieren.", "Certificate Chain": "Zertifikatskette", "Valid": "Gültig", "Invalid": "Ungültig", @@ -397,22 +397,22 @@ "PhoneNumbers": "Telefonnummern", "TemplateCode": "Vorlagencode", "SignName": "Signaturname", - "Sms template must contain parameters: ": "SMS Vorlage muss folgende Parameter enthalten: ", + "Sms template must contain parameters: ": "SMS-Vorlage muss folgende Parameter enthalten: ", "Bark Endpoint": "Bark Endpunkt", - "WebHookUrl": "Webhook URL", + "WebHookUrl": "Webhook-URL", "SecretKey": "Geheimer Schlüssel", "For safety, must use secret key": "Zur Sicherheit muss ein geheimer Schlüssel verwendet werden", - "Device Token": "Gerätetoken", - "Platform": "Platform", + "Device Token": "Geräte-Token", + "Platform": "Plattform", "Huawei": "Huawei", "High": "Hoch", - "Retry": "Wiederholungen", + "Retry": "Wiederholen", "Topic": "Thema", - "WeCom Bot Key": "WeCom Bot Schlüssel", + "WeCom Bot Key": "WeCom Bot-Schlüssel", "Setup Proxy": "Proxy einrichten", - "Proxy Protocol": "Proxy Protokoll", + "Proxy Protocol": "Proxy-Protokoll", "Proxy Server": "Proxy-Server", - "Proxy server has authentication": "Proxy-Server hat Authentifizierung", + "Proxy server has authentication": "Proxy-Server erfordert Authentifizierung", "User": "Benutzer", "Installed": "Installiert", "Not installed": "Nicht installiert", @@ -422,36 +422,36 @@ "Start": "Start", "Stop": "Stop", "Uptime Kuma": "Uptime Kuma", - "Add New Status Page": "Neue Status-Seite hinzufügen", - "Slug": "Slug", - "Accept characters:": "Akzeptierte Zeichen:", - "startOrEndWithOnly": "Nur mit {0} anfangen und enden", + "Add New Status Page": "Neue Statusseite hinzufügen", + "Slug": "Slug (URL-Pfad)", + "Accept characters:": "Erlaubte Zeichen:", + "startOrEndWithOnly": "Darf nur mit {0} beginnen und enden", "No consecutive dashes": "Keine aufeinanderfolgenden Bindestriche", "Next": "Weiter", - "The slug is already taken. Please choose another slug.": "Der Slug ist bereits in Verwendung. Bitte wähle einen anderen.", + "The slug is already taken. Please choose another slug.": "Dieser Slug ist bereits vergeben. Bitte wähle einen anderen.", "No Proxy": "Kein Proxy", "Authentication": "Authentifizierung", - "HTTP Basic Auth": "HTTP Basisauthentifizierung", - "New Status Page": "Neue Status-Seite", + "HTTP Basic Auth": "HTTP Basic Auth", + "New Status Page": "Neue Statusseite", "Page Not Found": "Seite nicht gefunden", "Reverse Proxy": "Reverse Proxy", - "Backup": "Sicherung", + "Backup": "Backup", "About": "Über", - "wayToGetCloudflaredURL": "(Lade cloudflared von {0} herunter)", + "wayToGetCloudflaredURL": "(Lade 'cloudflared' von {0} herunter)", "cloudflareWebsite": "Cloudflare Webseite", "Message:": "Nachricht:", - "Don't know how to get the token? Please read the guide:": "Du weißt nicht, wie man den Token bekommt? Lies die Anleitung dazu:", - "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Die aktuelle Verbindung kann unterbrochen werden, wenn du aktuell über Cloudflare Tunnel verbunden bist. Bist du sicher, dass du es stoppen willst? Gib zur Bestätigung dein aktuelles Passwort ein.", + "Don't know how to get the token? Please read the guide:": "Du weißt nicht, wie man den Token bekommt? Lies die Anleitung:", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Die Verbindung könnte unterbrochen werden, wenn du aktuell über einen Cloudflare Tunnel verbunden bist. Möchtest du wirklich stoppen? Gib zur Bestätigung dein aktuelles Passwort ein.", "Other Software": "Andere Software", - "For example: nginx, Apache and Traefik.": "Zum Beispiel: nginx, Apache und Traefik.", + "For example: nginx, Apache and Traefik.": "Zum Beispiel: Nginx, Apache oder Traefik.", "Please read": "Bitte lesen", "Subject:": "Betreff:", "Valid To:": "Gültig bis:", "Days Remaining:": "Tage verbleibend:", "Issuer:": "Aussteller:", "Fingerprint:": "Fingerabdruck:", - "No status pages": "Keine Status-Seiten", - "Domain Name Expiry Notification": "Benachrichtigung bei Ablauf des Domainnamens", + "No status pages": "Keine Statusseiten", + "Domain Name Expiry Notification": "Benachrichtigung bei Domain-Ablauf", "Customize": "Anpassen", "Custom Footer": "Eigener Footer", "Custom CSS": "Eigenes CSS", @@ -461,52 +461,52 @@ "Domain Names": "Domainnamen", "signedInDisp": "Angemeldet als {0}", "signedInDispDisabled": "Authentifizierung deaktiviert.", - "dnsPortDescription": "DNS Server Port. Standard ist 53. Der Port kann jederzeit geändert werden.", + "dnsPortDescription": "DNS-Server Port. Standard ist 53.", "topic": "Thema", - "topicExplanation": "MQTT Thema für den monitor", + "topicExplanation": "MQTT-Thema für den Monitor", "successMessage": "Erfolgsnachricht", "successMessageExplanation": "MQTT Nachricht, die als Erfolg angesehen wird", "error": "Fehler", - "critical": "kritisch", - "wayToGetPagerDutyKey": "Dieser kann unter Service -> Service Directory -> (Select a service) -> Integrations -> Add integration gefunden werden. Hier muss nach \"Events API V2\" gesucht werden. Mehr informationen {0}", - "Integration Key": "Schlüssel der Integration", - "Integration URL": "URL der Integration", + "critical": "Kritisch", + "wayToGetPagerDutyKey": "Zu finden unter Service -> Service Directory -> (Dienst wählen) -> Integrations -> Add integration. Suche nach \"Events API V2\". Mehr Informationen {0}", + "Integration Key": "Integrationsschlüssel", + "Integration URL": "Integrations-URL", "Auto resolve or acknowledged": "Automatisch lösen oder bestätigen", "do nothing": "nichts tun", "auto acknowledged": "automatisch bestätigen", "auto resolve": "automatisch lösen", "Bark Group": "Bark Gruppe", - "Bark Sound": "Bark Klang", - "HTTP Headers": "HTTP Kopfzeilen", - "Trust Proxy": "Vertrauenswürdiger Proxy", + "Bark Sound": "Bark Ton", + "HTTP Headers": "HTTP-Header", + "Trust Proxy": "Proxy vertrauen", "Proxy": "Proxy", "HomeAssistant": "Home Assistant", - "onebotHttpAddress": "OneBot HTTP Adresse", + "onebotHttpAddress": "OneBot HTTP-Adresse", "onebotMessageType": "OneBot Nachrichtentyp", "onebotGroupMessage": "Gruppe", "onebotPrivateMessage": "Privat", - "onebotUserOrGroupId": "Gruppe/Nutzer ID", - "onebotSafetyTips": "Zur Sicherheit ein access token setzen", + "onebotUserOrGroupId": "Gruppe/Nutzer-ID", + "onebotSafetyTips": "Zur Sicherheit Access-Token setzen", "PushDeer Key": "PushDeer Schlüssel", - "RadiusSecret": "Radius Geheimnis", - "RadiusSecretDescription": "Geteiltes Geheimnis zwischen Client und Server", + "RadiusSecret": "Radius Secret", + "RadiusSecretDescription": "Shared Secret zwischen Client und Server", "RadiusCalledStationId": "ID der angesprochenen Station", "RadiusCalledStationIdDescription": "Identifikation des angesprochenen Geräts", "RadiusCallingStationId": "ID der ansprechenden Station", "RadiusCallingStationIdDescription": "Identifikation des ansprechenden Geräts", - "Certificate Expiry Notification": "Benachrichtigung ablaufendes Zertifikat", - "API Username": "API Nutzername", - "API Key": "API Schlüssel", + "Certificate Expiry Notification": "Benachrichtigung bei Zertifikatsablauf", + "API Username": "API-Benutzername", + "API Key": "API-Schlüssel", "Recipient Number": "Empfängernummer", "From Name/Number": "Von Name/Nummer", - "Leave blank to use a shared sender number.": "Leer lassen um eine geteilte Absendernummer zu nutzen.", - "Octopush API Version": "Octopush API Version", + "Leave blank to use a shared sender number.": "Leer lassen, um eine geteilte Absendernummer zu nutzen.", + "Octopush API Version": "Octopush API-Version", "Legacy Octopush-DM": "Legacy Octopush-DM", "endpoint": "Endpunkt", - "octopushAPIKey": "\"API Schlüssel\" der HTTP API Zugangsdaten im control panel", - "octopushLogin": "\"Login\" der HTTP API Zugangsdaten im control panel", - "promosmsLogin": "API Login Name", - "promosmsPassword": "API Password", + "octopushAPIKey": "\"API Key\" aus den HTTP-API Zugangsdaten im Control Panel", + "octopushLogin": "\"Login\" aus den HTTP-API Zugangsdaten im Control Panel", + "promosmsLogin": "API-Loginname", + "promosmsPassword": "API-Passwort", "pushoversounds pushover": "Pushover (Standard)", "pushoversounds bike": "Fahrrad", "pushoversounds bugle": "Signalhorn", @@ -522,97 +522,97 @@ "pushoversounds pianobar": "Piano Bar", "pushoversounds siren": "Sirene", "pushoversounds spacealarm": "Space Alarm", - "pushoversounds tugboat": "Schlepper Horn", + "pushoversounds tugboat": "Schlepperhorn", "pushoversounds alien": "Außerirdisch (lang)", - "pushoversounds climb": "Ansteigende (lang)", + "pushoversounds climb": "Ansteigend (lang)", "pushoversounds persistent": "Hartnäckig (lang)", "pushoversounds echo": "Pushover Echo (lang)", "pushoversounds updown": "Auf und Ab (lang)", "pushoversounds vibrate": "Nur vibrieren", - "pushoversounds none": "Nichts (Stille)", - "pushyAPIKey": "Geheimer API Schlüssel", - "pushyToken": "Gerätetoken", + "pushoversounds none": "Stumm", + "pushyAPIKey": "Geheimer API-Schlüssel", + "pushyToken": "Geräte-Token", "Show update if available": "Verfügbare Updates anzeigen", - "Also check beta release": "Auch nach Beta Versionen schauen", - "Using a Reverse Proxy?": "Wird ein Reverse Proxy genutzt?", - "Check how to config it for WebSocket": "Prüfen, wie er für die Nutzung mit WebSocket konfiguriert wird", - "Steam Game Server": "Steam Spielserver", + "Also check beta release": "Auch auf Beta-Versionen prüfen", + "Using a Reverse Proxy?": "Nutzt du einen Reverse Proxy?", + "Check how to config it for WebSocket": "Konfiguration für WebSocket prüfen", + "Steam Game Server": "Steam-Gameserver", "Most likely causes:": "Wahrscheinliche Ursachen:", - "The resource is no longer available.": "Die Quelle ist nicht mehr verfügbar.", - "There might be a typing error in the address.": "Es gibt einen Tippfehler in der Adresse.", + "The resource is no longer available.": "Die Ressource ist nicht mehr verfügbar.", + "There might be a typing error in the address.": "Die Adresse enthält möglicherweise einen Tippfehler.", "What you can try:": "Was du versuchen kannst:", - "Retype the address.": "Schreibe die Adresse erneut.", - "Go back to the previous page.": "Gehe zur vorigen Seite.", - "Coming Soon": "Kommt bald", - "wayToGetClickSendSMSToken": "Du kannst einen API Nutzernamen und Schlüssel unter {here} erhalten.", - "Connection String": "Verbindungstext", + "Retype the address.": "Gib die Adresse erneut ein.", + "Go back to the previous page.": "Gehe zur vorherigen Seite zurück.", + "Coming Soon": "Demnächst verfügbar", + "wayToGetClickSendSMSToken": "Du kannst deinen API-Benutzernamen und Schlüssel unter {here} erhalten.", + "Connection String": "Verbindungs-String", "Query": "Abfrage", - "settingsCertificateExpiry": "TLS Zertifikatsablauf", - "certificationExpiryDescription": "HTTPS Monitore senden eine Benachrichtigung, wenn das Zertifikat abläuft in:", - "Setup Docker Host": "Docker Host einrichten", + "settingsCertificateExpiry": "TLS-Zertifikatsablauf", + "certificationExpiryDescription": "HTTPS-Monitore senden eine Benachrichtigung, wenn das Zertifikat in X Tagen abläuft:", + "Setup Docker Host": "Docker-Host einrichten", "Connection Type": "Verbindungstyp", "Docker Daemon": "Docker Daemon", - "deleteDockerHostMsg": "Bist du sicher diesen docker host für alle Monitore zu löschen?", + "deleteDockerHostMsg": "Bist du sicher, dass du diesen Docker-Host für alle Monitore löschen möchtest?", "socket": "Socket", "tcp": "TCP / HTTP", "Docker Container": "Docker Container", - "Container Name / ID": "Container-Bezeichnung / ID", + "Container Name / ID": "Container-Name / ID", "Docker Host": "Docker-Host", "Docker Hosts": "Docker-Hosts", "ntfy Topic": "ntfy Thema", "Domain": "Domain", "Workstation": "Workstation", - "disableCloudflaredNoAuthMsg": "Du bist im nicht-authentifizieren Modus, ein Passwort wird nicht benötigt.", - "trustProxyDescription": "Vertraue 'X-Forwarded-*' headern. Wenn man die richtige Client IP haben möchte und Uptime Kuma hinter einem Proxy wie Nginx oder Apache läuft, sollte dies aktiviert werden.", + "disableCloudflaredNoAuthMsg": "Du bist im Modus ohne Authentifizierung, ein Passwort wird nicht benötigt.", + "trustProxyDescription": "Vertraue 'X-Forwarded-*' Headern. Aktiviere dies, wenn Uptime Kuma hinter einem Proxy (Nginx, Apache) läuft, um die korrekte Client-IP zu erhalten.", "wayToGetLineNotifyToken": "Du kannst hier ein Token erhalten: {0}", "Examples": "Beispiele", - "Home Assistant URL": "Heimassistent-URL", - "Long-Lived Access Token": "Lange gültiges Access Token", - "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Lange gültige Access Token können durch klicken auf den Profilnamen (unten links) und dann einen Klick auf Create Token am Ende erstellt werden. ", + "Home Assistant URL": "Home Assistant URL", + "Long-Lived Access Token": "Langlebiger Access-Token", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Langlebige Access-Token können erstellt werden, indem du auf deinen Profilnamen klickst (unten links), nach unten scrollst und auf 'Token erstellen' klickst. ", "Notification Service": "Benachrichtigungsdienst", - "default: notify all devices": "standard: Alle Geräte benachrichtigen", - "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Eine Liste der Benachrichtigungsdienste kann im Home Assistant unter \"Developer Tools > Services\" gefunden werden, wnen man nach \"notification\" sucht um den Geräte-/Telefonnamen zu finden.", + "default: notify all devices": "Standard: Alle Geräte benachrichtigen", + "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Eine Liste der Benachrichtigungsdienste findest du im Home Assistant unter \"Entwicklerwerkzeuge > Dienste\". Suche nach \"notification\", um deinen Geräte-/Telefonnamen zu finden.", "Automations can optionally be triggered in Home Assistant:": "Automatisierungen können optional im Home Assistant ausgelöst werden:", - "Trigger type:": "Auslöser:", + "Trigger type:": "Auslöser-Typ:", "Event type:": "Ereignistyp:", - "Event data:": "Ereignis daten:", - "Then choose an action, for example switch the scene to where an RGB light is red.": "Dann eine Aktion wählen, zum Beispiel eine Scene wählen in der ein RGB Licht rot ist.", + "Event data:": "Ereignisdaten:", + "Then choose an action, for example switch the scene to where an RGB light is red.": "Wähle dann eine Aktion, z.B. das Aktivieren einer Szene, in der ein RGB-Licht rot leuchtet.", "Frontend Version": "Frontend-Version", - "Frontend Version do not match backend version!": "Die Frontend Version stimmt nicht mit der backend version überein!", + "Frontend Version do not match backend version!": "Die Frontend-Version stimmt nicht mit der Backend-Version überein!", "Maintenance": "Wartung", "statusMaintenance": "Wartung", - "Schedule maintenance": "Geplante Wartung", + "Schedule maintenance": "Wartung planen", "Affected Monitors": "Betroffene Monitore", - "Pick Affected Monitors...": "Wähle betroffene Monitore…", + "Pick Affected Monitors...": "Betroffene Monitore auswählen…", "Start of maintenance": "Beginn der Wartung", - "All Status Pages": "Alle Status Seiten", + "All Status Pages": "Alle Statusseiten", "Select status pages...": "Statusseiten auswählen…", - "recurringIntervalMessage": "Einmal pro Tag ausgeführt | Wird alle {0} Tage ausgführt", - "affectedMonitorsDescription": "Wähle Monitore aus, die von der aktuellen Wartung betroffen sind", - "affectedStatusPages": "Diese Wartungsmeldung auf ausgewählten Statusseiten anzeigen", - "atLeastOneMonitor": "Wähle mindestens einen Monitor", + "recurringIntervalMessage": "Einmal pro Tag | Alle {0} Tage", + "affectedMonitorsDescription": "Wähle die Monitore aus, die von dieser Wartung betroffen sind.", + "affectedStatusPages": "Wartungsmeldung auf ausgewählten Statusseiten anzeigen", + "atLeastOneMonitor": "Wähle mindestens einen Monitor aus", "deleteMaintenanceMsg": "Möchtest du diese Wartung löschen?", - "Base URL": "Basis URL", - "goAlertInfo": "GoAlert ist eine Open-Source Applikation für Rufbereitschaftsplanung, automatische Eskalation und Benachrichtigung (z.B. SMS oder Telefonanrufe). Engagiere automatisch die richtige Person, auf die richtige Art und Weise und zum richtigen Zeitpunkt! {0}", - "goAlertIntegrationKeyInfo": "Bekommt einen generischen API Schlüssel in folgenden Format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\". Normalerweise entspricht dies dem Wert des Token aus der URL.", + "Base URL": "Basis-URL", + "goAlertInfo": "GoAlert ist eine Open-Source-Anwendung für Rufbereitschaftsplanung und automatische Eskalation. {0}", + "goAlertIntegrationKeyInfo": "Verwende einen generischen API-Schlüssel im Format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\". Normalerweise entspricht dies dem Token-Wert aus der URL.", "goAlert": "GoAlert", - "backupOutdatedWarning": "Veraltet: Da viele Funktionen hinzugefügt wurden und diese Sicherungsfunktion nicht mehr gepflegt wird, kann keine vollständige Sicherung erstellen oder wiederherstellen werden.", - "backupRecommend": "Bitte sichere stattdessen das Volume oder den Datenordner (./data/) direkt.", + "backupOutdatedWarning": "Veraltet: Da viele neue Funktionen hinzugefügt wurden, kann diese Sicherungsfunktion keine vollständige Wiederherstellung mehr garantieren.", + "backupRecommend": "Bitte sichere stattdessen direkt das Volume oder den Datenordner (./data/).", "Optional": "Optional", "squadcast": "Squadcast", "SendKey": "SendKey", - "SMSManager API Docs": "SMSManager API Dokumente ", - "Gateway Type": "Gateway Typ", + "SMSManager API Docs": "SMSManager API-Doku ", + "Gateway Type": "Gateway-Typ", "SMSManager": "SMSManager", - "You can divide numbers with": "Du kannst Zahlen teilen mit", + "You can divide numbers with": "Nummern trennen mit", "or": "oder", "recurringInterval": "Intervall", "Recurring": "Wiederkehrend", "Single Maintenance Window": "Einmaliges Wartungsfenster", "Maintenance Time Window of a Day": "Zeitfenster für die Wartung", - "Effective Date Range": "Bereich der Wirksamkeitsdaten (Optional)", - "strategyManual": "Aktiv/Inaktiv Manuell", - "warningTimezone": "Es wird die Zeitzone des Servers verwendet", + "Effective Date Range": "Gültigkeitszeitraum (Optional)", + "strategyManual": "Aktiv/Inaktiv (Manuell)", + "warningTimezone": "Es wird die Zeitzone des Servers verwendet.", "weekdayShortMon": "Mo", "weekdayShortTue": "Di", "weekdayShortWed": "Mi", @@ -620,26 +620,26 @@ "weekdayShortFri": "Fr", "weekdayShortSat": "Sa", "weekdayShortSun": "So", - "dayOfWeek": "Tag der Woche", + "dayOfWeek": "Wochentag", "dayOfMonth": "Tag im Monat", "lastDay": "Letzter Tag", "lastDay1": "Letzter Tag im Monat", - "lastDay2": "Vorletzer Tag im Monat", - "lastDay3": "3. letzter Tag im Monat", - "lastDay4": "4. letzter Tag im Monat", + "lastDay2": "Vorletzter Tag im Monat", + "lastDay3": "Drittletzter Tag im Monat", + "lastDay4": "Viertletzter Tag im Monat", "No Maintenance": "Keine Wartung", "Schedule Maintenance": "Wartung planen", "Edit Maintenance": "Wartung bearbeiten", "pauseMaintenanceMsg": "Möchtest du wirklich pausieren?", - "maintenanceStatus-under-maintenance": "In Wartung", + "maintenanceStatus-under-maintenance": "Wird gewartet", "maintenanceStatus-inactive": "Inaktiv", "maintenanceStatus-scheduled": "Geplant", - "maintenanceStatus-ended": "Ende", + "maintenanceStatus-ended": "Beendet", "maintenanceStatus-unknown": "Unbekannt", "Display Timezone": "Zeitzone anzeigen", - "Server Timezone": "Server Zeitzone", - "Date and Time": "Datum und Zeit", - "DateTime Range": "Datums- und Zeitbereich", + "Server Timezone": "Server-Zeitzone", + "Date and Time": "Datum und Uhrzeit", + "DateTime Range": "Zeitraum", "Strategy": "Strategie", "statusPageMaintenanceEndDate": "Ende", "Help": "Hilfe", @@ -648,97 +648,97 @@ "Enable DNS Cache": "(Veraltet) DNS-Cache für HTTP(s)-Monitore aktivieren", "Enable": "Aktivieren", "Disable": "Deaktivieren", - "Custom Monitor Type": "Benutzerdefinierter Monitortyp", - "webhookAdditionalHeadersDesc": "Legt zusätzliche Kopfzeilen fest, die mit dem Webhook gesendet werden. Jede Kopfzeile sollte als JSON Schlüssel/Wert definiert werden.", - "dnsCacheDescription": "In einigen IPv6-Umgebungen funktioniert es möglicherweise nicht. Deaktiviere es, wenn Probleme auftreten.", - "loadingError": "Die Daten konnten nicht abgerufen werden, bitte später noch einmal versuchen.", + "Custom Monitor Type": "Benutzerdefinierter Monitor-Typ", + "webhookAdditionalHeadersDesc": "Zusätzliche Header, die mit dem Webhook gesendet werden (JSON Key/Value).", + "dnsCacheDescription": "Kann in manchen IPv6-Umgebungen Probleme verursachen. Bei Problemen deaktivieren.", + "loadingError": "Daten konnten nicht abgerufen werden. Bitte versuche es später erneut.", "confirmUninstallPlugin": "Möchtest du dieses Plugin wirklich deinstallieren?", - "grpcMethodDescription": "Der Name der Methode wird in das \"camelCase\"-Format konvertiert z.B. sayHello, check, etc.", - "Passive Monitor Type": "Passiver Monitortyp", - "Specific Monitor Type": "Spezifischer Monitortyp", + "grpcMethodDescription": "Methodenname wird in das \"camelCase\"-Format konvertiert (z.B. sayHello, check).", + "Passive Monitor Type": "Passiver Monitor-Typ", + "Specific Monitor Type": "Spezifischer Monitor-Typ", "webhookAdditionalHeadersTitle": "Zusätzliche Header", "Packet Size": "Paketgröße", "IconUrl": "Symbol-URL", - "wayToGetZohoCliqURL": "Wie eine Webhook URL erstellt werden kann, erfährst du {0}.", - "dataRetentionTimeError": "Aufbewahrungszeit muss 0 oder größer sein", + "wayToGetZohoCliqURL": "Erfahre hier, wie du eine Webhook-URL erstellst: {0}.", + "dataRetentionTimeError": "Aufbewahrungszeit muss 0 oder größer sein.", "infiniteRetention": "Für unendliche Aufbewahrung auf 0 setzen.", - "confirmDeleteTagMsg": "Möchtest du dieses Tag wirklich löschen? Monitore, die mit diesem Tag verknüpft sind, werden nicht gelöscht.", - "enableGRPCTls": "Senden von gRPC-Anforderungen mit TLS-Verbindung zulassen", + "confirmDeleteTagMsg": "Möchtest du dieses Tag wirklich löschen? Verknüpfte Monitore bleiben erhalten.", + "enableGRPCTls": "Senden von gRPC-Anforderungen mit TLS zulassen", "ZohoCliq": "ZohoCliq", "Monitor": "Überwachung | Monitore", "plugin": "Plugin | Plugins", "install": "Installieren", "installing": "Installiere", "uninstall": "Deinstallieren", - "uninstalling": "Deinstallation", + "uninstalling": "Deinstalliere", "markdownSupported": "Markdown-Syntax unterstützt", "wayToGetKookBotToken": "Erstelle eine Anwendung und erhalte den Bot-Token unter {0}", - "wayToGetKookGuildID": "Schalte den „Entwicklermodus“ in den Kook-Einstellungen ein und klicke mit der rechten Maustaste auf die Gilde, um die ID zu erhalten", - "Guild ID": "Guild-ID", - "Free Mobile User Identifier": "Kostenlose mobile Benutzerkennung", - "Free Mobile API Key": "Kostenloser Mobile API-Schlüssel", - "Enable TLS": "Aktiviere TLS", - "Proto Service Name": "Name des Proto-Dienstes", - "Proto Method": "Proto-Methode", - "Proto Content": "Proto-Inhalt", - "Economy": "Wirtschaft", - "Lowcost": "Kostengünstig", + "wayToGetKookGuildID": "Aktiviere den 'Entwicklermodus' in den Kook-Einstellungen und rechtsklicke auf die Gilde, um die ID zu erhalten", + "Guild ID": "Gilden-ID", + "Free Mobile User Identifier": "Free Mobile Nutzerkennung", + "Free Mobile API Key": "Free Mobile API-Schlüssel", + "Enable TLS": "TLS aktivieren", + "Proto Service Name": "Proto Service Name", + "Proto Method": "Proto Method", + "Proto Content": "Proto Content", + "Economy": "Economy", + "Lowcost": "Günstig", "high": "hoch", - "promosmsAllowLongSMS": "Erlaube lange SMS", - "General Monitor Type": "Allgemeiner Monitortyp", + "promosmsAllowLongSMS": "Lange SMS erlauben", + "General Monitor Type": "Allgemeiner Monitor-Typ", "smseagle": "SMSEagle", "smseagleTo": "Telefonnummer(n)", "smseagleGroup": "Telefonbuch Gruppenname(n)", "smseagleContact": "Telefonbuch Kontaktname(n)", "smseagleRecipientType": "Empfängertyp", - "smseagleRecipient": "Empfänger (mehrere müssen durch Komma getrennt werden)", + "smseagleRecipient": "Empfänger (mehrere mit Komma trennen)", "smseagleToken": "API-Zugriffstoken", - "smseagleUrl": "Ihre SMSEagle-Geräte-URL", + "smseagleUrl": "Deine SMSEagle Geräte-URL", "Kook": "Kook", "smseagleEncoding": "Als Unicode senden (Standard=GSM-7)", - "smseaglePriority": "Nachrichtenpriorität (0-9, höchste Priorität = 9)", + "smseaglePriority": "Nachrichtenpriorität (0-9, höchste = 9)", "Google Analytics ID": "Google Analytics ID", - "Edit Tag": "bearbeite Tag", - "Server Address": "Server Adresse", - "Learn More": "Erfahre mehr", - "Body Encoding": "Inhaltskodierung", - "Add API Key": "API Schlüssel hinzufügen", + "Edit Tag": "Tag bearbeiten", + "Server Address": "Server-Adresse", + "Learn More": "Mehr erfahren", + "Body Encoding": "Body Encoding", + "Add API Key": "API-Schlüssel hinzufügen", "apiKey-active": "Aktiv", "apiKey-expired": "Abgelaufen", "apiKey-inactive": "Inaktiv", "Expires": "Läuft ab", - "deleteAPIKeyMsg": "Bist du sicher, dass du diesen API Schlüssel löschen willst?", + "deleteAPIKeyMsg": "Bist du sicher, dass du diesen API-Schlüssel löschen willst?", "Generate": "Generieren", - "API Keys": "API Schlüssel", + "API Keys": "API-Schlüssel", "Expiry": "Ablauf", "Expiry date": "Ablaufdatum", - "Don't expire": "Nicht ablaufen", + "Don't expire": "Nie ablaufen", "Continue": "Weiter", - "Add Another": "Hinzufügen", - "Clone Monitor": "Duplikat von", + "Add Another": "Weiteren hinzufügen", + "Clone Monitor": "Monitor duplizieren", "Clone": "Duplizieren", - "cloneOf": "Duplikat von {0}", - "pagertreeIntegrationUrl": "Integrations URL", + "cloneOf": "Kopie von {0}", + "pagertreeIntegrationUrl": "Integrations-URL", "pagertreeUrgency": "Dringlichkeit", "pagertreeSilent": "Leise", "pagertreeLow": "Niedrig", - "pagertreeMedium": "Medium", + "pagertreeMedium": "Mittel", "pagertreeHigh": "Hoch", "pagertreeCritical": "Kritisch", - "pagertreeResolve": "Automatisch Auflösen", - "No API Keys": "Keine API Schlüssel", - "disableAPIKeyMsg": "Bist du sicher, dass du diesen API Schlüssel deaktivieren willst?", + "pagertreeResolve": "Automatisch lösen", + "No API Keys": "Keine API-Schlüssel", + "disableAPIKeyMsg": "Bist du sicher, dass du diesen API-Schlüssel deaktivieren willst?", "pagertreeDoNothing": "Nichts tun", - "wayToGetPagerTreeIntegrationURL": "Nachdem du die Uptime Kuma Integration in PagerTree erstellt hast, kopiere den Endpunkt. Siehe details {0}", - "telegramProtectContent": "Schütze gegen Weiterleiten/Speichern der Nachricht", + "wayToGetPagerTreeIntegrationURL": "Kopiere den Endpunkt nach der Erstellung der Integration in PagerTree. Details siehe {0}", + "telegramProtectContent": "Inhalt schützen (Weiterleiten/Speichern verhindern)", "telegramProtectContentDescription": "Die Bot-Nachrichten in Telegram sind gegen Weiterleitung und Speichern geschützt.", "notificationRegional": "Regional", "Key Added": "Schlüssel hinzugefügt", - "apiKeyAddedMsg": "API Schlüssel wurde hinzugefügt. Bitte notiere den Schlüssel, da er nicht erneut angezeigt wird.", - "telegramMessageThreadID": "(Optional) Nachrichten Thread ID", - "telegramMessageThreadIDDescription": "Optionale eindeutige Kennung für den Ziel-Thread (Thema) des Forums; nur für Forum-Supergroups", - "telegramSendSilently": "Stumm Senden", - "telegramSendSilentlyDescription": "Sende die Nachricht stumm. Nutzer bekommen eine Benachrichtigung ohne Ton.", + "apiKeyAddedMsg": "API-Schlüssel wurde hinzugefügt. Bitte notiere den Schlüssel, er wird nicht erneut angezeigt.", + "telegramMessageThreadID": "(Optional) Nachrichten Thread-ID", + "telegramMessageThreadIDDescription": "Optionale eindeutige Kennung für den Ziel-Thread (Thema) des Forums; nur für Forum-Supergruppen.", + "telegramSendSilently": "Lautlos senden", + "telegramSendSilentlyDescription": "Sende die Nachricht ohne Ton. Nutzer erhalten eine Benachrichtigung, aber kein akustisches Signal.", "Add New Tag": "Neuen Tag hinzufügen", "lunaseaDeviceID": "Geräte-ID", "lunaseaTarget": "Ziel", @@ -750,290 +750,290 @@ "twilioToNumber": "Empfänger", "twilioAuthToken": "Auth Token / API Key Secret", "statusPageRefreshIn": "Aktualisierung in: {0}", - "sameAsServerTimezone": "Gleiche Zeitzone wie Server", + "sameAsServerTimezone": "Wie Server-Zeitzone", "startDateTime": "Start Datum/Uhrzeit", "endDateTime": "Ende Datum/Uhrzeit", "cronExpression": "Cron-Ausdruck", "cronSchedule": "Zeitplan: ", "invalidCronExpression": "Ungültiger Cron-Ausdruck: {0}", - "Show Clickable Link": "Klickbaren Link anzeigen", - "Open Badge Generator": "Abzeichengenerator öffnen", - "Badge Generator": "{0}'s Abzeichen Generator", - "Badge Type": "Abzeichen Typ", + "Show Clickable Link": "Anklickbaren Link anzeigen", + "Open Badge Generator": "Badge-Generator öffnen", + "Badge Generator": "{0}'s Badge Generator", + "Badge Type": "Badge-Typ", "Badge Duration": "Badge Dauer", - "Badge Label": "Abzeichen Label", - "Show Clickable Link Description": "Wenn diese Option aktiviert ist, kann jeder, der Zugriff auf diese Statusseite hat, auf die Monitor-URL zugreifen.", - "Badge Label Color": "Abzeichen Label Farbe", - "Badge Color": "Abzeichen Farbe", - "Badge Label Prefix": "Abzeichen Label Präfix", - "Badge Label Suffix": "Abzeichen Label Suffix", - "Badge Maintenance Color": "Abzeichen Wartung Farbe", - "Badge Warn Color": "Abzeichen Warnung Farbe", - "Badge Style": "Abzeichen Stil", - "Badge value (For Testing only.)": "Abzeichen Wert (nur für Tests)", - "Badge URL": "Abzeichen URL", - "Badge Up Color": "Abzeichen Up Farbe", - "Badge Down Color": "Abzeichen Down Farbe", - "Badge Pending Color": "Abzeichen Pending Farbe", - "Badge Down Days": "Abzeichen Down Tage", - "Monitor Setting": "{0}'s Monitor Einstellung", - "Badge Prefix": "Abzeichen Wert Präfix", - "Badge Suffix": "Abzeichen Wert Suffix", - "Badge Warn Days": "Abzeichen Warnung Tage", + "Badge Label": "Badge-Label", + "Show Clickable Link Description": "Wenn aktiviert, kann jeder Besucher der Statusseite die Monitor-URL aufrufen.", + "Badge Label Color": "Badge Label-Farbe", + "Badge Color": "Badge-Farbe", + "Badge Label Prefix": "Badge Label-Präfix", + "Badge Label Suffix": "Badge Label-Suffix", + "Badge Maintenance Color": "Badge Wartungs-Farbe", + "Badge Warn Color": "Badge Warnungs-Farbe", + "Badge Style": "Badge-Stil", + "Badge value (For Testing only.)": "Badge-Wert (Nur für Tests)", + "Badge URL": "Badge-URL", + "Badge Up Color": "Badge 'Online' Farbe", + "Badge Down Color": "Badge 'Offline' Farbe", + "Badge Pending Color": "Badge 'Ausstehend' Farbe", + "Badge Down Days": "Badge 'Offline' Tage", + "Monitor Setting": "{0}'s Monitor-Einstellungen", + "Badge Prefix": "Badge Wert-Präfix", + "Badge Suffix": "Badge Wert-Suffix", + "Badge Warn Days": "Badge Warnungs-Tage", "Group": "Gruppe", - "Monitor Group": "Monitor Gruppe", + "Monitor Group": "Monitor-Gruppe", "noGroupMonitorMsg": "Nicht verfügbar. Erstelle zunächst einen Gruppenmonitor.", "Close": "Schließen", "chromeExecutableAutoDetect": "Automatische Erkennung", - "chromeExecutableDescription": "Für Docker-Benutzer, die Chromium noch nicht installiert haben, kann es ein paar Minuten dauern, bis es installiert ist und das Testergebnis angezeigt wird. Es benötigt 1 GB Speicherplatz.", - "chromeExecutable": "Chrome/Chromium Ausführbare Datei", - "Invert Keyword": "Schlüsselwort invertieren", - "invertKeywordDescription": "Achte darauf, dass das Schlüsselwort eher fehlt als vorhanden ist.", + "chromeExecutableDescription": "Für Docker-Benutzer: Falls Chromium noch nicht installiert ist, kann die Installation einige Minuten dauern (ca. 1 GB Speicherplatz).", + "chromeExecutable": "Chrome/Chromium Pfad", + "Invert Keyword": "Suchbegriff invertieren", + "invertKeywordDescription": "Alarmieren, wenn der Suchbegriff NICHT vorhanden ist.", "webhookCustomBodyDesc": "Definiere einen benutzerdefinierten HTTP-Body für die Anfrage. Die Template-Variablen {msg}, {heartbeat} und {monitor} werden akzeptiert.", "webhookBodyPresetOption": "Voreinstellung - {0}", "webhookBodyCustomOption": "Benutzerdefinierter Body", - "Request Body": "Anforderungstext", - "Badge Duration (in hours)": "Abzeichen Dauer (in Stunden)", - "Badge Preview": "Abzeichen Vorschau", + "Request Body": "Anfrage-Body", + "Badge Duration (in hours)": "Badge-Dauer (in Stunden)", + "Badge Preview": "Badge-Vorschau", "twilioApiKey": "API-Schlüssel (optional)", - "Notify Channel": "Notify Kanal", - "Enter the list of brokers": "Gib die Liste der Broker ein", + "Notify Channel": "Benachrichtigungskanal", + "Enter the list of brokers": "Liste der Broker eingeben", "Kafka Topic Name": "Kafka Topic Name", "Kafka Producer Message": "Kafka Producer Nachricht", "Enable Kafka SSL": "Kafka SSL aktivieren", "Enable Kafka Producer Auto Topic Creation": "Kafka Producer Auto Topic Creation aktivieren", "Kafka SASL Options": "Kafka SASL Optionen", "Mechanism": "Mechanismus", - "Pick a SASL Mechanism...": "Wähle ein SASL Mechanismus…", - "Authorization Identity": "Authorization Identity", - "AccessKey Id": "AccessKey Id", + "Pick a SASL Mechanism...": "Wähle einen SASL Mechanismus…", + "Authorization Identity": "Autorisierungsidentität", + "AccessKey Id": "AccessKey ID", "Secret AccessKey": "Geheimer Zugriffsschlüssel", "Session Token": "Sitzungs-Token", - "aboutNotifyChannel": "Notify Kanal löst eine Desktop- oder Mobilbenachrichtigung für alle Mitglieder des Kanals aus, unabhängig davon, ob deine Verfügbarkeit auf aktiv oder abwesend eingestellt ist.", + "aboutNotifyChannel": "Löst eine Benachrichtigung für alle Kanalmitglieder aus, unabhängig vom Anwesenheitsstatus.", "Kafka Brokers": "Kafka Brokers", - "Press Enter to add broker": "Drücke Enter um den Broker hinzuzufügen", + "Press Enter to add broker": "Drücke Enter, um den Broker hinzuzufügen", "filterActive": "Aktiv", "filterActivePaused": "Pausiert", "Expected Value": "Erwarteter Wert", "Json Query": "Json-Abfrage", - "tailscalePingWarning": "Um den Tailscale Ping Monitor nutzen zu können, musst du Uptime Kuma ohne Docker installieren und den Tailscale Client auf dem Server installieren.", - "Server URL should not contain the nfty topic": "Die Server-URL sollte das nfty-Thema nicht enthalten", - "pushDeerServerDescription": "Leer lassen um den offiziellen Server zu verwenden", + "tailscalePingWarning": "Um den Tailscale-Ping-Monitor zu nutzen, muss Uptime Kuma ohne Docker installiert sein und der Tailscale-Client auf dem Server laufen.", + "Server URL should not contain the nfty topic": "Die Server-URL darf das nfty-Thema nicht enthalten", + "pushDeerServerDescription": "Leer lassen, um den offiziellen Server zu verwenden", "FlashDuty Severity": "Schweregrad", "nostrRelays": "Nostr Relays", - "gamedigGuessPort": "Gamedig: Vermuteter Port", + "gamedigGuessPort": "Gamedig: Port raten", "Request Timeout": "Zeitüberschreitung der Anfrage", - "styleElapsedTimeShowNoLine": "Anzeigen (keine Zeile)", + "styleElapsedTimeShowNoLine": "Anzeigen (ohne Linie)", "Select": "Auswählen", "selectedMonitorCount": "Ausgewählt: {0}", "PushDeer Server": "PushDeer Server", "nostrRelaysHelp": "Eine Relay-URL pro Zeile", "nostrSender": "Privater Schlüssel des Absenders (nsec)", - "gamedigGuessPortDescription": "Der vom Valve Server Query Protocol verwendete Port kann sich vom Port des Clients unterscheiden. Versuche dies, wenn der Monitor keine Verbindung zum Server herstellen kann.", - "wayToGetFlashDutyKey": "Um Uptime Kuma mit Flashduty zu integrieren: Gehe zu Channels > Wähle einen Channel > Integrationen > Füge eine neue Integration hinzu, wähle Uptime Kuma und kopiere die Push URL.", - "timeoutAfter": "Zeitüberschreitung nach {0} Sekunden", - "styleElapsedTimeShowWithLine": "Anzeigen (mit Zeile)", - "styleElapsedTime": "Verstrichene Zeit unter der Prüfintervallleiste", - "Check/Uncheck": "Aktivieren/Deaktivieren", - "nostrRecipients": "Öffentliche Schlüssel des Empfängers (npub)", - "nostrRecipientsHelp": "npub-Format, eine pro Zeile", - "showCertificateExpiry": "Ablauf des Zertifikats anzeigen", - "noOrBadCertificate": "Kein/schlechtes Zertifikat", - "enableNSCD": "Aktiviere NSCD (Name Service Cache Daemon) zur Zwischenspeicherung aller DNS-Anfragen", + "gamedigGuessPortDescription": "Der vom Valve Server Query Protocol verwendete Port kann vom Client-Port abweichen. Versuche dies, wenn keine Verbindung möglich ist.", + "wayToGetFlashDutyKey": "Flashduty Integration: Gehe zu Channels > Channel wählen > Integrationen > Integration hinzufügen > Uptime Kuma wählen und Push-URL kopieren.", + "timeoutAfter": "Timeout nach {0} Sekunden", + "styleElapsedTimeShowWithLine": "Anzeigen (mit Linie)", + "styleElapsedTime": "Verstrichene Zeit unter der Zeitleiste", + "Check/Uncheck": "Auswählen/Abwählen", + "nostrRecipients": "Öffentliche Schlüssel der Empfänger (npub)", + "nostrRecipientsHelp": "npub-Format, einer pro Zeile", + "showCertificateExpiry": "Zertifikatsablauf anzeigen", + "noOrBadCertificate": "Kein/ungültiges Zertifikat", + "enableNSCD": "Aktiviere NSCD (Name Service Cache Daemon) zum Cachen von DNS-Anfragen", "setupDatabaseChooseDatabase": "Welche Datenbank möchtest du verwenden?", - "setupDatabaseEmbeddedMariaDB": "Du brauchst nichts einzustellen. Dieses Docker-Image hat automatisch eine MariaDB für dich eingerichtet und konfiguriert. Uptime Kuma wird sich mit dieser Datenbank über einen Unix-Socket verbinden.", - "dbName": "Datenbank Name", - "setupDatabaseMariaDB": "Mit externer MariaDB-Datenbank verbinden. Du musst die Verbindungsinformationen für die Datenbank festlegen.", - "setupDatabaseSQLite": "Eine einfache Datenbankdatei, empfohlen für kleinere Bereitstellungen. Vor v2.0.0 verwendete Uptime Kuma SQLite als Standarddatenbank.", + "setupDatabaseEmbeddedMariaDB": "Du musst nichts einstellen. Dieses Docker-Image enthält eine vorkonfigurierte MariaDB. Uptime Kuma verbindet sich automatisch über einen Unix-Socket.", + "dbName": "Datenbank-Name", + "setupDatabaseMariaDB": "Mit externer MariaDB verbinden. Du musst die Verbindungsdaten angeben.", + "setupDatabaseSQLite": "Einfache Datenbankdatei (SQLite). Empfohlen für kleine Installationen (Standard vor v2.0.0).", "Saved.": "Gespeichert.", - "toastSuccessTimeout": "Zeitüberschreitung für Erfolgsbenachrichtigungen", - "toastErrorTimeout": "Zeitüberschreitung für Fehlerbenachrichtigungen", - "monitorToastMessagesLabel": "Toast-Benachrichtigungen überwachen", - "monitorToastMessagesDescription": "Toast-Benachrichtigungen für Monitore verschwinden nach einer bestimmten Zeit in Sekunden. Auf -1 setzen, um die Zeitüberschreitung zu deaktivieren. Der Wert 0 deaktiviert die Toast-Benachrichtigungen.", - "Bark API Version": "Bark API Version", - "pushViewCode": "Wie verwendet man den Push-Monitor? (Code anzeigen)", + "toastSuccessTimeout": "Timeout für Erfolgsmeldungen", + "toastErrorTimeout": "Timeout für Fehlermeldungen", + "monitorToastMessagesLabel": "Toast-Benachrichtigungen für Monitore", + "monitorToastMessagesDescription": "Zeit in Sekunden, bis Monitor-Benachrichtigungen verschwinden (-1 zum Deaktivieren des Timeouts, 0 zum Deaktivieren der Benachrichtigung).", + "Bark API Version": "Bark API-Version", + "pushViewCode": "Wie nutze ich den Push-Monitor? (Code anzeigen)", "pushOthers": "Sonstige", "programmingLanguages": "Programmiersprachen", - "authInvalidToken": "Ungültiges Token.", + "authInvalidToken": "Ungültiger Token.", "authIncorrectCreds": "Falscher Benutzername oder falsches Passwort.", "2faAlreadyEnabled": "2FA ist bereits aktiviert.", "2faEnabled": "2FA ist aktiviert.", "2faDisabled": "2FA ist deaktiviert.", - "successResumed": "Erfolgreich wiederaufgenommen.", + "successResumed": "Erfolgreich fortgesetzt.", "successPaused": "Erfolgreich pausiert.", "successDeleted": "Erfolgreich gelöscht.", "successEdited": "Erfolgreich bearbeitet.", - "successBackupRestored": "Sicherung erfolgreich wiederhergestellt.", + "successBackupRestored": "Backup erfolgreich wiederhergestellt.", "successDisabled": "Erfolgreich deaktiviert.", "successEnabled": "Erfolgreich aktiviert.", "tagNotFound": "Tag nicht gefunden.", "authUserInactiveOrDeleted": "Der Benutzer ist inaktiv oder gelöscht.", "successAdded": "Erfolgreich hinzugefügt.", "successAuthChangePassword": "Das Passwort wurde erfolgreich aktualisiert.", - "foundChromiumVersion": "Gefunden Chromium/Chrome. Version: {0}", + "foundChromiumVersion": "Chromium/Chrome gefunden. Version: {0}", "Reset Token": "Token zurücksetzen", "leave blank for default subject": "leer lassen für Standard-Betreff", "emailCustomBody": "Benutzerdefinierter Body", - "leave blank for default body": "leer lassen für Standard Body", + "leave blank for default body": "leer lassen für Standard-Body", "emailTemplateServiceName": "Dienst Name", "emailTemplateStatus": "Status", - "emailTemplateMsg": "Nachricht der Benachrichtigung", - "liquidIntroduction": "Die Templatierbarkeit wird durch die Liquid Templating Language erreicht. Hinweise zur Verwendung findest du auf {0}. Dies sind die verfügbaren Variablen:", + "emailTemplateMsg": "Benachrichtigungstext", + "liquidIntroduction": "Vorlagen verwenden die 'Liquid Templating Language'. Anleitung: {0}. Verfügbare Variablen:", "emailCustomisableContent": "Anpassbarer Inhalt", - "smtpLiquidIntroduction": "Die folgenden beiden Felder können mit der Liquid Templating Language angepasst werden. Eine Anleitung zur Verwendung findest du in der {0}. Dies sind die verfügbaren Variablen:", + "smtpLiquidIntroduction": "Diese Felder unterstützen Liquid-Templates. Anleitung: {0}. Verfügbare Variablen:", "emailTemplateHostnameOrURL": "Hostname oder URL", - "emailTemplateLimitedToUpDownNotification": "nur bei UP/DOWN-Heartbeats verfügbar, sonst null", - "templateMsg": "Nachricht der Benachrichtigung", - "templateHeartbeatJSON": "Objekt, das den Heartbeat beschreibt", - "templateMonitorJSON": "Objekt zur Beschreibung des Monitors", - "templateLimitedToUpDownCertNotifications": "nur verfügbar für UP/DOWN/Zertifikat-Ablaufbenachrichtigungen", - "templateLimitedToUpDownNotifications": "nur für UP/DOWN-Benachrichtigungen verfügbar", - "emailTemplateMonitorJSON": "Objekt zur Beschreibung des Monitors", - "emailTemplateHeartbeatJSON": "Objekt, das den Heartbeat beschreibt", - "GrafanaOncallUrl": "Grafana Oncall URL", - "noDockerHostMsg": "Nicht verfügbar. Richte zunächst einen Docker-Host ein.", + "emailTemplateLimitedToUpDownNotification": "nur bei UP/DOWN-Ereignissen verfügbar, sonst null", + "templateMsg": "Benachrichtigungstext", + "templateHeartbeatJSON": "Heartbeat-Objekt", + "templateMonitorJSON": "Monitor-Objekt", + "templateLimitedToUpDownCertNotifications": "nur bei UP/DOWN/Zertifikat-Ablauf verfügbar", + "templateLimitedToUpDownNotifications": "nur bei UP/DOWN verfügbar", + "emailTemplateMonitorJSON": "Monitor-Objekt", + "emailTemplateHeartbeatJSON": "Heartbeat-Objekt", + "GrafanaOncallUrl": "Grafana OnCall URL", + "noDockerHostMsg": "Nicht verfügbar. Richte zuerst einen Docker-Host ein.", "DockerHostRequired": "Bitte Docker-Host für diesen Monitor festlegen.", - "Browser Screenshot": "Browser Screenshot", + "Browser Screenshot": "Browser-Screenshot", "setup a new monitor group": "Neue Monitorgruppe einrichten", - "Add a new expiry notification day": "Neuen Tag für Auslaufbenachrichtigung hinzufügen", - "Remote Browsers": "Remote Browser", - "Remote Browser": "Remote Browser", - "Add a Remote Browser": "Remote Browser hinzufügen", - "Remote Browser not found!": "Remote Browser nicht gefunden!", - "remoteBrowsersDescription": "Remote Browser sind eine Alternative zur lokalen Ausführung von Chromium. Einrichtung mit einem Dienst wie browserless.io oder verbinde mit deinem Eigenen", - "self-hosted container": "Selbstverwalteter Container", - "remoteBrowserToggle": "Standardmäßig läuft Chromium innerhalb des Uptime-Kuma-Containers. Du kannst einen Remote-Browser verwenden, indem du diesen Schalter umlegst.", - "useRemoteBrowser": "Verwende einen Remote Browser", - "deleteRemoteBrowserMessage": "Bist du sicher, dass du diesen Remote Browser für alle Monitore löschen möchtest?", - "Remove the expiry notification": "Tag für Auslaufbenachrichtigung löschen", - "openModalTo": "Modal öffnen nach {0}", + "Add a new expiry notification day": "Neuen Tag für Ablaufbenachrichtigung hinzufügen", + "Remote Browsers": "Remote-Browser", + "Remote Browser": "Remote-Browser", + "Add a Remote Browser": "Remote-Browser hinzufügen", + "Remote Browser not found!": "Remote-Browser nicht gefunden!", + "remoteBrowsersDescription": "Remote-Browser sind eine Alternative zum lokalen Chromium. Nutze Dienste wie browserless.io oder hoste selbst.", + "self-hosted container": "Selbstgehosteter Container", + "remoteBrowserToggle": "Standardmäßig läuft Chromium im Uptime-Kuma-Container. Aktiviere dies, um einen Remote-Browser zu nutzen.", + "useRemoteBrowser": "Remote-Browser verwenden", + "deleteRemoteBrowserMessage": "Möchtest du diesen Remote-Browser wirklich für alle Monitore löschen?", + "Remove the expiry notification": "Ablaufbenachrichtigung entfernen", + "openModalTo": "Modal öffnen: {0}", "Add a domain": "Domain hinzufügen", "Remove domain": "Domain '{0}' entfernen", - "successKeyword": "Erfolgsschlüsselwort", - "successKeywordExplanation": "MQTT-Schlüsselwort, das als Erfolg gewertet wird", - "settingUpDatabaseMSG": "Die Datenbank wird eingerichtet. Dies kann einen Moment dauern, bitte habe Geduld.", + "successKeyword": "Erfolgs-Suchbegriff", + "successKeywordExplanation": "MQTT-Suchbegriff, der als Erfolg gewertet wird", + "settingUpDatabaseMSG": "Datenbank wird eingerichtet. Dies kann einen Moment dauern...", "Search monitored sites": "Überwachte Seiten durchsuchen", - "statusPageSpecialSlugDesc": "Spezieller Slug {0}: diese Seite wird angezeigt, wenn kein Slug angegeben wird", - "ntfyPriorityHelptextAllEvents": "Alle Ereignisse werden mit der höchsten Priorität gesendet", - "ntfyPriorityHelptextAllExceptDown": "Alle Ereignisse werden mit dieser Priorität gesendet, außer {0}-Ereignisse, die eine Priorität von {1} haben", + "statusPageSpecialSlugDesc": "Spezieller Slug {0}: Diese Seite wird angezeigt, wenn kein Slug angegeben wird.", + "ntfyPriorityHelptextAllEvents": "Alle Ereignisse werden mit höchster Priorität gesendet", + "ntfyPriorityHelptextAllExceptDown": "Alle Ereignisse nutzen diese Priorität, außer {0}-Ereignisse (Priorität {1})", "What is a Remote Browser?": "Was ist ein Remote-Browser?", "Channel access token (Long-lived)": "Channel-Token (langlebig)", - "Your User ID": "Deine Benutzer-ID", - "wayToGetHeiiOnCallDetails": "Wie man die Trigger-ID und API-Schlüssel erhält, wird in der {Dokumentation} erklärt", + "Your User ID": "Deine User-ID", + "wayToGetHeiiOnCallDetails": "Trigger-ID und API-Schlüssel findest du in der {Dokumentation}", "documentationOf": "{0} Dokumentation", - "gtxMessagingToHint": "Internationales Format, mit vorangestelltem \"+\" ({e164}, {e212} oder {e214})", - "From Phone Number / Transmission Path Originating Address (TPOA)": "Von Telefonnummer / Transmission Path Originating Address (TPOA)", - "To Phone Number": "Zur Telefonnummer", - "gtxMessagingApiKeyHint": "Du findest deinen API-Schlüssel unter: Meine Routing-Konten > Kontoinformationen anzeigen > API-Anmeldeinformationen > REST-API (v2.x)", - "gtxMessagingFromHint": "Auf Mobiltelefonen sieht der Empfänger die TPOA als Absender der Nachricht. Erlaubt sind bis zu 11 alphanumerische Zeichen, eine Kurzwahlnummer, die lokale Langwahlnummer oder internationale Nummern ({e164}, {e212} oder {e214})", + "gtxMessagingToHint": "Internationales Format mit führendem \"+\" ({e164}, {e212} oder {e214})", + "From Phone Number / Transmission Path Originating Address (TPOA)": "Von Telefonnummer / TPOA", + "To Phone Number": "An Telefonnummer", + "gtxMessagingApiKeyHint": "API-Schlüssel unter: Meine Routing-Konten > Kontoinformationen > API-Anmeldeinformationen > REST-API (v2.x)", + "gtxMessagingFromHint": "Auf Mobiltelefonen sieht der Empfänger die TPOA als Absender. Erlaubt: bis zu 11 alphanumerische Zeichen, Shortcode, lokale Langwahl oder internationale Nummern.", "Alphanumeric (recommended)": "Alphanumerisch (empfohlen)", "Telephone number": "Telefonnummer", "Originator": "Absender", - "cellsyntOriginator": "Sichtbar auf dem Mobiltelefon des Empfängers als Absender der Nachricht. Zulässige Werte und Funktion hängen vom Parametertyp ab.", + "cellsyntOriginator": "Wird auf dem Handy des Empfängers als Absender angezeigt.", "Destination": "Ziel", - "Allow Long SMS": "Lange SMS zulassen", - "cellsyntSplitLongMessages": "Teile lange Nachrichten in bis zu 6 Teile. 153 x 6 = 918 Zeichen.", + "Allow Long SMS": "Lange SMS erlauben", + "cellsyntSplitLongMessages": "Lange Nachrichten in bis zu 6 Teile splitten (153 x 6 = 918 Zeichen).", "max 15 digits": "max. 15 Ziffern", "max 11 alphanumeric characters": "max. 11 alphanumerische Zeichen", - "Originator type": "Typ des Absenders", - "cellsyntOriginatortypeAlphanumeric": "Alphanumerische Zeichenfolge (max. 11 alphanumerische Zeichen). Die Empfänger können nicht auf die Nachricht antworten.", - "cellsyntOriginatortypeNumeric": "Numerischer Wert (max. 15 Stellen) mit Telefonnummer im internationalen Format ohne Vorwahl 00 (Beispiel UK-Nummer 07920 110 000 sollte auf 447920110000 gesetzt werden). Empfänger können auf die Nachricht antworten.", - "cellsyntDestination": "Telefonnummer des Empfängers im internationalen Format mit führender 00, gefolgt von der Landesvorwahl, z. B. 00447920110000 für die britische Nummer 07920 110 000 (insgesamt maximal 17 Ziffern). Maximal 25000 kommagetrennte Empfänger pro HTTP-Anfrage.", - "callMeBotGet": "Hier kannst du einen Endpunkt für {0}, {1} und {2} generieren. Denke daran, dass der Durchsatz möglicherweise begrenzt ist. Die Durchsatzbegrenzung ist: {3}", - "wayToGetWhapiUrlAndToken": "Du kannst die API-URL und das Token erhalten, indem du in deinen gewünschten Channel von {0} gehst", + "Originator type": "Absendertyp", + "cellsyntOriginatortypeAlphanumeric": "Alphanumerisch (max. 11 Zeichen). Empfänger können NICHT antworten.", + "cellsyntOriginatortypeNumeric": "Numerisch (max. 15 Stellen, intl. Format ohne 00). Empfänger KÖNNEN antworten.", + "cellsyntDestination": "Telefonnummer im intl. Format (führende 00, dann Landesvorwahl). Max 25.000 Empfänger pro Request.", + "callMeBotGet": "Generiere hier einen Endpunkt für {0}, {1} und {2}. Beachte mögliche Ratenlimits: {3}", + "wayToGetWhapiUrlAndToken": "API-URL und Token erhältst du im gewünschten Kanal von {0}", "whapiRecipient": "Telefonnummer / Kontakt-ID / Gruppen-ID", - "API URL": "API URL", - "wayToWriteWhapiRecipient": "Die Rufnummer mit der internationalen Vorwahl, aber ohne das Pluszeichen am Anfang ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}).", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Gib entweder den Hostnamen des Servers ein, mit dem eine Verbindung hergestellt werden soll, oder {localhost}, wenn ein {local_mta} verwendet werden soll", - "locally configured mail transfer agent": "Lokal konfigurierter Mail-Transfer-Agent", + "API URL": "API-URL", + "wayToWriteWhapiRecipient": "Rufnummer mit intl. Vorwahl (ohne '+'), Kontakt-ID ({1}) oder Gruppen-ID ({2}).", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Gib den Hostnamen des Servers ein oder {localhost}, wenn du einen {local_mta} verwendest.", + "locally configured mail transfer agent": "lokal konfigurierten Mail-Transfer-Agent", "Mentioning": "Erwähnung", "Don't mention people": "Keine Personen erwähnen", "Mention group": "Erwähne {group}", "senderSevenIO": "Absendernummer oder Name", - "receiverSevenIO": "Empfangende Nummer", - "apiKeySevenIO": "SevenIO API Schlüssel", - "wayToGetSevenIOApiKey": "Besuche das Dashboard unter app.seven.io > Entwickler > API Schlüssel > grüne Hinzufügen Schaltfläche", - "receiverInfoSevenIO": "Wenn sich die empfangende Nummer nicht in Deutschland befindet, muss der Nummer die Landesvorwahl vorangestellt werden (z.B. für die Landesvorwahl 1 aus den USA muss 117612121212 anstelle von 017612121212 verwendet werden)", - "Host URL": "Host URL", - "whatHappensAtForumPost": "Erstelle einen neuen Forumsbeitrag. Dadurch werden KEINE Nachrichten in einem bestehenden Beitrag veröffentlicht. Um einen Beitrag in einem bestehenden Beitrag zu erstellen, verwende \"{option}\"", - "Bitrix24 Webhook URL": "Bitrix24 Webhook URL", - "wayToGetBitrix24Webhook": "Du kannst einen Webhook erstellen, indem du die Schritte unter {0} befolgst", - "bitrix24SupportUserID": "Gib deine User-ID in Bitrix24 ein. Du kannst die ID über den Link erfahren, indem du auf das Profil des Users gehst.", + "receiverSevenIO": "Empfängernummer", + "apiKeySevenIO": "SevenIO API-Schlüssel", + "wayToGetSevenIOApiKey": "Dashboard: app.seven.io > Entwickler > API Schlüssel > Hinzufügen", + "receiverInfoSevenIO": "Bei Nummern außerhalb Deutschlands muss die Landesvorwahl vorangestellt werden (z.B. 1176... statt 0176... für USA).", + "Host URL": "Host-URL", + "whatHappensAtForumPost": "Erstellt einen neuen Forenbeitrag. Postet KEINE Nachrichten in bestehende Beiträge (nutze dafür '{option}').", + "Bitrix24 Webhook URL": "Bitrix24 Webhook-URL", + "wayToGetBitrix24Webhook": "Erstelle einen Webhook gemäß Anleitung: {0}", + "bitrix24SupportUserID": "Gib deine Bitrix24 User-ID ein (zu finden im Nutzerprofil-Link).", "Command": "Befehl", - "mongodbCommandDescription": "Führe einen MongoDB Befehl gegen die Datenbank aus. Informationen zu den verfügbaren Befehlen findest du in der {documentation}", + "mongodbCommandDescription": "Führe einen MongoDB-Befehl aus. Verfügbare Befehle: {documentation}", "Refresh Interval": "Aktualisierungsintervall", "Refresh Interval Description": "Die Statusseite wird alle {0} Sekunden neu geladen", "Select message type": "Nachrichtentyp auswählen", "Send to channel": "An Kanal senden", - "ignoreTLSErrorGeneral": "TLS/SSL-Fehler für Verbindung ignorieren", - "Create new forum post": "Neuen Forumsbeitrag erstellen", - "postToExistingThread": "An bestehendes Thema/Forumbeitrag senden", - "forumPostName": "Name des Forumsbeitrags", - "threadForumPostID": "Themen-/Forumbeitrags-ID", + "ignoreTLSErrorGeneral": "TLS/SSL-Fehler ignorieren", + "Create new forum post": "Neuen Forenbeitrag erstellen", + "postToExistingThread": "In bestehendes Thema/Beitrag posten", + "forumPostName": "Name des Forenbeitrags", + "threadForumPostID": "Themen-/Beitrags-ID", "e.g. {discordThreadID}": "z.B. {discordThreadID}", - "wayToGetDiscordThreadId": "Das Abrufen einer Thread-/Forumspost-ID ist ähnlich wie das Abrufen einer Channel-ID. Lese mehr darüber, wie man IDs abruft {0}", + "wayToGetDiscordThreadId": "Thread-IDs erhältst du ähnlich wie Channel-IDs. Anleitung: {0}", "smspartnerPhoneNumber": "Telefonnummer(n)", - "smspartnerSenderName": "SMS Absender Name", - "smspartnerSenderNameInfo": "Muss zwischen 3..=11 regulären Zeichen sein", - "smspartnerApiurl": "Den API-Schlüssel findest du im Dashboard unter {0}", - "smspartnerPhoneNumberHelptext": "Die Nummer muss das internationale Format {0}, {1} haben. Mehrere Nummern müssen durch {2} getrennt werden", + "smspartnerSenderName": "SMS-Absendername", + "smspartnerSenderNameInfo": "Muss 3-11 Zeichen lang sein", + "smspartnerApiurl": "API-Schlüssel im Dashboard: {0}", + "smspartnerPhoneNumberHelptext": "Internationales Format {0}, {1}. Mehrere Nummern mit {2} trennen.", "threemaRecipient": "Empfänger", - "threemaRecipientType": "Empfänger Typ", + "threemaRecipientType": "Empfängertyp", "threemaRecipientTypeIdentity": "Threema-ID", "threemaRecipientTypePhone": "Telefonnummer", - "threemaRecipientTypePhoneFormat": "E.164, ohne führendes +", - "threemaRecipientTypeEmail": "E-Mail Adresse", + "threemaRecipientTypePhoneFormat": "E.164 (ohne führendes +)", + "threemaRecipientTypeEmail": "E-Mail-Adresse", "threemaSenderIdentity": "Gateway-ID", - "threemaApiAuthenticationSecret": "Gateway-ID Schlüssel", - "wayToGetThreemaGateway": "Du kannst dich für Threema Gateway {0} registrieren.", + "threemaApiAuthenticationSecret": "Gateway-ID Secret", + "wayToGetThreemaGateway": "Registrierung für Threema Gateway: {0}", "threemaRecipientTypeIdentityFormat": "8 Zeichen", - "threemaSenderIdentityFormat": "8 Zeichen, beginnt normalerweise mit *", - "threemaBasicModeInfo": "Hinweis: Diese Integration verwendet Threema Gateway im Basismodus (serverbasierte Verschlüsselung). Weitere Details siehe {0}.", - "apiKeysDisabledMsg": "API-Schlüssel sind deaktiviert, da die Authentifizierung deaktiviert ist.", - "wayToGetOnesenderUrlandToken": "Du kannst die URL und den Token auf der Onesender-Website erhalten. Weitere Infos {0}", + "threemaSenderIdentityFormat": "8 Zeichen, beginnt meist mit *", + "threemaBasicModeInfo": "Hinweis: Nutzt Threema Gateway im Basic-Modus (serverbasierte Verschlüsselung). Details: {0}.", + "apiKeysDisabledMsg": "API-Schlüssel sind deaktiviert (Authentifizierung ist aus).", + "wayToGetOnesenderUrlandToken": "URL und Token erhältst du auf der Onesender-Website. Infos: {0}", "Lost connection to the socket server.": "Verbindung zum Socket-Server verloren.", "conditionDeleteGroup": "Gruppe löschen", - "greater than": "mehr als", - "snmpOIDHelptext": "Gib die OID für den zu überwachenden Sensor oder Status ein. Verwende Netzwerkverwaltungstools wie MIB-Browser oder SNMP-Software, wenn du bezüglich OID unsicher bist.", - "signl4Docs": "Weitere Informationen zur Konfiguration von SIGNL4 und zum Abrufen der SIGNL4-Webhook-URL siehe {0}.", + "greater than": "größer als", + "snmpOIDHelptext": "Gib die OID für den Sensor/Status ein. Nutze MIB-Browser, falls die OID unbekannt ist.", + "signl4Docs": "Infos zur Konfiguration von SIGNL4 und zur Webhook-URL: {0}", "now": "jetzt", "time ago": "vor {0}", - "Json Query Expression": "Json Query Ausdrck", + "Json Query Expression": "JSON-Abfrageausdruck", "-year": "-Jahr", "and": "und", - "jsonQueryDescription": "Parsen und Extrahieren spezifischer Daten aus der JSON-Antwort des Servers mittels JSON-Abfrage oder Verwendung von \"$\" für die rohe Antwort, wenn kein JSON erwartet wird. Das Ergebnis wird dann mit dem erwarteten Wert in Form von Strings verglichen. Siehe {0} für die Dokumentation und verwende {1}, um mit Abfragen zu experimentieren.", - "cacheBusterParamDescription": "Zufällig generierter Parameter um den Cache zu umgehen.", - "cacheBusterParam": "Den Parameter {0} hinzufügen", - "Community String": "Gemeinschaftliche Zeichenkette", - "snmpCommunityStringHelptext": "Diese Zeichenfolge dient als Passwort zur Authentifizierung und Kontrolle des Zugriffs auf SNMP-fähigen Geräten. Pass sie an die Konfiguration des SNMP-Geräts an.", - "OID (Object Identifier)": "OID (Objekt-Identifikator)", + "jsonQueryDescription": "Daten aus der JSON-Antwort extrahieren (JSON-Query). Nutze '$' für die rohe Antwort. Ergebnis wird als String verglichen. Doku: {0}, Tester: {1}.", + "cacheBusterParamDescription": "Zufälliger Parameter zur Umgehung des Caches.", + "cacheBusterParam": "Parameter {0} hinzufügen", + "Community String": "Community String", + "snmpCommunityStringHelptext": "Passwort für Authentifizierung/Zugriff auf SNMP-Geräte (muss mit Gerätekonfiguration übereinstimmen).", + "OID (Object Identifier)": "OID (Object Identifier)", "Condition": "Bedingung", - "SNMP Version": "SNMP Version", + "SNMP Version": "SNMP-Version", "Please enter a valid OID.": "Gib eine gültige OID ein.", "Host Onesender": "Host Onesender", "Token Onesender": "Token Onesender", - "Recipient Type": "Empfänger Typ", + "Recipient Type": "Empfängertyp", "Private Number": "Private Nummer", - "Group ID": "Gruppen ID", - "privateOnesenderDesc": "Stell sicher, dass die Telefonnummer gültig ist. Um Nachrichten an private Telefonnummer zu senden, z. B.: 628123456789", - "groupOnesenderDesc": "Stell sicher, dass die GroupID gültig ist. Um Nachricht an die Gruppe zu senden, z.B.: 628123456789-342345", + "Group ID": "Gruppen-ID", + "privateOnesenderDesc": "Gültige Telefonnummer erforderlich (z.B. 628123456789).", + "groupOnesenderDesc": "Gültige GroupID erforderlich (z.B. 628123456789-342345).", "Add Remote Browser": "Remote-Browser hinzufügen", "New Group": "Neue Gruppe", "Group Name": "Gruppenname", - "OAuth2: Client Credentials": "OAuth2: Client-Anmeldeinformationen", + "OAuth2: Client Credentials": "OAuth2: Client Credentials", "Authentication Method": "Authentifizierungsmethode", - "Authorization Header": "Autorisierungs-Header", - "Form Data Body": "Formular Data Body", - "OAuth Token URL": "OAuth Token URL", - "Client ID": "Client ID", + "Authorization Header": "Authorization Header", + "Form Data Body": "Form Data Body", + "OAuth Token URL": "OAuth Token-URL", + "Client ID": "Client-ID", "Client Secret": "Client Secret", "OAuth Scope": "OAuth Scope", - "Optional: Space separated list of scopes": "Optional: Durch Leerzeichen getrennte Liste der Scopes", + "Optional: Space separated list of scopes": "Optional: Leerzeichengetrennte Liste der Scopes", "Go back to home page.": "Zurück zur Startseite.", "No tags found.": "Keine Tags gefunden.", - "Cannot connect to the socket server.": "Es kann keine Verbindung zum Socket-Server hergestellt werden.", + "Cannot connect to the socket server.": "Verbindung zum Socket-Server fehlgeschlagen.", "SIGNL4": "SIGNL4", - "SIGNL4 Webhook URL": "SIGNL4 Webhook URL", + "SIGNL4 Webhook URL": "SIGNL4 Webhook-URL", "Conditions": "Bedingungen", "conditionAdd": "Bedingung hinzufügen", "conditionDelete": "Bedingung löschen", @@ -1047,16 +1047,16 @@ "not starts with": "beginnt nicht mit", "ends with": "endet mit", "not ends with": "endet nicht mit", - "less than": "weniger als", - "less than or equal to": "kleiner als oder gleich", - "greater than or equal to": "größer als oder gleich", + "less than": "kleiner als", + "less than or equal to": "kleiner oder gleich", + "greater than or equal to": "größer oder gleich", "record": "Eintrag", - "shrinkDatabaseDescriptionSqlite": "Datenbank {vacuum} für SQLite auslösen. {auto_vacuum} ist bereits aktiviert, aber dies defragmentiert die Datenbank nicht und packt auch nicht einzelne Datenbankseiten neu, wie es der Befehl {vacuum} tut.", + "shrinkDatabaseDescriptionSqlite": "Datenbank {vacuum} für SQLite auslösen. {auto_vacuum} ist aktiv, aber {vacuum} defragmentiert die Datei effizienter.", "ignoredTLSError": "TLS/SSL-Fehler wurden ignoriert", "Message format": "Nachrichtenformat", "Notification Channel": "Benachrichtigungskanal", - "Custom sound to override default notification sound": "Benutzerdefinierter Ton, um den standardmäßigen Benachrichtigungston zu ersetzen", - "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Zeitkritische Benachrichtigungen werden sofort zugestellt, auch wenn sich das Gerät im Nicht stören-Modus befindet.", + "Custom sound to override default notification sound": "Benutzerdefinierter Ton (ersetzt Standardton)", + "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Zeitkritische Benachrichtigungen werden sofort zugestellt, auch im 'Nicht stören'-Modus.", "Debug": "Debug", "Copy": "Kopieren", "CopyToClipboardError": "Konnte nicht in die Zwischenablage kopiert werden: {error}", @@ -1068,167 +1068,167 @@ "CurlDebugInfoOAuth2CCUnsupported": "Der vollständige OAuth-Client-Credential-Flow wird in {curl} nicht unterstützt.{newline}Bitte besorge dir ein Bearer-Token und übergebe ihn über die {oauth2_bearer}-Option.", "CurlDebugInfoProxiesUnsupported": "Die Unterstützung von Proxys im oben genannten {curl}-Befehl ist derzeit nicht implementiert.", "Alphanumerical string and hyphens only": "Nur alphanumerische Zeichen und Bindestriche", - "Correct": "Korrekt", + "Correct": "Richtig", "Harp": "Harfe", "Doorbell": "Türklingel", "Flute": "Flöte", "Money": "Geld", - "Scifi": "Science Fiction", + "Scifi": "SciFi", "Elevator": "Aufzug", "Guitar": "Gitarre", "Sound": "Benachrichtigungston", "Time Sensitive (iOS Only)": "Zeitkritisch (nur iOS)", "From": "Von", - "Can be found on:": "Ist zu finden auf: {0}", - "The phone number of the recipient in E.164 format.": "Die Telefonnummer des Empfängers im E.164-Format.", - "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Entweder eine Text-Absender-ID oder eine Telefonnummer im E.164-Format, wenn du Antworten erhalten möchtest.", - "Send rich messages": "Sende Rich-Text-Nachrichten", - "Fail": "Fehlgeschlagen", + "Can be found on:": "Zu finden auf: {0}", + "The phone number of the recipient in E.164 format.": "Telefonnummer des Empfängers im E.164-Format.", + "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Text-Absender-ID oder E.164-Nummer (für Antworten).", + "Send rich messages": "Rich-Text-Nachrichten senden", + "Fail": "Fehlschlag", "Reveal": "Enthüllen", "Bubble": "Blase", "Clear": "Klar", "Pop": "Pop", - "Arcade": "Spielhalle", + "Arcade": "Arcade", "rabbitmqNodesRequired": "Setze die Knoten für diesen Monitor.", "RabbitMQ Username": "RabbitMQ Benutzername", "RabbitMQ Password": "RabbitMQ Passwort", - "SendGrid API Key": "SendGrid-API-Schlüssel", + "SendGrid API Key": "SendGrid API-Schlüssel", "Separate multiple email addresses with commas": "Mehrere E-Mail-Adressen mit Kommas trennen", - "RabbitMQ Nodes": "RabbitMQ-Verwaltungsknoten", - "rabbitmqNodesDescription": "Gib die URL für die RabbitMQ-Verwaltungsknoten einschließlich Protokoll und Port ein. Beispiel: {0}", - "rabbitmqNodesInvalid": "Benutze eine vollständig qualifizierte URL (beginnend mit 'http') für RabbitMQ-Knoten.", - "rabbitmqHelpText": "Um den Monitor zu benutzen, musst du das Management Plugin in deinem RabbitMQ-Setup aktivieren. Weitere Informationen siehe {rabitmq_documentation}.", - "aboutSlackUsername": "Ändert den Anzeigenamen des Absenders. Wenn du jemanden erwähnen möchtest, füge ihn stattdessen in den Namen ein.", + "RabbitMQ Nodes": "RabbitMQ Management-Knoten", + "rabbitmqNodesDescription": "URL der RabbitMQ Management-Knoten (inkl. Protokoll/Port). Bsp: {0}", + "rabbitmqNodesInvalid": "Nutze eine vollständige URL (beginnend mit 'http') für RabbitMQ-Knoten.", + "rabbitmqHelpText": "Du musst das Management-Plugin in deinem RabbitMQ-Setup aktivieren. Infos: {rabitmq_documentation}.", + "aboutSlackUsername": "Ändert den Anzeigenamen des Absenders. Für Erwähnungen: Füge den Namen stattdessen in den Text ein.", "templateHostnameOrURL": "Hostname oder URL", "telegramUseTemplate": "Benutzerdefinierte Nachrichtenvorlage verwenden", - "telegramTemplateFormatDescription": "Telegram ermöglicht die Verwendung verschiedener Markup-Sprachen für Nachrichten, siehe Telegram {0} für spezifische Details.", + "telegramTemplateFormatDescription": "Telegram unterstützt verschiedene Markup-Sprachen. Details: {0}.", "Plain Text": "Nur Text", - "templateServiceName": "Service-Name", - "YZJ Webhook URL": "YZJ Webhook URL", - "YZJ Robot Token": "YZJ Robot Token", + "templateServiceName": "Dienst-Name", + "YZJ Webhook URL": "YZJ Webhook-URL", + "YZJ Robot Token": "YZJ Robot-Token", "templateStatus": "Status", - "telegramUseTemplateDescription": "Wenn diese Option aktiviert ist, wird die Nachricht unter Verwendung einer benutzerdefinierten Vorlage gesendet.", + "telegramUseTemplateDescription": "Wenn aktiviert, wird die Nachricht mit einer benutzerdefinierten Vorlage gesendet.", "Message Template": "Nachrichtenvorlage", "Template Format": "Vorlagenformat", - "wayToGetWahaApiUrl": "Die URL deiner WAHA-Instanz.", + "wayToGetWahaApiUrl": "URL deiner WAHA-Instanz.", "wahaSession": "Sitzung", "wahaChatId": "Chat-ID (Telefonnummer / Kontakt-ID / Gruppen-ID)", - "wayToGetWahaApiKey": "API-Schlüssel ist der Wert der WHATSAPP_API_KEY-Umgebungsvariable, den du beim Ausführen von WAHA verwendet hast.", - "wayToGetWahaSession": "Von dieser Sitzung aus sendet WAHA Benachrichtigungen an die Chat-ID. Du kannst sie im WAHA Dashboard finden.", - "wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, ohne den anfänglichen Pluszeichen ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Die Benachrichtigungen werden an diese Chat-ID von der WAHA-Sitzung gesendet.", - "telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}", - "telegramServerUrl": "(Optional) Server URL", + "wayToGetWahaApiKey": "Der API-Schlüssel entspricht der Umgebungsvariable WHATSAPP_API_KEY deiner WAHA-Instanz.", + "wayToGetWahaSession": "WAHA sendet Benachrichtigungen von dieser Sitzung an die Chat-ID (siehe WAHA Dashboard).", + "wayToWriteWahaChatId": "Telefonnummer mit intl. Vorwahl (ohne '+'), Kontakt-ID ({1}) oder Gruppen-ID ({2}).", + "telegramServerUrlDescription": "Um Telegram-API-Sperren zu umgehen (China, Iran etc.). Infos: {0}. Standard: {1}", + "telegramServerUrl": "(Optional) Server-URL", "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter", "the smsplanet documentation": "die smsplanet Dokumentation", "Phone numbers": "Telefonnummern", "Sender name": "Absendername", "smsplanetNeedToApproveName": "Muss im Kundenpanel genehmigt werden", "smsplanetApiToken": "Token für die SMSPlanet API", - "smsplanetApiDocs": "Ausführliche Informationen zum Erhalt von API-Tokens findest du in {the_smsplanet_documentation}.", + "smsplanetApiDocs": "Infos zum Erhalt von API-Tokens in {the_smsplanet_documentation}.", "defaultFriendlyName": "Neuer Monitor", - "Use HTML for custom E-mail body": "HTML für benutzerdefinierten E-Mail-Text verwenden", - "smseagleApiv1": "APIv1 (für bestehende Projekte und Abwärtskompatibilität)", - "SpugPush Template Code": "Vorlage Code", + "Use HTML for custom E-mail body": "HTML für E-Mail-Text verwenden", + "smseagleApiv1": "APIv1 (für bestehende Projekte/Abwärtskompatibilität)", + "SpugPush Template Code": "Vorlagen-Code", "FlashDuty Push URL": "Push-URL", - "pingCountLabel": "Maximale Pakete", - "pingNumericDescription": "Wenn diese Option aktiviert ist, werden IP-Adressen anstelle von symbolischen Hostnamen ausgegeben", - "pingPerRequestTimeoutDescription": "Dies ist die maximale Wartezeit (in Sekunden), bevor ein einzelnes Ping-Paket als verloren gilt", - "smtpHelpText": "'SMTPS' testet, ob SMTP/TLS funktioniert; 'Ignoriere TLS' stellt eine Verbindung über Klartext her; 'STARTTLS' stellt eine Verbindung her, gibt einen STARTTLS-Befehl aus und überprüft das Serverzertifikat. Keiner dieser Befehle sendet eine E-Mail.", + "pingCountLabel": "Max. Pakete", + "pingNumericDescription": "Wenn aktiviert, werden IP-Adressen statt Hostnamen ausgegeben.", + "pingPerRequestTimeoutDescription": "Maximale Wartezeit (in Sekunden), bevor ein einzelnes Ping-Paket als verloren gilt.", + "smtpHelpText": "'SMTPS' prüft SMTP/TLS; 'Ignoriere TLS' verbindet unverschlüsselt; 'STARTTLS' verbindet, sendet STARTTLS und prüft das Zertifikat. Es werden KEINE E-Mails gesendet.", "OneChatUserIdOrGroupId": "OneChat Benutzer-ID oder Gruppen-ID", "Disable URL in Notification": "URL in der Benachrichtigung deaktivieren", - "smseagleGroupV2": "Telefonbuchgruppen-ID(s)", - "smseagleContactV2": "Telefonbuch-Kontakt-ID(s)", + "smseagleGroupV2": "Telefonbuch Gruppen-ID(s)", + "smseagleContactV2": "Telefonbuch Kontakt-ID(s)", "smseagleMsgType": "Nachrichtentyp", "smseagleMsgSms": "SMS-Nachricht (Standard)", - "smseagleMsgRing": "Ringruf", - "smseagleMsgTts": "Text-zu-Sprache-Anruf", - "smseagleMsgTtsAdvanced": "Text-zu-Sprache Erweiterter Anruf", + "smseagleMsgRing": "Anruf (Ring)", + "smseagleMsgTts": "Text-zu-Sprache Anruf", + "smseagleMsgTtsAdvanced": "Erweiterter Text-zu-Sprache Anruf", "smseagleDuration": "Dauer (in Sekunden)", - "smseagleTtsModel": "Text-zu-Sprache-Modell-ID", + "smseagleTtsModel": "Text-zu-Sprache Modell-ID", "smseagleApiType": "API-Version", "smseagleApiv2": "APIv2 (empfohlen für neue Integrationen)", - "smseagleDocs": "Dokumentation oder APIv2-Verfügbarkeit prüfen: {0}", - "smseagleComma": "Mehrere müssen durch Komma getrennt werden", - "FlashDuty Push URL Placeholder": "Kopie von der Seite für die Integration von Warnmeldungen", - "pingCountDescription": "Anzahl der zu sendenden Pakete vor dem Anhalten", + "smseagleDocs": "Doku oder APIv2-Verfügbarkeit prüfen: {0}", + "smseagleComma": "Mehrere mit Komma trennen", + "FlashDuty Push URL Placeholder": "Von der Alert-Integrationsseite kopieren", + "pingCountDescription": "Anzahl der zu sendenden Pakete vor dem Stoppen", "pingNumericLabel": "Numerische Ausgabe", - "pingGlobalTimeoutLabel": "Globale Zeitüberschreitung", - "pingGlobalTimeoutDescription": "Gesamtzeit in Sekunden bis zum Ende des Pings, unabhängig von den gesendeten Paketen", - "pingPerRequestTimeoutLabel": "Zeitüberschreitung pro Ping", - "pingIntervalAdjustedInfo": "Das Intervall wird anhand der Paketanzahl, des globalen Timeouts und des Timeouts pro Ping angepasst", + "pingGlobalTimeoutLabel": "Globales Timeout", + "pingGlobalTimeoutDescription": "Gesamtzeit in Sekunden bis zum Abbruch (unabhängig von Paketen).", + "pingPerRequestTimeoutLabel": "Timeout pro Ping", + "pingIntervalAdjustedInfo": "Intervall wird basierend auf Paketanzahl und Timeouts angepasst.", "Custom URL": "Benutzerdefinierte URL", - "customUrlDescription": "Wird als klickbare URL anstelle der des Monitors verwendet.", - "OneChatAccessToken": "OneChat Access Token", + "customUrlDescription": "Wird als Link verwendet (statt der Monitor-URL).", + "OneChatAccessToken": "OneChat Access-Token", "OneChatBotId": "OneChat Bot-ID", "Ip Family": "IP-Familie", "Happy Eyeballs algorithm": "Happy Eyeballs Algorithmus", - "ipFamilyDescriptionAutoSelect": "Verwendet den {happyEyeballs} zur Bestimmung der IP-Familie.", + "ipFamilyDescriptionAutoSelect": "Verwendet {happyEyeballs} zur Bestimmung der IP-Familie.", "Manual": "Manuell", - "ntfyPriorityHelptextPriorityHigherThanDown": "Die reguläre Priorität sollte höher sein als die Priorität {0}. Priorität {1} ist höher als {0} Priorität {2}", + "ntfyPriorityHelptextPriorityHigherThanDown": "Reguläre Priorität sollte höher sein als {0}. Priorität {1} ist höher als {0} Priorität {2}", "ntfyPriorityDown": "Priorität für DOWN-Ereignisse", "Add Tags": "Tags hinzufügen", - "tagAlreadyOnMonitor": "Dieses Tag (Name und Wert) befindet sich bereits auf dem Monitor oder muss noch hinzugefügt werden.", - "tagAlreadyStaged": "Dieses Tag (Name und Wert) wurde für dieses Batch bereits bereitgestellt.", - "tagNameExists": "Ein System-Tag mit diesem Namen existiert bereits. Wähle es aus der Liste aus oder verwende einen anderen Namen.", + "tagAlreadyOnMonitor": "Dieser Tag ist bereits vorhanden oder vorgemerkt.", + "tagAlreadyStaged": "Dieser Tag ist bereits für diesen Batch vorgemerkt.", + "tagNameExists": "Ein System-Tag mit diesem Namen existiert bereits.", "Clear Form": "Formular leeren", "Add Another Tag": "Weiteres Tag hinzufügen", - "Staged Tags for Batch Add": "Bereitgestellte Tags für Batch-Hinzufügen", + "Staged Tags for Batch Add": "Vorgemerkte Tags (Batch)", "pause": "Pause", - "OAuth Audience": "OAuth Zielgruppe", - "Optional: The audience to request the JWT for": "Optional: Die Zielgruppe, für die das JWT angefordert werden soll", - "mqttWebsocketPathInvalid": "Verwende ein gültiges WebSocket-Pfadformat", + "OAuth Audience": "OAuth Audience", + "Optional: The audience to request the JWT for": "Optional: Die 'Audience', für die das JWT angefordert wird", + "mqttWebsocketPathInvalid": "Ungültiges WebSocket-Pfadformat", "Path": "Pfad", - "mqttWebSocketPath": "MQTT WebSocket Pfad", - "mqttWebsocketPathExplanation": "WebSocket-Pfad für MQTT über WebSocket-Verbindungen (z. B. /mqtt)", - "mqttHostnameTip": "Verwende dieses Format {hostnameFormat}", - "Template plain text instead of using cards": "Textvorlage anstelle von Karten", - "issueWithGoogleChatOnAndroidHelptext": "Dies ermöglicht auch die Umgehung von Fehlern im Vorfeld wie {issuetackerURL}", + "mqttWebSocketPath": "MQTT WebSocket-Pfad", + "mqttWebsocketPathExplanation": "Pfad für MQTT über WebSocket (z.B. /mqtt)", + "mqttHostnameTip": "Verwende dieses Format: {hostnameFormat}", + "Template plain text instead of using cards": "Textvorlage statt Karten verwenden", + "issueWithGoogleChatOnAndroidHelptext": "Hilft auch bei Upstream-Bugs wie {issuetackerURL}", "clearAllEventsMsg": "Möchtest du wirklich alle Ereignisse löschen?", "Events cleared successfully": "Ereignisse erfolgreich gelöscht.", "No monitors found": "Keine Monitore gefunden.", "Could not clear events": "{failed}/{total} Ereignisse konnten nicht gelöscht werden", "Clear All Events": "Alle Ereignisse löschen", - "wayToWriteEvolutionRecipient": "Die Telefonnummer mit der internationalen Vorwahl, jedoch ohne das Pluszeichen am Anfang ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}).", - "wayToGetEvolutionUrlAndToken": "Du kannst die API-URL und das Token erhalten, indem du den gewünschten Kanal unter {0} abrufst.", + "wayToWriteEvolutionRecipient": "Telefonnummer mit intl. Vorwahl (ohne '+'), Kontakt-ID ({1}) oder Gruppen-ID ({2}).", + "wayToGetEvolutionUrlAndToken": "API-URL und Token erhältst du im gewünschten Kanal unter {0}.", "evolutionRecipient": "Telefonnummer / Kontakt-ID / Gruppen-ID", "evolutionInstanceName": "Instanzname", - "brevoApiKey": "Brevo API Schlüssel", + "brevoApiKey": "Brevo API-Schlüssel", "brevoApiHelp": "Erstelle hier einen API-Schlüssel: {0}", "brevoFromEmail": "Absender E-Mail", "brevoFromName": "Absender Name", - "brevoLeaveBlankForDefaultName": "für Standardnamen leer lassen", + "brevoLeaveBlankForDefaultName": "leer lassen für Standard", "brevoToEmail": "Empfänger E-Mail", "brevoCcEmail": "CC E-Mail", "brevoBccEmail": "BCC E-Mail", - "brevoSeparateMultipleEmails": "Mehrere E-Mail-Adressen durch Komma trennen", + "brevoSeparateMultipleEmails": "Mehrere Adressen mit Komma trennen", "brevoSubject": "Betreff", - "brevoLeaveBlankForDefaultSubject": "für Standardbetreff leer lassen", - "Conversation token": "Gesprächs-Token", + "brevoLeaveBlankForDefaultSubject": "leer lassen für Standard", + "Conversation token": "Konversations-Token", "Bot secret": "Bot Secret", - "Send DOWN silently": "DOWN still senden", - "Installing a Nextcloud Talk bot requires administrative access to the server.": "Die Installation eines Nextcloud Talk-Bots erfordert Administratorrechte für den Server.", + "Send DOWN silently": "DOWN lautlos senden", + "Installing a Nextcloud Talk bot requires administrative access to the server.": "Die Installation eines Nextcloud Talk-Bots erfordert Administratorrechte.", "Nextcloud host": "Nextcloud Host", - "Send UP silently": "UP still senden", + "Send UP silently": "UP lautlos senden", "auto-select": "Automatische Auswahl", - "supportBaleChatID": "Support-Direkt-Chat / Gruppe / Chat-ID des Kanals", - "wayToGetBaleChatID": "Du kannst deine Chat-ID erhalten, indem du dem Bot eine Nachricht sendest und dann diese URL aufrufst, um die chat_id anzusehen:", - "wayToGetBaleToken": "Du kannst ein Token von {0} erhalten.", + "supportBaleChatID": "Support-Direktchat / Gruppe / Chat-ID", + "wayToGetBaleChatID": "Du erhältst deine Chat-ID, indem du dem Bot eine Nachricht sendest und diese URL aufrufst:", + "wayToGetBaleToken": "Du kannst hier ein Token erhalten: {0}.", "Mention Mobile List": "Mobile Liste erwähnen", "Mention User List": "Benutzer-ID-Liste erwähnen", "Dingtalk Mobile List": "Liste der Mobilgeräte", "Dingtalk User List": "Benutzer-ID-Liste", - "Enter a list of userId": "Gib eine Liste von Benutzer-IDs ein", - "Enter a list of mobile": "Gib eine Liste von Mobilnummern ein", + "Enter a list of userId": "Liste von Benutzer-IDs eingeben", + "Enter a list of mobile": "Liste von Mobilnummern eingeben", "Invalid mobile": "Ungültige Mobilnummer [{mobile}]", "Invalid userId": "Ungültige Benutzer-ID [{userId}]", - "Number of retry attempts if webhook fails": "Anzahl der Wiederholungsversuche (alle 60–180 Sekunden), wenn der Webhook fehlschlägt.", + "Number of retry attempts if webhook fails": "Anzahl der Wiederholungsversuche (alle 60–180 Sek.), wenn der Webhook fehlschlägt.", "Maximum Retries": "Maximale Wiederholungsversuche", "webhookPostMethodDesc": "POST eignet sich für die meisten modernen HTTP-Server.", - "descriptionHelpText": "Wird auf dem internen Dashboard angezeigt. Markdown ist zulässig und wird vor der Anzeige bereinigt (Leerzeichen und Einrückungen bleiben erhalten).", + "descriptionHelpText": "Wird auf dem internen Dashboard angezeigt. Markdown wird unterstützt und bereinigt.", "HTTP Method": "HTTP-Methode", - "webhookGetMethodDesc": "GET sendet Daten als Abfrageparameter und erlaubt keine Konfiguration eines Bodys. Nützlich zum Auslösen von Uptime Kuma Push-Überwachungen.", + "webhookGetMethodDesc": "GET sendet Daten als Query-Parameter (kein Body). Nützlich für Uptime Kuma Push-Monitore.", "deleteGroupMsg": "Möchtest du diese Gruppe wirklich löschen?", - "deleteChildrenMonitors": "Lösche auch die direkten untergeordneten Monitore und deren untergeordnete Elemente, falls vorhanden | Lösche auch alle {count} direkten untergeordneten Monitore und deren untergeordnete Elemente, falls vorhanden", + "deleteChildrenMonitors": "Auch untergeordnete Monitore löschen | Auch alle {count} untergeordneten Monitore löschen", "Clone Maintenance": "Wartung klonen", "ariaCloneMaintenance": "Kopie des Wartungsplans erstellen", "ariaEditMaintenance": "Wartungsplan bearbeiten", @@ -1236,52 +1236,52 @@ "ariaPauseMaintenance": "Wartungsplan pausieren", "ariaResumeMaintenance": "Wartungsplan wieder aufnehmen", "Template ID": "Vorlagen-ID", - "wayToGetClickSMSIRTemplateID": "Die Vorlage muss ein Feld {uptkumaalert} enthalten. Eine neue Vorlage kann {here} erstellt werden.", + "wayToGetClickSMSIRTemplateID": "Die Vorlage muss ein Feld {uptkumaalert} enthalten. Erstellung hier: {here}.", "Recipient Numbers": "Empfängernummern", - "twilioApiKeyHelptext": "Der API-Schlüssel ist optional, wird jedoch empfohlen. Du kannst entweder die Konto-SID und den AuthToken von der TwilioConsole-Seite oder die Konto-SID und das Paar aus API-Schlüssel und API-Schlüssel-Geheimnis angeben.", - "twilioMessagingServiceSID": "Messaging-Dienst-SID (optional)", - "twilloMessagingServiceSIDHelptext": "Messaging-Service-SID eingeben, wenn {twillo_messaging_service_help_link} zur Verwaltung von Absendern und Funktionen verwendet wird.", + "twilioApiKeyHelptext": "Optional, aber empfohlen. Du kannst entweder Account SID/AuthToken ODER Account SID und das Paar aus API-Key/Secret verwenden.", + "twilioMessagingServiceSID": "Messaging Service SID (optional)", + "twilloMessagingServiceSIDHelptext": "Verwende die Messaging Service SID, wenn du {twillo_messaging_service_help_link} zur Verwaltung nutzt.", "showOnlyLastHeartbeat": "Nur letzten Heartbeat anzeigen", "Softvelum WebSocket signaling protocol": "Softvelum WebSocket Signaling Protokoll", - "ignoreSecWebsocketAcceptHeaderDescription": "Ermöglicht es dem Server, nicht mit dem Sec-WebSocket-Accept-Header zu antworten, wenn das WebSocket-Upgrade erfolgreich ist.", + "ignoreSecWebsocketAcceptHeaderDescription": "Erlaubt dem Server, ohne Sec-WebSocket-Accept Header zu antworten (bei erfolgreichem Upgrade).", "Ignore Sec-WebSocket-Accept header": "Ignoriere {0} Header", - "wsSubprotocolDescription": "Weitere Informationen zu Subprotokollen findest du in der {documentation}", - "Session Initiation Protocol": "WebSocket-Transport für SIP (Session Initiation Protocol)", - "WebSocket Application Messaging Protocol": "WAMP (The WebSocket Application Messaging Protocol)", - "Network API for Notification Channel": "OMA RESTful-Netzwerk-API für Benachrichtigungskanal", + "wsSubprotocolDescription": "Informationen zu Subprotokollen: {documentation}", + "Session Initiation Protocol": "WebSocket-Transport für SIP", + "WebSocket Application Messaging Protocol": "WAMP", + "Network API for Notification Channel": "OMA RESTful-Netzwerk-API", "Web Process Control Protocol": "Web Process Control Protocol (WPCP)", "Advanced Message Queuing Protocol": "Advanced Message Queuing Protocol (AMQP) 1.0+", - "jsflow": "jsFlow pubsub/queue Protocol", + "jsflow": "jsFlow pubsub/queue Protokoll", "Reverse Web Process Control": "Reverse Web Process Control Protocol (RWPCP)", - "Extensible Messaging and Presence Protocol": "WebSocket-Transport für das Extensible Messaging and Presence Protocol (XMPP)", + "Extensible Messaging and Presence Protocol": "WebSocket-Transport für XMPP", "Smart Home IP": "SHIP - Smart Home IP", "Miele Cloud Connect Protocol": "Miele Cloud Connect Protokoll", "Push Channel Protocol": "Push Channel Protokoll", - "Message Session Relay Protocol": "WebSocket Transport für MSRP (Message Session Relay Protocol)", - "Binary Floor Control Protocol": "WebSocket Transport für BFCP (Binary Floor Control Protocol)", + "Message Session Relay Protocol": "WebSocket-Transport für MSRP", + "Binary Floor Control Protocol": "WebSocket-Transport für BFCP", "Softvelum Low Delay Protocol": "Softvelum Low Delay Protokoll", "OPC UA Connection Protocol": "OPC UA Connection Protokoll", "OPC UA JSON Encoding": "OPC UA JSON Encoding", - "Swindon Web Server Protocol": "Swindon Web Server Protokoll (JSON encoding)", + "Swindon Web Server Protocol": "Swindon Web Server Protokoll (JSON)", "Broadband Forum User Services Platform": "USP (Broadband Forum User Services Platform)", - "Constrained Application Protocol": "Constrained Application Protokoll (CoAP)", + "Constrained Application Protocol": "Constrained Application Protocol (CoAP)", "Cobra Real Time Messaging Protocol": "Cobra Real Time Messaging Protokoll", "Declarative Resource Protocol": "Declarative Resource Protokoll", "BACnet Secure Connect Hub Connection": "BACnet Secure Connect Hub Connection", "BACnet Secure Connect Direct Connection": "BACnet Secure Connect Direct Connection", - "WebSocket Transport for JMAP": "WebSocket Transport für JMAP (JSON Meta Application Protocol)", + "WebSocket Transport for JMAP": "WebSocket-Transport für JMAP", "Notifications Enabled": "Benachrichtigungen aktiviert", "Allow Notifications": "Benachrichtigungen zulassen", "Browser not supported": "Browser wird nicht unterstützt", - "Unable to get permission to notify": "Keine Berechtigung für Benachrichtigungen (die Anfrage wurde abgelehnt oder ignoriert).", - "Webpush Helptext": "Web-Push funktioniert nur mit SSL-Verbindungen (HTTPS). Bei iOS-Geräten muss die Webseite zuvor zum Startbildschirm hinzugefügt werden.", - "certHostnameMismatch": "Der Hostname des Zertifikats stimmt nicht mit der Monitor-URL überein.", + "Unable to get permission to notify": "Keine Berechtigung für Benachrichtigungen erhalten.", + "Webpush Helptext": "Web-Push erfordert SSL (HTTPS). Unter iOS muss die Webseite zum Home-Screen hinzugefügt werden.", + "certHostnameMismatch": "Zertifikats-Hostname stimmt nicht mit Monitor-URL überein.", "ITU-T T.140 Real-Time Text": "ITU-T T.140 Real-Time Text", "Done.best IoT Protocol": "Done.best IoT Protokoll", - "Collection Update": "The Collection Update Websocket Subprotokoll", + "Collection Update": "Collection Update Websocket Subprotokoll", "Text IRC Protocol": "Text IRC Protokoll", "Binary IRC Protocol": "Binary IRC Protokoll", - "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protokoll v3 (Protobuf encoding)", - "minimumIntervalWarning": "Intervalle unter 20 Sekunden können zu einer schlechten Leistung führen.", - "lowIntervalWarning": "Möchtest du den Intervallwert wirklich auf unter 20 Sekunden einstellen? Dies kann zu Leistungseinbußen führen, insbesondere wenn eine große Anzahl von Monitoren vorhanden ist." + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protocol v3 (Protobuf)", + "minimumIntervalWarning": "Intervalle unter 20 Sekunden können die Leistung beeinträchtigen.", + "lowIntervalWarning": "Möchtest du das Intervall wirklich unter 20 Sekunden setzen? Bei vielen Monitoren kann dies zu Leistungsproblemen führen." } From e8c2cb76befa37ef21e125f2d924f6ddc3705c5a Mon Sep 17 00:00:00 2001 From: Marco Date: Fri, 19 Dec 2025 21:50:00 +0000 Subject: [PATCH 63/91] Translated using Weblate (German) Currently translated at 100.0% (1235 of 1235 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1235 of 1235 strings) Translated using Weblate (German) Currently translated at 100.0% (1235 of 1235 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1235 of 1235 strings) Co-authored-by: Marco Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-CH.json | 4 ++-- src/lang/de-DE.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/de-CH.json b/src/lang/de-CH.json index 8a6b2bc0..2bfa0fba 100644 --- a/src/lang/de-CH.json +++ b/src/lang/de-CH.json @@ -354,7 +354,7 @@ "Services": "Dienste", "Discard": "Verwerfen", "Cancel": "Abbrechen", - "Powered by": "Erstellt mit", + "Powered by": "Bereitgestellt mit", "serwersms": "SerwerSMS.pl", "serwersmsAPIUser": "API Benutzername (inkl. webapi_ prefix)", "serwersmsAPIPassword": "API Passwort", @@ -456,7 +456,7 @@ "Custom Footer": "Eigener Footer", "Custom CSS": "Eigenes CSS", "Footer Text": "Fusszeile", - "Show Powered By": "Zeige 'Powered By'", + "Show Powered By": "Zeige 'Bereitgestellt mit'", "Date Created": "Erstellt am", "Domain Names": "Domainnamen", "signedInDisp": "Angemeldet als {0}", diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 49dc2780..f5a0c46f 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -456,7 +456,7 @@ "Custom Footer": "Eigener Footer", "Custom CSS": "Eigenes CSS", "Footer Text": "Fußzeile", - "Show Powered By": "Zeige 'Powered By'", + "Show Powered By": "Zeige 'Bereitgestellt mit'", "Date Created": "Erstellt am", "Domain Names": "Domainnamen", "signedInDisp": "Angemeldet als {0}", From 3a5247ef3a19c3cc3bb8e8c827de6962ec1e0751 Mon Sep 17 00:00:00 2001 From: woodmichl Date: Fri, 19 Dec 2025 21:50:00 +0000 Subject: [PATCH 64/91] Translated using Weblate (German) Currently translated at 100.0% (1235 of 1235 strings) Co-authored-by: woodmichl Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index f5a0c46f..049dc3a8 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -354,7 +354,7 @@ "Services": "Dienste", "Discard": "Verwerfen", "Cancel": "Abbrechen", - "Powered by": "Powered by", + "Powered by": "Bereitgestellt mit", "serwersms": "SerwerSMS.pl", "serwersmsAPIUser": "API-Benutzername (inkl. webapi_ Präfix)", "serwersmsAPIPassword": "API-Passwort", From 06075899d54a5294e426c2695f0119fee49a0951 Mon Sep 17 00:00:00 2001 From: MrEddX Date: Fri, 19 Dec 2025 21:50:00 +0000 Subject: [PATCH 65/91] Translated using Weblate (Bulgarian) Currently translated at 100.0% (1235 of 1235 strings) Co-authored-by: MrEddX Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/bg-BG.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index a8ae230c..f74da4c0 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -1280,5 +1280,8 @@ "Collection Update": "The Collection Update Websocket подпротокол", "Text IRC Protocol": "Text IRC протокол", "Binary IRC Protocol": "Binary IRC протокол", - "Penguin Statistics Live Protocol v3": "Penguin Statistics Live протокол v3 (Protobuf кодировка)" + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live протокол v3 (Protobuf кодировка)", + "minimumIntervalWarning": "Интервали под 20 секунди може да доведат до лоша производителност.", + "lowIntervalWarning": "Наистина ли желаете да зададете стойността на интервала под 20 секунди? Производителността може да се влоши, особено ако има голям брой монитори.", + "certHostnameMismatch": "Хоста от сертификата не съвпада с URL адреса на монитора." } From 8aec1aa54712a418a3a64c2bdd3776c8e033557e Mon Sep 17 00:00:00 2001 From: Gringo Date: Fri, 19 Dec 2025 21:50:00 +0000 Subject: [PATCH 66/91] Translated using Weblate (Italian) Currently translated at 100.0% (1235 of 1235 strings) Co-authored-by: Gringo Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/it-IT.json | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index 661809c7..f8d9dba7 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -1225,5 +1225,42 @@ "showOnlyLastHeartbeat": "Mostra solo l'ultimo segnale di vita", "Notifications Enabled": "Notifiche abilitate", "Unable to get permission to notify": "Impossibile ottenere l'autorizzazione per la notifica (richiesta negata o ignorata).", - "Webpush Helptext": "La funzionalità Web push funziona solo con connessioni SSL (HTTPS). Per i dispositivi iOS, la pagina web deve essere aggiunta in anticipo alla schermata iniziale." + "Webpush Helptext": "La funzionalità Web push funziona solo con connessioni SSL (HTTPS). Per i dispositivi iOS, la pagina web deve essere aggiunta in anticipo alla schermata iniziale.", + "Binary Floor Control Protocol": "Trasporto WebSocket per BFCP (Binary Floor Control Protocol)", + "OPC UA Connection Protocol": "Protocollo di connessione OPC UA", + "Constrained Application Protocol": "Protocollo applicativo vincolato (CoAP)", + "WebSocket Transport for JMAP": "Trasporto WebSocket per JMAP (JSON Meta Application Protocol)", + "Penguin Statistics Live Protocol v3": "Protocollo Penguin Statistics Live v3 (codifica Protobuf)", + "certHostnameMismatch": "Il nome sistema del certificato non corrisponde all'URL del monitoraggio.", + "minimumIntervalWarning": "Intervalli inferiori a 20 secondi potrebbero causare scarse prestazioni.", + "lowIntervalWarning": "Vuoi davvero impostare un valore di intervallo inferiore a 20 secondi? Le prestazioni potrebbero risultare ridotte, soprattutto se sono presenti molti monitoraggi.", + "ignoreSecWebsocketAcceptHeaderDescription": "Permetti al server di non rispondere con l'intestazione Sec-WebSocket-Accept, se l'aggiornamento del websocket riesce.", + "Ignore Sec-WebSocket-Accept header": "Ignora l'intestazione {0}", + "wsSubprotocolDescription": "Per maggiori informazioni sui sottoprotocolli, consultare la {documentazione}", + "WebSocket Application Messaging Protocol": "WAMP (protocollo di messaggistica delle applicazioni WebSocket)", + "Session Initiation Protocol": "Trasporto WebSocket per SIP (Session Initiation Protocol)", + "Network API for Notification Channel": "API di rete RESTful OMA per canale di notifica", + "Web Process Control Protocol": "Protocollo di controllo dei processi Web (WPCP)", + "Advanced Message Queuing Protocol": "Protocollo avanzato di accodamento messaggi (AMQP) 1.0+", + "jsflow": "Protocollo jsFlow pubsub/queue", + "Reverse Web Process Control": "Protocollo di controllo del processo Web inverso (RWPCP)", + "Extensible Messaging and Presence Protocol": "Trasporto WebSocket per il protocollo Extensible Messaging and Presence (XMPP)", + "Smart Home IP": "SHIP - Smart Home IP", + "Miele Cloud Connect Protocol": "Protocollo Miele Cloud Connect", + "Push Channel Protocol": "Protocollo Push Channel", + "Message Session Relay Protocol": "Trasporto WebSocket per MSRP (Message Session Relay Protocol)", + "Softvelum Low Delay Protocol": "Protocollo Softvelum a basso ritardo", + "OPC UA JSON Encoding": "Codifica JSON OPC UA", + "Swindon Web Server Protocol": "Protocollo del server Web Swindon (codifica JSON)", + "Broadband Forum User Services Platform": "USP (piattaforma di servizi per gli utenti del forum a banda larga)", + "Softvelum WebSocket signaling protocol": "Protocollo di segnalazione WebSocket Softvelum", + "Cobra Real Time Messaging Protocol": "Protocollo di messaggistica in tempo reale Cobra", + "Declarative Resource Protocol": "Protocollo di risorse dichiarative", + "BACnet Secure Connect Hub Connection": "Connessione hub BACnet Secure Connect", + "BACnet Secure Connect Direct Connection": "Connessione diretta BACnet Secure Connect", + "ITU-T T.140 Real-Time Text": "Testo in tempo reale ITU-T T.140", + "Done.best IoT Protocol": "Fatto. Il miglior protocollo IoT", + "Collection Update": "Sottoprotocollo Websocket di aggiornamento della raccolta", + "Text IRC Protocol": "Protocollo IRC di testo", + "Binary IRC Protocol": "Protocollo IRC binario" } From e87ffd53963df52ebb4ebf66420bcd0ff53074d3 Mon Sep 17 00:00:00 2001 From: Virenbar Date: Fri, 19 Dec 2025 21:50:00 +0000 Subject: [PATCH 67/91] Translated using Weblate (Russian) Currently translated at 100.0% (1235 of 1235 strings) Co-authored-by: Virenbar Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index 631c0ce0..b214792a 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -1289,5 +1289,7 @@ "Collection Update": "Подпротокол Websocket обновления коллекции", "Text IRC Protocol": "Текстовый протокол IRC", "Penguin Statistics Live Protocol v3": "Протокол Penguin Statistics Live v3 (кодирование Protobuf)", - "certHostnameMismatch": "Имя хоста сертификата не соответствует URL-адресу монитора." + "certHostnameMismatch": "Имя хоста сертификата не соответствует URL-адресу монитора.", + "minimumIntervalWarning": "Интервалы менее 20 секунд могут привести к снижению производительности.", + "lowIntervalWarning": "Вы уверены, что хотите установить значение интервала меньше 20 секунд? Производительность может снизиться, особенно при наличии большого количества мониторов." } From 7883b9619b921c097524642a84d61c1a90a1be64 Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Fri, 19 Dec 2025 21:50:00 +0000 Subject: [PATCH 68/91] Translated using Weblate (Bavarian) Currently translated at 15.7% (195 of 1235 strings) Co-authored-by: Frank Elsinga Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bar/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/bar.json | 195 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 194 insertions(+), 1 deletion(-) diff --git a/src/lang/bar.json b/src/lang/bar.json index 257a09d4..d2ff7829 100644 --- a/src/lang/bar.json +++ b/src/lang/bar.json @@ -2,5 +2,198 @@ "Language": "Sprach", "Home": "Dahoam", "setupDatabaseChooseDatabase": "Wos für a Datenbank wuist du?", - "setupDatabaseEmbeddedMariaDB": "Da brauchst nix mocha. Des Docker Buidl hod a Datenbank dabai und nimmt MariaDB. Uptime Kuma verbint se mit Unix Socket." + "setupDatabaseEmbeddedMariaDB": "Da brauchst nix mocha. Des Docker Buidl hod a Datenbank dabai und nimmt MariaDB. Uptime Kuma verbint se mit Unix Socket.", + "Import": "Eine spuin", + "respTime": "Antwort-Zeit (ms)", + "Create your admin account": "Mach Dein Admin-Zugang", + "matrixDesc2": "Es wead dringend empfohln, dass Du an neia Benutza a'legst und ned de Zugangs-Schlüssl (Access Token) vo Deim eigana Matrix-Benutza vawendst, wei de do den voiständign Zuagriff auf Dei Konto und olle Räum, wo Du dabei bist, zualassn dadn.Stattdessn: Leg an neia Benutza a' und lads eam nua in den Raum ei, in dem wo Du de Benachrichtigunga griang wuist.Du kriagst den Zugangs-Schlüssl (Access Token) iatz, indemst des ausfiahrst: {0}", + "jsonQueryDescription": "Nutz a JSON-Abfrag (JSON query), um spezifische Datn aus da JSON-Antwort vom Server auszulesn und z'extrahiern. Oder: Wenn Du koa JSON-Antwort erwarts, nimm \"$\" fia de rohe Antwort (raw response).Des Ergebnis wead dann mit'm erwartetn Wert (expected value) oiss wia a Text (as strings) vaglichn. Fia d'Dokumentation schaugst bittschee bei {0} noch, und zum Testn und Experimentiern is {1} da richtige Blotz.", + "receiverInfoSevenIO": "Wenn de Numma vom Empfänger ned in Deitschland (Germany) is, muaßt den Lända-Code (country code) davo setzn. Beispui: Fia d'Lända-Kennzoi 1 vo de USA (US) nimmst 117612121212 statt 017612121212", + "trustProxyDescription": "Vertrau de 'X-Forwarded-*' Header. Wenn Du de korrekte Client IP kriagn wuixt und Dei Uptime Kuma hinter am Proxy (wia Nginx oda Apache) lafft, dann muaßt Du des eischaltn.", + "wayToGetFlashDutyKey": "Um Uptime Kuma mit Flashduty z'integrieran: Geh auf Kanäl (Channels) > An Kanal auswähln > Integrationa (Integrations) > A neie Integration hizuafeagn (Add a new integration), wähld Uptime Kuma, und kopierst de Push URL.", + "shrinkDatabaseDescriptionSqlite": "Fia SQLite: Start de Datenbank-Reinigung ({vacuum}). Zwoa is {auto_vacuum} scho eingschoitn, owa des ko de Datenbank ned defragmentiern und aa ned de oanzalnan Datenbank-Seitn nei packa, so wia des da {vacuum}-Befehl macha tuat.", + "matrixDesc1": "Du findst de interne Raum-ID (internal room ID), indemst in Deim Matrix Client in de erweitertn Eistellunga vom Raum (advanced section of the room settings) nochschaust. De soitat wia !QMdRCpUIfLwsfjxye6:home.server ausschaun.", + "lowIntervalWarning": "Bist da sicha, dassd den Intervall-Wert unta 20 Sekundn setzn wuixt? D'Leistung ko schlechter wern, bsondas wenn a Haufa Monitore laffa.", + "rabbitmqHelpText": "Um den Monitor nutzn z'könna, muaßt in Deiner RabbitMQ-Eirichtung des Vawoitungs-Plugin (Management Plugin) aktiviern. Fia mehr Informationa, schau bitte in de {rabitmq_documentation}.", + "promosmsTypeFull": "SMS VOLL - De Premium-Stufn vo SMS. Du kannst Deinen O'senda-Nam vawendn (Du muaßt den Nam eascht registriern). Zuavässig fia Warnunga.", + "disableauth.message2": "Des is fia Szenarien {intendThirdPartyAuth} voa Uptime Kuma denkt, wia Cloudflare Access, Authelia oda andane Authentifizierungs-Mechanisma.", + "webhookGetMethodDesc": "GET schickt Datn ois Abfrage-Parameter (Query Parameters) und erlaubt's ned, an Body z'konfiguriarn. Is nützlich zum Auslös'n vo Uptime Kuma Push Monitore.", + "steamApiKeyDescription": "Zum Iabawachn vo am Steam Spui-Server brauchst an Steam Web-API Schlüssl. Du kannst Deinen API Schlüssl do registriern: ", + "tailscalePingWarning": "Damitst den Tailscale Ping Monitor nutzn kannst, muaßt Du Uptime Kuma ohne Docker installiern und auf Deim Server aa den Tailscale Client installiern.", + "telegramServerUrlDescription": "Um de Begrenzunga vo da Telegram Bot API aufz'hebn oda um Zuagang in blockierte Gengdn (China, Iran, etc.) z'kriang. Fia mehr Informationa klick {0}. Standard: {1}", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "An langlebandn Zuagangs-Schlüssl kannst erstella, indemst auf Deinen Profilnama (unten links) klickst, dann ganz nach untn scrolldst und auf 'Token erstella' klickst. ", + "backupOutdatedWarning": "Vaoitet: Wei vui neie Funktiona dazua kemma san und de Backup-Funktion a weng vachlässigt worn is, ko's koa vollständigs Backup erstella oda widaherstella.", + "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "A Listn vo de Benachrichtigungs-Dienst' findst Du im Home Assistant unta \"Entwickler-Wergzeig' > Dienst'\" (Developer Tools > Services). Suach nach \"notification\", um de Namens- oda Telefonnumma vo Deim Gerät/Handy z'findn.", + "wayToGetBaleChatID": "Du kannst Dei Chat-ID kriang, indemst a Nachricht an den Bot schickst und dann auf dea URL schaust, um de Chat-ID z'sehn:", + "aboutMattermostChannelName": "Du kannst den Standardkanal, in den wo da Webhook postet, iabaschreim, indemst den Kanal-Nama in des Feld \"Kanal-Nama\" (Channel Name) eigibst. Des muaß owa in de Eistellunga vom Mattermost Webhook freigebn (enabled) sei. Beispui: #andana-kanal", + "deleteChildrenMonitors": "A de direkt untagordnatn Monitore und dera Kind-Monitore, wenns welche ham, wead glöscht. | A olle {count} direkt untagordnatn Monitore und dera Kind-Monitore, wenns welche ham, wern glöscht", + "enableDefaultNotificationDescription": "De Benachrichtigung wead standardmäßig fia neie Monitore aktiv sei. Du kannst de Benachrichtigung owa fia jedn Monitor separat deaktivern.", + "importHandleDescription": "Wähld 'Bestehends iabaschpring', wennst jedn Monitor oda jede Benachrichtigung mit'm gleichn Nama iabaschpring wuixt. 'Iabaschreim' löscht jedn scho vorhandna Monitor und jede Benachrichtigung.", + "aboutNotifyChannel": "'Kanal benachrichtign' löst a Desktop- oda Handy-Benachrichtigung ia olle Mitglieda vom Kanal aus, egal ob de grad auf 'aktiv' oda 'weg' gstellt san.", + "aboutSlackUsername": "Ändert den Anzeignama vom Nachrichtn-O'senda. Wennst jemandn erwähna wuixt, pock des stattdessn in den freindlichn Nam (friendly name) nei.", + "aboutChannelName": "Gib den Kanalnam im {0} Kanalnam-Feld ei, wennst den Webhook Kanal umgeh wuixt. Zum Beispui: #anderer-kanal", + "wayToGetPagerDutyKey": "Du kriagst des, indemst auf Service -> Service-Vazeichnis (Service Directory) -> (An Service auswähln) -> Integrationa (Integrations) -> Integration hizuafeagn (Add integration) gähst. Do kannst nach \"Events API V2\" suacha. Mehr Info: {0}", + "apiKeyAddedMsg": "Dein API-Schlüssl is hinzuagfügt worn. Bittschön notierst eam, wei a nimma zoagt wead.", + "monitorToastMessagesDescription": "De Toast-Benachrichtigunga fia Monitore vaschwindn nach da eigebnan Zeit in Sekundn. Setz auf -1, um d'Zeitbeschränkung (Timeout) auszschaltn. Setz auf 0, um de Toast-Benachrichtigunga komplett auszschaltn.", + "gamedigGuessPortDescription": "Da Port, der wo vom Valve Server Query Protokoll gnutzt wead, ko andas sei ois wia da Client-Port. Probier des, wenn da Monitor koane Vabindung zum Server herstella ko.", + "bitrix24SupportUserID": "Gib Dei Benutzernummer in Bitrix24 ei. De ID kannst aus'm Link auselesn, wennst aufs Profil vom Nutzer gehst.", + "remoteBrowserToggle": "Normalawais lafft Chromium im Uptime Kuma Container. Du kannst an Fern-Browser vawendn, indemst den Schalta (Switch) umlegst.", + "callMeBotGet": "Do kannst an Endpunkt (endpoint) fia {0}, {1} und {2} generiern. Owa pass auf, dassd Du gfladert wern kannst (rate limited). De Begrenzunga san: {3}", + "gtxMessagingFromHint": "Auf de Handys (mobile phones) segt da Empfänger de TPOA (Absender-Adress) oiss wia den Schicka vo da Nochricht. Erlaubt san: Maximal 11 alphanumerische Zeichen, a Kurz-Code (shortcode), da lokale Lang-Code (longcode), oda internationale Nummern ({e164}, {e212} oda {e214})", + "cellsyntOriginatortypeNumeric": "Numerischa Wert (maximal 15 Stellan) mit da Telefonnumma im internationaln Format, owa ohne de \"00\" am Ofang (zum Beispui muaß d'UK-Nummer 07920 110 000 auf 447920110000 gsetzt wern). De Empfänger kenna auf de Nochricht antwortn.", + "cellsyntOriginator": "Auf'm Handy vom Empfänger ois da O'senda vo da Nachricht sichtbar. De erlaubtn Wert' und de Funktion hängan vom Parameter 'Originatortyp' (originatortype) ob.", + "snmpOIDHelptext": "Gib de OID (Object Identifier) fia den Sensor oda Status ei, denst iabawachn wuixt. Wennst ned woaßt, wos de OID is, nutz netzwerk-vawoitung-Wergzeig (network management tools) wia MIB-Browser oda SNMP-Software.", + "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Entweda a Text-O'senda-ID oda a Telefonnumma im E.164-Format, wennst Antworta kriang wuixt.", + "smtpHelpText": "'SMTPS' test, ob SMTP iaba TLS (Vaschlüsselung) funktioniern tuat; 'TLS ignoriern' (Ignore TLS) vabindt si iaba an unvaschlüsseltn Text (plaintext); 'STARTTLS' vabindt si, gibst an STARTTLS-Befehl aus und prüft des Server-Zertifikat. Koana vo dene Modi schickt a E-Mail.", + "wayToWriteWahaChatId": "Nimm entweda:D'Telefonnumma mit da internationaln Vuawoi, owa ohne des Plus-Zeichn am Ofang ({0}),d'Kontakt-ID ({1}),oda d'Gruppn-ID ({2}).De Benachrichtigunga wern dann vo da WAHA Session an de Chat ID gschickt.", + "Webpush Helptext": "Web Push funktioniert nur mid SSL (HTTPS) Verbindunga. Fia iOS-Gerät' muaß de Webseitn vorher zum Homescreen zuagfügt wern.", + "Yes": "Basst", + "Username": "Wia Du hoaßt", + "Password": "Dei G'heimnis", + "Remember me": "Eingloggt bleim", + "Login": "Eiloggn", + "No Monitors, please": "Koane Ibachunga fia de Betriebsdauer, biddschee", + "add one": "Oana dazua", + "Notification Type": "Wia da Alarm kimmt", + "Email": "D'E-Mail", + "Test": "Probelauf", + "Certificate Info": "Wos am Zertifikat dro steht", + "Last Result": "Letzts Ergebnis", + "Export": "Aussagebn", + "notAvailableShort": "Koa Angob", + "Default enabled": "Vo Haus aus eigschalt", + "Apply on all existing monitors": "Bei olle bstehndn o'wendn", + "Create": "Mach'n", + "Clear Data": "Ois wida leer macha", + "Events": "Wos gscheng is", + "Heartbeats": "Lebenszeicha", + "Auto Get": "vo aloa nehma", + "Schedule maintenance": "Termin fia d'Wartung macha", + "alertWrongFileType": "Bittschee, such a JSON-Datei aus.", + "Clear all statistics": "Olle Statistiken putzn", + "Skip existing": "Bstehnd's auslassn", + "Overwrite": "Ibaschreim", + "Options": "Eistellunga", + "Keep both": "Boade bhalta", + "Verify Token": "Schlüssl ibaprüfn", + "Setup 2FA": "2FA eistelln", + "Enable 2FA": "2FA aktiviern", + "Disable 2FA": "2FA deaktivern", + "tagNameExists": "A System-Tag mid dem Nam existiert scho. Bittschön wählst eam aus da Listn aus oda nimmst an andern Nam.", + "wayToGetTelegramChatID": "Du kannst Dei Chat-ID kriang, indemst a Nachricht an den Bot schickst und dann auf dea URL schaust, um de Chat-ID z'sehn:", + "chromeExecutableDescription": "Fia de Docker-Nutza: Wenn Chromium no ned installiert is, ko des a boar Minutn dauern, bis' installiert is und des Test-Ergebnis angezeigt wead. Des braucht 1 GB Plotz auf da Festplattn.", + "smtpLiquidIntroduction": "De foigndn zwoa Föida kenna iaba de Liquid Templating Sproch mid Vorlagn bfüllt wern. Schaug da de {0} fia d'Vawendungs-Anweisung'n o. Des san de vafügboarn Variabln:", + "wayToGetDiscordThreadId": "A Thread-/Forumspost-ID kriang is ähnlich wia a Kanal-ID kriang. Schau da mehr iaba de IDs in {0} o", + "whatHappensAtForumPost": "Erstell an neia Forumsbeitrag. Des postet NED Nachrichtn in an existieradn Beitrag. Um in an existieradn Beitrag z'postn, nutz \"{option}\"", + "wayToGetDiscordURL": "Des kannst kriagn, indemst auf Server Einstellunga -> Integrations -> Webhooks oschaung -> Neia Webhook gehst", + "Affected Monitors": "Wos ois btroffa is", + "Pick Affected Monitors...": "Btroffne wehln…", + "Start of maintenance": "O'fang vo da Wartung", + "All Status Pages": "Olle Status-Seitn", + "Select status pages...": "Status-Seitn aussuacha…", + "alertNoFile": "Bittschee, such a Datei zum Eine spuin aus.", + "liquidIntroduction": "Vorlagn-Eistejung (Templatability) wead iaba de Liquid Templating Sproch erreicht. Schau da de {0} fia d'Vawendungs-Anweisung'n o. Des san de vafügboarn Variabln:", + "twilioApiKeyHelptext": "Da API-Schlüssl (API key) is optional, owa ma riat dazua. Du kannst entweda de Account SID und des AuthToken vo da Twilio-Konsoin-Seitn (TwilioConsole) hernehma, oda de Account SID und des Paar aus API-Schlüssl und API-Schlüssl-Geheimnis (Api Key secret)", + "remoteBrowsersDescription": "Fern-Browser (Remote Browsers) san a Alternative dazua, Chromium lokal laufn z'lassn. Du kannst des mid am Dienst wia browserless.io eirichtn oda di mit Deim eigena Browser vabindn", + "wayToWriteWhapiRecipient": "De Telefonnumma mit da internationaln Vuawoi, owa ohne des Plus-Zeichn am Ofang ({0}), de Kontakt-ID ({1}) oda de Gruppn-ID ({2}).", + "gtxMessagingApiKeyHint": "Dein API-Schlüssl findst Du unta: Mei Routing Kontn > Kontn-Informationa zang > API Zugangsdatn > REST API (v2.x)", + "cellsyntDestination": "D'Telefonnummer vom Empfänger muaß im internationaln Format eigebn wern, mit \"00\" am Ofang, gfoigt vo da Lända-Kennzoi. Beispui: Fia d'UK-Nummer 07920 110 000 schreibst 00447920110000 (maximal 17 Stellan insgesamt). Begrenzung: Pro HTTP-Anfrag san maximal 25.000 Empfänger erlaubt, de wo mit am Komma trennt san.", + "snmpCommunityStringHelptext": "Dea Zeichnkettn (String) funktioniert ois Passwort, um den Zuagang zu de SNMP-fähign Gerät' z'bestätign und z'steiern. Schaug, dass des mid Deiner SNMP-Geräte-Konfiguration zammbasst.", + "2FA Settings": "2FA Eistellunga", + "Two Factor Authentication": "Zwoafache Bestätigung", + "wayToWriteEvolutionRecipient": "De Telefonnumma mit da internationaln Vuawoi, owa ohne des Plus-Zeichn am Ofang ({0}), de Kontakt-ID ({1}) oda de Gruppn-ID ({2}).", + "confirmDeleteTagMsg": "Bist da sicher, dass Du den Tag lösch'n wuixt? Monitore, de wo mid dem Tag vabundn san, wean ned g'löscht.", + "goAlertInfo": "GoAlert is a o'ffane Quell-Code-Anwendung (open source application) fia Bereitschafts-Planung, automatisierte Eskalationa und Benachrichtigunga (wia SMS oda telefonische O'ruaf). Automatisch de richtige Person, auf de richtige Weis und zum richtign Zeitpunkt eischaltn! {0}", + "goAlertIntegrationKeyInfo": "Hoi da an generischn API Integrations-Schlüssl fia den Dienst in dem Format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\". Normalawais is des da Wert vom Token-Parameter in da URL, de wo kopiert worn is.", + "promosmsTypeSpeed": "SMS GAS GEBN - Höchste Priorität im System. Sehr schnell und zuavässig, owa kostspülig (zirka doppelt so teia wia SMS VOLL).", + "enableProxyDescription": "Dea Proxy wirkt se eascht auf de Monitor-Anfrogn aus, wenn er aktiviert is. Du kannst den Proxy fia olle Monitore iaba den Aktivierungs-Status temporär deaktiviern.", + "setAsDefaultProxyDescription": "Dea Proxy wead standardmäßig fia neie Monitore aktiv sei. Du kannst den Proxy owa fia jedn Monitor separat deaktivern.", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "D'aktuelle Vabindung ko valorn geh, wennst grod iaba an Cloudflare Tunnel vabundn bist. Bist da sicha, dass Du des been'dn wuixt? Tipp Dei aktuells Passwort ei, ums z'bestätign.", + "wayToGetLineChannelToken": "Greif z'eascht auf {0} zua, erstöi an Provider und an Kanal (Channel) (Messaging API). Nachad kriagst de Zugangs-Schlüssl (Channel access token) und d'Benutza-ID (User ID) in de obn gnanntn Menü-Punkte.", + "aboutIconURL": "Du kannst a Link zu am Buidl im Feld \"Buidl-URL\" (Icon URL) eigebn, um des Standard-Profilbuidl z'iabaschreim. Des wead owa ned vawendt, wenn a Icon Emoji eigstellt is.", + "Resume": "Weida macha", + "Edit": "Ändern", + "Current": "Groaßgrad", + "Monitor": "Da Schirm | De Schirm", + "day": "da dog | de dog", + "setupDatabaseSQLite": "A einfachs Datenbank-Datei, empfehlenswert für kloane Installationen. Vorma v2.0.0 hod Uptime Kuma SQLite als Standard-Datenbank nutzt.", + "Settings": "Einstellungen", + "New Update": "Neies Update", + "Appearance": "Aussehng", + "General": "Allgemein", + "General Monitor Type": "Allgemeiner Monitortyp", + "Game": "Spiel", + "Add": "Hinzuafügn", + "Quick Stats": "Kurze Statistik", + "Up": "Oba", + "statusMaintenance": "Wartung", + "pauseDashboardHome": "Pausn", + "Name": "Nam", + "Status": "Zuastand", + "-day": "-dog", + "hour": "stund", + "Ping": "Ping", + "Monitor Type": "De Sorte vom Schirm", + "Keyword": "Schlüsselwort", + "Invert Keyword": "Wosd ned findn wuisd", + "Expected Value": "Wosd davo ausgähst", + "URL": "URL", + "Import Backup": "Backup aufspuin", + "Port": "Port", + "Retries": "Wia oft ma's no probiern", + "resendEveryXTimes": "Wieda schicka olle {0} Mal", + "ignoreTLSError": "Auf d'Vaschlüsselungs-Fehler pfeifn", + "Upside Down Mode": "Umdraht-Modus", + "Max. Redirects": "Max. Wos umleiten deaf", + "No": "Nix da", + "setupDatabaseMariaDB": "Verbinda di mit a externa MariaDB-Datenbank. Du miast de Verbindungsinfos für d’Datenbank oistelln.", + "settingUpDatabaseMSG": "Datenbank wird einrichtet. Des ko a Weile dauern, bitte hob a bisserl Geduld.", + "dbName": "Datenbank-Name", + "Dashboard": "Dashboard", + "Help": "Hilfe", + "Theme": "Design", + "Primary Base URL": "Primäre Basis-URL", + "Version": "Version", + "Check Update On GitHub": "Auf GitHub nach’m Update kucken", + "List": "Liast", + "Add New Monitor": "Neien Monitor hinzufügn", + "Down": "Owa", + "Pending": "In Wartnstellung", + "Maintenance": "Wartung", + "Unknown": "Unbekannt", + "Cannot connect to the socket server": "Ko ned mit’m Socket-Server verbinden", + "Reconnecting...": "Verbinda wieda…", + "Passive Monitor Type": "Fauler Monitor", + "Specific Monitor Type": "Besonderer Monitor", + "markdownSupported": "Markdown geht", + "Pause": "Pausn", + "DateTime": "Zeit und's Datum", + "Message": "Botschaft", + "No important events": "Koane wichtig'n G'schichtn", + "Delete": "Wegmacha", + "Uptime": "De Zeit, wo de Maschin laaft", + "Cert Exp.": "Zertifikat Ablauf", + "-hour": "-stund", + "Response": "Wos zruck kimmt", + "Friendly Name": "Da Nam, wo leicht zum Vasteh is", + "Heartbeat Interval": "'S Interval vom Lebnszeichn", + "Request Timeout": "Max. G'wart", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Gib entweda den Hostnama vom Server ei, mid demst di vabindn wuixt, oda {localhost}, wennst a {local_mta} nutzn wuixt", + "Hostname": "Hostname", + "timeoutAfter": "D'Zeit is rum nach {0} Sekundn", + "Heartbeat Retry Interval": "Wia lang's dauert, bis ma's Lebnszeichn no amoi probiert", + "Resend Notification if Down X times consecutively": "D'Nachricht wieda schicka, wann X-mal glei ausgfalln is", + "Advanced": "De tiefa Sach", + "checkEverySecond": "Noch {0} Sekundn no amoi frogn", + "retryCheckEverySecond": "Noch {0} Sekundn no amoi frogn", + "resendDisabled": "Wieda schicka ausgschoidt", + "retriesDescription": "Max. Vasuch, bevur de Maschin \"Ausgfalln\" hoaßt und's a Nachricht gibt", + "upsideDownModeDescription": "Status umdraha: Is d'Maschin do, is ned do.", + "maxRedirectDescription": "Hächste Anzoi an Umleitunga, dene ma nacha gähd. Bei 0 is's ausgschoidt.", + "Resolver Server": "Auflös-Server", + "Resource Record Type": "Art vom Eitrag", + "Repeat Password": "Passwoat nomoi eigehm", + "Export Backup": "Sicherung aussanehgn", + "languageName": "Bairisch", + "signl4Docs": "Mehr Informationa, wia ma SIGNL4 konfiguriert und wia ma de SIGNL4 Webhook URL findt, gibts in de {0}." } From 06abc195174ce1c2a2181037c39b2fa3dc7dc712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B7=E5=8F=B8=E7=8E=89=E7=B1=B3=E8=9B=8B=E9=A4=85?= Date: Fri, 19 Dec 2025 21:50:00 +0000 Subject: [PATCH 69/91] Translated using Weblate (Chinese (Traditional)) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 92.8% (1147 of 1235 strings) Co-authored-by: 起司玉米蛋餅 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-TW.json | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index 67c94e89..8aeaecde 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -73,7 +73,7 @@ "Delete": "刪除", "Current": "目前", "Uptime": "運作率", - "Cert Exp.": "憑證期限。", + "Cert Exp.": "憑證期限", "day": "天", "-day": "天", "hour": "小時", @@ -377,7 +377,7 @@ "Services": "服務", "Discard": "捨棄", "Cancel": "取消", - "Powered by": "威力本源", + "Powered by": "技術支援", "serwersms": "SerwerSMS.pl", "serwersmsAPIUser": "API 使用者名稱 (包含 webapi_ 前置碼)", "serwersmsAPIPassword": "API 密碼", @@ -507,7 +507,7 @@ "onebotSafetyTips": "為了安全起見,必須設定存取權杖", "PushDeer Key": "PushDeer 金鑰", "Footer Text": "頁尾文字", - "Show Powered By": "顯示威力本源文字", + "Show Powered By": "顯示技術支援文字", "Domain Names": "網域名稱", "signedInDisp": "以 {0} 身分登入", "signedInDispDisabled": "驗證已停用。", @@ -567,7 +567,7 @@ "Retype the address.": "重新輸入網址。", "Go back to the previous page.": "返回上一頁。", "Coming Soon": "即將推出", - "wayToGetClickSendSMSToken": "您可以從 {0} 取得 API 使用者名稱和金鑰。", + "wayToGetClickSendSMSToken": "您可以從 {here} 取得 API 使用者名稱和金鑰。", "Connection String": "連線字串", "Query": "查詢", "settingsCertificateExpiry": "TLS 憑證到期", @@ -760,7 +760,7 @@ "Server URL should not contain the nfty topic": "伺服器地址不應包含 ntfy 主題", "Invert Keyword": "反轉模式", "Request Timeout": "請求逾時", - "timeoutAfter": "{0} 秒後逾時", + "timeoutAfter": "在 {0} 秒後超時", "styleElapsedTime": "在監控項詳情的心跳欄下顯示起止時間", "styleElapsedTimeShowNoLine": "顯示(不帶連接線)", "styleElapsedTimeShowWithLine": "顯示(帶連接線)", @@ -1187,5 +1187,7 @@ "smseagleMsgRing": "鈴聲呼叫 (電話呼叫)", "smseagleMsgTts": "文字轉語音通話", "smseagleMsgTtsAdvanced": "文字轉語音進階通話", - "smseagleDocs": "檢查文件或 APIv2 的可用性: {0}" + "smseagleDocs": "檢查文件或 APIv2 的可用性: {0}", + "Ignore Sec-WebSocket-Accept header": "忽視 {0} 標頭", + "wsSubprotocolDescription": "更多關於子協議的資訊詳見 {documentation}" } From a5038de9db2edab475f373212bcebfdde55d7ae9 Mon Sep 17 00:00:00 2001 From: Andika Triwidada Date: Fri, 19 Dec 2025 21:50:01 +0000 Subject: [PATCH 70/91] Translated using Weblate (Indonesian) Currently translated at 89.1% (1101 of 1235 strings) Co-authored-by: Andika Triwidada Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/id-ID.json | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/lang/id-ID.json b/src/lang/id-ID.json index 2a0491e1..4be8200b 100644 --- a/src/lang/id-ID.json +++ b/src/lang/id-ID.json @@ -1,6 +1,6 @@ { "languageName": "Bahasa Indonesia (Indonesian)", - "checkEverySecond": "Cek Setiap {0} detik", + "checkEverySecond": "Cek setiap {0} detik", "retryCheckEverySecond": "Coba lagi setiap {0} detik", "resendEveryXTimes": "Kirim ulang setiap {0} kali", "resendDisabled": "Kirim ulang dinonaktifkan", @@ -31,9 +31,9 @@ "confirmDisableTwoFAMsg": "Apakah Anda yakin ingin menonaktifkan 2FA?", "Settings": "Pengaturan", "Dashboard": "Dasbor", - "New Update": "Pembaruan Baru", + "New Update": "Pemutakhiran Baru", "Language": "Bahasa", - "Appearance": "Tampilan", + "Appearance": "Penampilan", "Theme": "Tema", "General": "Umum", "Primary Base URL": "Base URL Utama", @@ -126,7 +126,7 @@ "Test": "Tes", "Certificate Info": "Info Sertifikat", "Resolver Server": "Server Penyelesai", - "Resource Record Type": "Jenis Rekaman Sumber", + "Resource Record Type": "Jenis Rekam Sumber Daya", "Last Result": "Hasil Terakhir", "Create your admin account": "Buat akun admin Anda", "Repeat Password": "Ulangi Kata Sandi", @@ -540,7 +540,7 @@ "Retype the address.": "Ketik ulang alamat.", "Go back to the previous page.": "Kembali ke halaman sebelumnya.", "Coming Soon": "Segera", - "wayToGetClickSendSMSToken": "Anda bisa mendapatkan Nama Pengguna API dan Kunci API dari {0} .", + "wayToGetClickSendSMSToken": "Anda bisa mendapatkan Nama Pengguna API dan Kunci API dari {here} .", "Connection String": "String Koneksi", "Query": "Query", "settingsCertificateExpiry": "Sertifikat TLS Kadaluarsa", @@ -585,7 +585,7 @@ "Game": "Permainan", "markdownSupported": "Sintaks markdown didukung", "statusMaintenance": "Pemeliharaan", - "Maintenance": "Tidak Ada Pemeliharaan", + "Maintenance": "Pemeliharaan", "General Monitor Type": "Tipe Monitor Umum", "Passive Monitor Type": "Tipe Monitor Pasif", "Specific Monitor Type": "Tipe Monitor Spesifik", @@ -792,7 +792,7 @@ "Json Query": "Kueri JSON", "setupDatabaseSQLite": "File database sederhana, direkomendasikan untuk penerapan skala kecil. Sebelum v2.0.0, Uptime Kuma menggunakan SQLite sebagai database default.", "setupDatabaseMariaDB": "Hubungkan ke database MariaDB eksternal. Anda perlu mengatur informasi koneksi database.", - "setupDatabaseEmbeddedMariaDB": "Anda tidak perlu mengatur apa pun. Docker Image ini telah menyematkan dan mengonfigurasi MariaDB untuk Anda secara otomatis. Uptime Kuma akan terhubung ke database ini melalui soket unix.", + "setupDatabaseEmbeddedMariaDB": "Anda tidak perlu mengatur apa pun. Docker Image ini telah disemati MariaDB dan dikonfigurasi untuk Anda secara otomatis. Uptime Kuma akan terhubung ke database ini melalui soket Unix.", "setupDatabaseChooseDatabase": "Database mana yang ingin Anda gunakan?", "dbName": "Nama Database", "pushViewCode": "Bagaimana cara menggunakan Push monitor? (Lihat Kode)", @@ -1097,23 +1097,23 @@ "issueWithGoogleChatOnAndroidHelptext": "Ini juga memungkinkan untuk menyiasati bug dari upstream, seperti pada {issuetackerURL}", "smseagleMsgTtsAdvanced": "Panggilan teks-ke-ucapan (Lanjutan)", "smseagleDocs": "Dokumentasi dan Ketersediaan APIv2: {0}", - "SpugPush Template Code": "Kode templat", + "SpugPush Template Code": "Kode Templat", "ntfyPriorityHelptextPriorityHigherThanDown": "Prioritas biasa harus lebih tinggi daripada prioritas {0}. Prioritas {1} lebih tinggi daripada {0} prioritas {2}", "defaultFriendlyName": "Monitor Baru", "telegramServerUrl": "(Opsional) Url Server", "Path": "Path", - "mqttWebSocketPath": "MQTT WebSocket Path", - "mqttWebsocketPathExplanation": "Path WebSocket untuk MQTT yang melalui koneksi WebSocket (e.g., /mqtt)", + "mqttWebSocketPath": "Path WebSocket MQTT", + "mqttWebsocketPathExplanation": "Path WebSocket untuk MQTT melalui koneksi WebSocket (e.g., /mqtt)", "mqttWebsocketPathInvalid": "Harap gunakan format Path WebSocket yang valid", "mqttHostnameTip": "Harap gunakan format ini {hostnameFormat}", "smseagleComma": "Gunakan koma untuk memisahkan beberapa nilai", "Add Tags": "Tambahkan Tanda", "tagAlreadyOnMonitor": "Tanda ini (name and value) sudah ada di monitor atau penambahan tertunda.", - "tagAlreadyStaged": "Tanda ini (name and value) sudah disiapkan untuk batch ini", + "tagAlreadyStaged": "Tanda ini (name and value) sudah disiapkan untuk batch ini.", "tagNameExists": "Tanda sistem dengan nama ini sudah ada. Silakan pilih dari daftar atau gunakan nama yang berbeda.", "smseagleGroupV2": "ID Grup Kontak", - "smseagleContactV2": "ID kontak Phonebook", - "smseagleMsgType": "Tipe Pesan", + "smseagleContactV2": "ID kontak buku telepon", + "smseagleMsgType": "Tipe pesan", "smseagleMsgSms": "Pesan SMS (default)", "smseagleMsgRing": "Panggilan telepon", "smseagleMsgTts": "Panggilan teks-ke-ucapan", @@ -1123,10 +1123,10 @@ "smseagleApiv1": "APIv1 (untuk proyek yang sudah ada & kompatibilitas mundur)", "smseagleApiv2": "APIv2 (direkomendasikan untuk integrasi baru)", "ntfyPriorityDown": "Prioritas untuk kejadian DOWN", - "FlashDuty Push URL": "Push URL", + "FlashDuty Push URL": "URL Push", "FlashDuty Push URL Placeholder": "Salin dari halaman integrasi peringatan", "templateServiceName": "nama layanan", - "templateHostnameOrURL": "Nama Host atau URL", + "templateHostnameOrURL": "nama host atau URL", "templateStatus": "status", "telegramUseTemplateDescription": "Jika diaktifkan, pesan akan dikirim menggunakan template pesan kustom.", "wayToWriteEvolutionRecipient": "Nomor telepon dengan kode negara, namun tanpa tanda plus (+) di awal ({0}), ID Kontak ({1}) atau ID Grup ({2}).", @@ -1137,5 +1137,8 @@ "Could not clear events": "Gagal membersihkan {failed}/{total} event", "wayToGetEvolutionUrlAndToken": "Anda bisa mendapatkan URL API dan token dengan membuka channel yang Anda inginkan di {0}", "evolutionRecipient": "Nomor Telepon / ID Kontak / ID Grup", - "evolutionInstanceName": "Nama Instans" + "evolutionInstanceName": "Nama Instans", + "Phone numbers": "Nomor telepon", + "Sender name": "Nama pengirim", + "auto-select": "Pilih Otomatis" } From 7faca4dccbf61bfe3f02c0dd484fceb947715c79 Mon Sep 17 00:00:00 2001 From: Anton G Date: Fri, 19 Dec 2025 21:50:01 +0000 Subject: [PATCH 71/91] Translated using Weblate (Valencian) Currently translated at 0.8% (10 of 1235 strings) Added translation using Weblate (Valencian) Co-authored-by: Anton G Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca@valencia/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ca@valencia.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/lang/ca@valencia.json diff --git a/src/lang/ca@valencia.json b/src/lang/ca@valencia.json new file mode 100644 index 00000000..519f5bc3 --- /dev/null +++ b/src/lang/ca@valencia.json @@ -0,0 +1,12 @@ +{ + "settingUpDatabaseMSG": "Configurant la base de dades. Pot trigar una mica, si us plau, espereu.", + "dbName": "Nom de la Base de Dades", + "Settings": "Configuració", + "setupDatabaseChooseDatabase": "Quina base de dades vols fer servir?", + "setupDatabaseEmbeddedMariaDB": "No cal configurar rés. Aquesta imatge Docker té MariaDB inclosa. Uptime Kuma s'hi connectarà amb un socket Unix.", + "setupDatabaseMariaDB": "Connectar a una base de dades MariaDB externa. Cal configurar la informació de la connexió.", + "setupDatabaseSQLite": "Es recomana un sistema senzill de base de dades per desenvolupaments petits. Abans de la versió 2.0.0 es feia servir SQLite per defecte.", + "Dashboard": "Penell de control", + "Help": "Ajuda", + "New Update": "Nova actualització" +} From f48f2b725026519d5f109f7a07439004a3e3ba69 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 20 Dec 2025 11:57:18 +0800 Subject: [PATCH 72/91] Also apply package-lock version fix to beta (#6504) --- extra/beta/update-version.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/extra/beta/update-version.js b/extra/beta/update-version.js index 4af645e0..be0286e3 100644 --- a/extra/beta/update-version.js +++ b/extra/beta/update-version.js @@ -23,7 +23,18 @@ if (! exists) { // Also update package-lock.json const npm = /^win/.test(process.platform) ? "npm.cmd" : "npm"; - childProcess.spawnSync(npm, [ "install" ]); + const resultVersion = childProcess.spawnSync(npm, [ "--no-git-tag-version", "version", version ], { shell: true }); + if (resultVersion.error) { + console.error(resultVersion.error); + console.error("error npm version!"); + process.exit(1); + } + const resultInstall = childProcess.spawnSync(npm, [ "install" ], { shell: true }); + if (resultInstall.error) { + console.error(resultInstall.error); + console.error("error update package-lock!"); + process.exit(1); + } commit(version); } else { From ce076846d16a74aa87edb96adaafc25962207fc2 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 20 Dec 2025 12:18:04 +0800 Subject: [PATCH 73/91] Update npm (#6503) --- package-lock.json | 1794 ++++++++++++++++++++++----------------------- 1 file changed, 864 insertions(+), 930 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8c0506ba..7a629859 100644 --- a/package-lock.json +++ b/package-lock.json @@ -352,49 +352,49 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.913.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.913.0.tgz", - "integrity": "sha512-TdEwasoXnLIb90z7NL1vLbEprzY0vdRqZH97ubIUDo8EaJ6WrJ35Um5g0rcnWKR6C+P9lKKI4mVv2BI2EwY94Q==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.956.0.tgz", + "integrity": "sha512-aFRUb4BY0iAACVFnLdreULiO5ox1jds5TovncPlUogN5TjVA04i+hmfShj9l5Ho1sFa1WKc35tngiRmpQIJSJg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.911.0", - "@aws-sdk/credential-provider-node": "3.913.0", - "@aws-sdk/middleware-host-header": "3.910.0", - "@aws-sdk/middleware-logger": "3.910.0", - "@aws-sdk/middleware-recursion-detection": "3.910.0", - "@aws-sdk/middleware-user-agent": "3.911.0", - "@aws-sdk/region-config-resolver": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@aws-sdk/util-endpoints": "3.910.0", - "@aws-sdk/util-user-agent-browser": "3.910.0", - "@aws-sdk/util-user-agent-node": "3.911.0", - "@smithy/config-resolver": "^4.3.2", - "@smithy/core": "^3.16.1", - "@smithy/fetch-http-handler": "^5.3.3", - "@smithy/hash-node": "^4.2.2", - "@smithy/invalid-dependency": "^4.2.2", - "@smithy/middleware-content-length": "^4.2.2", - "@smithy/middleware-endpoint": "^4.3.3", - "@smithy/middleware-retry": "^4.4.3", - "@smithy/middleware-serde": "^4.2.2", - "@smithy/middleware-stack": "^4.2.2", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/node-http-handler": "^4.4.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", - "@smithy/url-parser": "^4.2.2", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/credential-provider-node": "3.956.0", + "@aws-sdk/middleware-host-header": "3.956.0", + "@aws-sdk/middleware-logger": "3.956.0", + "@aws-sdk/middleware-recursion-detection": "3.956.0", + "@aws-sdk/middleware-user-agent": "3.956.0", + "@aws-sdk/region-config-resolver": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-endpoints": "3.956.0", + "@aws-sdk/util-user-agent-browser": "3.956.0", + "@aws-sdk/util-user-agent-node": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.2", - "@smithy/util-defaults-mode-node": "^4.2.3", - "@smithy/util-endpoints": "^3.2.2", - "@smithy/util-middleware": "^4.2.2", - "@smithy/util-retry": "^4.2.2", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -403,48 +403,48 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.911.0.tgz", - "integrity": "sha512-N9QAeMvN3D1ZyKXkQp4aUgC4wUMuA5E1HuVCkajc0bq1pnH4PIke36YlrDGGREqPlyLFrXCkws2gbL5p23vtlg==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.956.0.tgz", + "integrity": "sha512-TCxCa9B1IMILvk/7sig0fRQzff+M2zBQVZGWOJL8SAZq/gfElIMAf/nYjQwMhXjyq8PFDRGm4GN8ZhNKPeNleQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.911.0", - "@aws-sdk/middleware-host-header": "3.910.0", - "@aws-sdk/middleware-logger": "3.910.0", - "@aws-sdk/middleware-recursion-detection": "3.910.0", - "@aws-sdk/middleware-user-agent": "3.911.0", - "@aws-sdk/region-config-resolver": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@aws-sdk/util-endpoints": "3.910.0", - "@aws-sdk/util-user-agent-browser": "3.910.0", - "@aws-sdk/util-user-agent-node": "3.911.0", - "@smithy/config-resolver": "^4.3.2", - "@smithy/core": "^3.16.1", - "@smithy/fetch-http-handler": "^5.3.3", - "@smithy/hash-node": "^4.2.2", - "@smithy/invalid-dependency": "^4.2.2", - "@smithy/middleware-content-length": "^4.2.2", - "@smithy/middleware-endpoint": "^4.3.3", - "@smithy/middleware-retry": "^4.4.3", - "@smithy/middleware-serde": "^4.2.2", - "@smithy/middleware-stack": "^4.2.2", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/node-http-handler": "^4.4.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", - "@smithy/url-parser": "^4.2.2", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/middleware-host-header": "3.956.0", + "@aws-sdk/middleware-logger": "3.956.0", + "@aws-sdk/middleware-recursion-detection": "3.956.0", + "@aws-sdk/middleware-user-agent": "3.956.0", + "@aws-sdk/region-config-resolver": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-endpoints": "3.956.0", + "@aws-sdk/util-user-agent-browser": "3.956.0", + "@aws-sdk/util-user-agent-node": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.2", - "@smithy/util-defaults-mode-node": "^4.2.3", - "@smithy/util-endpoints": "^3.2.2", - "@smithy/util-middleware": "^4.2.2", - "@smithy/util-retry": "^4.2.2", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -453,23 +453,23 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.911.0.tgz", - "integrity": "sha512-k4QG9A+UCq/qlDJFmjozo6R0eXXfe++/KnCDMmajehIE9kh+b/5DqlGvAmbl9w4e92LOtrY6/DN3mIX1xs4sXw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.956.0.tgz", + "integrity": "sha512-BMOCXZNz5z4cR3/SaNHUfeoZQUG/y39bLscdLUgg3RL6mDOhuINIqMc0qc6G3kpwDTLVdXikF4nmx2UrRK9y5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.910.0", - "@aws-sdk/xml-builder": "3.911.0", - "@smithy/core": "^3.16.1", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/property-provider": "^4.2.2", - "@smithy/protocol-http": "^5.3.2", - "@smithy/signature-v4": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/xml-builder": "3.956.0", + "@smithy/core": "^3.20.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.2", + "@smithy/util-middleware": "^4.2.7", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -478,16 +478,16 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.913.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.913.0.tgz", - "integrity": "sha512-AYZNpy3eEFzopzntLcrkEQQ1qyhg0V7BL8U77QdLSYtzoYvI9CqnWOGdWnNSEUp+Mpbk1VJyPzVfkDoDq5kX6g==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.956.0.tgz", + "integrity": "sha512-sqH7k7Uvbvc5V0Y8tB8CZoCd5KEuH5g30+wbrGac9s1D+TXXN6g8KnJhyYrHfwa1rJiY7B1mK80ENjG4LlUr0g==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.913.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/client-cognito-identity": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -495,16 +495,16 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.911.0.tgz", - "integrity": "sha512-6FWRwWn3LUZzLhqBXB+TPMW2ijCWUqGICSw8bVakEdODrvbiv1RT/MVUayzFwz/ek6e6NKZn6DbSWzx07N9Hjw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.956.0.tgz", + "integrity": "sha512-aLJavJMPVTvhmggJ0pcdCKEWJk3sL9QkJkUIEoTzOou7HnxWS66N4sC5e8y27AF2nlnYfIxq3hkEiZlGi/vlfA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -512,21 +512,21 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.911.0.tgz", - "integrity": "sha512-xUlwKmIUW2fWP/eM3nF5u4CyLtOtyohlhGJ5jdsJokr3MrQ7w0tDITO43C9IhCn+28D5UbaiWnKw5ntkw7aVfA==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.956.0.tgz", + "integrity": "sha512-VsKzBNhwT6XJdW3HQX6o4KOHj1MAzSwA8/zCsT9mOGecozw1yeCcQPtlWDSlfsfygKVCXz7fiJzU03yl11NKMA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/fetch-http-handler": "^5.3.3", - "@smithy/node-http-handler": "^4.4.1", - "@smithy/property-provider": "^4.2.2", - "@smithy/protocol-http": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", - "@smithy/util-stream": "^4.5.2", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", "tslib": "^2.6.2" }, "engines": { @@ -534,24 +534,45 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.913.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.913.0.tgz", - "integrity": "sha512-iR4c4NQ1OSRKQi0SxzpwD+wP1fCy+QNKtEyCajuVlD0pvmoIHdrm5THK9e+2/7/SsQDRhOXHJfLGxHapD74WJw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.956.0.tgz", + "integrity": "sha512-TlDy+IGr0JIRBwnPdV31J1kWXEcfsR3OzcNVWQrguQdHeTw2lU5eft16kdizo6OruqcZRF/LvHBDwAWx4u51ww==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.911.0", - "@aws-sdk/credential-provider-env": "3.911.0", - "@aws-sdk/credential-provider-http": "3.911.0", - "@aws-sdk/credential-provider-process": "3.911.0", - "@aws-sdk/credential-provider-sso": "3.911.0", - "@aws-sdk/credential-provider-web-identity": "3.911.0", - "@aws-sdk/nested-clients": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/credential-provider-imds": "^4.2.2", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/credential-provider-env": "3.956.0", + "@aws-sdk/credential-provider-http": "3.956.0", + "@aws-sdk/credential-provider-login": "3.956.0", + "@aws-sdk/credential-provider-process": "3.956.0", + "@aws-sdk/credential-provider-sso": "3.956.0", + "@aws-sdk/credential-provider-web-identity": "3.956.0", + "@aws-sdk/nested-clients": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.956.0.tgz", + "integrity": "sha512-p2Y62mdIlUpiyi5tvn8cKTja5kq1e3Rm5gm4wpNQ9caTayfkIEXyKrbP07iepTv60Coaylq9Fx6b5En/siAeGA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/core": "3.956.0", + "@aws-sdk/nested-clients": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -559,23 +580,23 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.913.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.913.0.tgz", - "integrity": "sha512-HQPLkKDxS83Q/nZKqg9bq4igWzYQeOMqhpx5LYs4u1GwsKeCsYrrfz12Iu4IHNWPp9EnGLcmdfbfYuqZGrsaSQ==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.956.0.tgz", + "integrity": "sha512-ITjp7uAQh17ljUsCWkPRmLjyFfupGlJVUfTLHnZJ+c7G0P0PDRquaM+fBSh0y33tauHsBa5fGnCCLRo5hy9sGQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.911.0", - "@aws-sdk/credential-provider-http": "3.911.0", - "@aws-sdk/credential-provider-ini": "3.913.0", - "@aws-sdk/credential-provider-process": "3.911.0", - "@aws-sdk/credential-provider-sso": "3.911.0", - "@aws-sdk/credential-provider-web-identity": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/credential-provider-imds": "^4.2.2", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/credential-provider-env": "3.956.0", + "@aws-sdk/credential-provider-http": "3.956.0", + "@aws-sdk/credential-provider-ini": "3.956.0", + "@aws-sdk/credential-provider-process": "3.956.0", + "@aws-sdk/credential-provider-sso": "3.956.0", + "@aws-sdk/credential-provider-web-identity": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -583,17 +604,17 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.911.0.tgz", - "integrity": "sha512-mKshhV5jRQffZjbK9x7bs+uC2IsYKfpzYaBamFsEov3xtARCpOiKaIlM8gYKFEbHT2M+1R3rYYlhhl9ndVWS2g==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.956.0.tgz", + "integrity": "sha512-wpAex+/LGVWkHPchsn9FWy1ahFualIeSYq3ADFc262ljJjrltOWGh3+cu3OK3gTMkX6VEsl+lFvy1P7Bk7cgXA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -601,19 +622,19 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.911.0.tgz", - "integrity": "sha512-JAxd4uWe0Zc9tk6+N0cVxe9XtJVcOx6Ms0k933ZU9QbuRMH6xti/wnZxp/IvGIWIDzf5fhqiGyw5MSyDeI5b1w==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.956.0.tgz", + "integrity": "sha512-IRFSDF32x8TpOEYSGMcGQVJUiYuJaFkek0aCjW0klNIZHBF1YpflVpUarK9DJe4v4ryfVq3c0bqR/JFui8QFmw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.911.0", - "@aws-sdk/core": "3.911.0", - "@aws-sdk/token-providers": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/client-sso": "3.956.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/token-providers": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -621,18 +642,18 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.911.0.tgz", - "integrity": "sha512-urIbXWWG+cm54RwwTFQuRwPH0WPsMFSDF2/H9qO2J2fKoHRURuyblFCyYG3aVKZGvFBhOizJYexf5+5w3CJKBw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.956.0.tgz", + "integrity": "sha512-4YkmjwZC+qoUKlVOY9xNx7BTKRdJ1R1/Zjk2QSW5aWtwkk2e07ZUQvUpbW4vGpAxGm1K4EgRcowuSpOsDTh44Q==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.911.0", - "@aws-sdk/nested-clients": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/nested-clients": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -640,30 +661,31 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.913.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.913.0.tgz", - "integrity": "sha512-KnkvoLXGszXNV7IMLdUH2Smo+tr4MiHUp2zkkrhl+6uXdSWpEAhlARSA8OPIxgVMabUW1AWDumN7Km7z0GvnWg==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.956.0.tgz", + "integrity": "sha512-Fc8NWNkPZt61OIS6BRUWS+Po3z3nh3gE4w+4cZ083CdXxx4CCB82Oa0Fe2/E5l7p/z4vhEDXWwuJdiDQQXTplQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.913.0", - "@aws-sdk/core": "3.911.0", - "@aws-sdk/credential-provider-cognito-identity": "3.913.0", - "@aws-sdk/credential-provider-env": "3.911.0", - "@aws-sdk/credential-provider-http": "3.911.0", - "@aws-sdk/credential-provider-ini": "3.913.0", - "@aws-sdk/credential-provider-node": "3.913.0", - "@aws-sdk/credential-provider-process": "3.911.0", - "@aws-sdk/credential-provider-sso": "3.911.0", - "@aws-sdk/credential-provider-web-identity": "3.911.0", - "@aws-sdk/nested-clients": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/config-resolver": "^4.3.2", - "@smithy/core": "^3.16.1", - "@smithy/credential-provider-imds": "^4.2.2", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/property-provider": "^4.2.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/client-cognito-identity": "3.956.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/credential-provider-cognito-identity": "3.956.0", + "@aws-sdk/credential-provider-env": "3.956.0", + "@aws-sdk/credential-provider-http": "3.956.0", + "@aws-sdk/credential-provider-ini": "3.956.0", + "@aws-sdk/credential-provider-login": "3.956.0", + "@aws-sdk/credential-provider-node": "3.956.0", + "@aws-sdk/credential-provider-process": "3.956.0", + "@aws-sdk/credential-provider-sso": "3.956.0", + "@aws-sdk/credential-provider-web-identity": "3.956.0", + "@aws-sdk/nested-clients": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -671,15 +693,15 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.910.0.tgz", - "integrity": "sha512-F9Lqeu80/aTM6S/izZ8RtwSmjfhWjIuxX61LX+/9mxJyEkgaECRxv0chsLQsLHJumkGnXRy/eIyMLBhcTPF5vg==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.956.0.tgz", + "integrity": "sha512-JujNJDp/dj1DbsI0ntzhrz2uJ4jpumcKtr743eMpEhdboYjuu/UzY8/7n1h5JbgU9TNXgqE9lgQNa5QPG0Tvsg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/protocol-http": "^5.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/types": "3.956.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -687,14 +709,14 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.910.0.tgz", - "integrity": "sha512-3LJyyfs1USvRuRDla1pGlzGRtXJBXD1zC9F+eE9Iz/V5nkmhyv52A017CvKWmYoR0DM9dzjLyPOI0BSSppEaTw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.956.0.tgz", + "integrity": "sha512-Qff39yEOPYgRsm4SrkHOvS0nSoxXILYnC8Akp0uMRi2lOcZVyXL3WCWqIOtI830qVI4GPa796sleKguxx50RHg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/types": "^4.7.1", + "@aws-sdk/types": "3.956.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -702,16 +724,16 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.910.0.tgz", - "integrity": "sha512-m/oLz0EoCy+WoIVBnXRXJ4AtGpdl0kPE7U+VH9TsuUzHgxY1Re/176Q1HWLBRVlz4gr++lNsgsMWEC+VnAwMpw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.956.0.tgz", + "integrity": "sha512-/f4JxL2kSCYhy63wovqts6SJkpalSLvuFe78ozt3ClrGoHGyr69o7tPRYx5U7azLgvrIGjsWUyTayeAk3YHIVQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.910.0", - "@aws/lambda-invoke-store": "^0.0.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/types": "3.956.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -719,18 +741,18 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.911.0.tgz", - "integrity": "sha512-rY3LvGvgY/UI0nmt5f4DRzjEh8135A2TeHcva1bgOmVfOI4vkkGfA20sNRqerOkSO6hPbkxJapO50UJHFzmmyA==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.956.0.tgz", + "integrity": "sha512-azH8OJ0AIe3NafaTNvJorG/ALaLNTYwVKtyaSeQKOvaL8TNuBVuDnM5iHCiWryIaRgZotomqycwyfNKLw2D3JQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@aws-sdk/util-endpoints": "3.910.0", - "@smithy/core": "^3.16.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-endpoints": "3.956.0", + "@smithy/core": "^3.20.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -738,48 +760,48 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.911.0.tgz", - "integrity": "sha512-lp/sXbdX/S0EYaMYPVKga0omjIUbNNdFi9IJITgKZkLC6CzspihIoHd5GIdl4esMJevtTQQfkVncXTFkf/a4YA==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.956.0.tgz", + "integrity": "sha512-GHDQMkxoWpi3eTrhWGmghw0gsZJ5rM1ERHfBFhlhduCdtV3TyhKVmDgFG84KhU8v18dcVpSp3Pu3KwH7j1tgIg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.911.0", - "@aws-sdk/middleware-host-header": "3.910.0", - "@aws-sdk/middleware-logger": "3.910.0", - "@aws-sdk/middleware-recursion-detection": "3.910.0", - "@aws-sdk/middleware-user-agent": "3.911.0", - "@aws-sdk/region-config-resolver": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@aws-sdk/util-endpoints": "3.910.0", - "@aws-sdk/util-user-agent-browser": "3.910.0", - "@aws-sdk/util-user-agent-node": "3.911.0", - "@smithy/config-resolver": "^4.3.2", - "@smithy/core": "^3.16.1", - "@smithy/fetch-http-handler": "^5.3.3", - "@smithy/hash-node": "^4.2.2", - "@smithy/invalid-dependency": "^4.2.2", - "@smithy/middleware-content-length": "^4.2.2", - "@smithy/middleware-endpoint": "^4.3.3", - "@smithy/middleware-retry": "^4.4.3", - "@smithy/middleware-serde": "^4.2.2", - "@smithy/middleware-stack": "^4.2.2", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/node-http-handler": "^4.4.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", - "@smithy/url-parser": "^4.2.2", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/middleware-host-header": "3.956.0", + "@aws-sdk/middleware-logger": "3.956.0", + "@aws-sdk/middleware-recursion-detection": "3.956.0", + "@aws-sdk/middleware-user-agent": "3.956.0", + "@aws-sdk/region-config-resolver": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-endpoints": "3.956.0", + "@aws-sdk/util-user-agent-browser": "3.956.0", + "@aws-sdk/util-user-agent-node": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.2", - "@smithy/util-defaults-mode-node": "^4.2.3", - "@smithy/util-endpoints": "^3.2.2", - "@smithy/util-middleware": "^4.2.2", - "@smithy/util-retry": "^4.2.2", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -788,17 +810,16 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.910.0.tgz", - "integrity": "sha512-gzQAkuHI3xyG6toYnH/pju+kc190XmvnB7X84vtN57GjgdQJICt9So/BD0U6h+eSfk9VBnafkVrAzBzWMEFZVw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.956.0.tgz", + "integrity": "sha512-byU5XYekW7+rZ3e067y038wlrpnPkdI4fMxcHCHrv+TAfzl8CCk5xLyzerQtXZR8cVPVOXuaYWe1zKW0uCnXUA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/types": "^4.7.1", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.2", + "@aws-sdk/types": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -806,18 +827,18 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.911.0.tgz", - "integrity": "sha512-O1c5F1pbEImgEe3Vr8j1gpWu69UXWj3nN3vvLGh77hcrG5dZ8I27tSP5RN4Labm8Dnji/6ia+vqSYpN8w6KN5A==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.956.0.tgz", + "integrity": "sha512-I01Q9yDeG9oXge14u/bubtSdBpok/rTsPp2AQwy5xj/5PatRTHPbUTP6tef3AH/lFCAqkI0nncIcgx6zikDdUQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.911.0", - "@aws-sdk/nested-clients": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/nested-clients": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -825,13 +846,13 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.910.0.tgz", - "integrity": "sha512-o67gL3vjf4nhfmuSUNNkit0d62QJEwwHLxucwVJkR/rw9mfUtAWsgBs8Tp16cdUbMgsyQtCQilL8RAJDoGtadQ==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.956.0.tgz", + "integrity": "sha512-DMRU/p9wAlAJxEjegnLwduCA8YP2pcT/sIJ+17KSF38c5cC6CbBhykwbZLECTo+zYzoFrOqeLbqE6paH8Gx3ug==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.7.1", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -839,16 +860,16 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.910.0.tgz", - "integrity": "sha512-6XgdNe42ibP8zCQgNGDWoOF53RfEKzpU/S7Z29FTTJ7hcZv0SytC0ZNQQZSx4rfBl036YWYwJRoJMlT4AA7q9A==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.956.0.tgz", + "integrity": "sha512-xZ5CBoubS4rs9JkFniKNShDtfqxaMUnwaebYMoybZm070q9+omFkQkJYXl7kopTViEgZgQl1sAsAkrawBM8qEQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/types": "^4.7.1", - "@smithy/url-parser": "^4.2.2", - "@smithy/util-endpoints": "^3.2.2", + "@aws-sdk/types": "3.956.0", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-endpoints": "^3.2.7", "tslib": "^2.6.2" }, "engines": { @@ -856,9 +877,9 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.893.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz", - "integrity": "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.953.0.tgz", + "integrity": "sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -869,29 +890,29 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.910.0.tgz", - "integrity": "sha512-iOdrRdLZHrlINk9pezNZ82P/VxO/UmtmpaOAObUN+xplCUJu31WNM2EE/HccC8PQw6XlAudpdA6HDTGiW6yVGg==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.956.0.tgz", + "integrity": "sha512-s8KwYR3HqiGNni7a1DN2P3RUog64QoBQ6VCSzJkHBWb6++8KSOpqeeDkfmEz+22y1LOne+bRrpDGKa0aqOc3rQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/types": "^4.7.1", + "@aws-sdk/types": "3.956.0", + "@smithy/types": "^4.11.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.911.0.tgz", - "integrity": "sha512-3l+f6ooLF6Z6Lz0zGi7vSKSUYn/EePPizv88eZQpEAFunBHv+CSVNPtxhxHfkm7X9tTsV4QGZRIqo3taMLolmA==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.956.0.tgz", + "integrity": "sha512-H0r6ol3Rr63/3xvrUsLqHps+cA7VkM7uCU5NtuTHnMbv3uYYTKf9M2XFHAdVewmmRgssTzvqemrARc8Ji3SNvg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "3.911.0", - "@aws-sdk/types": "3.910.0", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/middleware-user-agent": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -907,13 +928,13 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.911.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.911.0.tgz", - "integrity": "sha512-/yh3oe26bZfCVGrIMRM9Z4hvvGJD+qx5tOLlydOkuBkm72aXON7D9+MucjJXTAcI8tF2Yq+JHa0478eHQOhnLg==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.956.0.tgz", + "integrity": "sha512-x/IvXUeQYNUEQojpRIQpFt4X7XGxqzjUlXFRdwaTCtTz3q1droXVJvYOhnX3KiMgzeHGlBJfY4Nmq3oZNEUGFw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.7.1", + "@smithy/types": "^4.11.0", "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, @@ -922,9 +943,9 @@ } }, "node_modules/@aws/lambda-invoke-store": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz", - "integrity": "sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", "license": "Apache-2.0", "optional": true, "engines": { @@ -1034,9 +1055,9 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.1.tgz", - "integrity": "sha512-UVZlVLfLyz6g3Hy7GNDpooMQonUygH7ghdiSASOOHy97fKj/mPLqgDX7aidOijn+sCMU+WU8NjlPlNTgnvbcGA==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -1185,33 +1206,33 @@ } }, "node_modules/@azure/msal-browser": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.25.1.tgz", - "integrity": "sha512-kAdOSNjvMbeBmEyd5WnddGmIpKCbAAGj4Gg/1iURtF+nHmIfS0+QUBBO3uaHl7CBB2R1SEAbpOgxycEwrHOkFA==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.27.0.tgz", + "integrity": "sha512-bZ8Pta6YAbdd0o0PEaL1/geBsPrLEnyY/RDWqvF1PP9RUH8EMLvUMGoZFYS6jSlUan6KZ9IMTLCnwpWWpQRK/w==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.13.0" + "@azure/msal-common": "15.13.3" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.13.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.0.tgz", - "integrity": "sha512-8oF6nj02qX7eE/6+wFT5NluXRHc05AgdCC3fJnkjiJooq8u7BcLmxaYYSwc2AfEkWRMRi6Eyvvbeqk4U4412Ag==", + "version": "15.13.3", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.3.tgz", + "integrity": "sha512-shSDU7Ioecya+Aob5xliW9IGq1Ui8y4EVSdWGyI1Gbm4Vg61WpP95LuzcY214/wEjSn6w4PZYD4/iVldErHayQ==", "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.0.tgz", - "integrity": "sha512-23BXm82Mp5XnRhrcd4mrHa0xuUNRp96ivu3nRatrfdAqjoeWAGyD0eEAafxAOHAEWWmdlyFK4ELFcdziXyw2sA==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.4.tgz", + "integrity": "sha512-lvuAwsDpPDE/jSuVQOBMpLbXuVuLsPNRwWCyK3/6bPlBk0fGWegqoZ0qjZclMWyQ2JNvIY3vHY7hoFmFmFQcOw==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.13.0", + "@azure/msal-common": "15.13.3", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -3340,9 +3361,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -3384,22 +3405,6 @@ "concat-map": "0.0.1" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3413,19 +3418,6 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@fastify/busboy": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", @@ -3936,9 +3928,9 @@ } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.2.tgz", - "integrity": "sha512-QgA5AySqB27cGTXBFmnpifAi7HxoGUeezwo6p9dI03MuDB6Pp33zgclqVb6oVK3j6I9Vesg0+oojW2XxB59SGg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.4.tgz", + "integrity": "sha512-p7X/ytJDIdwUfFL/CLOhKgdfJe1Fa8uw9seJYvdOmnP9JBWGWHW69HkOixXS6Wy9yvGf1MbhcS6lVmrhy4jm2g==", "license": "MIT", "optional": true, "dependencies": { @@ -4412,38 +4404,6 @@ } } }, - "node_modules/@rollup/plugin-babel/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-babel/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/plugin-babel/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true, - "license": "MIT" - }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", @@ -4469,6 +4429,42 @@ } } }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/plugin-replace": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", @@ -4483,38 +4479,6 @@ "rollup": "^1.20.0 || ^2.0.0" } }, - "node_modules/@rollup/plugin-replace/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/plugin-replace/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true, - "license": "MIT" - }, "node_modules/@rollup/plugin-replace/node_modules/magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", @@ -4575,45 +4539,41 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" }, "engines": { - "node": ">=14.0.0" + "node": ">= 8.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } + "license": "MIT" + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true, + "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", - "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", + "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", "cpu": [ "arm" ], @@ -4625,9 +4585,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", - "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", + "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", "cpu": [ "arm64" ], @@ -4639,9 +4599,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", - "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", + "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", "cpu": [ "arm64" ], @@ -4653,9 +4613,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", - "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", + "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", "cpu": [ "x64" ], @@ -4667,9 +4627,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", - "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", + "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", "cpu": [ "arm64" ], @@ -4681,9 +4641,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", - "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", + "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", "cpu": [ "x64" ], @@ -4695,9 +4655,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", - "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", + "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", "cpu": [ "arm" ], @@ -4709,9 +4669,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", - "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", + "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", "cpu": [ "arm" ], @@ -4723,9 +4683,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", - "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", + "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", "cpu": [ "arm64" ], @@ -4737,9 +4697,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", - "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", + "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", "cpu": [ "arm64" ], @@ -4751,9 +4711,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", - "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", + "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", "cpu": [ "loong64" ], @@ -4765,9 +4725,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", - "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", + "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", "cpu": [ "ppc64" ], @@ -4779,9 +4739,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", - "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", + "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", "cpu": [ "riscv64" ], @@ -4793,9 +4753,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", - "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", + "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", "cpu": [ "riscv64" ], @@ -4807,9 +4767,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", - "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", + "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", "cpu": [ "s390x" ], @@ -4821,9 +4781,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", - "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", + "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", "cpu": [ "x64" ], @@ -4835,9 +4795,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", - "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", + "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", "cpu": [ "x64" ], @@ -4849,9 +4809,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", - "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", + "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", "cpu": [ "arm64" ], @@ -4863,9 +4823,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", - "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", + "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", "cpu": [ "arm64" ], @@ -4877,9 +4837,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", - "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", + "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", "cpu": [ "ia32" ], @@ -4891,9 +4851,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", - "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", + "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", "cpu": [ "x64" ], @@ -4905,9 +4865,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", - "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", + "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", "cpu": [ "x64" ], @@ -5006,13 +4966,13 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.3.tgz", - "integrity": "sha512-xWL9Mf8b7tIFuAlpjKtRPnHrR8XVrwTj5NPYO/QwZPtc0SDLsPxb56V5tzi5yspSMytISHybifez+4jlrx0vkQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz", + "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5020,16 +4980,17 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.3.3.tgz", - "integrity": "sha512-xSql8A1Bl41O9JvGU/CtgiLBlwkvpHTSKRlvz9zOBvBCPjXghZ6ZkcVzmV2f7FLAA+80+aqKmIOmy8pEDrtCaw==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz", + "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.3.3", - "@smithy/types": "^4.8.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.3", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -5037,19 +4998,19 @@ } }, "node_modules/@smithy/core": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.17.0.tgz", - "integrity": "sha512-Tir3DbfoTO97fEGUZjzGeoXgcQAUBRDTmuH9A8lxuP8ATrgezrAJ6cLuRvwdKN4ZbYNlHgKlBX69Hyu3THYhtg==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.0.tgz", + "integrity": "sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/middleware-serde": "^4.2.3", - "@smithy/protocol-http": "^5.3.3", - "@smithy/types": "^4.8.0", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.3", - "@smithy/util-stream": "^4.5.3", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", "@smithy/util-utf8": "^4.2.0", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" @@ -5059,16 +5020,16 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.3.tgz", - "integrity": "sha512-hA1MQ/WAHly4SYltJKitEsIDVsNmXcQfYBRv2e+q04fnqtAX5qXaybxy/fhUeAMCnQIdAjaGDb04fMHQefWRhw==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz", + "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.3.3", - "@smithy/property-provider": "^4.2.3", - "@smithy/types": "^4.8.0", - "@smithy/url-parser": "^4.2.3", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -5076,15 +5037,15 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.4.tgz", - "integrity": "sha512-bwigPylvivpRLCm+YK9I5wRIYjFESSVwl8JQ1vVx/XhCw0PtCi558NwTnT2DaVCl5pYlImGuQTSwMsZ+pIavRw==", + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz", + "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/protocol-http": "^5.3.3", - "@smithy/querystring-builder": "^4.2.3", - "@smithy/types": "^4.8.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, @@ -5093,13 +5054,13 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.3.tgz", - "integrity": "sha512-6+NOdZDbfuU6s1ISp3UOk5Rg953RJ2aBLNLLBEcamLjHAg1Po9Ha7QIB5ZWhdRUVuOUrT8BVFR+O2KIPmw027g==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz", + "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -5109,13 +5070,13 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.3.tgz", - "integrity": "sha512-Cc9W5DwDuebXEDMpOpl4iERo8I0KFjTnomK2RMdhhR87GwrSmUmwMxS4P5JdRf+LsjOdIqumcerwRgYMr/tZ9Q==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz", + "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5136,14 +5097,14 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.3.tgz", - "integrity": "sha512-/atXLsT88GwKtfp5Jr0Ks1CSa4+lB+IgRnkNrrYP0h1wL4swHNb0YONEvTceNKNdZGJsye+W2HH8W7olbcPUeA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz", + "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/protocol-http": "^5.3.3", - "@smithy/types": "^4.8.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5151,19 +5112,19 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.4.tgz", - "integrity": "sha512-/RJhpYkMOaUZoJEkddamGPPIYeKICKXOu/ojhn85dKDM0n5iDIhjvYAQLP3K5FPhgB203O3GpWzoK2OehEoIUw==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.1.tgz", + "integrity": "sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/core": "^3.17.0", - "@smithy/middleware-serde": "^4.2.3", - "@smithy/node-config-provider": "^4.3.3", - "@smithy/shared-ini-file-loader": "^4.3.3", - "@smithy/types": "^4.8.0", - "@smithy/url-parser": "^4.2.3", - "@smithy/util-middleware": "^4.2.3", + "@smithy/core": "^3.20.0", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-middleware": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -5171,19 +5132,19 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.4.tgz", - "integrity": "sha512-vSgABQAkuUHRO03AhR2rWxVQ1un284lkBn+NFawzdahmzksAoOeVMnXXsuPViL4GlhRHXqFaMlc8Mj04OfQk1w==", + "version": "4.4.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.17.tgz", + "integrity": "sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.3.3", - "@smithy/protocol-http": "^5.3.3", - "@smithy/service-error-classification": "^4.2.3", - "@smithy/smithy-client": "^4.9.0", - "@smithy/types": "^4.8.0", - "@smithy/util-middleware": "^4.2.3", - "@smithy/util-retry": "^4.2.3", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, @@ -5192,14 +5153,14 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.3.tgz", - "integrity": "sha512-8g4NuUINpYccxiCXM5s1/V+uLtts8NcX4+sPEbvYQDZk4XoJfDpq5y2FQxfmUL89syoldpzNzA0R9nhzdtdKnQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz", + "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/protocol-http": "^5.3.3", - "@smithy/types": "^4.8.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5207,13 +5168,13 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.3.tgz", - "integrity": "sha512-iGuOJkH71faPNgOj/gWuEGS6xvQashpLwWB1HjHq1lNNiVfbiJLpZVbhddPuDbx9l4Cgl0vPLq5ltRfSaHfspA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz", + "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5221,15 +5182,15 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.3.tgz", - "integrity": "sha512-NzI1eBpBSViOav8NVy1fqOlSfkLgkUjUTlohUSgAEhHaFWA3XJiLditvavIP7OpvTjDp5u2LhtlBhkBlEisMwA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz", + "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/property-provider": "^4.2.3", - "@smithy/shared-ini-file-loader": "^4.3.3", - "@smithy/types": "^4.8.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5237,16 +5198,16 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.2.tgz", - "integrity": "sha512-MHFvTjts24cjGo1byXqhXrbqm7uznFD/ESFx8npHMWTFQVdBZjrT1hKottmp69LBTRm/JQzP/sn1vPt0/r6AYQ==", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz", + "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/abort-controller": "^4.2.3", - "@smithy/protocol-http": "^5.3.3", - "@smithy/querystring-builder": "^4.2.3", - "@smithy/types": "^4.8.0", + "@smithy/abort-controller": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5254,13 +5215,13 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.3.tgz", - "integrity": "sha512-+1EZ+Y+njiefCohjlhyOcy1UNYjT+1PwGFHCxA/gYctjg3DQWAU19WigOXAco/Ql8hZokNehpzLd0/+3uCreqQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz", + "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5268,13 +5229,13 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.3.tgz", - "integrity": "sha512-Mn7f/1aN2/jecywDcRDvWWWJF4uwg/A0XjFMJtj72DsgHTByfjRltSqcT9NyE9RTdBSN6X1RSXrhn/YWQl8xlw==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz", + "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5282,13 +5243,13 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.3.tgz", - "integrity": "sha512-LOVCGCmwMahYUM/P0YnU/AlDQFjcu+gWbFJooC417QRB/lDJlWSn8qmPSDp+s4YVAHOgtgbNG4sR+SxF/VOcJQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz", + "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, @@ -5297,13 +5258,13 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.3.tgz", - "integrity": "sha512-cYlSNHcTAX/wc1rpblli3aUlLMGgKZ/Oqn8hhjFASXMCXjIqeuQBei0cnq2JR8t4RtU9FpG6uyl6PxyArTiwKA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz", + "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5311,26 +5272,26 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.3.tgz", - "integrity": "sha512-NkxsAxFWwsPsQiwFG2MzJ/T7uIR6AQNh1SzcxSUnmmIqIQMlLRQDKhc17M7IYjiuBXhrQRjQTo3CxX+DobS93g==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz", + "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0" + "@smithy/types": "^4.11.0" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.3.tgz", - "integrity": "sha512-9f9Ixej0hFhroOK2TxZfUUDR13WVa8tQzhSzPDgXe5jGL3KmaM9s8XN7RQwqtEypI82q9KHnKS71CJ+q/1xLtQ==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz", + "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5338,17 +5299,17 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.3.tgz", - "integrity": "sha512-CmSlUy+eEYbIEYN5N3vvQTRfqt0lJlQkaQUIf+oizu7BbDut0pozfDjBGecfcfWf7c62Yis4JIEgqQ/TCfodaA==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz", + "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.3", - "@smithy/types": "^4.8.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.3", + "@smithy/util-middleware": "^4.2.7", "@smithy/util-uri-escape": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -5358,18 +5319,18 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.0.tgz", - "integrity": "sha512-qz7RTd15GGdwJ3ZCeBKLDQuUQ88m+skh2hJwcpPm1VqLeKzgZvXf6SrNbxvx7uOqvvkjCMXqx3YB5PDJyk00ww==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.2.tgz", + "integrity": "sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/core": "^3.17.0", - "@smithy/middleware-endpoint": "^4.3.4", - "@smithy/middleware-stack": "^4.2.3", - "@smithy/protocol-http": "^5.3.3", - "@smithy/types": "^4.8.0", - "@smithy/util-stream": "^4.5.3", + "@smithy/core": "^3.20.0", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", "tslib": "^2.6.2" }, "engines": { @@ -5377,9 +5338,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.8.0.tgz", - "integrity": "sha512-QpELEHLO8SsQVtqP+MkEgCYTFW0pleGozfs3cZ183ZBj9z3VC1CX1/wtFMK64p+5bhtZo41SeLK1rBRtd25nHQ==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz", + "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -5390,14 +5351,14 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.3.tgz", - "integrity": "sha512-I066AigYvY3d9VlU3zG9XzZg1yT10aNqvCaBTw9EPgu5GrsEl1aUkcMvhkIXascYH1A8W0LQo3B1Kr1cJNcQEw==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz", + "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/querystring-parser": "^4.2.3", - "@smithy/types": "^4.8.0", + "@smithy/querystring-parser": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5473,15 +5434,15 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.3.tgz", - "integrity": "sha512-vqHoybAuZXbFXZqgzquiUXtdY+UT/aU33sxa4GBPkiYklmR20LlCn+d3Wc3yA5ZM13gQ92SZe/D8xh6hkjx+IQ==", + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.16.tgz", + "integrity": "sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/property-provider": "^4.2.3", - "@smithy/smithy-client": "^4.9.0", - "@smithy/types": "^4.8.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5489,18 +5450,18 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.4.tgz", - "integrity": "sha512-X5/xrPHedifo7hJUUWKlpxVb2oDOiqPUXlvsZv1EZSjILoutLiJyWva3coBpn00e/gPSpH8Rn2eIbgdwHQdW7Q==", + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.19.tgz", + "integrity": "sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/config-resolver": "^4.3.3", - "@smithy/credential-provider-imds": "^4.2.3", - "@smithy/node-config-provider": "^4.3.3", - "@smithy/property-provider": "^4.2.3", - "@smithy/smithy-client": "^4.9.0", - "@smithy/types": "^4.8.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5508,14 +5469,14 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.3.tgz", - "integrity": "sha512-aCfxUOVv0CzBIkU10TubdgKSx5uRvzH064kaiPEWfNIvKOtNpu642P4FP1hgOFkjQIkDObrfIDnKMKkeyrejvQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz", + "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.3.3", - "@smithy/types": "^4.8.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5536,13 +5497,13 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.3.tgz", - "integrity": "sha512-v5ObKlSe8PWUHCqEiX2fy1gNv6goiw6E5I/PN2aXg3Fb/hse0xeaAnSpXDiWl7x6LamVKq7senB+m5LOYHUAHw==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz", + "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.8.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5550,14 +5511,14 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.3.tgz", - "integrity": "sha512-lLPWnakjC0q9z+OtiXk+9RPQiYPNAovt2IXD3CP4LkOnd9NpUsxOjMx1SnoUVB7Orb7fZp67cQMtTBKMFDvOGg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz", + "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/service-error-classification": "^4.2.3", - "@smithy/types": "^4.8.0", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5565,15 +5526,15 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.3.tgz", - "integrity": "sha512-oZvn8a5bwwQBNYHT2eNo0EU8Kkby3jeIg1P2Lu9EQtqDxki1LIjGRJM6dJ5CZUig8QmLxWxqOKWvg3mVoOBs5A==", + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz", + "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/fetch-http-handler": "^5.3.4", - "@smithy/node-http-handler": "^4.4.2", - "@smithy/types": "^4.8.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-hex-encoding": "^4.2.0", @@ -5682,13 +5643,13 @@ } }, "node_modules/@testcontainers/postgresql": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/@testcontainers/postgresql/-/postgresql-11.9.0.tgz", - "integrity": "sha512-beLyLdLygFllktviM132Xd6tQ4i5FnuyZP+4BQEjUb5sJYHYnIrV/ZBzRRflIlF8gugt1GXgudkmr/HxM9vtKw==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/@testcontainers/postgresql/-/postgresql-11.10.0.tgz", + "integrity": "sha512-d6QeN3KkXLJBdt0T6X3KKtdkHbaZdzCRPo133FSG8yOoGofQAYghtau39iUdeF9GAN8UTWZAxio40uYKBSV7xw==", "dev": true, "license": "MIT", "dependencies": { - "testcontainers": "^11.9.0" + "testcontainers": "^11.10.0" } }, "node_modules/@testcontainers/postgresql/node_modules/docker-compose": { @@ -5705,9 +5666,9 @@ } }, "node_modules/@testcontainers/postgresql/node_modules/testcontainers": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-11.9.0.tgz", - "integrity": "sha512-SQ6OqQUig7HcGVF72i+ZVIMvxPSpEz8cgC/B63ekqMzgf98DnveoBbOmqux/Wa5wQAQCt4mEPNMa/Jz7vMg9fQ==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-11.10.0.tgz", + "integrity": "sha512-8hwK2EnrOZfrHPpDC7CPe03q7H8Vv8j3aXdcmFFyNV8dzpBzgZYmqyDtduJ8YQ5kbzj+A+jUXMQ6zI8B5U3z+g==", "dev": true, "license": "MIT", "dependencies": { @@ -5815,9 +5776,9 @@ "license": "MIT" }, "node_modules/@types/cookies": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.1.tgz", - "integrity": "sha512-E/DPgzifH4sM1UMadJMWd6mO2jOd4g1Ejwzx8/uRCDpJis1IrlyQEcGAYEomtAqRYmD5ORbNXMeI9U0RiVGZbg==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.2.tgz", + "integrity": "sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==", "license": "MIT", "dependencies": { "@types/connect": "*", @@ -5866,15 +5827,15 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { @@ -5946,9 +5907,9 @@ } }, "node_modules/@types/koa-compose": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", - "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.9.tgz", + "integrity": "sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA==", "license": "MIT", "dependencies": { "@types/koa": "*" @@ -5968,9 +5929,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.22.tgz", - "integrity": "sha512-hRnu+5qggKDSyWHlnmThnUqg62l29Aj/6vcYgUaSFL9oc7DVjeWEQN3PRgdSc6F8d9QRMWkf36CLMch1Do/+RQ==", + "version": "20.19.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", + "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -5996,9 +5957,9 @@ "license": "MIT" }, "node_modules/@types/readable-stream": { - "version": "4.0.21", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", - "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.23.tgz", + "integrity": "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -6028,18 +5989,18 @@ "license": "MIT" }, "node_modules/@types/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.0.tgz", - "integrity": "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz", - "integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "license": "MIT", "dependencies": { "@types/http-errors": "*", @@ -6048,9 +6009,9 @@ } }, "node_modules/@types/serve-static/node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", "license": "MIT", "dependencies": { "@types/mime": "^1", @@ -6068,9 +6029,9 @@ } }, "node_modules/@types/ssh2-streams": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz", - "integrity": "sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.13.tgz", + "integrity": "sha512-faHyY3brO9oLEA0QlcO8N2wT7R0+1sHWZvQ+y3rMLwdY1ZyS1z0W3t65j9PqT4HmQ6ALzNe7RZlNuCNE0wBSWA==", "dev": true, "license": "MIT", "dependencies": { @@ -6326,9 +6287,9 @@ } }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.1.tgz", - "integrity": "sha512-SnbaqayTVFEA6/tYumdF0UmybY0KHyKwGPBXnyckFlrrKdhWFrL3a2HIPXHjht5ZOElKGcXfD2D63P36btb+ww==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", + "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", "license": "MIT", "dependencies": { "http-proxy-agent": "^7.0.0", @@ -6486,9 +6447,9 @@ } }, "node_modules/@vvo/tzdb": { - "version": "6.187.0", - "resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.187.0.tgz", - "integrity": "sha512-SkGZLQyHT3dYxv0HyUHX+h1lDwTMfJs/nXT6BrLdl1nXdpcCEeGJPGiVf/9uv8uD8mCeMok1MM5CcG67VoEypQ==", + "version": "6.198.0", + "resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.198.0.tgz", + "integrity": "sha512-bNRWBhWYl0edVgyX6AYbhoCM2tk2lXJjGCyO2VDc2xn6Dw8dLd7WGj2DDXkVOkmOIQTNjEAcxrEpIzz5pWVwFg==", "license": "MIT" }, "node_modules/abbrev": { @@ -6796,9 +6757,9 @@ } }, "node_modules/archiver-utils/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { @@ -7241,9 +7202,9 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.0.tgz", - "integrity": "sha512-AOhh6Bg5QmFIXdViHbMc2tLDsBIRxdkIaIddPslJF9Z5De3APBScuqGP2uThXnIpqFrgoxMNC6km7uXNIMLHXA==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -7256,9 +7217,9 @@ } }, "node_modules/bare-fs": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.11.tgz", - "integrity": "sha512-Bejmm9zRMvMTRoHS+2adgmXw1ANZnCNx+B5dgZpGwlP1E3x6Yuxea8RToddHUbWtVV0iUMWqsgZr8+jcgUI2SA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.2.tgz", + "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -7327,9 +7288,9 @@ } }, "node_modules/bare-url": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.0.tgz", - "integrity": "sha512-c+RCqMSZbkz97Mw1LWR0gcOqwK82oyYKfLoHJ8k13ybi1+I80ffdDzUy0TdAburdrR/kI0/VuN8YgEnJqX+Nyw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -7400,9 +7361,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.31", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz", - "integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==", + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7579,9 +7540,9 @@ } }, "node_modules/bowser": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", - "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", "license": "MIT", "optional": true }, @@ -7608,9 +7569,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -7628,11 +7589,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -7700,9 +7661,9 @@ "license": "MIT" }, "node_modules/buildcheck": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", - "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.7.tgz", + "integrity": "sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==", "dev": true, "optional": true, "engines": { @@ -7952,9 +7913,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001757", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", - "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", + "version": "1.0.30001761", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001761.tgz", + "integrity": "sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==", "dev": true, "funding": [ { @@ -8816,9 +8777,9 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, "license": "MIT" }, @@ -8894,9 +8855,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.18", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", - "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", "license": "MIT" }, "node_modules/debug": { @@ -9011,9 +8972,9 @@ } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -9027,9 +8988,9 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", "engines": { "node": ">=18" @@ -9247,9 +9208,9 @@ } }, "node_modules/dockerode/node_modules/@grpc/grpc-js": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", - "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz", + "integrity": "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9506,9 +9467,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.261", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.261.tgz", - "integrity": "sha512-cmyHEWFqEt3ICUNF93ShneOF47DHoSDbLb7E/AonsWcbzg95N+kPXeLNfkdzgTT/vEUcoW76fxbLBkeYtfoM8A==", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "dev": true, "license": "ISC" }, @@ -9726,9 +9687,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "dev": true, "license": "MIT", "dependencies": { @@ -10093,22 +10054,6 @@ "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -10122,19 +10067,6 @@ "node": "*" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/esm": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", @@ -10721,9 +10653,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -11371,6 +11303,22 @@ "which": "bin/which" } }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", @@ -11921,9 +11869,9 @@ } }, "node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "license": "MIT", "engines": { "node": ">= 12" @@ -12617,9 +12565,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -12741,12 +12689,12 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", "license": "MIT", "dependencies": { - "jws": "^3.2.2", + "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", @@ -12769,9 +12717,9 @@ "license": "MIT" }, "node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1", @@ -12780,12 +12728,12 @@ } }, "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", "dependencies": { - "jwa": "^1.4.1", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -13012,9 +12960,9 @@ "license": "MIT" }, "node_modules/liquidjs": { - "version": "10.22.0", - "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.22.0.tgz", - "integrity": "sha512-SGBYxl7U7vqmmAQdP/PTP3P3q11f99xUjdtxVICqNQqPecl+JIMCsTshDObGzicHaAqWAnPW0o25a9hDaJxOng==", + "version": "10.24.0", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.24.0.tgz", + "integrity": "sha512-TAUNAdgwaAXjjcUFuYVJm9kOVH7zc0mTKxsG9t9Lu4qdWjB2BEblyVIYpjWcmJLMGgiYqnGNJjpNMHx0gp/46A==", "license": "MIT", "dependencies": { "commander": "^10.0.0" @@ -13167,9 +13115,9 @@ } }, "node_modules/lru.min": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz", - "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.3.tgz", + "integrity": "sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==", "license": "MIT", "engines": { "bun": ">=1.0.0", @@ -13870,30 +13818,21 @@ } }, "node_modules/named-placeholders": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", - "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", + "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", "license": "MIT", "dependencies": { - "lru-cache": "^7.14.1" + "lru.min": "^1.1.0" }, "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/named-placeholders/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "license": "ISC", - "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, "node_modules/nan": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", - "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.24.0.tgz", + "integrity": "sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==", "dev": true, "license": "MIT", "optional": true @@ -14178,9 +14117,9 @@ } }, "node_modules/nostr-tools": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.17.0.tgz", - "integrity": "sha512-lrvHM7cSaGhz7F0YuBvgHMoU2s8/KuThihDoOYk8w5gpVHTy0DeUCAgCN8uLGeuSl5MAWekJr9Dkfo5HClqO9w==", + "version": "2.19.4", + "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.19.4.tgz", + "integrity": "sha512-qVLfoTpZegNYRJo5j+Oi6RPu0AwLP6jcvzcB3ySMnIT5DrAGNXfs5HNBspB/2HiGfH3GY+v6yXkTtcKSBQZwSg==", "license": "Unlicense", "dependencies": { "@noble/ciphers": "^0.5.1", @@ -14311,9 +14250,9 @@ } }, "node_modules/oidc-token-hash": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.1.1.tgz", - "integrity": "sha512-D7EmwxJV6DsEB6vOFLrBM2OzsVgQzgPWyHlV2OOAVj772n+WTXpudC9e9u5BVKQnYwaD30Ivhi9b+4UeBcGu9g==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.2.0.tgz", + "integrity": "sha512-6gj2m8cJZ+iSW8bm0FXdGF0YhIQbKrfP4yWTNzxc31U6MOjfEmB1rHvlYvxI1B7t7BCi1F2vYTT6YhtQRG4hxw==", "license": "MIT", "engines": { "node": "^10.13.0 || >=12.0.0" @@ -15015,9 +14954,9 @@ } }, "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -16049,12 +15988,12 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -16156,9 +16095,9 @@ } }, "node_modules/rollup": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", - "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", + "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16172,28 +16111,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.5", - "@rollup/rollup-android-arm64": "4.52.5", - "@rollup/rollup-darwin-arm64": "4.52.5", - "@rollup/rollup-darwin-x64": "4.52.5", - "@rollup/rollup-freebsd-arm64": "4.52.5", - "@rollup/rollup-freebsd-x64": "4.52.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", - "@rollup/rollup-linux-arm-musleabihf": "4.52.5", - "@rollup/rollup-linux-arm64-gnu": "4.52.5", - "@rollup/rollup-linux-arm64-musl": "4.52.5", - "@rollup/rollup-linux-loong64-gnu": "4.52.5", - "@rollup/rollup-linux-ppc64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-musl": "4.52.5", - "@rollup/rollup-linux-s390x-gnu": "4.52.5", - "@rollup/rollup-linux-x64-gnu": "4.52.5", - "@rollup/rollup-linux-x64-musl": "4.52.5", - "@rollup/rollup-openharmony-arm64": "4.52.5", - "@rollup/rollup-win32-arm64-msvc": "4.52.5", - "@rollup/rollup-win32-ia32-msvc": "4.52.5", - "@rollup/rollup-win32-x64-gnu": "4.52.5", - "@rollup/rollup-win32-x64-msvc": "4.52.5", + "@rollup/rollup-android-arm-eabi": "4.53.5", + "@rollup/rollup-android-arm64": "4.53.5", + "@rollup/rollup-darwin-arm64": "4.53.5", + "@rollup/rollup-darwin-x64": "4.53.5", + "@rollup/rollup-freebsd-arm64": "4.53.5", + "@rollup/rollup-freebsd-x64": "4.53.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", + "@rollup/rollup-linux-arm-musleabihf": "4.53.5", + "@rollup/rollup-linux-arm64-gnu": "4.53.5", + "@rollup/rollup-linux-arm64-musl": "4.53.5", + "@rollup/rollup-linux-loong64-gnu": "4.53.5", + "@rollup/rollup-linux-ppc64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-musl": "4.53.5", + "@rollup/rollup-linux-s390x-gnu": "4.53.5", + "@rollup/rollup-linux-x64-gnu": "4.53.5", + "@rollup/rollup-linux-x64-musl": "4.53.5", + "@rollup/rollup-openharmony-arm64": "4.53.5", + "@rollup/rollup-win32-arm64-msvc": "4.53.5", + "@rollup/rollup-win32-ia32-msvc": "4.53.5", + "@rollup/rollup-win32-x64-gnu": "4.53.5", + "@rollup/rollup-win32-x64-msvc": "4.53.5", "fsevents": "~2.3.2" } }, @@ -16401,10 +16340,10 @@ } }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "license": "BlueOak-1.0.0" }, "node_modules/sb-promise-queue": { "version": "2.1.1", @@ -17446,9 +17385,9 @@ } }, "node_modules/strnum": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", "funding": [ { "type": "github", @@ -17760,9 +17699,9 @@ } }, "node_modules/tedious": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/tedious/-/tedious-18.6.1.tgz", - "integrity": "sha512-9AvErXXQTd6l7TDd5EmM+nxbOGyhnmdbp/8c3pw+tjaiSXW9usME90ET/CRG1LN1Y9tPMtz/p83z4Q97B4DDpw==", + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-18.6.2.tgz", + "integrity": "sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg==", "license": "MIT", "dependencies": { "@azure/core-auth": "^1.7.2", @@ -17781,9 +17720,9 @@ } }, "node_modules/tedious/node_modules/bl": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.4.tgz", - "integrity": "sha512-ZV/9asSuknOExbM/zPPA8z00lc1ihPKWaStHkkQrxHNeYx+yY+TmF+v80dpv2G0mv3HVXBu7ryoAsxbFFhf4eg==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.6.tgz", + "integrity": "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==", "license": "MIT", "dependencies": { "@types/readable-stream": "^4.0.0", @@ -17861,6 +17800,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/terser": { "version": "5.15.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", @@ -18178,9 +18130,9 @@ } }, "node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -18459,9 +18411,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -18586,9 +18538,9 @@ } }, "node_modules/vite": { - "version": "5.4.20", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", - "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -18661,17 +18613,17 @@ } }, "node_modules/vite-plugin-pwa": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.1.0.tgz", - "integrity": "sha512-VsSpdubPzXhHWVINcSx6uHRMpOHVHQcHsef1QgkOlEoaIDAlssFEW88LBq1a59BuokAhsh2kUDJbaX1bZv4Bjw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.2.0.tgz", + "integrity": "sha512-a2xld+SJshT9Lgcv8Ji4+srFJL4k/1bVbd1x06JIkvecpQkwkvCncD1+gSzcdm3s+owWLpMJerG3aN5jupJEVw==", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.6", "pretty-bytes": "^6.1.1", "tinyglobby": "^0.2.10", - "workbox-build": "^7.3.0", - "workbox-window": "^7.3.0" + "workbox-build": "^7.4.0", + "workbox-window": "^7.4.0" }, "engines": { "node": ">=16.0.0" @@ -18682,8 +18634,8 @@ "peerDependencies": { "@vite-pwa/assets-generator": "^1.0.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "workbox-build": "^7.3.0", - "workbox-window": "^7.3.0" + "workbox-build": "^7.4.0", + "workbox-window": "^7.4.0" }, "peerDependenciesMeta": { "@vite-pwa/assets-generator": { @@ -18947,9 +18899,9 @@ } }, "node_modules/wait-on/node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "dev": true, "license": "MIT", "dependencies": { @@ -18987,27 +18939,6 @@ "node": ">= 16" } }, - "node_modules/web-push/node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/web-push/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -19333,11 +19264,11 @@ "license": "MIT" }, "node_modules/workbox-build/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } @@ -19797,9 +19728,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "dev": true, "license": "ISC", "bin": { @@ -19807,6 +19738,9 @@ }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { From f0ad6449950b0ee2dc687082678b64cc47c04222 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 20 Dec 2025 12:30:00 +0800 Subject: [PATCH 74/91] Update to 2.1.0-beta.0 (#6505) --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a629859..53e639e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uptime-kuma", - "version": "2.0.2", + "version": "2.1.0-beta.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uptime-kuma", - "version": "2.0.2", + "version": "2.1.0-beta.0", "license": "MIT", "dependencies": { "@grpc/grpc-js": "~1.8.22", diff --git a/package.json b/package.json index 6088015b..56ac1e20 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uptime-kuma", - "version": "2.0.2", + "version": "2.1.0-beta.0", "license": "MIT", "repository": { "type": "git", From 22a0ed6061006740486e4cae9971c666e0d1257a Mon Sep 17 00:00:00 2001 From: benji2k2 Date: Sat, 20 Dec 2025 10:26:13 +0100 Subject: [PATCH 75/91] fix(docker): handle the state "unhealthy" as `DOWN` instead of `PENDING` (#6292) Co-authored-by: Frank Elsinga --- server/model/monitor.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index eff8add9..d0f71e81 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -768,12 +768,14 @@ class Monitor extends BeanModel { let res = await axios.request(options); if (res.data.State.Running) { - if (res.data.State.Health && res.data.State.Health.Status !== "healthy") { - bean.status = PENDING; - bean.msg = res.data.State.Health.Status; - } else { + if (res.data.State.Health.Status === "healthy") { bean.status = UP; bean.msg = res.data.State.Health ? res.data.State.Health.Status : res.data.State.Status; + } else if (res.data.State.Health.Status === "unhealthy") { + throw Error("Container State is unhealthy"); + } else { + bean.status = PENDING; + bean.msg = res.data.State.Health.Status; } } else { throw Error("Container State is " + res.data.State.Status); From f3c76dbc6fa9ddac72ae631635a79f031c3517c4 Mon Sep 17 00:00:00 2001 From: Shaan Date: Sat, 20 Dec 2025 18:35:53 +0600 Subject: [PATCH 76/91] feat: Add XMPP dialog in STARTTLS routine (#6508) --- server/monitor-types/tcp.js | 41 ++++++++++++++++++++++++++++++----- test/backend-test/test-tcp.js | 22 +++++++++++++++++++ 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/server/monitor-types/tcp.js b/server/monitor-types/tcp.js index e71973b1..5223d2e2 100644 --- a/server/monitor-types/tcp.js +++ b/server/monitor-types/tcp.js @@ -54,12 +54,32 @@ class TCPMonitorType extends MonitorType { const preTLS = () => new Promise((resolve, reject) => { - let timeout; + let dialogTimeout; + let bannerTimeout; socket_ = net.connect(monitor.port, monitor.hostname); const onTimeout = () => { log.debug(this.name, `[${monitor.name}] Pre-TLS connection timed out`); - reject("Connection timed out"); + doReject("Connection timed out"); + }; + + const onBannerTimeout = () => { + log.debug(this.name, `[${monitor.name}] Pre-TLS timed out waiting for banner`); + // No banner. Could be a XMPP server? + socket_.write(``); + }; + + const doResolve = () => { + dialogTimeout && clearTimeout(dialogTimeout); + bannerTimeout && clearTimeout(bannerTimeout); + resolve({ socket: socket_ }); + }; + + const doReject = (error) => { + dialogTimeout && clearTimeout(dialogTimeout); + bannerTimeout && clearTimeout(bannerTimeout); + socket_.end(); + reject(error); }; socket_.on("connect", () => { @@ -70,10 +90,10 @@ class TCPMonitorType extends MonitorType { const response = data.toString(); const response_ = response.toLowerCase(); log.debug(this.name, `[${monitor.name}] Pre-TLS response: ${response}`); + clearTimeout(bannerTimeout); switch (true) { case response_.includes("start tls") || response_.includes("begin tls"): - timeout && clearTimeout(timeout); - resolve({ socket: socket_ }); + doResolve(); break; case response.startsWith("* OK") || response.match(/CAPABILITY.+STARTTLS/): socket_.write("a001 STARTTLS\r\n"); @@ -84,8 +104,16 @@ class TCPMonitorType extends MonitorType { case response.includes("250-STARTTLS"): socket_.write("STARTTLS\r\n"); break; + case response_.includes(""); + break; + case response_.includes(""): + break; default: - reject(`Unexpected response: ${response}`); + doReject(`Unexpected response: ${response}`); } }); socket_.on("error", error => { @@ -93,7 +121,8 @@ class TCPMonitorType extends MonitorType { reject(error); }); socket_.setTimeout(1000 * TIMEOUT, onTimeout); - timeout = setTimeout(onTimeout, 1000 * TIMEOUT); + dialogTimeout = setTimeout(onTimeout, 1000 * TIMEOUT); + bannerTimeout = setTimeout(onBannerTimeout, 1000 * 1.5); }); const reuseSocket = monitor.smtpSecurity === "starttls" ? await preTLS() : {}; diff --git a/test/backend-test/test-tcp.js b/test/backend-test/test-tcp.js index 46a4d12d..98f168c2 100644 --- a/test/backend-test/test-tcp.js +++ b/test/backend-test/test-tcp.js @@ -185,4 +185,26 @@ describe("TCP Monitor", () => { regex ); }); + test("XMPP server with valid certificate (STARTTLS)", async t => { + const tcpMonitor = new TCPMonitorType(); + + const monitor = { + hostname: "xmpp.earth", + port: 5222, + smtpSecurity: "starttls", + isEnabledExpiryNotification: () => true, + handleTlsInfo: async tlsInfo => { + return tlsInfo; + }, + }; + + const heartbeat = { + msg: "", + status: PENDING, + }; + + await tcpMonitor.check(monitor, heartbeat, {}); + + assert.strictEqual(heartbeat.status, UP); + }); }); From eb0b6cdb09024c0941e07c8c10b094a0be439ae4 Mon Sep 17 00:00:00 2001 From: Shaan Date: Sat, 20 Dec 2025 22:32:49 +0600 Subject: [PATCH 77/91] feat: Domain name expiry (#6413) Co-authored-by: AiroPi <47398145+AiroPi@users.noreply.github.com> Co-authored-by: Frank Elsinga --- .../2025-09-02-0000-add-domain-expiry.js | 21 ++ package-lock.json | 318 +++++++++++++++++- package.json | 2 + server/model/domain_expiry.js | 270 +++++++++++++++ server/model/monitor.js | 34 ++ server/server.js | 17 + server/util-server.js | 4 +- src/components/settings/Notifications.vue | 69 +++- src/lang/en.json | 4 + src/mixins/socket.js | 6 + src/pages/Details.vue | 19 ++ src/pages/EditMonitor.vue | 29 ++ src/pages/Settings.vue | 4 + test/backend-test/test-domain.js | 70 ++++ test/backend-test/test-util.js | 18 + test/mock-testdb.js | 27 ++ test/mock-webhook.js | 28 ++ 17 files changed, 926 insertions(+), 14 deletions(-) create mode 100644 db/knex_migrations/2025-09-02-0000-add-domain-expiry.js create mode 100644 server/model/domain_expiry.js create mode 100644 test/backend-test/test-domain.js create mode 100644 test/backend-test/test-util.js create mode 100644 test/mock-testdb.js create mode 100644 test/mock-webhook.js diff --git a/db/knex_migrations/2025-09-02-0000-add-domain-expiry.js b/db/knex_migrations/2025-09-02-0000-add-domain-expiry.js new file mode 100644 index 00000000..ede2e188 --- /dev/null +++ b/db/knex_migrations/2025-09-02-0000-add-domain-expiry.js @@ -0,0 +1,21 @@ +exports.up = function (knex) { + return knex.schema + .alterTable("monitor", function (table) { + table.boolean("domain_expiry_notification").defaultTo(1); + }) + .createTable("domain_expiry", (table) => { + table.increments("id"); + table.datetime("last_check"); + table.text("domain").unique().notNullable(); + table.datetime("expiry"); + table.integer("last_expiry_notification_sent").defaultTo(null); + }); +}; + +exports.down = function (knex) { + return knex.schema + .alterTable("monitor", function (table) { + table.boolean("domain_expiry_notification").alter(); + }) + .dropTable("domain_expiry"); +}; diff --git a/package-lock.json b/package-lock.json index 53e639e1..1df648a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,6 +60,7 @@ "nanoid": "~3.3.4", "net-snmp": "^3.11.2", "node-cloudflared-tunnel": "~1.0.9", + "node-fetch-cache": "^5.1.0", "node-radius-utils": "~1.2.0", "nodemailer": "~6.9.13", "nostr-tools": "^2.10.4", @@ -85,6 +86,7 @@ "tar": "~6.2.1", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", + "tldts": "^7.0.19", "tough-cookie": "~4.1.3", "web-push": "^3.6.7", "ws": "^8.13.0" @@ -3646,7 +3648,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, "license": "MIT", "engines": { "node": "20 || >=22" @@ -3656,7 +3657,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, "license": "MIT", "dependencies": { "@isaacs/balanced-match": "^4.0.1" @@ -8783,6 +8783,15 @@ "dev": true, "license": "MIT" }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", @@ -10467,6 +10476,29 @@ "node": ">=0.4.0" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -10674,6 +10706,27 @@ "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==", "license": "MIT" }, + "node_modules/formdata-node": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz", + "integrity": "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -11797,7 +11850,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -12995,6 +13047,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/locko": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/locko/-/locko-1.1.0.tgz", + "integrity": "sha512-pYB2dzRY93fJkg2RIl41AMNgTQftEjyTK9vlPrGOJvuGQsOjb267VJBw15BjiN3RBd1oBoKkOu9E2dRdFKIfAA==", + "license": "MIT" + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -13546,7 +13604,6 @@ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "license": "ISC", - "optional": true, "dependencies": { "minipass": "^3.0.0" }, @@ -13559,7 +13616,6 @@ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "license": "ISC", - "optional": true, "dependencies": { "minipass": "^3.0.0" }, @@ -13902,6 +13958,26 @@ "command-exists": "^1.2.9" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -13922,6 +13998,211 @@ } } }, + "node_modules/node-fetch-cache": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-fetch-cache/-/node-fetch-cache-5.1.0.tgz", + "integrity": "sha512-4j3rRHNGIKGX7VzXSrBT0bh7+wFuyJv1DxCfCLDHsnDahJWoD9lXe3BzL3BJg/GEIJiM7KIvqVs3byW1GFtRsQ==", + "license": "MIT", + "dependencies": { + "cacache": "^20.0.1", + "formdata-node": "^6.0.3", + "locko": "^1.1.0", + "node-fetch": "3.3.2" + }, + "engines": { + "node": ">=18.19.0" + } + }, + "node_modules/node-fetch-cache/node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-fetch-cache/node_modules/cacache": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", + "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-fetch-cache/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-fetch-cache/node_modules/glob": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-fetch-cache/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/node-fetch-cache/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-fetch-cache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/node-fetch-cache/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/node-fetch-cache/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-fetch-cache/node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/node-fetch-cache/node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-fetch-cache/node_modules/ssri": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", + "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-fetch-cache/node_modules/unique-filename": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", + "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", + "license": "ISC", + "dependencies": { + "unique-slug": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-fetch-cache/node_modules/unique-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", + "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -17987,6 +18268,24 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/tldts": { + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", + "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.19" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.19", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", + "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", + "license": "MIT" + }, "node_modules/tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", @@ -18939,6 +19238,15 @@ "node": ">= 16" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", diff --git a/package.json b/package.json index 56ac1e20..04247d03 100644 --- a/package.json +++ b/package.json @@ -122,6 +122,7 @@ "net-snmp": "^3.11.2", "node-cloudflared-tunnel": "~1.0.9", "node-radius-utils": "~1.2.0", + "node-fetch-cache": "^5.1.0", "nodemailer": "~6.9.13", "nostr-tools": "^2.10.4", "notp": "~2.0.3", @@ -146,6 +147,7 @@ "tar": "~6.2.1", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", + "tldts": "^7.0.19", "tough-cookie": "~4.1.3", "web-push": "^3.6.7", "ws": "^8.13.0" diff --git a/server/model/domain_expiry.js b/server/model/domain_expiry.js new file mode 100644 index 00000000..b796a81d --- /dev/null +++ b/server/model/domain_expiry.js @@ -0,0 +1,270 @@ +const { BeanModel } = require("redbean-node/dist/bean-model"); +const { R } = require("redbean-node"); +const { log } = require("../../src/util"); +const { parse: parseTld } = require("tldts"); +const { getDaysRemaining, getDaysBetween, setting, setSetting } = require("../util-server"); +const { Notification } = require("../notification"); +const { default: NodeFetchCache, MemoryCache } = require("node-fetch-cache"); + +const TABLE = "domain_expiry"; +const urlTypes = [ "websocket-upgrade", "http", "keyword", "json-query", "real-browser" ]; +const excludeTypes = [ "docker", "group", "push", "manual", "rabbitmq", "redis" ]; + +const cachedFetch = process.env.NODE_ENV ? NodeFetchCache.create({ + // cache for 8h + cache: new MemoryCache({ ttl: 1000 * 60 * 60 * 8 }) +}) : fetch; + +/** + * Find the RDAP server for a given TLD + * @param {string} tld TLD + * @returns {Promise} First RDAP server found + */ +async function getRdapServer(tld) { + let rdapList; + try { + const res = await cachedFetch("https://data.iana.org/rdap/dns.json"); + rdapList = await res.json(); + } catch (error) { + log.debug("rdap", error); + return null; + } + + for (const service of rdapList["services"]) { + const [ tlds, urls ] = service; + if (tlds.includes(tld)) { + return urls[0]; + } + } + return null; +} + +/** + * Request RDAP server to retrieve the expiry date of a domain + * @param {string} domain Domain to retrieve the expiry date from + * @returns {Promise<(Date|null)>} Expiry date from RDAP server + */ +async function getRdapDomainExpiryDate(domain) { + const tld = DomainExpiry.parseTld(domain).publicSuffix; + const rdapServer = await getRdapServer(tld); + if (rdapServer === null) { + log.warn("rdap", `No RDAP server found, TLD ${tld} not supported.`); + return null; + } + const url = `${rdapServer}domain/${domain}`; + + let rdapInfos; + try { + const res = await fetch(url); + if (res.status !== 200) { + return null; + } + rdapInfos = await res.json(); + } catch { + log.warn("rdap", "Not able to get expiry date from RDAP"); + return null; + } + + if (rdapInfos["events"] === undefined) { + return null; + } + for (const event of rdapInfos["events"]) { + if (event["eventAction"] === "expiration") { + return new Date(event["eventDate"]); + } + } + return null; +} + +/** + * Send a certificate notification when domain expires in less than target days + * @param {string} domain Domain we monitor + * @param {number} daysRemaining Number of days remaining on certificate + * @param {number} targetDays Number of days to alert after + * @param {LooseObject[]} notificationList List of notification providers + * @returns {Promise} + */ +async function sendDomainNotificationByTargetDays(domain, daysRemaining, targetDays, notificationList) { + let sent = false; + log.debug("domain", `Send domain expiry notification for ${targetDays} deadline.`); + + for (let notification of notificationList) { + try { + log.debug("domain", `Sending to ${notification.name}`); + await Notification.send( + JSON.parse(notification.config), + `Domain name ${domain} will expire in ${daysRemaining} days` + ); + sent = true; + } catch (e) { + log.error("domain", `Cannot send domain notification to ${notification.name}`); + log.error("domain", e); + } + } + + return sent; +} + +class DomainExpiry extends BeanModel { + /** + * @param {string} domain Domain name + * @returns {Promise} Domain bean + */ + static async findByName(domain) { + return R.findOne(TABLE, "domain = ?", [ domain ]); + } + + /** + * @param {string} domain Domain name + * @returns {DomainExpiry} Domain bean + */ + static createByName(domain) { + const d = R.dispense(TABLE); + d.domain = domain; + return d; + } + + static parseTld = parseTld; + + /** + * @returns {(object)} parsed domain components + */ + parseName() { + return parseTld(this.domain); + } + + /** + * @returns {(null|object)} parsed domain tld + */ + get tld() { + return this.parseName().publicSuffix; + } + + /** + * @param {Monitor} monitor Monitor object + * @returns {Promise} Domain expiry bean + */ + static async forMonitor(monitor) { + const m = monitor; + if (excludeTypes.includes(m.type) || m.type?.match(/sql$/)) { + return false; + } + const tld = parseTld(urlTypes.includes(m.type) ? m.url : m.type === "grpc-keyword" ? m.grpcUrl : m.hostname); + const rdap = await getRdapServer(tld.publicSuffix); + if (!rdap) { + log.warn("domain", `${tld.publicSuffix} is not supported. File a bug report if you believe it should be.`); + return false; + } + const existing = await DomainExpiry.findByName(tld.domain); + if (existing) { + return existing; + } + if (tld.domain) { + return await DomainExpiry.createByName(tld.domain); + } + } + + /** + * @returns {number} number of days remaining before expiry + */ + get daysRemaining() { + return getDaysRemaining(new Date(), new Date(this.expiry)); + } + + /** + * @returns {(Date|null)} Expiry date from RDAP + */ + getExpiryDate() { + return getRdapDomainExpiryDate(this.domain); + } + + /** + * @param {(Monitor)} monitor Monitor object + * @returns {Promise} + */ + static async checkExpiry(monitor) { + + let bean = await DomainExpiry.forMonitor(monitor); + + let expiryDate; + if (bean?.lastCheck && getDaysBetween(new Date(bean.lastCheck), new Date()) < 1) { + log.debug("domain", `Domain expiry already checked recently for ${bean.domain}, won't re-check.`); + return bean.expiry; + } else if (bean) { + expiryDate = await bean.getExpiryDate(); + + if (new Date(expiryDate) > new Date(bean.expiry)) { + bean.lastExpiryNotificationSent = null; + } + + bean.expiry = expiryDate; + bean.lastCheck = new Date(); + await R.store(bean); + } + + if (expiryDate === null) { + return; + } + + return expiryDate; + } + + /** + * @param {Monitor} monitor Monitor instance + * @param {LooseObject[]} notificationList notification List + * @returns {Promise} + */ + static async sendNotifications(monitor, notificationList) { + const domain = await DomainExpiry.forMonitor(monitor); + const name = domain.domain; + + if (!notificationList.length > 0) { + // fail fast. If no notification is set, all the following checks can be skipped. + log.debug("domain", "No notification, no need to send domain notification"); + return; + } + + const daysRemaining = getDaysRemaining(new Date(), domain.expiry); + const lastSent = domain.lastExpiryNotificationSent; + log.debug("domain", `${name} expires in ${daysRemaining} days`); + + let notifyDays = await setting("domainExpiryNotifyDays"); + if (notifyDays == null || !Array.isArray(notifyDays)) { + // Reset Default + await setSetting("domainExpiryNotifyDays", [ 7, 14, 21 ], "general"); + notifyDays = [ 7, 14, 21 ]; + } + if (Array.isArray(notifyDays)) { + // Asc sort to avoid sending multiple notifications if daysRemaining is below multiple targetDays + notifyDays.sort((a, b) => a - b); + for (const targetDays of notifyDays) { + if (daysRemaining > targetDays) { + log.debug( + "domain", + `No need to send domain notification for ${name} (${daysRemaining} days valid) on ${targetDays} deadline.` + ); + continue; + } else if (lastSent && lastSent <= targetDays) { + log.debug( + "domain", + `Notification for ${name} on ${targetDays} deadline sent already, no need to send again.` + ); + continue; + } + const sent = await sendDomainNotificationByTargetDays( + name, + daysRemaining, + targetDays, + notificationList + ); + if (sent) { + domain.lastExpiryNotificationSent = targetDays; + await R.store(domain); + return targetDays; + } + } + } + } +} + +module.exports = DomainExpiry; diff --git a/server/model/monitor.js b/server/model/monitor.js index d0f71e81..1c9a112c 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -28,6 +28,7 @@ const { CookieJar } = require("tough-cookie"); const { HttpsCookieAgent } = require("http-cookie-agent/http"); const https = require("https"); const http = require("http"); +const DomainExpiry = require("./domain_expiry"); const rootCertificates = rootCertificatesFingerprints(); @@ -117,6 +118,7 @@ class Monitor extends BeanModel { keyword: this.keyword, invertKeyword: this.isInvertKeyword(), expiryNotification: this.isEnabledExpiryNotification(), + domainExpiryNotification: Boolean(this.domainExpiryNotification), ignoreTls: this.getIgnoreTls(), upsideDown: this.isUpsideDown(), packetSize: this.packetSize, @@ -934,6 +936,19 @@ class Monitor extends BeanModel { } } + if (bean.status !== MAINTENANCE && Boolean(this.domainExpiryNotification)) { + try { + const domainExpiryDate = await DomainExpiry.checkExpiry(this); + if (domainExpiryDate) { + DomainExpiry.sendNotifications(this, await Monitor.getNotificationList(this) || []); + } else { + log.debug("monitor", `Failed getting expiration date for domain ${this.name}`); + } + } catch (error) { + log.warn("monitor", `Failed to get domain expiry for ${this.name} : ${error.message}`); + } + } + if (bean.status === UP) { log.debug("monitor", `Monitor #${this.id} '${this.name}': Successful Response: ${bean.ping} ms | Interval: ${beatInterval} seconds | Type: ${this.type}`); } else if (bean.status === PENDING) { @@ -1201,6 +1216,9 @@ class Monitor extends BeanModel { // Send Cert Info await Monitor.sendCertInfo(io, monitorID, userID); + + // Send domain info + await Monitor.sendDomainInfo(io, monitorID, userID); } else { log.debug("monitor", "No clients in the room, no need to send stats"); } @@ -1222,6 +1240,22 @@ class Monitor extends BeanModel { } } + /** + * Send domain name information to client + * @param {Server} io Socket server instance + * @param {number} monitorID ID of monitor to send + * @param {number} userID ID of user to send to + * @returns {void} + */ + static async sendDomainInfo(io, monitorID, userID) { + const monitor = await R.findOne("monitor", "id = ?", [ monitorID ]); + + const domain = await DomainExpiry.forMonitor(monitor); + if (domain?.expiry) { + io.to(userID).emit("domainInfo", monitorID, domain.daysRemaining, new Date(domain.expiry)); + } + } + /** * Has status of monitor changed since last beat? * @param {boolean} isFirstBeat Is this the first beat of this monitor? diff --git a/server/server.js b/server/server.js index c639d459..c8f2373f 100644 --- a/server/server.js +++ b/server/server.js @@ -843,6 +843,7 @@ let needSetup = false; bean.invertKeyword = monitor.invertKeyword; bean.ignoreTls = monitor.ignoreTls; bean.expiryNotification = monitor.expiryNotification; + bean.domainExpiryNotification = monitor.domainExpiryNotification; bean.upsideDown = monitor.upsideDown; bean.packetSize = monitor.packetSize; bean.maxredirects = monitor.maxredirects; @@ -981,6 +982,22 @@ let needSetup = false; } }); + socket.on("checkMointor", async (partial, callback) => { + try { + checkLogin(socket); + const DomainExpiry = require("./model/domain_expiry"); + callback({ + ok: true, + domain: (await DomainExpiry.forMonitor(partial))?.domain || null + }); + } catch (e) { + callback({ + ok: false, + msg: e.message, + }); + } + }); + socket.on("getMonitorBeats", async (monitorID, period, callback) => { try { checkLogin(socket); diff --git a/server/util-server.js b/server/util-server.js index d28f05a9..9ab32440 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -483,6 +483,7 @@ exports.setSettings = async function (type, data) { */ const getDaysBetween = (validFrom, validTo) => Math.round(Math.abs(+validFrom - +validTo) / 8.64e7); +exports.getDaysBetween = getDaysBetween; /** * Get days remaining from a time range @@ -492,11 +493,12 @@ const getDaysBetween = (validFrom, validTo) => */ const getDaysRemaining = (validFrom, validTo) => { const daysRemaining = getDaysBetween(validFrom, validTo); - if (new Date(validTo).getTime() < new Date().getTime()) { + if (new Date(validTo).getTime() < new Date(validFrom).getTime()) { return -daysRemaining; } return daysRemaining; }; +exports.getDaysRemaining = getDaysRemaining; /** * Fix certificate info for display diff --git a/src/components/settings/Notifications.vue b/src/components/settings/Notifications.vue index 2a65d796..ab8096b9 100644 --- a/src/components/settings/Notifications.vue +++ b/src/components/settings/Notifications.vue @@ -60,13 +60,35 @@
{{ day }} {{ $tc("day", day) }} -
- + +
+
+ +
+
+ +
+
{{ $t("settingsDomainExpiry") }}
+

{{ $t("domainExpiryDescription") }}

+

{{ $t("notificationDescription") }}

+
+
+ {{ day }} {{ $tc("day", day) }} + +
+
+
+
+
+

{{ $t("labelDomainExpiry") }}

+

+ () +

+ + {{ domainInfo.daysRemaining }} {{ $tc("day", domainInfo.daysRemaining ) }} + +
@@ -626,6 +641,10 @@ export default { return null; }, + domainInfo() { + return this.$root.domainInfoList[this.monitor.id] || null; + }, + showCertInfoBox() { return this.tlsInfo != null && this.toggleCertInfoBox; }, diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 824b5be2..7522608c 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -797,6 +797,14 @@ +
+ + +
+
+
@@ -1331,6 +1339,7 @@ const monitorDefaults = { ignoreTls: false, upsideDown: false, expiryNotification: false, + domainExpiryNotification: true, maxredirects: 10, accepted_statuscodes: [ "200-299" ], dns_resolve_type: "A", @@ -1387,6 +1396,7 @@ export default { notificationIDList: {}, // Do not add default value here, please check init() method }, + hasDomain: false, acceptedStatusCodeOptions: [], dnsresolvetypeOptions: [], kafkaSaslMechanismOptions: [], @@ -1461,6 +1471,16 @@ export default { return null; }, + monitorTypeUrlHost() { + const { type, url, hostname, grpcUrl } = this.monitor; + return { + type, + url, + hostname, + grpcUrl + }; + }, + pageName() { let name = "Add New Monitor"; if (this.isClone) { @@ -1738,6 +1758,15 @@ message HealthCheckResponse { } }, + "monitorTypeUrlHost"(data) { + this.$root.getSocket().emit("checkMointor", data, (res) => { + this.hasDomain = !!res?.domain; + if (!res?.domain) { + this.monitor.domainExpiryNotification = false; + } + }); + }, + "monitor.type"(newType, oldType) { if (oldType && this.monitor.type === "websocket-upgrade") { this.monitor.url = "wss://"; diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue index 96bb1fee..eac9dd48 100644 --- a/src/pages/Settings.vue +++ b/src/pages/Settings.vue @@ -179,6 +179,10 @@ export default { this.settings.tlsExpiryNotifyDays = [ 7, 14, 21 ]; } + if (this.settings.domainExpiryNotifyDays === undefined) { + this.settings.domainExpiryNotifyDays = [ 7, 14, 21 ]; + } + if (this.settings.trustProxy === undefined) { this.settings.trustProxy = false; } diff --git a/test/backend-test/test-domain.js b/test/backend-test/test-domain.js new file mode 100644 index 00000000..aa3102e3 --- /dev/null +++ b/test/backend-test/test-domain.js @@ -0,0 +1,70 @@ +process.env.UPTIME_KUMA_HIDE_LOG = [ "info_db", "info_server" ].join(","); + +const test = require("node:test"); +const assert = require("node:assert"); +const DomainExpiry = require("../../server/model/domain_expiry"); +const mockWebhook = require("../mock-webhook"); +const TestDB = require("../mock-testdb"); +const { R } = require("redbean-node"); +const { Notification } = require("../../server/notification"); +const { Settings } = require("../../server/settings"); +const { setSetting } = require("../../server/util-server"); + +const testDb = new TestDB(); + +test("Domain Expiry", async (t) => { + await testDb.create(); + Notification.init(); + + const monHttpCom = { + type: "http", + url: "https://www.google.com", + domainExpiryNotification: true + }; + await t.test("Should get expiry date for .wiki with no A record", async () => { + const d = DomainExpiry.createByName("google.wiki"); + assert.deepEqual(await d.getExpiryDate(), new Date("2026-11-26T23:59:59.000Z")); + }); + await t.test("Should get expiration date for .com from RDAP", async () => { + const domain = await DomainExpiry.forMonitor(monHttpCom); + const expiryFromRdap = await domain.getExpiryDate(); // from RDAP + assert.deepEqual(expiryFromRdap, new Date("2028-09-14T04:00:00.000Z")); + }); + await t.test("Should have expiration date cached in database", async () => { + await DomainExpiry.checkExpiry(monHttpCom); // RDAP -> Cache + const domain = await DomainExpiry.findByName("google.com"); + assert(Date.now() - domain.lastCheck < 5 * 1000); + }); + await t.test("Should trigger notify for expiring domain", async () => { + await DomainExpiry.findByName("google.com"); + const hook = { + "port": 3010, + "url": "capture" + }; + await setSetting("domainExpiryNotifyDays", [ 1, 2, 1500 ], "general"); + const notif = R.convertToBean("notification", { + "config": JSON.stringify({ + type: "webhook", + httpMethod: "post", + webhookContentType: "json", + webhookURL: `http://127.0.0.1:${hook.port}/${hook.url}` + }), + "active": 1, + "user_id": 1, + "name": "Testhook" + }); + const manyDays = 1500; + setSetting("domainExpiryNotifyDays", [ 7, 14, manyDays ], "general"); + const [ notifRet, data ] = await Promise.all([ + DomainExpiry.sendNotifications(monHttpCom, [ notif ]), + mockWebhook(hook.port, hook.url) + ]); + assert.equal(notifRet, manyDays); + assert.match(data.msg, /will expire in/); + }); +}).finally(() => { + setTimeout(async () => { + Settings.stopCacheCleaner(); + await testDb.destroy(); + }, 200); +}); diff --git a/test/backend-test/test-util.js b/test/backend-test/test-util.js new file mode 100644 index 00000000..47011332 --- /dev/null +++ b/test/backend-test/test-util.js @@ -0,0 +1,18 @@ +const test = require("node:test"); +const assert = require("node:assert"); + +const { getDaysRemaining, getDaysBetween } = require("../../server/util-server"); + +test("Test getDaysBetween", async (t) => { + let days = getDaysBetween(new Date(2025, 9, 7), new Date(2025, 9, 10)); + assert.strictEqual(days, 3); + days = getDaysBetween(new Date(2024, 9, 7), new Date(2025, 9, 10)); + assert.strictEqual(days, 368); +}); + +test("Test getDaysRemaining", async (t) => { + let days = getDaysRemaining(new Date(2025, 9, 7), new Date(2025, 9, 10)); + assert.strictEqual(days, 3); + days = getDaysRemaining(new Date(2025, 9, 10), new Date(2025, 9, 7)); + assert.strictEqual(days, -3); +}); diff --git a/test/mock-testdb.js b/test/mock-testdb.js new file mode 100644 index 00000000..1e6f9a9b --- /dev/null +++ b/test/mock-testdb.js @@ -0,0 +1,27 @@ +const { sync: rimrafSync } = require("rimraf"); +const Database = require("../server/database"); + +class TestDB { + dataDir; + + constructor(dir = "./data/test") { + this.dataDir = dir; + } + + async create() { + Database.initDataDir({ "data-dir": this.dataDir }); + Database.dbConfig = { + type: "sqlite" + }; + Database.writeDBConfig(Database.dbConfig); + await Database.connect(true); + await Database.patch(); + } + + async destroy() { + await Database.close(); + this.dataDir && rimrafSync(this.dataDir); + } +} + +module.exports = TestDB; diff --git a/test/mock-webhook.js b/test/mock-webhook.js new file mode 100644 index 00000000..23bf192c --- /dev/null +++ b/test/mock-webhook.js @@ -0,0 +1,28 @@ +const express = require("express"); +const bodyParser = require("body-parser"); + +/** + * @param {number} port Port number + * @param {string} url Webhook URL + * @param {number} timeout Timeout + * @returns {Promise} Webhook data + */ +async function mockWebhook(port, url, timeout = 2500) { + return new Promise((resolve, reject) => { + const app = express(); + const tmo = setTimeout(() => { + server.close(); + reject({ reason: "Timeout" }); + }, timeout); + app.use(bodyParser.json()); // Middleware to parse JSON bodies + app.post(`/${url}`, (req, res) => { + res.status(200).send("OK"); + server.close(); + tmo && clearTimeout(tmo); + resolve(req.body); + }); + const server = app.listen(port); + }); +} + +module.exports = mockWebhook; From 2d9e6c39114200f6382212c7c8cc1621de26be13 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Dec 2025 14:32:12 +0100 Subject: [PATCH 78/91] fix: MariaDB datetime format error when pausing maintenance (#6513) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: louislam <1336778+louislam@users.noreply.github.com> Co-authored-by: CommanderStorm <26258709+CommanderStorm@users.noreply.github.com> --- server/model/maintenance.js | 4 +- test/backend-test/test-maintenance.js | 65 +++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 test/backend-test/test-maintenance.js diff --git a/server/model/maintenance.js b/server/model/maintenance.js index 9c429752..c180feec 100644 --- a/server/model/maintenance.js +++ b/server/model/maintenance.js @@ -1,5 +1,5 @@ const { BeanModel } = require("redbean-node/dist/bean-model"); -const { parseTimeObject, parseTimeFromTimeObject, log } = require("../../src/util"); +const { parseTimeObject, parseTimeFromTimeObject, log, SQL_DATETIME_FORMAT } = require("../../src/util"); const { R } = require("redbean-node"); const dayjs = require("dayjs"); const Cron = require("croner"); @@ -262,7 +262,7 @@ class Maintenance extends BeanModel { }, duration); // Set last start date to current time - this.last_start_date = current.toISOString(); + this.last_start_date = current.utc().format(SQL_DATETIME_FORMAT); await R.store(this); }; diff --git a/test/backend-test/test-maintenance.js b/test/backend-test/test-maintenance.js new file mode 100644 index 00000000..a23bd77b --- /dev/null +++ b/test/backend-test/test-maintenance.js @@ -0,0 +1,65 @@ +const test = require("node:test"); +const assert = require("node:assert"); +const dayjs = require("dayjs"); +const { SQL_DATETIME_FORMAT } = require("../../src/util"); + +dayjs.extend(require("dayjs/plugin/utc")); +dayjs.extend(require("dayjs/plugin/customParseFormat")); + +/** + * Tests for maintenance date formatting to ensure compatibility with MariaDB/MySQL. + * Issue: MariaDB rejects ISO format dates like '2025-12-19T01:04:02.129Z' + * Fix: Use SQL_DATETIME_FORMAT ('YYYY-MM-DD HH:mm:ss') instead of toISOString() + */ +test("Maintenance Date Format - MariaDB Compatibility", async (t) => { + + await t.test("SQL_DATETIME_FORMAT constant should match MariaDB format", async () => { + assert.strictEqual(SQL_DATETIME_FORMAT, "YYYY-MM-DD HH:mm:ss"); + }); + + await t.test("Format date using SQL_DATETIME_FORMAT", async () => { + const current = dayjs.utc("2025-12-19T01:04:02.129Z"); + const sqlFormat = current.utc().format(SQL_DATETIME_FORMAT); + + assert.strictEqual(sqlFormat, "2025-12-19 01:04:02"); + }); + + await t.test("SQL format should not contain ISO markers (T, Z)", async () => { + const current = dayjs.utc("2025-12-19T01:04:02.129Z"); + const sqlFormat = current.utc().format(SQL_DATETIME_FORMAT); + + assert.strictEqual(sqlFormat.includes("T"), false, "SQL format should not contain 'T'"); + assert.strictEqual(sqlFormat.includes("Z"), false, "SQL format should not contain 'Z'"); + }); + + await t.test("SQL format should match YYYY-MM-DD HH:mm:ss pattern", async () => { + const current = dayjs.utc("2025-12-19T01:04:02.129Z"); + const sqlFormat = current.utc().format(SQL_DATETIME_FORMAT); + const sqlDateTimeRegex = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/; + + assert.strictEqual(sqlDateTimeRegex.test(sqlFormat), true); + }); + + await t.test("Parse SQL datetime back to dayjs preserves timestamp", async () => { + const originalDate = dayjs.utc("2025-12-19T01:04:02.000Z"); + const sqlFormat = originalDate.utc().format(SQL_DATETIME_FORMAT); + const parsedDate = dayjs.utc(sqlFormat, SQL_DATETIME_FORMAT); + + assert.strictEqual(parsedDate.unix(), originalDate.unix()); + }); + + await t.test("Edge case: midnight timestamp", async () => { + const midnight = dayjs.utc("2025-01-01T00:00:00.000Z"); + const sqlFormat = midnight.utc().format(SQL_DATETIME_FORMAT); + + assert.strictEqual(sqlFormat, "2025-01-01 00:00:00"); + }); + + await t.test("Edge case: end of day timestamp", async () => { + const endOfDay = dayjs.utc("2025-12-31T23:59:59.999Z"); + const sqlFormat = endOfDay.utc().format(SQL_DATETIME_FORMAT); + + assert.strictEqual(sqlFormat, "2025-12-31 23:59:59"); + }); + +}); From d23ff8c4860b09cdd8c57ba9ab6ced5321dd3782 Mon Sep 17 00:00:00 2001 From: Shengqi Chen Date: Mon, 22 Dec 2025 22:31:39 +0800 Subject: [PATCH 79/91] fix: v2 migration process report is always 0 when having many monitors / dates (#6516) Signed-off-by: Shengqi Chen Co-authored-by: Frank Elsinga --- server/database.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/server/database.js b/server/database.js index a65a7fdc..51785a04 100644 --- a/server/database.js +++ b/server/database.js @@ -826,9 +826,7 @@ class Database { await Settings.set("migrateAggregateTableState", "migrating"); let progressPercent = 0; - let part = 100 / monitors.length; - let i = 1; - for (let monitor of monitors) { + for (const [ i, monitor ] of monitors.entries()) { // Get a list of unique dates from the heartbeat table, using raw sql let dates = await R.getAll(` SELECT DISTINCT DATE(time) AS date @@ -839,7 +837,7 @@ class Database { monitor.monitor_id ]); - for (let date of dates) { + for (const [ dateIndex, date ] of dates.entries()) { // New Uptime Calculator let calculator = new UptimeCalculator(); calculator.monitorID = monitor.monitor_id; @@ -855,7 +853,7 @@ class Database { `, [ monitor.monitor_id, date.date ]); if (heartbeats.length > 0) { - msg = `[DON'T STOP] Migrating monitor data ${monitor.monitor_id} - ${date.date} [${progressPercent.toFixed(2)}%][${i}/${monitors.length}]`; + msg = `[DON'T STOP] Migrating monitor ${monitor.monitor_id}s' (${i + 1} of ${monitors.length} total) data - ${date.date} - total migration progress ${progressPercent.toFixed(2)}%`; log.info("db", msg); migrationServer?.update(msg); } @@ -864,15 +862,14 @@ class Database { await calculator.update(heartbeat.status, parseFloat(heartbeat.ping), dayjs(heartbeat.time)); } - progressPercent += (Math.round(part / dates.length * 100) / 100); + // Calculate progress: (current_monitor_index + relative_date_progress) / total_monitors + progressPercent = (i + (dateIndex + 1) / dates.length) / monitors.length * 100; // Lazy to fix the floating point issue, it is acceptable since it is just a progress bar if (progressPercent > 100) { progressPercent = 100; } } - - i++; } msg = "Clearing non-important heartbeats"; From af5fd5488d6086da8a774cdda135019d5876be53 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Dec 2025 18:00:09 +0000 Subject: [PATCH 80/91] fix: Optimize heartbeat indexes containing `important` on sqlite using SQLite partial indexes (#6511) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: louislam <1336778+louislam@users.noreply.github.com> Co-authored-by: CommanderStorm <26258709+CommanderStorm@users.noreply.github.com> --- ...5-12-22-0121-optimize-important-indexes.js | 37 +++++ test/backend-test/test-migration.js | 133 ++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 db/knex_migrations/2025-12-22-0121-optimize-important-indexes.js create mode 100644 test/backend-test/test-migration.js diff --git a/db/knex_migrations/2025-12-22-0121-optimize-important-indexes.js b/db/knex_migrations/2025-12-22-0121-optimize-important-indexes.js new file mode 100644 index 00000000..4208f951 --- /dev/null +++ b/db/knex_migrations/2025-12-22-0121-optimize-important-indexes.js @@ -0,0 +1,37 @@ +exports.up = async function (knex) { + const isSQLite = knex.client.dialect === "sqlite3"; + + if (isSQLite) { + // For SQLite: Use partial indexes with WHERE important = 1 + // Drop existing indexes using IF EXISTS + await knex.raw("DROP INDEX IF EXISTS monitor_important_time_index"); + await knex.raw("DROP INDEX IF EXISTS heartbeat_important_index"); + + // Create partial indexes with predicate + await knex.schema.alterTable("heartbeat", function (table) { + table.index([ "monitor_id", "time" ], "monitor_important_time_index", { + predicate: knex.whereRaw("important = 1") + }); + table.index([ "important" ], "heartbeat_important_index", { + predicate: knex.whereRaw("important = 1") + }); + }); + } + // For MariaDB/MySQL: No changes (partial indexes not supported) +}; + +exports.down = async function (knex) { + const isSQLite = knex.client.dialect === "sqlite3"; + + if (isSQLite) { + // Restore original indexes + await knex.raw("DROP INDEX IF EXISTS monitor_important_time_index"); + await knex.raw("DROP INDEX IF EXISTS heartbeat_important_index"); + + await knex.schema.alterTable("heartbeat", function (table) { + table.index([ "monitor_id", "important", "time" ], "monitor_important_time_index"); + table.index([ "important" ]); + }); + } + // For MariaDB/MySQL: No changes +}; diff --git a/test/backend-test/test-migration.js b/test/backend-test/test-migration.js new file mode 100644 index 00000000..87e5ff9d --- /dev/null +++ b/test/backend-test/test-migration.js @@ -0,0 +1,133 @@ +const { describe, test } = require("node:test"); +const fs = require("fs"); +const path = require("path"); +const { GenericContainer, Wait } = require("testcontainers"); + +describe("Database Migration - Optimize Important Indexes", () => { + test("SQLite: All migrations run successfully", async () => { + const testDbPath = path.join(__dirname, "../../data/test-migration.db"); + const testDbDir = path.dirname(testDbPath); + + // Ensure data directory exists + if (!fs.existsSync(testDbDir)) { + fs.mkdirSync(testDbDir, { recursive: true }); + } + + // Clean up any existing test database + if (fs.existsSync(testDbPath)) { + fs.unlinkSync(testDbPath); + } + + // Use the same SQLite driver as the project + const Dialect = require("knex/lib/dialects/sqlite3/index.js"); + Dialect.prototype._driver = () => require("@louislam/sqlite3"); + + const knex = require("knex"); + const db = knex({ + client: Dialect, + connection: { + filename: testDbPath + }, + useNullAsDefault: true, + }); + + // Setup R (redbean) with knex instance like production code does + const { R } = require("redbean-node"); + R.setup(db); + + try { + // Use production code to initialize SQLite tables (like first run) + const { createTables } = require("../../db/knex_init_db.js"); + await createTables(); + + // Run all migrations like production code does + await R.knex.migrate.latest({ + directory: path.join(__dirname, "../../db/knex_migrations") + }); + + // Test passes if migrations complete successfully without errors + + } finally { + // Clean up + await R.knex.destroy(); + if (fs.existsSync(testDbPath)) { + fs.unlinkSync(testDbPath); + } + } + }); + + test( + "MariaDB: All migrations run successfully", + { + skip: + !!process.env.CI && + (process.platform !== "linux" || process.arch !== "x64"), + }, + async () => { + // Start MariaDB container (using MariaDB 12 to match current production) + const mariadbContainer = await new GenericContainer("mariadb:12") + .withEnvironment({ + "MYSQL_ROOT_PASSWORD": "root", + "MYSQL_DATABASE": "kuma_test", + "MYSQL_USER": "kuma", + "MYSQL_PASSWORD": "kuma" + }) + .withExposedPorts(3306) + .withWaitStrategy(Wait.forLogMessage("ready for connections", 2)) + .withStartupTimeout(120000) + .start(); + + // Wait a bit more to ensure MariaDB is fully ready + await new Promise(resolve => setTimeout(resolve, 2000)); + + const knex = require("knex"); + const knexInstance = knex({ + client: "mysql2", + connection: { + host: mariadbContainer.getHost(), + port: mariadbContainer.getMappedPort(3306), + user: "kuma", + password: "kuma", + database: "kuma_test", + connectTimeout: 60000, + }, + pool: { + min: 0, + max: 10, + acquireTimeoutMillis: 60000, + idleTimeoutMillis: 60000, + }, + }); + + // Setup R (redbean) with knex instance like production code does + const { R } = require("redbean-node"); + R.setup(knexInstance); + + try { + // Use production code to initialize MariaDB tables + const { createTables } = require("../../db/knex_init_db.js"); + await createTables(); + + // Run all migrations like production code does + await R.knex.migrate.latest({ + directory: path.join(__dirname, "../../db/knex_migrations") + }); + + // Test passes if migrations complete successfully without errors + + } finally { + // Clean up + try { + await R.knex.destroy(); + } catch (e) { + // Ignore cleanup errors + } + try { + await mariadbContainer.stop(); + } catch (e) { + // Ignore cleanup errors + } + } + } + ); +}); From b6e8d548b0ca876ffe3d9b485d5358515746290f Mon Sep 17 00:00:00 2001 From: Anthony <70786+am17torres@users.noreply.github.com> Date: Tue, 23 Dec 2025 21:36:28 -0500 Subject: [PATCH 81/91] fix: update dns monitor to evaluate full response list on CAA resolver_type (#6520) --- server/monitor-types/dns.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/monitor-types/dns.js b/server/monitor-types/dns.js index 77032b30..1565ff1f 100644 --- a/server/monitor-types/dns.js +++ b/server/monitor-types/dns.js @@ -50,8 +50,10 @@ class DnsMonitorType extends MonitorType { break; case "CAA": - dnsMessage = dnsRes[0].issue; - conditionsResult = handleConditions({ record: dnsRes[0].issue }); + // .filter(Boolean) was added because some CAA records do not contain an issue key, resulting in a blank list item. + // Hypothetical dnsRes [{ critical: 0, issuewild: 'letsencrypt.org' }, { critical: 0, issue: 'letsencrypt.org' }] + dnsMessage = `Records: ${dnsRes.map(record => record.issue).filter(Boolean).join(" | ")}`; + conditionsResult = dnsRes.some(record => handleConditions({ record: record.issue })); break; case "MX": From 7998592c924feead709d61427cde260ab93025be Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 23 Dec 2025 18:00:17 +0000 Subject: [PATCH 82/91] Translated using Weblate (German) Currently translated at 100.0% (1235 of 1235 strings) Co-authored-by: Michael Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-DE.json | 1194 +++++++++++++++++++++---------------------- 1 file changed, 597 insertions(+), 597 deletions(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 049dc3a8..e86b52ac 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -1,8 +1,8 @@ { "languageName": "Deutsch", "Settings": "Einstellungen", - "Dashboard": "Dashboard", - "New Update": "Update verfügbar", + "Dashboard": "Überblick", + "New Update": "Aktualisierung verfügbar", "Language": "Sprache", "Appearance": "Erscheinungsbild", "Theme": "Design", @@ -10,21 +10,21 @@ "Version": "Version", "Check Update On GitHub": "Auf GitHub nach Updates suchen", "List": "Liste", - "Home": "Home", + "Home": "Startseite", "Add": "Hinzufügen", "Add New Monitor": "Neuen Monitor hinzufügen", "Quick Stats": "Übersicht", - "Up": "Online", - "Down": "Offline", + "Up": "Aktiv", + "Down": "Inaktiv", "Pending": "Ausstehend", "Unknown": "Unbekannt", - "Cannot connect to the socket server": "Verbindung zum Socket-Server fehlgeschlagen", - "Reconnecting...": "Verbinde erneut...", + "Cannot connect to the socket server": "Keine Verbindung zum Socket-Server möglich", + "Reconnecting...": "Verbindung wird wiederhergestellt…", "Pause": "Pausieren", "pauseDashboardHome": "Pausiert", "Name": "Name", "Status": "Status", - "DateTime": "Datum / Zeit", + "DateTime": "Datum/Uhrzeit", "Message": "Nachricht", "No important events": "Keine wichtigen Ereignisse", "Resume": "Fortsetzen", @@ -32,12 +32,12 @@ "Delete": "Löschen", "Current": "Aktuell", "Uptime": "Verfügbarkeit", - "Cert Exp.": "Zertifikat läuft ab", + "Cert Exp.": "Zertifikatsablauf", "day": "Tag | Tage", "-day": "-Tage", "hour": "Stunde", "-hour": "-Stunden", - "checkEverySecond": "Alle {0} Sekunden überprüfen", + "checkEverySecond": "Prüfung alle {0} Sekunden", "Response": "Antwortzeit", "Ping": "Ping", "Monitor Type": "Monitor-Typ", @@ -48,15 +48,15 @@ "Port": "Port", "Heartbeat Interval": "Prüfintervall", "Retries": "Wiederholungen", - "retriesDescription": "Maximale Anzahl an Wiederholungen, bevor der Dienst als 'Offline' markiert und eine Benachrichtigung gesendet wird.", + "retriesDescription": "Maximale Wiederholungen, bevor der Dienst als inaktiv markiert und eine Benachrichtigung gesendet wird", "Advanced": "Erweitert", - "ignoreTLSError": "TLS/SSL-Fehler bei HTTPS-Webseiten ignorieren", + "ignoreTLSError": "TLS/SSL-Fehler bei HTTPS-Websites ignorieren", "Upside Down Mode": "Umgekehrter Modus", - "upsideDownModeDescription": "Im umgekehrten Modus gilt der Dienst als 'Offline', wenn er erreichbar ist.", + "upsideDownModeDescription": "Kehrt den Status um. Wenn der Dienst erreichbar ist, wird er als INAKTIV angezeigt.", "Max. Redirects": "Max. Weiterleitungen", - "maxRedirectDescription": "Maximale Anzahl von Weiterleitungen, denen gefolgt werden soll. Auf 0 setzen, um Weiterleitungen zu deaktivieren.", + "maxRedirectDescription": "Maximale Anzahl von Weiterleitungen. Auf 0 setzen, um Weiterleitungen zu deaktivieren.", "Accepted Status Codes": "Akzeptierte Statuscodes", - "acceptedStatusCodesDescription": "Wähle die Statuscodes, die als erfolgreiche Antwort gelten sollen.", + "acceptedStatusCodesDescription": "Wähle Statuscodes aus, die als erfolgreiche Antwort gelten sollen.", "Save": "Speichern", "Notifications": "Benachrichtigungen", "Not available, please setup.": "Nicht verfügbar, bitte einrichten.", @@ -64,29 +64,29 @@ "Light": "Hell", "Dark": "Dunkel", "Auto": "Automatisch", - "Theme - Heartbeat Bar": "Design - Zeitleiste", + "Theme - Heartbeat Bar": "Design – Prüfintervallleiste", "Normal": "Normal", "Bottom": "Unten", "None": "Keine", "Timezone": "Zeitzone", "Search Engine Visibility": "Sichtbarkeit für Suchmaschinen", - "Allow indexing": "Indizierung erlauben", - "Discourage search engines from indexing site": "Suchmaschinen davon abhalten, die Seite zu indizieren", + "Allow indexing": "Indexierung erlauben", + "Discourage search engines from indexing site": "Suchmaschinen davon abhalten, die Seite zu indexieren", "Change Password": "Passwort ändern", "Current Password": "Aktuelles Passwort", "New Password": "Neues Passwort", "Repeat New Password": "Neues Passwort wiederholen", - "passwordNotMatchMsg": "Die Passwörter stimmen nicht überein.", + "passwordNotMatchMsg": "Die Passwortwiederholung stimmt nicht überein.", "Update Password": "Passwort aktualisieren", "Disable Auth": "Authentifizierung deaktivieren", "Enable Auth": "Authentifizierung aktivieren", - "disableauth.message1": "Bist du sicher, dass du die {disableAuth} möchtest?", + "disableauth.message1": "Möchtest du wirklich die {disableAuth}?", "disable authentication": "Authentifizierung deaktivieren", - "disableauth.message2": "Dies ist für Szenarien gedacht, {intendThirdPartyAuth} vor Uptime Kuma geschaltet hast, wie z.B. Cloudflare Access, Authelia oder andere Authentifizierungsmechanismen.", - "where you intend to implement third-party authentication": "in denen du eine externe Authentifizierung", - "Please use this option carefully!": "Bitte nutze diese Option mit Vorsicht!", + "disableauth.message2": "Diese Option ist für Szenarien gedacht, {intendThirdPartyAuth} vor Uptime Kuma geschaltet ist, z. B. Cloudflare Access, Authelia oder andere Authentifizierungsmechanismen.", + "where you intend to implement third-party authentication": "in denen eine externe Authentifizierung", + "Please use this option carefully!": "Bitte mit Vorsicht verwenden!", "Logout": "Abmelden", - "notificationDescription": "Benachrichtigungen müssen einem Monitor zugewiesen werden, damit sie funktionieren.", + "notificationDescription": "Benachrichtigungen müssen einem Monitor zugewiesen werden, um zu funktionieren.", "Leave": "Verlassen", "I understand, please disable": "Ich verstehe, bitte deaktivieren", "Confirm": "Bestätigen", @@ -95,67 +95,67 @@ "Username": "Benutzername", "Password": "Passwort", "Remember me": "Angemeldet bleiben", - "Login": "Einloggen", - "No Monitors, please": "Keine Monitore, bitte", - "add one": "hinzufügen", + "Login": "Anmelden", + "No Monitors, please": "Keine Monitore vorhanden, bitte", + "add one": "einen hinzufügen", "Notification Type": "Benachrichtigungstyp", "Email": "E-Mail", "Test": "Testen", "Certificate Info": "Zertifikatsinformationen", - "keywordDescription": "Suchbegriff in der HTML- oder JSON-Antwort finden. Groß-/Kleinschreibung wird beachtet.", + "keywordDescription": "Sucht nach einem Schlüsselwort in der HTML- oder JSON-Antwort. Die Suche unterscheidet zwischen Groß- und Kleinschreibung.", "deleteMonitorMsg": "Möchtest du diesen Monitor wirklich löschen?", "deleteNotificationMsg": "Möchtest du diese Benachrichtigung wirklich für alle Monitore löschen?", - "resolverserverDescription": "Cloudflare ist der Standardserver. Du kannst den DNS-Server jederzeit ändern.", - "Resolver Server": "DNS-Server", - "rrtypeDescription": "Wähle den RR-Typ, den du überwachen möchtest", + "resolverserverDescription": "Cloudflare ist der Standardserver. Der Auflösungsserver kann jederzeit geändert werden.", + "Resolver Server": "DNS-Auflösungsserver", + "rrtypeDescription": "Wähle den RR-Typ aus, den du überwachen möchtest", "Last Result": "Letztes Ergebnis", - "pauseMonitorMsg": "Möchtest du den Monitor wirklich pausieren?", + "pauseMonitorMsg": "Möchtest du wirklich pausieren?", "clearEventsMsg": "Möchtest du wirklich alle Ereignisse für diesen Monitor löschen?", - "clearHeartbeatsMsg": "Möchtest du wirklich alle Heartbeat-Einträge für diesen Monitor löschen?", + "clearHeartbeatsMsg": "Möchtest du wirklich alle Heartbeats für diesen Monitor löschen?", "Clear Data": "Daten löschen", "Events": "Ereignisse", - "Heartbeats": "Heartbeats", - "confirmClearStatisticsMsg": "Bist du sicher, dass du ALLE Statistiken löschen möchtest?", + "Heartbeats": "Prüfintervalle", + "confirmClearStatisticsMsg": "Möchtest du wirklich ALLE Statistiken löschen?", "Create your admin account": "Admin-Konto erstellen", "Repeat Password": "Passwort wiederholen", - "Resource Record Type": "Resource Record Typ", + "Resource Record Type": "Ressourcen-Record-Typ", "Export": "Exportieren", "Import": "Importieren", - "respTime": "Antw.-Zeit (ms)", - "notAvailableShort": "N/A", + "respTime": "Antwortzeit (ms)", + "notAvailableShort": "N/V", "Default enabled": "Standardmäßig aktiviert", - "Apply on all existing monitors": "Auf alle existierenden Monitore anwenden", - "enableDefaultNotificationDescription": "Diese Benachrichtigung wird für jeden neuen Monitor standardmäßig aktiviert. Du kannst sie weiterhin für jeden Monitor einzeln deaktivieren.", + "Apply on all existing monitors": "Auf alle vorhandenen Monitore anwenden", + "enableDefaultNotificationDescription": "Diese Benachrichtigung wird standardmäßig für neue Monitore aktiviert. Du kannst die Benachrichtigung für jeden Monitor einzeln deaktivieren.", "Create": "Erstellen", "Auto Get": "Automatisch abrufen", "backupDescription": "Du kannst alle Monitore und Benachrichtigungen in einer JSON-Datei sichern.", "backupDescription2": "Hinweis: Verlaufs- und Ereignisdaten sind nicht enthalten.", - "backupDescription3": "Sensible Daten wie Benachrichtigungs-Token sind in der Exportdatei enthalten. Bitte bewahre sie sicher auf.", + "backupDescription3": "Sensible Daten wie Benachrichtigungs-Tokens sind in der Exportdatei enthalten. Bitte sicher aufbewahren.", "alertNoFile": "Bitte wähle eine Datei zum Importieren aus.", "alertWrongFileType": "Bitte wähle eine JSON-Datei aus.", "Clear all statistics": "Alle Statistiken löschen", - "importHandleDescription": "Wähle 'Vorhandene überspringen', wenn Monitore oder Benachrichtigungen mit demselben Namen ignoriert werden sollen. 'Überschreiben' ersetzt existierende Einträge.", + "importHandleDescription": "Wähle „Vorhandene überspringen“, um Monitore oder Benachrichtigungen mit gleichem Namen zu überspringen. „Überschreiben“ löscht alle vorhandenen Monitore und Benachrichtigungen.", "Skip existing": "Vorhandene überspringen", "Overwrite": "Überschreiben", "Options": "Optionen", - "confirmImportMsg": "Möchtest du das Backup wirklich importieren? Bitte stelle sicher, dass die richtige Import-Option gewählt ist.", + "confirmImportMsg": "Möchtest du das Backup wirklich importieren? Stelle sicher, dass du die richtige Import-Option ausgewählt hast.", "Keep both": "Beide behalten", - "twoFAVerifyLabel": "Bitte gib deinen Token ein, um die 2FA zu verifizieren:", + "twoFAVerifyLabel": "Bitte gib deinen Token ein, um 2FA zu verifizieren:", "Verify Token": "Token verifizieren", "Setup 2FA": "2FA einrichten", "Enable 2FA": "2FA aktivieren", "Disable 2FA": "2FA deaktivieren", "2FA Settings": "2FA-Einstellungen", - "confirmEnableTwoFAMsg": "Bist du sicher, dass du 2FA aktivieren möchtest?", - "confirmDisableTwoFAMsg": "Bist du sicher, dass du 2FA deaktivieren möchtest?", - "tokenValidSettingsMsg": "Token ist gültig! Du kannst die 2FA-Einstellungen jetzt speichern.", + "confirmEnableTwoFAMsg": "Möchtest du 2FA wirklich aktivieren?", + "confirmDisableTwoFAMsg": "Möchtest du 2FA wirklich deaktivieren?", + "tokenValidSettingsMsg": "Token gültig! Du kannst jetzt die 2FA-Einstellungen speichern.", "Two Factor Authentication": "Zwei-Faktor-Authentifizierung", "Active": "Aktiv", "Inactive": "Inaktiv", "Token": "Token", "Show URI": "URI anzeigen", "Tags": "Tags", - "Add New below or Select...": "Neu hinzufügen oder auswählen…", + "Add New below or Select...": "Neuen hinzufügen oder auswählen…", "Tag with this name already exist.": "Ein Tag mit diesem Namen existiert bereits.", "Tag with this value already exist.": "Ein Tag mit diesem Wert existiert bereits.", "color": "Farbe", @@ -166,24 +166,24 @@ "Green": "Grün", "Blue": "Blau", "Indigo": "Indigo", - "Purple": "Lila", - "Pink": "Pink", + "Purple": "Violett", + "Pink": "Rosa", "Search...": "Suchen…", "Heartbeat Retry Interval": "Wiederholungsintervall", - "Resend Notification if Down X times consecutively": "Benachrichtigung erneut senden, wenn X Mal hintereinander 'Offline'", - "retryCheckEverySecond": "Alle {0} Sekunden erneut versuchen", - "resendEveryXTimes": "Alle {0} Mal erneut senden", + "Resend Notification if Down X times consecutively": "Benachrichtigung erneut senden nach X aufeinanderfolgenden Ausfällen", + "retryCheckEverySecond": "Wiederholung alle {0} Sekunden", + "resendEveryXTimes": "Erneut senden alle {0} Mal", "resendDisabled": "Erneutes Senden deaktiviert", "Import Backup": "Backup importieren", "Export Backup": "Backup exportieren", - "Avg. Ping": "Ø Ping", - "Avg. Response": "Ø Antwortzeit", - "Entry Page": "Startseite", + "Avg. Ping": "Durchschn. Ping", + "Avg. Response": "Durchschn. Antwortzeit", + "Entry Page": "Einstiegsseite", "statusPageNothing": "Hier ist noch nichts. Bitte füge eine Gruppe oder einen Monitor hinzu.", "No Services": "Keine Dienste", - "All Systems Operational": "Alle Systeme funktionieren", + "All Systems Operational": "Alle Systeme betriebsbereit", "Partially Degraded Service": "Teilweise beeinträchtigter Dienst", - "Degraded Service": "Eingeschränkter Dienst", + "Degraded Service": "Beeinträchtigter Dienst", "Add Group": "Gruppe hinzufügen", "Add a monitor": "Monitor hinzufügen", "Edit Status Page": "Statusseite bearbeiten", @@ -204,118 +204,118 @@ "octopush": "Octopush", "promosms": "PromoSMS", "lunasea": "LunaSea", - "apprise": "Apprise (Support für 50+ Dienste)", + "apprise": "Apprise (unterstützt über 50 Benachrichtigungsdienste)", "GoogleChat": "Google Chat (nur Google Workspace)", "pushbullet": "Pushbullet", "line": "Line Messenger", "mattermost": "Mattermost", "Primary Base URL": "Primäre Basis-URL", "Push URL": "Push-URL", - "needPushEvery": "Du solltest diese URL alle {0} Sekunden aufrufen.", + "needPushEvery": "Diese URL sollte alle {0} Sekunden aufgerufen werden.", "pushOptionalParams": "Optionale Parameter: {0}", - "defaultNotificationName": "Mein {notification} Alarm ({number})", + "defaultNotificationName": "Meine {notification}-Benachrichtigung ({number})", "here": "hier", "Required": "Erforderlich", "Bot Token": "Bot-Token", - "wayToGetTelegramToken": "Du kannst hier einen Token erhalten: {0}.", + "wayToGetTelegramToken": "Du kannst einen Token von {0} erhalten.", "Chat ID": "Chat-ID", - "supportTelegramChatID": "Unterstützt Direktchat / Gruppe / Kanal Chat-IDs", - "wayToGetTelegramChatID": "Du erhältst deine Chat-ID, indem du eine Nachricht an den Bot sendest und diese URL aufrufst:", - "YOUR BOT TOKEN HERE": "HIER DEIN BOT-TOKEN", - "chatIDNotFound": "Chat-ID nicht gefunden: Bitte sende zuerst eine Nachricht an diesen Bot.", + "supportTelegramChatID": "Unterstützt Direktchat-/Gruppen-/Kanal-Chat-ID", + "wayToGetTelegramChatID": "Du kannst deine Chat-ID erhalten, indem du eine Nachricht an den Bot sendest und diese URL aufrufst, um die chat_id zu sehen:", + "YOUR BOT TOKEN HERE": "DEIN BOT-TOKEN HIER", + "chatIDNotFound": "Chat-ID nicht gefunden; bitte sende zuerst eine Nachricht an diesen Bot", "Post URL": "Post-URL", - "Content Type": "Content Type", - "webhookJsonDesc": "{0} eignet sich für moderne HTTP-Server wie z.B. Express.js.", - "webhookFormDataDesc": "{multipart} eignet sich für PHP. Das JSON muss mit {decodeFunction} verarbeitet werden.", + "Content Type": "Inhaltstyp", + "webhookJsonDesc": "{0} eignet sich für alle modernen HTTP-Server wie z. B. Express.js", + "webhookFormDataDesc": "{multipart} eignet sich für PHP. Das JSON muss mit {decodeFunction} verarbeitet werden", "secureOptionNone": "Keine / STARTTLS (25, 587)", "secureOptionTLS": "TLS (465)", "Ignore TLS Error": "TLS-Fehler ignorieren", - "From Email": "Absender E-Mail", + "From Email": "Absender-E-Mail", "emailCustomSubject": "Benutzerdefinierter Betreff", - "To Email": "Empfänger E-Mail", + "To Email": "Empfänger-E-Mail", "smtpCC": "CC", "smtpBCC": "BCC", - "Discord Webhook URL": "Discord Webhook-URL", - "wayToGetDiscordURL": "Zu finden unter: Servereinstellungen -> Integrationen -> WebHooks -> Neuer WebHook", + "Discord Webhook URL": "Discord-Webhook-URL", + "wayToGetDiscordURL": "Du erhältst diese unter Servereinstellungen → Integrationen → Webhooks anzeigen → Neuer Webhook", "Bot Display Name": "Bot-Anzeigename", - "Prefix Custom Message": "Präfix für benutzerdefinierte Nachricht", + "Prefix Custom Message": "Benutzerdefinierter Nachrichtenprefix", "Hello @everyone is...": "Hallo {'@'}everyone ist…", "Webhook URL": "Webhook-URL", "wayToGetTeamsURL": "Erfahre hier, wie du eine Webhook-URL erstellst: {0}.", "Number": "Nummer", "Recipients": "Empfänger", - "needSignalAPI": "Es wird ein Signal-Client mit REST-API benötigt.", - "wayToCheckSignalURL": "Rufe diese URL auf, um zu sehen, wie die Einrichtung funktioniert:", + "needSignalAPI": "Du benötigst einen Signal-Client mit REST-API.", + "wayToCheckSignalURL": "Hier erfährst du, wie du einen einrichtest:", "signalImportant": "WICHTIG: Gruppen und Nummern können bei Empfängern nicht gemischt werden!", - "Application Token": "Anwendungs-Token", + "Application Token": "Anwendungstoken", "Server URL": "Server-URL", "Priority": "Priorität", - "Icon Emoji": "Icon-Emoji", + "Icon Emoji": "Symbol-Emoji", "Channel Name": "Kanalname", - "Uptime Kuma URL": "Uptime Kuma URL", - "aboutWebhooks": "Weitere Informationen zu Webhooks: {0}", - "aboutChannelName": "Gib den Kanalnamen im Feld '{0}' ein, falls du den Standard Webhook-Kanal umgehen möchtest. Bsp: #anderer-kanal", - "aboutKumaURL": "Wenn du das Feld für die Uptime Kuma URL leer lässt, wird standardmäßig auf die GitHub-Projektseite verlinkt.", - "emojiCheatSheet": "Emoji Cheat Sheet: {0}", + "Uptime Kuma URL": "Uptime-Kuma-URL", + "aboutWebhooks": "Mehr über Webhooks: {0}", + "aboutChannelName": "Gib den Kanalnamen im Feld „{0} Kanalname“ ein, um den Webhook-Kanal zu umgehen. Beispiel: #other-channel", + "aboutKumaURL": "Wenn du das Uptime-Kuma-URL-Feld leer lässt, wird es standardmäßig auf die GitHub-Projektseite gesetzt.", + "emojiCheatSheet": "Emoji-Übersicht: {0}", "User Key": "Benutzerschlüssel", "Device": "Gerät", "Message Title": "Nachrichtentitel", "Notification Sound": "Benachrichtigungston", - "More info on:": "Mehr Infos auf: {0}", - "pushoverDesc1": "Notfallpriorität (2) hat standardmäßig 30 Sekunden Auszeit zwischen den Versuchen und läuft nach 1 Stunde ab.", - "pushoverDesc2": "Fülle das Feld 'Gerät' aus, wenn du Benachrichtigungen an spezifische Geräte senden möchtest.", - "pushoverMessageTtl": "Nachricht TTL (Sekunden)", + "More info on:": "Mehr Infos unter: {0}", + "pushoverDesc1": "Notfallpriorität (2) hat standardmäßig 30 Sekunden zwischen Wiederholungen und läuft nach 1 Stunde ab.", + "pushoverDesc2": "Wenn du Benachrichtigungen an verschiedene Geräte senden möchtest, fülle das Gerätefeld aus.", + "pushoverMessageTtl": "Nachrichten-TTL (Sekunden)", "SMS Type": "SMS-Typ", - "octopushTypePremium": "Premium (Schnell - für Alarme empfohlen)", - "octopushTypeLowCost": "Kostengünstig (Langsam - manchmal vom Betreiber blockiert)", - "checkPrice": "{0}-Preise prüfen:", - "octopushLegacyHint": "Verwendest du die Legacy-Version von Octopush (2011-2020) oder die neue Version?", - "Check octopush prices": "Octopush-Preise {0} überprüfen.", - "octopushPhoneNumber": "Telefonnummer (Internationales Format, z.B.: +4915112345678) ", - "octopushSMSSender": "SMS-Absendername: 3-11 alphanumerische Zeichen und Leerzeichen (a-zA-Z0-9)", - "LunaSea Device ID": "LunaSea Geräte-ID", + "octopushTypePremium": "Premium (schnell – empfohlen für Benachrichtigungen)", + "octopushTypeLowCost": "Günstig (langsam – manchmal vom Anbieter blockiert)", + "checkPrice": "Preise prüfen unter {0}:", + "octopushLegacyHint": "Verwendest du die Legacy-Version von Octopush (2011–2020) oder die neue Version?", + "Check octopush prices": "Octopush-Preise prüfen {0}.", + "octopushPhoneNumber": "Telefonnummer (internationales Format, z. B. +49612345678) ", + "octopushSMSSender": "SMS-Absendername: 3–11 alphanumerische Zeichen und Leerzeichen (a-zA-Z0-9)", + "LunaSea Device ID": "LunaSea-Geräte-ID", "Apprise URL": "Apprise-URL", "Example:": "Beispiel: {0}", - "Read more:": "Weiterlesen: {0}", + "Read more:": "Mehr erfahren: {0}", "Status:": "Status: {0}", - "Read more": "Weiterlesen", + "Read more": "Mehr erfahren", "appriseInstalled": "Apprise ist installiert.", "appriseNotInstalled": "Apprise ist nicht installiert. {0}", - "Access Token": "Zugriffs-Token", - "Channel access token": "Kanalzugriffs-Token", - "Line Developers Console": "Line Entwicklerkonsole", - "lineDevConsoleTo": "Line Entwicklerkonsole - {0}", + "Access Token": "Zugriffstoken", + "Channel access token": "Kanal-Zugriffstoken", + "Line Developers Console": "Line Developers Console", + "lineDevConsoleTo": "Line Developers Console – {0}", "Basic Settings": "Grundeinstellungen", - "User ID": "User-ID", - "Messaging API": "Messaging API", - "wayToGetLineChannelToken": "Rufe zuerst {0} auf, erstelle dann Provider und Channel (Messaging API). Anschließend kannst du den 'Channel access token' und die 'User ID' dort abrufen.", - "Icon URL": "Icon-URL", - "aboutIconURL": "Du kannst hier einen Link zu einem Bild angeben, um das Standardprofilbild zu überschreiben. Wird ignoriert, wenn ein Icon-Emoji gesetzt ist.", - "aboutMattermostChannelName": "Du kannst den Standardkanal überschreiben, indem du den Kanalnamen in das Feld 'Channel Name' eingibst. Dies muss in den Mattermost Webhook-Einstellungen aktiviert sein. Bsp: #anderer-kanal", + "User ID": "Benutzer-ID", + "Messaging API": "Messaging-API", + "wayToGetLineChannelToken": "Rufe zuerst die {0} auf, erstelle einen Provider und Kanal (Messaging API), dann kannst du den Kanal-Zugriffstoken und die Benutzer-ID aus den oben genannten Menüpunkten abrufen.", + "Icon URL": "Symbol-URL", + "aboutIconURL": "Du kannst einen Link zu einem Bild unter „Symbol-URL“ angeben, um das Standardprofilbild zu überschreiben. Wird nicht verwendet, wenn ein Symbol-Emoji festgelegt ist.", + "aboutMattermostChannelName": "Du kannst den Standardkanal des Webhooks überschreiben, indem du den Kanalnamen im Feld „Kanalname“ eingibst. Dies muss in den Mattermost-Webhook-Einstellungen aktiviert werden. Beispiel: #other-channel", "matrix": "Matrix", - "promosmsTypeEco": "SMS ECO - günstig, aber langsam und oft überlastet. Nur für polnische Empfänger.", - "promosmsTypeFlash": "SMS FLASH - Nachricht wird automatisch auf dem Gerät angezeigt. Nur für polnische Empfänger.", - "promosmsTypeFull": "SMS FULL - Premium-SMS, Absendername möglich (muss registriert werden). Zuverlässig für Alarme.", - "promosmsTypeSpeed": "SMS SPEED - Höchste Priorität. Sehr schnell und zuverlässig, aber teuer (ca. doppelt so teuer wie SMS FULL).", + "promosmsTypeEco": "SMS ECO – günstig, aber langsam und oft überlastet. Nur für polnische Empfänger.", + "promosmsTypeFlash": "SMS FLASH – Nachricht wird automatisch auf dem Empfängergerät angezeigt. Nur für polnische Empfänger.", + "promosmsTypeFull": "SMS FULL – Premium-SMS, du kannst deinen Absendernamen verwenden (muss vorher registriert werden). Zuverlässig für Benachrichtigungen.", + "promosmsTypeSpeed": "SMS SPEED – Höchste Priorität im System. Sehr schnell und zuverlässig, aber teuer (etwa das Doppelte von SMS FULL).", "promosmsPhoneNumber": "Telefonnummer (für polnische Empfänger kann die Vorwahl weggelassen werden)", - "promosmsSMSSender": "SMS-Absendername: vorregistrierter Name oder Standardwerte (InfoSMS, SMS Info, MaxSMS, INFO, SMS)", - "Feishu WebHookUrl": "Feishu Webhook-URL", - "matrixHomeserverURL": "Homeserver-URL (mit http(s):// und optional Port)", + "promosmsSMSSender": "SMS-Absendername: Vorregistrierter Name oder Standard: InfoSMS, SMS Info, MaxSMS, INFO, SMS", + "Feishu WebHookUrl": "Feishu-Webhook-URL", + "matrixHomeserverURL": "Homeserver-URL (mit http(s):// und optionalem Port)", "Internal Room Id": "Interne Raum-ID", - "matrixDesc1": "Die interne Raum-ID findest du in den erweiterten Raumeinstellungen deines Matrix-Clients. Format z.B.: !QMdRCpUIfLwsfjxye6:home.server.", - "matrixDesc2": "Es wird dringend empfohlen, einen neuen Benutzer anzulegen und nicht den Token deines eigenen Matrix-Benutzers zu verwenden, da dies vollen Zugriff auf dein Konto gewährt. Erstelle einen Bot-User und lade ihn in den gewünschten Raum ein. Den Access-Token erhältst du so: {0}", + "matrixDesc1": "Die interne Raum-ID findest du im erweiterten Bereich der Raumeinstellungen in deinem Matrix-Client. Sie sollte so aussehen: !QMdRCpUIfLwsfjxye6:home.server.", + "matrixDesc2": "Es wird dringend empfohlen, einen neuen Benutzer zu erstellen und nicht den Zugriffstoken deines eigenen Matrix-Benutzers zu verwenden, da dieser vollen Zugriff auf dein Konto und alle Räume gewährt. Erstelle stattdessen einen neuen Benutzer und lade ihn nur in den Raum ein, in dem du Benachrichtigungen erhalten möchtest. Den Zugriffstoken erhältst du mit: {0}", "Method": "Methode", "Body": "Body", "Headers": "Header", "PushUrl": "Push-URL", - "HeadersInvalidFormat": "Der Header ist kein gültiges JSON: ", - "BodyInvalidFormat": "Der Body ist kein gültiges JSON: ", + "HeadersInvalidFormat": "Die Anfrage-Header sind kein gültiges JSON: ", + "BodyInvalidFormat": "Der Anfrage-Body ist kein gültiges JSON: ", "Monitor History": "Monitor-Verlauf", "clearDataOlderThan": "Monitor-Verlaufsdaten für {0} Tage aufbewahren.", "PasswordsDoNotMatch": "Passwörter stimmen nicht überein.", "records": "Einträge", "One record": "Ein Eintrag", - "steamApiKeyDescription": "Um einen Steam-Gameserver zu überwachen, wird ein Steam Web-API-Schlüssel benötigt. Registrierung hier: ", + "steamApiKeyDescription": "Um einen Steam-Spielserver zu überwachen, wird ein Steam-Web-API-Schlüssel benötigt. Diesen kannst du hier registrieren: ", "Current User": "Aktueller Benutzer", "recent": "Kürzlich", "Done": "Fertig", @@ -342,36 +342,36 @@ "Created": "Erstellt", "Last Updated": "Zuletzt aktualisiert", "Unpin": "Loslösen", - "Switch to Light Theme": "Helles Design aktivieren", - "Switch to Dark Theme": "Dunkles Design aktivieren", + "Switch to Light Theme": "Zum hellen Design wechseln", + "Switch to Dark Theme": "Zum dunklen Design wechseln", "Show Tags": "Tags anzeigen", "Hide Tags": "Tags ausblenden", "Description": "Beschreibung", "No monitors available.": "Keine Monitore verfügbar.", - "Add one": "Hinzufügen", + "Add one": "Einen hinzufügen", "No Monitors": "Keine Monitore", "Untitled Group": "Unbenannte Gruppe", "Services": "Dienste", "Discard": "Verwerfen", "Cancel": "Abbrechen", - "Powered by": "Bereitgestellt mit", + "Powered by": "Betrieben mit", "serwersms": "SerwerSMS.pl", - "serwersmsAPIUser": "API-Benutzername (inkl. webapi_ Präfix)", + "serwersmsAPIUser": "API-Benutzername (inkl. webapi_-Präfix)", "serwersmsAPIPassword": "API-Passwort", "serwersmsPhoneNumber": "Telefonnummer", - "serwersmsSenderName": "SMS-Absendername (im Kundenportal registriert)", + "serwersmsSenderName": "SMS-Absendername (über Kundenportal registriert)", "stackfield": "Stackfield", "clicksendsms": "ClickSend SMS", - "apiCredentials": "API-Zugangsdaten", + "apiCredentials": "API-Anmeldedaten", "smtpDkimSettings": "DKIM-Einstellungen", - "smtpDkimDesc": "Konfigurationsdetails sind in der Nodemailer DKIM {0} zu finden.", + "smtpDkimDesc": "Bitte lies die Nodemailer-DKIM-{0} für Anleitungen.", "documentation": "Dokumentation", "smtpDkimDomain": "Domainname", - "smtpDkimKeySelector": "Key Selector", + "smtpDkimKeySelector": "Schlüsselauswahl", "smtpDkimPrivateKey": "Privater Schlüssel", - "smtpDkimHashAlgo": "Hash-Algorithmus (Optional)", - "smtpDkimheaderFieldNames": "Zu signierende Header-Keys (optional)", - "smtpDkimskipFields": "Zu ignorierende Header-Keys (optional)", + "smtpDkimHashAlgo": "Hash-Algorithmus (optional)", + "smtpDkimheaderFieldNames": "Zu signierende Header-Schlüssel (optional)", + "smtpDkimskipFields": "Nicht zu signierende Header-Schlüssel (optional)", "PushByTechulus": "Push by Techulus", "gorush": "Gorush", "alerta": "Alerta", @@ -380,35 +380,35 @@ "alertaApiKey": "API-Schlüssel", "alertaAlertState": "Alarmstatus", "alertaRecoverState": "Wiederherstellungsstatus", - "deleteStatusPageMsg": "Bist du sicher, dass du diese Statusseite löschen willst?", + "deleteStatusPageMsg": "Möchtest du diese Statusseite wirklich löschen?", "Proxies": "Proxys", "default": "Standard", "enabled": "Aktiviert", - "setAsDefault": "Als Standard setzen", - "deleteProxyMsg": "Bist du sicher, dass du diesen Proxy für alle Monitore löschen willst?", + "setAsDefault": "Als Standard festlegen", + "deleteProxyMsg": "Möchtest du diesen Proxy wirklich für alle Monitore löschen?", "proxyDescription": "Proxys müssen einem Monitor zugewiesen werden, um zu funktionieren.", - "enableProxyDescription": "Dieser Proxy hat keine Auswirkung auf Monitor-Anfragen, bis er aktiviert ist. Du kannst ihn temporär deaktivieren, ohne die Zuordnung zu löschen.", - "setAsDefaultProxyDescription": "Dieser Proxy wird standardmäßig für alle neuen Monitore aktiviert. Du kannst ihn für einzelne Monitore deaktivieren.", + "enableProxyDescription": "Dieser Proxy wirkt sich erst auf Monitor-Anfragen aus, wenn er aktiviert ist. Du kannst den Proxy vorübergehend für alle Monitore über den Aktivierungsstatus deaktivieren.", + "setAsDefaultProxyDescription": "Dieser Proxy wird standardmäßig für neue Monitore aktiviert. Du kannst den Proxy für jeden Monitor einzeln deaktivieren.", "Certificate Chain": "Zertifikatskette", "Valid": "Gültig", "Invalid": "Ungültig", - "AccessKeyId": "AccessKey ID", - "SecretAccessKey": "Geheimer Zugangsschlüssel", + "AccessKeyId": "AccessKey-ID", + "SecretAccessKey": "Geheimer AccessKey", "PhoneNumbers": "Telefonnummern", "TemplateCode": "Vorlagencode", "SignName": "Signaturname", "Sms template must contain parameters: ": "SMS-Vorlage muss folgende Parameter enthalten: ", - "Bark Endpoint": "Bark Endpunkt", + "Bark Endpoint": "Bark-Endpunkt", "WebHookUrl": "Webhook-URL", "SecretKey": "Geheimer Schlüssel", - "For safety, must use secret key": "Zur Sicherheit muss ein geheimer Schlüssel verwendet werden", - "Device Token": "Geräte-Token", + "For safety, must use secret key": "Aus Sicherheitsgründen muss ein geheimer Schlüssel verwendet werden", + "Device Token": "Gerätetoken", "Platform": "Plattform", "Huawei": "Huawei", "High": "Hoch", "Retry": "Wiederholen", "Topic": "Thema", - "WeCom Bot Key": "WeCom Bot-Schlüssel", + "WeCom Bot Key": "WeCom-Bot-Schlüssel", "Setup Proxy": "Proxy einrichten", "Proxy Protocol": "Proxy-Protokoll", "Proxy Server": "Proxy-Server", @@ -419,93 +419,93 @@ "Running": "Läuft", "Not running": "Gestoppt", "Remove Token": "Token entfernen", - "Start": "Start", - "Stop": "Stop", + "Start": "Starten", + "Stop": "Stoppen", "Uptime Kuma": "Uptime Kuma", "Add New Status Page": "Neue Statusseite hinzufügen", - "Slug": "Slug (URL-Pfad)", - "Accept characters:": "Erlaubte Zeichen:", - "startOrEndWithOnly": "Darf nur mit {0} beginnen und enden", + "Slug": "Slug", + "Accept characters:": "Akzeptierte Zeichen:", + "startOrEndWithOnly": "Nur mit {0} beginnen oder enden", "No consecutive dashes": "Keine aufeinanderfolgenden Bindestriche", "Next": "Weiter", "The slug is already taken. Please choose another slug.": "Dieser Slug ist bereits vergeben. Bitte wähle einen anderen.", "No Proxy": "Kein Proxy", "Authentication": "Authentifizierung", - "HTTP Basic Auth": "HTTP Basic Auth", + "HTTP Basic Auth": "HTTP-Basisauthentifizierung", "New Status Page": "Neue Statusseite", "Page Not Found": "Seite nicht gefunden", - "Reverse Proxy": "Reverse Proxy", + "Reverse Proxy": "Reverse-Proxy", "Backup": "Backup", "About": "Über", - "wayToGetCloudflaredURL": "(Lade 'cloudflared' von {0} herunter)", - "cloudflareWebsite": "Cloudflare Webseite", + "wayToGetCloudflaredURL": "(cloudflared herunterladen von {0})", + "cloudflareWebsite": "Cloudflare-Website", "Message:": "Nachricht:", - "Don't know how to get the token? Please read the guide:": "Du weißt nicht, wie man den Token bekommt? Lies die Anleitung:", - "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Die Verbindung könnte unterbrochen werden, wenn du aktuell über einen Cloudflare Tunnel verbunden bist. Möchtest du wirklich stoppen? Gib zur Bestätigung dein aktuelles Passwort ein.", + "Don't know how to get the token? Please read the guide:": "Du weißt nicht, wie du den Token bekommst? Lies die Anleitung:", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Die aktuelle Verbindung kann unterbrochen werden, wenn du über einen Cloudflare-Tunnel verbunden bist. Möchtest du wirklich stoppen? Gib zur Bestätigung dein aktuelles Passwort ein.", "Other Software": "Andere Software", - "For example: nginx, Apache and Traefik.": "Zum Beispiel: Nginx, Apache oder Traefik.", + "For example: nginx, Apache and Traefik.": "Zum Beispiel: nginx, Apache und Traefik.", "Please read": "Bitte lesen", "Subject:": "Betreff:", "Valid To:": "Gültig bis:", - "Days Remaining:": "Tage verbleibend:", + "Days Remaining:": "Verbleibende Tage:", "Issuer:": "Aussteller:", "Fingerprint:": "Fingerabdruck:", "No status pages": "Keine Statusseiten", - "Domain Name Expiry Notification": "Benachrichtigung bei Domain-Ablauf", + "Domain Name Expiry Notification": "Benachrichtigung bei Domainablauf", "Customize": "Anpassen", - "Custom Footer": "Eigener Footer", - "Custom CSS": "Eigenes CSS", - "Footer Text": "Fußzeile", - "Show Powered By": "Zeige 'Bereitgestellt mit'", + "Custom Footer": "Benutzerdefinierte Fußzeile", + "Custom CSS": "Benutzerdefiniertes CSS", + "Footer Text": "Fußzeilentext", + "Show Powered By": "„Betrieben mit“ anzeigen", "Date Created": "Erstellt am", "Domain Names": "Domainnamen", "signedInDisp": "Angemeldet als {0}", "signedInDispDisabled": "Authentifizierung deaktiviert.", - "dnsPortDescription": "DNS-Server Port. Standard ist 53.", + "dnsPortDescription": "DNS-Server-Port. Standard ist 53. Der Port kann jederzeit geändert werden.", "topic": "Thema", - "topicExplanation": "MQTT-Thema für den Monitor", + "topicExplanation": "Zu überwachendes MQTT-Thema", "successMessage": "Erfolgsnachricht", "successMessageExplanation": "MQTT Nachricht, die als Erfolg angesehen wird", "error": "Fehler", "critical": "Kritisch", - "wayToGetPagerDutyKey": "Zu finden unter Service -> Service Directory -> (Dienst wählen) -> Integrations -> Add integration. Suche nach \"Events API V2\". Mehr Informationen {0}", + "wayToGetPagerDutyKey": "Diesen erhältst du unter Service → Service Directory → (Dienst auswählen) → Integrationen → Integration hinzufügen. Suche dort nach „Events API V2“. Mehr Infos: {0}", "Integration Key": "Integrationsschlüssel", "Integration URL": "Integrations-URL", "Auto resolve or acknowledged": "Automatisch lösen oder bestätigen", "do nothing": "nichts tun", "auto acknowledged": "automatisch bestätigen", "auto resolve": "automatisch lösen", - "Bark Group": "Bark Gruppe", - "Bark Sound": "Bark Ton", + "Bark Group": "Bark-Gruppe", + "Bark Sound": "Bark-Ton", "HTTP Headers": "HTTP-Header", "Trust Proxy": "Proxy vertrauen", "Proxy": "Proxy", "HomeAssistant": "Home Assistant", - "onebotHttpAddress": "OneBot HTTP-Adresse", - "onebotMessageType": "OneBot Nachrichtentyp", + "onebotHttpAddress": "OneBot-HTTP-Adresse", + "onebotMessageType": "OneBot-Nachrichtentyp", "onebotGroupMessage": "Gruppe", "onebotPrivateMessage": "Privat", - "onebotUserOrGroupId": "Gruppe/Nutzer-ID", - "onebotSafetyTips": "Zur Sicherheit Access-Token setzen", - "PushDeer Key": "PushDeer Schlüssel", - "RadiusSecret": "Radius Secret", - "RadiusSecretDescription": "Shared Secret zwischen Client und Server", - "RadiusCalledStationId": "ID der angesprochenen Station", - "RadiusCalledStationIdDescription": "Identifikation des angesprochenen Geräts", - "RadiusCallingStationId": "ID der ansprechenden Station", - "RadiusCallingStationIdDescription": "Identifikation des ansprechenden Geräts", - "Certificate Expiry Notification": "Benachrichtigung bei Zertifikatsablauf", + "onebotUserOrGroupId": "Gruppen-/Benutzer-ID", + "onebotSafetyTips": "Aus Sicherheitsgründen muss ein Zugriffstoken gesetzt werden", + "PushDeer Key": "PushDeer-Schlüssel", + "RadiusSecret": "RADIUS-Geheimnis", + "RadiusSecretDescription": "Gemeinsames Geheimnis zwischen Client und Server", + "RadiusCalledStationId": "Angerufene Stations-ID", + "RadiusCalledStationIdDescription": "Kennung des angerufenen Geräts", + "RadiusCallingStationId": "Anrufende Stations-ID", + "RadiusCallingStationIdDescription": "Kennung des anrufenden Geräts", + "Certificate Expiry Notification": "Zertifikatsablauf-Benachrichtigung", "API Username": "API-Benutzername", "API Key": "API-Schlüssel", "Recipient Number": "Empfängernummer", - "From Name/Number": "Von Name/Nummer", - "Leave blank to use a shared sender number.": "Leer lassen, um eine geteilte Absendernummer zu nutzen.", - "Octopush API Version": "Octopush API-Version", + "From Name/Number": "Absendername/-nummer", + "Leave blank to use a shared sender number.": "Leer lassen, um eine gemeinsame Absendernummer zu verwenden.", + "Octopush API Version": "Octopush-API-Version", "Legacy Octopush-DM": "Legacy Octopush-DM", "endpoint": "Endpunkt", - "octopushAPIKey": "\"API Key\" aus den HTTP-API Zugangsdaten im Control Panel", - "octopushLogin": "\"Login\" aus den HTTP-API Zugangsdaten im Control Panel", - "promosmsLogin": "API-Loginname", + "octopushAPIKey": "„API-Schlüssel“ aus den HTTP-API-Anmeldedaten im Control Panel", + "octopushLogin": "„Login“ aus den HTTP-API-Anmeldedaten im Control Panel", + "promosmsLogin": "API-Anmeldename", "promosmsPassword": "API-Passwort", "pushoversounds pushover": "Pushover (Standard)", "pushoversounds bike": "Fahrrad", @@ -513,70 +513,70 @@ "pushoversounds cashregister": "Kasse", "pushoversounds classical": "Klassisch", "pushoversounds cosmic": "Kosmisch", - "pushoversounds falling": "Abfallend", + "pushoversounds falling": "Fallend", "pushoversounds gamelan": "Gamelan", - "pushoversounds incoming": "Eingang", + "pushoversounds incoming": "Eingehend", "pushoversounds intermission": "Pause", "pushoversounds magic": "Magisch", "pushoversounds mechanical": "Mechanisch", "pushoversounds pianobar": "Piano Bar", "pushoversounds siren": "Sirene", - "pushoversounds spacealarm": "Space Alarm", + "pushoversounds spacealarm": "Weltraumalarm", "pushoversounds tugboat": "Schlepperhorn", "pushoversounds alien": "Außerirdisch (lang)", "pushoversounds climb": "Ansteigend (lang)", - "pushoversounds persistent": "Hartnäckig (lang)", + "pushoversounds persistent": "Beharrlich (lang)", "pushoversounds echo": "Pushover Echo (lang)", "pushoversounds updown": "Auf und Ab (lang)", - "pushoversounds vibrate": "Nur vibrieren", - "pushoversounds none": "Stumm", + "pushoversounds vibrate": "Nur Vibration", + "pushoversounds none": "Keine (lautlos)", "pushyAPIKey": "Geheimer API-Schlüssel", - "pushyToken": "Geräte-Token", - "Show update if available": "Verfügbare Updates anzeigen", - "Also check beta release": "Auch auf Beta-Versionen prüfen", - "Using a Reverse Proxy?": "Nutzt du einen Reverse Proxy?", - "Check how to config it for WebSocket": "Konfiguration für WebSocket prüfen", - "Steam Game Server": "Steam-Gameserver", + "pushyToken": "Gerätetoken", + "Show update if available": "Update anzeigen, wenn verfügbar", + "Also check beta release": "Auch Beta-Versionen prüfen", + "Using a Reverse Proxy?": "Verwendest du einen Reverse-Proxy?", + "Check how to config it for WebSocket": "Erfahre, wie du ihn für WebSocket konfigurierst", + "Steam Game Server": "Steam-Spielserver", "Most likely causes:": "Wahrscheinliche Ursachen:", "The resource is no longer available.": "Die Ressource ist nicht mehr verfügbar.", - "There might be a typing error in the address.": "Die Adresse enthält möglicherweise einen Tippfehler.", + "There might be a typing error in the address.": "Möglicherweise gibt es einen Tippfehler in der Adresse.", "What you can try:": "Was du versuchen kannst:", - "Retype the address.": "Gib die Adresse erneut ein.", - "Go back to the previous page.": "Gehe zur vorherigen Seite zurück.", + "Retype the address.": "Die Adresse erneut eingeben.", + "Go back to the previous page.": "Zur vorherigen Seite zurückkehren.", "Coming Soon": "Demnächst verfügbar", - "wayToGetClickSendSMSToken": "Du kannst deinen API-Benutzernamen und Schlüssel unter {here} erhalten.", - "Connection String": "Verbindungs-String", + "wayToGetClickSendSMSToken": "API-Benutzername und API-Schlüssel erhältst du unter {here}.", + "Connection String": "Verbindungszeichenfolge", "Query": "Abfrage", "settingsCertificateExpiry": "TLS-Zertifikatsablauf", - "certificationExpiryDescription": "HTTPS-Monitore senden eine Benachrichtigung, wenn das Zertifikat in X Tagen abläuft:", + "certificationExpiryDescription": "HTTPS-Monitore senden eine Benachrichtigung, wenn das TLS-Zertifikat abläuft in:", "Setup Docker Host": "Docker-Host einrichten", "Connection Type": "Verbindungstyp", - "Docker Daemon": "Docker Daemon", - "deleteDockerHostMsg": "Bist du sicher, dass du diesen Docker-Host für alle Monitore löschen möchtest?", + "Docker Daemon": "Docker-Daemon", + "deleteDockerHostMsg": "Möchtest du diesen Docker-Host wirklich für alle Monitore löschen?", "socket": "Socket", - "tcp": "TCP / HTTP", - "Docker Container": "Docker Container", - "Container Name / ID": "Container-Name / ID", + "tcp": "TCP/HTTP", + "Docker Container": "Docker-Container", + "Container Name / ID": "Container-Name/-ID", "Docker Host": "Docker-Host", "Docker Hosts": "Docker-Hosts", - "ntfy Topic": "ntfy Thema", + "ntfy Topic": "ntfy-Thema", "Domain": "Domain", - "Workstation": "Workstation", - "disableCloudflaredNoAuthMsg": "Du bist im Modus ohne Authentifizierung, ein Passwort wird nicht benötigt.", - "trustProxyDescription": "Vertraue 'X-Forwarded-*' Headern. Aktiviere dies, wenn Uptime Kuma hinter einem Proxy (Nginx, Apache) läuft, um die korrekte Client-IP zu erhalten.", - "wayToGetLineNotifyToken": "Du kannst hier ein Token erhalten: {0}", + "Workstation": "Arbeitsstation", + "disableCloudflaredNoAuthMsg": "Du bist im Modus ohne Authentifizierung, ein Passwort ist nicht erforderlich.", + "trustProxyDescription": "„X-Forwarded-*“-Header vertrauen. Wenn du die korrekte Client-IP erhalten möchtest und Uptime Kuma hinter einem Proxy wie Nginx oder Apache läuft, solltest du dies aktivieren.", + "wayToGetLineNotifyToken": "Du kannst einen Zugriffstoken von {0} erhalten", "Examples": "Beispiele", - "Home Assistant URL": "Home Assistant URL", - "Long-Lived Access Token": "Langlebiger Access-Token", - "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Langlebige Access-Token können erstellt werden, indem du auf deinen Profilnamen klickst (unten links), nach unten scrollst und auf 'Token erstellen' klickst. ", + "Home Assistant URL": "Home-Assistant-URL", + "Long-Lived Access Token": "Langlebiger Zugriffstoken", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Ein langlebiger Zugriffstoken kann erstellt werden, indem du auf deinen Profilnamen (unten links) klickst, nach unten scrollst und auf „Token erstellen“ klickst. ", "Notification Service": "Benachrichtigungsdienst", - "default: notify all devices": "Standard: Alle Geräte benachrichtigen", - "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Eine Liste der Benachrichtigungsdienste findest du im Home Assistant unter \"Entwicklerwerkzeuge > Dienste\". Suche nach \"notification\", um deinen Geräte-/Telefonnamen zu finden.", - "Automations can optionally be triggered in Home Assistant:": "Automatisierungen können optional im Home Assistant ausgelöst werden:", - "Trigger type:": "Auslöser-Typ:", + "default: notify all devices": "Standard: alle Geräte benachrichtigen", + "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Eine Liste der Benachrichtigungsdienste findest du in Home Assistant unter „Entwicklerwerkzeuge > Dienste“. Suche nach „notification“, um deinen Geräte-/Telefonnamen zu finden.", + "Automations can optionally be triggered in Home Assistant:": "Automatisierungen können optional in Home Assistant ausgelöst werden:", + "Trigger type:": "Auslösertyp:", "Event type:": "Ereignistyp:", "Event data:": "Ereignisdaten:", - "Then choose an action, for example switch the scene to where an RGB light is red.": "Wähle dann eine Aktion, z.B. das Aktivieren einer Szene, in der ein RGB-Licht rot leuchtet.", + "Then choose an action, for example switch the scene to where an RGB light is red.": "Wähle dann eine Aktion, z. B. eine Szene, in der ein RGB-Licht rot ist.", "Frontend Version": "Frontend-Version", "Frontend Version do not match backend version!": "Die Frontend-Version stimmt nicht mit der Backend-Version überein!", "Maintenance": "Wartung", @@ -587,32 +587,32 @@ "Start of maintenance": "Beginn der Wartung", "All Status Pages": "Alle Statusseiten", "Select status pages...": "Statusseiten auswählen…", - "recurringIntervalMessage": "Einmal pro Tag | Alle {0} Tage", - "affectedMonitorsDescription": "Wähle die Monitore aus, die von dieser Wartung betroffen sind.", - "affectedStatusPages": "Wartungsmeldung auf ausgewählten Statusseiten anzeigen", - "atLeastOneMonitor": "Wähle mindestens einen Monitor aus", - "deleteMaintenanceMsg": "Möchtest du diese Wartung löschen?", + "recurringIntervalMessage": "Einmal pro Tag ausführen | Alle {0} Tage ausführen", + "affectedMonitorsDescription": "Wähle Monitore aus, die von der aktuellen Wartung betroffen sind", + "affectedStatusPages": "Diese Wartungsmeldung auf ausgewählten Statusseiten anzeigen", + "atLeastOneMonitor": "Wähle mindestens einen betroffenen Monitor aus", + "deleteMaintenanceMsg": "Möchtest du diese Wartung wirklich löschen?", "Base URL": "Basis-URL", - "goAlertInfo": "GoAlert ist eine Open-Source-Anwendung für Rufbereitschaftsplanung und automatische Eskalation. {0}", - "goAlertIntegrationKeyInfo": "Verwende einen generischen API-Schlüssel im Format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\". Normalerweise entspricht dies dem Token-Wert aus der URL.", + "goAlertInfo": "GoAlert ist eine Open-Source-Anwendung für Bereitschaftsplanung, automatische Eskalationen und Benachrichtigungen (wie SMS oder Sprachanrufe). Erreiche automatisch die richtige Person, auf die richtige Weise, zur richtigen Zeit! {0}", + "goAlertIntegrationKeyInfo": "Hole dir einen generischen API-Integrationsschlüssel für den Dienst im Format „aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee“, normalerweise der Wert des Token-Parameters der kopierten URL.", "goAlert": "GoAlert", - "backupOutdatedWarning": "Veraltet: Da viele neue Funktionen hinzugefügt wurden, kann diese Sicherungsfunktion keine vollständige Wiederherstellung mehr garantieren.", - "backupRecommend": "Bitte sichere stattdessen direkt das Volume oder den Datenordner (./data/).", + "backupOutdatedWarning": "Veraltet: Da viele Funktionen hinzugefügt wurden und diese Backup-Funktion nicht mehr gepflegt wird, kann sie kein vollständiges Backup erstellen oder wiederherstellen.", + "backupRecommend": "Bitte sichere stattdessen das Volume oder den Datenordner (./data/) direkt.", "Optional": "Optional", "squadcast": "Squadcast", "SendKey": "SendKey", - "SMSManager API Docs": "SMSManager API-Doku ", + "SMSManager API Docs": "SMSManager API-Dokumentation ", "Gateway Type": "Gateway-Typ", "SMSManager": "SMSManager", - "You can divide numbers with": "Nummern trennen mit", + "You can divide numbers with": "Du kannst Nummern trennen mit", "or": "oder", "recurringInterval": "Intervall", "Recurring": "Wiederkehrend", "Single Maintenance Window": "Einmaliges Wartungsfenster", - "Maintenance Time Window of a Day": "Zeitfenster für die Wartung", - "Effective Date Range": "Gültigkeitszeitraum (Optional)", - "strategyManual": "Aktiv/Inaktiv (Manuell)", - "warningTimezone": "Es wird die Zeitzone des Servers verwendet.", + "Maintenance Time Window of a Day": "Tägliches Wartungszeitfenster", + "Effective Date Range": "Gültigkeitszeitraum (optional)", + "strategyManual": "Manuell aktiv/inaktiv", + "warningTimezone": "Es wird die Zeitzone des Servers verwendet", "weekdayShortMon": "Mo", "weekdayShortTue": "Di", "weekdayShortWed": "Mi", @@ -623,23 +623,23 @@ "dayOfWeek": "Wochentag", "dayOfMonth": "Tag im Monat", "lastDay": "Letzter Tag", - "lastDay1": "Letzter Tag im Monat", - "lastDay2": "Vorletzter Tag im Monat", - "lastDay3": "Drittletzter Tag im Monat", - "lastDay4": "Viertletzter Tag im Monat", + "lastDay1": "Letzter Tag des Monats", + "lastDay2": "Vorletzter Tag des Monats", + "lastDay3": "Drittletzter Tag des Monats", + "lastDay4": "Viertletzter Tag des Monats", "No Maintenance": "Keine Wartung", "Schedule Maintenance": "Wartung planen", "Edit Maintenance": "Wartung bearbeiten", "pauseMaintenanceMsg": "Möchtest du wirklich pausieren?", - "maintenanceStatus-under-maintenance": "Wird gewartet", + "maintenanceStatus-under-maintenance": "In Wartung", "maintenanceStatus-inactive": "Inaktiv", "maintenanceStatus-scheduled": "Geplant", "maintenanceStatus-ended": "Beendet", "maintenanceStatus-unknown": "Unbekannt", - "Display Timezone": "Zeitzone anzeigen", + "Display Timezone": "Angezeigte Zeitzone", "Server Timezone": "Server-Zeitzone", "Date and Time": "Datum und Uhrzeit", - "DateTime Range": "Zeitraum", + "DateTime Range": "Datum-/Zeitbereich", "Strategy": "Strategie", "statusPageMaintenanceEndDate": "Ende", "Help": "Hilfe", @@ -648,39 +648,39 @@ "Enable DNS Cache": "(Veraltet) DNS-Cache für HTTP(s)-Monitore aktivieren", "Enable": "Aktivieren", "Disable": "Deaktivieren", - "Custom Monitor Type": "Benutzerdefinierter Monitor-Typ", - "webhookAdditionalHeadersDesc": "Zusätzliche Header, die mit dem Webhook gesendet werden (JSON Key/Value).", - "dnsCacheDescription": "Kann in manchen IPv6-Umgebungen Probleme verursachen. Bei Problemen deaktivieren.", - "loadingError": "Daten konnten nicht abgerufen werden. Bitte versuche es später erneut.", + "Custom Monitor Type": "Benutzerdefinierter Monitortyp", + "webhookAdditionalHeadersDesc": "Legt zusätzliche Header fest, die mit dem Webhook gesendet werden. Jeder Header sollte als JSON-Schlüssel/Wert-Paar definiert werden.", + "dnsCacheDescription": "Funktioniert möglicherweise nicht in einigen IPv6-Umgebungen. Deaktiviere es bei Problemen.", + "loadingError": "Daten konnten nicht abgerufen werden. Bitte später erneut versuchen.", "confirmUninstallPlugin": "Möchtest du dieses Plugin wirklich deinstallieren?", - "grpcMethodDescription": "Methodenname wird in das \"camelCase\"-Format konvertiert (z.B. sayHello, check).", + "grpcMethodDescription": "Der Methodenname wird in camelCase-Format umgewandelt, z. B. sayHello, check usw.", "Passive Monitor Type": "Passiver Monitor-Typ", "Specific Monitor Type": "Spezifischer Monitor-Typ", "webhookAdditionalHeadersTitle": "Zusätzliche Header", "Packet Size": "Paketgröße", "IconUrl": "Symbol-URL", "wayToGetZohoCliqURL": "Erfahre hier, wie du eine Webhook-URL erstellst: {0}.", - "dataRetentionTimeError": "Aufbewahrungszeit muss 0 oder größer sein.", - "infiniteRetention": "Für unendliche Aufbewahrung auf 0 setzen.", - "confirmDeleteTagMsg": "Möchtest du dieses Tag wirklich löschen? Verknüpfte Monitore bleiben erhalten.", - "enableGRPCTls": "Senden von gRPC-Anforderungen mit TLS zulassen", + "dataRetentionTimeError": "Aufbewahrungszeit muss 0 oder größer sein", + "infiniteRetention": "Auf 0 setzen für unbegrenzte Aufbewahrung.", + "confirmDeleteTagMsg": "Möchtest du dieses Tag wirklich löschen? Mit diesem Tag verknüpfte Monitore werden nicht gelöscht.", + "enableGRPCTls": "Erlaubt das Senden von gRPC-Anfragen mit TLS-Verbindung", "ZohoCliq": "ZohoCliq", - "Monitor": "Überwachung | Monitore", + "Monitor": "Monitor | Monitore", "plugin": "Plugin | Plugins", "install": "Installieren", - "installing": "Installiere", + "installing": "Wird installiert", "uninstall": "Deinstallieren", - "uninstalling": "Deinstalliere", - "markdownSupported": "Markdown-Syntax unterstützt", - "wayToGetKookBotToken": "Erstelle eine Anwendung und erhalte den Bot-Token unter {0}", - "wayToGetKookGuildID": "Aktiviere den 'Entwicklermodus' in den Kook-Einstellungen und rechtsklicke auf die Gilde, um die ID zu erhalten", + "uninstalling": "Wird deinstalliert", + "markdownSupported": "Markdown-Syntax wird unterstützt", + "wayToGetKookBotToken": "Erstelle eine Anwendung und erhalte deinen Bot-Token unter {0}", + "wayToGetKookGuildID": "Aktiviere den „Entwicklermodus“ in den Kook-Einstellungen und klicke mit der rechten Maustaste auf die Gilde, um deren ID zu erhalten", "Guild ID": "Gilden-ID", - "Free Mobile User Identifier": "Free Mobile Nutzerkennung", + "Free Mobile User Identifier": "Free Mobile Benutzerkennung", "Free Mobile API Key": "Free Mobile API-Schlüssel", "Enable TLS": "TLS aktivieren", - "Proto Service Name": "Proto Service Name", - "Proto Method": "Proto Method", - "Proto Content": "Proto Content", + "Proto Service Name": "Proto-Dienstname", + "Proto Method": "Proto-Methode", + "Proto Content": "Proto-Inhalt", "Economy": "Economy", "Lowcost": "Günstig", "high": "hoch", @@ -688,177 +688,177 @@ "General Monitor Type": "Allgemeiner Monitor-Typ", "smseagle": "SMSEagle", "smseagleTo": "Telefonnummer(n)", - "smseagleGroup": "Telefonbuch Gruppenname(n)", - "smseagleContact": "Telefonbuch Kontaktname(n)", + "smseagleGroup": "Telefonbuch-Gruppenname(n)", + "smseagleContact": "Telefonbuch-Kontaktname(n)", "smseagleRecipientType": "Empfängertyp", - "smseagleRecipient": "Empfänger (mehrere mit Komma trennen)", + "smseagleRecipient": "Empfänger (mehrere durch Komma trennen)", "smseagleToken": "API-Zugriffstoken", - "smseagleUrl": "Deine SMSEagle Geräte-URL", + "smseagleUrl": "Deine SMSEagle-Geräte-URL", "Kook": "Kook", - "smseagleEncoding": "Als Unicode senden (Standard=GSM-7)", - "smseaglePriority": "Nachrichtenpriorität (0-9, höchste = 9)", - "Google Analytics ID": "Google Analytics ID", + "smseagleEncoding": "Als Unicode senden (Standard: GSM-7)", + "smseaglePriority": "Nachrichtenpriorität (0–9, höchste Priorität = 9)", + "Google Analytics ID": "Google-Analytics-ID", "Edit Tag": "Tag bearbeiten", - "Server Address": "Server-Adresse", + "Server Address": "Serveradresse", "Learn More": "Mehr erfahren", - "Body Encoding": "Body Encoding", + "Body Encoding": "Body-Kodierung", "Add API Key": "API-Schlüssel hinzufügen", "apiKey-active": "Aktiv", "apiKey-expired": "Abgelaufen", "apiKey-inactive": "Inaktiv", "Expires": "Läuft ab", - "deleteAPIKeyMsg": "Bist du sicher, dass du diesen API-Schlüssel löschen willst?", + "deleteAPIKeyMsg": "Möchtest du diesen API-Schlüssel wirklich löschen?", "Generate": "Generieren", "API Keys": "API-Schlüssel", "Expiry": "Ablauf", "Expiry date": "Ablaufdatum", - "Don't expire": "Nie ablaufen", - "Continue": "Weiter", + "Don't expire": "Nicht ablaufen", + "Continue": "Fortfahren", "Add Another": "Weiteren hinzufügen", "Clone Monitor": "Monitor duplizieren", "Clone": "Duplizieren", "cloneOf": "Kopie von {0}", "pagertreeIntegrationUrl": "Integrations-URL", "pagertreeUrgency": "Dringlichkeit", - "pagertreeSilent": "Leise", + "pagertreeSilent": "Lautlos", "pagertreeLow": "Niedrig", "pagertreeMedium": "Mittel", "pagertreeHigh": "Hoch", "pagertreeCritical": "Kritisch", "pagertreeResolve": "Automatisch lösen", "No API Keys": "Keine API-Schlüssel", - "disableAPIKeyMsg": "Bist du sicher, dass du diesen API-Schlüssel deaktivieren willst?", + "disableAPIKeyMsg": "Möchtest du diesen API-Schlüssel wirklich deaktivieren?", "pagertreeDoNothing": "Nichts tun", - "wayToGetPagerTreeIntegrationURL": "Kopiere den Endpunkt nach der Erstellung der Integration in PagerTree. Details siehe {0}", - "telegramProtectContent": "Inhalt schützen (Weiterleiten/Speichern verhindern)", - "telegramProtectContentDescription": "Die Bot-Nachrichten in Telegram sind gegen Weiterleitung und Speichern geschützt.", + "wayToGetPagerTreeIntegrationURL": "Nachdem du die Uptime-Kuma-Integration in PagerTree erstellt hast, kopiere den Endpunkt. Vollständige Details unter {0}", + "telegramProtectContent": "Weiterleiten/Speichern schützen", + "telegramProtectContentDescription": "Wenn aktiviert, werden Bot-Nachrichten in Telegram vor Weiterleitung und Speicherung geschützt.", "notificationRegional": "Regional", "Key Added": "Schlüssel hinzugefügt", - "apiKeyAddedMsg": "API-Schlüssel wurde hinzugefügt. Bitte notiere den Schlüssel, er wird nicht erneut angezeigt.", - "telegramMessageThreadID": "(Optional) Nachrichten Thread-ID", - "telegramMessageThreadIDDescription": "Optionale eindeutige Kennung für den Ziel-Thread (Thema) des Forums; nur für Forum-Supergruppen.", + "apiKeyAddedMsg": "Dein API-Schlüssel wurde hinzugefügt. Bitte notiere ihn, da er nicht erneut angezeigt wird.", + "telegramMessageThreadID": "(Optional) Nachrichten-Thread-ID", + "telegramMessageThreadIDDescription": "Optionale eindeutige Kennung für den Ziel-Nachrichten-Thread (Thema) des Forums; nur für Forum-Supergruppen", "telegramSendSilently": "Lautlos senden", - "telegramSendSilentlyDescription": "Sende die Nachricht ohne Ton. Nutzer erhalten eine Benachrichtigung, aber kein akustisches Signal.", + "telegramSendSilentlyDescription": "Sendet die Nachricht lautlos. Nutzer erhalten eine Benachrichtigung ohne Ton.", "Add New Tag": "Neuen Tag hinzufügen", "lunaseaDeviceID": "Geräte-ID", "lunaseaTarget": "Ziel", "lunaseaUserID": "Benutzer-ID", "ntfyAuthenticationMethod": "Authentifizierungsmethode", "ntfyUsernameAndPassword": "Benutzername und Passwort", - "twilioAccountSID": "Account SID", - "twilioFromNumber": "Absender", - "twilioToNumber": "Empfänger", - "twilioAuthToken": "Auth Token / API Key Secret", + "twilioAccountSID": "Konto-SID", + "twilioFromNumber": "Absendernummer", + "twilioToNumber": "Empfängernummer", + "twilioAuthToken": "Auth-Token / API-Schlüssel-Secret", "statusPageRefreshIn": "Aktualisierung in: {0}", - "sameAsServerTimezone": "Wie Server-Zeitzone", - "startDateTime": "Start Datum/Uhrzeit", - "endDateTime": "Ende Datum/Uhrzeit", + "sameAsServerTimezone": "Gleiche Zeitzone wie Server", + "startDateTime": "Startdatum/-zeit", + "endDateTime": "Enddatum/-zeit", "cronExpression": "Cron-Ausdruck", "cronSchedule": "Zeitplan: ", "invalidCronExpression": "Ungültiger Cron-Ausdruck: {0}", - "Show Clickable Link": "Anklickbaren Link anzeigen", + "Show Clickable Link": "Klickbaren Link anzeigen", "Open Badge Generator": "Badge-Generator öffnen", - "Badge Generator": "{0}'s Badge Generator", + "Badge Generator": "Badge-Generator für {0}", "Badge Type": "Badge-Typ", "Badge Duration": "Badge Dauer", - "Badge Label": "Badge-Label", - "Show Clickable Link Description": "Wenn aktiviert, kann jeder Besucher der Statusseite die Monitor-URL aufrufen.", - "Badge Label Color": "Badge Label-Farbe", + "Badge Label": "Badge-Beschriftung", + "Show Clickable Link Description": "Wenn aktiviert, kann jeder mit Zugriff auf diese Statusseite die Monitor-URL sehen.", + "Badge Label Color": "Badge-Beschriftungsfarbe", "Badge Color": "Badge-Farbe", - "Badge Label Prefix": "Badge Label-Präfix", - "Badge Label Suffix": "Badge Label-Suffix", - "Badge Maintenance Color": "Badge Wartungs-Farbe", - "Badge Warn Color": "Badge Warnungs-Farbe", + "Badge Label Prefix": "Badge-Beschriftungspräfix", + "Badge Label Suffix": "Badge-Beschriftungssuffix", + "Badge Maintenance Color": "Badge-Wartungsfarbe", + "Badge Warn Color": "Badge-Warnfarbe", "Badge Style": "Badge-Stil", - "Badge value (For Testing only.)": "Badge-Wert (Nur für Tests)", + "Badge value (For Testing only.)": "Badge-Wert (nur für Tests)", "Badge URL": "Badge-URL", - "Badge Up Color": "Badge 'Online' Farbe", - "Badge Down Color": "Badge 'Offline' Farbe", - "Badge Pending Color": "Badge 'Ausstehend' Farbe", - "Badge Down Days": "Badge 'Offline' Tage", - "Monitor Setting": "{0}'s Monitor-Einstellungen", - "Badge Prefix": "Badge Wert-Präfix", - "Badge Suffix": "Badge Wert-Suffix", - "Badge Warn Days": "Badge Warnungs-Tage", + "Badge Up Color": "Badge-Aktiv-Farbe", + "Badge Down Color": "Badge-Inaktiv-Farbe", + "Badge Pending Color": "Badge-Ausstehend-Farbe", + "Badge Down Days": "Badge-Inaktiv-Tage", + "Monitor Setting": "Monitor-Einstellung für {0}", + "Badge Prefix": "Badge-Wert-Präfix", + "Badge Suffix": "Badge-Wert-Suffix", + "Badge Warn Days": "Badge-Warntage", "Group": "Gruppe", - "Monitor Group": "Monitor-Gruppe", - "noGroupMonitorMsg": "Nicht verfügbar. Erstelle zunächst einen Gruppenmonitor.", + "Monitor Group": "Monitorgruppe", + "noGroupMonitorMsg": "Nicht verfügbar. Erstelle zuerst einen Gruppenmonitor.", "Close": "Schließen", - "chromeExecutableAutoDetect": "Automatische Erkennung", - "chromeExecutableDescription": "Für Docker-Benutzer: Falls Chromium noch nicht installiert ist, kann die Installation einige Minuten dauern (ca. 1 GB Speicherplatz).", - "chromeExecutable": "Chrome/Chromium Pfad", + "chromeExecutableAutoDetect": "Automatisch erkennen", + "chromeExecutableDescription": "Für Docker-Benutzer: Wenn Chromium noch nicht installiert ist, kann die Installation und Anzeige des Testergebnisses einige Minuten dauern. Es werden 1 GB Speicherplatz benötigt.", + "chromeExecutable": "Chrome-/Chromium-Programm", "Invert Keyword": "Suchbegriff invertieren", - "invertKeywordDescription": "Alarmieren, wenn der Suchbegriff NICHT vorhanden ist.", + "invertKeywordDescription": "Prüft auf Abwesenheit statt Anwesenheit des Schlüsselworts.", "webhookCustomBodyDesc": "Definiere einen benutzerdefinierten HTTP-Body für die Anfrage. Die Template-Variablen {msg}, {heartbeat} und {monitor} werden akzeptiert.", - "webhookBodyPresetOption": "Voreinstellung - {0}", + "webhookBodyPresetOption": "Vorlage – {0}", "webhookBodyCustomOption": "Benutzerdefinierter Body", "Request Body": "Anfrage-Body", "Badge Duration (in hours)": "Badge-Dauer (in Stunden)", "Badge Preview": "Badge-Vorschau", "twilioApiKey": "API-Schlüssel (optional)", - "Notify Channel": "Benachrichtigungskanal", + "Notify Channel": "Kanal benachrichtigen", "Enter the list of brokers": "Liste der Broker eingeben", - "Kafka Topic Name": "Kafka Topic Name", - "Kafka Producer Message": "Kafka Producer Nachricht", - "Enable Kafka SSL": "Kafka SSL aktivieren", - "Enable Kafka Producer Auto Topic Creation": "Kafka Producer Auto Topic Creation aktivieren", - "Kafka SASL Options": "Kafka SASL Optionen", + "Kafka Topic Name": "Kafka-Themenname", + "Kafka Producer Message": "Kafka-Producer-Nachricht", + "Enable Kafka SSL": "Kafka-SSL aktivieren", + "Enable Kafka Producer Auto Topic Creation": "Automatische Themenerstellung für Kafka-Producer aktivieren", + "Kafka SASL Options": "Kafka-SASL-Optionen", "Mechanism": "Mechanismus", - "Pick a SASL Mechanism...": "Wähle einen SASL Mechanismus…", + "Pick a SASL Mechanism...": "SASL-Mechanismus auswählen…", "Authorization Identity": "Autorisierungsidentität", - "AccessKey Id": "AccessKey ID", - "Secret AccessKey": "Geheimer Zugriffsschlüssel", - "Session Token": "Sitzungs-Token", - "aboutNotifyChannel": "Löst eine Benachrichtigung für alle Kanalmitglieder aus, unabhängig vom Anwesenheitsstatus.", - "Kafka Brokers": "Kafka Brokers", - "Press Enter to add broker": "Drücke Enter, um den Broker hinzuzufügen", + "AccessKey Id": "AccessKey-ID", + "Secret AccessKey": "Geheimer AccessKey", + "Session Token": "Sitzungstoken", + "aboutNotifyChannel": "Die Kanalbenachrichtigung löst eine Desktop- oder Mobilbenachrichtigung für alle Kanalmitglieder aus, unabhängig von deren Verfügbarkeitsstatus.", + "Kafka Brokers": "Kafka-Broker", + "Press Enter to add broker": "Enter drücken, um Broker hinzuzufügen", "filterActive": "Aktiv", "filterActivePaused": "Pausiert", "Expected Value": "Erwarteter Wert", "Json Query": "Json-Abfrage", - "tailscalePingWarning": "Um den Tailscale-Ping-Monitor zu nutzen, muss Uptime Kuma ohne Docker installiert sein und der Tailscale-Client auf dem Server laufen.", - "Server URL should not contain the nfty topic": "Die Server-URL darf das nfty-Thema nicht enthalten", + "tailscalePingWarning": "Um den Tailscale-Ping-Monitor zu verwenden, musst du Uptime Kuma ohne Docker installieren und den Tailscale-Client auf deinem Server installieren.", + "Server URL should not contain the nfty topic": "Server-URL sollte das ntfy-Thema nicht enthalten", "pushDeerServerDescription": "Leer lassen, um den offiziellen Server zu verwenden", "FlashDuty Severity": "Schweregrad", - "nostrRelays": "Nostr Relays", - "gamedigGuessPort": "Gamedig: Port raten", + "nostrRelays": "Nostr-Relays", + "gamedigGuessPort": "Gamedig: Port erraten", "Request Timeout": "Zeitüberschreitung der Anfrage", "styleElapsedTimeShowNoLine": "Anzeigen (ohne Linie)", "Select": "Auswählen", "selectedMonitorCount": "Ausgewählt: {0}", - "PushDeer Server": "PushDeer Server", + "PushDeer Server": "PushDeer-Server", "nostrRelaysHelp": "Eine Relay-URL pro Zeile", - "nostrSender": "Privater Schlüssel des Absenders (nsec)", - "gamedigGuessPortDescription": "Der vom Valve Server Query Protocol verwendete Port kann vom Client-Port abweichen. Versuche dies, wenn keine Verbindung möglich ist.", - "wayToGetFlashDutyKey": "Flashduty Integration: Gehe zu Channels > Channel wählen > Integrationen > Integration hinzufügen > Uptime Kuma wählen und Push-URL kopieren.", - "timeoutAfter": "Timeout nach {0} Sekunden", + "nostrSender": "Absender-Privatschlüssel (nsec)", + "gamedigGuessPortDescription": "Der Port des Valve Server Query Protocols kann vom Client-Port abweichen. Versuche dies, wenn der Monitor keine Verbindung zum Server herstellen kann.", + "wayToGetFlashDutyKey": "Um Uptime Kuma mit Flashduty zu integrieren: Gehe zu Kanäle → Kanal auswählen → Integrationen → Neue Integration hinzufügen, wähle Uptime Kuma und kopiere die Push-URL.", + "timeoutAfter": "Zeitüberschreitung nach {0} Sekunden", "styleElapsedTimeShowWithLine": "Anzeigen (mit Linie)", - "styleElapsedTime": "Verstrichene Zeit unter der Zeitleiste", - "Check/Uncheck": "Auswählen/Abwählen", - "nostrRecipients": "Öffentliche Schlüssel der Empfänger (npub)", + "styleElapsedTime": "Verstrichene Zeit unter der Prüfintervallleiste", + "Check/Uncheck": "An-/Abwählen", + "nostrRecipients": "Empfänger-öffentliche Schlüssel (npub)", "nostrRecipientsHelp": "npub-Format, einer pro Zeile", "showCertificateExpiry": "Zertifikatsablauf anzeigen", "noOrBadCertificate": "Kein/ungültiges Zertifikat", - "enableNSCD": "Aktiviere NSCD (Name Service Cache Daemon) zum Cachen von DNS-Anfragen", + "enableNSCD": "NSCD (Name Service Cache Daemon) für das Caching aller DNS-Anfragen aktivieren", "setupDatabaseChooseDatabase": "Welche Datenbank möchtest du verwenden?", - "setupDatabaseEmbeddedMariaDB": "Du musst nichts einstellen. Dieses Docker-Image enthält eine vorkonfigurierte MariaDB. Uptime Kuma verbindet sich automatisch über einen Unix-Socket.", - "dbName": "Datenbank-Name", - "setupDatabaseMariaDB": "Mit externer MariaDB verbinden. Du musst die Verbindungsdaten angeben.", - "setupDatabaseSQLite": "Einfache Datenbankdatei (SQLite). Empfohlen für kleine Installationen (Standard vor v2.0.0).", + "setupDatabaseEmbeddedMariaDB": "Du brauchst nichts einzustellen. Dieses Docker-Image hat automatisch eine MariaDB für dich eingerichtet und konfiguriert. Uptime Kuma wird sich mit dieser Datenbank über einen Unix-Socket verbinden.", + "dbName": "Datenbankname", + "setupDatabaseMariaDB": "Mit einer externen MariaDB-Datenbank verbinden. Du musst die Verbindungsinformationen für die Datenbank festlegen.", + "setupDatabaseSQLite": "Eine einfache Datenbankdatei, empfohlen für kleinere Installationen. Vor Version 2.0.0 verwendete Uptime Kuma SQLite als Standarddatenbank.", "Saved.": "Gespeichert.", - "toastSuccessTimeout": "Timeout für Erfolgsmeldungen", - "toastErrorTimeout": "Timeout für Fehlermeldungen", - "monitorToastMessagesLabel": "Toast-Benachrichtigungen für Monitore", - "monitorToastMessagesDescription": "Zeit in Sekunden, bis Monitor-Benachrichtigungen verschwinden (-1 zum Deaktivieren des Timeouts, 0 zum Deaktivieren der Benachrichtigung).", - "Bark API Version": "Bark API-Version", - "pushViewCode": "Wie nutze ich den Push-Monitor? (Code anzeigen)", + "toastSuccessTimeout": "Zeitüberschreitung für Erfolgsbenachrichtigungen", + "toastErrorTimeout": "Zeitüberschreitung für Fehlerbenachrichtigungen", + "monitorToastMessagesLabel": "Monitor-Toast-Benachrichtigungen", + "monitorToastMessagesDescription": "Toast-Benachrichtigungen für Monitore verschwinden nach der angegebenen Zeit in Sekunden. Auf -1 setzen, um die Zeitüberschreitung zu deaktivieren. Auf 0 setzen, um Toast-Benachrichtigungen zu deaktivieren.", + "Bark API Version": "Bark-API-Version", + "pushViewCode": "Wie verwendet man den Push-Monitor? (Code anzeigen)", "pushOthers": "Sonstige", "programmingLanguages": "Programmiersprachen", "authInvalidToken": "Ungültiger Token.", - "authIncorrectCreds": "Falscher Benutzername oder falsches Passwort.", + "authIncorrectCreds": "Falscher Benutzername oder Passwort.", "2faAlreadyEnabled": "2FA ist bereits aktiviert.", - "2faEnabled": "2FA ist aktiviert.", - "2faDisabled": "2FA ist deaktiviert.", + "2faEnabled": "2FA aktiviert.", + "2faDisabled": "2FA deaktiviert.", "successResumed": "Erfolgreich fortgesetzt.", "successPaused": "Erfolgreich pausiert.", "successDeleted": "Erfolgreich gelöscht.", @@ -869,178 +869,178 @@ "tagNotFound": "Tag nicht gefunden.", "authUserInactiveOrDeleted": "Der Benutzer ist inaktiv oder gelöscht.", "successAdded": "Erfolgreich hinzugefügt.", - "successAuthChangePassword": "Das Passwort wurde erfolgreich aktualisiert.", + "successAuthChangePassword": "Passwort erfolgreich aktualisiert.", "foundChromiumVersion": "Chromium/Chrome gefunden. Version: {0}", "Reset Token": "Token zurücksetzen", - "leave blank for default subject": "leer lassen für Standard-Betreff", - "emailCustomBody": "Benutzerdefinierter Body", - "leave blank for default body": "leer lassen für Standard-Body", + "leave blank for default subject": "leer lassen für Standardbetreff", + "emailCustomBody": "Benutzerdefinierter Text", + "leave blank for default body": "leer lassen für Standardtext", "emailTemplateServiceName": "Dienst Name", "emailTemplateStatus": "Status", - "emailTemplateMsg": "Benachrichtigungstext", - "liquidIntroduction": "Vorlagen verwenden die 'Liquid Templating Language'. Anleitung: {0}. Verfügbare Variablen:", + "emailTemplateMsg": "Nachricht der Benachrichtigung", + "liquidIntroduction": "Die Vorlagenfunktion wird durch die Liquid-Templatesprache ermöglicht. Anleitungen zur Verwendung findest du unter {0}. Dies sind die verfügbaren Variablen:", "emailCustomisableContent": "Anpassbarer Inhalt", - "smtpLiquidIntroduction": "Diese Felder unterstützen Liquid-Templates. Anleitung: {0}. Verfügbare Variablen:", + "smtpLiquidIntroduction": "Die folgenden zwei Felder können mit der Liquid-Templatesprache angepasst werden. Anleitungen zur Verwendung findest du unter {0}. Dies sind die verfügbaren Variablen:", "emailTemplateHostnameOrURL": "Hostname oder URL", - "emailTemplateLimitedToUpDownNotification": "nur bei UP/DOWN-Ereignissen verfügbar, sonst null", - "templateMsg": "Benachrichtigungstext", - "templateHeartbeatJSON": "Heartbeat-Objekt", - "templateMonitorJSON": "Monitor-Objekt", - "templateLimitedToUpDownCertNotifications": "nur bei UP/DOWN/Zertifikat-Ablauf verfügbar", - "templateLimitedToUpDownNotifications": "nur bei UP/DOWN verfügbar", - "emailTemplateMonitorJSON": "Monitor-Objekt", - "emailTemplateHeartbeatJSON": "Heartbeat-Objekt", - "GrafanaOncallUrl": "Grafana OnCall URL", - "noDockerHostMsg": "Nicht verfügbar. Richte zuerst einen Docker-Host ein.", - "DockerHostRequired": "Bitte Docker-Host für diesen Monitor festlegen.", + "emailTemplateLimitedToUpDownNotification": "nur für AKTIV/INAKTIV-Heartbeats verfügbar, sonst null", + "templateMsg": "Nachricht der Benachrichtigung", + "templateHeartbeatJSON": "Objekt, das den Heartbeat beschreibt", + "templateMonitorJSON": "Objekt, das den Monitor beschreibt", + "templateLimitedToUpDownCertNotifications": "nur für AKTIV/INAKTIV/Zertifikatsablauf-Benachrichtigungen verfügbar", + "templateLimitedToUpDownNotifications": "nur für AKTIV/INAKTIV-Benachrichtigungen verfügbar", + "emailTemplateMonitorJSON": "Objekt, das den Monitor beschreibt", + "emailTemplateHeartbeatJSON": "Objekt, das den Heartbeat beschreibt", + "GrafanaOncallUrl": "Grafana-Oncall-URL", + "noDockerHostMsg": "Nicht verfügbar. Richte zunächst einen Docker-Host ein.", + "DockerHostRequired": "Bitte lege einen Docker-Host für diesen Monitor fest.", "Browser Screenshot": "Browser-Screenshot", - "setup a new monitor group": "Neue Monitorgruppe einrichten", - "Add a new expiry notification day": "Neuen Tag für Ablaufbenachrichtigung hinzufügen", + "setup a new monitor group": "neue Monitorgruppe einrichten", + "Add a new expiry notification day": "Neuen Ablauf-Benachrichtigungstag hinzufügen", "Remote Browsers": "Remote-Browser", "Remote Browser": "Remote-Browser", "Add a Remote Browser": "Remote-Browser hinzufügen", "Remote Browser not found!": "Remote-Browser nicht gefunden!", - "remoteBrowsersDescription": "Remote-Browser sind eine Alternative zum lokalen Chromium. Nutze Dienste wie browserless.io oder hoste selbst.", - "self-hosted container": "Selbstgehosteter Container", - "remoteBrowserToggle": "Standardmäßig läuft Chromium im Uptime-Kuma-Container. Aktiviere dies, um einen Remote-Browser zu nutzen.", + "remoteBrowsersDescription": "Remote-Browser sind eine Alternative zum lokalen Ausführen von Chromium. Richte sie mit einem Dienst wie browserless.io ein oder verbinde dich mit deinem eigenen", + "self-hosted container": "selbst gehosteten Container", + "remoteBrowserToggle": "Standardmäßig läuft Chromium im Uptime-Kuma-Container. Du kannst einen Remote-Browser verwenden, indem du diesen Schalter umlegst.", "useRemoteBrowser": "Remote-Browser verwenden", "deleteRemoteBrowserMessage": "Möchtest du diesen Remote-Browser wirklich für alle Monitore löschen?", - "Remove the expiry notification": "Ablaufbenachrichtigung entfernen", - "openModalTo": "Modal öffnen: {0}", + "Remove the expiry notification": "Ablauf-Benachrichtigungstag entfernen", + "openModalTo": "Modal öffnen für {0}", "Add a domain": "Domain hinzufügen", - "Remove domain": "Domain '{0}' entfernen", - "successKeyword": "Erfolgs-Suchbegriff", - "successKeywordExplanation": "MQTT-Suchbegriff, der als Erfolg gewertet wird", - "settingUpDatabaseMSG": "Datenbank wird eingerichtet. Dies kann einen Moment dauern...", + "Remove domain": "Domain „{0}“ entfernen", + "successKeyword": "Erfolgsbegriff", + "successKeywordExplanation": "MQTT-Nachricht, die als Erfolg gewertet wird", + "settingUpDatabaseMSG": "Die Datenbank wird eingerichtet. Dies kann einen Moment dauern, bitte habe Geduld.", "Search monitored sites": "Überwachte Seiten durchsuchen", - "statusPageSpecialSlugDesc": "Spezieller Slug {0}: Diese Seite wird angezeigt, wenn kein Slug angegeben wird.", + "statusPageSpecialSlugDesc": "Spezieller Slug {0}: Diese Seite wird angezeigt, wenn kein Slug angegeben wird", "ntfyPriorityHelptextAllEvents": "Alle Ereignisse werden mit höchster Priorität gesendet", - "ntfyPriorityHelptextAllExceptDown": "Alle Ereignisse nutzen diese Priorität, außer {0}-Ereignisse (Priorität {1})", + "ntfyPriorityHelptextAllExceptDown": "Alle Ereignisse werden mit dieser Priorität gesendet, außer {0}-Ereignisse, die Priorität {1} haben", "What is a Remote Browser?": "Was ist ein Remote-Browser?", - "Channel access token (Long-lived)": "Channel-Token (langlebig)", - "Your User ID": "Deine User-ID", - "wayToGetHeiiOnCallDetails": "Trigger-ID und API-Schlüssel findest du in der {Dokumentation}", - "documentationOf": "{0} Dokumentation", - "gtxMessagingToHint": "Internationales Format mit führendem \"+\" ({e164}, {e212} oder {e214})", - "From Phone Number / Transmission Path Originating Address (TPOA)": "Von Telefonnummer / TPOA", - "To Phone Number": "An Telefonnummer", - "gtxMessagingApiKeyHint": "API-Schlüssel unter: Meine Routing-Konten > Kontoinformationen > API-Anmeldeinformationen > REST-API (v2.x)", - "gtxMessagingFromHint": "Auf Mobiltelefonen sieht der Empfänger die TPOA als Absender. Erlaubt: bis zu 11 alphanumerische Zeichen, Shortcode, lokale Langwahl oder internationale Nummern.", + "Channel access token (Long-lived)": "Kanal-Zugriffstoken (langlebig)", + "Your User ID": "Deine Benutzer-ID", + "wayToGetHeiiOnCallDetails": "Wie du die Trigger-ID und API-Schlüssel erhältst, wird in der {documentation} erklärt", + "documentationOf": "{0}-Dokumentation", + "gtxMessagingToHint": "Internationales Format mit führendem „+“ ({e164}, {e212} oder {e214})", + "From Phone Number / Transmission Path Originating Address (TPOA)": "Absender-Telefonnummer / TPOA (Transmission Path Originating Address)", + "To Phone Number": "Empfänger-Telefonnummer", + "gtxMessagingApiKeyHint": "Deinen API-Schlüssel findest du unter: Meine Routing-Konten → Kontoinformationen anzeigen → API-Anmeldedaten → REST-API (v2.x)", + "gtxMessagingFromHint": "Auf Mobiltelefonen sieht der Empfänger die TPOA als Absender der Nachricht. Erlaubt sind bis zu 11 alphanumerische Zeichen, eine Kurzwahl, lokale oder internationale Nummern ({e164}, {e212} oder {e214})", "Alphanumeric (recommended)": "Alphanumerisch (empfohlen)", "Telephone number": "Telefonnummer", "Originator": "Absender", - "cellsyntOriginator": "Wird auf dem Handy des Empfängers als Absender angezeigt.", + "cellsyntOriginator": "Wird auf dem Empfängergerät als Absender der Nachricht angezeigt. Zulässige Werte und Funktion hängen vom Absendertyp ab.", "Destination": "Ziel", "Allow Long SMS": "Lange SMS erlauben", - "cellsyntSplitLongMessages": "Lange Nachrichten in bis zu 6 Teile splitten (153 x 6 = 918 Zeichen).", + "cellsyntSplitLongMessages": "Lange Nachrichten in bis zu 6 Teile aufteilen. 153 × 6 = 918 Zeichen.", "max 15 digits": "max. 15 Ziffern", "max 11 alphanumeric characters": "max. 11 alphanumerische Zeichen", "Originator type": "Absendertyp", - "cellsyntOriginatortypeAlphanumeric": "Alphanumerisch (max. 11 Zeichen). Empfänger können NICHT antworten.", - "cellsyntOriginatortypeNumeric": "Numerisch (max. 15 Stellen, intl. Format ohne 00). Empfänger KÖNNEN antworten.", - "cellsyntDestination": "Telefonnummer im intl. Format (führende 00, dann Landesvorwahl). Max 25.000 Empfänger pro Request.", - "callMeBotGet": "Generiere hier einen Endpunkt für {0}, {1} und {2}. Beachte mögliche Ratenlimits: {3}", - "wayToGetWhapiUrlAndToken": "API-URL und Token erhältst du im gewünschten Kanal von {0}", + "cellsyntOriginatortypeAlphanumeric": "Alphanumerische Zeichenfolge (max. 11 Zeichen). Empfänger können nicht auf die Nachricht antworten.", + "cellsyntOriginatortypeNumeric": "Numerischer Wert (max. 15 Ziffern) mit Telefonnummer im internationalen Format ohne führende 00 (Beispiel: UK-Nummer 07920 110 000 als 447920110000). Empfänger können antworten.", + "cellsyntDestination": "Empfänger-Telefonnummer im internationalen Format mit führender 00, gefolgt von Ländervorwahl, z. B. 00447920110000 für UK-Nummer 07920 110 000 (max. 17 Ziffern). Max. 25.000 kommagetrennte Empfänger pro HTTP-Anfrage.", + "callMeBotGet": "Hier kannst du einen Endpunkt für {0}, {1} und {2} generieren. Beachte mögliche Ratenbegrenzungen. Die Ratenbegrenzungen scheinen zu sein: {3}", + "wayToGetWhapiUrlAndToken": "Du erhältst die API-URL und den Token, indem du in deinen gewünschten Kanal unter {0} gehst", "whapiRecipient": "Telefonnummer / Kontakt-ID / Gruppen-ID", "API URL": "API-URL", - "wayToWriteWhapiRecipient": "Rufnummer mit intl. Vorwahl (ohne '+'), Kontakt-ID ({1}) oder Gruppen-ID ({2}).", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Gib den Hostnamen des Servers ein oder {localhost}, wenn du einen {local_mta} verwendest.", - "locally configured mail transfer agent": "lokal konfigurierten Mail-Transfer-Agent", + "wayToWriteWhapiRecipient": "Die Telefonnummer mit internationaler Vorwahl, aber ohne Pluszeichen am Anfang ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}).", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Gib entweder den Hostnamen des Servers ein, mit dem eine Verbindung hergestellt werden soll, oder {localhost}, wenn du einen {local_mta} verwenden möchtest", + "locally configured mail transfer agent": "lokal konfigurierter Mail-Transfer-Agent", "Mentioning": "Erwähnung", - "Don't mention people": "Keine Personen erwähnen", - "Mention group": "Erwähne {group}", - "senderSevenIO": "Absendernummer oder Name", + "Don't mention people": "Niemanden erwähnen", + "Mention group": "{group} erwähnen", + "senderSevenIO": "Absendernummer oder -name", "receiverSevenIO": "Empfängernummer", - "apiKeySevenIO": "SevenIO API-Schlüssel", - "wayToGetSevenIOApiKey": "Dashboard: app.seven.io > Entwickler > API Schlüssel > Hinzufügen", - "receiverInfoSevenIO": "Bei Nummern außerhalb Deutschlands muss die Landesvorwahl vorangestellt werden (z.B. 1176... statt 0176... für USA).", + "apiKeySevenIO": "SevenIO-API-Schlüssel", + "wayToGetSevenIOApiKey": "Besuche das Dashboard unter app.seven.io → Entwickler → API-Schlüssel → grüne Hinzufügen-Schaltfläche", + "receiverInfoSevenIO": "Wenn sich die Empfängernummer nicht in Deutschland befindet, musst du die Ländervorwahl voranstellen (z. B. für USA mit Vorwahl 1: 117612121212 statt 017612121212)", "Host URL": "Host-URL", - "whatHappensAtForumPost": "Erstellt einen neuen Forenbeitrag. Postet KEINE Nachrichten in bestehende Beiträge (nutze dafür '{option}').", - "Bitrix24 Webhook URL": "Bitrix24 Webhook-URL", - "wayToGetBitrix24Webhook": "Erstelle einen Webhook gemäß Anleitung: {0}", - "bitrix24SupportUserID": "Gib deine Bitrix24 User-ID ein (zu finden im Nutzerprofil-Link).", + "whatHappensAtForumPost": "Erstellt einen neuen Forumsbeitrag. Dies postet NICHT in bestehenden Beiträgen. Um in einem bestehenden Beitrag zu posten, verwende „{option}“", + "Bitrix24 Webhook URL": "Bitrix24-Webhook-URL", + "wayToGetBitrix24Webhook": "Du kannst einen Webhook erstellen, indem du den Schritten unter {0} folgst", + "bitrix24SupportUserID": "Gib deine Benutzer-ID in Bitrix24 ein. Du findest die ID im Link, wenn du zum Benutzerprofil gehst.", "Command": "Befehl", - "mongodbCommandDescription": "Führe einen MongoDB-Befehl aus. Verfügbare Befehle: {documentation}", + "mongodbCommandDescription": "Führe einen MongoDB-Befehl gegen die Datenbank aus. Informationen zu verfügbaren Befehlen findest du in der {documentation}", "Refresh Interval": "Aktualisierungsintervall", - "Refresh Interval Description": "Die Statusseite wird alle {0} Sekunden neu geladen", + "Refresh Interval Description": "Die Statusseite wird alle {0} Sekunden vollständig aktualisiert", "Select message type": "Nachrichtentyp auswählen", "Send to channel": "An Kanal senden", - "ignoreTLSErrorGeneral": "TLS/SSL-Fehler ignorieren", - "Create new forum post": "Neuen Forenbeitrag erstellen", - "postToExistingThread": "In bestehendes Thema/Beitrag posten", - "forumPostName": "Name des Forenbeitrags", - "threadForumPostID": "Themen-/Beitrags-ID", - "e.g. {discordThreadID}": "z.B. {discordThreadID}", - "wayToGetDiscordThreadId": "Thread-IDs erhältst du ähnlich wie Channel-IDs. Anleitung: {0}", + "ignoreTLSErrorGeneral": "TLS/SSL-Fehler für die Verbindung ignorieren", + "Create new forum post": "Neuen Forumsbeitrag erstellen", + "postToExistingThread": "In bestehendem Thread/Forumsbeitrag posten", + "forumPostName": "Forumsbeitragsname", + "threadForumPostID": "Thread-/Forumsbeitrags-ID", + "e.g. {discordThreadID}": "z. B. {discordThreadID}", + "wayToGetDiscordThreadId": "Das Abrufen einer Thread-/Forumsbeitrags-ID funktioniert ähnlich wie das Abrufen einer Kanal-ID. Mehr zum Abrufen von IDs findest du {0}", "smspartnerPhoneNumber": "Telefonnummer(n)", "smspartnerSenderName": "SMS-Absendername", - "smspartnerSenderNameInfo": "Muss 3-11 Zeichen lang sein", - "smspartnerApiurl": "API-Schlüssel im Dashboard: {0}", - "smspartnerPhoneNumberHelptext": "Internationales Format {0}, {1}. Mehrere Nummern mit {2} trennen.", + "smspartnerSenderNameInfo": "Muss 3–11 reguläre Zeichen enthalten", + "smspartnerApiurl": "Deinen API-Schlüssel findest du im Dashboard unter {0}", + "smspartnerPhoneNumberHelptext": "Die Nummer muss im internationalen Format {0}, {1} sein. Mehrere Nummern müssen durch {2} getrennt werden", "threemaRecipient": "Empfänger", "threemaRecipientType": "Empfängertyp", "threemaRecipientTypeIdentity": "Threema-ID", "threemaRecipientTypePhone": "Telefonnummer", - "threemaRecipientTypePhoneFormat": "E.164 (ohne führendes +)", + "threemaRecipientTypePhoneFormat": "E.164, ohne führendes +", "threemaRecipientTypeEmail": "E-Mail-Adresse", "threemaSenderIdentity": "Gateway-ID", - "threemaApiAuthenticationSecret": "Gateway-ID Secret", - "wayToGetThreemaGateway": "Registrierung für Threema Gateway: {0}", + "threemaApiAuthenticationSecret": "Gateway-ID-Secret", + "wayToGetThreemaGateway": "Du kannst dich für Threema Gateway unter {0} registrieren.", "threemaRecipientTypeIdentityFormat": "8 Zeichen", - "threemaSenderIdentityFormat": "8 Zeichen, beginnt meist mit *", - "threemaBasicModeInfo": "Hinweis: Nutzt Threema Gateway im Basic-Modus (serverbasierte Verschlüsselung). Details: {0}.", - "apiKeysDisabledMsg": "API-Schlüssel sind deaktiviert (Authentifizierung ist aus).", - "wayToGetOnesenderUrlandToken": "URL und Token erhältst du auf der Onesender-Website. Infos: {0}", + "threemaSenderIdentityFormat": "8 Zeichen, beginnt normalerweise mit *", + "threemaBasicModeInfo": "Hinweis: Diese Integration verwendet Threema Gateway im Basismodus (serverbasierte Verschlüsselung). Weitere Details unter {0}.", + "apiKeysDisabledMsg": "API-Schlüssel sind deaktiviert, da die Authentifizierung deaktiviert ist.", + "wayToGetOnesenderUrlandToken": "Du erhältst URL und Token auf der Onesender-Website. Weitere Infos: {0}", "Lost connection to the socket server.": "Verbindung zum Socket-Server verloren.", "conditionDeleteGroup": "Gruppe löschen", "greater than": "größer als", - "snmpOIDHelptext": "Gib die OID für den Sensor/Status ein. Nutze MIB-Browser, falls die OID unbekannt ist.", - "signl4Docs": "Infos zur Konfiguration von SIGNL4 und zur Webhook-URL: {0}", + "snmpOIDHelptext": "Gib die OID für den zu überwachenden Sensor oder Status ein. Verwende Netzwerkverwaltungstools wie MIB-Browser oder SNMP-Software, wenn du bei der OID unsicher bist.", + "signl4Docs": "Weitere Informationen zur Konfiguration von SIGNL4 und zum Erhalt der SIGNL4-Webhook-URL findest du in der {0}.", "now": "jetzt", "time ago": "vor {0}", "Json Query Expression": "JSON-Abfrageausdruck", "-year": "-Jahr", "and": "und", - "jsonQueryDescription": "Daten aus der JSON-Antwort extrahieren (JSON-Query). Nutze '$' für die rohe Antwort. Ergebnis wird als String verglichen. Doku: {0}, Tester: {1}.", - "cacheBusterParamDescription": "Zufälliger Parameter zur Umgehung des Caches.", + "jsonQueryDescription": "Analysiere und extrahiere bestimmte Daten aus der JSON-Antwort des Servers mittels JSON-Abfrage oder verwende „$“ für die Rohantwort, wenn kein JSON erwartet wird. Das Ergebnis wird dann mit dem erwarteten Wert als String verglichen. Dokumentation unter {0} und Experimente mit {1}.", + "cacheBusterParamDescription": "Zufällig generierter Parameter zum Umgehen des Caches.", "cacheBusterParam": "Parameter {0} hinzufügen", - "Community String": "Community String", - "snmpCommunityStringHelptext": "Passwort für Authentifizierung/Zugriff auf SNMP-Geräte (muss mit Gerätekonfiguration übereinstimmen).", + "Community String": "Community-String", + "snmpCommunityStringHelptext": "Diese Zeichenfolge dient als Passwort zur Authentifizierung und Zugriffssteuerung auf SNMP-fähige Geräte. Passe sie an die Konfiguration deines SNMP-Geräts an.", "OID (Object Identifier)": "OID (Object Identifier)", "Condition": "Bedingung", "SNMP Version": "SNMP-Version", - "Please enter a valid OID.": "Gib eine gültige OID ein.", - "Host Onesender": "Host Onesender", - "Token Onesender": "Token Onesender", + "Please enter a valid OID.": "Bitte gib eine gültige OID ein.", + "Host Onesender": "Onesender-Host", + "Token Onesender": "Onesender-Token", "Recipient Type": "Empfängertyp", "Private Number": "Private Nummer", "Group ID": "Gruppen-ID", - "privateOnesenderDesc": "Gültige Telefonnummer erforderlich (z.B. 628123456789).", - "groupOnesenderDesc": "Gültige GroupID erforderlich (z.B. 628123456789-342345).", + "privateOnesenderDesc": "Stelle sicher, dass die Telefonnummer gültig ist. Um eine Nachricht an eine private Nummer zu senden, z. B.: 628123456789", + "groupOnesenderDesc": "Stelle sicher, dass die Gruppen-ID gültig ist. Um eine Nachricht an eine Gruppe zu senden, z. B.: 628123456789-342345", "Add Remote Browser": "Remote-Browser hinzufügen", "New Group": "Neue Gruppe", "Group Name": "Gruppenname", "OAuth2: Client Credentials": "OAuth2: Client Credentials", "Authentication Method": "Authentifizierungsmethode", - "Authorization Header": "Authorization Header", - "Form Data Body": "Form Data Body", - "OAuth Token URL": "OAuth Token-URL", + "Authorization Header": "Autorisierungs-Header", + "Form Data Body": "Formulardaten-Body", + "OAuth Token URL": "OAuth-Token-URL", "Client ID": "Client-ID", - "Client Secret": "Client Secret", - "OAuth Scope": "OAuth Scope", - "Optional: Space separated list of scopes": "Optional: Leerzeichengetrennte Liste der Scopes", - "Go back to home page.": "Zurück zur Startseite.", + "Client Secret": "Client-Secret", + "OAuth Scope": "OAuth-Bereich", + "Optional: Space separated list of scopes": "Optional: Durch Leerzeichen getrennte Liste von Bereichen", + "Go back to home page.": "Zur Startseite zurückkehren.", "No tags found.": "Keine Tags gefunden.", - "Cannot connect to the socket server.": "Verbindung zum Socket-Server fehlgeschlagen.", + "Cannot connect to the socket server.": "Keine Verbindung zum Socket-Server möglich.", "SIGNL4": "SIGNL4", - "SIGNL4 Webhook URL": "SIGNL4 Webhook-URL", + "SIGNL4 Webhook URL": "SIGNL4-Webhook-URL", "Conditions": "Bedingungen", "conditionAdd": "Bedingung hinzufügen", "conditionDelete": "Bedingung löschen", "conditionAddGroup": "Gruppe hinzufügen", "conditionValuePlaceholder": "Wert", - "equals": "ist gleich", - "not equals": "ist nicht gleich", + "equals": "gleich", + "not equals": "ungleich", "contains": "enthält", "not contains": "enthält nicht", "starts with": "beginnt mit", @@ -1051,12 +1051,12 @@ "less than or equal to": "kleiner oder gleich", "greater than or equal to": "größer oder gleich", "record": "Eintrag", - "shrinkDatabaseDescriptionSqlite": "Datenbank {vacuum} für SQLite auslösen. {auto_vacuum} ist aktiv, aber {vacuum} defragmentiert die Datei effizienter.", + "shrinkDatabaseDescriptionSqlite": "Datenbank-{vacuum} für SQLite auslösen. {auto_vacuum} ist bereits aktiviert, aber das defragmentiert die Datenbank nicht und packt keine einzelnen Datenbankseiten neu, wie es der {vacuum}-Befehl tut.", "ignoredTLSError": "TLS/SSL-Fehler wurden ignoriert", "Message format": "Nachrichtenformat", "Notification Channel": "Benachrichtigungskanal", - "Custom sound to override default notification sound": "Benutzerdefinierter Ton (ersetzt Standardton)", - "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Zeitkritische Benachrichtigungen werden sofort zugestellt, auch im 'Nicht stören'-Modus.", + "Custom sound to override default notification sound": "Benutzerdefinierter Ton zum Überschreiben des Standard-Benachrichtigungstons", + "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Zeitkritische Benachrichtigungen werden sofort zugestellt, auch wenn sich das Gerät im Nicht-stören-Modus befindet.", "Debug": "Debug", "Copy": "Kopieren", "CopyToClipboardError": "Konnte nicht in die Zwischenablage kopiert werden: {error}", @@ -1073,215 +1073,215 @@ "Doorbell": "Türklingel", "Flute": "Flöte", "Money": "Geld", - "Scifi": "SciFi", + "Scifi": "Sci-Fi", "Elevator": "Aufzug", "Guitar": "Gitarre", - "Sound": "Benachrichtigungston", + "Sound": "Ton", "Time Sensitive (iOS Only)": "Zeitkritisch (nur iOS)", "From": "Von", - "Can be found on:": "Zu finden auf: {0}", - "The phone number of the recipient in E.164 format.": "Telefonnummer des Empfängers im E.164-Format.", - "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Text-Absender-ID oder E.164-Nummer (für Antworten).", + "Can be found on:": "Zu finden unter: {0}", + "The phone number of the recipient in E.164 format.": "Die Telefonnummer des Empfängers im E.164-Format.", + "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Entweder eine Text-Absender-ID oder eine Telefonnummer im E.164-Format, wenn du Antworten empfangen möchtest.", "Send rich messages": "Rich-Text-Nachrichten senden", - "Fail": "Fehlschlag", + "Fail": "Fehlgeschlagen", "Reveal": "Enthüllen", "Bubble": "Blase", "Clear": "Klar", "Pop": "Pop", - "Arcade": "Arcade", - "rabbitmqNodesRequired": "Setze die Knoten für diesen Monitor.", - "RabbitMQ Username": "RabbitMQ Benutzername", - "RabbitMQ Password": "RabbitMQ Passwort", - "SendGrid API Key": "SendGrid API-Schlüssel", - "Separate multiple email addresses with commas": "Mehrere E-Mail-Adressen mit Kommas trennen", - "RabbitMQ Nodes": "RabbitMQ Management-Knoten", - "rabbitmqNodesDescription": "URL der RabbitMQ Management-Knoten (inkl. Protokoll/Port). Bsp: {0}", - "rabbitmqNodesInvalid": "Nutze eine vollständige URL (beginnend mit 'http') für RabbitMQ-Knoten.", - "rabbitmqHelpText": "Du musst das Management-Plugin in deinem RabbitMQ-Setup aktivieren. Infos: {rabitmq_documentation}.", - "aboutSlackUsername": "Ändert den Anzeigenamen des Absenders. Für Erwähnungen: Füge den Namen stattdessen in den Text ein.", + "Arcade": "Spielhalle", + "rabbitmqNodesRequired": "Bitte setze die Knoten für diesen Monitor.", + "RabbitMQ Username": "RabbitMQ-Benutzername", + "RabbitMQ Password": "RabbitMQ-Passwort", + "SendGrid API Key": "SendGrid-API-Schlüssel", + "Separate multiple email addresses with commas": "Mehrere E-Mail-Adressen durch Kommas trennen", + "RabbitMQ Nodes": "RabbitMQ-Verwaltungsknoten", + "rabbitmqNodesDescription": "Gib die URL für die RabbitMQ-Verwaltungsknoten einschließlich Protokoll und Port ein. Beispiel: {0}", + "rabbitmqNodesInvalid": "Bitte verwende eine vollständige URL (beginnend mit „http“) für RabbitMQ-Knoten.", + "rabbitmqHelpText": "Um den Monitor zu verwenden, musst du das Management-Plugin in deinem RabbitMQ-Setup aktivieren. Weitere Informationen findest du in der {rabitmq_documentation}.", + "aboutSlackUsername": "Ändert den Anzeigenamen des Absenders. Wenn du jemanden erwähnen möchtest, füge es stattdessen in den Anzeigenamen ein.", "templateHostnameOrURL": "Hostname oder URL", "telegramUseTemplate": "Benutzerdefinierte Nachrichtenvorlage verwenden", - "telegramTemplateFormatDescription": "Telegram unterstützt verschiedene Markup-Sprachen. Details: {0}.", + "telegramTemplateFormatDescription": "Telegram erlaubt verschiedene Markup-Sprachen für Nachrichten. Siehe Telegram {0} für Details.", "Plain Text": "Nur Text", - "templateServiceName": "Dienst-Name", - "YZJ Webhook URL": "YZJ Webhook-URL", - "YZJ Robot Token": "YZJ Robot-Token", + "templateServiceName": "Dienstname", + "YZJ Webhook URL": "YZJ-Webhook-URL", + "YZJ Robot Token": "YZJ-Robot-Token", "templateStatus": "Status", "telegramUseTemplateDescription": "Wenn aktiviert, wird die Nachricht mit einer benutzerdefinierten Vorlage gesendet.", "Message Template": "Nachrichtenvorlage", "Template Format": "Vorlagenformat", - "wayToGetWahaApiUrl": "URL deiner WAHA-Instanz.", + "wayToGetWahaApiUrl": "Deine WAHA-Instanz-URL.", "wahaSession": "Sitzung", "wahaChatId": "Chat-ID (Telefonnummer / Kontakt-ID / Gruppen-ID)", - "wayToGetWahaApiKey": "Der API-Schlüssel entspricht der Umgebungsvariable WHATSAPP_API_KEY deiner WAHA-Instanz.", - "wayToGetWahaSession": "WAHA sendet Benachrichtigungen von dieser Sitzung an die Chat-ID (siehe WAHA Dashboard).", - "wayToWriteWahaChatId": "Telefonnummer mit intl. Vorwahl (ohne '+'), Kontakt-ID ({1}) oder Gruppen-ID ({2}).", - "telegramServerUrlDescription": "Um Telegram-API-Sperren zu umgehen (China, Iran etc.). Infos: {0}. Standard: {1}", + "wayToGetWahaApiKey": "Der API-Schlüssel ist der Wert der Umgebungsvariable WHATSAPP_API_KEY, die du beim Starten von WAHA verwendet hast.", + "wayToGetWahaSession": "Von dieser Sitzung sendet WAHA Benachrichtigungen an die Chat-ID. Du findest sie im WAHA-Dashboard.", + "wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, aber ohne Pluszeichen am Anfang ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Benachrichtigungen werden von der WAHA-Sitzung an diese Chat-ID gesendet.", + "telegramServerUrlDescription": "Um Telegram-Bot-API-Beschränkungen aufzuheben oder in blockierten Regionen (China, Iran usw.) Zugang zu erhalten. Weitere Informationen unter {0}. Standard: {1}", "telegramServerUrl": "(Optional) Server-URL", "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter", - "the smsplanet documentation": "die smsplanet Dokumentation", + "the smsplanet documentation": "der SMSPlanet-Dokumentation", "Phone numbers": "Telefonnummern", "Sender name": "Absendername", - "smsplanetNeedToApproveName": "Muss im Kundenpanel genehmigt werden", - "smsplanetApiToken": "Token für die SMSPlanet API", - "smsplanetApiDocs": "Infos zum Erhalt von API-Tokens in {the_smsplanet_documentation}.", + "smsplanetNeedToApproveName": "Muss im Kunden-Panel genehmigt werden", + "smsplanetApiToken": "Token für die SMSPlanet-API", + "smsplanetApiDocs": "Detaillierte Informationen zum Erhalt von API-Tokens findest du in {the_smsplanet_documentation}.", "defaultFriendlyName": "Neuer Monitor", - "Use HTML for custom E-mail body": "HTML für E-Mail-Text verwenden", - "smseagleApiv1": "APIv1 (für bestehende Projekte/Abwärtskompatibilität)", - "SpugPush Template Code": "Vorlagen-Code", + "Use HTML for custom E-mail body": "HTML für benutzerdefinierten E-Mail-Text verwenden", + "smseagleApiv1": "APIv1 (für bestehende Projekte und Abwärtskompatibilität)", + "SpugPush Template Code": "Vorlagencode", "FlashDuty Push URL": "Push-URL", - "pingCountLabel": "Max. Pakete", - "pingNumericDescription": "Wenn aktiviert, werden IP-Adressen statt Hostnamen ausgegeben.", - "pingPerRequestTimeoutDescription": "Maximale Wartezeit (in Sekunden), bevor ein einzelnes Ping-Paket als verloren gilt.", - "smtpHelpText": "'SMTPS' prüft SMTP/TLS; 'Ignoriere TLS' verbindet unverschlüsselt; 'STARTTLS' verbindet, sendet STARTTLS und prüft das Zertifikat. Es werden KEINE E-Mails gesendet.", - "OneChatUserIdOrGroupId": "OneChat Benutzer-ID oder Gruppen-ID", - "Disable URL in Notification": "URL in der Benachrichtigung deaktivieren", - "smseagleGroupV2": "Telefonbuch Gruppen-ID(s)", - "smseagleContactV2": "Telefonbuch Kontakt-ID(s)", + "pingCountLabel": "Maximale Pakete", + "pingNumericDescription": "Wenn aktiviert, werden IP-Adressen statt symbolischer Hostnamen ausgegeben", + "pingPerRequestTimeoutDescription": "Maximale Wartezeit (in Sekunden), bevor ein einzelnes Ping-Paket als verloren gilt", + "smtpHelpText": "„SMTPS“ testet, ob SMTP/TLS funktioniert; „TLS ignorieren“ verbindet über Klartext; „STARTTLS“ verbindet, sendet einen STARTTLS-Befehl und verifiziert das Serverzertifikat. Keine dieser Optionen sendet eine E-Mail.", + "OneChatUserIdOrGroupId": "OneChat-Benutzer-ID oder Gruppen-ID", + "Disable URL in Notification": "URL in Benachrichtigung deaktivieren", + "smseagleGroupV2": "Telefonbuch-Gruppen-ID(s)", + "smseagleContactV2": "Telefonbuch-Kontakt-ID(s)", "smseagleMsgType": "Nachrichtentyp", "smseagleMsgSms": "SMS-Nachricht (Standard)", - "smseagleMsgRing": "Anruf (Ring)", - "smseagleMsgTts": "Text-zu-Sprache Anruf", - "smseagleMsgTtsAdvanced": "Erweiterter Text-zu-Sprache Anruf", + "smseagleMsgRing": "Klingelanruf", + "smseagleMsgTts": "Text-zu-Sprache-Anruf", + "smseagleMsgTtsAdvanced": "Erweiterter Text-zu-Sprache-Anruf", "smseagleDuration": "Dauer (in Sekunden)", - "smseagleTtsModel": "Text-zu-Sprache Modell-ID", + "smseagleTtsModel": "Text-zu-Sprache-Modell-ID", "smseagleApiType": "API-Version", "smseagleApiv2": "APIv2 (empfohlen für neue Integrationen)", - "smseagleDocs": "Doku oder APIv2-Verfügbarkeit prüfen: {0}", - "smseagleComma": "Mehrere mit Komma trennen", - "FlashDuty Push URL Placeholder": "Von der Alert-Integrationsseite kopieren", + "smseagleDocs": "Dokumentation und APIv2-Verfügbarkeit prüfen: {0}", + "smseagleComma": "Mehrere müssen durch Komma getrennt werden", + "FlashDuty Push URL Placeholder": "Von der Alarmintegrations-Seite kopieren", "pingCountDescription": "Anzahl der zu sendenden Pakete vor dem Stoppen", "pingNumericLabel": "Numerische Ausgabe", - "pingGlobalTimeoutLabel": "Globales Timeout", - "pingGlobalTimeoutDescription": "Gesamtzeit in Sekunden bis zum Abbruch (unabhängig von Paketen).", - "pingPerRequestTimeoutLabel": "Timeout pro Ping", - "pingIntervalAdjustedInfo": "Intervall wird basierend auf Paketanzahl und Timeouts angepasst.", + "pingGlobalTimeoutLabel": "Globale Zeitüberschreitung", + "pingGlobalTimeoutDescription": "Gesamtzeit in Sekunden bis zum Stoppen des Pings, unabhängig von gesendeten Paketen", + "pingPerRequestTimeoutLabel": "Zeitüberschreitung pro Ping", + "pingIntervalAdjustedInfo": "Intervall basierend auf Paketanzahl, globaler Zeitüberschreitung und Zeitüberschreitung pro Ping angepasst", "Custom URL": "Benutzerdefinierte URL", - "customUrlDescription": "Wird als Link verwendet (statt der Monitor-URL).", - "OneChatAccessToken": "OneChat Access-Token", - "OneChatBotId": "OneChat Bot-ID", + "customUrlDescription": "Wird als klickbare URL anstelle der Monitor-URL verwendet.", + "OneChatAccessToken": "OneChat-Zugriffstoken", + "OneChatBotId": "OneChat-Bot-ID", "Ip Family": "IP-Familie", - "Happy Eyeballs algorithm": "Happy Eyeballs Algorithmus", - "ipFamilyDescriptionAutoSelect": "Verwendet {happyEyeballs} zur Bestimmung der IP-Familie.", + "Happy Eyeballs algorithm": "Happy-Eyeballs-Algorithmus", + "ipFamilyDescriptionAutoSelect": "Verwendet den {happyEyeballs} zur Bestimmung der IP-Familie.", "Manual": "Manuell", - "ntfyPriorityHelptextPriorityHigherThanDown": "Reguläre Priorität sollte höher sein als {0}. Priorität {1} ist höher als {0} Priorität {2}", - "ntfyPriorityDown": "Priorität für DOWN-Ereignisse", + "ntfyPriorityHelptextPriorityHigherThanDown": "Die reguläre Priorität sollte höher als die {0}-Priorität sein. Priorität {1} ist höher als {0}-Priorität {2}", + "ntfyPriorityDown": "Priorität für INAKTIV-Ereignisse", "Add Tags": "Tags hinzufügen", - "tagAlreadyOnMonitor": "Dieser Tag ist bereits vorhanden oder vorgemerkt.", - "tagAlreadyStaged": "Dieser Tag ist bereits für diesen Batch vorgemerkt.", - "tagNameExists": "Ein System-Tag mit diesem Namen existiert bereits.", + "tagAlreadyOnMonitor": "Dieses Tag (Name und Wert) ist bereits am Monitor vorhanden oder zum Hinzufügen vorgemerkt.", + "tagAlreadyStaged": "Dieses Tag (Name und Wert) ist bereits für diese Stapelverarbeitung vorgemerkt.", + "tagNameExists": "Ein System-Tag mit diesem Namen existiert bereits. Wähle ihn aus der Liste aus oder verwende einen anderen Namen.", "Clear Form": "Formular leeren", - "Add Another Tag": "Weiteres Tag hinzufügen", - "Staged Tags for Batch Add": "Vorgemerkte Tags (Batch)", - "pause": "Pause", - "OAuth Audience": "OAuth Audience", - "Optional: The audience to request the JWT for": "Optional: Die 'Audience', für die das JWT angefordert wird", - "mqttWebsocketPathInvalid": "Ungültiges WebSocket-Pfadformat", + "Add Another Tag": "Weiteren Tag hinzufügen", + "Staged Tags for Batch Add": "Vorgemerkte Tags für Stapelverarbeitung", + "pause": "Pausieren", + "OAuth Audience": "OAuth-Zielgruppe", + "Optional: The audience to request the JWT for": "Optional: Zielgruppe für die JWT-Anforderung", + "mqttWebsocketPathInvalid": "Bitte ein gültiges WebSocket-Pfadformat verwenden", "Path": "Pfad", - "mqttWebSocketPath": "MQTT WebSocket-Pfad", - "mqttWebsocketPathExplanation": "Pfad für MQTT über WebSocket (z.B. /mqtt)", - "mqttHostnameTip": "Verwende dieses Format: {hostnameFormat}", - "Template plain text instead of using cards": "Textvorlage statt Karten verwenden", - "issueWithGoogleChatOnAndroidHelptext": "Hilft auch bei Upstream-Bugs wie {issuetackerURL}", + "mqttWebSocketPath": "MQTT-WebSocket-Pfad", + "mqttWebsocketPathExplanation": "WebSocket-Pfad für MQTT-über-WebSocket-Verbindungen (z. B. /mqtt)", + "mqttHostnameTip": "Bitte dieses Format verwenden: {hostnameFormat}", + "Template plain text instead of using cards": "Nur-Text-Vorlage statt Karten verwenden", + "issueWithGoogleChatOnAndroidHelptext": "Dies umgeht auch Upstream-Bugs wie {issuetackerURL}", "clearAllEventsMsg": "Möchtest du wirklich alle Ereignisse löschen?", "Events cleared successfully": "Ereignisse erfolgreich gelöscht.", "No monitors found": "Keine Monitore gefunden.", "Could not clear events": "{failed}/{total} Ereignisse konnten nicht gelöscht werden", "Clear All Events": "Alle Ereignisse löschen", - "wayToWriteEvolutionRecipient": "Telefonnummer mit intl. Vorwahl (ohne '+'), Kontakt-ID ({1}) oder Gruppen-ID ({2}).", - "wayToGetEvolutionUrlAndToken": "API-URL und Token erhältst du im gewünschten Kanal unter {0}.", + "wayToWriteEvolutionRecipient": "Die Telefonnummer mit internationaler Vorwahl, aber ohne Pluszeichen am Anfang ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}).", + "wayToGetEvolutionUrlAndToken": "Du erhältst die API-URL und den Token, indem du in deinen gewünschten Kanal unter {0} gehst", "evolutionRecipient": "Telefonnummer / Kontakt-ID / Gruppen-ID", "evolutionInstanceName": "Instanzname", - "brevoApiKey": "Brevo API-Schlüssel", - "brevoApiHelp": "Erstelle hier einen API-Schlüssel: {0}", - "brevoFromEmail": "Absender E-Mail", - "brevoFromName": "Absender Name", - "brevoLeaveBlankForDefaultName": "leer lassen für Standard", - "brevoToEmail": "Empfänger E-Mail", - "brevoCcEmail": "CC E-Mail", - "brevoBccEmail": "BCC E-Mail", - "brevoSeparateMultipleEmails": "Mehrere Adressen mit Komma trennen", + "brevoApiKey": "Brevo-API-Schlüssel", + "brevoApiHelp": "Erstelle einen API-Schlüssel hier: {0}", + "brevoFromEmail": "Absender-E-Mail", + "brevoFromName": "Absendername", + "brevoLeaveBlankForDefaultName": "leer lassen für Standardnamen", + "brevoToEmail": "Empfänger-E-Mail", + "brevoCcEmail": "CC-E-Mail", + "brevoBccEmail": "BCC-E-Mail", + "brevoSeparateMultipleEmails": "Mehrere E-Mail-Adressen durch Kommas trennen", "brevoSubject": "Betreff", - "brevoLeaveBlankForDefaultSubject": "leer lassen für Standard", - "Conversation token": "Konversations-Token", - "Bot secret": "Bot Secret", - "Send DOWN silently": "DOWN lautlos senden", - "Installing a Nextcloud Talk bot requires administrative access to the server.": "Die Installation eines Nextcloud Talk-Bots erfordert Administratorrechte.", - "Nextcloud host": "Nextcloud Host", - "Send UP silently": "UP lautlos senden", + "brevoLeaveBlankForDefaultSubject": "leer lassen für Standardbetreff", + "Conversation token": "Konversationstoken", + "Bot secret": "Bot-Secret", + "Send DOWN silently": "INAKTIV lautlos senden", + "Installing a Nextcloud Talk bot requires administrative access to the server.": "Die Installation eines Nextcloud-Talk-Bots erfordert Administratorzugriff auf den Server.", + "Nextcloud host": "Nextcloud-Host", + "Send UP silently": "AKTIV lautlos senden", "auto-select": "Automatische Auswahl", - "supportBaleChatID": "Support-Direktchat / Gruppe / Chat-ID", - "wayToGetBaleChatID": "Du erhältst deine Chat-ID, indem du dem Bot eine Nachricht sendest und diese URL aufrufst:", - "wayToGetBaleToken": "Du kannst hier ein Token erhalten: {0}.", - "Mention Mobile List": "Mobile Liste erwähnen", + "supportBaleChatID": "Unterstützt Direktchat-/Gruppen-/Kanal-Chat-ID", + "wayToGetBaleChatID": "Du kannst deine Chat-ID erhalten, indem du eine Nachricht an den Bot sendest und diese URL aufrufst, um die chat_id zu sehen:", + "wayToGetBaleToken": "Du kannst einen Token von {0} erhalten.", + "Mention Mobile List": "Mobilnummernliste erwähnen", "Mention User List": "Benutzer-ID-Liste erwähnen", - "Dingtalk Mobile List": "Liste der Mobilgeräte", + "Dingtalk Mobile List": "Mobilnummernliste", "Dingtalk User List": "Benutzer-ID-Liste", "Enter a list of userId": "Liste von Benutzer-IDs eingeben", "Enter a list of mobile": "Liste von Mobilnummern eingeben", "Invalid mobile": "Ungültige Mobilnummer [{mobile}]", "Invalid userId": "Ungültige Benutzer-ID [{userId}]", - "Number of retry attempts if webhook fails": "Anzahl der Wiederholungsversuche (alle 60–180 Sek.), wenn der Webhook fehlschlägt.", + "Number of retry attempts if webhook fails": "Anzahl der Wiederholungsversuche (alle 60–180 Sekunden), wenn der Webhook fehlschlägt.", "Maximum Retries": "Maximale Wiederholungsversuche", "webhookPostMethodDesc": "POST eignet sich für die meisten modernen HTTP-Server.", - "descriptionHelpText": "Wird auf dem internen Dashboard angezeigt. Markdown wird unterstützt und bereinigt.", + "descriptionHelpText": "Wird im internen Dashboard angezeigt. Markdown ist erlaubt und wird vor der Anzeige bereinigt (Leerzeichen und Einrückungen bleiben erhalten).", "HTTP Method": "HTTP-Methode", - "webhookGetMethodDesc": "GET sendet Daten als Query-Parameter (kein Body). Nützlich für Uptime Kuma Push-Monitore.", + "webhookGetMethodDesc": "GET sendet Daten als Abfrageparameter und erlaubt keine Body-Konfiguration. Nützlich zum Auslösen von Uptime-Kuma-Push-Monitoren.", "deleteGroupMsg": "Möchtest du diese Gruppe wirklich löschen?", - "deleteChildrenMonitors": "Auch untergeordnete Monitore löschen | Auch alle {count} untergeordneten Monitore löschen", - "Clone Maintenance": "Wartung klonen", - "ariaCloneMaintenance": "Kopie des Wartungsplans erstellen", - "ariaEditMaintenance": "Wartungsplan bearbeiten", - "ariaDeleteMaintenance": "Wartungsplan löschen", - "ariaPauseMaintenance": "Wartungsplan pausieren", - "ariaResumeMaintenance": "Wartungsplan wieder aufnehmen", + "deleteChildrenMonitors": "Auch die direkten untergeordneten Monitore und deren Untermonitore löschen (falls vorhanden) | Auch alle {count} direkten untergeordneten Monitore und deren Untermonitore löschen (falls vorhanden)", + "Clone Maintenance": "Wartung duplizieren", + "ariaCloneMaintenance": "Kopie dieser Wartung erstellen", + "ariaEditMaintenance": "Diese Wartung bearbeiten", + "ariaDeleteMaintenance": "Diese Wartung löschen", + "ariaPauseMaintenance": "Diese Wartung pausieren", + "ariaResumeMaintenance": "Diese Wartung fortsetzen", "Template ID": "Vorlagen-ID", - "wayToGetClickSMSIRTemplateID": "Die Vorlage muss ein Feld {uptkumaalert} enthalten. Erstellung hier: {here}.", + "wayToGetClickSMSIRTemplateID": "Deine Vorlage muss ein {uptkumaalert}-Feld enthalten. Du kannst eine neue Vorlage {here} erstellen.", "Recipient Numbers": "Empfängernummern", - "twilioApiKeyHelptext": "Optional, aber empfohlen. Du kannst entweder Account SID/AuthToken ODER Account SID und das Paar aus API-Key/Secret verwenden.", - "twilioMessagingServiceSID": "Messaging Service SID (optional)", - "twilloMessagingServiceSIDHelptext": "Verwende die Messaging Service SID, wenn du {twillo_messaging_service_help_link} zur Verwaltung nutzt.", + "twilioApiKeyHelptext": "Der API-Schlüssel ist optional, aber empfohlen. Du kannst entweder Konto-SID und AuthToken von der TwilioConsole-Seite oder Konto-SID und das Paar API-Schlüssel/API-Schlüssel-Secret angeben", + "twilioMessagingServiceSID": "Messaging-Service-SID (optional)", + "twilloMessagingServiceSIDHelptext": "Gib deine Messaging-Service-SID ein, wenn du {twillo_messaging_service_help_link} zur Verwaltung von Absendern und Funktionen verwendest", "showOnlyLastHeartbeat": "Nur letzten Heartbeat anzeigen", - "Softvelum WebSocket signaling protocol": "Softvelum WebSocket Signaling Protokoll", - "ignoreSecWebsocketAcceptHeaderDescription": "Erlaubt dem Server, ohne Sec-WebSocket-Accept Header zu antworten (bei erfolgreichem Upgrade).", - "Ignore Sec-WebSocket-Accept header": "Ignoriere {0} Header", - "wsSubprotocolDescription": "Informationen zu Subprotokollen: {documentation}", - "Session Initiation Protocol": "WebSocket-Transport für SIP", - "WebSocket Application Messaging Protocol": "WAMP", - "Network API for Notification Channel": "OMA RESTful-Netzwerk-API", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket Signaling Protocol", + "ignoreSecWebsocketAcceptHeaderDescription": "Erlaubt dem Server, nicht mit dem Sec-WebSocket-Accept-Header zu antworten, wenn das WebSocket-Upgrade erfolgreich ist.", + "Ignore Sec-WebSocket-Accept header": "{0}-Header ignorieren", + "wsSubprotocolDescription": "Weitere Informationen zu Subprotokollen findest du in der {documentation}", + "Session Initiation Protocol": "WebSocket-Transport für SIP (Session Initiation Protocol)", + "WebSocket Application Messaging Protocol": "WAMP (WebSocket Application Messaging Protocol)", + "Network API for Notification Channel": "OMA RESTful Network API für Benachrichtigungskanal", "Web Process Control Protocol": "Web Process Control Protocol (WPCP)", "Advanced Message Queuing Protocol": "Advanced Message Queuing Protocol (AMQP) 1.0+", - "jsflow": "jsFlow pubsub/queue Protokoll", + "jsflow": "jsFlow pubsub/queue Protocol", "Reverse Web Process Control": "Reverse Web Process Control Protocol (RWPCP)", - "Extensible Messaging and Presence Protocol": "WebSocket-Transport für XMPP", - "Smart Home IP": "SHIP - Smart Home IP", - "Miele Cloud Connect Protocol": "Miele Cloud Connect Protokoll", - "Push Channel Protocol": "Push Channel Protokoll", - "Message Session Relay Protocol": "WebSocket-Transport für MSRP", - "Binary Floor Control Protocol": "WebSocket-Transport für BFCP", - "Softvelum Low Delay Protocol": "Softvelum Low Delay Protokoll", - "OPC UA Connection Protocol": "OPC UA Connection Protokoll", + "Extensible Messaging and Presence Protocol": "WebSocket-Transport für XMPP (Extensible Messaging and Presence Protocol)", + "Smart Home IP": "SHIP – Smart Home IP", + "Miele Cloud Connect Protocol": "Miele Cloud Connect Protocol", + "Push Channel Protocol": "Push Channel Protocol", + "Message Session Relay Protocol": "WebSocket-Transport für MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "WebSocket-Transport für BFCP (Binary Floor Control Protocol)", + "Softvelum Low Delay Protocol": "Softvelum Low Delay Protocol", + "OPC UA Connection Protocol": "OPC UA Connection Protocol", "OPC UA JSON Encoding": "OPC UA JSON Encoding", - "Swindon Web Server Protocol": "Swindon Web Server Protokoll (JSON)", + "Swindon Web Server Protocol": "Swindon Web Server Protocol (JSON-Kodierung)", "Broadband Forum User Services Platform": "USP (Broadband Forum User Services Platform)", "Constrained Application Protocol": "Constrained Application Protocol (CoAP)", - "Cobra Real Time Messaging Protocol": "Cobra Real Time Messaging Protokoll", - "Declarative Resource Protocol": "Declarative Resource Protokoll", + "Cobra Real Time Messaging Protocol": "Cobra Real Time Messaging Protocol", + "Declarative Resource Protocol": "Declarative Resource Protocol", "BACnet Secure Connect Hub Connection": "BACnet Secure Connect Hub Connection", "BACnet Secure Connect Direct Connection": "BACnet Secure Connect Direct Connection", - "WebSocket Transport for JMAP": "WebSocket-Transport für JMAP", + "WebSocket Transport for JMAP": "WebSocket-Transport für JMAP (JSON Meta Application Protocol)", "Notifications Enabled": "Benachrichtigungen aktiviert", - "Allow Notifications": "Benachrichtigungen zulassen", - "Browser not supported": "Browser wird nicht unterstützt", - "Unable to get permission to notify": "Keine Berechtigung für Benachrichtigungen erhalten.", - "Webpush Helptext": "Web-Push erfordert SSL (HTTPS). Unter iOS muss die Webseite zum Home-Screen hinzugefügt werden.", - "certHostnameMismatch": "Zertifikats-Hostname stimmt nicht mit Monitor-URL überein.", + "Allow Notifications": "Benachrichtigungen erlauben", + "Browser not supported": "Browser nicht unterstützt", + "Unable to get permission to notify": "Keine Berechtigung für Benachrichtigungen erhalten (Anfrage wurde abgelehnt oder ignoriert).", + "Webpush Helptext": "Web-Push funktioniert nur mit SSL-(HTTPS)-Verbindungen. Bei iOS-Geräten muss die Webseite vorher zum Startbildschirm hinzugefügt werden.", + "certHostnameMismatch": "Der Hostname des Zertifikats stimmt nicht mit der Monitor-URL überein.", "ITU-T T.140 Real-Time Text": "ITU-T T.140 Real-Time Text", - "Done.best IoT Protocol": "Done.best IoT Protokoll", - "Collection Update": "Collection Update Websocket Subprotokoll", - "Text IRC Protocol": "Text IRC Protokoll", - "Binary IRC Protocol": "Binary IRC Protokoll", - "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protocol v3 (Protobuf)", + "Done.best IoT Protocol": "Done.best IoT Protocol", + "Collection Update": "Collection Update WebSocket Subprotocol", + "Text IRC Protocol": "Text IRC Protocol", + "Binary IRC Protocol": "Binary IRC Protocol", + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protocol v3 (Protobuf-Kodierung)", "minimumIntervalWarning": "Intervalle unter 20 Sekunden können die Leistung beeinträchtigen.", - "lowIntervalWarning": "Möchtest du das Intervall wirklich unter 20 Sekunden setzen? Bei vielen Monitoren kann dies zu Leistungsproblemen führen." + "lowIntervalWarning": "Möchtest du das Intervall wirklich auf unter 20 Sekunden setzen? Die Leistung kann beeinträchtigt werden, insbesondere bei vielen Monitoren." } From 86d22827ac2cf1dd715a3b48f21b6b774c7ea804 Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Tue, 23 Dec 2025 18:00:17 +0000 Subject: [PATCH 83/91] Translated using Weblate (Bavarian) Currently translated at 51.6% (640 of 1239 strings) Translated using Weblate (English (Old)) Currently translated at 0.0% (0 of 1239 strings) Translated using Weblate (Bavarian) Currently translated at 42.7% (530 of 1239 strings) Translated using Weblate (Bavarian) Currently translated at 34.0% (422 of 1239 strings) Translated using Weblate (Bavarian) Currently translated at 31.4% (389 of 1235 strings) Co-authored-by: Frank Elsinga Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ang/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bar/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ang.json | 2 +- src/lang/bar.json | 449 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 447 insertions(+), 4 deletions(-) diff --git a/src/lang/ang.json b/src/lang/ang.json index d3fd224a..240b8ec4 100644 --- a/src/lang/ang.json +++ b/src/lang/ang.json @@ -1,3 +1,3 @@ { - "languageName": "RTSP Username" + "languageName": "" } diff --git a/src/lang/bar.json b/src/lang/bar.json index d2ff7829..314b32b3 100644 --- a/src/lang/bar.json +++ b/src/lang/bar.json @@ -114,7 +114,7 @@ "Resume": "Weida macha", "Edit": "Ändern", "Current": "Groaßgrad", - "Monitor": "Da Schirm | De Schirm", + "Monitor": "Da Monitor | De Monitor", "day": "da dog | de dog", "setupDatabaseSQLite": "A einfachs Datenbank-Datei, empfehlenswert für kloane Installationen. Vorma v2.0.0 hod Uptime Kuma SQLite als Standard-Datenbank nutzt.", "Settings": "Einstellungen", @@ -133,7 +133,7 @@ "-day": "-dog", "hour": "stund", "Ping": "Ping", - "Monitor Type": "De Sorte vom Schirm", + "Monitor Type": "De Sorte vom Monitor", "Keyword": "Schlüsselwort", "Invert Keyword": "Wosd ned findn wuisd", "Expected Value": "Wosd davo ausgähst", @@ -195,5 +195,448 @@ "Repeat Password": "Passwoat nomoi eigehm", "Export Backup": "Sicherung aussanehgn", "languageName": "Bairisch", - "signl4Docs": "Mehr Informationa, wia ma SIGNL4 konfiguriert und wia ma de SIGNL4 Webhook URL findt, gibts in de {0}." + "signl4Docs": "Mehr Informationa, wia ma SIGNL4 konfiguriert und wia ma de SIGNL4 Webhook URL findt, gibts in de {0}.", + "Notifications": "Benachrichtigunga", + "Not available, please setup.": "Ned vafügbar, bittschee earichdn.", + "telegramMessageThreadIDDescription": "Optionale eindeutige Kennung fia den Ziel-Thread (Thema) im Forum; bloß fia Forum-Supergruppn", + "promosmsSMSSender": "SMS-Absendernama: Vorab registriata Nama oda oana vo de Standardwerte: InfoSMS, SMS Info, MaxSMS, INFO, SMS", + "promosmsPhoneNumber": "Telefonnumma (fia Poin konnst de Vorwoi weglossn)", + "deleteAPIKeyMsg": "Bist da ganz sicher, dass den API-Schlissl leschn wuist?", + "ntfyPriorityHelptextPriorityHigherThanDown": "A normale Priorität suitad höher sei ois de {0} Priorität. Priorität {1} is höher ois de {0} Priorität {2}", + "ntfyPriorityHelptextAllExceptDown": "Olle Ereignisse wern mit dera Priorität verschickt, außer {0}-Ereignisse, de Priorität {1} hom", + "wayToGetOnesenderUrlandToken": "D'URL und den Schlüssel kriagst auf da Onesender-Webseitn. Mehr Infos dazu findst unta {0}", + "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Zeitkritische Benachrichtigunga wern sofort zuagstait, a wann des Gerät im \"Bittschee ned störn\"-Modus is.", + "pingPerRequestTimeoutDescription": "Des is de maximale Wartezeit (in Sekundn), bevor a oanzlns Ping-Paket ois verloren guit", + "wayToGetWahaSession": "Vo dera Sitzung aus schickt WAHA Benachrichtigunga an d'Chat-ID. De findst im WAHA-Dashboard.", + "Advanced Message Queuing Protocol": "Fortgschriddns Nachrichten-Schlanga-Protokoll (AMQP) 1.0+", + "Broadband Forum User Services Platform": "USP (Breitband-Forum Nutza-Dinst-Plattform)", + "Extensible Messaging and Presence Protocol": "WebSocket-Ibadrog fia's Extensible Messaging and Presence Protocol (XMPP)", + "BACnet Secure Connect Direct Connection": "BACnet Secure Connect Direkt-Vabindung", + "Penguin Statistics Live Protocol v3": "Penguin Statistics Live-Protokoll v3 (Protobuf-Kodierung)", + "Discourage search engines from indexing site": "Suachmaschinan davo obhoidn, dass de Seitn indexiern", + "confirmImportMsg": "Bist da ganz sicher, dass d' d'Sicherung eispuin wuist? Schau liaba nomoi noch, ob d' de richtige Import-Option ausgwählt host.", + "aboutKumaURL": "Wannst des Feld fia de Uptime Kuma URL laar lasst, dann werd automatisch de GitHub-Seitn vom Projekt hergnumma.", + "mongodbCommandDescription": "Führ an MongoDB-Befehl gegn de Datenbank aus. Informationa über de verfügbarn Befehle findst in da {documentation}", + "threemaBasicModeInfo": "Hinweis: De Einbindung nutzt Threema Gateway im \"Basic Mode\" (serverbasierte Verschlüsselung). Mehr Details dazu findst unta {0}.", + "smspartnerPhoneNumberHelptext": "De Nummer muaß im internationaln Format {0}, {1} sei. Mehrere Nummern muaß ma mit {2} trenna", + "webhookAdditionalHeadersDesc": "Legt zusätzliche Header fest, de mit dem Webhook verschickt wern. Jeda Header muaß ois JSON-Key/Value-Paar agem wern.", + "dnsCacheDescription": "Des kannt in manche IPv6-Umgebunga evtl. ned hinhaua. Schoids as aus, wanns Probleme gabat.", + "backupDescription3": "Empfindliche Daten wia Benachrichtigungs-Token san in da Export-Datei drin; bittschee de Datei sicher aufbewahrn.", + "wayToGetKookGuildID": "Schoid den \"Entwickler-Modus\" in de Kook-Einstellunga ei und mach an Rechtsklick auf d'Gilde, damitst de ID kriagst", + "pushoverDesc1": "De Notfall-Priorität (2) hod standardmäßig an Zeitablauf vo 30 Sekundn zwischn de Versuach und lafft nacha oaner Stund aus.", + "privateOnesenderDesc": "Schau noch, ob de Telefonnumma gscheid is. Zum Verschicka an a private Numma, nimm zum Beispui: 628123456789", + "promosmsTypeFlash": "SMS FLASH - De Nachricht werd beim Empfänger automatisch am Gerät ozoagt. Geht bloß fia Empfänger aus Poln.", + "Content Type": "Inhoitstyp", + "templateLimitedToUpDownCertNotifications": "bloß fia AUF/O (UP/DOWN)/Zertifikats-Ablauf-Benachrichtigungen vafügbar", + "HeadersInvalidFormat": "De Kopfzeuin vo da Onfrog san koa gültigs JSON: ", + "invertKeywordDescription": "Schaug liaba, dass des Stichwortl ned do is, ois dass 's do is.", + "octopushSMSSender": "SMS-Absender: 3 bis 11 Zeichn (Buachstobm, Zoin und Leerzeichn)", + "wahaChatId": "Chat-ID (Telefonnumma / Kontakt-ID / Gruppn-ID)", + "issueWithGoogleChatOnAndroidHelptext": "Damit konnst aa Fehlers in da Software weida obm umgeh, so wia bei {issuetackerURL}", + "Add Tags": "Kennzeichnunga dazuafügn", + "color": "Farb", + "ignoreSecWebsocketAcceptHeaderDescription": "Erlaubt am Server, dass a ned mid am Sec-WebSocket-Accept-Header antword, wenn da Websocket-Upgrade hinhaut.", + "Ignore Sec-WebSocket-Accept header": "{0}-Header ignoria", + "wsSubprotocolDescription": "Fia mehra Infos zu de Subprotokolle schau bittschee in d' {documentation} neigschrim", + "Session Initiation Protocol": "WebSocket-Ibadrog fia SIP (Session Initiation Protocol)", + "WebSocket Application Messaging Protocol": "WAMP (Des WebSocket-Anwendung-Meldungsprotokoll)", + "Network API for Notification Channel": "OMA RESTful Netzwerk-API fia Benachrichtigungs-Kanäle", + "Web Process Control Protocol": "Web-Prozess-Steiarungs-Protokoll (WPCP)", + "jsflow": "jsFlow pubsub/queue Protokoll", + "Reverse Web Process Control": "Invers' Web-Prozess-Steiarungs-Protokoll (RWPCP)", + "Miele Cloud Connect Protocol": "Miele Cloud-Vabindungs-Protokoll", + "Push Channel Protocol": "Push-Kanal-Protokoll", + "Message Session Relay Protocol": "WebSocket-Ibadrog fia MSRP (Message Session Relay Protocol)", + "Binary Floor Control Protocol": "WebSocket-Ibadrog fia BFCP (Binary Floor Control Protocol)", + "Smart Home IP": "SHIP - Gscheids Dahoam IP", + "Softvelum Low Delay Protocol": "Softvelum Protokoll fia a gringe Vazögarung", + "OPC UA Connection Protocol": "OPC UA Vabindungsprotokoll", + "OPC UA JSON Encoding": "OPC UA JSON Kodierung", + "Swindon Web Server Protocol": "Swindon Web-Server-Protokoll (JSON-Kodierung)", + "Constrained Application Protocol": "Protokoll fia bschränkte Anwendungen (CoAP)", + "Softvelum WebSocket signaling protocol": "Softvelum WebSocket-Signalisierungsprotokoll", + "Cobra Real Time Messaging Protocol": "Cobra Echtzeit-Meldungsprotokoll", + "Declarative Resource Protocol": "Deklarativs Ressourcen-Protokoll", + "BACnet Secure Connect Hub Connection": "BACnet Secure Connect Hub-Vabindung", + "WebSocket Transport for JMAP": "WebSocket-Ibadrog fia JMAP (JSON Meta Application Protocol)", + "ITU-T T.140 Real-Time Text": "ITU-T T.140 Echtzeit-Text", + "Done.best IoT Protocol": "Done.best IoT-Protokoll", + "Collection Update": "Des Websocket-Subprotokoll fia Sammlungs-Aktualisiarunga", + "Text IRC Protocol": "Text-IRC-Protokoll", + "Binary IRC Protocol": "Binärs-IRC-Protokoll", + "Dark": "Dunkla", + "Theme - Heartbeat Bar": "Design - Herzschlag-Balkn", + "styleElapsedTime": "Vaganga Zeit untam Herzschlag-Balkn", + "styleElapsedTimeShowNoLine": "Ozoagn (ohne Linien)", + "styleElapsedTimeShowWithLine": "Ozoagn (mid Linien)", + "Normal": "Ganz normal", + "Bottom": "Untn", + "None": "Gar nix", + "Timezone": "Zeidzon", + "Search Engine Visibility": "Sichtboarkeit fia Suachmaschinan", + "Allow indexing": "Indexierung erlaubm", + "Current Password": "Aktuells Passwoat", + "Repeat New Password": "Neis Passwoat wiedahoin", + "Update Password": "Passwoat aktualisiern", + "Disable Auth": "Auth ausschoidn", + "Enable Auth": "Auth einschoidn", + "disableauth.message1": "Bist da ganz sicher, dass d' {disableAuth} wuist?", + "disable authentication": "Authentifizierung ausschoidn", + "Please use this option carefully!": "Pass bittschee gscheid auf mid dera Option!", + "where you intend to implement third-party authentication": "wo du a Drittanbieta-Authentifizierung eibaua wuist", + "Logout": "Ausloggn", + "Leave": "Valassn", + "I understand, please disable": "I hob's kapiad, bittschee ausschoidn", + "Confirm": "Bestätign", + "Tag with this name already exist.": "A Kennzeichnung mid dem Nama gibts scho.", + "Tag with this value already exist.": "A Kennzeichnung mid dem Wert gibts scho.", + "tagAlreadyOnMonitor": "De Kennzeichnung (Nam und Wert) is beim Monitor scho dabei oda werd grod dazuagfügt.", + "tagAlreadyStaged": "De Kennzeichnung (Nam und Wert) is fia den Durchgang scho vorgmerkt.", + "value (optional)": "Wert (optional)", + "Gray": "Grau", + "Red": "Rot", + "Orange": "Orange", + "Green": "Grea", + "Blue": "Blau", + "Indigo": "Indigo", + "Purple": "Lila", + "Pink": "Rosa", + "Search...": "Suacha…", + "Search monitored sites": "Überwachte Seitn suacha", + "webhookFormDataDesc": "{multipart} is guad fia PHP. Des JSON muaß mit {decodeFunction} ausglesn wern", + "Avg. Ping": "Durschn. Ping", + "Avg. Response": "Durschn. Antwortzeit", + "Entry Page": "Einstiegssaitn", + "statusPageNothing": "Do is nix, bittschee füg a Gruppn oda an Monitor hinzu.", + "statusPageRefreshIn": "Aktualisierung in: {0}", + "No Services": "Keine Dienste", + "All Systems Operational": "Olle Systeme laffan ohne Probleme", + "Partially Degraded Service": "Teilweis eigschränkta Dienst", + "Degraded Service": "Eigschränkta Dienst", + "Add Group": "Gruppn hinzufügn", + "Add a monitor": "Monitor hinzufügn", + "Edit Status Page": "Statusseitn bearbeitn", + "Status Page": "Statusseitn", + "Status Pages": "Statusseitn", + "webhookJsonDesc": "{0} is guad fia olle modernan HTTP-Server wie zum Beispui Express.js", + "templateMonitorJSON": "Objekt, des an Monitor bschreibt", + "templateLimitedToUpDownNotifications": "bloß fia AUF/O-Benachrichtigungen vafügbar", + "webhookAdditionalHeadersTitle": "Extra Kopfzeuin", + "webhookBodyPresetOption": "Vorgob - {0}", + "webhookBodyCustomOption": "Eigna Inhoit", + "Webhook URL": "Webhook-Url", + "Priority": "Wichtigkeit", + "emojiCheatSheet": "Emoji-Spickzedl: {0}", + "Read more": "Lies weida", + "appriseInstalled": "Apprise is scho drauf.", + "appriseNotInstalled": "Apprise is ned installiert. {0}", + "Method": "Art und Weis", + "Body": "Inhoit", + "PushUrl": "Push-Adress", + "BodyInvalidFormat": "Da Inhoit vo da Onfrog is koa gültigs JSON: ", + "descriptionHelpText": "Werd auf'm internen Dashboard ozoagt. Markdown is erlaubt und werd vor da Anzeige bereinigt (Leerzeichn und Einrückunga bleim dahoitn).", + "telegramProtectContentDescription": "Wannst des aktivierst, wern d'Nachrichtn vom Bot in Telegram vor'm Weiterleitn und Speichern gschützt.", + "Setup Notification": "Benachrichtigung earichdn", + "Light": "Hella", + "Path": "Pfad", + "templateHeartbeatJSON": "Objekt, des an Heartbeat bschreibt", + "templateMsg": "Benachrichtigungstext", + "Show Clickable Link Description": "Wann des ausgwählt is, ko jeda, der Zuagriff auf de Statusseitn hod, a de Monitor-URL seng.", + "wayToGetSevenIOApiKey": "Geh auf's Dashboard unta app.seven.io > Developer > API-Key > auf den greana \"Hinzufügn\"-Knopf drucka", + "wayToGetEvolutionUrlAndToken": "D'API-URL und den Schlüssel kriagst, wannst bei {0} in dein gwünschtn Kanal neigehst", + "wayToGetWhapiUrlAndToken": "D'API-URL und den Schlüssel kriagst, wannst bei {0} in dein gwünschtn Kanal neigehst", + "templateServiceName": "Dienstnam", + "templateStatus": "zustand", + "templateHostnameOrURL": "Hostnam oda URL", + "defaultFriendlyName": "Neia Monitor", + "Change Password": "Passwoat ändan", + "filterActive": "Aktiv", + "Inactive": "Inaktiv", + "Token": "Berechtigungs-Code", + "Show URI": "URI ozoagn", + "Tags": "Kennzeichnunga", + "Add New Tag": "Neie Kennzeichnung dazuafügn", + "Add New below or Select...": "Untn a neis dazuafügn oda auswähln…", + "filterActivePaused": "Pausiat", + "Active": "Aktiv", + "Custom": "Selba gmacht", + "Go to Dashboard": "Auf's Dashboard geh", + "defaultNotificationName": "Mei {notification} Alarm ({number})", + "here": "do", + "Post URL": "POST-Url", + "Required": "Erforderlich", + "Server URL": "Server-Adress", + "Headers": "Kopfzeuin", + "disableAPIKeyMsg": "Bist da ganz sicher, dass den API-Schlissl deaktivern wuist?", + "wayToGetPagerTreeIntegrationURL": "Soboidst de Uptime Kuma Integration in PagerTree oglegt host, kopier den \"Endpoint\". Olle Details findst unta {0}", + "deleteStatusPageMsg": "Bist da ganz sicher, dass de Statusseitn leschn wuist?", + "wayToGetClickSendSMSToken": "Den API-Nutzama und in API-Schlissl kriagst vo {here}.", + "Then choose an action, for example switch the scene to where an RGB light is red.": "Dann suach da a Aktion aus, zum Beispui an Szenenwechsel, bei dem a RGB-Liacht auf Rot gschait werd.", + "New Password": "Neis Passwoat", + "now": "iatzad", + "time ago": "vor {0}", + "-year": "-Joahr", + "Accepted Status Codes": "Akzeptiade Statuscodes", + "Save": "Speichern", + "Host URL": "Host-URL", + "ignoredTLSError": "TLS/SSL-Fehla san ignoriad worn", + "pushOptionalParams": "Optionale Parameta: {0}", + "programmingLanguages": "Programmiasprochn", + "Application Token": "Anwendungstoken", + "locally configured mail transfer agent": "lokal konfiguierda Mail-Ibadrog-Agent", + "ignoreTLSErrorGeneral": "TLS/SSL-Fehla fia d'Vabindung ignoria", + "pushViewCode": "Wia ma an Push-Monitor hernimmt? (Code oschaun)", + "Json Query Expression": "Json Abfrog-Ausdruck", + "Push URL": "Push-URL", + "needPushEvery": "Du soist de URL olle {0} Sekundn afruafa.", + "pushOthers": "Ondane", + "Auto": "Automatisch", + "successKeyword": "Des Stichwort fia \"Erfoig\"", + "records": "Datensätze", + "HTTP Options": "HTTP-Auswoimöglichkeiten", + "One record": "Ei Datensatz", + "Current User": "Da Benutza, der grod dro is", + "topic": "Des Thema", + "topicExplanation": "Des MQTT-Thema, des ma im Aug bhoidn wuin", + "mqttWebSocketPath": "Da MQTT-WebSocket-Pfad", + "mqttWebsocketPathExplanation": "Da Pfad fia d'WebSocket-Vabindungen iba MQTT (zum Beispui /mqtt)", + "mqttWebsocketPathInvalid": "Bittschee nimm a richte Form fia den WebSocket-Pfad", + "mqttHostnameTip": "Bittschee nimm des Format {hostnameFormat}", + "successKeywordExplanation": "Des MQTT-Wort, des ma ois Erfoig geitn lassn", + "recent": "Was grod erst war", + "Reset Token": "Des Token zum Zurücksetzn", + "Done": "Basst scho", + "Info": "Bscheid", + "Security": "Sicherheit", + "Steam API Key": "Da Steam-Schlissl fia d'Schnittsteijn", + "Shrink Database": "De Datenbank a wengal kloaner macha", + "Pick a RR-Type...": "Suach da an RR-typ aus…", + "Pick Accepted Status Codes...": "Suach da d'Statuscodes aus, de bassn…", + "Default": "So wia's oiwai is", + "Create Incident": "An Vorfoi eitrogn", + "Title": "Iberschrift", + "Content": "Des, wos drin steht", + "Style": "Wia's ausschaugt", + "info": "Bscheid", + "warning": "Obacht", + "danger": "Gfai", + "critical": "Brenzlig", + "Monitor History": "De Gschicht vom Monitor", + "clearDataOlderThan": "De Daten vo da Monitor-Gschicht fia {0} Dog aufhem.", + "PasswordsDoNotMatch": "De Kennwerter bassn ned zam.", + "resolverserverDescription": "Cloudflare is da Standard-Server. Du konnst den Resolver-Server jedazeit ändern.", + "keywordDescription": "Suach des Stichwort im normalen HTML oder JSON. Bei da Suach werd zwischn Groß- und Kleinschreibung untaschiedn.", + "pushoverDesc2": "Wennst d'Meldungen an untaschiedliche Gerät verschicka wuist, dann füll des Feld fia de Gerät aus.", + "octopushLegacyHint": "Nimmst du de oide Version vo Octopush (2011-2020) her oder de neie?", + "groupOnesenderDesc": "Schaug, dass de GroupID passt. Wennst a Nachricht in a Gruppn schicka wuist, zum Beispui: 628123456789-342345", + "rabbitmqNodesDescription": "Gib de URL fia de RabbitMQ-Verwaltungsknotn ei, mit Protokoll und Port. Zum Beispui: {0}", + "dnsPortDescription": "DNS-Server-Anschluss. Standard is 53. Den Port konnst jedazeit ändern.", + "wayToGetHeiiOnCallDetails": "Wia ma d'Trigger-ID und de API-Schlissl kriagt, steht ois in da {documentation} drin", + "telegramTemplateFormatDescription": "Telegram erlaubt untaschiedliche Schreibweisn fia Nachrichten, schau bei Telegram {0} fia de ganz genauen Details nacha.", + "wayToGetClickSMSIRTemplateID": "De Vorlog muss a {uptkumaalert} Fejd drin ham. Du konnst {here} a neie Vorlog bastln.", + "Custom CSS": "Eigns CSS-Gwandl", + "error": "Do hod's wos", + "primary": "hauptsach", + "dark": "dunkl", + "Post": "Post", + "Please input title and content": "Bittschee gib a Überschrift und an Inhalt ei", + "Created": "Erstellt", + "Last Updated": "Zletzt hergricht", + "Switch to Light Theme": "Auf d'heije Ansicht umsteijn", + "Switch to Dark Theme": "Auf d'finstere Ansicht umsteijn", + "Show Tags": "De Pickerl zoagn", + "Hide Tags": "De Pickerl vostecka", + "Description": "Wos des eigntlich is", + "No monitors available.": "Es san koane Monitorn do.", + "Add one": "An neia dazua doa", + "No Monitors": "Koane Monitor do", + "Untitled Group": "A Gruppn ohne Nam", + "Services": "De Dienste", + "Discard": "Weg damit", + "Cancel": "Abbrechn", + "Installed": "Installiert", + "Not installed": "Ned installiert", + "Running": "Des lafft", + "Not running": "Des lafft ned", + "Add New Status Page": "A neie Statusseitn dazua doa", + "Slug": "Namens-Kurzl", + "Accept characters:": "De Zeichn san erlaubt:", + "wayToGetCloudflaredURL": "(Lad da Cloudflared vo {0} runter)", + "cloudflareWebsite": "Cloudflare-Netzseitn", + "Don't know how to get the token? Please read the guide:": "Woast ned, wia ma an Token kriagt? Bittschee lies da d'Anleitung durch:", + "Domain Names": "Internet-Adressn (Domains)", + "signedInDisp": "Ois {0} angmejdt", + "Show Powered By": "\"Gmocht vo\" zoagn", + "signedInDispDisabled": "D'Anmeldung is ausgschoidt.", + "RadiusSecret": "Radius-Gheimnis", + "deleteDockerHostMsg": "Bist da ganz sicher, dass den Docker-Host fia olle Monitore leschn wuist?", + "telegramSendSilentlyDescription": "Schickt de Nachricht ganz stad. De Leid kriagn a Meldung, aba ohne an Ton.", + "chatIDNotFound": "D'Chat-ID is ned gfundn worn; schreib bittschee zeascht amoi a Nachricht an den Bot", + "wayToCheckSignalURL": "Dast seng konnst, wia ma des einricht, schau da de Netzseitn o:", + "Proxy": "Proxy", + "twilloMessagingServiceSIDHelptext": "Gib dei Messaging Service SID do ei, wennst {twillo_messaging_service_help_link} hernimmsst, um d'Absender und d'Funktionen zum Verwalten", + "cellsyntOriginatortypeAlphanumeric": "A Buchstabm-Zoin-Folg (höchstns 11 Zeichn). Wer des kriagt, ko auf d'Nachricht ned antwortn.", + "cellsyntSplitLongMessages": "Lange Nachrichten in bis zu 6 Teile aufteijn. 153 x 6 = 918 Zeichn.", + "Invalid": "Des is a Schmarrn", + "User": "Benutza", + "Remove Token": "Den Token weghaun", + "Start": "Af geht's", + "No consecutive dashes": "Koane Bindestrich hintereinanda", + "startOrEndWithOnly": "Foing oder Aufhern deafs bloß mit {0}", + "statusPageSpecialSlugDesc": "Extra-Kurzl {0}: De Seitn werd zoagt, wenn ma gar nix eigebm hat", + "Next": "Weida", + "The slug is already taken. Please choose another slug.": "Des Kurzl gibt's scho. Suach da bittschee a anders aus.", + "No Proxy": "Koa Proxy", + "Authentication": "D'Anmeldung", + "HTTP Basic Auth": "HTTP Standard-Auth", + "New Status Page": "A neie Statusseitn", + "Page Not Found": "De Seitn findt ma ned", + "Reverse Proxy": "Reverse-Proxy", + "Backup": "Sicherheitskopie", + "About": "Iaba des Ganze", + "Message:": "Nachricht:", + "grpcMethodDescription": "Nam vo d'Methodn wern in camelCase umgwandelt, so wia sayHello, check, und so weida.", + "auto-select": "Automatisch aussuacha", + "Select": "Aussuacha", + "selectedMonitorCount": "{0} san ausgwählt", + "Check/Uncheck": "Ohackln oder Weglassn", + "Powered by": "Lafft mit", + "Customize": "So hiwiang wia mas braucht", + "Custom Footer": "De eigne Fuasszeijn", + "Proxies": "De Proxies", + "default": "Standard", + "enabled": "Eigschoidt", + "setAsDefault": "Ois Standard festleng", + "deleteProxyMsg": "Wuist den Proxy echt fia oisamt löschn?", + "proxyDescription": "Du muasst an Proxy scho am Monitor zuadeitn, sonst basst des ned.", + "Certificate Chain": "Da gane Rattnschwanz vo de Zertifikate", + "Valid": "Des is recht so", + "Stop": "Hoid, stop", + "HTTP Headers": "HTTP-Kopfzeijn", + "Trust Proxy": "Vertrau am Proxy", + "Other Software": "Andane Software", + "Valid To:": "Gültig bis:", + "Days Remaining:": "Tog, de no bleibm:", + "Issuer:": "Aussteller:", + "Fingerprint:": "Fingabdruck:", + "No status pages": "Koane Statusseitn do", + "For example: nginx, Apache and Traefik.": "Zum Beispui: nginx, Apache und Traefik.", + "Please read": "Bittschee lesn", + "Subject:": "Betreff:", + "Domain Name Expiry Notification": "Domain-Nam-Ablauf-Warnung", + "Add a new expiry notification day": "An neia Tog fia d'Ablauf-Meldung dazua doa", + "Remove the expiry notification": "Den Tog fia d'Ablauf-Meldung weghaun", + "Date Created": "Wann's gmocht worn is", + "Footer Text": "Da Text fia d'Fuasszeijn", + "Refresh Interval": "Wia oft nei glon werd", + "Refresh Interval Description": "De Statusseitn ladt se olle {0} Sekundn komplett nei", + "promosmsTypeEco": "SMS ECO - billig, aba lahm und oft iabalastet. Geht bloß fia Leid in Poln.", + "light": "heij", + "certHostnameMismatch": "Da Hostnama vom Zertifikat basst ned zur Monitor-URL.", + "Container Name / ID": "Container Nama / ID", + "Docker Host": "Docker-Host", + "Docker Hosts": "Docker-Hosts", + "Domain": "Domain", + "Workstation": "Oabatsplatz", + "Packet Size": "Paketgräß", + "Bot Token": "Bot-Token", + "wayToGetTelegramToken": "Da konst da a Token vo {0} hoin.", + "Chat ID": "Chat-ID", + "telegramMessageThreadID": "(Optional) Nochrichtn-Thread-ID", + "telegramSendSilently": "Stad schicka", + "wayToGetLineNotifyToken": "An Access-Token konst da vo {0} hoin", + "supportBaleChatID": "Unterstützt Direkt-Chat / Gruppn / Kanal Chat-ID", + "wayToGetBaleToken": "Da konst da a Token vo {0} hoin.", + "Home Assistant URL": "Home-Assistant URL", + "Long-Lived Access Token": "Langzeit-Zuagriffstoken", + "Notification Service": "Benachrichtigungs-Dienst", + "default: notify all devices": "Standard: Olle Gräta bscheid gem", + "Frontend Version do not match backend version!": "D'Frontend-Version basst ned zur Backend-Version zam!", + "lastDay1": "Letzda Dog im Monat", + "Event type:": "Ereignis-Typ:", + "Server Timezone": "Server-Zeitzone", + "telegramProtectContent": "Vorm Weidaschicka/Speichern schützn", + "Trigger type:": "Ausläsa-Typ:", + "endDateTime": "Enddatum/-zeid", + "warningTimezone": "Des nutzt d'Server-Zeitzone", + "weekdayShortTue": "Di", + "dayOfMonth": "Dog im Monat", + "RadiusSecretDescription": "Des gmoasame Gheimnis zwischn Client und Server", + "Coming Soon": "Kimmt boid", + "telegramUseTemplate": "A eigne Nochrichtnvorlog hernehma", + "telegramUseTemplateDescription": "Wenns eigschoid is, wead d'Nochricht mit ana eignen Vorlog vaschickt.", + "telegramServerUrl": "(Optional) Server-URL", + "supportTelegramChatID": "Unterstützt Direkt-Chat / Gruppn / Kanal Chat-ID", + "YOUR BOT TOKEN HERE": "DEIN BOT-TOKEN KIMMT DO NEI", + "disableCloudflaredNoAuthMsg": "Du bist im \"No Auth\"-Modus, do brauchts koa Passwort.", + "Automations can optionally be triggered in Home Assistant:": "Automatisierungen kinnan optional im Home Assistant ausglöst wern:", + "Frontend Version": "Frontend-Version", + "Optional": "Optional", + "backupRecommend": "Bittschee mach liaba direkt a Backup vom Volume oda vom Datnordna (./data/).", + "and": "und", + "or": "oda", + "sameAsServerTimezone": "Gleich wia d'Server-Zeitzone", + "startDateTime": "Startdatum/-zeid", + "weekdayShortSun": "So", + "dayOfWeek": "Wochadog", + "weekdayShortMon": "Mo", + "weekdayShortWed": "Mi", + "lastDay": "Letzda Dog", + "lastDay2": "Vorletzda Dog im Monat", + "lastDay3": "Drittletzda Dog im Monat", + "lastDay4": "Viertletzda Dog im Monat", + "No Maintenance": "Koa Wartung", + "maintenanceStatus-unknown": "Unbekannt", + "Display Timezone": "Zeitzone ozoang", + "statusPageMaintenanceEndDate": "Ende", + "IconUrl": "Icon-URL", + "pauseMaintenanceMsg": "Bist da sicha, dassd pausiern wuisd?", + "maintenanceStatus-under-maintenance": "Werd grod gwart", + "maintenanceStatus-inactive": "Inaktiv", + "maintenanceStatus-scheduled": "Eiplant", + "maintenanceStatus-ended": "Beendt", + "weekdayShortSat": "Sa", + "RadiusCalledStationIdDescription": "D'Kennung vo da ogruafna Station", + "RadiusCalledStationId": "D'Kennung vo da ogruafna Station", + "RadiusCallingStationIdDescription": "D'Kennung vom ogruafna Grät", + "RadiusCallingStationId": "D'Kennung vo da oruafandn Station", + "Certificate Expiry Notification": "Meldung, dass s'Zertifikat oblafft", + "API Username": "API-Benutzanama", + "API Key": "API-Schlissl", + "Show update if available": "Zoag s'Update o, wenns oans gibt", + "Also check beta release": "Schau a noch da Beta-Version", + "Using a Reverse Proxy?": "Vawendst an Reverse Proxy?", + "Check how to config it for WebSocket": "Schau noch, wiasd des fia WebSocket eistellst", + "Steam Game Server": "Steam Spui-Server", + "Most likely causes:": "De wahrscheinlichtsn Gründ:", + "The resource is no longer available.": "De Ressource is nimmer do.", + "There might be a typing error in the address.": "Es kunnt a Tippfehler in da Adress sei.", + "What you can try:": "Wosd probiern kannst:", + "Retype the address.": "Schreib d'Adress nomoi nei.", + "Go back to the previous page.": "Geh zruck zur vorign Seitn.", + "noDockerHostMsg": "Ned vafügbar. Richt zerscht amoi an Docker Host ei.", + "DockerHostRequired": "Bittschee stej an Docker Host fia den Monitor ei.", + "Connection String": "Vabindungszeichenfoig", + "Query": "Obfrog", + "settingsCertificateExpiry": "Oblauf vom TLS-Zertifikat", + "certificationExpiryDescription": "HTTPS-Monitore gem Bscheid, wenn s'TLS-Zertifikat oblafft in:", + "Setup Docker Host": "Docker Host eirichtn", + "Connection Type": "Vabindungstyp", + "Docker Daemon": "Docker-Daemon", + "socket": "Socket", + "tcp": "TCP / HTTP", + "Docker Container": "Docker-Container", + "cronExpression": "Cron-Ausdruck", + "cronSchedule": "Zeidplan: ", + "invalidCronExpression": "Unguiltiga Cron-Ausdruck: {0}", + "recurringInterval": "Intervall", + "Recurring": "Wiedakehrend", + "strategyManual": "Händisch Aktiv/Inaktiv", + "Enable DNS Cache": "(Vaoited) DNS-Cache fia HTTP(s)-Monitore eischoidn", + "Disable": "Ausschoidn", + "Enable": "Eischoidn", + "Examples": "Beispui", + "Event data:": "Ereignis-Datn:", + "weekdayShortThu": "Do", + "weekdayShortFri": "Fr" } From ba98e5a4e98338b4f86039464d8387294cfc1fe6 Mon Sep 17 00:00:00 2001 From: Cyril59310 Date: Tue, 23 Dec 2025 18:00:17 +0000 Subject: [PATCH 84/91] Translated using Weblate (French) Currently translated at 100.0% (1239 of 1239 strings) Co-authored-by: Cyril59310 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/fr-FR.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 519de556..4226212e 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -1283,5 +1283,9 @@ "Unable to get permission to notify": "Impossible d’obtenir l’autorisation de notification (la demande a été refusée ou ignorée).", "showOnlyLastHeartbeat": "Afficher uniquement la dernière vérification", "minimumIntervalWarning": "Des intervalles inférieurs à 20 secondes peuvent entraîner de mauvaises performances.", - "lowIntervalWarning": "Êtes-vous sûr de vouloir définir l’intervalle en dessous de 20 secondes ? Les performances pourraient être dégradées, en particulier s’il y a un grand nombre de sondes." + "lowIntervalWarning": "Êtes-vous sûr de vouloir définir l’intervalle en dessous de 20 secondes ? Les performances pourraient être dégradées, en particulier s’il y a un grand nombre de sondes.", + "domainExpiryDescription": "Déclencher une notification lorsque le nom de domaine expire dans :", + "settingsDomainExpiry": "Expiration du domaine", + "labelDomainExpiry": "Expiration du domaine.", + "labelDomainNameExpiryNotification": "Notification d’expiration du nom de domaine" } From 7881da76c80f1c0345459666f9fc92a1b562f842 Mon Sep 17 00:00:00 2001 From: Gringo Date: Tue, 23 Dec 2025 18:00:17 +0000 Subject: [PATCH 85/91] Translated using Weblate (Italian) Currently translated at 100.0% (1239 of 1239 strings) Co-authored-by: Gringo Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/it-IT.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index f8d9dba7..54425866 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -1262,5 +1262,9 @@ "Done.best IoT Protocol": "Fatto. Il miglior protocollo IoT", "Collection Update": "Sottoprotocollo Websocket di aggiornamento della raccolta", "Text IRC Protocol": "Protocollo IRC di testo", - "Binary IRC Protocol": "Protocollo IRC binario" + "Binary IRC Protocol": "Protocollo IRC binario", + "labelDomainExpiry": "Scad. dominio", + "labelDomainNameExpiryNotification": "Notifica scadenza del nome di dominio", + "settingsDomainExpiry": "Scadenza del dominio", + "domainExpiryDescription": "Attiva la notifica quando i nomi di dominio scadono in:" } From 1aacf3e6919fd1f77b1800b4a6fdc01b56cd9a8d Mon Sep 17 00:00:00 2001 From: Aluisio Date: Tue, 23 Dec 2025 18:00:17 +0000 Subject: [PATCH 86/91] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1239 of 1239 strings) Co-authored-by: Aluisio Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/pt-BR.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 936464ef..6d21d092 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -1247,5 +1247,9 @@ "certHostnameMismatch": "O nome do host do certificado não corresponde ao URL do monitor.", "Webpush Helptext": "A notificação push na web funciona apenas com conexões SSL (HTTPS). Em dispositivos iOS, a página da web precisa ser adicionada à tela inicial previamente.", "minimumIntervalWarning": "Intervalos abaixo de 20 segundos podem resultar em desempenho ruim.", - "lowIntervalWarning": "Tem certeza de que deseja definir o valor do intervalo abaixo de 20 segundos? O desempenho pode ser degradado, especialmente se houver um grande número de monitores." + "lowIntervalWarning": "Tem certeza de que deseja definir o valor do intervalo abaixo de 20 segundos? O desempenho pode ser degradado, especialmente se houver um grande número de monitores.", + "labelDomainExpiry": "Exp. Domínio", + "labelDomainNameExpiryNotification": "Notificação de expiração de nome de domínio", + "settingsDomainExpiry": "Expiração do domínio", + "domainExpiryDescription": "Acionar notificação quando os nomes de domínio expirarem em:" } From 46b6d660bb926aed78bdf5e9f9663051640b2967 Mon Sep 17 00:00:00 2001 From: Virenbar Date: Tue, 23 Dec 2025 18:00:17 +0000 Subject: [PATCH 87/91] Translated using Weblate (Russian) Currently translated at 100.0% (1239 of 1239 strings) Co-authored-by: Virenbar Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index b214792a..2f6fc013 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -1291,5 +1291,9 @@ "Penguin Statistics Live Protocol v3": "Протокол Penguin Statistics Live v3 (кодирование Protobuf)", "certHostnameMismatch": "Имя хоста сертификата не соответствует URL-адресу монитора.", "minimumIntervalWarning": "Интервалы менее 20 секунд могут привести к снижению производительности.", - "lowIntervalWarning": "Вы уверены, что хотите установить значение интервала меньше 20 секунд? Производительность может снизиться, особенно при наличии большого количества мониторов." + "lowIntervalWarning": "Вы уверены, что хотите установить значение интервала меньше 20 секунд? Производительность может снизиться, особенно при наличии большого количества мониторов.", + "domainExpiryDescription": "Отправлять уведомление при истечении срока действия доменных имён через:", + "settingsDomainExpiry": "Истечение срока действия домена", + "labelDomainExpiry": "Срок действия домена", + "labelDomainNameExpiryNotification": "Уведомление об истечении срока действия доменного имени" } From 4ed78c649a1bb8d2ac36249fd6fd273dd8860efb Mon Sep 17 00:00:00 2001 From: d Date: Tue, 23 Dec 2025 18:00:17 +0000 Subject: [PATCH 88/91] Translated using Weblate (Catalan) Currently translated at 51.3% (636 of 1239 strings) Co-authored-by: d Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ca.json | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lang/ca.json b/src/lang/ca.json index 2a1a5d29..fffe9781 100644 --- a/src/lang/ca.json +++ b/src/lang/ca.json @@ -615,7 +615,7 @@ "tagNameExists": "Ja existeix una etiqueta del sistema amb aquest nom. Seleccioneu-la de la llista o utilitzeu un nom diferent.", "high": "alt", "defaultFriendlyName": "Nou monitor", - "descriptionHelpText": "Es mostra al tauler intern. S’admet l’ús de Markdown i s’aplica una neteja segura (es conserven els espais i la sagnia) abans de mostrar-se.", + "descriptionHelpText": "Es mostra al tauler intern. S’admet l’ús de Markdown i s’aplica una neteja segura (es conserven els espais i la sagría) abans de mostrar-se.", "Clear All Events": "Neteja tots els esdeveniments", "Could not clear events": "No s'han pogut netejar {failed}/{total} esdeveniments", "invertKeywordDescription": "Busca que la paraula clau no hi sigui present, en lloc de que hi sigui.", @@ -625,7 +625,7 @@ "octopushLogin": "Nom d’usuari de les credencials de l’API HTTP al tauler de control.", "promosmsLogin": "Nom d’inici de sessió de l’API", "promosmsPassword": "Contrasenya de l’API", - "supportBaleChatID": "Admet xat directe, grups i ID de canals de xat.", + "supportBaleChatID": "Admet Xat Directe / Grups / ID de xat del canal", "wayToGetBaleChatID": "Pots obtenir el teu ID de xat enviant un missatge al bot i anant a aquesta URL per veure el chat_id:", "wayToGetBaleToken": "Pots obtenir un token des de {0}.", "Events cleared successfully": "Els esdeveniments s'han esborrat correctament.", @@ -633,7 +633,23 @@ "clearAllEventsMsg": "Esteu segur que voleu suprimir tots els esdeveniments?", "endpoint": "endpoint", "keywordDescription": "Cerca paraules clau en HTML pla o en resposta JSON. La cerca distingeix entre majúscules i minúscules.", - "jsonQueryDescription": "Analitza i extreu dades específiques de la resposta JSON del servidor mitjançant una JSON query, o bé utilitza “$” per mostrar la resposta en cru si no s’espera un JSON.\nEl resultat es compara amb el valor esperat com a cadenes de text. Consulta {0} per veure la documentació i fes servir {1} per provar consultes.", + "jsonQueryDescription": "Analitza i extreu dades específiques de la resposta JSON del servidor mitjançant una JSON query, o bé utilitza “$” per mostrar la resposta en cru si no s’espera un JSON. El resultat es compara amb el valor esperat com a cadenes de text. Consulta {0} per veure la documentació i fes servir {1} per provar consultes.", "auto-select": "Selecció Automàtica", - "backupDescription2": "Nota: les dades d’historial i d’esdeveniments no estan incloses." + "backupDescription2": "Nota: les dades d’historial i d’esdeveniments no estan incloses.", + "ignoreSecWebsocketAcceptHeaderDescription": "Permet que el servidor no respongui amb la capçalera Sec-WebSocket-Accept si l'actualització de websocket té èxit.", + "Advanced Message Queuing Protocol": "Protocol avançat de cues de missatges (AMQP) 1.0+", + "Miele Cloud Connect Protocol": "Protocol de connexió al núvol de Miele", + "Ignore Sec-WebSocket-Accept header": "Ignora la capçalera de {0}", + "wsSubprotocolDescription": "Per obtenir més informació sobre els subprotocols, consulteu la {documentació} si us plau", + "WebSocket Application Messaging Protocol": "WAMP (Protocol de missatgeria d'aplicacions WebSocket)", + "Session Initiation Protocol": "Transport WebSocket per a SIP (Protocol d'inici de sessió)", + "Network API for Notification Channel": "API de xarxa RESTful OMA per al canal de notificació", + "Web Process Control Protocol": "Protocol de control de processos web (WPCP)", + "jsflow": "Protocol de pubsub/cua de jsFlow", + "Reverse Web Process Control": "Protocol de control de processos web invers (RWPCP)", + "Extensible Messaging and Presence Protocol": "Transport WebSocket per al protocol extensible de missatgeria i presència (XMPP)", + "Smart Home IP": "SHIP - IP de la llar intel·ligent", + "Push Channel Protocol": "Protocol de canal push", + "Message Session Relay Protocol": "Transport WebSocket per a MSRP (Protocol de retransmissió de sessions de missatges)", + "Binary Floor Control Protocol": "Transport WebSocket per a BFCP (Protocol de control de planta binària)" } From d2496680e6174305761fbeb4e3138c36e3036f5e Mon Sep 17 00:00:00 2001 From: Marco Date: Tue, 23 Dec 2025 18:00:17 +0000 Subject: [PATCH 89/91] Translated using Weblate (German) Currently translated at 100.0% (1239 of 1239 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1239 of 1239 strings) Co-authored-by: Marco Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-CH.json | 6 +++++- src/lang/de-DE.json | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lang/de-CH.json b/src/lang/de-CH.json index 2bfa0fba..8bf99b3c 100644 --- a/src/lang/de-CH.json +++ b/src/lang/de-CH.json @@ -1280,5 +1280,9 @@ "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protokoll v3 (Protobuf encoding)", "Webpush Helptext": "Web-Push funktioniert nur mit SSL-Verbindungen (HTTPS). Bei iOS-Geräten muss die Webseite zuvor zum Startbildschirm hinzugefügt werden.", "minimumIntervalWarning": "Intervalle unter 20 Sekunden können zu einer schlechten Leistung führen.", - "lowIntervalWarning": "Möchtest du den Intervallwert wirklich auf unter 20 Sekunden einstellen? Dies kann zu Leistungseinbussen führen, insbesondere wenn eine grosse Anzahl von Monitoren vorhanden ist." + "lowIntervalWarning": "Möchtest du den Intervallwert wirklich auf unter 20 Sekunden einstellen? Dies kann zu Leistungseinbussen führen, insbesondere wenn eine grosse Anzahl von Monitoren vorhanden ist.", + "settingsDomainExpiry": "Ablauf der Domain", + "labelDomainExpiry": "Ablauf der Domain", + "labelDomainNameExpiryNotification": "Benachrichtigung zum Ablauf des Domainnamens", + "domainExpiryDescription": "Benachrichtigung auslösen, wenn Domainnamen abläuft. In:" } diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index e86b52ac..c9a35286 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -1283,5 +1283,9 @@ "Binary IRC Protocol": "Binary IRC Protocol", "Penguin Statistics Live Protocol v3": "Penguin Statistics Live Protocol v3 (Protobuf-Kodierung)", "minimumIntervalWarning": "Intervalle unter 20 Sekunden können die Leistung beeinträchtigen.", - "lowIntervalWarning": "Möchtest du das Intervall wirklich auf unter 20 Sekunden setzen? Die Leistung kann beeinträchtigt werden, insbesondere bei vielen Monitoren." + "lowIntervalWarning": "Möchtest du das Intervall wirklich auf unter 20 Sekunden setzen? Die Leistung kann beeinträchtigt werden, insbesondere bei vielen Monitoren.", + "labelDomainExpiry": "Ablauf der Domain", + "domainExpiryDescription": "Benachrichtigung auslösen, wenn Domainnamen abläuft. In:", + "settingsDomainExpiry": "Ablauf der Domain", + "labelDomainNameExpiryNotification": "Benachrichtigung zum Ablauf des Domainnamens" } From ff0b2ac1e2597c36cbb935a311fa756b880812eb Mon Sep 17 00:00:00 2001 From: Unai Tolosa Pontesta Date: Tue, 23 Dec 2025 18:00:17 +0000 Subject: [PATCH 90/91] Translated using Weblate (Basque) Currently translated at 57.4% (712 of 1239 strings) Co-authored-by: Unai Tolosa Pontesta Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/eu/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/eu.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lang/eu.json b/src/lang/eu.json index 306c9735..045ed8b8 100644 --- a/src/lang/eu.json +++ b/src/lang/eu.json @@ -746,5 +746,7 @@ "templateStatus": "egoera", "webhookBodyCustomOption": "Pertsonalizatutako mezu gorputza", "telegramSendSilentlyDescription": "Bidali mezuak isilik. Erabiltzaileak soinurik gabeko jakinarazpena jasoko du.", - "setupDatabaseMariaDB": "Konektatu kanpo MariaDB datu base batekin. Datu base konexioaren informazioa ezarri behar da." + "setupDatabaseMariaDB": "Konektatu kanpo MariaDB datu base batekin. Datu base konexioaren informazioa ezarri behar da.", + "Json Query Expression": "Json Query espresioa", + "ignoredTLSError": "TLS/SSL erroreei ezikusiarena eginda" } From e15d7a9a2e9ae12acb92b2fc66cc868feb5128ea Mon Sep 17 00:00:00 2001 From: PoleTransformer <78999213+PoleTransformer@users.noreply.github.com> Date: Wed, 24 Dec 2025 16:58:59 +0000 Subject: [PATCH 91/91] Show Websocket URL --- src/pages/Details.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/Details.vue b/src/pages/Details.vue index db0a890d..a1d1bb9d 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -30,7 +30,8 @@ monitor.type === 'keyword' || monitor.type === 'json-query' || monitor.type === 'mp-health' || - monitor.type === 'real-browser' + monitor.type === 'real-browser' || + monitor.type === 'websocket-upgrade' " :href="monitor.url" target="_blank"