Merge branch 'master' of https://github.com/louislam/uptime-kuma into uptime-badges

pull/1119/head
Jens Neuber 2 years ago
commit 28be32fc68

@ -4,10 +4,10 @@ Fixes #(issue)
## Type of change
Please delete options that are not relevant.
Please delete any options that are not relevant.
- Bug fix (non-breaking change which fixes an issue)
- User Interface
- User interface (UI)
- New feature (non-breaking change which adds functionality)
- Breaking change (fix or feature that would cause existing functionality to not work as expected)
- Translation update
@ -18,7 +18,7 @@ Please delete options that are not relevant.
- [ ] My code follows the style guidelines of this project
- [ ] I ran ESLint and other linters for modified files
- [ ] I have performed a self-review of my own code and test it
- [ ] I have performed a self-review of my own code and tested it
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] My changes generate no new warnings
- [ ] My code needed automated testing. I have added them (this is optional task)

@ -20,7 +20,7 @@ if (sslKey && sslCert) {
// Dual-stack support for (::)
let hostname = process.env.UPTIME_KUMA_HOST;
// Also read HOST if not FreeBSD, as HOST is a system environment variable in FreeBSD
// Also read HOST if not *BSD, as HOST is a system environment variable in FreeBSD
if (!hostname && !FBSD) {
hostname = process.env.HOST;
}

2218
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -1,6 +1,6 @@
{
"name": "uptime-kuma",
"version": "1.11.1",
"version": "1.11.3",
"license": "MIT",
"repository": {
"type": "git",
@ -27,16 +27,16 @@
"jest-backend": "cross-env TEST_BACKEND=1 jest --config=./config/jest-backend.config.js",
"tsc": "tsc",
"vite-preview-dist": "vite preview --host --config ./config/vite.config.js",
"build-docker": "npm run build-docker-debian && npm run build-docker-alpine",
"build-docker": "npm run build && npm run build-docker-debian && npm run build-docker-alpine",
"build-docker-alpine-base": "docker buildx build -f docker/alpine-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-alpine . --push",
"build-docker-debian-base": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-debian . --push",
"build-docker-alpine": "docker buildx build -f docker/dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.11.1-alpine --target release . --push",
"build-docker-debian": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.11.1 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.11.1-debian --target release . --push",
"build-docker-nightly": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push",
"build-docker-alpine": "docker buildx build -f docker/dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.11.3-alpine --target release . --push",
"build-docker-debian": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.11.3 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.11.3-debian --target release . --push",
"build-docker-nightly": "npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push",
"build-docker-nightly-alpine": "docker buildx build -f docker/dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly-alpine --target nightly . --push",
"build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain",
"upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain",
"setup": "git checkout 1.11.1 && npm ci --production && npm run download-dist",
"setup": "git checkout 1.11.3 && npm ci --production && npm run download-dist",
"download-dist": "node extra/download-dist.js",
"update-version": "node extra/update-version.js",
"mark-as-nightly": "node extra/mark-as-nightly.js",
@ -91,8 +91,8 @@
"prometheus-api-metrics": "~3.2.0",
"qrcode": "~1.5.0",
"redbean-node": "0.1.3",
"socket.io": "~4.2.0",
"socket.io-client": "~4.2.0",
"socket.io": "~4.4.1",
"socket.io-client": "~4.4.1",
"tar": "^6.1.11",
"tcp-ping": "~0.1.1",
"thirty-two": "~1.0.2",
@ -128,8 +128,8 @@
"jest-puppeteer": "~6.0.0",
"puppeteer": "~10.4.0",
"sass": "~1.42.1",
"stylelint": "~13.13.1",
"stylelint-config-standard": "~22.0.0",
"stylelint": "~14.2.0",
"stylelint-config-standard": "~24.0.0",
"typescript": "~4.4.4",
"vite": "~2.6.14"
}

@ -6,7 +6,7 @@ const { DOWN, UP } = require("../../src/util");
class GoogleChat extends NotificationProvider {
name = "Google Chat";
name = "GoogleChat";
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully.";
@ -27,7 +27,7 @@ class GoogleChat extends NotificationProvider {
textMsg += `${msg}`;
const baseURL = await setting("primaryBaseURL");
if (baseURL) {
if (baseURL && monitorJSON) {
textMsg += `\n${baseURL + getMonitorRelativeURL(monitorJSON.id)}`;
}

@ -14,16 +14,20 @@ class SMTP extends NotificationProvider {
secure: notification.smtpSecure,
tls: {
rejectUnauthorized: notification.smtpIgnoreTLSError || false,
},
dkim: {
}
};
// Fix #1129
if (notification.smtpDkimDomain) {
config.dkim = {
domainName: notification.smtpDkimDomain,
keySelector: notification.smtpDkimKeySelector,
privateKey: notification.smtpDkimPrivateKey,
hashAlgo: notification.smtpDkimHashAlgo,
headerFieldNames: notification.smtpDkimheaderFieldNames,
skipFields: notification.smtpDkimskipFields,
}
};
};
}
// Should fix the issue in https://github.com/louislam/uptime-kuma/issues/26#issuecomment-896373904
if (notification.smtpUsername || notification.smtpPassword) {

@ -0,0 +1,47 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { DOWN, UP } = require("../../src/util");
class WeCom extends NotificationProvider {
name = "WeCom";
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully.";
try {
let WeComUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=" + notification.weComBotKey;
let config = {
headers: {
"Content-Type": "application/json"
}
};
let body = this.composeMessage(heartbeatJSON, msg);
await axios.post(WeComUrl, body, config);
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
composeMessage(heartbeatJSON, msg) {
let title;
if (msg != null && heartbeatJSON != null && heartbeatJSON['status'] == UP) {
title = "UptimeKuma Monitor Up";
}
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] == DOWN) {
title = "UptimeKuma Monitor Down";
}
if (msg != null) {
title = "UptimeKuma Message";
}
return {
msgtype: "text",
text: {
content: title + msg
}
};
}
}
module.exports = WeCom;

@ -25,6 +25,7 @@ const DingDing = require("./notification-providers/dingding");
const Bark = require("./notification-providers/bark");
const SerwerSMS = require("./notification-providers/serwersms");
const Stackfield = require("./notification-providers/stackfield");
const WeCom = require("./notification-providers/wecom");
const GoogleChat = require("./notification-providers/google-chat");
class Notification {
@ -63,6 +64,7 @@ class Notification {
new Bark(),
new SerwerSMS(),
new Stackfield(),
new WeCom(),
new GoogleChat()
];

@ -48,7 +48,7 @@ function Ping(host, options) {
this._args = (options.args) ? options.args : [ "-n", "-t", timeout, "-c", "1", host ];
this._regmatch = /=([0-9.]+?) ms/;
} else if (util.FBSD) {
} else if (util.BSD) {
this._bin = "/sbin/ping";
const defaultArgs = [ "-n", "-t", timeout, "-c", "1", host ];

@ -60,7 +60,9 @@ class Prometheus {
}
try {
monitor_cert_days_remaining.set(this.monitorLabelValues, tlsInfo.certInfo.daysRemaining);
if (tlsInfo.certInfo != null) {
monitor_cert_days_remaining.set(this.monitorLabelValues, tlsInfo.certInfo.daysRemaining);
}
} catch (e) {
console.error(e);
}

@ -1,4 +1,15 @@
console.log("Welcome to Uptime Kuma");
// Check Node.js Version
const nodeVersion = parseInt(process.versions.node.split(".")[0]);
const requiredVersion = 14;
console.log(`Your Node.js version: ${nodeVersion}`);
if (nodeVersion < requiredVersion) {
console.error(`Error: Your Node.js version is not supported, please upgrade to Node.js >= ${requiredVersion}.`);
process.exit(-1);
}
const args = require("args-parser")(process.argv);
const { sleep, debug, getRandomInt, genSecret } = require("../src/util");
const config = require("./config");

@ -18,6 +18,7 @@ exports.WIN = /^win/.test(process.platform);
exports.LIN = /^linux/.test(process.platform);
exports.MAC = /^darwin/.test(process.platform);
exports.FBSD = /^freebsd/.test(process.platform);
exports.BSD = /bsd$/.test(process.platform);
/**
* Init or reset JWT secret

@ -16,8 +16,8 @@
<div v-if="tokenRequired">
<div class="form-floating mt-3">
<input id="floatingToken" v-model="token" type="text" maxlength="6" class="form-control" placeholder="123456">
<label for="floatingToken">{{ $t("Token") }}</label>
<input id="otp" v-model="token" type="text" maxlength="6" class="form-control" placeholder="123456">
<label for="otp">{{ $t("Token") }}</label>
</div>
</div>

@ -0,0 +1,12 @@
<template>
<div class="mb-3">
<label for="WeCom Bot Key" class="form-label">{{ $t("WeCom Bot Key") }}<span style="color: red;"><sup>*</sup></span></label>
<input id="WeCom Bot Key" v-model="$parent.notification.weComBotKey" type="text" class="form-control" required>
<div class="form-text">
<p><span style="color: red;"><sup>*</sup></span>{{ $t("Required") }}</p>
</div>
<i18n-t tag="p" keypath="Read more:">
<a href="https://work.weixin.qq.com/api/doc/90000/90136/91770" target="_blank">https://work.weixin.qq.com/api/doc/90000/90136/91770</a>
</i18n-t>
</div>
</template>

@ -23,7 +23,8 @@ import AliyunSMS from "./AliyunSms.vue";
import DingDing from "./DingDing.vue";
import Bark from "./Bark.vue";
import SerwerSMS from "./SerwerSMS.vue";
import Stackfield from "./Stackfield.vue";
import Stackfield from './Stackfield.vue';
import WeCom from "./WeCom.vue";
import GoogleChat from "./GoogleChat.vue";
/**
@ -58,7 +59,8 @@ const NotificationFormList = {
"Bark": Bark,
"serwersms": SerwerSMS,
"stackfield": Stackfield,
"Google Chat (Google Workspace only)": GoogleChat
"WeCom": WeCom,
"GoogleChat": GoogleChat
};
export default NotificationFormList;

@ -175,9 +175,9 @@
</template>
<template v-else-if="$i18n.locale === 'it-IT' ">
<p>Si è certi di voler <strong>disabilitare l'autenticazione</strong>?</p>
<p>È per <strong>chi ha l'autenticazione gestita da terze parti</strong> messa davanti ad Uptime Kuma, ad esempio Cloudflare Access.</p>
<p>Utilizzare con attenzione.</p>
<p><strong>Disabilitare l'autenticazione?</strong></p>
<p><strong>Questa opzione è per chi un sistema di autenticazione gestito da terze parti</strong> messo davanti ad Uptime Kuma, ad esempio Cloudflare Access.</p>
<p>Utilizzare con attenzione!</p>
</template>
<template v-else-if="$i18n.locale === 'id-ID' ">

@ -131,8 +131,8 @@ export default {
Events: "Събития",
Heartbeats: "Проверки",
"Auto Get": "Авт. попълване",
backupDescription: "Можете да архивирате всички монитори и всички известия в JSON файл.",
backupDescription2: "PS: Данни за история и събития не са включени.",
backupDescription: "Можете да архивирате всички монитори и всички известявания в JSON файл.",
backupDescription2: "PS: Имайте предвид, че данните за история и събития няма да бъдат включени.",
backupDescription3: "Чувствителни данни, като токен кодове за известяване, се съдържат в експортирания файл. Моля, бъдете внимателни с неговото съхранение.",
alertNoFile: "Моля, изберете файл за импортиране.",
alertWrongFileType: "Моля, изберете JSON файл.",
@ -359,5 +359,5 @@ export default {
smtpDkimPrivateKey: "Частен ключ",
smtpDkimHashAlgo: "Хеш алгоритъм (по желание)",
smtpDkimheaderFieldNames: "Хедър ключове за подписване (по желание)",
smtpDkimskipFields: "Хедър ключове, които да не се подписеат (по желание)",
smtpDkimskipFields: "Хедър ключове, които да не се подписват (по желание)",
};

@ -194,6 +194,7 @@ export default {
promosms: "PromoSMS",
lunasea: "LunaSea",
apprise: "Apprise (Unterstützung für 50+ Benachrichtigungsdienste)",
GoogleChat: "Google Chat (nur Google Workspace)",
pushbullet: "Pushbullet",
line: "Line Messenger",
mattermost: "Mattermost",

@ -243,6 +243,7 @@ export default {
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea",
apprise: "Apprise (Support 50+ Notification services)",
GoogleChat: "Google Chat (Google Workspace only)",
pushbullet: "Pushbullet",
line: "Line Messenger",
mattermost: "Mattermost",

@ -2,11 +2,11 @@ export default {
languageName: "Italiano (Italian)",
checkEverySecond: "controlla ogni {0} secondi",
retryCheckEverySecond: "Riprova ogni {0} secondi.",
retriesDescription: "Tentativi da fare prima che il servizio venga marcato come \"giù\" e che una notifica venga inviata.",
ignoreTLSError: "Ignora gli errori TLS/SSL per i siti in HTTPS.",
upsideDownModeDescription: "Capovolgi lo stato. Se il servizio è raggiungibile viene marcato come \"GIÙ\".",
maxRedirectDescription: "Numero massimo di redirezionamenti consentito. Per disabilitare impostare \"0\".",
acceptedStatusCodesDescription: "Inserire i codici di stato considerati come risposte corrette.",
retriesDescription: "Tentativi prima che il servizio venga marcato come \"DOWN\" e che una notifica venga inviata.",
ignoreTLSError: "Ignora gli errori TLS/SSL per i siti HTTPS.",
upsideDownModeDescription: "Se il servizio risulta raggiungibile viene marcato come \"DOWN\".",
maxRedirectDescription: "Numero massimo di redirezionamenti consentito. Per disabilitare, impostare \"0\".",
acceptedStatusCodesDescription: "Elenco di codici di stato HTTP che sono considerati validi.",
passwordNotMatchMsg: "La password non coincide.",
notificationDescription: "Assegnare la notifica a uno o più oggetti monitorati per metterla in funzione.",
keywordDescription: "Cerca la parola chiave nella risposta in html o JSON e fai distinzione tra maiuscole e minuscole",
@ -16,35 +16,35 @@ export default {
resoverserverDescription: "Cloudflare è il server predefinito, è possibile cambiare il server DNS.",
rrtypeDescription: "Scegliere il tipo di RR che si vuole monitorare",
pauseMonitorMsg: "Si è certi di voler mettere in pausa?",
enableDefaultNotificationDescription: "Per ogni nuovo oggetto monitorato questa notifica sarà abilitata di default. È comunque possibile disabilitare la notifica separatamente per ogni oggetto.",
enableDefaultNotificationDescription: "Per ogni nuovo monitor questa notifica sarà abilitata di default. È comunque possibile disabilitare la notifica singolarmente.",
clearEventsMsg: "Si è certi di voler eliminare tutti gli eventi per questo servizio?",
clearHeartbeatsMsg: "Si è certi di voler eliminare tutti gli intervalli di controllo per questo servizio?",
confirmClearStatisticsMsg: "Si è certi di voler eliminare TUTTE le statistiche?",
importHandleDescription: "Selezionare 'Ignora gli esistenti' si vuole ignorare l'importazione degli oggetti monitorati o delle notifiche con lo stesso nome. 'Sovrascrivi' eliminerà ogni oggetto e notifica esistente.",
importHandleDescription: "Selezionare \"Ignora esistenti\" se si vuole ignorare l'importazione dei monitor o delle notifiche con lo stesso nome. \"Sovrascrivi\" rimpiazzerà tutti i monitor e le notifiche presenti con quelli nel backup.",
confirmImportMsg: "Si è certi di voler importare il backup? Essere certi di aver selezionato l'opzione corretta di importazione.",
twoFAVerifyLabel: "Scrivi il token per verificare che l'autenticazione a due fattori funzioni",
twoFAVerifyLabel: "Digita il token per verificare che l'autenticazione a due fattori funzioni correttamente:",
tokenValidSettingsMsg: "Il token è valido! È ora possibile salvare le impostazioni.",
confirmEnableTwoFAMsg: "Si è certi di voler abilitare l'autenticazione a due fattori?",
confirmDisableTwoFAMsg: "Si è certi di voler disabilitare l'autenticazione a due fattori?",
Settings: "Impostazioni",
Dashboard: "Cruscotto",
"New Update": "Nuovo Aggiornamento Disponibile",
Dashboard: "Dashboard",
"New Update": "Nuovo aggiornamento disponibile!",
Language: "Lingua",
Appearance: "Aspetto",
Theme: "Tema",
General: "Generali",
General: "Generale",
"Primary Base URL": "URL base primario",
Version: "Versione",
"Check Update On GitHub": "Controlla aggiornamenti su GitHub",
List: "Lista",
Add: "Aggiungi",
"Add New Monitor": "Aggiungi un nuovo oggetto da monitorare",
"Add New Monitor": "Aggiungi nuovo monitor",
"Quick Stats": "Statistiche rapide",
Up: "Su",
Down: "Giù",
Pending: "Pendente",
Up: "Up",
Down: "Down",
Pending: "In attesa",
Unknown: "Sconosciuti",
Pause: "Metti in Pausa",
Pause: "Metti in pausa",
Name: "Nome",
Status: "Stato",
DateTime: "Data e Ora",
@ -65,15 +65,15 @@ export default {
Ping: "Ping",
"Monitor Type": "Modalità di monitoraggio",
Keyword: "Parola chiave",
"Friendly Name": "Nomignolo",
"Friendly Name": "Nome",
URL: "URL",
Hostname: "Nome Host",
Port: "Porta",
"Heartbeat Interval": "Intervallo di controllo",
Retries: "Tentativi",
"Heartbeat Retry Interval": "Intervallo tra un tentativo di controllo e l'altro",
"Heartbeat Retry Interval": "Intervallo tra i tentativo di controllo",
Advanced: "Avanzate",
"Upside Down Mode": "Modalità capovolta",
"Upside Down Mode": "Modalità invertita",
"Max. Redirects": "Reindirizzamenti massimi",
"Accepted Status Codes": "Codici di stato accettati",
"Push URL": "Push URL",
@ -81,52 +81,52 @@ export default {
pushOptionalParams: "Parametri aggiuntivi: {0}",
Save: "Salva",
Notifications: "Notifiche",
"Not available, please setup.": "Non disponibili, da impostare.",
"Setup Notification": "Imposta le notifiche",
"Not available, please setup.": "Non disponibili, da configurare.",
"Setup Notification": "Configura le notifiche",
Light: "Chiaro",
Dark: "Scuro",
Auto: "Automatico",
"Theme - Heartbeat Bar": "Tema - Barra di Stato",
"Theme - Heartbeat Bar": "Tema (barra di stato)",
Normal: "Normale",
Bottom: "Sotto",
None: "Nessuna",
Timezone: "Fuso Orario",
"Search Engine Visibility": "Visibilità ai motori di ricerca",
"Allow indexing": "Permetti l'indicizzazione",
"Discourage search engines from indexing site": "Scoraggia l'indicizzazione da parte dei motori di ricerca",
"Change Password": "Cambio Password",
"Current Password": "Password Corrente",
"New Password": "Nuova Password",
"Repeat New Password": "Ripetere la nuova Password",
"Update Password": "Modifica Password",
"Disable Auth": "Disabilita l'autenticazione",
"Enable Auth": "Abilita Autenticazione",
"Allow indexing": "Consenti l'indicizzazione",
"Discourage search engines from indexing site": "Evita l'indicizzazione ai motori di ricerca",
"Change Password": "Cambia password",
"Current Password": "Password corrente",
"New Password": "Nuova password",
"Repeat New Password": "Ripeti nuova password",
"Update Password": "Modifica password",
"Disable Auth": "Disabilita autenticazione",
"Enable Auth": "Abilita autenticazione",
Logout: "Esci",
Leave: "Annulla",
"I understand, please disable": "Lo capisco, disabilitare l'autenticazione.",
Confirm: "Conferma",
Yes: "Sì",
No: "No",
Username: "Nome Utente",
Username: "Nome utente",
Password: "Password",
"Remember me": "Ricordami",
"Remember me": "Ricorda credenziali",
Login: "Accesso",
"No Monitors, please": "Nessun oggetto monitorato,",
"add one": "aggiungerne uno",
"Notification Type": "Tipo di notifica",
"No Monitors, please": "Nessun monitor presente,",
"add one": "aggiungine uno!",
"Notification Type": "Servizio di notifica",
Email: "E-mail",
Test: "Prova",
Test: "Fai una prova",
"Certificate Info": "Informazioni sul certificato",
"Resolver Server": "Server DNS",
"Resource Record Type": "Tipo di Resource Record",
"Last Result": "Ultimo risultato",
"Create your admin account": "Crea l'account amministratore",
"Repeat Password": "Ripeti Password",
"Import Backup": "Importa Backup",
"Export Backup": "Esporta Backup",
"Repeat Password": "Ripeti password",
"Import Backup": "Importa backup",
"Export Backup": "Esporta backup",
Export: "Esporta",
Import: "Importa",
respTime: "Tempo di Risposta (ms)",
respTime: "Tempo di risposta (ms)",
notAvailableShort: "N/D",
"Default enabled": "Abilitato di default",
"Apply on all existing monitors": "Applica su tutti i monitoraggi",
@ -136,21 +136,21 @@ export default {
Heartbeats: "Controlli",
"Auto Get": "Rileva",
backupDescription: "È possibile fare il backup di tutti i monitoraggi e di tutte le notifiche in un file JSON.",
backupDescription2: "P.S.: lo storico e i dati relativi agli eventi non saranno inclusi",
backupDescription3: "Dati sensibili come i token di autenticazione saranno inclusi nel backup, tenere quindi in un luogo sicuro.",
backupDescription2: "NOTA: lo storico e i dati relativi agli eventi non saranno inclusi nel backup",
backupDescription3: "Dati sensibili come i token di autenticazione saranno inclusi nel backup, custodisci il file in un luogo sicuro!",
alertNoFile: "Selezionare il file da importare.",
alertWrongFileType: "Selezionare un file JSON.",
"Clear all statistics": "Pulisci tutte le statistiche",
"Skip existing": "Ignora gli esistenti",
"Clear all statistics": "Cancella tutte le statistiche",
"Skip existing": "Ignora esistenti",
Overwrite: "Sovrascrivi",
Options: "Opzioni",
"Keep both": "Mantieni entrambi",
"Verify Token": "Verifica Token",
"Setup 2FA": "Imposta l'autenticazione a due fattori",
"Enable 2FA": "Abilita l'autenticazione a due fattori",
"Disable 2FA": "Disabilita l'autenticazione a due fattori",
"2FA Settings": "Impostazioni autenticazione a due fattori",
"Two Factor Authentication": "Autenticazione a due fattori",
"Verify Token": "Verifica token",
"Setup 2FA": "Configura 2FA",
"Enable 2FA": "Abilita 2FA",
"Disable 2FA": "Disabilita 2FA",
"2FA Settings": "Gestisci l'autenticazione a due fattori",
"Two Factor Authentication": "Autenticazione a due fattori (2FA)",
Active: "Attivata",
Inactive: "Disattivata",
Token: "Token",
@ -173,31 +173,31 @@ export default {
"Avg. Ping": "Tempo medio di risposta al ping",
"Avg. Response": "Tempo medio di risposta",
"Entry Page": "Pagina Principale",
statusPageNothing: "Non c'è nulla qui, aggiungere un gruppo oppure un oggetto da monitorare.",
"No Services": "Nessun Servizio",
statusPageNothing: "Non c'è nulla qui, aggiungi un gruppo oppure un monitor.",
"No Services": "Nessun servizio",
"All Systems Operational": "Tutti i sistemi sono funzionali",
"Partially Degraded Service": "Servizio parzialmente degradato",
"Degraded Service": "Servizio degradato",
"Add Group": "Aggiungi Gruppo",
"Add a monitor": "Aggiungi un oggetto",
"Add Group": "Aggiungi gruppo",
"Add a monitor": "Aggiungi monitor",
"Edit Status Page": "Modifica pagina di stato",
"Go to Dashboard": "Vai al Cruscotto",
"Go to Dashboard": "Vai alla dashboard",
"Status Page": "Pagina di stato",
defaultNotificationName: "Allarme {notification} ({number})",
defaultNotificationName: "Notifica {notification} ({number})",
here: "qui",
Required: "Richiesto",
Required: "Obbligatorio",
telegram: "Telegram",
"Bot Token": "Token del Bot",
wayToGetTelegramToken: "È possibile ricevere un token da {0}.",
"Bot Token": "Token del bot",
wayToGetTelegramToken: "Puoi ottenere il token da {0}.",
"Chat ID": "ID Chat",
supportTelegramChatID: "Supporta Chat dirette / di Gruppo / ID Canale",
supportTelegramChatID: "Supporta chat private, gruppi e canali.",
wayToGetTelegramChatID: "È possibile ricereve l'ID chat mandando un messaggio al bot e poi andando in questo URL per visualizzare il chat_id:",
"YOUR BOT TOKEN HERE": "QUI IL TOKEN DEL BOT",
chatIDNotFound: "Non trovo l'ID chat. Prima bisogna mandare un messaggio al bot",
webhook: "Webhook",
"Post URL": "Post URL",
"Content Type": "Content Type",
webhookJsonDesc: "{0} va bene per qualsiasi server http moderno ad esempio express.js",
webhookJsonDesc: "{0} va bene per qualsiasi server HTTP moderno ad esempio express.js",
webhookFormDataDesc: "{multipart} va bene per PHP, c'è solo bisogno di analizzare il json con {decodeFunction}",
smtp: "E-mail (SMTP)",
secureOptionNone: "Nessuno / STARTTLS (25, 587)",
@ -294,29 +294,29 @@ export default {
matrixDesc1: "È possibile recuperare l'ID della stanza all'interno delle impostazioni avanzate della stanza nel client Matrix. Dovrebbe essere simile a !QMdRCpUIfLwsfjxye6:server.di.casa.",
matrixDesc2: "È altamente raccomandata la creazione di un nuovo utente e di non utilizare il proprio token di accesso Matrix poiché darà pieno controllo al proprio account e a tutte le stanze in cui si ha accesso. Piuttosto, si crei un nuovo utente per invitarlo nella stanza dove si vuole ricevere le notifiche. Si può accedere al token eseguendo {0}",
Method: "Metodo",
Body: "Corpo",
Body: "Body",
Headers: "Intestazioni",
PushUrl: "URL di Push",
HeadersInvalidFormat: "L'intestazione di richiesta non è un JSON valido: ",
BodyInvalidFormat: "Il corpo di richiesta non è un JSON valido: ",
"Monitor History": "Storicizzazione",
"Monitor History": "Storico monitor",
clearDataOlderThan: "Mantieni lo storico per {0} giorni.",
PasswordsDoNotMatch: "Le password non corrispondono.",
PasswordsDoNotMatch: "Le password non corrispondono!",
records: "records",
"One record": "One record",
steamApiKeyDescription: "Per monitorare un server di gioco Steam si necessita della chiave Web-API di Steam. È possibile registrare la propria chiave API qui: ",
steamApiKeyDescription: "Per monitorare un server di gioco Steam è necessaria una Web-API Key di Steam. È possibile registrarne una qui: ",
"Current User": "Utente corrente",
recent: "Recenti",
Done: "Fatto",
Info: "Info",
Security: "Sicurezza",
"Steam API Key": "Chiave API di Steam",
"Shrink Database": "Comprimi Database",
"Steam API Key": "API Key di Steam",
"Shrink Database": "Comprimi database",
"Pick a RR-Type...": "Scegli un tipo di RR...",
"Pick Accepted Status Codes...": "Scegli i codici di Stato Accettati...",
Default: "Predefinito",
"HTTP Options": "Opzioni HTTP",
"Create Incident": "Crea Incident",
"Create Incident": "Segnala incidente",
Title: "Titolo",
Content: "Contenuto",
Style: "Stile",
@ -331,20 +331,20 @@ export default {
Created: "Creato",
"Last Updated": "Ultima modifica",
Unpin: "Rimuovi",
"Switch to Light Theme": "Utilizza tema chiaro",
"Switch to Dark Theme": "Utilizza tema scuro",
"Switch to Light Theme": "Utilizza il tema chiaro",
"Switch to Dark Theme": "Utilizza il tema scuro",
"Show Tags": "Mostra etichette",
"Hide Tags": "Nascondi etichette",
Description: "Descrizione",
"No monitors available.": "Nessun oggetto monitorato disponibile.",
"Add one": "Aggiungi",
"No Monitors": "Nessun oggetto monitorato inserito",
"No monitors available.": "Nessun monitor disponibile.",
"Add one": "Aggiungine uno!",
"No Monitors": "Nessun monitor presente.",
"Untitled Group": "Gruppo senza titolo",
Services: "Servizi",
Discard: "Scarta",
Discard: "Scarta modifiche",
Cancel: "Annulla",
"Powered by": "Servito da",
shrinkDatabaseDescription: "Lancia il comando VACUUM sul database SQLite. Se il database è stato creato dopo la versione 1.10.0, AUTO_VACUUM è già abilitato e questa azione non è necessaria.",
"Powered by": "Powered by",
shrinkDatabaseDescription: "Lancia il comando \"VACUUM\" sul database SQLite. Se il database è stato creato dopo la versione 1.10.0, la funzione \"AUTO_VACUUM\" è già abilitata di default e quindi questa azione non è necessaria.",
serwersms: "SerwerSMS.pl",
serwersmsAPIUser: "Nome utente API (incl. prefisso webapi_)",
serwersmsAPIPassword: "Password API",
@ -360,4 +360,5 @@ export default {
smtpDkimHashAlgo: "Algoritmo di hashing (opzionale)",
smtpDkimheaderFieldNames: "Campi Intestazione da firmare (opzionale)",
smtpDkimskipFields: "Campi Intestazione da non firmare (opzionale)",
GoogleChat: "Google Chat (solo per Google Workspace)",
};

@ -22,8 +22,8 @@ export default {
confirmClearStatisticsMsg: "Jesteś pewien, że chcesz usunąć WSZYSTKIE statystyki?",
importHandleDescription: "Wybierz 'Pomiń istniejące', jeśli chcesz pominąć każdy monitor lub powiadomienie o tej samej nazwie. 'Nadpisz' spowoduje usunięcie każdego istniejącego monitora i powiadomienia.",
confirmImportMsg: "Czy na pewno chcesz zaimportować kopię zapasową? Upewnij się, że wybrałeś właściwą opcję importu.",
twoFAVerifyLabel: "Proszę podaj swój token 2FA, aby sprawdzić czy 2FA działa.",
tokenValidSettingsMsg: "Token jest prawdiłowy! Teraz możesz zapisać ustawienia 2FA.",
twoFAVerifyLabel: "Proszę, podaj swój token 2FA, aby sprawdzić, czy 2FA działa.",
tokenValidSettingsMsg: "Token jest prawidłowy! Teraz możesz zapisać ustawienia 2FA.",
confirmEnableTwoFAMsg: "Jesteś pewien, że chcesz włączyć 2FA?",
confirmDisableTwoFAMsg: "Jesteś pewien, że chcesz wyłączyć 2FA?",
Settings: "Ustawienia",
@ -68,7 +68,7 @@ export default {
URL: "URL",
Hostname: "Hostname",
Port: "Port",
"Heartbeat Interval": "Czętotliwość bicia serca",
"Heartbeat Interval": "Częstotliwość bicia serca",
Retries: "Prób",
"Heartbeat Retry Interval": "Częstotliwość ponawiania bicia serca",
Advanced: "Zaawansowane",
@ -110,7 +110,7 @@ export default {
"No Monitors, please": "Brak monitorów, proszę",
"add one": "dodać jeden",
"Notification Type": "Rodzaj powiadomienia",
Email: "Email",
Email: "E-mail",
Test: "Test",
"Certificate Info": "Informacje o certyfikacie",
"Resolver Server": "Serwer rozwiązywania nazw",
@ -188,13 +188,13 @@ export default {
"Chat ID": "Identyfikator czatu",
supportTelegramChatID: "Czat wsparcia technicznego / Bezpośrednia rozmowa / Czat grupowy",
wayToGetTelegramChatID: "Możesz uzyskać swój identyfikator czatu, wysyłając wiadomość do bota i przechodząc pod ten adres URL, aby wyświetlić identyfikator czatu:",
"YOUR BOT TOKEN HERE": "TWOJ TOKEN BOTA",
"YOUR BOT TOKEN HERE": "TWÓJ TOKEN BOTA",
chatIDNotFound: "Identyfikator czatu nie znaleziony, najpierw napisz do bota",
webhook: "Webhook",
"Post URL": "Adres URL",
"Content Type": "Rodzaj danych",
webhookJsonDesc: "{0} jest dobry w przypadku serwerów HTTP, takich jak express.js",
webhookFormDataDesc: "{multipart} jest dobry dla PHP, musisz jedynie przetowrzyć dane przez {decodeFunction}",
webhookFormDataDesc: "{multipart} jest dobry dla PHP, musisz jedynie przetworzyć dane przez {decodeFunction}",
smtp: "Email (SMTP)",
secureOptionNone: "Brak / STARTTLS (25, 587)",
secureOptionTLS: "TLS (465)",
@ -205,7 +205,7 @@ export default {
smtpBCC: "UDW",
discord: "Discord",
"Discord Webhook URL": "URL webhook Discorda",
wayToGetDiscordURL: "Możesz go uzyskać przechodząc do Ustawienia serwera -> Integracje -> Tworzenie webhooka",
wayToGetDiscordURL: "Możesz go uzyskać, przechodząc do Ustawienia serwera -> Integracje -> Tworzenie webhooka",
"Bot Display Name": "Wyświetlana nazwa bota",
"Prefix Custom Message": "Własny początek wiadomości",
"Hello @everyone is...": "Hej {'@'}everyone ...",
@ -237,6 +237,7 @@ export default {
promosms: "PromoSMS",
lunasea: "LunaSea",
apprise: "Apprise (obsługuje 50+ usług powiadomień)",
GoogleChat: "Google Chat (wyłącznie Google Workspace)",
pushbullet: "Pushbullet",
line: "Line Messenger",
mattermost: "Mattermost",
@ -259,7 +260,7 @@ export default {
"Read more:": "Czytaj dalej: {0}",
"Status:": "Status: {0}",
"Read more": "Czytaj dalej",
appriseInstalled: "Apprise jest zostało zainstalowane.",
appriseInstalled: "Apprise jest zainstalowane.",
appriseNotInstalled: "Apprise nie zostało zainstalowane. {0}",
"Access Token": "Token dostępu",
"Channel access token": "Token dostępu kanału",
@ -289,7 +290,7 @@ export default {
"Feishu WebHookUrl": "Feishu WebHookURL",
matrixHomeserverURL: "Adres URL serwera domowego (z http(s):// i opcjonalnie port)",
"Internal Room Id": "Wewnętrzne ID pokoju",
matrixDesc1: "Możesz znaleźć wewnętrzne ID pokoju patrząc w zaawansowanej sekcji ustawień pokoju w twoim kliencie Matrix. Powinien on wyglądać jak !QMdRCpUIfLwsfjxye6:home.server.",
matrixDesc1: "Możesz znaleźć wewnętrzne ID pokoju, patrząc w zaawansowanej sekcji ustawień pokoju w twoim kliencie Matrix. Powinien on wyglądać jak !QMdRCpUIfLwsfjxye6:home.server.",
matrixDesc2: "Jest wysoce zalecane, abyś stworzył nowego użytkownika i nie używał tokena dostępu swojego użytkownika Matrix, ponieważ pozwoli on na pełny dostęp do twojego konta i wszystkich pokoi, do których dołączyłeś. Zamiast tego, utwórz nowego użytkownika i zaproś go tylko do pokoju, w którym chcesz otrzymywać powiadomienia. Możesz uzyskać token dostępu przez uruchomienie {0}",
Method: "Metoda",
Body: "Treść",
@ -305,6 +306,44 @@ export default {
steamApiKeyDescription: "Do monitorowania serwera gier Steam potrzebny jest klucz Steam Web-API. Możesz zarejestrować swój klucz API tutaj: ",
"Current User": "Aktualny użytkownik",
recent: "Ostatnie",
Done: "Zrobione",
Info: "Info",
Security: "Bezpieczeństwo",
"Steam API Key": "Klucz Steam API",
"Shrink Database": "Zmniejsz bazę danych",
"Pick a RR-Type...": "Wybierz typ RR...",
"Pick Accepted Status Codes...": "Wybierz akceptowalne kody statusu...",
Default: "Domyślnie",
"HTTP Options": "Opcje HTTP",
"Create Incident": "Stwórz incydent",
Title: "Tytuł",
Content: "Treść",
Style: "Styl",
info: "info",
warning: "ostrzeżenie",
danger: "niebezpieczeństwo",
primary: "podstawowy",
light: "jasny",
dark: "ciemny",
Post: "Wyślij",
"Please input title and content": "Podaj tytuł i treść",
Created: "Stworzony",
"Last Updated": "Ostatnio zaktualizowany",
Unpin: "Odepnij",
"Switch to Light Theme": "Przełącz na jasny motyw",
"Switch to Dark Theme": "Przełącz na ciemny motyw",
"Show Tags": "Pokaż tagi",
"Hide Tags": "Ukryj tagi",
Description: "Opis",
"No monitors available.": "Brak dostępnych monitorów.",
"Add one": "Dodaj jeden",
"No Monitors": "Brak monitorów",
"Untitled Group": "Nienazwana grupa",
Services: "Usługi",
Discard: "Odrzuć",
Cancel: "Anuluj",
"Powered by": "Napędzane przez",
shrinkDatabaseDescription: "Uruchom VACUUM na bazie SQLite. Jeżeli twoja baza została stworzona po wersji 1.10.0, to posiada już włączoną opcję AUTO_VACUUM i stosowanie ręcznego oczyszczania nie jest potrzebne.",
clicksendsms: "ClickSend SMS",
apiCredentials: "Poświadczenia API",
serwersms: "SerwerSMS.pl",
@ -312,4 +351,14 @@ export default {
serwersmsAPIPassword: "Hasło API",
serwersmsPhoneNumber: "Numer telefonu",
serwersmsSenderName: "Nazwa nadawcy (zatwierdzona w panelu klienta)",
"stackfield": "Stackfield",
smtpDkimSettings: "Ustawienia DKIM",
smtpDkimDesc: "Zapoznaj się z Nodemailer DKIM {0}, aby dowiedzieć się więcej",
documentation: "dokumentacja",
smtpDkimDomain: "Nazwa domeny",
smtpDkimKeySelector: "Selektor klucza",
smtpDkimPrivateKey: "Klucz prywatny",
smtpDkimHashAlgo: "Algorytm Hashowania (opcjonalne)",
smtpDkimheaderFieldNames: "Klucze nagłówka do podpisu (opcjonalne)",
smtpDkimskipFields: "Klucze nagłówka do pominięcia (opcjonalne)",
};

@ -167,8 +167,8 @@ export default {
Purple: "Пурпурный",
Pink: "Розовый",
"Search...": "Поиск...",
"Avg. Ping": "Средн. пинг",
"Avg. Response": "Средн. ответ",
"Avg. Ping": "Среднее значение пинга",
"Avg. Response": "Среднее время ответа",
"Entry Page": "Главная страница",
statusPageNothing: "Здесь пусто. Добавьте группу или монитор.",
"No Services": "Нет сервисов",
@ -308,4 +308,24 @@ export default {
records: "записей",
"One record": "Одна запись",
steamApiKeyDescription: "Для мониторинга игрового сервера Steam вам необходим Web-API ключ Steam. Зарегистрировать его можно здесь: ",
"Certificate Chain:": "Цепочка сертификатов:",
"Valid": "Действительный",
"Hide Tags": "Скрыть тэги",
"Title:": "Название инцидента:",
"Content:": "Содержание инцидента:",
"Post": "Опубликовать",
"Cancel": "Отмена",
"Created:": "Создано:",
"Show Tags": "Показать тэги",
"Recent": "Текущее",
"3h": "3 часа",
"6h": "6 часов",
"24h": "24 часа",
"1w": "1 неделя",
"No monitors available.": "Нет доступных мониторов",
"Add one": "Добавить новый",
"Backup": "Резервная копия",
"Security": "Безопасность",
"Current User:": "Текущий пользователь:",
"All Systems Operational": "Все системы работают",
};

@ -2,9 +2,9 @@ export default {
languageName: "Slovenščina",
checkEverySecond: "Preveri na vsakih {0} sekund",
retryCheckEverySecond: "Ponovno poskusi na vsakih {0} sekund",
retriesDescription: "Maksimalno število poskusov predenj se storitev označi kot nedosegljiva in se pošlje obvestilo",
retriesDescription: "Maksimalno število poskusov predenj se storitev označi kot 'ne deluje' in se pošlje obvestilo",
ignoreTLSError: "Ignoriraj TLS/SSL napake za HTTPS spletne strani",
upsideDownModeDescription: "Negiraj status. Če je storitev dosegljiva je NEDOSEGLJIVA.",
upsideDownModeDescription: "Negiraj status. Če je storitev deluje bo označena kot 'ne deluje'.",
maxRedirectDescription: "Maksimalno število sledečih preusmeritev. 0 onemogoči preusmeritve.",
acceptedStatusCodesDescription: "Izberi kode statusa veljavna kot uspešen odgovor.",
passwordNotMatchMsg: "Ponovljeno geslo se ne ujema.",
@ -40,8 +40,8 @@ export default {
Add: "Dodaj",
"Add New Monitor": "Dodaj nov monitor",
"Quick Stats": "Hitro stanje",
Up: "Dosegljiv",
Down: "Nedosegljiv",
Up: "Deluje",
Down: "Ne deluje",
Pending: "Na čakanju",
Unknown: "Neznano",
Pause: "Pavza",
@ -58,14 +58,14 @@ export default {
"Cert Exp.": "Potek certifikata",
days: "dni",
day: "dan",
"-day": "-dan",
"-day": "-dni",
hour: "ura",
"-hour": "-ura",
"-hour": "-ur",
Response: "Odgovor",
Ping: "Ping",
"Monitor Type": "Tip monitorja",
Keyword: "Ključna beseda",
"Friendly Name": "Prijazno ime",
"Friendly Name": "Ime za prikaz",
URL: "URL",
Hostname: "Hostname",
Port: "Vrata",
@ -182,7 +182,7 @@ export default {
"Add a monitor": "Dodaj monitor",
"Edit Status Page": "Uredi statusno stran",
"Go to Dashboard": "Pojdi na nadzorno ploščo",
"Status Page": "Statusna stran",
"Status Page": "Status",
defaultNotificationName: "Moje {notification} Obvestilo ({number})",
here: "tukaj",
Required: "Obvezno",

@ -291,4 +291,75 @@ export default {
"Internal Room Id": "Internal Room Id",
matrixDesc1: "你可以在 Matrix 客户端房间设置的高级选项找到 Internal Room Id。格式类似于 !QMdRCpUIfLwsfjxye6:home.server。",
matrixDesc2: "请不要使用你自己的 Access Token这将开放你所有的账户权限和你加入的房间权限。你可以创建一个新的用户并邀请它至你允许的的房间中。你可以运行以下命令来获取 Access Token{0}",
emailCustomSubject: "邮件主题",
clicksendsms: "ClickSend SMS",
GoogleChat: "Google Chat (Google Workspace only)",
apiCredentials: "API credentials",
Method: "方法",
Body: "请求体",
Headers: "请求头",
PushUrl: "Push URL",
HeadersInvalidFormat: "请求头不是有效的JSON: ",
BodyInvalidFormat: "请求体不是有效的JSON: ",
"Monitor History": "监控历史数据",
clearDataOlderThan: "保留监控历史数据 {0} 天",
PasswordsDoNotMatch: "密码不匹配",
records: "records",
"One record": "One record",
steamApiKeyDescription: "为了监控Steam游戏服务器你需要一个Steam Web-API key。你可以在这里注册你的API密钥: ",
"Current User": "当前用户",
recent: "最近",
Done: "完成",
Info: "信息",
Security: "安全性",
"Steam API Key": "Steam API Key",
"Shrink Database": "缩小数据库",
"Pick a RR-Type...": "选择资源记录类型...",
"Pick Accepted Status Codes...": "选择有效的状态码...",
Default: "默认",
"HTTP Options": "HTTP 选项",
"Create Incident": "创建事件",
Title: "标题",
Content: "内容",
Style: "类型",
info: "info",
warning: "warning",
danger: "danger",
primary: "primary",
light: "light",
dark: "dark",
Post: "发布",
"Please input title and content": "请输入标题和内容",
Created: "创建于",
"Last Updated": "最后更新",
Unpin: "删除",
"Switch to Light Theme": "切换到浅色主题",
"Switch to Dark Theme": "切换到深色主题",
"Show Tags": "显示标签",
"Hide Tags": "隐藏标签",
Description: "描述",
"No monitors available.": "没有可用的监控项",
"Add one": "Add one",
"No Monitors": "没有监控项",
"Untitled Group": "无标题的分组",
Services: "服务",
Discard: "取消",
Cancel: "取消",
"Powered by": "Powered by",
shrinkDatabaseDescription: "这将触发SQLite数据库的 VACUUM 命令如果您的数据库是在1.10.0版本之后创建的AUTO_VACUUM已经启用了则不需要再使用此功能",
serwersms: "SerwerSMS.pl",
serwersmsAPIUser: "API Username (incl. webapi_ prefix)",
serwersmsAPIPassword: "API Password",
serwersmsPhoneNumber: "Phone number",
serwersmsSenderName: "SMS Sender Name (registered via customer portal)",
stackfield: "Stackfield",
smtpDkimSettings: "DKIM Settings",
smtpDkimDesc: "Please refer to the Nodemailer DKIM {0} for usage.",
documentation: "documentation",
smtpDkimDomain: "域名",
smtpDkimKeySelector: "Key Selector",
smtpDkimPrivateKey: "Private Key",
smtpDkimHashAlgo: "Hash Algorithm (可选)",
smtpDkimheaderFieldNames: "Header Keys to sign (可选)",
smtpDkimskipFields: "Header Keys not to sign (可选)",
};

Loading…
Cancel
Save