From 3f0b85e5a88d65e88b7df138ae237e7cd90dbd41 Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Sat, 2 Oct 2021 16:48:27 +0200 Subject: [PATCH 01/88] 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 0000000..dc2526b --- /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 47eca28..297df65 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 c551fa7..dc95753 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 0fbe832..6d1a939 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 34a4560..fdb57b4 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 3002307..53b47c1 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 4dc2c71..e62b95d 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 96f221e..e63f498 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 7ee89fab5c19dc9acc11a041b3abd03fe934d03b Mon Sep 17 00:00:00 2001 From: Bert Verhelst Date: Mon, 4 Oct 2021 11:29:43 +0200 Subject: [PATCH 02/88] 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 e63f498..30cf1da 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 03/88] 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 46298b0..db3928d 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 30cf1da..df3b211 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 04/88] 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 5fa9d4e..af08bfc 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 05/88] 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 96448c6..852a266 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 06/88] 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 8b1c28d..7871f0f 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 a9e8f6a..33d84cd 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 852a266..5074dab 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 07/88] 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 33ad82f..2738898 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 7871f0f..a5ad24e 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 33d84cd..170b4a3 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 5074dab..ed8b359 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 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 08/88] 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 ecb583e..e5fd53e 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 72934cd..165d39c 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 2ce8f46..b59cdb7 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 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 09/88] 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 e5fd53e..2bbec58 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 165d39c..01bdf86 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 b59cdb7..0e8e923 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 10/88] 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 2738898..e2029c5 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 2adac64c838dd281d43c451a6475ce87e8018ba4 Mon Sep 17 00:00:00 2001 From: dhfhfk Date: Mon, 11 Oct 2021 00:02:37 +0900 Subject: [PATCH 11/88] 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 8ad7e96..d88db63 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 f0ff96afd9e7d50efb996beaaaaaab8b5b1854a1 Mon Sep 17 00:00:00 2001 From: "Daniel S. Billing" Date: Sun, 10 Oct 2021 18:31:17 +0200 Subject: [PATCH 12/88] 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 0000000..b3ba938 --- /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 13/88] Update i18n.js --- src/i18n.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/i18n.js b/src/i18n.js index ca47742..83f71d5 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 14/88] 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 259f334..8fad9d1 100644 --- a/src/pages/Settings.vue +++ b/src/pages/Settings.vue @@ -357,6 +357,12 @@

Hasznรกlja megfontoltan!

+ + + + -