From 2625cbe0d2eda6a7ea7ee203a27a5b00bc4fbe91 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sat, 2 Oct 2021 14:43:31 +0800 Subject: [PATCH 001/104] add script for downloading the dist files from github --- .dockerignore | 2 +- .gitignore | 1 + extra/download-dist.js | 57 ++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 1 + package.json | 4 ++- 5 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 extra/download-dist.js diff --git a/.dockerignore b/.dockerignore index 539e9328..9aa6ba32 100644 --- a/.dockerignore +++ b/.dockerignore @@ -27,7 +27,7 @@ CNAME install.sh SECURITY.md tsconfig.json - +/tmp ### .gitignore content (commented rules are duplicated) diff --git a/.gitignore b/.gitignore index 2bf60f7c..0863015d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ dist-ssr /private /out +/tmp diff --git a/extra/download-dist.js b/extra/download-dist.js new file mode 100644 index 00000000..0a08b7f9 --- /dev/null +++ b/extra/download-dist.js @@ -0,0 +1,57 @@ +console.log("Downloading dist"); +const https = require("https"); +const tar = require("tar"); + +const packageJSON = require("../package.json"); +const fs = require("fs"); +const version = packageJSON.version; + +const filename = "dist.tar.gz"; + +const url = `https://github.com/louislam/uptime-kuma/releases/download/${version}/${filename}`; +download(url); + +function download(url) { + console.log(url); + + https.get(url, (response) => { + if (response.statusCode === 200) { + console.log("Extracting dist..."); + + if (fs.existsSync("./dist")) { + + if (fs.existsSync("./dist-backup")) { + fs.rmdirSync("./dist-backup", { + recursive: true + }); + } + + fs.renameSync("./dist", "./dist-backup"); + } + + const tarStream = tar.x({ + cwd: "./", + }); + + tarStream.on("close", () => { + fs.rmdirSync("./dist-backup", { + recursive: true + }); + console.log("Done"); + }); + + tarStream.on("error", () => { + if (fs.existsSync("./dist-backup")) { + fs.renameSync("./dist-backup", "./dist"); + } + console.log("Done"); + }); + + response.pipe(tarStream); + } else if (response.statusCode === 302) { + download(response.headers.location); + } else { + console.log("dist not found"); + } + }); +} diff --git a/package-lock.json b/package-lock.json index 34615b9d..60f9a7bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,6 +40,7 @@ "redbean-node": "0.1.2", "socket.io": "~4.2.0", "socket.io-client": "~4.2.0", + "tar": "^6.1.11", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", "timezones-list": "~3.0.1", diff --git a/package.json b/package.json index 17bfe975..cf22cd99 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,8 @@ "build-docker-nightly-alpine": "docker buildx build -f dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly-alpine --target nightly . --push", "build-docker-nightly-amd64": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", "upload-artifacts": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain", - "setup": "git checkout 1.7.3 && npm install --legacy-peer-deps && node node_modules/esbuild/install.js && npm run build && npm prune", + "setup": "git checkout 1.7.3 && npm ci --production && npm run download-dist", + "download-dist": "node extra/download-dist.js", "update-version": "node extra/update-version.js", "mark-as-nightly": "node extra/mark-as-nightly.js", "reset-password": "node extra/reset-password.js", @@ -77,6 +78,7 @@ "redbean-node": "0.1.2", "socket.io": "~4.2.0", "socket.io-client": "~4.2.0", + "tar": "^6.1.11", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", "timezones-list": "~3.0.1", From 3f0b85e5a88d65e88b7df138ae237e7cd90dbd41 Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Sat, 2 Oct 2021 16:48:27 +0200 Subject: [PATCH 002/104] feat(http-requests): add support for methods, body and headers for http --- ...h-http-monitor-method-body-and-headers.sql | 13 +++ server/database.js | 1 + server/model/monitor.js | 37 +++++++- server/server.js | 6 ++ src/assets/app.scss | 6 +- src/assets/multiselect.scss | 2 +- src/components/HeartbeatBar.vue | 2 +- src/pages/EditMonitor.vue | 84 ++++++++++++++++++- 8 files changed, 144 insertions(+), 7 deletions(-) create mode 100644 db/patch-http-monitor-method-body-and-headers.sql diff --git a/db/patch-http-monitor-method-body-and-headers.sql b/db/patch-http-monitor-method-body-and-headers.sql new file mode 100644 index 00000000..dc2526b4 --- /dev/null +++ b/db/patch-http-monitor-method-body-and-headers.sql @@ -0,0 +1,13 @@ +-- You should not modify if this have pushed to Github, unless it does serious wrong with the db. +BEGIN TRANSACTION; + +ALTER TABLE monitor + ADD method TEXT default 'GET' not null; + +ALTER TABLE monitor + ADD body TEXT default null; + +ALTER TABLE monitor + ADD headers TEXT default null; + +COMMIT; diff --git a/server/database.js b/server/database.js index 47eca283..297df655 100644 --- a/server/database.js +++ b/server/database.js @@ -49,6 +49,7 @@ class Database { "patch-incident-table.sql": true, "patch-group-table.sql": true, "patch-monitor-push_token.sql": true, + "patch-http-monitor-method-body-and-headers.sql": true, } /** diff --git a/server/model/monitor.js b/server/model/monitor.js index c551fa7d..dc95753d 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -53,6 +53,9 @@ class Monitor extends BeanModel { id: this.id, name: this.name, url: this.url, + method: this.method, + body: this.body, + headers: this.headers, hostname: this.hostname, port: this.port, maxretries: this.maxretries, @@ -95,6 +98,31 @@ class Monitor extends BeanModel { return JSON.parse(this.accepted_statuscodes_json); } + /** + * Convert header string into an object: + * eg: + * + * Authorization: Basic + * Content-Type: application/json + * + * into + * + * { + * "Authorization": "Basic ", + * "Content-Type": "application/json" + * } + **/ + getParsedHeaders() { + if (!this.headers || !this.headers.includes(":")) { + return {}; + } + return Object.fromEntries(this.headers.split("\n").map(header => { + const trimmedHeader = header.trim(); + const firstColonIndex = trimmedHeader.indexOf(":"); + return [trimmedHeader.slice(0, firstColonIndex), trimmedHeader.slice(firstColonIndex + 1) || ""]; + }).filter(arr => !!arr[0] && !!arr[1])); + } + start(io) { let previousBeat = null; let retries = 0; @@ -136,11 +164,15 @@ class Monitor extends BeanModel { // Do not do any queries/high loading things before the "bean.ping" let startTime = dayjs().valueOf(); - let res = await axios.get(this.url, { + const options = { + url: this.url, + method: (this.method || "get").toLowerCase(), + ...(this.body ? { data: JSON.parse(this.body) } : {}), timeout: this.interval * 1000 * 0.8, headers: { "Accept": "*/*", "User-Agent": "Uptime-Kuma/" + version, + ...this.getParsedHeaders(), }, httpsAgent: new https.Agent({ maxCachedSessions: 0, // Use Custom agent to disable session reuse (https://github.com/nodejs/node/issues/3940) @@ -150,7 +182,8 @@ class Monitor extends BeanModel { validateStatus: (status) => { return checkStatusCode(status, this.getAcceptedStatuscodes()); }, - }); + }; + let res = await axios.request(options); bean.msg = `${res.status} - ${res.statusText}`; bean.ping = dayjs().valueOf() - startTime; diff --git a/server/server.js b/server/server.js index 0fbe8325..6d1a939f 100644 --- a/server/server.js +++ b/server/server.js @@ -505,6 +505,9 @@ exports.entryPage = "dashboard"; bean.name = monitor.name; bean.type = monitor.type; bean.url = monitor.url; + bean.method = monitor.method; + bean.body = monitor.body; + bean.headers = monitor.headers; bean.interval = monitor.interval; bean.retryInterval = monitor.retryInterval; bean.hostname = monitor.hostname; @@ -1028,6 +1031,9 @@ exports.entryPage = "dashboard"; name: monitorListData[i].name, type: monitorListData[i].type, url: monitorListData[i].url, + method: monitorListData[i].method || "GET", + body: monitorListData[i].body, + headers: monitorListData[i].headers, interval: monitorListData[i].interval, retryInterval: retryInterval, hostname: monitorListData[i].hostname, diff --git a/src/assets/app.scss b/src/assets/app.scss index 34a4560c..fdb57b43 100644 --- a/src/assets/app.scss +++ b/src/assets/app.scss @@ -14,6 +14,10 @@ h2 { font-size: 26px; } +textarea.form-control { + border-radius: 19px; +} + ::-webkit-scrollbar { width: 10px; } @@ -413,4 +417,4 @@ h2 { // Localization -@import "localization.scss"; \ No newline at end of file +@import "localization.scss"; diff --git a/src/assets/multiselect.scss b/src/assets/multiselect.scss index 30023076..53b47c16 100644 --- a/src/assets/multiselect.scss +++ b/src/assets/multiselect.scss @@ -21,7 +21,7 @@ } .multiselect__tag { - border-radius: 50rem; + border-radius: $border-radius; margin-bottom: 0; padding: 6px 26px 6px 10px; background: $primary !important; diff --git a/src/components/HeartbeatBar.vue b/src/components/HeartbeatBar.vue index 4dc2c712..e62b95df 100644 --- a/src/components/HeartbeatBar.vue +++ b/src/components/HeartbeatBar.vue @@ -186,7 +186,7 @@ export default { .beat { display: inline-block; background-color: $primary; - border-radius: 50rem; + border-radius: $border-radius; &.empty { background-color: aliceblue; diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 96f221e8..e63f4986 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -44,6 +44,46 @@ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
@@ -285,6 +325,18 @@ export default { pushURL() { return this.$root.baseURL + "/api/push/" + this.monitor.pushToken + "?msg=OK&ping="; + }, + + bodyPlaceholder() { + return `{ + "id": 124357, + "username": "admin", + "password": "myAdminPassword" +}`; + }, + + headersPlaceholder() { + return "Authorization: Bearer abc123\nContent-Type: application/json"; } }, @@ -295,7 +347,7 @@ export default { }, "monitor.interval"(value, oldValue) { - // Link interval and retryInerval if they are the same value. + // Link interval and retryInterval if they are the same value. if (this.monitor.retryInterval === oldValue) { this.monitor.retryInterval = value; } @@ -349,6 +401,7 @@ export default { type: "http", name: "", url: "https://", + method: "GET", interval: 60, retryInterval: this.interval, maxretries: 0, @@ -383,9 +436,32 @@ export default { }, + isInputValid() { + if (this.monitor.body) { + try { + JSON.parse(this.monitor.body); + } catch (err) { + toast.error(this.$t("The request body is not valid json: ") + err.message); + return false; + } + } + if (this.monitor.headers) { + if (!/^([^:]+:.*)([\s]+[^:]+:.*)+$/g.test(this.monitor.headers)) { + toast.error(this.$t("Headers do not have a valid format: \"key: valuekey: value...\"")); + return false; + } + } + return true; + }, + async submit() { this.processing = true; + if (!this.isInputValid()) { + this.processing = false; + return; + } + if (this.isAdd) { this.$root.add(this.monitor, async (res) => { @@ -422,8 +498,12 @@ export default { }; - From d3517e76c1a73f3623d22f2caecf127d1926caa5 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 3 Oct 2021 15:27:15 +0800 Subject: [PATCH 003/104] change to npm ci --- dockerfile | 2 +- dockerfile-alpine | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dockerfile b/dockerfile index 969d5ff3..3746722f 100644 --- a/dockerfile +++ b/dockerfile @@ -2,7 +2,7 @@ FROM louislam/uptime-kuma:base-debian AS build WORKDIR /app COPY . . -RUN npm install --legacy-peer-deps && \ +RUN npm ci && \ npm run build && \ npm prune --production && \ chmod +x /app/extra/entrypoint.sh diff --git a/dockerfile-alpine b/dockerfile-alpine index 178afcab..8cbfbe23 100644 --- a/dockerfile-alpine +++ b/dockerfile-alpine @@ -2,7 +2,7 @@ FROM louislam/uptime-kuma:base-alpine AS build WORKDIR /app COPY . . -RUN npm install --legacy-peer-deps && \ +RUN npm ci && \ npm run build && \ npm prune --production && \ chmod +x /app/extra/entrypoint.sh From 7ee89fab5c19dc9acc11a041b3abd03fe934d03b Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Mon, 4 Oct 2021 11:29:43 +0200 Subject: [PATCH 004/104] fix(edit-monitor): Make json capitalised Co-authored-by: Adam Stachowicz --- src/pages/EditMonitor.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index e63f4986..30cf1da0 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -441,7 +441,7 @@ export default { try { JSON.parse(this.monitor.body); } catch (err) { - toast.error(this.$t("The request body is not valid json: ") + err.message); + toast.error(this.$t("The request body is not valid JSON: ") + err.message); return false; } } From afeb424dc05b45586967edb6ea9f2ec429b6a2ad Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Tue, 5 Oct 2021 09:20:24 +0200 Subject: [PATCH 005/104] fix(edit-monitor): add translations to en.js --- src/languages/en.js | 8 ++++++++ src/pages/EditMonitor.vue | 14 +++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/languages/en.js b/src/languages/en.js index 46298b01..db3928da 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -195,4 +195,12 @@ export default { "pushbullet": "Pushbullet", "line": "Line Messenger", "mattermost": "Mattermost", + Method: "Method", + Body: "Body", + Headers: "Headers", + PushUrl: "Push URL", + HeadersInvalidFormat: "Headers do not have a valid format: \"key: value key: value ...\"", + BodyInvalidFormat: "The request body is not valid JSON: ", + BodyPlaceholder: "{\n\t\"id\": 124357,\n\t\"username\": \"admin\",\n\t\"password\": \"myAdminPassword\"\n}", + HeadersPlaceholder: "Authorization: Bearer abc123\nContent-Type: application/json", }; diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 30cf1da0..df3b211f 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -86,7 +86,7 @@
- +
You should call this url every {{ monitor.interval }} seconds.
@@ -328,15 +328,11 @@ export default { }, bodyPlaceholder() { - return `{ - "id": 124357, - "username": "admin", - "password": "myAdminPassword" -}`; + return this.$t("BodyPlaceholder"); }, headersPlaceholder() { - return "Authorization: Bearer abc123\nContent-Type: application/json"; + return this.$t("HeadersPlaceholder"); } }, @@ -441,13 +437,13 @@ export default { try { JSON.parse(this.monitor.body); } catch (err) { - toast.error(this.$t("The request body is not valid JSON: ") + err.message); + toast.error(this.$t("BodyInvalidFormat") + err.message); return false; } } if (this.monitor.headers) { if (!/^([^:]+:.*)([\s]+[^:]+:.*)+$/g.test(this.monitor.headers)) { - toast.error(this.$t("Headers do not have a valid format: \"key: valuekey: value...\"")); + toast.error(this.$t("HeadersInvalidFormat")); return false; } } From a0ffa42b42ea2ecd4408c0fa94aaddc50994f31b Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Tue, 5 Oct 2021 18:21:31 +0200 Subject: [PATCH 006/104] fix(translations): add translations for method body and headers to dutch --- src/languages/nl-NL.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/languages/nl-NL.js b/src/languages/nl-NL.js index 5fa9d4e1..af08bfc7 100644 --- a/src/languages/nl-NL.js +++ b/src/languages/nl-NL.js @@ -179,4 +179,12 @@ export default { "Add a monitor": "Add a monitor", "Edit Status Page": "Edit Status Page", "Go to Dashboard": "Go to Dashboard", + Method: "Methode", + Body: "Body", + Headers: "Headers", + PushUrl: "Push URL", + HeadersInvalidFormat: "Headers hebben een incorrect formaat: \"key: waarde key: waarde ...\"", + BodyInvalidFormat: "De request body is geen geldige JSON: ", + BodyPlaceholder: "{\n\t\"id\": 124357,\n\t\"gebruikersnaam\": \"admin\",\n\t\"wachtwoord\": \"mijnAdminWachtwoord\"\n}", + HeadersPlaceholder: "Authorization: Bearer abc123\nContent-Type: application/json", }; From c3c273f9df86a7f1c17dfa827afb455c9d61381b Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Sat, 9 Oct 2021 11:20:33 +0200 Subject: [PATCH 007/104] fix(edit-monitor): fix regex to allow a single header --- src/pages/EditMonitor.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 96448c6d..852a266f 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -442,7 +442,7 @@ export default { } } if (this.monitor.headers) { - if (!/^([^:]+:.*)([\s]+[^:]+:.*)+$/g.test(this.monitor.headers)) { + if (!/^([^:]+:.*)([\s]+[^:]+:.*)*$/g.test(this.monitor.headers)) { toast.error(this.$t("HeadersInvalidFormat")); return false; } From b8093e909b764ebc48573a2e57ed39eb6e3127f3 Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Sat, 9 Oct 2021 11:38:12 +0200 Subject: [PATCH 008/104] fix(edit-monitor): fix minification of translations containing { } --- src/languages/en.js | 5 ++--- src/languages/nl-NL.js | 2 +- src/pages/EditMonitor.vue | 10 ++++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/languages/en.js b/src/languages/en.js index 8b1c28d3..7871f0fe 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -277,17 +277,16 @@ export default { promosmsTypeEco: "SMS ECO - cheap but slow and often overloaded. Limited only to Polish recipients.", promosmsTypeFlash: "SMS FLASH - Message will automatically show on recipient device. Limited only to Polish recipients.", promosmsTypeFull: "SMS FULL - Premium tier of SMS, You can use Your Sender Name (You need to register name first). Reliable for alerts.", - promosmsTypeFull: "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).", + promosmsTypeSpeed: "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).", promosmsPhoneNumber: "Phone number (for Polish recipient You can skip area codes)", promosmsSMSSender: "SMS Sender Name : Pre-registred name or one of defaults: InfoSMS, SMS Info, MaxSMS, INFO, SMS", // End notification form - "Status Page": "Status Page", Method: "Method", Body: "Body", Headers: "Headers", PushUrl: "Push URL", HeadersInvalidFormat: "Headers do not have a valid format: \"key: value key: value ...\"", BodyInvalidFormat: "The request body is not valid JSON: ", - BodyPlaceholder: "{\n\t\"id\": 124357,\n\t\"username\": \"admin\",\n\t\"password\": \"myAdminPassword\"\n}", + BodyPlaceholder: "{\n\t\"id\": 124357,\n\t\"username\": \"admin\",\n\t\"password\": \"myAdminPassword\"\n}", HeadersPlaceholder: "Authorization: Bearer abc123\nContent-Type: application/json", }; diff --git a/src/languages/nl-NL.js b/src/languages/nl-NL.js index a9e8f6a3..33d84cd5 100644 --- a/src/languages/nl-NL.js +++ b/src/languages/nl-NL.js @@ -204,6 +204,6 @@ export default { PushUrl: "Push URL", HeadersInvalidFormat: "Headers hebben een incorrect formaat: \"key: waarde key: waarde ...\"", BodyInvalidFormat: "De request body is geen geldige JSON: ", - BodyPlaceholder: "{\n\t\"id\": 124357,\n\t\"gebruikersnaam\": \"admin\",\n\t\"wachtwoord\": \"mijnAdminWachtwoord\"\n}", + BodyPlaceholder: "{\n\t\"id\": 124357,\n\t\"gebruikersnaam\": \"admin\",\n\t\"wachtwoord\": \"mijnAdminWachtwoord\"\n}", HeadersPlaceholder: "Authorization: Bearer abc123\nContent-Type: application/json", }; diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 852a266f..5074dab9 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -328,11 +328,11 @@ export default { }, bodyPlaceholder() { - return this.$t("BodyPlaceholder"); + return this.decodeHtml(this.$t("BodyPlaceholder")); }, headersPlaceholder() { - return this.$t("HeadersPlaceholder"); + return this.decodeHtml(this.$t("HeadersPlaceholder")); } }, @@ -490,6 +490,12 @@ export default { addedNotification(id) { this.monitor.notificationIDList[id] = true; }, + + decodeHtml(html) { + const txt = document.createElement("textarea"); + txt.innerHTML = html; + return txt.value; + } }, }; From d71d27220be2bc9832f8a5860172bce32ca9191c Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Sat, 9 Oct 2021 12:42:32 +0200 Subject: [PATCH 009/104] fix(edit-monitor): store headers as JSON --- server/model/monitor.js | 27 +-------------------------- src/languages/en.js | 4 ++-- src/languages/nl-NL.js | 4 ++-- src/pages/EditMonitor.vue | 6 ++++-- 4 files changed, 9 insertions(+), 32 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index 33ad82f0..2738898f 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -99,31 +99,6 @@ class Monitor extends BeanModel { return JSON.parse(this.accepted_statuscodes_json); } - /** - * Convert header string into an object: - * eg: - * - * Authorization: Basic - * Content-Type: application/json - * - * into - * - * { - * "Authorization": "Basic ", - * "Content-Type": "application/json" - * } - **/ - getParsedHeaders() { - if (!this.headers || !this.headers.includes(":")) { - return {}; - } - return Object.fromEntries(this.headers.split("\n").map(header => { - const trimmedHeader = header.trim(); - const firstColonIndex = trimmedHeader.indexOf(":"); - return [trimmedHeader.slice(0, firstColonIndex), trimmedHeader.slice(firstColonIndex + 1) || ""]; - }).filter(arr => !!arr[0] && !!arr[1])); - } - start(io) { let previousBeat = null; let retries = 0; @@ -173,7 +148,7 @@ class Monitor extends BeanModel { headers: { "Accept": "*/*", "User-Agent": "Uptime-Kuma/" + version, - ...this.getParsedHeaders(), + ...JSON.parse(this.headers), }, httpsAgent: new https.Agent({ maxCachedSessions: 0, // Use Custom agent to disable session reuse (https://github.com/nodejs/node/issues/3940) diff --git a/src/languages/en.js b/src/languages/en.js index 7871f0fe..a5ad24e0 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -285,8 +285,8 @@ export default { Body: "Body", Headers: "Headers", PushUrl: "Push URL", - HeadersInvalidFormat: "Headers do not have a valid format: \"key: value key: value ...\"", + HeadersInvalidFormat: "The request headers are not valid JSON: ", BodyInvalidFormat: "The request body is not valid JSON: ", BodyPlaceholder: "{\n\t\"id\": 124357,\n\t\"username\": \"admin\",\n\t\"password\": \"myAdminPassword\"\n}", - HeadersPlaceholder: "Authorization: Bearer abc123\nContent-Type: application/json", + HeadersPlaceholder: "{\n\t\"Authorization\": \"Bearer abc123\",\n\t\"Content-Type\": \"application/json\"\n}", }; diff --git a/src/languages/nl-NL.js b/src/languages/nl-NL.js index 33d84cd5..170b4a3c 100644 --- a/src/languages/nl-NL.js +++ b/src/languages/nl-NL.js @@ -202,8 +202,8 @@ export default { Body: "Body", Headers: "Headers", PushUrl: "Push URL", - HeadersInvalidFormat: "Headers hebben een incorrect formaat: \"key: waarde key: waarde ...\"", + HeadersInvalidFormat: "The request headers is geen geldige JSON: ", BodyInvalidFormat: "De request body is geen geldige JSON: ", BodyPlaceholder: "{\n\t\"id\": 124357,\n\t\"gebruikersnaam\": \"admin\",\n\t\"wachtwoord\": \"mijnAdminWachtwoord\"\n}", - HeadersPlaceholder: "Authorization: Bearer abc123\nContent-Type: application/json", + HeadersPlaceholder: "{\n\t\"Authorization\": \"Bearer abc123\",\n\t\"Content-Type\": \"application/json\"\n}", }; diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 5074dab9..ed8b359e 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -442,8 +442,10 @@ export default { } } if (this.monitor.headers) { - if (!/^([^:]+:.*)([\s]+[^:]+:.*)*$/g.test(this.monitor.headers)) { - toast.error(this.$t("HeadersInvalidFormat")); + try { + JSON.parse(this.monitor.headers); + } catch (err) { + toast.error(this.$t("HeadersInvalidFormat") + err.message); return false; } } From 9d7def93a56add3595d1216ddd49166a384a9661 Mon Sep 17 00:00:00 2001 From: MrEddX <66828538+MrEddX@users.noreply.github.com> Date: Sat, 9 Oct 2021 18:44:12 +0300 Subject: [PATCH 010/104] Update bg-BG.js --- src/languages/bg-BG.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/languages/bg-BG.js b/src/languages/bg-BG.js index 0e915255..b5118c7e 100644 --- a/src/languages/bg-BG.js +++ b/src/languages/bg-BG.js @@ -1,7 +1,7 @@ export default { languageName: "Български", - checkEverySecond: "Ще се извършва на всеки {0} секунди.", - retryCheckEverySecond: "Повторен опит на всеки {0} секунди.", + checkEverySecond: "Ще се извършва на всеки {0} секунди", + retryCheckEverySecond: "Ще се извършва на всеки {0} секунди", retriesDescription: "Максимакен брой опити преди услугата да бъде маркирана като недостъпна и да бъде изпратено известие", ignoreTLSError: "Игнорирай TLS/SSL грешки за HTTPS уебсайтове", upsideDownModeDescription: "Обърни статуса от достъпен на недостъпен. Ако услугата е достъпна се вижда НЕДОСТЪПНА.", @@ -28,7 +28,7 @@ export default { confirmDisableTwoFAMsg: "Сигурни ли сте, че желаете да изключите 2FA?", Settings: "Настройки", Dashboard: "Табло", - "New Update": "Нова актуализация", + "New Update": "Налична е актуализация", Language: "Език", Appearance: "Изглед", Theme: "Тема", @@ -57,7 +57,7 @@ export default { "Cert Exp.": "Вал. сертификат", days: "дни", day: "ден", - "-day": "-денa", + "-day": "-дни", hour: "час", "-hour": "-часa", Response: "Отговор", From 6fe014fa5e6832be61e8f897011c10e912e0001d Mon Sep 17 00:00:00 2001 From: Robin Schneider <45321827+robinschneider@users.noreply.github.com> Date: Sat, 9 Oct 2021 18:05:52 +0200 Subject: [PATCH 011/104] Fixed spelling for german language support Fixed spelling for german language support, hacktoberfest-accepted label woul be appreciated. --- src/languages/de-DE.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/languages/de-DE.js b/src/languages/de-DE.js index 20beb626..bf2dff8c 100644 --- a/src/languages/de-DE.js +++ b/src/languages/de-DE.js @@ -2,7 +2,7 @@ export default { languageName: "Deutsch (Deutschland)", Settings: "Einstellungen", Dashboard: "Dashboard", - "New Update": "Update Verfügbar", + "New Update": "Update verfügbar", Language: "Sprache", Appearance: "Erscheinung", Theme: "Thema", @@ -50,7 +50,7 @@ export default { Advanced: "Erweitert", ignoreTLSError: "Ignoriere TLS/SSL Fehler von Webseiten", "Upside Down Mode": "Umgedrehter Modus", - upsideDownModeDescription: "Drehe den Modus um, ist der Dienst erreichbar, wird er als Inaktiv angezeigt.", + upsideDownModeDescription: "Drehe den Modus um, ist der Dienst erreichbar, wird er als inaktiv angezeigt.", "Max. Redirects": "Max. Weiterleitungen", maxRedirectDescription: "Maximale Anzahl von Weiterleitungen, denen gefolgt werden soll. Setzte auf 0, um Weiterleitungen zu deaktivieren.", "Accepted Status Codes": "Erlaubte HTTP-Statuscodes", @@ -71,7 +71,7 @@ export default { "Allow indexing": "Indizierung zulassen", "Discourage search engines from indexing site": "Halte Suchmaschinen von der Indexierung der Seite ab", "Change Password": "Passwort ändern", - "Current Password": "Dezeitiges Passwort", + "Current Password": "Derzeitiges Passwort", "New Password": "Neues Passwort", "Repeat New Password": "Wiederhole neues Passwort", passwordNotMatchMsg: "Passwörter stimmen nicht überein. ", @@ -91,24 +91,24 @@ export default { Login: "Einloggen", "No Monitors, please": "Keine Monitore, bitte", "add one": "hinzufügen", - "Notification Type": "Benachrichtigungs Dienst", + "Notification Type": "Benachrichtigungsdienst", Email: "E-Mail", Test: "Test", "Certificate Info": "Zertifikatsinfo", keywordDescription: "Suche nach einem Schlüsselwort in der HTML oder JSON Ausgabe. Bitte beachte, es wird in der Groß-/Kleinschreibung unterschieden.", - deleteMonitorMsg: "Bist du sicher das du den Monitor löschen möchtest?", + deleteMonitorMsg: "Bist du sicher, dass du den Monitor löschen möchtest?", deleteNotificationMsg: "Möchtest du diese Benachrichtigung wirklich für alle Monitore löschen?", resoverserverDescription: "Cloudflare ist als der Standardserver festgelegt, dieser kann jederzeit geändern werden.", "Resolver Server": "Auflösungsserver", rrtypeDescription: "Wähle den RR-Typ aus, welchen du überwachen möchtest.", "Last Result": "Letztes Ergebnis", - pauseMonitorMsg: "Bist du sicher das du den Monitor pausieren möchtest?", - clearEventsMsg: "Bist du sicher das du alle Ereignisse für diesen Monitor löschen möchtest?", - clearHeartbeatsMsg: "Bist du sicher das du alle Statistiken für diesen Monitor löschen möchtest?", + 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 Statistiken für diesen Monitor löschen möchtest?", "Clear Data": "Lösche Daten", Events: "Ereignisse", Heartbeats: "Statistiken", - confirmClearStatisticsMsg: "Bist du sicher das du ALLE Statistiken löschen möchtest?", + confirmClearStatisticsMsg: "Bist du dir wirklich sicher, dass du ALLE Statistiken löschen möchtest?", "Create your admin account": "Erstelle dein Admin Konto", "Repeat Password": "Wiederhole das Passwort", "Resource Record Type": "Resource Record Type", @@ -124,7 +124,7 @@ export default { 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.", - alertNoFile: "Bitte wähle eine Datei zum importieren aus.", + 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 Benachrichtigung mit demselben Namen übersprungen werden soll. 'Überschreiben' löscht jeden vorhandenen Monitor sowie Benachrichtigungen.", @@ -133,14 +133,14 @@ export default { Options: "Optionen", confirmImportMsg: "Möchtest du das Backup wirklich importieren? Bitte stelle sicher, dass die richtige Import Option ausgewählt ist.", "Keep both": "Beide behalten", - twoFAVerifyLabel: "Bitte trage deinen Token ein um zu verifizieren das 2FA funktioniert", + twoFAVerifyLabel: "Bitte trage deinen Token ein, um zu verifizieren das 2FA funktioniert", "Verify Token": "Token verifizieren", "Setup 2FA": "2FA Einrichten", "Enable 2FA": "2FA Aktivieren", "Disable 2FA": "2FA deaktivieren", "2FA Settings": "2FA Einstellungen", - confirmEnableTwoFAMsg: "Bist du sicher das du 2FA aktivieren möchtest?", - confirmDisableTwoFAMsg: "Bist du sicher das du 2FA deaktivieren möchtest?", + 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.", "Two Factor Authentication": "Zwei Faktor Authentifizierung", Active: "Aktiv", @@ -162,7 +162,7 @@ export default { Purple: "Lila", Pink: "Pink", "Search...": "Suchen...", - "Heartbeat Retry Interval": "Takt-Wiederholungsintervall", + "Heartbeat Retry Interval": "Heartbeat-Wiederholungsintervall", retryCheckEverySecond: "Versuche alle {0} Sekunden", "Import Backup": "Import Backup", "Export Backup": "Export Backup", @@ -178,10 +178,10 @@ export default { "Add a monitor": "Monitor hinzufügen", "Edit Status Page": "Bearbeite Statusseite", "Go to Dashboard": "Gehe zum Dashboard", - "Status Page": "Status Page", + "Status Page": "Status Seite", telegram: "Telegram", webhook: "Webhook", - smtp: "Email (SMTP)", + smtp: "E-Mail (SMTP)", discord: "Discord", teams: "Microsoft Teams", signal: "Signal", @@ -193,7 +193,7 @@ export default { octopush: "Octopush", promosms: "PromoSMS", lunasea: "LunaSea", - apprise: "Apprise (Support 50+ Notification services)", + apprise: "Apprise (Unterstützung für 50+ Benachrichtigungsdienste)", pushbullet: "Pushbullet", line: "Line Messenger", mattermost: "Mattermost", From 5c8956265048aee726f236bd83b4988a592242f4 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 10 Oct 2021 02:23:27 +0800 Subject: [PATCH 012/104] not allow lower than 20s for demo mode --- server/model/monitor.js | 8 ++++++++ server/server.js | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index a50baccf..b7b24971 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -11,6 +11,7 @@ const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalCli const { R } = require("redbean-node"); const { BeanModel } = require("redbean-node/dist/bean-model"); const { Notification } = require("../notification"); +const { demoMode } = require("../server"); const version = require("../../package.json").version; /** @@ -334,6 +335,13 @@ class Monitor extends BeanModel { previousBeat = bean; if (! this.isStop) { + + if (demoMode) { + if (beatInterval < 20) { + beatInterval = 20; + } + } + this.heartbeatInterval = setTimeout(beat, beatInterval * 1000); } diff --git a/server/server.js b/server/server.js index ddd68695..984e73ad 100644 --- a/server/server.js +++ b/server/server.js @@ -66,12 +66,13 @@ const sslCert = process.env.SSL_CERT || args["ssl-cert"] || undefined; // Demo Mode? const demoMode = args["demo"] || false; +exports.demoMode = demoMode; if (demoMode) { console.log("==== Demo Mode ===="); } -console.log("Creating express and socket.io instance") +console.log("Creating express and socket.io instance"); const app = express(); let server; From 5e3ea3293c5d1f37ba65ab94182075b788608b45 Mon Sep 17 00:00:00 2001 From: Lukas <35193662+NixNotCastey@users.noreply.github.com> Date: Sat, 9 Oct 2021 20:32:45 +0200 Subject: [PATCH 013/104] Very basic email subject customization --- server/notification-providers/smtp.js | 10 +++++++++- src/components/notifications/SMTP.vue | 5 +++++ src/languages/en.js | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js index ecb583eb..e5fd53e4 100644 --- a/server/notification-providers/smtp.js +++ b/server/notification-providers/smtp.js @@ -20,6 +20,14 @@ class SMTP extends NotificationProvider { pass: notification.smtpPassword, }; } + // Lets start with default subject + let subject = msg; + // Our subject cannot end with whitespace it's often raise spam score + let customsubject = notification.customsubject.trim() + // If custom subject is not empty, change subject for notification + if (customsubject !== "") { + subject = customsubject + } let transporter = nodemailer.createTransport(config); @@ -34,7 +42,7 @@ class SMTP extends NotificationProvider { cc: notification.smtpCC, bcc: notification.smtpBCC, to: notification.smtpTo, - subject: msg, + subject: subject, text: bodyTextContent, tls: { rejectUnauthorized: notification.smtpIgnoreTLSError || false, diff --git a/src/components/notifications/SMTP.vue b/src/components/notifications/SMTP.vue index 72934cda..165d39c6 100644 --- a/src/components/notifications/SMTP.vue +++ b/src/components/notifications/SMTP.vue @@ -43,6 +43,11 @@
+
+ + +
+
diff --git a/src/languages/en.js b/src/languages/en.js index 2ce8f46b..b59cdb73 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -201,6 +201,7 @@ export default { secureOptionTLS: "TLS (465)", "Ignore TLS Error": "Ignore TLS Error", "From Email": "From Email", + "Custom Email subject": "Custom Email Subject (leave blank for default one)", "To Email": "To Email", smtpCC: "CC", smtpBCC: "BCC", From 56ae6f6117809d5d4c552ce3a5cfb50abed7b388 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 10 Oct 2021 02:36:20 +0800 Subject: [PATCH 014/104] fix demoMode export --- server/model/monitor.js | 1 + server/server.js | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index b7b24971..3c9e79b5 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -338,6 +338,7 @@ class Monitor extends BeanModel { if (demoMode) { if (beatInterval < 20) { + console.log("beat interval too low, reset to 20s"); beatInterval = 20; } } diff --git a/server/server.js b/server/server.js index 984e73ad..cdbb447a 100644 --- a/server/server.js +++ b/server/server.js @@ -1,12 +1,18 @@ console.log("Welcome to Uptime Kuma"); +const args = require("args-parser")(process.argv); +const { sleep, debug, getRandomInt } = require("../src/util"); + +debug(args); if (! process.env.NODE_ENV) { process.env.NODE_ENV = "production"; } -console.log("Node Env: " + process.env.NODE_ENV); +// Demo Mode? +const demoMode = args["demo"] || false; +exports.demoMode = demoMode; -const { sleep, debug, TimeLogger, getRandomInt } = require("../src/util"); +console.log("Node Env: " + process.env.NODE_ENV); console.log("Importing Node libraries"); const fs = require("fs"); @@ -50,8 +56,6 @@ const { basicAuth } = require("./auth"); const { login } = require("./auth"); const passwordHash = require("./password-hash"); -const args = require("args-parser")(process.argv); - const checkVersion = require("./check-version"); console.info("Version: " + checkVersion.version); @@ -64,10 +68,6 @@ const port = parseInt(process.env.PORT || args.port || 3001); const sslKey = process.env.SSL_KEY || args["ssl-key"] || undefined; const sslCert = process.env.SSL_CERT || args["ssl-cert"] || undefined; -// Demo Mode? -const demoMode = args["demo"] || false; -exports.demoMode = demoMode; - if (demoMode) { console.log("==== Demo Mode ===="); } From 792f3c7c5c17a2db80e7f9638e272b4607f3d4c6 Mon Sep 17 00:00:00 2001 From: Lukas <35193662+NixNotCastey@users.noreply.github.com> Date: Sat, 9 Oct 2021 21:48:28 +0200 Subject: [PATCH 015/104] Add support for values of Name, Hostname and Status --- server/notification-providers/smtp.js | 30 +++++++++++++++++++++++++++ src/components/notifications/SMTP.vue | 4 ++-- src/languages/en.js | 2 +- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js index e5fd53e4..2bbec584 100644 --- a/server/notification-providers/smtp.js +++ b/server/notification-providers/smtp.js @@ -22,10 +22,40 @@ class SMTP extends NotificationProvider { } // Lets start with default subject let subject = msg; + // Our subject cannot end with whitespace it's often raise spam score let customsubject = notification.customsubject.trim() + // If custom subject is not empty, change subject for notification if (customsubject !== "") { + + // Replace "MACROS" with coresponding variable + let replaceName = new RegExp("{NAME}", "g"); + let replaceHostname = new RegExp("{HOSTNAME}", "g"); + let replaceStatus = new RegExp("{STATUS}", "g"); + + let serviceStatus; + + if (monitorJSON !== null) { + customsubject = customsubject.replace(replaceName,monitorJSON["name"]); + customsubject = customsubject.replace(replaceHostname,monitorJSON["hostname"]); + } else { + // Insert dummy values during test + customsubject = customsubject.replace(replaceName,"Test"); + customsubject = customsubject.replace(replaceHostname,"example.com"); + } + if (heartbeatJSON !== null) { + if (heartbeatJSON["status"] === 0) { + serviceStatus = "🔴 Down" + } else { + serviceStatus = "✅ Up" + } + customsubject = customsubject.replace(replaceStatus,serviceStatus); + } else { + // Insert dummy values during test + customsubject = customsubject.replace(replaceStatus,"TEST"); + } + subject = customsubject } diff --git a/src/components/notifications/SMTP.vue b/src/components/notifications/SMTP.vue index 165d39c6..01bdf860 100644 --- a/src/components/notifications/SMTP.vue +++ b/src/components/notifications/SMTP.vue @@ -44,8 +44,8 @@
- - + +
diff --git a/src/languages/en.js b/src/languages/en.js index b59cdb73..0e8e9230 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -201,7 +201,7 @@ export default { secureOptionTLS: "TLS (465)", "Ignore TLS Error": "Ignore TLS Error", "From Email": "From Email", - "Custom Email subject": "Custom Email Subject (leave blank for default one)", + "Email Subject": "Subject (leave blank for default one)", "To Email": "To Email", smtpCC: "CC", smtpBCC: "BCC", From 5137c80c07d8a0781e585d35c86b58252663907e Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Sat, 9 Oct 2021 21:51:24 +0200 Subject: [PATCH 016/104] fix(monitor): handle empty headers --- server/model/monitor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index 2738898f..e2029c5e 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -148,10 +148,10 @@ class Monitor extends BeanModel { headers: { "Accept": "*/*", "User-Agent": "Uptime-Kuma/" + version, - ...JSON.parse(this.headers), + ...(this.headers ? JSON.parse(this.headers) : {}), }, httpsAgent: new https.Agent({ - maxCachedSessions: 0, // Use Custom agent to disable session reuse (https://github.com/nodejs/node/issues/3940) + maxCachedSessions: 0, // Use "{}"om agent to disable session reuse (https://github.com/nodejs/node/issues/3940) rejectUnauthorized: ! this.getIgnoreTls(), }), maxRedirects: this.maxredirects, From d6f7be91123450f830deab62e8f9b4a119649e6c Mon Sep 17 00:00:00 2001 From: Lukas <35193662+NixNotCastey@users.noreply.github.com> Date: Sun, 10 Oct 2021 00:38:19 +0200 Subject: [PATCH 017/104] Translated all missing texts and updated few of previously translated. --- src/languages/pl.js | 233 ++++++++++++++++++++++++++++++-------------- 1 file changed, 158 insertions(+), 75 deletions(-) diff --git a/src/languages/pl.js b/src/languages/pl.js index 05101c6a..2b083527 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -1,38 +1,49 @@ export default { languageName: "Polski", - checkEverySecond: "Sprawdzam co {0} sekund.", - retriesDescription: "Maksymalna liczba powtórzeń, zanim usługa zostanie oznaczona jako wyłączona i zostanie wysłane powiadomienie", + checkEverySecond: "Sprawdzaj co {0} sekund", + retryCheckEverySecond: "Ponawiaj co {0} sekund", + retriesDescription: "Maksymalna liczba powtórzeń, zanim usługa zostanie oznaczona jako niedostępna i zostanie wysłane powiadomienie", ignoreTLSError: "Ignoruj błąd TLS/SSL dla stron HTTPS", upsideDownModeDescription: "Odwróć status do góry nogami. Jeśli usługa jest osiągalna, to jest oznaczona jako niedostępna.", maxRedirectDescription: "Maksymalna liczba przekierowań do wykonania. Ustaw na 0, aby wyłączyć przekierowania.", - acceptedStatusCodesDescription: "Wybierz kody stanu, które są uważane za udaną odpowiedź.", + acceptedStatusCodesDescription: "Wybierz kody stanu, które są uważane za prawidłową odpowiedź.", passwordNotMatchMsg: "Powtórzone hasło nie pasuje.", - notificationDescription: "Proszę przypisać powiadomienie do monitora(ów), aby zadziałało.", + notificationDescription: "Proszę przypisać powiadomienie do monitora(ów), aby działało.", keywordDescription: "Wyszukiwanie słów kluczowych w zwykłym html lub odpowiedzi JSON. Wielkość liter ma znaczenie.", - pauseDashboardHome: "Pauza", + pauseDashboardHome: "Wstrzymaj", deleteMonitorMsg: "Czy na pewno chcesz usunąć ten monitor?", deleteNotificationMsg: "Czy na pewno chcesz usunąć to powiadomienie dla wszystkich monitorów?", resoverserverDescription: "Cloudflare jest domyślnym serwerem, możesz zmienić serwer resolver w każdej chwili.", - rrtypeDescription: "Wybierz RR-Type który chcesz monitorować", - pauseMonitorMsg: "Czy na pewno chcesz wstrzymać?", + rrtypeDescription: "Wybierz rodzaj rekordu, który chcesz monitorować.", + pauseMonitorMsg: "Czy na pewno chcesz wstrzymać monitorowanie?", + enableDefaultNotificationDescription: "Dla każdego nowego monitora to powiadomienie będzie domyślnie włączone. Nadal możesz wyłączyć powiadomienia osobno dla każdego monitora.", + clearEventsMsg: "Jesteś pewien, że chcesz wyczyścić historię zdarzeń dla tego monitora?", + clearHeartbeatsMsg: "Jesteś pewien, że chcesz wyczyścić historię bicia serca dla tego monitora?", + confirmClearStatisticsMsg: "Jesteś pewien, że chcesz usunąć WSZYSTKIE statystyki?", + importHandleDescription: "Wybierz 'Pomiń istniejące', jeśli chcesz pominąć każdy monitor lub powiadomienie o tej samej nazwie. 'Nadpisz' spowoduje usunięcie każdego istniejącego monitora i powiadomienia.", + confirmImportMsg: "Czy na pewno chcesz zaimportować kopię zapasową? Upewnij się, że wybrałeś właściwą opcję importu.", + twoFAVerifyLabel: "Proszę podaj swój token 2FA, aby sprawdzić czy 2FA działa.", + tokenValidSettingsMsg: "Token jest prawdiłowy! Teraz możesz zapisać ustawienia 2FA.", + confirmEnableTwoFAMsg: "Jesteś pewien, że chcesz włączyć 2FA?", + confirmDisableTwoFAMsg: "Jesteś pewien, że chcesz wyłączyć 2FA?", Settings: "Ustawienia", Dashboard: "Panel", - "New Update": "Nowa aktualizacja", + "New Update": "Nowa Aktualizacja", Language: "Język", Appearance: "Wygląd", Theme: "Motyw", General: "Ogólne", Version: "Wersja", - "Check Update On GitHub": "Sprawdź aktualizację na GitHub.", + "Check Update On GitHub": "Sprawdź aktualizację na GitHub", List: "Lista", Add: "Dodaj", - "Add New Monitor": "Dodaj nowy monitor", - "Quick Stats": "Szybkie statystyki", + "Add New Monitor": "Dodaj Monitor", + "Quick Stats": "Szybki podgląd statystyk", Up: "Online", Down: "Offline", - Pending: "Oczekujący", + Pending: "Oczekuje", Unknown: "Nieznane", - Pause: "Pauza", + Pause: "Wstrzymane", Name: "Nazwa", Status: "Status", DateTime: "Data i godzina", @@ -41,42 +52,43 @@ export default { Resume: "Wznów", Edit: "Edytuj", Delete: "Usuń", - Current: "aktualny", - Uptime: "Czas pracy", - "Cert Exp.": "Wygaśnięcie certyfikatu", + Current: "Aktualny", + Uptime: "Czas Pracy", + "Cert Exp.": "Certyfikat Wygasa", days: "dni", day: "dzień", "-day": " dni", hour: "godzina", - "-hour": " godziny", + "-hour": " godzin", Response: "Odpowiedź", Ping: "Ping", - "Monitor Type": "Typ monitora", + "Monitor Type": "Rodzaj Monitora", Keyword: "Słowo kluczowe", - "Friendly Name": "Przyjazna nazwa", + "Friendly Name": "Przyjazna Nazwa", URL: "URL", - Hostname: "Nazwa hosta", + Hostname: "Hostname", Port: "Port", - "Heartbeat Interval": "Interwał bicia serca", + "Heartbeat Interval": "Czętotliwość bicia serca", Retries: "Prób", + "Heartbeat Retry Interval": "Częstotliwość ponawiania bicia serca", Advanced: "Zaawansowane", - "Upside Down Mode": "Tryb do góry nogami", - "Max. Redirects": "Maks. przekierowania", + "Upside Down Mode": "Tryb odwrócony", + "Max. Redirects": "Maks. Przekierowań", "Accepted Status Codes": "Akceptowane kody statusu", Save: "Zapisz", Notifications: "Powiadomienia", "Not available, please setup.": "Niedostępne, proszę skonfigurować.", - "Setup Notification": "Konfiguracja powiadomień", + "Setup Notification": "Skonfiguruj Powiadomienie", Light: "Jasny", Dark: "Ciemny", Auto: "Automatyczny", "Theme - Heartbeat Bar": "Motyw - pasek bicia serca", - Normal: "Normalne", + Normal: "Domyślne", Bottom: "Na dole", None: "Brak", Timezone: "Strefa czasowa", "Search Engine Visibility": "Widoczność w wyszukiwarce", - "Allow indexing": "Pozwól na indeksowanie", + "Allow indexing": "Zezwól na indeksowanie", "Discourage search engines from indexing site": "Zniechęcaj wyszukiwarki do indeksowania strony", "Change Password": "Zmień hasło", "Current Password": "Aktualne hasło", @@ -84,54 +96,52 @@ export default { "Repeat New Password": "Powtórz nowe hasło", "Update Password": "Zaktualizuj hasło", "Disable Auth": "Wyłącz autoryzację", - "Enable Auth": "Włącz autoryzację ", - Logout: "Wyloguj się", + "Enable Auth": "Włącz autoryzację", + Logout: "Wyloguj", Leave: "Zostaw", "I understand, please disable": "Rozumiem, proszę wyłączyć", - Confirm: "Potwierdź", + Confirm: "Potiwerdź", Yes: "Tak", No: "Nie", Username: "Nazwa użytkownika", Password: "Hasło", "Remember me": "Zapamiętaj mnie", - Login: "Zaloguj się", + Login: "Zaloguj", "No Monitors, please": "Brak monitorów, proszę", - "add one": "dodaj jeden", - "Notification Type": "Typ powiadomienia", + "add one": "dodać jeden", + "Notification Type": "Rodzaj powiadomienia", Email: "Email", Test: "Test", "Certificate Info": "Informacje o certyfikacie", - "Resolver Server": "Server resolver", + "Resolver Server": "Serwer rozwiązywania nazw", "Resource Record Type": "Typ rekordu zasobów", "Last Result": "Ostatni wynik", "Create your admin account": "Utwórz swoje konto administratora", "Repeat Password": "Powtórz hasło", - respTime: "Czas odp. (ms)", + "Import Backup": "Importuj Kopię", + "Export Backup": "Eksportuj Kopię", + Export: "Eksportuj", + Import: "Importuj", + respTime: "Czas Odp. (ms)", notAvailableShort: "N/A", + "Default enabled": "Włącz domyślnie", + "Apply on all existing monitors": "Zastosuj do istniejących monitorów", Create: "Stwórz", - clearEventsMsg: "Jesteś pewien, że chcesz usunąć wszystkie monitory dla tej strony?", - clearHeartbeatsMsg: "Jesteś pewien, że chcesz usunąć wszystkie bicia serca dla tego monitora?", - confirmClearStatisticsMsg: "Jesteś pewien, że chcesz usunąć WSZYSTKIE statystyki?", - "Clear Data": "Usuń dane", + "Clear Data": "Usuń Dane", Events: "Wydarzenia", Heartbeats: "Bicia serca", - "Auto Get": "Pobierz automatycznie", - enableDefaultNotificationDescription: "Dla każdego nowego monitora to powiadomienie będzie domyślnie włączone. Nadal możesz wyłączyć powiadomienia osobno dla każdego monitora.", - "Default enabled": "Domyślnie włączone", - "Also apply to existing monitors": "Również zastosuj do obecnych monitorów", - Export: "Eksportuj", - Import: "Importuj", + "Auto Get": "Wykryj", backupDescription: "Możesz wykonać kopię zapasową wszystkich monitorów i wszystkich powiadomień do pliku JSON.", backupDescription2: "PS: Historia i dane zdarzeń nie są uwzględniane.", backupDescription3: "Poufne dane, takie jak tokeny powiadomień, są zawarte w pliku eksportu, prosimy o ostrożne przechowywanie.", - alertNoFile: "Proszę wybrać plik do importu.", + alertNoFile: "Wybierz plik do importu.", alertWrongFileType: "Proszę wybrać plik JSON.", - twoFAVerifyLabel: "Proszę podaj swój token 2FA, aby sprawdzić czy 2FA działa", - tokenValidSettingsMsg: "Token jest poprawny! Możesz teraz zapisać ustawienia 2FA.", - confirmEnableTwoFAMsg: "Jesteś pewien że chcesz włączyć 2FA?", - confirmDisableTwoFAMsg: "Jesteś pewien że chcesz wyłączyć 2FA?", - "Apply on all existing monitors": "Zastosuj do wszystki obecnych monitorów", - "Verify Token": "Weryfikuj token", + "Clear all statistics": "Wyczyść wszystkie statystyki", + "Skip existing": "Pomiń istniejące", + Overwrite: "Nadpisz", + Options: "Opcje", + "Keep both": "Zachowaj oba", + "Verify Token": "Zweryfikuj token", "Setup 2FA": "Konfiguracja 2FA", "Enable 2FA": "Włącz 2FA", "Disable 2FA": "Wyłącz 2FA", @@ -141,17 +151,6 @@ export default { Inactive: "Wyłączone", Token: "Token", "Show URI": "Pokaż URI", - "Clear all statistics": "Wyczyść wszystkie statystyki", - retryCheckEverySecond: "Ponawiaj co {0} sekund.", - importHandleDescription: "Wybierz 'Pomiń istniejące', jeśli chcesz pominąć każdy monitor lub powiadomienie o tej samej nazwie. 'Nadpisz' spowoduje usunięcie każdego istniejącego monitora i powiadomienia.", - confirmImportMsg: "Czy na pewno chcesz zaimportować kopię zapasową? Upewnij się, że wybrałeś właściwą opcję importu.", - "Heartbeat Retry Interval": "Częstotliwość ponawiania bicia serca", - "Import Backup": "Importuj kopię zapasową", - "Export Backup": "Eksportuj kopię zapasową", - "Skip existing": "Pomiń istniejące", - Overwrite: "Nadpisz", - Options: "Opcje", - "Keep both": "Zachowaj oba", Tags: "Tagi", "Add New below or Select...": "Dodaj nowy poniżej lub wybierz...", "Tag with this name already exist.": "Tag o tej nazwie już istnieje.", @@ -169,33 +168,117 @@ export default { "Search...": "Szukaj...", "Avg. Ping": "Średni ping", "Avg. Response": "Średnia odpowiedź", - "Entry Page": "Strona główna", + "Entry Page": "Strona startowa", statusPageNothing: "Nic tu nie ma, dodaj grupę lub monitor.", "No Services": "Brak usług", - "All Systems Operational": "Wszystkie systemy działają", - "Partially Degraded Service": "Częściowy błąd usługi", - "Degraded Service": "Błąd usługi", + "All Systems Operational": "Wszystkie systemy działają poprawnie", + "Partially Degraded Service": "Część usług nie działa", + "Degraded Service": "Usługa nie działa", "Add Group": "Dodaj grupę", "Add a monitor": "Dodaj monitor", "Edit Status Page": "Edytuj stronę statusu", "Go to Dashboard": "Idź do panelu", "Status Page": "Strona statusu", - telegram: "Telegram", - webhook: "Webhook", - smtp: "Email (SMTP)", - discord: "Discord", - teams: "Microsoft Teams", - signal: "Signal", - gotify: "Gotify", - slack: "Slack", + // Start notification form + defaultNotificationName: "Moje powiadomienie {notification} ({number})", + here: "tutaj", + "Required": "Wymagane", + "telegram": "Telegram", + "Bot Token": "Token Bota", + "You can get a token from": "Token można uzyskać z", + "Chat ID": "Identyfikator Czatu", + supportTelegramChatID: "Czat wsprarcia technicznego / Bezpośrednia Rozmowa / Czat Grupowy", + wayToGetTelegramChatID: "Możesz uzyskać swój identyfikator czatu, wysyłając wiadomość do bota i przechodząc pod ten adres URL, aby wyświetlić identyfikator czatu:", + "YOUR BOT TOKEN HERE": "TWOJ TOKEN BOTA", + chatIDNotFound: "Identyfikator czatu nie znaleziony, najpierw napisz do bota", + "webhook": "Webhook", + "Post URL": "Adres URL", + "Content Type": "Rodzaj danych", + webhookJsonDesc: "{0} jest dobry w przypadku serwerów HTTP, takich jak express.js", + webhookFormDataDesc: "{multipart} jest dobry dla PHP, musisz jedynie przetowrzyć dane przez {decodeFunction}", + "smtp": "Email (SMTP)", + secureOptionNone: "Brak / STARTTLS (25, 587)", + secureOptionTLS: "TLS (465)", + "Ignore TLS Error": "Zignrouj Błędy TLS", + "From Email": "Nadawca (OD)", + "To Email": "Odbiorca (DO)", + smtpCC: "DW", + smtpBCC: "UDW", + "discord": "Discord", + "Discord Webhook URL": "URL Webhook Discorda", + wayToGetDiscordURL: "Możesz go uzyskać przechodząc do Ustawienia Serwera -> Integracje -> Tworzenie Webhooka", + "Bot Display Name": "Wyświetlana Nazwa Bota", + "Prefix Custom Message": "Własny Początek Wiadomości", + "Hello @everyone is...": "Hej {'@'}everyone ...", + "teams": "Microsoft Teams", + "Webhook URL": "URL Webhooka", + wayToGetTeamsURL: "You can learn how to create a webhook url {0}.", + "signal": "Signal", + "Number": "Numer", + "Recipients": "Odbiorcy", + needSignalAPI: "Musisz posiadać klienta Signal z REST API.", + wayToCheckSignalURL: "W celu dowiedzenia się, jak go skonfigurować, odwiedź poniższy link:", + signalImportant: "UWAGA: Nie można mieszać nazw grup i numerów odbiorców!", + "gotify": "Gotify", + "Application Token": "Token Aplikacji", + "Server URL": "Server URL", + "Priority": "Priorytet", + "slack": "Slack", + "Icon Emoji": "Ikona Emoji", + "Channel Name": "Nazwa Kanału", + "Uptime Kuma URL": "Adres Uptime Kuma", + aboutWebhooks: "Więcej informacji na temat webhooków: {0}", + aboutChannelName: "Podaj nazwę kanału {0} w polu Nazwa Kanału, jeśli chcesz pominąć kanał webhooka. Np.: #inny-kanal", + aboutKumaURL: "Jeśli pozostawisz pole Adres Uptime Kuma puste, domyślnie będzie to strona projektu na Github.", + emojiCheatSheet: "Ściąga Emoji: {0}", "rocket.chat": "Rocket.chat", pushover: "Pushover", pushy: "Pushy", octopush: "Octopush", promosms: "PromoSMS", lunasea: "LunaSea", - apprise: "Apprise (obsługuje 50+ usług powiadamiania)", + apprise: "Apprise (Obsługuje 50+ usług powiadomień)", pushbullet: "Pushbullet", line: "Line Messenger", mattermost: "Mattermost", + "User Key": "Klucz Użytkownika", + "Device": "Urządzenie", + "Message Title": "Tytuł Wiadomości", + "Notification Sound": "Dźwięk Powiadomienia", + "More info on:": "Więcej informacji na: {0}", + pushoverDesc1: "Priorytet awaryjny (2) ma domyślny 30-sekundowy limit czasu między kolejnymi próbami i wygaśnie po 1 godzinie.", + pushoverDesc2: "Jeśli chcesz wysyłać powiadomienia na różne urządzenia, wypełnij pole Urządzenie.", + "SMS Type": "Rodzaj SMS", + octopushTypePremium: "Premium (Szybki - rekomendowany dla powiadomień)", + octopushTypeLowCost: "Low Cost (Wolny, czasami blokowany przez operatorów)", + "Check octopush prices": "Sprawdź ceny Octopush {0}.", + octopushPhoneNumber: "Numer Telefonu (Format międzynarodowy np.: +33612345678)", + octopushSMSSender: "Nadawca SMS : 3-11 znaków alfanumerycznych i spacji (a-zA-Z0-9)", + "LunaSea Device ID": "Idetyfikator Urządzenia LunaSea", + "Apprise URL": "URL Apprise", + "Example:": "Przykład: {0}", + "Read more:": "Czytaj Dalej: {0}", + "Status:": "Status: {0}", + "Read more": "Czytaj dalej", + appriseInstalled: "Apprise jest zostało zainstalowane.", + appriseNotInstalled: "Apprise nie zostało zainstalowane. {0}", + "Access Token": "Token Dostępu", + "Channel access token": "Token Dostępu Kanału", + "Line Developers Console": "Konsola Dewelopersja Line", + lineDevConsoleTo: "Konsola Dewelopersja Line - {0}", + "Basic Settings": "Ustawienia Ogólne", + "User ID": "Idetyfikator Użytkownika", + "Messaging API": "API Wiadomości", + wayToGetLineChannelToken: "Najpierw uzyskaj dostęp do {0}, utwórz dostawcę i kanał (Messaging API), a następnie możesz uzyskać token dostępu do kanału i identyfikator użytkownika z wyżej wymienionych pozycji menu.", + "Icon URL": "Adres Ikony", + aboutIconURL: "You can provide a link to a picture in \"Icon URL\" to override the default profile picture. Will not be used if Icon Emoji is set.", + aboutMattermostChannelName: "You can override the default channel that webhook posts to by entering the channel name into \"Channel Name\" field. This needs to be enabled in Mattermost webhook settings. Ex: #other-channel", + "matrix": "Matrix", + promosmsTypeEco: "SMS ECO - Tanie, lecz wolne. Dostępne tylko w Polsce", + promosmsTypeFlash: "SMS FLASH - Wiadomość automatycznie wyświetli się na urządzeniu. Dostępne tylko w Polsce.", + promosmsTypeFull: "SMS FULL - Szybkie i dostępne międzynarodowo. Wersja premium usługi, która pozwala min. ustawić własną nazwę nadawcy.", + promosmsTypeFull: "SMS SPEED - Wysyłka priorytetowa, posiada wszystkie zalety SMS FULL", + promosmsPhoneNumber: "Numer Odbiorcy", + promosmsSMSSender: "Nadawca SMS (Wcześniej zatwierdzone nazwy z panelu PromoSMS)", + // End notification form }; From 54f864a1bb868c49955086b7b790eab3537ae02e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B0=E9=80=B8Cary?= Date: Sun, 10 Oct 2021 10:04:07 +0800 Subject: [PATCH 018/104] =?UTF-8?q?Update=20Simplified=20Chinese=20Languag?= =?UTF-8?q?e=EF=BC=88=E6=9B=B4=E6=96=B0=E7=AE=80=E4=BD=93=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E8=AF=AD=E8=A8=80=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/languages/zh-CN.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/zh-CN.js b/src/languages/zh-CN.js index 40db94e2..a7f81950 100644 --- a/src/languages/zh-CN.js +++ b/src/languages/zh-CN.js @@ -179,7 +179,7 @@ export default { "Add a monitor": "添加监控项", "Edit Status Page": "编辑状态页", "Go to Dashboard": "前往仪表盘", - "Status Page": "Status Page", + "Status Page": "状态页", telegram: "Telegram", webhook: "Webhook", smtp: "Email (SMTP)", From 93a021d027dca3b3e972e2c95360e86231d9edbb Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 10 Oct 2021 12:20:15 +0800 Subject: [PATCH 019/104] Update SECURITY.md --- SECURITY.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/SECURITY.md b/SECURITY.md index d2f000ed..ae052e20 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,11 +5,23 @@ Use this section to tell people about which versions of your project are currently being supported with security updates. +#### Uptime Kuma Version: | Version | Supported | | ------- | ------------------ | | 1.7.X | :white_check_mark: | | < 1.7 | ❌ | +#### Upgradable Docker Tag: +| Tag | Supported | +| ------- | ------------------ | +| 1 | :white_check_mark: | +| 1-debian | :white_check_mark: | +| 1-alpine | :white_check_mark: | +| latest | :white_check_mark: | +| debian | :white_check_mark: | +| alpine | :white_check_mark: | +| All other tags | ❌ | + ## Reporting a Vulnerability Please report security issues to uptime@kuma.pet. From d6753b883376ced8517fc8b3517e4464ce8f7bea Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 10 Oct 2021 12:20:29 +0800 Subject: [PATCH 020/104] Update SECURITY.md --- SECURITY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index ae052e20..4a285723 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,13 +5,13 @@ Use this section to tell people about which versions of your project are currently being supported with security updates. -#### Uptime Kuma Version: +#### Uptime Kuma Versions: | Version | Supported | | ------- | ------------------ | | 1.7.X | :white_check_mark: | | < 1.7 | ❌ | -#### Upgradable Docker Tag: +#### Upgradable Docker Tags: | Tag | Supported | | ------- | ------------------ | | 1 | :white_check_mark: | From 272d4bde4581d9b977f5fec2fe97186aa1afa0a4 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 10 Oct 2021 13:19:10 +0800 Subject: [PATCH 021/104] find promossms language key typo --- src/languages/en.js | 2 +- src/languages/pl.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/en.js b/src/languages/en.js index 2ce8f46b..119b558e 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -277,7 +277,7 @@ export default { promosmsTypeEco: "SMS ECO - cheap but slow and often overloaded. Limited only to Polish recipients.", promosmsTypeFlash: "SMS FLASH - Message will automatically show on recipient device. Limited only to Polish recipients.", promosmsTypeFull: "SMS FULL - Premium tier of SMS, You can use Your Sender Name (You need to register name first). Reliable for alerts.", - promosmsTypeFull: "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).", + promosmsTypeSpeed: "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).", promosmsPhoneNumber: "Phone number (for Polish recipient You can skip area codes)", promosmsSMSSender: "SMS Sender Name : Pre-registred name or one of defaults: InfoSMS, SMS Info, MaxSMS, INFO, SMS", // End notification form diff --git a/src/languages/pl.js b/src/languages/pl.js index 2b083527..f6a32dc6 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -277,7 +277,7 @@ export default { promosmsTypeEco: "SMS ECO - Tanie, lecz wolne. Dostępne tylko w Polsce", promosmsTypeFlash: "SMS FLASH - Wiadomość automatycznie wyświetli się na urządzeniu. Dostępne tylko w Polsce.", promosmsTypeFull: "SMS FULL - Szybkie i dostępne międzynarodowo. Wersja premium usługi, która pozwala min. ustawić własną nazwę nadawcy.", - promosmsTypeFull: "SMS SPEED - Wysyłka priorytetowa, posiada wszystkie zalety SMS FULL", + promosmsTypeSpeed: "SMS SPEED - Wysyłka priorytetowa, posiada wszystkie zalety SMS FULL", promosmsPhoneNumber: "Numer Odbiorcy", promosmsSMSSender: "Nadawca SMS (Wcześniej zatwierdzone nazwy z panelu PromoSMS)", // End notification form From 4ba20254519d863df1387b3b297b6642039e8c0c Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 10 Oct 2021 14:40:19 +0800 Subject: [PATCH 022/104] minor --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 93b03ac6..55b7da27 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -64,7 +64,7 @@ It changed my current workflow and require further studies. I personally do not like something need to learn so much and need to config so much before you can finally start the app. - Easy to install for non-Docker users, no native build dependency is needed (at least for x86_64), no extra config, no extra effort to get it run -- Single container for Docker users, no very complex docker-composer file. Just map the volume and expose the port, then good to go +- Single container for Docker users, no very complex docker-compose file. Just map the volume and expose the port, then good to go - Settings should be configurable in the frontend. Env var is not encouraged. - Easy to use @@ -74,7 +74,7 @@ I personally do not like something need to learn so much and need to config so m - Follow `.editorconfig` - Follow ESLint -## Name convention +# Name convention - Javascript/Typescript: camelCaseType - SQLite: underscore_type From 2286f78f574ff56b787b56b558c5f56d9a09fd97 Mon Sep 17 00:00:00 2001 From: Louis Date: Sun, 10 Oct 2021 16:37:53 +0800 Subject: [PATCH 023/104] update to 1.8.0 --- package.json | 8 ++++---- server/prometheus.js | 31 ++++++++++++++++--------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index ae8ed1b1..6cb8d9db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uptime-kuma", - "version": "1.7.3", + "version": "1.8.0", "license": "MIT", "repository": { "type": "git", @@ -29,13 +29,13 @@ "build-docker": "npm run build-docker-debian && npm run build-docker-alpine", "build-docker-alpine-base": "docker buildx build -f docker/alpine-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-alpine . --push", "build-docker-debian-base": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-debian . --push", - "build-docker-alpine": "docker buildx build -f dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.7.3-alpine --target release . --push", - "build-docker-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.7.3 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.7.3-debian --target release . --push", + "build-docker-alpine": "docker buildx build -f dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.8.0-alpine --target release . --push", + "build-docker-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.8.0 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.8.0-debian --target release . --push", "build-docker-nightly": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push", "build-docker-nightly-alpine": "docker buildx build -f dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly-alpine --target nightly . --push", "build-docker-nightly-amd64": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", "upload-artifacts": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain", - "setup": "git checkout 1.7.3 && npm ci --production && npm run download-dist", + "setup": "git checkout 1.8.0 && npm ci --production && npm run download-dist", "download-dist": "node extra/download-dist.js", "update-version": "node extra/update-version.js", "mark-as-nightly": "node extra/mark-as-nightly.js", diff --git a/server/prometheus.js b/server/prometheus.js index c27f87f0..870581d2 100644 --- a/server/prometheus.js +++ b/server/prometheus.js @@ -6,7 +6,7 @@ const commonLabels = [ "monitor_url", "monitor_hostname", "monitor_port", -] +]; const monitor_cert_days_remaining = new PrometheusClient.Gauge({ name: "monitor_cert_days_remaining", @@ -41,45 +41,46 @@ class Prometheus { monitor_url: monitor.url, monitor_hostname: monitor.hostname, monitor_port: monitor.port - } + }; } update(heartbeat, tlsInfo) { + if (typeof tlsInfo !== "undefined") { try { - let is_valid = 0 + let is_valid = 0; if (tlsInfo.valid == true) { - is_valid = 1 + is_valid = 1; } else { - is_valid = 0 + is_valid = 0; } - monitor_cert_is_valid.set(this.monitorLabelValues, is_valid) + monitor_cert_is_valid.set(this.monitorLabelValues, is_valid); } catch (e) { - console.error(e) + console.error(e); } try { - monitor_cert_days_remaining.set(this.monitorLabelValues, tlsInfo.certInfo.daysRemaining) + monitor_cert_days_remaining.set(this.monitorLabelValues, tlsInfo.certInfo.daysRemaining); } catch (e) { - console.error(e) + console.error(e); } } try { - monitor_status.set(this.monitorLabelValues, heartbeat.status) + monitor_status.set(this.monitorLabelValues, heartbeat.status); } catch (e) { - console.error(e) + console.error(e); } try { if (typeof heartbeat.ping === "number") { - monitor_response_time.set(this.monitorLabelValues, heartbeat.ping) + monitor_response_time.set(this.monitorLabelValues, heartbeat.ping); } else { // Is it good? - monitor_response_time.set(this.monitorLabelValues, -1) + monitor_response_time.set(this.monitorLabelValues, -1); } } catch (e) { - console.error(e) + console.error(e); } } @@ -87,4 +88,4 @@ class Prometheus { module.exports = { Prometheus -} +}; From cee225bcb26969ebd2100cadca7771c0734f24db Mon Sep 17 00:00:00 2001 From: Louis Date: Sun, 10 Oct 2021 17:55:31 +0800 Subject: [PATCH 024/104] no idea why npm prune --production suddenly not working, switch to npm ci --production --- dockerfile | 2 +- dockerfile-alpine | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dockerfile b/dockerfile index ae935de6..38d585ca 100644 --- a/dockerfile +++ b/dockerfile @@ -6,7 +6,7 @@ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 COPY . . RUN npm ci && \ npm run build && \ - npm prune --production && \ + npm ci --production && \ chmod +x /app/extra/entrypoint.sh diff --git a/dockerfile-alpine b/dockerfile-alpine index a3a079eb..e883031a 100644 --- a/dockerfile-alpine +++ b/dockerfile-alpine @@ -6,7 +6,7 @@ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 COPY . . RUN npm ci && \ npm run build && \ - npm prune --production && \ + npm ci --production && \ chmod +x /app/extra/entrypoint.sh From 2adac64c838dd281d43c451a6475ce87e8018ba4 Mon Sep 17 00:00:00 2001 From: dhfhfk Date: Mon, 11 Oct 2021 00:02:37 +0900 Subject: [PATCH 025/104] Update ko-KR.js --- src/languages/ko-KR.js | 481 ++++++++++++++++++++++++----------------- 1 file changed, 281 insertions(+), 200 deletions(-) diff --git a/src/languages/ko-KR.js b/src/languages/ko-KR.js index 8ad7e960..d88db63b 100644 --- a/src/languages/ko-KR.js +++ b/src/languages/ko-KR.js @@ -1,201 +1,282 @@ export default { - languageName: "한국어", - checkEverySecond: "{0} 초마다 체크해요.", - retriesDescription: "서비스가 중단된 후 알림을 보내기 전 최대 재시도 횟수", - ignoreTLSError: "HTTPS 웹사이트에서 TLS/SSL 에러 무시하기", - upsideDownModeDescription: "서버 상태를 반대로 표시해요. 서버가 작동하면 오프라인으로 표시할 거에요.", - maxRedirectDescription: "최대 리다이렉트 횟수에요. 0을 입력하면 리다이렉트를 꺼요.", - acceptedStatusCodesDescription: "응답 성공으로 간주할 상태 코드를 정해요.", - passwordNotMatchMsg: "비밀번호 재입력이 일치하지 않아요.", - notificationDescription: "모니터링에 알림을 설정할 수 있어요.", - keywordDescription: "Html 이나 JSON에서 대소문자를 구분해 키워드를 검색해요.", - pauseDashboardHome: "일시 정지", - deleteMonitorMsg: "정말 이 모니터링을 삭제할까요?", - deleteNotificationMsg: "정말 이 알림을 모든 모니터링에서 삭제할까요?", - resoverserverDescription: "Cloudflare가 기본 서버에요, 원한다면 언제나 다른 resolver 서버로 변경할 수 있어요.", - rrtypeDescription: "모니터링할 RR-Type을 선택해요.", - pauseMonitorMsg: "정말 이 모니터링을 일시 정지 할까요?", - Settings: "설정", - Dashboard: "대시보드", - "New Update": "새로운 업데이트", - Language: "언어", - Appearance: "외형", - Theme: "테마", - General: "일반", - Version: "버전", - "Check Update On GitHub": "깃허브에서 업데이트 확인", - List: "목록", - Add: "추가", - "Add New Monitor": "새로운 모니터링 추가하기", - "Quick Stats": "간단한 정보", - Up: "온라인", - Down: "오프라인", - Pending: "대기 중", - Unknown: "알 수 없음", - Pause: "일시 정지", - Name: "이름", - Status: "상태", - DateTime: "날짜", - Message: "메시지", - "No important events": "중요 이벤트 없음", - Resume: "재개", - Edit: "수정", - Delete: "삭제", - Current: "현재", - Uptime: "업타임", - "Cert Exp.": "인증서 만료", - days: "일", - day: "일", - "-day": "-일", - hour: "시간", - "-hour": "-시간", - Response: "응답", - Ping: "핑", - "Monitor Type": "모니터링 종류", - Keyword: "키워드", - "Friendly Name": "이름", - URL: "URL", - Hostname: "호스트네임", - Port: "포트", - "Heartbeat Interval": "하트비트 주기", - Retries: "재시도", - Advanced: "고급", - "Upside Down Mode": "상태 반전 모드", - "Max. Redirects": "최대 리다이렉트", - "Accepted Status Codes": "응답 성공 상태 코드", - Save: "저장", - Notifications: "알림", - "Not available, please setup.": "존재하지 않아요, 새로운거 하나 만드는건 어때요?", - "Setup Notification": "알림 설정", - Light: "라이트", - Dark: "다크", - Auto: "자동", - "Theme - Heartbeat Bar": "테마 - 하트비트 바", - Normal: "기본값", - Bottom: "가운데", - None: "제거", - Timezone: "시간대", - "Search Engine Visibility": "검색 엔진 활성화", - "Allow indexing": "인덱싱 허용", - "Discourage search engines from indexing site": "검색 엔진 인덱싱 거부", - "Change Password": "비밀번호 변경", - "Current Password": "기존 비밀번호", - "New Password": "새로운 비밀번호", - "Repeat New Password": "새로운 비밀번호 재입력", - "Update Password": "비밀번호 변경", - "Disable Auth": "인증 끄기", - "Enable Auth": "인증 켜기", - Logout: "로그아웃", - Leave: "나가기", - "I understand, please disable": "기능에 대해 이해했으니 꺼주세요.", - Confirm: "확인", - Yes: "확인", - No: "취소", - Username: "이름", - Password: "비밀번호", - "Remember me": "비밀번호 기억하기", - Login: "로그인", - "No Monitors, please": "모니터링이 없어요,", - "add one": "하나 추가해봐요", - "Notification Type": "알림 종류", - Email: "이메일", - Test: "테스트", - "Certificate Info": "인증서 정보", - "Resolver Server": "Resolver 서버", - "Resource Record Type": "자원 레코드 유형", - "Last Result": "최근 결과", - "Create your admin account": "관리자 계정 만들기", - "Repeat Password": "비밀번호 재입력", - respTime: "응답 시간 (ms)", - notAvailableShort: "N/A", - Create: "생성하기", - clearEventsMsg: "정말로 이 모니터링부터 모든 이벤트를 제거할까요?", - clearHeartbeatsMsg: "정말로 이 모니터링부터 모든 하트비트를 제거할까요?", - confirmClearStatisticsMsg: "정말로 모든 통계치를 제거할까요?", - "Clear Data": "데이터 클리어", - Events: "이벤트", - Heartbeats: "하트비트", - "Auto Get": "자동 Get", - enableDefaultNotificationDescription: "모든 모니터링에 이 알림이 기본값으로 설정될거에요. 각각 모니터링에서 이 알림을 비활성화 할 수 있어요.", - "Default enabled": "기본값 ", - "Also apply to existing monitors": "기존 모니터링에도 적용되요.", - Export: "내보내기", - Import: "가져오기", - backupDescription: "모든 모니터링과 알림을 JSON 파일 형식에 저장할 수 있어요.", - backupDescription2: "(히스토리와 이벤트 데이터는 포함되어 있지 않아요.)", - backupDescription3: "알림 토큰과 같은 보안 데이터가 내보내기 파일에 포함되어 있으므로 관리에 주의해주세요.", - alertNoFile: "가져오기를 하기 위해 파일을 선택해주세요.", - alertWrongFileType: "JSON 파일을 선택해주세요.", - twoFAVerifyLabel: "2단계 인증이 정상적으로 등록됬는지 확인하기 위해 토큰을 입력해주세요.", - tokenValidSettingsMsg: "토큰이 정상 값 이에요! 2단계 인증 설정을 저장할 수 있어요.", - confirmEnableTwoFAMsg: "정말로 2단계 인증을 활성화 할까요?", - confirmDisableTwoFAMsg: "정말로 2단계 인증을 비활성화 할까요?", - "Apply on all existing monitors": "기존 모니터링에 모두 적용하기", - "Verify Token": "토큰 검증", - "Setup 2FA": "2단계 인증 설정하기", - "Enable 2FA": "2단계 인증 활성화", - "Disable 2FA": "2단계 인증 비활성화", - "2FA Settings": "2단계 인증 설정", - "Two Factor Authentication": "2단계 인증", - Active: "활성화", - Inactive: "비활성화", - Token: "토큰", - "Show URI": "URI 보기", - "Clear all statistics": "모든 통계치 ", - retryCheckEverySecond: "{0} 초마다 재시도", - importHandleDescription: "같은 이름을 가진 모든 모니터링 또는 알림들을 건너뛰기를 원하시면, '기존값 건너뛰기'를 눌러주세요. 기존 모니터링과 알림을 지우고 싶으면, '덮어쓰기'를 눌러주세요.", - confirmImportMsg: "정말로 백업을 가져올까요? 정확한 백업 설정인지 다시 확인해주세요.", - "Heartbeat Retry Interval": "하트비트 재시도 주기", - "Import Backup": "백업 가져오기", - "Export Backup": "백업 내보내기", - "Skip existing": "기존값 건너뛰기", - Overwrite: "덮어쓰기", - Options: "옵션", - "Keep both": "두개 모두 보존", - Tags: "태그", - "Add New below or Select...": "아래 새롭게 추가 또는 선택...", - "Tag with this name already exist.": "같은 태그 이름이 이미 존재해요.", - "Tag with this value already exist.": "같은 값을 가진 태그가 이미 존재해요.", - color: "색상", - "value (optional)": "값 (선택)", - Gray: "회색", - Red: "빨강색", - Orange: "주황색", - Green: "초록색", - Blue: "파랑색", - Indigo: "남색", - Purple: "보라색", - Pink: "핑크색", - "Search...": "검색...", - "Avg. Ping": "평균 핑", - "Avg. Response": "평균 응답", - "Entry Page": "첫 페이지", - statusPageNothing: "아무것도 없어요. 새로운 그룹 또는 모니터링을 추가해주세요.", - "No Services": "서비스 없음", - "All Systems Operational": "모든 시스템 정상", - "Partially Degraded Service": "일부 시스템 비정상", - "Degraded Service": "모든 시스템 비정상", - "Add Group": "그룹 추가", - "Add a monitor": "모니터링 추가r", - "Edit Status Page": "상태 페이지 수정", - "Go to Dashboard": "대쉬보드로 가기", - "Status Page": "상태 페이지", - telegram: "Telegram", - webhook: "Webhook", - smtp: "Email (SMTP)", - discord: "Discord", - teams: "Microsoft Teams", - signal: "Signal", - gotify: "Gotify", - slack: "Slack", - "rocket.chat": "Rocket.chat", - pushover: "Pushover", - pushy: "Pushy", - octopush: "Octopush", - promosms: "PromoSMS", - lunasea: "LunaSea", - apprise: "Apprise (50개 이상 알림 서비스 )", - pushbullet: "Pushbullet", - line: "Line Messenger", - mattermost: "Mattermost", -}; + languageName: '한국어', + checkEverySecond: '{0}초마다 확인해요.', + retryCheckEverySecond: '{0}초마다 다시 확인해요.', + retriesDescription: '서비스가 중단된 후 알림을 보내기 전 최대 재시도 횟수', + ignoreTLSError: 'HTTPS 웹사이트에서 TLS/SSL 에러 무시하기', + upsideDownModeDescription: '서버 상태를 반대로 표시해요. 서버가 작동하면 오프라인으로 표시할 거에요.', + maxRedirectDescription: '최대 리다이렉트 횟수에요. 0을 입력하면 리다이렉트를 꺼요.', + acceptedStatusCodesDescription: '응답 성공으로 간주할 상태 코드를 정해요.', + passwordNotMatchMsg: '비밀번호 재입력이 일치하지 않아요.', + notificationDescription: '모니터링에 알림을 설정할 수 있어요.', + keywordDescription: 'Html 이나 JSON에서 대소문자를 구분해 키워드를 검색해요.', + pauseDashboardHome: '일시 정지', + deleteMonitorMsg: '정말 이 모니터링을 삭제할까요?', + deleteNotificationMsg: '정말 이 알림을 모든 모니터링에서 삭제할까요?', + resoverserverDescription: 'Cloudflare가 기본 서버에요, 원한다면 언제나 다른 resolver 서버로 변경할 수 있어요.', + rrtypeDescription: '모니터링할 RR-Type을 선택해요.', + pauseMonitorMsg: '정말 이 모니터링을 일시 정지 할까요?', + enableDefaultNotificationDescription: '새로 추가하는 모든 모니터링에 이 알림을 기본적으로 활성화해요. 각 모니터에 대해 별도로 알림을 비활성화할 수 있어요.', + clearEventsMsg: '정말 이 모니터링에 대한 모든 이벤트를 삭제할까요?', + clearHeartbeatsMsg: '정말 이 모니터링에 대한 모든 하트비트를 삭제할까요?', + confirmClearStatisticsMsg: '정말 모든 통계를 삭제할까요?', + importHandleDescription: "이름이 같은 모든 모니터링이나 알림을 건너뛰려면 '기존값 건너뛰기'를 선택해주세요. '덮어쓰기'는 기존의 모든 모니터링과 알림을 삭제해요.", + confirmImportMsg: '정말 백업을 가져올까요? 가져오기 옵션을 제대로 설정했는지 다시 확인해주세요.', + twoFAVerifyLabel: '토큰을 입력해 2단계 인증이 작동하는지 확인해주세요.', + tokenValidSettingsMsg: '토큰이 유효해요! 이제 2단계 인증 설정을 저장할 수 있어요.', + confirmEnableTwoFAMsg: '정말 2단계 인증을 활성화 할까요?', + confirmDisableTwoFAMsg: '정말 2단계 인증을 비활성화 할까요?', + Settings: '설정', + Dashboard: '대시보드', + 'New Update': '새로운 업데이트', + Language: '언어', + Appearance: '외형', + Theme: '테마', + General: '일반', + Version: '버전', + 'Check Update On GitHub': '깃허브에서 업데이트 확인', + List: '목록', + Add: '추가', + 'Add New Monitor': '새로운 모니터링 추가하기', + 'Quick Stats': '간단한 정보', + Up: '온라인', + Down: '오프라인', + Pending: '대기 중', + Unknown: '알 수 없음', + Pause: '일시 정지', + Name: '이름', + Status: '상태', + DateTime: '날짜', + Message: '메시지', + 'No important events': '중요 이벤트 없음', + Resume: '재개', + Edit: '수정', + Delete: '삭제', + Current: '현재', + Uptime: '업타임', + 'Cert Exp.': '인증서 만료', + days: '일', + day: '일', + '-day': '-일', + hour: '시간', + '-hour': '-시간', + Response: '응답', + Ping: '핑', + 'Monitor Type': '모니터링 종류', + Keyword: '키워드', + 'Friendly Name': '이름', + URL: 'URL', + Hostname: '호스트네임', + Port: '포트', + 'Heartbeat Interval': '하트비트 주기', + Retries: '재시도', + 'Heartbeat Retry Interval': '하트비드 재시도 주기', + Advanced: '고급', + 'Upside Down Mode': '상태 반전 모드', + 'Max. Redirects': '최대 리다이렉트', + 'Accepted Status Codes': '응답 성공 상태 코드', + Save: '저장', + Notifications: '알림', + 'Not available, please setup.': '존재하지 않아요, 새로운거 하나 만드는건 어때요?', + 'Setup Notification': '알림 설정', + Light: '라이트', + Dark: '다크', + Auto: '자동', + 'Theme - Heartbeat Bar': '테마 - 하트비트 바', + Normal: '기본값', + Bottom: '가운데', + None: '없애기', + Timezone: '시간대', + 'Search Engine Visibility': '검색 엔진 활성화', + 'Allow indexing': '인덱싱 허용', + 'Discourage search engines from indexing site': '검색 엔진 인덱싱 거부', + 'Change Password': '비밀번호 변경', + 'Current Password': '기존 비밀번호', + 'New Password': '새로운 비밀번호', + 'Repeat New Password': '새로운 비밀번호 재입력', + 'Update Password': '비밀번호 변경', + 'Disable Auth': '인증 비활성화', + 'Enable Auth': '인증 활성화', + Logout: '로그아웃', + Leave: '나가기', + 'I understand, please disable': '기능에 대해 이해했으니 꺼주세요.', + Confirm: '확인', + Yes: '확인', + No: '취소', + Username: '이름', + Password: '비밀번호', + 'Remember me': '비밀번호 기억하기', + Login: '로그인', + 'No Monitors, please': '모니터링이 없어요,', + 'add one': '하나 추가해봐요', + 'Notification Type': '알림 종류', + Email: '이메일', + Test: '테스트', + 'Certificate Info': '인증서 정보', + 'Resolver Server': 'Resolver 서버', + 'Resource Record Type': '자원 레코드 유형', + 'Last Result': '최근 결과', + 'Create your admin account': '관리자 계정 만들기', + 'Repeat Password': '비밀번호 재입력', + 'Import Backup': '백업 가져오기', + 'Export Backup': '백업 내보내기', + Export: '내보내기', + Import: '가져오기', + respTime: '응답 시간 (ms)', + notAvailableShort: 'N/A', + 'Default enabled': '기본 알림으로 설정', + 'Apply on all existing monitors': '기존 모니터링에 모두 적용하기', + Create: '생성하기', + 'Clear Data': '데이터 삭제', + Events: '이벤트', + Heartbeats: '하트비트', + 'Auto Get': '자동 Get', + backupDescription: '모든 모니터링과 알림을 JSON 파일 형식에 저장할 수 있어요.', + backupDescription2: '히스토리와 이벤트 데이터는 포함되어 있지 않아요.', + backupDescription3: '알림 토큰과 같은 보안 데이터가 내보내기 파일에 포함되어 있으므로 관리에 주의해주세요.', + alertNoFile: '가져오기를 하기 위해 파일을 선택해주세요.', + alertWrongFileType: 'JSON 파일을 선택해주세요.', + 'Clear all statistics': '모든 통계치 삭제', + 'Skip existing': '기존값 건너뛰기', + Overwrite: '덮어쓰기', + Options: '옵션', + 'Keep both': '두개 모두 보존', + 'Verify Token': '토큰 검증', + 'Setup 2FA': '2단계 인증 설정하기', + 'Enable 2FA': '2단계 인증 활성화', + 'Disable 2FA': '2단계 인증 비활성화', + '2FA Settings': '2단계 인증 설정', + 'Two Factor Authentication': '2단계 인증', + Active: '활성화', + Inactive: '비활성화', + Token: '토큰', + 'Show URI': 'URI 보기', + Tags: '태그', + 'Add New below or Select...': '아래 새롭게 추가 또는 선택...', + 'Tag with this name already exist.': '같은 태그 이름이 이미 존재해요.', + 'Tag with this value already exist.': '같은 값을 가진 태그가 이미 존재해요.', + color: '색상', + 'value (optional)': '값 (선택)', + Gray: '회색', + Red: '빨강색', + Orange: '주황색', + Green: '초록색', + Blue: '파랑색', + Indigo: '남색', + Purple: '보라색', + Pink: '핑크색', + 'Search...': '검색...', + 'Avg. Ping': '평균 핑', + 'Avg. Response': '평균 응답', + 'Entry Page': '첫 페이지', + statusPageNothing: '아무것도 없어요. 새로운 그룹 또는 모니터링을 추가해주세요.', + 'No Services': '서비스 없음', + 'All Systems Operational': '모든 시스템 정상', + 'Partially Degraded Service': '일부 시스템 비정상', + 'Degraded Service': '모든 시스템 비정상', + 'Add Group': '그룹 추가', + 'Add a monitor': '모니터링 추가r', + 'Edit Status Page': '상태 페이지 수정', + 'Go to Dashboard': '대쉬보드로 가기', + 'Status Page': '상태 페이지', + defaultNotificationName: '내 {notification} 알림 ({number})', + here: '여기', + Required: '필수', + telegram: 'Telegram', + 'Bot Token': '봇 토큰', + 'You can get a token from': '토큰은 여기서 얻을 수 있어요:', + 'Chat ID': '채팅 ID', + supportTelegramChatID: "Direct Chat / Group / Channel's Chat ID를 지원해요.", + wayToGetTelegramChatID: '봇에 메시지를 보내 채팅 ID를 얻고 밑에 URL로 이동해 chat_id를 볼 수 있어요.', + 'YOUR BOT TOKEN HERE': 'YOUR BOT TOKEN HERE', + chatIDNotFound: '채팅 ID를 찾을 수 없어요. 먼저 봇에게 메시지를 보내주세요.', + webhook: '웹훅', + 'Post URL': 'Post URL', + 'Content Type': 'Content Type', + webhookJsonDesc: '{0}은 express.js와 같은 최신 HTTP 서버에 적합해요.', + webhookFormDataDesc: '{multipart}은 PHP에 적합해요. {decodeFunction}를 기준으로 json을 디코딩하면 되어요.', + smtp: 'Email (SMTP)', + secureOptionNone: '없음 / STARTTLS (25, 587)', + secureOptionTLS: 'TLS (465)', + 'Ignore TLS Error': 'TLS 에러 무시하기', + 'From Email': '보내는 이메일', + 'To Email': '받는 이메일', + smtpCC: '참조', + smtpBCC: '숨은 참조', + discord: 'Discord', + 'Discord Webhook URL': 'Discord 웹훅 URL', + wayToGetDiscordURL: '서버 설정 -> 연동 -> 웹후크 보기 -> 새 웹후크에서 얻을 수 있어요.', + 'Bot Display Name': '표시 이름', + 'Prefix Custom Message': '접두사 메시지', + 'Hello @everyone is...': "{'@'}everyone 서버 상태 알림이에요...", + teams: 'Microsoft Teams', + 'Webhook URL': '웹훅 URL', + wayToGetTeamsURL: '{0}에서 웹훅을 어떻게 만드는지 알아봐요.', + signal: 'Signal', + Number: '숫자', + Recipients: '받는 사람', + needSignalAPI: 'REST API를 사용하는 Signal 클라이언트가 있어야 해요.', + wayToCheckSignalURL: '밑에 URL을 확인해 URL 설정 방법을 볼 수 있어요.', + signalImportant: '중요: 받는 사람의 그룹과 숫자는 섞을 수 없어요!', + gotify: 'Gotify', + 'Application Token': '애플리케이션 토큰', + 'Server URL': '서버 URL', + Priority: 'Priority', + slack: 'Slack', + 'Icon Emoji': '아이콘 이모지', + 'Channel Name': '채널 이름', + 'Uptime Kuma URL': 'Uptime Kuma URL', + aboutWebhooks: '웹훅에 대한 설명: {0}', + aboutChannelName: '웹훅 채널을 우회하려면 {0} 채널 이름칸에 채널 이름을 입력해주세요. 예: #기타-채널', + aboutKumaURL: 'Uptime Kuma URL칸을 공백으로 두면 기본적으로 Project Github 페이지로 설정해요.', + emojiCheatSheet: '이모지 목록 시트: {0}', + 'rocket.chat': 'Rocket.chat', + pushover: 'Pushover', + pushy: 'Pushy', + octopush: 'Octopush', + promosms: 'PromoSMS', + lunasea: 'LunaSea', + apprise: 'Apprise (50개 이상 알림 서비스)', + pushbullet: 'Pushbullet', + line: 'Line Messenger', + mattermost: 'Mattermost', + 'User Key': '사용자 키', + Device: '장치', + 'Message Title': '메시지 제목', + 'Notification Sound': '알림음', + 'More info on:': '자세한 정보: {0}', + pushoverDesc1: '긴급 우선 순위 (2)는 재시도 사이에 기본적으로 30초의 타임아웃이 있고, 1시간 후에 만료되어요.', + pushoverDesc2: '다른 장치에 알림을 보내려면 장치칸을 입력해주세요.', + 'SMS Type': 'SMS 종류', + octopushTypePremium: '프리미엄 (빠름) - 알림 기능에 적합해요)', + octopushTypeLowCost: '저렴한 요금 (느림, 가끔 차단될 수 있어요)', + 'Check octopush prices': '{0}에서 octopush 가격을 확인할 수 있어요.', + octopushPhoneNumber: '휴대전화 번호 (intl format, eg : +33612345678) ', + octopushSMSSender: '보내는 사람 이름 : 3-11개의 영숫자 및 여백공간 (a-z, A-Z, 0-9', + 'LunaSea Device ID': 'LunaSea 장치 ID', + 'Apprise URL': 'Apprise URL', + 'Example:': '예: {0}', + 'Read more:': '더 보기: {0}', + 'Status:': '상태: {0}', + 'Read more': '더 보기', + appriseInstalled: 'Apprise가 설치되어있어요..', + appriseNotInstalled: 'Apprise 가 설치되어있지 않아요. {0}', + 'Access Token': '액세스 토큰', + 'Channel access token': '채널 엑세스 토큰', + 'Line Developers Console': 'Line 개발자 콘솔', + lineDevConsoleTo: 'Line 개발자 콘솔 - {0}', + 'Basic Settings': 'Basic Settings 메뉴', + 'User ID': '사용자 ID', + 'Messaging API': 'Messaging API 메뉴', + wayToGetLineChannelToken: '먼저 {0}에 엑세스하고, 공급자 및 채널 (메시징 API)을 만든 다음, 각 메뉴 밑에 언급된 메뉴에서 채널 액세스 토큰과 사용자 ID를 얻을 수 있어요.', + 'Icon URL': '아이콘 URL', + aboutIconURL: '"Icon URL"에 사진 링크를 입력해 프로필 사진을 설정할 수 있어요. 아이콘 이모지가 설정되어 있으면 적용되지 않을거에요.', + aboutMattermostChannelName: '채널 이름을 입력하면 웹훅이 게시할 기본 채널을 재설정할 수 있어요. 이 설정은 Mattermost 웹훅 설정에서 활성화해야 해요. 예: #기타-채널', + matrix: '매트릭스', + promosmsTypeEco: 'SMS ECO - 저렴하지만 느리고 가끔 과부하에 걸려요. 폴란드 수신자만 사용할 수 있어요. ', + promosmsTypeFlash: 'SMS FLASH - 메시지가 받는 사람 장치에 자동으로 표시되어요. 폴란드 수신자만 사용할 수 있어요.', + promosmsTypeFull: 'SMS FULL - SMS 프리미엄 티어, 보내는 사람 이름을 먼저 등록해야 해요. 알림 기능에 적합해요.', + promosmsTypeSpeed: 'SMS SPEED - 시스템에서 가장 높은 우선순위에요. 매우 빠르고 신뢰할 수 있지만 비용이 많이 들어요 (SMS 전체 가격의 약 두 배).', + promosmsPhoneNumber: '전화 번호 (폴란드 수신자라면 지역번호를 적지 않아도 돼요.)', + promosmsSMSSender: 'SMS 보내는 사람 이름 : 미리 등록된 이름 혹은 기본값 중 하나에요: InfoSMS, SMS Info, MaxSMS, INFO, SMS' +} \ No newline at end of file From efd38229301bd8874490a11c00e74c4e7fbdbad8 Mon Sep 17 00:00:00 2001 From: RisedSky Date: Sun, 10 Oct 2021 17:33:02 +0200 Subject: [PATCH 026/104] Update fr-FR.js All the lines corresponds to the English version (sorted correctly) Plus, updated all the translated strings --- src/languages/fr-FR.js | 197 +++++++++++++++++++++++++++++------------ 1 file changed, 140 insertions(+), 57 deletions(-) diff --git a/src/languages/fr-FR.js b/src/languages/fr-FR.js index 9f234f7a..92184e59 100644 --- a/src/languages/fr-FR.js +++ b/src/languages/fr-FR.js @@ -1,5 +1,31 @@ export default { languageName: "Français (France)", + checkEverySecond: "Vérifier toutes les {0} secondes", + retryCheckEverySecond: "Réessayer toutes les {0} secondes.", + retriesDescription: "Nombre d'essais avant que le service soit déclaré hors-ligne.", + ignoreTLSError: "Ignorer les erreurs liées au certificat SSL/TLS", + upsideDownModeDescription: "Si le service est en ligne, il sera alors noté hors-ligne et vice-versa.", + maxRedirectDescription: "Nombre maximal de redirections avant que le service soit noté hors-ligne.", + acceptedStatusCodesDescription: "Codes HTTP considérés comme en ligne", + passwordNotMatchMsg: "Les mots de passe ne correspondent pas", + notificationDescription: "Une fois ajoutée, vous devez l'activer manuellement dans les paramètres de vos hôtes.", + keywordDescription: "Le mot clé sera recherché dans la réponse HTML/JSON reçue du site internet.", + pauseDashboardHome: "Éléments mis en pause", + deleteMonitorMsg: "Êtes-vous sûr de vouloir supprimer cette sonde ?", + deleteNotificationMsg: "Êtes-vous sûr de vouloir supprimer ce type de notifications ? Une fois désactivée, les services qui l'utilisent ne pourront plus envoyer de notifications.", + resoverserverDescription: "Le DNS de cloudflare est utilisé par défaut, mais vous pouvez le changer si vous le souhaitez.", + rrtypeDescription: "Veuillez séléctionner un type d'enregistrement DNS", + pauseMonitorMsg: "Etes vous sur de vouloir mettre en pause cette sonde ?", + enableDefaultNotificationDescription: "Pour chaque nouvelle sonde, cette notification sera activée par défaut. Vous pouvez toujours désactiver la notification séparément pour chaque sonde.", + clearEventsMsg: "Êtes-vous sûr de vouloir supprimer tous les événements pour cette sonde ?", + clearHeartbeatsMsg: "Êtes-vous sûr de vouloir supprimer tous les vérifications pour cette sonde ?", + confirmClearStatisticsMsg: "Êtes-vous sûr de vouloir supprimer tous les statistiques ?", + importHandleDescription: "Choisissez 'Ignorer l'existant' si vous voulez ignorer chaque sonde ou notification portant le même nom. L'option 'Écraser' supprime tous les sondes et notifications existantes.", + confirmImportMsg: "Êtes-vous sûr d'importer la sauvegarde ? Veuillez vous assurer que vous avez sélectionné la bonne option d'importation.", + twoFAVerifyLabel: "Veuillez saisir votre jeton pour vérifier que le système 2FA fonctionne.", + tokenValidSettingsMsg: "Le jeton est valide ! Vous pouvez maintenant sauvegarder les paramètres 2FA.", + confirmEnableTwoFAMsg: "Êtes-vous sûr de vouloir activer le 2FA ?", + confirmDisableTwoFAMsg: "Êtes-vous sûr de vouloir désactiver le 2FA ?", Settings: "Paramètres", Dashboard: "Tableau de bord", "New Update": "Mise à jour disponible", @@ -18,7 +44,6 @@ export default { Pending: "En attente", Unknown: "Inconnu", Pause: "En Pause", - pauseDashboardHome: "Éléments mis en pause", Name: "Nom", Status: "État", DateTime: "Heure", @@ -30,31 +55,26 @@ export default { Current: "Actuellement", Uptime: "Uptime", "Cert Exp.": "Certificat expiré", - days: "Jours", - day: "Jour", - "-day": "Journée", - hour: "Heure", - "-hour": "Heures", - checkEverySecond: "Vérifier toutes les {0} secondes", + days: "jours", + day: "jour", + "-day": "-jours", + hour: "-heure", + "-hour": "-heures", Response: "Temps de réponse", Ping: "Ping", "Monitor Type": "Type de Sonde", Keyword: "Mot-clé", "Friendly Name": "Nom d'affichage", URL: "URL", - Hostname: "Nom d'hôte", + Hostname: "Nom d'hôte / adresse IP", Port: "Port", "Heartbeat Interval": "Intervale de vérification", Retries: "Essais", - retriesDescription: "Nombre d'essais avant que le service soit déclaré hors-ligne.", + "Heartbeat Retry Interval": "Réessayer l'intervale de vérification", Advanced: "Avancé", - ignoreTLSError: "Ignorer les erreurs liées au certificat SSL/TLS", "Upside Down Mode": "Mode inversé", - upsideDownModeDescription: "Si le service est en ligne, il sera alors noté hors-ligne et vice-versa.", "Max. Redirects": "Nombre maximum de redirections", - maxRedirectDescription: "Nombre maximal de redirections avant que le service soit noté hors-ligne.", - "Accepted Status Codes": "Codes HTTP", - acceptedStatusCodesDescription: "Codes HTTP considérés comme en ligne", + "Accepted Status Codes": "Codes HTTP acceptés", Save: "Sauvegarder", Notifications: "Notifications", "Not available, please setup.": "Pas de système de notification disponible, merci de le configurer", @@ -63,9 +83,9 @@ export default { Dark: "Sombre", Auto: "Automatique", "Theme - Heartbeat Bar": "Voir les services surveillés", - Normal: "Général", + Normal: "Normal", Bottom: "En dessous", - None: "Rien", + None: "Aucun", Timezone: "Fuseau Horaire", "Search Engine Visibility": "Visibilité par les moteurs de recherche", "Allow indexing": "Autoriser l'indexation par des moteurs de recherche", @@ -74,14 +94,12 @@ export default { "Current Password": "Mot de passe actuel", "New Password": "Nouveau mot de passe", "Repeat New Password": "Répéter votre nouveau mot de passe", - passwordNotMatchMsg: "Les mots de passe ne correspondent pas", "Update Password": "Mettre à jour le mot de passe", "Disable Auth": "Désactiver l'authentification", "Enable Auth": "Activer l'authentification", Logout: "Se déconnecter", - notificationDescription: "Une fois ajoutée, vous devez l'activer manuellement dans les paramètres de vos hôtes.", Leave: "Quitter", - "I understand, please disable": "J'ai compris, désactivez-le", + "I understand, please disable": "Je comprends, désactivez-le", Confirm: "Confirmer", Yes: "Oui", No: "Non", @@ -94,43 +112,35 @@ export default { "Notification Type": "Type de notification", Email: "Email", Test: "Tester", - keywordDescription: "Le mot clé sera recherché dans la réponse HTML/JSON reçue du site internet.", "Certificate Info": "Informations sur le certificat SSL", - deleteMonitorMsg: "Êtes-vous sûr de vouloir supprimer cette sonde ?", - deleteNotificationMsg: "Êtes-vous sûr de vouloir supprimer ce type de notifications ? Une fois désactivée, les services qui l'utilisent ne pourront plus envoyer de notifications.", "Resolver Server": "Serveur DNS utilisé", "Resource Record Type": "Type d'enregistrement DNS recherché", - resoverserverDescription: "Le DNS de cloudflare est utilisé par défaut, mais vous pouvez le changer si vous le souhaitez.", - rrtypeDescription: "Veuillez séléctionner un type d'enregistrement DNS", - pauseMonitorMsg: "Etes vous sur de vouloir mettre en pause cette sonde ?", "Last Result": "Dernier résultat", "Create your admin account": "Créez votre compte administrateur", "Repeat Password": "Répéter le mot de passe", + "Import Backup": "Importation de la sauvegarde", + "Export Backup": "Exportation de la sauvegarde", + Export: "Exporter", + Import: "Importer", respTime: "Temps de réponse (ms)", notAvailableShort: "N/A", + "Default enabled": "Activé par défaut", + "Apply on all existing monitors": "Appliquer sur toutes les sondes existantes", Create: "Créer", - clearEventsMsg: "Êtes-vous sûr de vouloir supprimer tous les événements pour cette sonde ?", - clearHeartbeatsMsg: "Êtes-vous sûr de vouloir supprimer tous les vérifications pour cette sonde ? Are you sure want to delete all heartbeats for this monitor?", - confirmClearStatisticsMsg: "tes-vous sûr de vouloir supprimer tous les statistiques ?", "Clear Data": "Effacer les données", Events: "Evénements", Heartbeats: "Vérfications", "Auto Get": "Auto Get", - enableDefaultNotificationDescription: "Pour chaque nouvelle sonde, cette notification sera activée par défaut. Vous pouvez toujours désactiver la notification séparément pour chaque sonde.", - "Default enabled": "Activé par défaut", - "Also apply to existing monitors": "S'applique également aux sondes existantes", - Export: "Exporter", - Import: "Importer", backupDescription: "Vous pouvez sauvegarder toutes les sondes et toutes les notifications dans un fichier JSON.", backupDescription2: "PS: Les données relatives à l'historique et aux événements ne sont pas incluses.", backupDescription3: "Les données sensibles telles que les jetons de notification sont incluses dans le fichier d'exportation, veuillez les conserver soigneusement.", alertNoFile: "Veuillez sélectionner un fichier à importer.", alertWrongFileType: "Veuillez sélectionner un fichier JSON à importer.", - twoFAVerifyLabel: "Veuillez saisir votre jeton pour vérifier que le système 2FA fonctionne.", - tokenValidSettingsMsg: "Le jeton est valide ! Vous pouvez maintenant sauvegarder les paramètres 2FA.", - confirmEnableTwoFAMsg: "Êtes-vous sûr de vouloir activer le 2FA ?", - confirmDisableTwoFAMsg: "Êtes-vous sûr de vouloir désactiver le 2FA ?", - "Apply on all existing monitors": "Appliquer sur toutes les sondes existantes", + "Clear all statistics": "Effacer touutes les statistiques", + "Skip existing": "Sauter l'existant", + Overwrite: "Ecraser", + Options: "Options", + "Keep both": "Garder les deux", "Verify Token": "Vérifier le jeton", "Setup 2FA": "Configurer 2FA", "Enable 2FA": "Activer 2FA", @@ -141,17 +151,6 @@ export default { Inactive: "Inactif", Token: "Jeton", "Show URI": "Afficher l'URI", - "Clear all statistics": "Effacer touutes les statistiques", - retryCheckEverySecond: "Réessayer toutes les {0} secondes.", - importHandleDescription: "Choisissez 'Ignorer l'existant' si vous voulez ignorer chaque sonde ou notification portant le même nom. L'option 'Écraser' supprime tous les sondes et notifications existantes.", - confirmImportMsg: "Êtes-vous sûr d'importer la sauvegarde ? Veuillez vous assurer que vous avez sélectionné la bonne option d'importation.", - "Heartbeat Retry Interval": "Réessayer l'intervale de vérification", - "Import Backup": "Importation de la sauvegarde", - "Export Backup": "Exportation de la sauvegarde", - "Skip existing": "Sauter l'existant", - Overwrite: "Ecraser", - Options: "Options", - "Keep both": "Garder les deux", Tags: "Étiquettes", "Add New below or Select...": "Ajouter nouveau ci-dessous ou sélectionner...", "Tag with this name already exist.": "Une étiquette portant ce nom existe déjà.", @@ -180,14 +179,58 @@ export default { "Edit Status Page": "Modifier la page de statut", "Go to Dashboard": "Accéder au tableau de bord", "Status Page": "Status Page", - telegram: "Telegram", - webhook: "Webhook", - smtp: "Email (SMTP)", - discord: "Discord", - teams: "Microsoft Teams", - signal: "Signal", - gotify: "Gotify", - slack: "Slack", + // Start notification form + defaultNotificationName: "Ma notification {notification} numéro ({number})", + here: "ici", + "Required": "Requis", + "telegram": "Telegram", + "Bot Token": "Bot Token", + "You can get a token from": "Vous pouvez avoir un token depuis", + "Chat ID": "Chat ID", + supportTelegramChatID: "Supporte les messages privés / en groupe / l'ID du salon", + wayToGetTelegramChatID: "Vous pouvez obtenir l'ID du chat en envoyant un message avec le bot puis en récupérant l'URL pour voir l'ID du salon:", + "YOUR BOT TOKEN HERE": "VOTRE TOKEN BOT ICI", + chatIDNotFound: "ID du salon introuvable, envoyez un message via le bot avant", + "webhook": "Webhook", + "Post URL": "Post URL", + "Content Type": "Content Type", + webhookJsonDesc: "{0} est bon pour tous les serveurs HTTP modernes comme express.js", + webhookFormDataDesc: "{multipart} est bon pour du PHP, vous avez juste besoin de mettre le json via {decodeFunction}", + "smtp": "Email (SMTP)", + secureOptionNone: "Aucun / STARTTLS (25, 587)", + secureOptionTLS: "TLS (465)", + "Ignore TLS Error": "Ignorer les erreurs TLS", + "From Email": "Depuis l'Email", + "To Email": "Vers l'Email", + smtpCC: "CC", + smtpBCC: "BCC", + "discord": "Discord", + "Discord Webhook URL": "Discord Webhook URL", + wayToGetDiscordURL: "Vous pouvez l'obtenir en allant dans 'Paramètres du Serveur' -> 'Intégrations' -> 'Créer un Webhook'", + "Bot Display Name": "Nom du bot (affiché)", + "Prefix Custom Message": "Prefix Custom Message", + "Hello @everyone is...": "Bonjour {'@'}everyone il...", + "teams": "Microsoft Teams", + "Webhook URL": "Webhook URL", + wayToGetTeamsURL: "Vous pouvez apprendre comment créer un Webhook {0}.", + "signal": "Signal", + "Number": "Numéro", + "Recipients": "Destinataires", + needSignalAPI: "Vous avez besoin d'un client Signal avec l'API REST.", + wayToCheckSignalURL: "Vous pouvez regarder l'URL sur comment le mettre en place:", + signalImportant: "IMPORTANT: Vous ne pouvez pas mixer les groupes et les numéros en destinataires!", + "gotify": "Gotify", + "Application Token": "Application Token", + "Server URL": "Server URL", + "Priority": "Priorité", + "slack": "Slack", + "Icon Emoji": "Icon Emoji", + "Channel Name": "Nom du salon", + "Uptime Kuma URL": "Uptime Kuma URL", + aboutWebhooks: "Plus d'informations sur les Webhooks ici: {0}", + aboutChannelName: "Mettez le nom du salon dans {0} dans Channel Name si vous voulez bypass le salon Webhook. Ex: #autre-salon", + aboutKumaURL: "Si vous laissez l'URL d'Uptime Kuma vierge, elle redirigera vers la page du projet GitHub.", + emojiCheatSheet: "Emoji cheat sheet: {0}", "rocket.chat": "Rocket.chat", pushover: "Pushover", pushy: "Pushy", @@ -198,4 +241,44 @@ export default { pushbullet: "Pushbullet", line: "Line Messenger", mattermost: "Mattermost", + "User Key": "Clé d'utilisateur", + "Device": "Device", + "Message Title": "Titre du message", + "Notification Sound": "Son de notification", + "More info on:": "Plus d'informations sur: {0}", + pushoverDesc1: "Priorité d'urgence (2) a par défaut 30 secondes de délai dépassé entre les tentatives et expierera après 1 heure.", + pushoverDesc2: "Si vous voulez envoyer des notifications sur différents Appareils, remplissez le champ Device.", + "SMS Type": "SMS Type", + octopushTypePremium: "Premium (Rapide - recommandé pour les alertes)", + octopushTypeLowCost: "A bas prix (Lent, bloqué de temps en temps par l'opérateur)", + "Check octopush prices": "Vérifiez les prix d'octopush {0}.", + octopushPhoneNumber: "Numéro de téléphone (format intérn., ex : +33612345678) ", + octopushSMSSender: "Nom de l'envoyer : 3-11 caractères alphanumériques avec espace (a-zA-Z0-9)", + "LunaSea Device ID": "LunaSea Device ID", + "Apprise URL": "Apprise URL", + "Example:": "Exemple: {0}", + "Read more:": "En savoir plus: {0}", + "Status:": "Status: {0}", + "Read more": "En savoir plus", + appriseInstalled: "Apprise est intallé.", + appriseNotInstalled: "Apprise n'est pas intallé. {0}", + "Access Token": "Access Token", + "Channel access token": "Channel access token", + "Line Developers Console": "Line Developers Console", + lineDevConsoleTo: "Line Developers Console - {0}", + "Basic Settings": "Paramètres de base", + "User ID": "Identifiant utilisateur", + "Messaging API": "Messaging API", + wayToGetLineChannelToken: "Premièrement accéder à {0}, créez un Provider et un Salon (Messaging API), puis vous pourrez avoir le Token d'accès du salon ainsi que l'Identifiant utilisateur depuis le même menu.", + "Icon URL": "Icon URL", + aboutIconURL: "Vous pouvez mettre un lien vers l'image dans \"Icon URL\" pour remplacer l'image de profil par défaut. Ne sera pas utilisé si Icon Emoji est défini.", + aboutMattermostChannelName: "Vous pouvez remplacer le salon par défaut que le Webhook utilise en mettant le nom du salon dans le champ \"Channel Name\". Vous aurez besoin de l'activer depuis les paramètres de Mattermost. Ex: #autre-salon", + "matrix": "Matrix", + promosmsTypeEco: "SMS ECO - Pas chère mais lent et souvent surchargé. Limité uniquement aux déstinataires Polonais.", + promosmsTypeFlash: "SMS FLASH - Le message sera automatiquement affiché sur l'appareil du destinataire. Limité uniquement aux déstinataires Polonais.", + promosmsTypeFull: "SMS FULL - Version Premium des SMS, Vous pouvez mettre le nom de l'expéditeur (Vous devez vous enregistrer avant). Fiable pour les alertes.", + promosmsTypeSpeed: "SMS SPEED - La plus haute des priorités dans le système. Très rapide et fiable mais cher (environ le double du prix d'un SMS FULL).", + promosmsPhoneNumber: "Numéro de téléphone (Poiur les déstinataires Polonais, vous pouvez enlever les codes interna.)", + promosmsSMSSender: "SMS Expéditeur : Nom pré-enregistré ou l'un de base: InfoSMS, SMS Info, MaxSMS, INFO, SMS", + // End notification form }; From afb75e07d58adb499e9a92dc328b2abfa5a724c4 Mon Sep 17 00:00:00 2001 From: RisedSky Date: Sun, 10 Oct 2021 17:37:05 +0200 Subject: [PATCH 027/104] Update fr-FR.js Fixed string (Device => Appareil in French) --- src/languages/fr-FR.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/fr-FR.js b/src/languages/fr-FR.js index 92184e59..6d65f375 100644 --- a/src/languages/fr-FR.js +++ b/src/languages/fr-FR.js @@ -242,12 +242,12 @@ export default { line: "Line Messenger", mattermost: "Mattermost", "User Key": "Clé d'utilisateur", - "Device": "Device", + "Device": "Appareil", "Message Title": "Titre du message", "Notification Sound": "Son de notification", "More info on:": "Plus d'informations sur: {0}", pushoverDesc1: "Priorité d'urgence (2) a par défaut 30 secondes de délai dépassé entre les tentatives et expierera après 1 heure.", - pushoverDesc2: "Si vous voulez envoyer des notifications sur différents Appareils, remplissez le champ Device.", + pushoverDesc2: "Si vous voulez envoyer des notifications sur différents Appareils, remplissez le champ 'Device'.", "SMS Type": "SMS Type", octopushTypePremium: "Premium (Rapide - recommandé pour les alertes)", octopushTypeLowCost: "A bas prix (Lent, bloqué de temps en temps par l'opérateur)", From f0ff96afd9e7d50efb996beaaaaaab8b5b1854a1 Mon Sep 17 00:00:00 2001 From: "Daniel S. Billing" Date: Sun, 10 Oct 2021 18:31:17 +0200 Subject: [PATCH 028/104] Create nb-NO.js --- src/languages/nb-NO.js | 284 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 src/languages/nb-NO.js diff --git a/src/languages/nb-NO.js b/src/languages/nb-NO.js new file mode 100644 index 00000000..b3ba9380 --- /dev/null +++ b/src/languages/nb-NO.js @@ -0,0 +1,284 @@ +export default { + languageName: "Norwegian", + checkEverySecond: "Sjekk hvert {0} sekund.", + retryCheckEverySecond: "Prøv igjen hvert {0} sekund.", + retriesDescription: "Maksimalt antall forsøk før tjenesten er merket som nede og et varsel sendes", + ignoreTLSError: "Ignorer TLS/SSL-feil for HTTPS-nettsteder", + upsideDownModeDescription: "Snu statusen opp ned. Hvis tjenesten er tilgjengelig, er den NED.", + maxRedirectDescription: "Maksimalt antall viderekoblinger å følge. Sett til 0 for å deaktivere viderekoblinger.", + acceptedStatusCodesDescription: "Velg statuskoder som anses som et vellykket svar.", + passwordNotMatchMsg: "Passordene stemmer ikke overens.", + notificationDescription: "Tilordne et varsel for å overvåkningen for å få det til å fungere.", + keywordDescription: "Søk etter nøkkelord i vanlig HTML eller JSON, og det er versalfølsom", + pauseDashboardHome: "Pause", + deleteMonitorMsg: "Er du sikker på at du vil slette denne overvåkningen?", + deleteNotificationMsg: "Er du sikker på at du vil slette dette varselet for alle overvåkningene?", + resoverserverDescription: "Cloudflare er standardserveren, kan du når som helst endre DNS-serveren.", + rrtypeDescription: "Velg RR-typen du vil overvåke", + pauseMonitorMsg: "Er du sikker på at du vil sette en pause?", + enableDefaultNotificationDescription: "For hver ny overvåkning vil denne varslingen være aktivert som standard. Du kan fortsatt deaktivere varselet separat for hver overvåkning.", + clearEventsMsg: "Er du sikker på at du vil slette alle hendelser for denne overvåkningen?", + clearHeartbeatsMsg: "Er du sikker på at du vil slette alle hjerteslag for denne overvåkningen?", + confirmClearStatisticsMsg: "Er du sikker på at du vil slette ALL statistikk?", + importHandleDescription: "Velg 'Hopp over eksisterende' hvis du vil hoppe over hver overvåkning eller varsel med samme navn. 'Overskriv' sletter alle eksisterende overvåkninger og varsler.", + confirmImportMsg: "Er du sikker på å importere sikkerhetskopien? Sørg for at du har valgt riktig importalternativ.", + twoFAVerifyLabel: "Skriv inn tokenet ditt for å bekrefte at 2FA fungerer", + tokenValidSettingsMsg: "Token er gyldig! Du kan nå lagre 2FA-innstillingene.", + confirmEnableTwoFAMsg: "Er du sikker på at du vil aktivere 2FA?", + confirmDisableTwoFAMsg: "Er du sikker på at du vil deaktivere 2FA?", + Settings: "Innstillinger", + Dashboard: "Dashboard", + "New Update": "Ny Oppdatering", + Language: "Språk", + Appearance: "Utseende", + Theme: "Tema", + General: "Generelt", + Version: "Versjon", + "Check Update On GitHub": "Sjekk oppdatering på GitHub", + List: "Liste", + Add: "Legg til", + "Add New Monitor": "Legg til ny overvåkning", + "Quick Stats": "Statistikk", + Up: "Oppe", + Down: "Nede", + Pending: "Avventer", + Unknown: "Ukjent", + Pause: "Pause", + Name: "Navn", + Status: "Status", + DateTime: "Dato tid", + Message: "Melding", + "No important events": "Ingen viktige hendelser", + Resume: "Fortsett", + Edit: "Endre", + Delete: "Slett", + Current: "Nåværende", + Uptime: "Oppetid", + "Cert Exp.": "Sertifikat utløper", + days: "dager", + day: "dag", + "-day": "-dag", + hour: "time", + "-hour": "-time", + Response: "Respons", + Ping: "Ping", + "Monitor Type": "Overvåkningstype", + Keyword: "Stikkord", + "Friendly Name": "Vennlig navn", + URL: "URL", + Hostname: "Vertsnavn", + Port: "Port", + "Heartbeat Interval": "Hjerteslagsintervall", + Retries: "Forsøk", + "Heartbeat Retry Interval": "Hjerteslagsforsøkintervall", + Advanced: "Avansert", + "Upside Down Mode": "Opp-ned-modus", + "Max. Redirects": "Maks. viderekoblinger", + "Accepted Status Codes": "Godkjente statuskoder", + Save: "Lagre", + Notifications: "Varsler", + "Not available, please setup.": "Ikke tilgjengelig, sett opp.", + "Setup Notification": "Sett opp varsel", + Light: "Lys", + Dark: "Mørk", + Auto: "Auto", + "Theme - Heartbeat Bar": "Theme - Heartbeat Bar", + Normal: "Normal", + Bottom: "Bunn", + None: "Ingen", + Timezone: "Tidssone", + "Search Engine Visibility": "Søkemotor synlighet", + "Allow indexing": "Tillat indeksering", + "Discourage search engines from indexing site": "Avskrekk søkemotorer fra å indeksere nettstedet", + "Change Password": "Endre passord", + "Current Password": "Nåværende passord", + "New Password": "Nytt passord", + "Repeat New Password": "Gjenta nytt passord", + "Update Password": "Oppdater passord", + "Disable Auth": "Deaktiver autentisering", + "Enable Auth": "Aktiver autentisering", + Logout: "Logg ut", + Leave: "Forlat", + "I understand, please disable": "Jeg forstår, deaktiver", + Confirm: "Bekreft", + Yes: "Ja", + No: "Nei", + Username: "Brukernavn", + Password: "Passord", + "Remember me": "Husk meg", + Login: "Logg inn", + "No Monitors, please": "Ingen overvåkning, vær så snill", + "add one": "legg til en", + "Notification Type": "Meldingstype", + Email: "E-post", + Test: "Test", + "Certificate Info": "Sertifikatinformasjon", + "Resolver Server": "DNS-server", + "Resource Record Type": "DNS-posttype", + "Last Result": "Siste resultat", + "Create your admin account": "Opprett en administratorkonto", + "Repeat Password": "Gjenta passord", + "Import Backup": "Importer sikkerhetskopi", + "Export Backup": "Eksporter sikkerhetskopi", + Export: "Eksporter", + Import: "Importer", + respTime: "Svartid (ms)", + notAvailableShort: "N/A", + "Default enabled": "Standard aktivert", + "Apply on all existing monitors": "Påfør på alle eksisterende overvåkninger", + Create: "Opprett", + "Clear Data": "Slett data", + Events: "Hendelser", + Heartbeats: "Hjerteslag", + "Auto Get": "Auto Get", + backupDescription: "Du kan sikkerhetskopiere alle overvåkninger og alle varsler til en JSON-fil.", + backupDescription2: "PS: Historikk og hendelsesdata er ikke inkludert.", + backupDescription3: "Følsomme data som varslingstokener er inkludert i eksportfilen. Vennligst oppbevar dem nøye.", + alertNoFile: "Velg en fil som skal importeres.", + alertWrongFileType: "Velg en JSON-fil.", + "Clear all statistics": "Fjern all statistikk", + "Skip existing": "Hopp over eksisterende", + Overwrite: "Overskriv", + Options: "Alternativer", + "Keep both": "Behold begge", + "Verify Token": "Bekreft token", + "Setup 2FA": "Konfigurer 2FA", + "Enable 2FA": "Aktiver 2FA", + "Disable 2FA": "Deaktiver 2FA", + "2FA Settings": "2FA Innstillinger", + "Two Factor Authentication": "To-faktor autentisering", + Active: "Aktiv", + Inactive: "Inaktiv", + Token: "Token", + "Show URI": "Vis URI", + Tags: "Etiketter", + "Add New below or Select...": "Legg til nytt nedenfor eller Velg ...", + "Tag with this name already exist.": "Etikett med dette navnet eksisterer allerede.", + "Tag with this value already exist.": "Etikett med denne verdien finnes allerede.", + color: "farge", + "value (optional)": "verdi (valgfritt)", + Gray: "Grå", + Red: "Rød", + Orange: "Oransje", + Green: "Grønn", + Blue: "Blå", + Indigo: "Indigo", + Purple: "Lilla", + Pink: "Rosa", + "Search...": "Søk...", + "Avg. Ping": "Gj.sn. Ping", + "Avg. Response": "Gj.sn. Respons", + "Entry Page": "Oppføringsside", + statusPageNothing: "Ingenting her, vennligst legg til en gruppe eller en overvåkning.", + "No Services": "Ingen tjenester", + "All Systems Operational": "Alle systemer i drift", + "Partially Degraded Service": "Delvis degradert drift", + "Degraded Service": "Degradert drift", + "Add Group": "Legg til gruppe", + "Add a monitor": "Legg til en overvåkning", + "Edit Status Page": "Rediger statusside", + "Go to Dashboard": "Gå til Dashboard", + "Status Page": "Statusside", + // Start notification form + defaultNotificationName: "Min {notification} varsling ({number})", + here: "here", + "Required": "Obligatorisk", + "telegram": "Telegram", + "Bot Token": "Bot Token", + "You can get a token from": "You can get a token from", + "Chat ID": "Chat ID", + supportTelegramChatID: "Support Direct Chat / Group / Channel's Chat ID", + wayToGetTelegramChatID: "You can get your chat id by sending message to the bot and go to this url to view the chat_id:", + "YOUR BOT TOKEN HERE": "YOUR BOT TOKEN HERE", + chatIDNotFound: "Chat ID is not found, please send a message to this bot first", + "webhook": "Webhook", + "Post URL": "Post URL", + "Content Type": "Content Type", + webhookJsonDesc: "{0} is good for any modern http servers such as express.js", + webhookFormDataDesc: "{multipart} is good for PHP, you just need to parse the json by {decodeFunction}", + "smtp": "Email (SMTP)", + secureOptionNone: "None / STARTTLS (25, 587)", + secureOptionTLS: "TLS (465)", + "Ignore TLS Error": "Ignore TLS Error", + "From Email": "From Email", + "To Email": "To Email", + smtpCC: "CC", + smtpBCC: "BCC", + "discord": "Discord", + "Discord Webhook URL": "Discord Webhook URL", + wayToGetDiscordURL: "You can get this by going to Server Settings -> Integrations -> Create Webhook", + "Bot Display Name": "Bot Display Name", + "Prefix Custom Message": "Prefix Custom Message", + "Hello @everyone is...": "Hello {'@'}everyone is...", + "teams": "Microsoft Teams", + "Webhook URL": "Webhook URL", + wayToGetTeamsURL: "You can learn how to create a webhook url {0}.", + "signal": "Signal", + "Number": "Number", + "Recipients": "Recipients", + needSignalAPI: "You need to have a signal client with REST API.", + wayToCheckSignalURL: "You can check this url to view how to setup one:", + signalImportant: "IMPORTANT: You cannot mix groups and numbers in recipients!", + "gotify": "Gotify", + "Application Token": "Application Token", + "Server URL": "Server URL", + "Priority": "Priority", + "slack": "Slack", + "Icon Emoji": "Icon Emoji", + "Channel Name": "Channel Name", + "Uptime Kuma URL": "Uptime Kuma URL", + aboutWebhooks: "More info about webhooks on: {0}", + aboutChannelName: "Enter the channel name on {0} Channel Name field if you want to bypass the webhook channel. Ex: #other-channel", + aboutKumaURL: "If you leave the Uptime Kuma URL field blank, it will default to the Project Github page.", + emojiCheatSheet: "Emoji cheat sheet: {0}", + "rocket.chat": "Rocket.chat", + pushover: "Pushover", + pushy: "Pushy", + octopush: "Octopush", + promosms: "PromoSMS", + lunasea: "LunaSea", + apprise: "Apprise (Support 50+ Notification services)", + pushbullet: "Pushbullet", + line: "Line Messenger", + mattermost: "Mattermost", + "User Key": "User Key", + "Device": "Device", + "Message Title": "Message Title", + "Notification Sound": "Notification Sound", + "More info on:": "More info on: {0}", + pushoverDesc1: "Emergency priority (2) has default 30 second timeout between retries and will expire after 1 hour.", + pushoverDesc2: "If you want to send notifications to different devices, fill out Device field.", + "SMS Type": "SMS Type", + octopushTypePremium: "Premium (Fast - recommended for alerting)", + octopushTypeLowCost: "Low Cost (Slow, sometimes blocked by operator)", + "Check octopush prices": "Check octopush prices {0}.", + octopushPhoneNumber: "Phone number (intl format, eg : +33612345678) ", + octopushSMSSender: "SMS Sender Name : 3-11 alphanumeric characters and space (a-zA-Z0-9)", + "LunaSea Device ID": "LunaSea Device ID", + "Apprise URL": "Apprise URL", + "Example:": "Example: {0}", + "Read more:": "Read more: {0}", + "Status:": "Status: {0}", + "Read more": "Read more", + appriseInstalled: "Apprise is installed.", + appriseNotInstalled: "Apprise is not installed. {0}", + "Access Token": "Access Token", + "Channel access token": "Channel access token", + "Line Developers Console": "Line Developers Console", + lineDevConsoleTo: "Line Developers Console - {0}", + "Basic Settings": "Basic Settings", + "User ID": "User ID", + "Messaging API": "Messaging API", + wayToGetLineChannelToken: "First access the {0}, create a provider and channel (Messaging API), then you can get the channel access token and user id from the above mentioned menu items.", + "Icon URL": "Icon URL", + aboutIconURL: "You can provide a link to a picture in \"Icon URL\" to override the default profile picture. Will not be used if Icon Emoji is set.", + aboutMattermostChannelName: "You can override the default channel that webhook posts to by entering the channel name into \"Channel Name\" field. This needs to be enabled in Mattermost webhook settings. Ex: #other-channel", + "matrix": "Matrix", + promosmsTypeEco: "SMS ECO - cheap but slow and often overloaded. Limited only to Polish recipients.", + promosmsTypeFlash: "SMS FLASH - Message will automatically show on recipient device. Limited only to Polish recipients.", + promosmsTypeFull: "SMS FULL - Premium tier of SMS, You can use Your Sender Name (You need to register name first). Reliable for alerts.", + promosmsTypeSpeed: "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).", + promosmsPhoneNumber: "Phone number (for Polish recipient You can skip area codes)", + promosmsSMSSender: "SMS Sender Name : Pre-registred name or one of defaults: InfoSMS, SMS Info, MaxSMS, INFO, SMS", + // End notification form +}; From c79e80442aa9427f1884841537e7ff799663848c Mon Sep 17 00:00:00 2001 From: "Daniel S. Billing" Date: Sun, 10 Oct 2021 18:38:15 +0200 Subject: [PATCH 029/104] Update i18n.js --- src/i18n.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/i18n.js b/src/i18n.js index ca47742e..83f71d5d 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -11,6 +11,7 @@ import itIT from "./languages/it-IT"; import ja from "./languages/ja"; import koKR from "./languages/ko-KR"; import nlNL from "./languages/nl-NL"; +import nbNO from "./languages/nb-NO"; import pl from "./languages/pl"; import ptBR from "./languages/pt-BR"; import bgBG from "./languages/bg-BG"; @@ -28,6 +29,7 @@ const languageList = { "bg-BG": bgBG, "de-DE": deDE, "nl-NL": nlNL, + "nb-NO": nbNO, "es-ES": esEs, "fa": fa, "pt-BR": ptBR, From 62805014df64346504510fb09689d35f39ec01b7 Mon Sep 17 00:00:00 2001 From: "Daniel S. Billing" Date: Sun, 10 Oct 2021 18:38:19 +0200 Subject: [PATCH 030/104] Update Settings.vue --- src/pages/Settings.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue index 259f334b..8fad9d14 100644 --- a/src/pages/Settings.vue +++ b/src/pages/Settings.vue @@ -357,6 +357,12 @@

Használja megfontoltan!

+ + + + -