}
*/
exports.radius = function (
@@ -388,10 +389,12 @@ exports.radius = function (
callingStationId,
secret,
port = 1812,
+ timeout = 2500,
) {
const client = new radiusClient({
host: hostname,
hostPort: port,
+ timeout: timeout,
dictionaries: [ file ],
});
@@ -413,12 +416,18 @@ exports.radius = function (
exports.redisPingAsync = function (dsn) {
return new Promise((resolve, reject) => {
const client = redis.createClient({
- url: dsn,
+ url: dsn
});
client.on("error", (err) => {
+ if (client.isOpen) {
+ client.disconnect();
+ }
reject(err);
});
client.connect().then(() => {
+ if (!client.isOpen) {
+ client.emit("error", new Error("connection isn't open"));
+ }
client.ping().then((res, err) => {
if (client.isOpen) {
client.disconnect();
@@ -428,7 +437,7 @@ exports.redisPingAsync = function (dsn) {
} else {
resolve(res);
}
- });
+ }).catch(error => reject(error));
});
});
};
diff --git a/src/assets/multiselect.scss b/src/assets/multiselect.scss
index 9ea04ca0..bb24db76 100644
--- a/src/assets/multiselect.scss
+++ b/src/assets/multiselect.scss
@@ -69,6 +69,7 @@
.multiselect__content-wrapper {
background-color: $dark-bg2;
border-color: $dark-border-color;
+ z-index: 150;
}
.multiselect--above .multiselect__content-wrapper {
diff --git a/src/components/BadgeGeneratorDialog.vue b/src/components/BadgeGeneratorDialog.vue
index 9e073e39..aa6fa6e8 100644
--- a/src/components/BadgeGeneratorDialog.vue
+++ b/src/components/BadgeGeneratorDialog.vue
@@ -22,78 +22,78 @@
- {{ $t("Badge Duration") }}
-
+ {{ $t("Badge Duration (in hours)") }}
+
{{ $t("Badge Label") }}
-
+
{{ $t("Badge Prefix") }}
-
+
{{ $t("Badge Suffix") }}
-
+
{{ $t("Badge Label Color") }}
-
+
{{ $t("Badge Color") }}
-
+
{{ $t("Badge Label Prefix") }}
-
+
{{ $t("Badge Label Suffix") }}
-
+
{{ $t("Badge Up Color") }}
-
+
{{ $t("Badge Down Color") }}
-
+
{{ $t("Badge Pending Color") }}
-
+
{{ $t("Badge Maintenance Color") }}
-
+
{{ $t("Badge Warn Color") }}
-
+
{{ $t("Badge Warn Days") }}
-
+
{{ $t("Badge Down Days") }}
-
+
@@ -131,6 +135,7 @@
-
-
diff --git a/src/components/PublicGroupList.vue b/src/components/PublicGroupList.vue
index 00f38c5b..4bd4a295 100644
--- a/src/components/PublicGroupList.vue
+++ b/src/components/PublicGroupList.vue
@@ -150,7 +150,7 @@ export default {
// We must check if there are any elements in monitorList to
// prevent undefined errors if it hasn't been loaded yet
if (this.$parent.editMode && ignoreSendUrl && Object.keys(this.$root.monitorList).length) {
- return this.$root.monitorList[monitor.element.id].type === "http" || this.$root.monitorList[monitor.element.id].type === "keyword";
+ return this.$root.monitorList[monitor.element.id].type === "http" || this.$root.monitorList[monitor.element.id].type === "keyword" || this.$root.monitorList[monitor.element.id].type === "json-query";
}
return monitor.element.sendUrl && monitor.element.url && monitor.element.url !== "https://" && !this.editMode;
},
diff --git a/src/components/notifications/SMSC.vue b/src/components/notifications/SMSC.vue
new file mode 100644
index 00000000..36a0a895
--- /dev/null
+++ b/src/components/notifications/SMSC.vue
@@ -0,0 +1,43 @@
+
+
+
+
+ {{ $t("Recipient Number") }}
+
+
+
+
{{ $t("From Name/Number") }}
+
+
{{ $t("Leave blank to use a shared sender number.") }}
+
+
+ {{ $t("smscTranslit") }} *
+
+ {{ $t("Default") }}
+ Translit
+ MpaHc/Ium
+
+
+
+
diff --git a/src/components/notifications/Slack.vue b/src/components/notifications/Slack.vue
index 6d220caa..dead709c 100644
--- a/src/components/notifications/Slack.vue
+++ b/src/components/notifications/Slack.vue
@@ -24,5 +24,13 @@
https://www.webfx.com/tools/emoji-cheat-sheet/
+
+
+
+ {{ $t("Notify Channel") }}
+
+
+ {{ $t("aboutNotifyChannel") }}
+
diff --git a/src/components/notifications/Twilio.vue b/src/components/notifications/Twilio.vue
index 3edf1e3d..d923866b 100644
--- a/src/components/notifications/Twilio.vue
+++ b/src/components/notifications/Twilio.vue
@@ -5,7 +5,18 @@
-
{{ $t("Auth Token") }}
+
{{ $t("Api Key (optional)") }}
+
+
+
+ The API key is optional but recommended. You can provide either Account SID and AuthToken
+ from the may TwilioConsole page or Account SID and the pair of Api Key and Api Key secret
+
+
+
+
+
+ {{ $t("Auth Token / Api Key Secret") }}
diff --git a/src/components/notifications/Webhook.vue b/src/components/notifications/Webhook.vue
index 1b85a540..4262ad06 100644
--- a/src/components/notifications/Webhook.vue
+++ b/src/components/notifications/Webhook.vue
@@ -12,61 +12,97 @@
-
{{
- $t("Content Type")
+ {{
+ $t("Request Body")
}}
- application/json
- multipart/form-data
+ {{ $t("webhookBodyPresetOption", ["application/json"]) }}
+ {{ $t("webhookBodyPresetOption", ["multipart/form-data"]) }}
+ {{ $t("webhookBodyCustomOption") }}
-
{{ $t("webhookJsonDesc", ['"application/json"']) }}
-
- "multipart/form-data"
-
- json_decode($_POST['data'])
-
-
+
+
{{ $t("webhookJsonDesc", ['"application/json"']) }}
+
+
+
+ multipart/form-data"
+
+ json_decode($_POST['data'])
+
+
+
+
+
+
+ msg
+
+
+ heartbeatJSON
+
+
+ monitorJSON
+
+
+
+
+
-
-
+
+
+ {{ $t("webhookAdditionalHeadersTitle") }}
+
+
+
+
-
-
-
diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js
index 7b5e6b6c..673a84a9 100644
--- a/src/components/notifications/index.js
+++ b/src/components/notifications/index.js
@@ -4,6 +4,7 @@ import AliyunSMS from "./AliyunSms.vue";
import Apprise from "./Apprise.vue";
import Bark from "./Bark.vue";
import ClickSendSMS from "./ClickSendSMS.vue";
+import SMSC from "./SMSC.vue";
import DingDing from "./DingDing.vue";
import Discord from "./Discord.vue";
import Feishu from "./Feishu.vue";
@@ -61,6 +62,7 @@ const NotificationFormList = {
"apprise": Apprise,
"Bark": Bark,
"clicksendsms": ClickSendSMS,
+ "smsc": SMSC,
"DingDing": DingDing,
"discord": Discord,
"Feishu": Feishu,
diff --git a/src/components/settings/General.vue b/src/components/settings/General.vue
index 1f696415..9f9a88b6 100644
--- a/src/components/settings/General.vue
+++ b/src/components/settings/General.vue
@@ -190,6 +190,30 @@
+
+
+
+ {{ $t("chromeExecutable") }}
+
+
+
+
+
+ {{ $t("Test") }}
+
+
+
+
+ {{ $t("chromeExecutableDescription") }}
+
+
+
@@ -241,6 +265,12 @@ export default {
autoGetPrimaryBaseURL() {
this.settings.primaryBaseURL = location.protocol + "//" + location.host;
},
+
+ testChrome() {
+ this.$root.getSocket().emit("testChrome", this.settings.chromeExecutable, (res) => {
+ this.$root.toastRes(res);
+ });
+ },
},
};
diff --git a/src/components/settings/Plugins.vue b/src/components/settings/Plugins.vue
deleted file mode 100644
index 614034fc..00000000
--- a/src/components/settings/Plugins.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
{{ remotePluginListMsg }}
-
-
-
-
-
diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json
index 754f1255..913b8e33 100644
--- a/src/lang/bg-BG.json
+++ b/src/lang/bg-BG.json
@@ -776,5 +776,13 @@
"Badge Suffix": "Суфикс на баджа",
"Badge Label Prefix": "Префикс на етикета на значката",
"Badge Pending Color": "Цвят на баджа за изчакващ",
- "Badge Down Days": "Колко дни баджът да не се показва"
+ "Badge Down Days": "Колко дни баджът да не се показва",
+ "Group": "Група",
+ "Monitor Group": "Монитор група",
+ "Cannot connect to the socket server": "Не може да се свърже със сокет сървъра",
+ "Reconnecting...": "Повторно свързване...",
+ "Edit Maintenance": "Редактиране на поддръжка",
+ "Home": "Главна страница",
+ "noGroupMonitorMsg": "Не е налично. Първо създайте групов монитор.",
+ "Close": "Затвори"
}
diff --git a/src/lang/ca.json b/src/lang/ca.json
new file mode 100644
index 00000000..c30b84fa
--- /dev/null
+++ b/src/lang/ca.json
@@ -0,0 +1,28 @@
+{
+ "Settings": "Paràmetres",
+ "Dashboard": "Tauler",
+ "Help": "Ajuda",
+ "New Update": "Nova actualització",
+ "Language": "Idioma",
+ "Appearance": "Aparença",
+ "Theme": "Tema",
+ "General": "General",
+ "Game": "Joc",
+ "Version": "Versió",
+ "Check Update On GitHub": "Comprovar actualitzacions a GitHub",
+ "List": "Llista",
+ "Home": "Inici",
+ "Add": "Afegir",
+ "Add New Monitor": "Afegir nou monitor",
+ "Quick Stats": "Estadístiques ràpides",
+ "Up": "Funcional",
+ "Down": "Caigut",
+ "Pending": "Pendent",
+ "Maintenance": "Manteniment",
+ "Unknown": "Desconegut",
+ "Cannot connect to the socket server": "No es pot connectar al servidor socket",
+ "Reconnecting...": "S'està tornant a connectar...",
+ "languageName": "Català",
+ "Primary Base URL": "URL Base Primària",
+ "statusMaintenance": "Manteniment"
+}
diff --git a/src/lang/ckb.json b/src/lang/ckb.json
index 0967ef42..9ed5cffa 100644
--- a/src/lang/ckb.json
+++ b/src/lang/ckb.json
@@ -1 +1,46 @@
-{}
+{
+ "languageName": "کوردی",
+ "Settings": "ڕێکخستنەکان",
+ "Help": "یارمەتی",
+ "New Update": "وەشانی نوێ",
+ "Language": "زمان",
+ "Appearance": "ڕووکار",
+ "Theme": "شێوەی ڕووکار",
+ "General": "گشتی",
+ "Game": "یاری",
+ "Version": "وەشان",
+ "Check Update On GitHub": "سەیری وەشانی نوێ بکە لە Github",
+ "List": "لیست",
+ "Add": "زیادکردن",
+ "Quick Stats": "ئاماری خێرا",
+ "Up": "سەروو",
+ "Down": "خواروو",
+ "Pending": "هەڵپەسێردراو",
+ "statusMaintenance": "چاکردنەوە",
+ "Maintenance": "چاکردنەوە",
+ "Unknown": "نەزانراو",
+ "Passive Monitor Type": "جۆری مۆنیتەری پاسیڤ",
+ "Specific Monitor Type": "جۆری مۆنیتەری تایبەت",
+ "markdownSupported": "ڕستەسازی مارکداون پشتگیری دەکرێت",
+ "pauseDashboardHome": "وچان",
+ "Pause": "وچان",
+ "Name": "ناو",
+ "Status": "دۆخ",
+ "Message": "پەیام",
+ "No important events": "هیچ ڕووداوێکی گرنگ نییە",
+ "Resume": "دەستپێکردنەوە",
+ "Edit": "بژارکردن",
+ "Delete": "سڕینەوە",
+ "Uptime": "کاتی کارکردن",
+ "Cert Exp.": "بەسەرچوونی بڕوانامەی SSL.",
+ "day": "ڕۆژ | ڕۆژەکان",
+ "-day": "-ڕۆژ",
+ "hour": "کاتژمێر",
+ "Dashboard": "داشبۆرد",
+ "Primary Base URL": "بەستەری بنچینەیی سەرەکی",
+ "Add New Monitor": "مۆنیتەرێکی نوێ زیاد بکە",
+ "General Monitor Type": "جۆری مۆنیتەری گشتی",
+ "DateTime": "رێکەوت",
+ "Current": "هەنووکە",
+ "Monitor": "مۆنیتەر | مۆنیتەرەکان"
+}
diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json
index a3dfa088..18523fef 100644
--- a/src/lang/cs-CZ.json
+++ b/src/lang/cs-CZ.json
@@ -757,11 +757,11 @@
"Show Clickable Link Description": "Pokud je zaškrtnuto, všichni, kdo mají přístup k této stavové stránce, mají přístup k adrese URL monitoru.",
"Open Badge Generator": "Otevřít generátor odznaků",
"Badge Type": "Typ odznaku",
- "Badge Duration": "Délka platnosti odznaku",
+ "Badge Duration": "Platnost odznaku",
"Badge Label": "Štítek odznaku",
"Badge Prefix": "Prefix odznaku",
"Monitor Setting": "{0}'s Nastavení dohledu",
- "Badge Generator": "{0}'s Generátor odznaků",
+ "Badge Generator": "Generátor odznaků pro {0}",
"Badge Label Color": "Barva štítku odznaku",
"Badge Color": "Barva odznaku",
"Badge Style": "Styl odznaku",
@@ -769,9 +769,20 @@
"Badge URL": "URL odznaku",
"Badge Suffix": "Přípona odznaku",
"Badge Label Prefix": "Prefix štítku odznaku",
- "Badge Up Color": "Barva odzanaku při Běží",
+ "Badge Up Color": "Barva odznaku při Běží",
"Badge Down Color": "Barva odznaku při Nedostupné",
"Badge Pending Color": "Barva odznaku při Pauze",
"Badge Maintenance Color": "Barva odznaku při Údržbě",
- "Badge Warn Color": "Barva odznaku při Upozornění"
+ "Badge Warn Color": "Barva odznaku při Upozornění",
+ "Reconnecting...": "Obnovení spojení...",
+ "Cannot connect to the socket server": "Nelze se připojit k soketovému serveru",
+ "Edit Maintenance": "Upravit Údržbu",
+ "Home": "Hlavní stránka",
+ "Badge Down Days": "Odznak nedostupných dní",
+ "Group": "Skupina",
+ "Monitor Group": "Sledovaná skupina",
+ "noGroupMonitorMsg": "Není k dispozici. Nejprve vytvořte skupin dohledů.",
+ "Close": "Zavřít",
+ "Badge value (For Testing only.)": "Hodnota odznaku (pouze pro testování)",
+ "Badge Warn Days": "Odznak dní s upozorněním"
}
diff --git a/src/lang/de-CH.json b/src/lang/de-CH.json
index 3753e22d..95e685f3 100644
--- a/src/lang/de-CH.json
+++ b/src/lang/de-CH.json
@@ -776,5 +776,10 @@
"Badge Label Suffix": "Badge Label Suffix",
"Badge value (For Testing only.)": "Badge Wert (nur für Tests)",
"Show Clickable Link Description": "Wenn diese Option aktiviert ist, kann jeder, der Zugriff auf diese Statusseite hat, auf die Monitor URL zugreifen.",
- "Badge Down Color": "Badge Down Farbe"
+ "Badge Down Color": "Badge Down Farbe",
+ "Edit Maintenance": "Wartung bearbeiten",
+ "Group": "Gruppe",
+ "Monitor Group": "Monitor Gruppe",
+ "noGroupMonitorMsg": "Nicht verfügbar. Erstelle zunächst einen Gruppenmonitor.",
+ "Close": "Schliessen"
}
diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json
index 8bb7827f..44fc298f 100644
--- a/src/lang/de-DE.json
+++ b/src/lang/de-DE.json
@@ -782,5 +782,7 @@
"Badge Suffix": "Badge Suffix",
"Badge Warn Days": "Badge Warnung Tage",
"Group": "Gruppe",
- "Monitor Group": "Monitor Gruppe"
+ "Monitor Group": "Monitor Gruppe",
+ "noGroupMonitorMsg": "Nicht verfügbar. Erstelle zunächst einen Gruppenmonitor.",
+ "Close": "Schließen"
}
diff --git a/src/lang/en.json b/src/lang/en.json
index de03b87f..bc4f9ce3 100644
--- a/src/lang/en.json
+++ b/src/lang/en.json
@@ -51,6 +51,9 @@
"Ping": "Ping",
"Monitor Type": "Monitor Type",
"Keyword": "Keyword",
+ "Invert Keyword": "Invert Keyword",
+ "Expected Value": "Expected Value",
+ "Json Query": "Json Query",
"Friendly Name": "Friendly Name",
"URL": "URL",
"Hostname": "Hostname",
@@ -195,8 +198,11 @@
"Content Type": "Content Type",
"webhookJsonDesc": "{0} is good for any modern HTTP servers such as Express.js",
"webhookFormDataDesc": "{multipart} is good for PHP. The JSON will need to be parsed with {decodeFunction}",
+ "webhookCustomBodyDesc": "Define a custom HTTP Body for the request. Template variables {msg}, {heartbeat}, {monitor} are accepted.",
"webhookAdditionalHeadersTitle": "Additional Headers",
- "webhookAdditionalHeadersDesc": "Sets additional headers sent with the webhook.",
+ "webhookAdditionalHeadersDesc": "Sets additional headers sent with the webhook. Each header should be defined as a JSON key/value.",
+ "webhookBodyPresetOption": "Preset - {0}",
+ "webhookBodyCustomOption": "Custom Body",
"Webhook URL": "Webhook URL",
"Application Token": "Application Token",
"Server URL": "Server URL",
@@ -435,6 +441,9 @@
"Enable DNS Cache": "Enable DNS Cache",
"Enable": "Enable",
"Disable": "Disable",
+ "chromeExecutable": "Chrome/Chromium Executable",
+ "chromeExecutableAutoDetect": "Auto Detect",
+ "chromeExecutableDescription": "For Docker users, if Chromium is not yet installed, it may take a few minutes to install and display the test result. It takes 1GB of disk space.",
"dnsCacheDescription": "It may be not working in some IPv6 environments, disable it if you encounter any issues.",
"Single Maintenance Window": "Single Maintenance Window",
"Maintenance Time Window of a Day": "Maintenance Time Window of a Day",
@@ -515,6 +524,8 @@
"passwordNotMatchMsg": "The repeat password does not match.",
"notificationDescription": "Notifications must be assigned to a monitor to function.",
"keywordDescription": "Search keyword in plain HTML or JSON response. The search is case-sensitive.",
+ "invertKeywordDescription": "Look for the keyword to be absent rather than present.",
+ "jsonQueryDescription": "Do a json Query against the response and check for expected value (Return value will get converted into string for comparison). Check out jsonata.org for the documentation about the query language. A playground can be found here .",
"backupDescription": "You can backup all monitors and notifications into a JSON file.",
"backupDescription2": "Note: history and event data is not included.",
"backupDescription3": "Sensitive data such as notification tokens are included in the export file; please store export securely.",
@@ -629,6 +640,8 @@
"matrixDesc1": "You can find the internal room ID by looking in the advanced section of the room settings in your Matrix client. It should look like !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "It is highly recommended you create a new user and do not use your own Matrix user's access token as it will allow full access to your account and all the rooms you joined. Instead, create a new user and only invite it to the room that you want to receive the notification in. You can get the access token by running {0}",
"Channel Name": "Channel Name",
+ "Notify Channel": "Notify Channel",
+ "aboutNotifyChannel": "Notify channel will trigger a desktop or mobile notification for all members of the channel, whether their availability is set to active or away.",
"Uptime Kuma URL": "Uptime Kuma URL",
"Icon Emoji": "Icon Emoji",
"signalImportant": "IMPORTANT: You cannot mix groups and numbers in recipients!",
@@ -722,7 +735,8 @@
"ntfyAuthenticationMethod": "Authentication Method",
"ntfyUsernameAndPassword": "Username and Password",
"twilioAccountSID": "Account SID",
- "twilioAuthToken": "Auth Token",
+ "twilioApiKey": "Api Key (optional)",
+ "twilioAuthToken": "Auth Token / Api Key Secret",
"twilioFromNumber": "From Number",
"twilioToNumber": "To Number",
"Monitor Setting": "{0}'s Monitor Setting",
@@ -731,13 +745,14 @@
"Open Badge Generator": "Open Badge Generator",
"Badge Generator": "{0}'s Badge Generator",
"Badge Type": "Badge Type",
- "Badge Duration": "Badge Duration",
+ "Badge Duration (in hours)": "Badge Duration (in hours)",
"Badge Label": "Badge Label",
- "Badge Prefix": "Badge Prefix",
- "Badge Suffix": "Badge Suffix",
+ "Badge Prefix": "Badge Value Prefix",
+ "Badge Suffix": "Badge Value Suffix",
"Badge Label Color": "Badge Label Color",
"Badge Color": "Badge Color",
"Badge Label Prefix": "Badge Label Prefix",
+ "Badge Preview": "Badge Preview",
"Badge Label Suffix": "Badge Label Suffix",
"Badge Up Color": "Badge Up Color",
"Badge Down Color": "Badge Down Color",
@@ -751,5 +766,7 @@
"Badge URL": "Badge URL",
"Group": "Group",
"Monitor Group": "Monitor Group",
- "noGroupMonitorMsg": "Not Available. Create a Group Monitor First."
+ "noGroupMonitorMsg": "Not Available. Create a Group Monitor First.",
+ "Close": "Close",
+ "Request Body": "Request Body"
}
diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json
index 84266f74..ba68dad1 100644
--- a/src/lang/es-ES.json
+++ b/src/lang/es-ES.json
@@ -751,5 +751,7 @@
"statusPageRefreshIn": "Reinicio en: {0}",
"twilioAuthToken": "Token de Autentificación",
"ntfyUsernameAndPassword": "Nombre de Usuario y Contraseña",
- "ntfyAuthenticationMethod": "Método de Autentificación"
+ "ntfyAuthenticationMethod": "Método de Autentificación",
+ "Cannot connect to the socket server": "No se puede conectar al servidor socket",
+ "Reconnecting...": "Reconectando..."
}
diff --git a/src/lang/fa.json b/src/lang/fa.json
index 898f78e6..9f1f0a60 100644
--- a/src/lang/fa.json
+++ b/src/lang/fa.json
@@ -745,5 +745,13 @@
"Show Clickable Link Description": "اگر انتخاب شود، همه کسانی که به این صفحه وضعیت دسترسی دارند میتوانند به صفحه مانیتور نیز دسترسی داشته باشند.",
"Badge Up Color": "رنگ نشان زمانی که مانیتور بدون مشکل و بالا است",
"Badge Pending Color": "رنگ نشان زمانی که مانیتور در حال انتظار است",
- "Badge Warn Days": "روزهایی که مانیتور در حالت هشدار است"
+ "Badge Warn Days": "روزهایی که مانیتور در حالت هشدار است",
+ "noGroupMonitorMsg": "موجود نیست. ابتدا یک گروه مانیتور جدید ایجاد کنید.",
+ "Home": "خانه",
+ "Edit Maintenance": "ویرایش تعمیر و نگهداری",
+ "Cannot connect to the socket server": "عدم امکان ارتباط با سوکت سرور",
+ "Reconnecting...": "ارتباط مجدد...",
+ "Monitor Group": "گروه مانیتور",
+ "Group": "گروه",
+ "Close": "بستن"
}
diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json
index e85b9bb1..0609e8aa 100644
--- a/src/lang/fr-FR.json
+++ b/src/lang/fr-FR.json
@@ -59,7 +59,7 @@
"Add New Monitor": "Ajouter une nouvelle sonde",
"Quick Stats": "Résumé",
"Up": "En ligne",
- "Down": "Bas",
+ "Down": "Hors ligne",
"Pending": "En attente",
"Unknown": "Inconnu",
"Pause": "En pause",
@@ -88,8 +88,8 @@
"Port": "Port",
"Heartbeat Interval": "Intervalle de vérification",
"Retries": "Essais",
- "Heartbeat Retry Interval": "Réessayer l'intervalle de vérification",
- "Resend Notification if Down X times consecutively": "Renvoyer la notification si en panne X fois consécutivement",
+ "Heartbeat Retry Interval": "Intervalle de ré-essaie",
+ "Resend Notification if Down X times consecutively": "Renvoyer la notification si hors ligne X fois consécutivement",
"Advanced": "Avancé",
"Upside Down Mode": "Mode inversé",
"Max. Redirects": "Nombre maximum de redirections",
@@ -775,5 +775,14 @@
"Monitor Setting": "Réglage de la sonde {0}",
"Badge Generator": "Générateur de badges {0}",
"Badge Label": "Étiquette de badge",
- "Badge URL": "URL du badge"
+ "Badge URL": "URL du badge",
+ "Cannot connect to the socket server": "Impossible de se connecter au serveur de socket",
+ "Reconnecting...": "Reconnexion...",
+ "Edit Maintenance": "Modifier la maintenance",
+ "Monitor Group": "Groupe de sonde | Groupe de sondes",
+ "Badge Down Days": "Badge hors ligne",
+ "Group": "Groupe",
+ "Home": "Accueil",
+ "noGroupMonitorMsg": "Pas disponible. Créez d'abord une sonde de groupe.",
+ "Close": "Fermer"
}
diff --git a/src/lang/gl.json b/src/lang/gl.json
new file mode 100644
index 00000000..dc45d0bd
--- /dev/null
+++ b/src/lang/gl.json
@@ -0,0 +1,23 @@
+{
+ "Settings": "Axustes",
+ "Dashboard": "Panel",
+ "Help": "Axuda",
+ "General": "Xeral",
+ "List": "Lista",
+ "Home": "Casa",
+ "Add": "Engadir",
+ "Up": "Arriba",
+ "Pending": "Pendente",
+ "statusMaintenance": "Mantemento",
+ "Maintenance": "Mantemento",
+ "Unknown": "Descoñecido",
+ "Reconnecting...": "Reconectando...",
+ "pauseDashboardHome": "Pausa",
+ "Pause": "Pausa",
+ "Name": "Nome",
+ "Status": "Estado",
+ "DateTime": "DataHora",
+ "Message": "Mensaxe",
+ "languageName": "Galego",
+ "Down": "Abaixo"
+}
diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json
index c3b93559..b99b32db 100644
--- a/src/lang/he-IL.json
+++ b/src/lang/he-IL.json
@@ -724,5 +724,22 @@
"Edit Tag": "עריכת תגית",
"Learn More": "לקריאה נוספת",
"telegramSendSilently": "שליחה שקטה",
- "telegramSendSilentlyDescription": "שליחת הודעות שקטה. משתמשים יקבלו ההתראה ללא צליל."
+ "telegramSendSilentlyDescription": "שליחת הודעות שקטה. משתמשים יקבלו ההתראה ללא צליל.",
+ "Add New Tag": "הוסף תג חדש",
+ "Home": "ראשי",
+ "sameAsServerTimezone": "אותו איזור זמן כמו השרת",
+ "cronSchedule": "לו\"ז: ",
+ "twilioToNumber": "למספר",
+ "startDateTime": "תאריך\\זמן התחלה",
+ "pagertreeSilent": "שקט",
+ "Reconnecting...": "מתחבר מחדש...",
+ "statusPageRefreshIn": "רענון תוך: {0}",
+ "Edit Maintenance": "ערוך תחזוקה",
+ "pagertreeUrgency": "דחיפות",
+ "pagertreeLow": "נמוכה",
+ "pagertreeMedium": "בינונית",
+ "pagertreeHigh": "גבוהה",
+ "pagertreeCritical": "קריטי",
+ "pagertreeResolve": "הגדרה אוטומטית",
+ "ntfyUsernameAndPassword": "שם משתמש וסיסמא"
}
diff --git a/src/lang/hi.json b/src/lang/hi.json
new file mode 100644
index 00000000..b6c9efda
--- /dev/null
+++ b/src/lang/hi.json
@@ -0,0 +1,43 @@
+{
+ "Dashboard": "डैशबोर्ड",
+ "Help": "मदद",
+ "New Update": "नया अपडेट",
+ "Language": "भाषा",
+ "Appearance": "अपीयरेंस",
+ "Theme": "थीम",
+ "Game": "गेम",
+ "languageName": "हिंदी",
+ "Settings": "सेटिंग्स",
+ "General": "जनरल",
+ "List": "सूची",
+ "Add": "जोड़ें",
+ "Add New Monitor": "नया मॉनिटर जोड़ें",
+ "Pending": "लंबित",
+ "statusMaintenance": "रखरखाव",
+ "Maintenance": "रखरखाव",
+ "Unknown": "अज्ञात",
+ "Cannot connect to the socket server": "सॉकेट सर्वर से कनेक्ट नहीं हो सकता",
+ "pauseDashboardHome": "विराम",
+ "Resume": "फिर से शुरू करें",
+ "Delete": "हटाएं",
+ "Current": "मौजूदा",
+ "Up": "चालू",
+ "General Monitor Type": "सामान्य मॉनिटर प्रकार",
+ "Specific Monitor Type": "विशिष्ट मॉनिटर प्रकार",
+ "Pause": "विराम",
+ "Name": "नाम",
+ "Message": "संदेश",
+ "No important events": "कोई महत्वपूर्ण घटनाक्रम नहीं",
+ "Edit": "परिवर्तन",
+ "Ping": "पिंग",
+ "Monitor Type": "मॉनिटर प्रकार",
+ "Keyword": "कीवर्ड",
+ "Friendly Name": "दोस्ताना नाम",
+ "Version": "संस्करण",
+ "Home": "घर",
+ "Quick Stats": "शीघ्र आँकड़े",
+ "Reconnecting...": "पुनः कनेक्ट किया जा रहा है...",
+ "Down": "बंद",
+ "Passive Monitor Type": "निष्क्रिय मॉनिटर प्रकार",
+ "Status": "स्थिति"
+}
diff --git a/src/lang/pl.json b/src/lang/pl.json
index ac59d83c..1f4bdf4e 100644
--- a/src/lang/pl.json
+++ b/src/lang/pl.json
@@ -751,5 +751,13 @@
"endDateTime": "Data/godzina zakończenia",
"cronExpression": "Wyrażenie Cron",
"ntfyAuthenticationMethod": "Metoda Uwierzytelnienia",
- "ntfyUsernameAndPassword": "Nazwa użytkownika i hasło"
+ "ntfyUsernameAndPassword": "Nazwa użytkownika i hasło",
+ "noGroupMonitorMsg": "Niedostępna. Stwórz najpierw grupę monitorów.",
+ "Close": "Zamknij",
+ "pushoverMessageTtl": "TTL wiadomości (sekundy)",
+ "Home": "Strona główna",
+ "Group": "Grupa",
+ "Monitor Group": "Grupa monitora",
+ "Reconnecting...": "Ponowne łączenie...",
+ "Cannot connect to the socket server": "Nie można połączyć się z serwerem gniazda"
}
diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json
index 39e6b00c..c051b7b3 100644
--- a/src/lang/ru-RU.json
+++ b/src/lang/ru-RU.json
@@ -6,7 +6,7 @@
"upsideDownModeDescription": "Реверс статуса сервиса. Если сервис доступен, то он помечается как НЕДОСТУПНЫЙ.",
"maxRedirectDescription": "Максимальное количество перенаправлений. Поставьте 0, чтобы отключить перенаправления.",
"acceptedStatusCodesDescription": "Выберите коды статусов для определения доступности сервиса.",
- "passwordNotMatchMsg": "Повтор пароля не совпадает.",
+ "passwordNotMatchMsg": "Введёные пароли не совпадают",
"notificationDescription": "Привяжите уведомления к мониторам.",
"keywordDescription": "Поиск слова в чистом HTML или в JSON-ответе (чувствительно к регистру).",
"pauseDashboardHome": "Пауза",
@@ -43,7 +43,7 @@
"Delete": "Удалить",
"Current": "Текущий",
"Uptime": "Аптайм",
- "Cert Exp.": "Сертификат истекает.",
+ "Cert Exp.": "Сертификат истекает",
"day": "день | дней",
"-day": "-дней",
"hour": "час",
@@ -69,7 +69,7 @@
"Light": "Светлая",
"Dark": "Тёмная",
"Auto": "Авто",
- "Theme - Heartbeat Bar": "Тема - Полоса частоты опроса",
+ "Theme - Heartbeat Bar": "Полоса частоты опроса",
"Normal": "Обычный",
"Bottom": "Снизу",
"None": "Отсутствует",
@@ -160,7 +160,7 @@
"Tag with this name already exist.": "Такой тег уже существует.",
"Tag with this value already exist.": "Тег с таким значением уже существует.",
"color": "цвет",
- "value (optional)": "значение (опционально)",
+ "value (optional)": "значение (необязательно)",
"Gray": "Серый",
"Red": "Красный",
"Orange": "Оранжевый",
@@ -175,9 +175,9 @@
"Entry Page": "Главная страница",
"statusPageNothing": "Здесь пусто. Добавьте группу или монитор.",
"No Services": "Нет сервисов",
- "All Systems Operational": "Все системы работают в штатном режиме",
- "Partially Degraded Service": "Сервисы работают частично",
- "Degraded Service": "Все сервисы не работают",
+ "All Systems Operational": "Все системы работают",
+ "Partially Degraded Service": "Частичная работа сервисов",
+ "Degraded Service": "Отказ всех сервисов",
"Add Group": "Добавить группу",
"Add a monitor": "Добавить монитор",
"Edit Status Page": "Редактировать",
@@ -212,7 +212,7 @@
"pushOptionalParams": "Опциональные параметры: {0}",
"defaultNotificationName": "Моё уведомление {notification} ({number})",
"here": "здесь",
- "Required": "Требуется",
+ "Required": "Обязательно",
"Bot Token": "Токен бота",
"wayToGetTelegramToken": "Вы можете взять токен здесь - {0}.",
"Chat ID": "ID чата",
@@ -296,7 +296,7 @@
"promosmsPhoneNumber": "Номер телефона (для получателей из Польши можно пропустить код региона)",
"promosmsSMSSender": "Имя отправителя SMS: Зарегистрированное или одно из имён по умолчанию: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
- "matrixHomeserverURL": "URL сервера (вместе с http(s):// и опционально порт)",
+ "matrixHomeserverURL": "URL сервера (вместе с http(s):// и по желанию порт)",
"Internal Room Id": "Внутренний ID комнаты",
"matrixDesc1": "Внутренний ID комнаты можно найти в Подробностях в параметрах канала вашего Matrix клиента. Он должен выглядеть примерно как !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Рекомендуется создать нового пользователя и не использовать токен доступа личного пользователя Matrix, т.к. это влечёт за собой полный доступ к аккаунту и к комнатам, в которых вы состоите. Вместо этого создайте нового пользователя и пригласите его только в ту комнату, в которой вы хотите получать уведомления. Токен доступа можно получить, выполнив команду {0}",
@@ -335,9 +335,9 @@
"Current User": "Текущий пользователь",
"About": "О программе",
"Description": "Описание",
- "Powered by": "Работает на основе скрипта от",
+ "Powered by": "Работает на",
"shrinkDatabaseDescription": "Включает VACUUM для базы данных SQLite. Если ваша база данных была создана на версии 1.10.0 и более, AUTO_VACUUM уже включен и это действие не требуется.",
- "deleteStatusPageMsg": "Вы действительно хотите удалить эту страницу статуса сервисов?",
+ "deleteStatusPageMsg": "Вы действительно хотите удалить эту страницу статуса?",
"Style": "Стиль",
"info": "ИНФО",
"warning": "ВНИМАНИЕ",
@@ -367,7 +367,7 @@
"Pick Accepted Status Codes...": "Выберите принятые коды состояния…",
"Default": "По умолчанию",
"Please input title and content": "Пожалуйста, введите название и содержание",
- "Last Updated": "Последнее Обновление",
+ "Last Updated": "Последнее обновление",
"Untitled Group": "Группа без названия",
"Services": "Сервисы",
"serwersms": "SerwerSMS.pl",
@@ -379,11 +379,11 @@
"smtpDkimSettings": "DKIM Настройки",
"smtpDkimDesc": "Пожалуйста ознакомьтесь с {0} Nodemailer DKIM для использования.",
"documentation": "документацией",
- "smtpDkimDomain": "Имя Домена",
+ "smtpDkimDomain": "Имя домена",
"smtpDkimKeySelector": "Ключ",
"smtpDkimPrivateKey": "Приватный ключ",
- "smtpDkimHashAlgo": "Алгоритм хэша (опционально)",
- "smtpDkimheaderFieldNames": "Заголовок ключей для подписи (опционально)",
+ "smtpDkimHashAlgo": "Алгоритм хэша (необязательно)",
+ "smtpDkimheaderFieldNames": "Заголовок ключей для подписи (необязательно)",
"smtpDkimskipFields": "Заголовок ключей не для подписи (опционально)",
"gorush": "Gorush",
"alerta": "Alerta",
@@ -439,9 +439,9 @@
"Uptime Kuma": "Uptime Kuma",
"Slug": "Slug",
"Accept characters:": "Принимаемые символы:",
- "startOrEndWithOnly": "Начинается или кончается только {0}",
+ "startOrEndWithOnly": "Начинается или заканчивается только на {0}",
"No consecutive dashes": "Без последовательных тире",
- "The slug is already taken. Please choose another slug.": "Слово уже занято. Пожалуйста, выберите другой вариант.",
+ "The slug is already taken. Please choose another slug.": "Этот slug уже занят. Пожалуйста, выберите другой.",
"Page Not Found": "Страница не найдена",
"wayToGetCloudflaredURL": "(Скачать cloudflared с {0})",
"cloudflareWebsite": "Веб-сайт Cloudflare",
@@ -467,7 +467,7 @@
"onebotMessageType": "Тип сообщения OneBot",
"onebotGroupMessage": "Группа",
"onebotPrivateMessage": "Private",
- "onebotUserOrGroupId": "ID группы или пользователя",
+ "onebotUserOrGroupId": "ID группы/пользователя",
"onebotSafetyTips": "В целях безопасности необходимо установить токен доступа",
"PushDeer Key": "ключ PushDeer",
"Footer Text": "Текст нижнего колонтитула",
@@ -568,7 +568,7 @@
"goAlertInfo": "GoAlert — это приложение с открытым исходным кодом для составления расписания вызовов, автоматической эскалации и уведомлений (например, SMS или голосовых звонков). Автоматически привлекайте нужного человека, нужным способом и в нужное время! {0}",
"goAlertIntegrationKeyInfo": "Получить общий ключ интеграции API для сервиса в этом формате \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" обычно значение параметра токена скопированного URL.",
"goAlert": "GoAlert",
- "backupOutdatedWarning": "Устарело: поскольку добавлено множество функций, а эта функция резервного копирования немного не поддерживается, она не может создать или восстановить полную резервную копию.",
+ "backupOutdatedWarning": "Устарело: эта функция резервного копирования более не поддерживается. Поскольку добавлено множество функций, она не может создать или восстановить полную резервную копию.",
"backupRecommend": "Сделайте резервную копию тома или папки с данными (./data/) напрямую.",
"Optional": "Необязательно",
"squadcast": "Squadcast",
@@ -578,24 +578,24 @@
"SMSManager": "SMSManager",
"You can divide numbers with": "Вы можете делить числа с",
"or": "или",
- "Maintenance": "Обслуживание",
- "Schedule maintenance": "Запланировать обслуживание",
- "affectedMonitorsDescription": "Выберите мониторы, которые будут затронуты во время обслуживания",
- "affectedStatusPages": "Показывать уведомление об обслуживании на выбранных страницах статуса",
+ "Maintenance": "Техобслуживание",
+ "Schedule maintenance": "Запланировать техобслуживание",
+ "affectedMonitorsDescription": "Выберите мониторы, которые будут затронуты во время техбслуживания",
+ "affectedStatusPages": "Показывать уведомление о техбслуживании на выбранных страницах статуса",
"atLeastOneMonitor": "Выберите больше одного затрагиваемого монитора",
"dnsPortDescription": "По умолчанию порт DNS сервера - 53. Мы можете изменить его в любое время.",
"Monitor": "Монитор | Мониторы",
"webhookAdditionalHeadersTitle": "Дополнительные Заголовки",
"recurringIntervalMessage": "Запускать 1 раз каждый день | Запускать 1 раз каждые {0} дней",
"error": "ошибка",
- "statusMaintenance": "Обслуживание",
+ "statusMaintenance": "Техобслуживание",
"Affected Monitors": "Затронутые мониторы",
- "Start of maintenance": "Начало обслуживания",
+ "Start of maintenance": "Начало техобслуживания",
"All Status Pages": "Все страницы статусов",
"Select status pages...": "Выберите страницу статуса…",
"resendEveryXTimes": "Повтор каждые {0} раз",
"resendDisabled": "Повторная отправка отключена",
- "deleteMaintenanceMsg": "Вы действительно хотите удалить это обслуживание?",
+ "deleteMaintenanceMsg": "Вы действительно хотите удалить это техбслуживание?",
"critical": "критично",
"Custom Monitor Type": "Собственный тип монитора",
"markdownSupported": "Поддерживает синтаксис Markdown",
@@ -630,7 +630,7 @@
"lastDay2": "Второй последний день месяца",
"lastDay3": "Третий последний день месяца",
"lastDay4": "Четвертый последний день месяца",
- "No Maintenance": "Без обслуживания",
+ "No Maintenance": "Нет техбслуживаний",
"pauseMaintenanceMsg": "Вы уверены что хотите поставить на паузу?",
"maintenanceStatus-under-maintenance": "На техобслуживании",
"maintenanceStatus-inactive": "Неактивен",
@@ -640,13 +640,13 @@
"Display Timezone": "Показать часовой пояс",
"Server Timezone": "Часовой пояс сервера",
"statusPageMaintenanceEndDate": "Конец",
- "IconUrl": "URL Иконки",
+ "IconUrl": "URL иконки",
"Enable DNS Cache": "Включить DNS кэш",
"Enable": "Включить",
"Disable": "Отключить",
- "Single Maintenance Window": "Единое Окно Обслуживания",
- "Schedule Maintenance": "Запланировать обслуживание",
- "Date and Time": "Дата и Время",
+ "Single Maintenance Window": "Единое окно техбслуживания",
+ "Schedule Maintenance": "Запланировать техбслуживание",
+ "Date and Time": "Дата и время",
"DateTime Range": "Промежуток даты и времени",
"uninstalling": "Удаляется",
"dataRetentionTimeError": "Период хранения должен быть равен 0 или больше",
@@ -676,10 +676,10 @@
"Integration URL": "URL интеграции",
"do nothing": "ничего не делать",
"smseagleTo": "Номер(а) телефона",
- "smseagleGroup": "Название(я) групп телефонной книги",
- "smseagleContact": "Имена контактов из телефонной книжки",
+ "smseagleGroup": "Название(я) группы телефонной книги",
+ "smseagleContact": "Имена контактов телефонной книги",
"smseagleRecipientType": "Тип получателя",
- "smseagleRecipient": "Получатель(я) (через запятую, если необходимо указать несколько)",
+ "smseagleRecipient": "Получатель(и) (если множество, должны быть разделены запятой)",
"smseagleToken": "Токен доступа API",
"smseagleUrl": "URL вашего SMSEagle устройства",
"smseagleEncoding": "Отправить в юникоде",
@@ -695,7 +695,7 @@
"telegramProtectContentDescription": "Если включено, сообщения бота в Telegram будут запрещены для пересылки и сохранения.",
"telegramSendSilently": "Отправить без звука",
"telegramSendSilentlyDescription": "Пользователи получат уведомление без звука.",
- "Maintenance Time Window of a Day": "Суточный интервал для обслуживания",
+ "Maintenance Time Window of a Day": "Суточный интервал для техбслуживания",
"Clone Monitor": "Копия",
"Clone": "Копия",
"cloneOf": "Копия {0}",
@@ -703,31 +703,31 @@
"Add New Tag": "Добавить тег",
"Body Encoding": "Тип содержимого запроса.(JSON or XML)",
"Strategy": "Стратегия",
- "Free Mobile User Identifier": "Бесплатный идентификатор мобильного пользователя",
+ "Free Mobile User Identifier": "Бесплатный мобильный идентификатор пользователя",
"Auto resolve or acknowledged": "Автоматическое разрешение или подтверждение",
"auto acknowledged": "автоматическое подтверждение",
"auto resolve": "автоматическое разрешение",
"API Keys": "Ключи API",
- "Expiry": "Истекает",
- "Expiry date": "Дата окончания действия",
+ "Expiry": "Срок действия",
+ "Expiry date": "Дата истечения срока действия",
"Don't expire": "Не истекает",
- "Continue": "Продолжать",
- "Add Another": "Добавьте еще один",
+ "Continue": "Продолжить",
+ "Add Another": "Добавить еще",
"Key Added": "Ключ добавлен",
- "Add API Key": "Добавить ключ API",
- "No API Keys": "Нет API ключей",
+ "Add API Key": "Добавить API ключ",
+ "No API Keys": "Нет ключей API",
"apiKey-active": "Активный",
"apiKey-expired": "Истёк",
"apiKey-inactive": "Неактивный",
"Expires": "Истекает",
- "disableAPIKeyMsg": "Вы уверены, что хотите отключить этот ключ?",
+ "disableAPIKeyMsg": "Вы уверены, что хотите отключить этот API ключ?",
"Generate": "Сгенерировать",
"pagertreeResolve": "Автоматическое разрешение",
- "pagertreeDoNothing": "ничего не делать",
+ "pagertreeDoNothing": "Ничего не делать",
"lunaseaTarget": "Цель",
"lunaseaDeviceID": "Идентификатор устройства",
"lunaseaUserID": "Идентификатор пользователя",
- "Lowcost": "Низкая стоимость",
+ "Lowcost": "Бюджетный",
"pagertreeIntegrationUrl": "URL-адрес интеграции",
"pagertreeUrgency": "Срочность",
"pagertreeSilent": "Тихий",
@@ -736,15 +736,15 @@
"pagertreeHigh": "Высокий",
"pagertreeCritical": "Критический",
"high": "высокий",
- "promosmsAllowLongSMS": "Разрешить длинные SMS-сообщения",
+ "promosmsAllowLongSMS": "Разрешить длинные СМС",
"Economy": "Экономия",
- "wayToGetPagerDutyKey": "Вы можете получить это, перейдя в службу -> Каталог служб -> (Выберите службу) -> Интеграции -> Добавить интеграцию. Здесь вы можете выполнить поиск по \"Events API V2\". Дополнительная информация {0}",
- "apiKeyAddedMsg": "Ваш API ключ был добавлен. Пожалуйста, запишите это, так как оно больше не будет показан.",
+ "wayToGetPagerDutyKey": "Вы можете это получить, перейдя в Сервис -> Каталог сервисов -> (Выберите сервис) -> Интеграции -> Добавить интеграцию. Здесь вы можете искать «Events API V2». Подробнее {0}",
+ "apiKeyAddedMsg": "Ваш ключ API добавлен. Пожалуйста, обратите внимание на это сообщение, так как оно отображается один раз.",
"deleteAPIKeyMsg": "Вы уверены, что хотите удалить этот ключ API?",
- "wayToGetPagerTreeIntegrationURL": "После создания интеграции Uptime Kuma в PagerTree, скопируйте конечную точку. Смотрите полную информацию {0}",
+ "wayToGetPagerTreeIntegrationURL": "После создания интеграции Uptime Kuma в PagerTree скопируйте файл Endpoint. См. полную информацию {0}",
"telegramMessageThreadIDDescription": "Необязательный уникальный идентификатор для цепочки сообщений (темы) форума; только для форумов-супергрупп",
- "grpcMethodDescription": "Название метода - преобразовать в формат cammelCase, такой как sayHello, check и т.д.",
- "Proto Service Name": "название службы Proto",
+ "grpcMethodDescription": "Имя метода преобразуется в формат cammelCase, например, sayHello, check и т. д.",
+ "Proto Service Name": "Название службы Proto",
"Proto Method": "Метод Proto",
"Proto Content": "Содержание Proto",
"telegramMessageThreadID": "(Необязательно) ID цепочки сообщений",
@@ -758,5 +758,40 @@
"endDateTime": "Конечная дата и время",
"cronExpression": "Выражение для Cron",
"cronSchedule": "Расписание: ",
- "invalidCronExpression": "Неверное выражение Cron: {0}"
+ "invalidCronExpression": "Неверное выражение Cron: {0}",
+ "ntfyUsernameAndPassword": "Логин и пароль",
+ "ntfyAuthenticationMethod": "Способ входа",
+ "Monitor Setting": "Настройка монитора {0}",
+ "Show Clickable Link": "Показать кликабельную ссылку",
+ "Badge Generator": "Генератор значков для {0}",
+ "Badge Type": "Тип значка",
+ "Badge Duration": "Срок действия значка",
+ "Badge Label": "Надпись для значка",
+ "Badge Prefix": "Префикс значка",
+ "Badge Label Color": "Цвет надписи значка",
+ "Badge Color": "Цвет значка",
+ "Badge Label Prefix": "Префикс надписи для значка",
+ "Open Badge Generator": "Открыть генератор значка",
+ "Badge Up Color": "Цвет значка для статуса \"Доступен\"",
+ "Badge Pending Color": "Цвет значка для статуса \"Ожидание\"",
+ "Badge Maintenance Color": "Цвет значка для статуса \"Техобслуживание\"",
+ "Badge Style": "Стиль значка",
+ "Badge Suffix": "Суффикс значка",
+ "Badge value (For Testing only.)": "Значение значка (только для тестирования)",
+ "Badge URL": "URL значка",
+ "Group": "Группа",
+ "Monitor Group": "Группа мониторов",
+ "Show Clickable Link Description": "Если флажок установлен, все, кто имеет доступ к этой странице состояния, могут иметь доступ к URL-адресу монитора.",
+ "pushoverMessageTtl": "TTL сообщения (в секундах)",
+ "Badge Down Color": "Цвет значка для статуса \"Недоступен\"",
+ "Badge Label Suffix": "Суффикс надписи для значка",
+ "Edit Maintenance": "Редактировать техобсоуживание",
+ "Reconnecting...": "Переподключение...",
+ "Cannot connect to the socket server": "Невозможно подключиться к серверу",
+ "Badge Warn Color": "Цвет значка для предупреждения",
+ "Badge Warn Days": "Значок для \"дней предупреждения\"",
+ "Badge Down Days": "Значок для \"дней недоступности\"",
+ "Home": "Главная",
+ "noGroupMonitorMsg": "Не доступно. Создайте сначала группу мониторов.",
+ "Close": "Закрыть"
}
diff --git a/src/lang/th-TH.json b/src/lang/th-TH.json
index b29115c7..10ddc0c9 100644
--- a/src/lang/th-TH.json
+++ b/src/lang/th-TH.json
@@ -214,7 +214,7 @@
"smtpBCC": "BCC",
"discord": "Discord",
"Discord Webhook URL": "Discord Webhook URL",
- "wayToGetDiscordURL": "คุณสามารถรับได้โดยการไปที่ Server Settings -> Integrations -> Create Webhook",
+ "wayToGetDiscordURL": "คุณสามารถทำได้โดยการไปที่ Server Settings -> Integrations -> Create Webhook",
"Bot Display Name": "ชื่อบอท",
"Prefix Custom Message": "คำนำหน้าข้อความที่กำหนดเอง",
"Hello @everyone is...": "สวัสดี {'@'}everyone นี่…",
@@ -652,5 +652,23 @@
"Enable DNS Cache": "เปิดใช้งาน DNS Cache",
"Enable": "เปิดใช้งาน",
"Disable": "ปิดใช้งาน",
- "Single Maintenance Window": "หน้าการปรับปรุงเดี่ยว"
+ "Single Maintenance Window": "หน้าการปรับปรุงเดี่ยว",
+ "Clone Monitor": "มอนิเตอร์",
+ "Clone": "โคลนมอนิเตอร์",
+ "cloneOf": "ชื่อเล่นมอนิเตอร์",
+ "wayToGetZohoCliqURL": "คุณสามารถดูวิธีการสร้าง Webhook URL {0}",
+ "Cannot connect to the socket server": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ Socket",
+ "Reconnecting...": "กำลังเชื่อมต่อใหม่",
+ "Home": "หน้าหลัก",
+ "Date and Time": "วันที่และเวลา",
+ "DateTime Range": "ช่วงวันที่และเวลา",
+ "loadingError": "ไม่สามารถดึงข้อมูลได้ โปรดลองอีกครั้งในภายหลัง",
+ "plugin": "ปลั้กอิน | ปลั้กอิน",
+ "install": "ติดตั้ง",
+ "installing": "กำลังติดตั้ง",
+ "uninstall": "ถอนการติดตั้ง",
+ "uninstalling": "กำลังถอนการติดตั้ง",
+ "confirmUninstallPlugin": "แน่ใจหรือไม่ว่าต้องการถอนการติดตั้งปลั้กอินนี้?",
+ "Schedule Maintenance": "กำหนดเวลาซ่อมแซม",
+ "Edit Maintenance": "แก้ใขการบำรุงรักษา"
}
diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json
index 4b332449..f6f4d8db 100644
--- a/src/lang/tr-TR.json
+++ b/src/lang/tr-TR.json
@@ -776,5 +776,13 @@
"Badge value (For Testing only.)": "Rozet değeri (Yalnızca Test için.)",
"Badge URL": "Rozet URL'i",
"Monitor Setting": "{0}'nin Monitör Ayarı",
- "Show Clickable Link Description": "Eğer işaretlenirse, bu durum sayfasına erişimi olan herkes monitor URL'ine erişebilir."
+ "Show Clickable Link Description": "Eğer işaretlenirse, bu durum sayfasına erişimi olan herkes monitor URL'ine erişebilir.",
+ "Group": "Grup",
+ "Monitor Group": "Monitor Grup",
+ "Cannot connect to the socket server": "Soket sunucusuna bağlanılamıyor",
+ "Edit Maintenance": "Bakımı Düzenle",
+ "Reconnecting...": "Yeniden bağlanılıyor...",
+ "Home": "Anasayfa",
+ "noGroupMonitorMsg": "Uygun değil. Önce bir Grup Monitörü oluşturun.",
+ "Close": "Kapalı"
}
diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json
index 62014c92..b347956b 100644
--- a/src/lang/uk-UA.json
+++ b/src/lang/uk-UA.json
@@ -462,7 +462,7 @@
"onebotMessageType": "OneBot тип повідомлення",
"onebotGroupMessage": "Група",
"onebotPrivateMessage": "Приватне",
- "onebotUserOrGroupId": "Група/Користувач ID",
+ "onebotUserOrGroupId": "Група/ID користувача",
"onebotSafetyTips": "Для безпеки необхідно встановити маркер доступу",
"PushDeer Key": "PushDeer ключ",
"Footer Text": "Текст нижнього колонтитула",
@@ -782,5 +782,13 @@
"Badge Warn Color": "Колір бейджа \"Попередження\"",
"Badge Warn Days": "Бейдж \"Днів попередження\"",
"Badge Maintenance Color": "Колір бейджа \"Обслуговування\"",
- "Badge Down Days": "Бейдж \"Днів недоступний\""
+ "Badge Down Days": "Бейдж \"Днів недоступний\"",
+ "Group": "Група",
+ "Monitor Group": "Група моніторів",
+ "Edit Maintenance": "Редагувати обслуговування",
+ "Cannot connect to the socket server": "Не вдається підключитися до сервера сокетів",
+ "Reconnecting...": "Повторне підключення...",
+ "Home": "Головна",
+ "noGroupMonitorMsg": "Недоступно. Спочатку створіть групу моніторів.",
+ "Close": "Закрити"
}
diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json
index 1c67ea27..1f45d93c 100644
--- a/src/lang/zh-CN.json
+++ b/src/lang/zh-CN.json
@@ -528,8 +528,8 @@
"RadiusCallingStationId": "呼叫方号码(Calling Station Id)",
"RadiusCallingStationIdDescription": "发出请求的设备的标识",
"Certificate Expiry Notification": "证书到期时通知",
- "API Username": "API 用户名",
- "API Key": "API 密钥",
+ "API Username": "API 用户名",
+ "API Key": "API 密钥",
"Recipient Number": "收件人手机号码",
"From Name/Number": "发件人名称/手机号码",
"Leave blank to use a shared sender number.": "留空以使用平台共享的发件人手机号码。",
@@ -778,5 +778,13 @@
"Badge Label Prefix": "徽章标签前缀",
"Badge Label Color": "徽章标签颜色",
"Show Clickable Link Description": "勾选后所有能访问本状态页的访客均可查看该监控项网址。",
- "Show Clickable Link": "显示可点击的监控项链接"
+ "Show Clickable Link": "显示可点击的监控项链接",
+ "Group": "组",
+ "Monitor Group": "监控项组",
+ "Cannot connect to the socket server": "无法连接到后端服务器",
+ "Reconnecting...": "重连中……",
+ "Edit Maintenance": "编辑维护计划",
+ "Home": "首页",
+ "noGroupMonitorMsg": "暂无可用,请先创建一个监控项组。",
+ "Close": "关闭"
}
diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json
index 38dfaede..3d651990 100644
--- a/src/lang/zh-TW.json
+++ b/src/lang/zh-TW.json
@@ -706,5 +706,43 @@
"wayToGetKookBotToken": "到 {0} 創建應用程式並取得 bot token",
"dataRetentionTimeError": "保留期限必須為 0 或正數",
"infiniteRetention": "設定為 0 以作無限期保留。",
- "confirmDeleteTagMsg": "你確定你要刪除此標籤?相關的監測器不會被刪除。"
+ "confirmDeleteTagMsg": "你確定你要刪除此標籤?相關的監測器不會被刪除。",
+ "twilioAuthToken": "認證 Token",
+ "twilioAccountSID": "帳號 SID",
+ "ntfyUsernameAndPassword": "使用者名稱和密碼",
+ "ntfyAuthenticationMethod": "認證類型",
+ "API Keys": "API 金鑰",
+ "Expiry": "到期",
+ "apiKey-inactive": "無效",
+ "apiKey-expired": "過期",
+ "Reconnecting...": "重新連線...",
+ "Expiry date": "到期時間",
+ "Don't expire": "不要過期",
+ "Continue": "繼續",
+ "Add Another": "新增作者",
+ "Add API Key": "新增 API 金鑰",
+ "Generate": "產生",
+ "lunaseaTarget": "目標",
+ "lunaseaDeviceID": "裝置 ID",
+ "lunaseaUserID": "使用者 ID",
+ "Cannot connect to the socket server": "無法連線到 Socket 伺服器",
+ "Edit Maintenance": "編輯維護",
+ "deleteAPIKeyMsg": "您確定要刪除這個 API 金鑰?",
+ "Custom Monitor Type": "自訂監視器類型",
+ "Google Analytics ID": "Google Analytics ID",
+ "Server Address": "伺服器位置",
+ "Edit Tag": "編輯標籤",
+ "pagertreeMedium": "中",
+ "pagertreeHigh": "高",
+ "pagertreeResolve": "自動解決",
+ "pagertreeLow": "低",
+ "Learn More": "閱讀更多",
+ "pushoverMessageTtl": "Message TTL (秒)",
+ "apiKeyAddedMsg": "您的 API 金鑰已建立。金鑰不會再次顯示,請將它放在安全的地方。",
+ "No API Keys": "無 API 金鑰",
+ "apiKey-active": "活躍",
+ "Expires": "過期",
+ "disableAPIKeyMsg": "您確定要停用這個 API 金鑰?",
+ "Monitor Setting": "{0} 的監視器設定",
+ "Guild ID": "Guild ID"
}
diff --git a/src/mixins/theme.js b/src/mixins/theme.js
index 2f7867df..e3b361ee 100644
--- a/src/mixins/theme.js
+++ b/src/mixins/theme.js
@@ -30,6 +30,9 @@ export default {
theme() {
// As entry can be status page now, set forceStatusPageTheme to true to use status page theme
if (this.forceStatusPageTheme) {
+ if (this.statusPageTheme === "auto") {
+ return this.system;
+ }
return this.statusPageTheme;
}
diff --git a/src/pages/Details.vue b/src/pages/Details.vue
index 1b37b186..9504cfd8 100644
--- a/src/pages/Details.vue
+++ b/src/pages/Details.vue
@@ -8,12 +8,20 @@
- {{ filterPassword(monitor.url) }}
+ {{ filterPassword(monitor.url) }}
TCP Port {{ monitor.hostname }}:{{ monitor.port }}
Ping: {{ monitor.hostname }}
- {{ $t("Keyword") }}: {{ monitor.keyword }}
+ {{ $t("Keyword") }}:
+ {{ monitor.keyword }}
+ ↧
+
+
+
+ {{ $t("Json Query") }}: {{ monitor.jsonPath }}
+
+ {{ $t("Expected Value") }}: {{ monitor.expectedValue }}
[{{ monitor.dns_resolve_type }}] {{ monitor.hostname }}
@@ -68,6 +76,7 @@
+
+
+
+
+
+
+
+
+
+
@@ -217,6 +235,7 @@ import Tag from "../components/Tag.vue";
import CertificateInfo from "../components/CertificateInfo.vue";
import { getMonitorRelativeURL } from "../util.ts";
import { URL } from "whatwg-url";
+import { getResBaseURL } from "../util-frontend";
export default {
components: {
@@ -242,6 +261,7 @@ export default {
hideCount: true,
chunksNavigation: "scroll",
},
+ cacheTime: Date.now(),
};
},
computed: {
@@ -251,6 +271,10 @@ export default {
},
lastHeartBeat() {
+ // Also trigger screenshot refresh here
+ // eslint-disable-next-line vue/no-side-effects-in-computed-properties
+ this.cacheTime = Date.now();
+
if (this.monitor.id in this.$root.lastHeartbeatList && this.$root.lastHeartbeatList[this.monitor.id]) {
return this.$root.lastHeartbeatList[this.monitor.id];
}
@@ -325,11 +349,16 @@ export default {
pushURL() {
return this.$root.baseURL + "/api/push/" + this.monitor.pushToken + "?status=up&msg=OK&ping=";
},
+
+ screenshotURL() {
+ return getResBaseURL() + this.monitor.screenshot + "?time=" + this.cacheTime;
+ }
},
mounted() {
},
methods: {
+ getResBaseURL,
/** Request a test notification be sent for this monitor */
testNotification() {
this.$root.getSocket().emit("testNotification", this.monitor.id);
@@ -411,7 +440,7 @@ export default {
translationPrefix = "Avg. ";
}
- if (this.monitor.type === "http" || this.monitor.type === "keyword") {
+ if (this.monitor.type === "http" || this.monitor.type === "keyword" || this.monitor.type === "json-query") {
return this.$t(translationPrefix + "Response");
}
@@ -561,6 +590,10 @@ table {
color: $dark-font-color;
}
+ .keyword-inverted {
+ color: $dark-font-color;
+ }
+
.dropdown-clear-data {
ul {
background-color: $dark-bg;
diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue
index b82895ed..1ce62279 100644
--- a/src/pages/EditMonitor.vue
+++ b/src/pages/EditMonitor.vue
@@ -27,6 +27,9 @@
HTTP(s) - {{ $t("Keyword") }}
+
+ HTTP(s) - {{ $t("Json Query") }}
+
gRPC(s) - {{ $t("Keyword") }}
@@ -36,6 +39,10 @@
{{ $t("Docker Container") }}
+
+
+ HTTP(s) - Browser Engine (Chrome/Chromium) (Beta)
+
@@ -73,16 +80,6 @@
Redis
-
-
@@ -103,7 +100,7 @@
-
+
{{ $t("URL") }}
@@ -133,6 +130,31 @@
+
+
+
+
+
+
{{ $t("Json Query") }}
+
+
+
+
+
+
+
+
{{ $t("Expected Value") }}
+
+
+
@@ -362,7 +384,7 @@
{{ $t("Advanced") }}
-
-