mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-11-30 10:14:03 +00:00
Merge branch 'master' into 2.0.X
This commit is contained in:
commit
31c00081fa
12 changed files with 310 additions and 29 deletions
4
.github/workflows/auto-test.yml
vendored
4
.github/workflows/auto-test.yml
vendored
|
@ -9,7 +9,7 @@ on:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '*.md'
|
- '*.md'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master, 2.0.X ]
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '*.md'
|
- '*.md'
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ ARMv7 ]
|
os: [ ARMv7 ]
|
||||||
node: [ 14.21.3, 20.5.0 ]
|
node: [ 14, 20 ]
|
||||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
1
.github/workflows/json-yaml-validate.yml
vendored
1
.github/workflows/json-yaml-validate.yml
vendored
|
@ -6,6 +6,7 @@ on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
|
- 2.0.X
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
|
|
|
@ -214,7 +214,7 @@ Since previously updating Vite 2.5.10 to 2.6.0 broke the application completely,
|
||||||
|
|
||||||
Patch release = the third digit ([Semantic Versioning](https://semver.org/))
|
Patch release = the third digit ([Semantic Versioning](https://semver.org/))
|
||||||
|
|
||||||
If for maybe security reasons, a library must be updated. Then you must need to check if there are any breaking changes.
|
If for security / bug / other reasons, a library must be updated, breaking changes need to be checked by the person proposing the change.
|
||||||
|
|
||||||
## Translations
|
## Translations
|
||||||
|
|
||||||
|
|
16
index.html
16
index.html
|
@ -9,8 +9,24 @@
|
||||||
<meta name="theme-color" id="theme-color" content="" />
|
<meta name="theme-color" id="theme-color" content="" />
|
||||||
<meta name="description" content="Uptime Kuma monitoring tool" />
|
<meta name="description" content="Uptime Kuma monitoring tool" />
|
||||||
<title>Uptime Kuma</title>
|
<title>Uptime Kuma</title>
|
||||||
|
<style>
|
||||||
|
.noscript-message {
|
||||||
|
font-size: 20px;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px;
|
||||||
|
max-width: 500px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<noscript>
|
||||||
|
<div class="noscript-message">
|
||||||
|
Sorry, you don't seem to have JavaScript enabled or your browser
|
||||||
|
doesn't support it.<br />This website requires JavaScript to function.
|
||||||
|
Please enable JavaScript in your browser settings to continue.
|
||||||
|
</div>
|
||||||
|
</noscript>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
<script type="module" src="/src/main.js"></script>
|
<script type="module" src="/src/main.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -21,7 +21,7 @@ class AliyunSMS extends NotificationProvider {
|
||||||
status: this.statusToString(heartbeatJSON["status"]),
|
status: this.statusToString(heartbeatJSON["status"]),
|
||||||
msg: heartbeatJSON["msg"],
|
msg: heartbeatJSON["msg"],
|
||||||
});
|
});
|
||||||
if (this.sendSms(notification, msgBody)) {
|
if (await this.sendSms(notification, msgBody)) {
|
||||||
return okMsg;
|
return okMsg;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -31,7 +31,7 @@ class AliyunSMS extends NotificationProvider {
|
||||||
status: "",
|
status: "",
|
||||||
msg: msg,
|
msg: msg,
|
||||||
});
|
});
|
||||||
if (this.sendSms(notification, msgBody)) {
|
if (await this.sendSms(notification, msgBody)) {
|
||||||
return okMsg;
|
return okMsg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,8 @@ class AliyunSMS extends NotificationProvider {
|
||||||
if (result.data.Message === "OK") {
|
if (result.data.Message === "OK") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
throw new Error(result.data.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -109,10 +109,10 @@
|
||||||
"Last Result": "Letztes Ergebnis",
|
"Last Result": "Letztes Ergebnis",
|
||||||
"pauseMonitorMsg": "Bist du sicher, dass du den Monitor pausieren möchtest?",
|
"pauseMonitorMsg": "Bist du sicher, dass du den Monitor pausieren möchtest?",
|
||||||
"clearEventsMsg": "Bist du sicher, dass du alle Ereignisse für diesen Monitor löschen möchtest?",
|
"clearEventsMsg": "Bist du sicher, dass du alle Ereignisse für diesen Monitor löschen möchtest?",
|
||||||
"clearHeartbeatsMsg": "Bist du sicher, dass du alle Statistiken für diesen Monitor löschen möchtest?",
|
"clearHeartbeatsMsg": "Bist du sicher, dass du alle Prüfintervalle für diesen Monitor löschen möchtest?",
|
||||||
"Clear Data": "Lösche Daten",
|
"Clear Data": "Lösche Daten",
|
||||||
"Events": "Ereignisse",
|
"Events": "Ereignisse",
|
||||||
"Heartbeats": "Statistiken",
|
"Heartbeats": "Prüfintervalle",
|
||||||
"confirmClearStatisticsMsg": "Bist du dir sicher, dass du ALLE Statistiken löschen möchtest?",
|
"confirmClearStatisticsMsg": "Bist du dir sicher, dass du ALLE Statistiken löschen möchtest?",
|
||||||
"Create your admin account": "Erstelle dein Admin-Konto",
|
"Create your admin account": "Erstelle dein Admin-Konto",
|
||||||
"Repeat Password": "Passwort erneut eingeben",
|
"Repeat Password": "Passwort erneut eingeben",
|
||||||
|
@ -380,12 +380,12 @@
|
||||||
"alertaAlertState": "Alarmstatus",
|
"alertaAlertState": "Alarmstatus",
|
||||||
"alertaRecoverState": "Wiederherstellungsstatus",
|
"alertaRecoverState": "Wiederherstellungsstatus",
|
||||||
"deleteStatusPageMsg": "Bist du sicher, dass du diese Status-Seite löschen willst?",
|
"deleteStatusPageMsg": "Bist du sicher, dass du diese Status-Seite löschen willst?",
|
||||||
"Proxies": "Proxies",
|
"Proxies": "Proxys",
|
||||||
"default": "Standard",
|
"default": "Standard",
|
||||||
"enabled": "Aktiviert",
|
"enabled": "Aktiviert",
|
||||||
"setAsDefault": "Als Standard setzen",
|
"setAsDefault": "Als Standard setzen",
|
||||||
"deleteProxyMsg": "Bist du sicher, dass du diesen Proxy für alle Monitore löschen willst?",
|
"deleteProxyMsg": "Bist du sicher, dass du diesen Proxy für alle Monitore löschen willst?",
|
||||||
"proxyDescription": "Proxies müssen einem Monitor zugewiesen werden, um zu funktionieren.",
|
"proxyDescription": "Proxys müssen einem Monitor zugewiesen werden, um zu funktionieren.",
|
||||||
"enableProxyDescription": "Dieser Proxy wird keinen Effekt auf Monitor-Anfragen haben, bis er aktiviert ist. Du kannst ihn temporär von allen Monitoren nach Aktivierungsstatus deaktivieren.",
|
"enableProxyDescription": "Dieser Proxy wird keinen Effekt auf Monitor-Anfragen haben, bis er aktiviert ist. Du kannst ihn temporär von allen Monitoren nach Aktivierungsstatus deaktivieren.",
|
||||||
"setAsDefaultProxyDescription": "Dieser Proxy wird standardmässig für alle neuen Monitore aktiviert sein. Du kannst den Proxy immer noch für jeden Monitor einzeln deaktivieren.",
|
"setAsDefaultProxyDescription": "Dieser Proxy wird standardmässig für alle neuen Monitore aktiviert sein. Du kannst den Proxy immer noch für jeden Monitor einzeln deaktivieren.",
|
||||||
"Certificate Chain": "Zertifikatskette",
|
"Certificate Chain": "Zertifikatskette",
|
||||||
|
@ -815,5 +815,25 @@
|
||||||
"Badge Preview": "Badge Vorschau",
|
"Badge Preview": "Badge Vorschau",
|
||||||
"tailscalePingWarning": "Um den Tailscale Ping Monitor nutzen zu können, musst du Uptime Kuma ohne Docker installieren und den Tailscale Client auf dem Server installieren.",
|
"tailscalePingWarning": "Um den Tailscale Ping Monitor nutzen zu können, musst du Uptime Kuma ohne Docker installieren und den Tailscale Client auf dem Server installieren.",
|
||||||
"Server URL should not contain the nfty topic": "Die Server-URL sollte das nfty-Thema nicht enthalten",
|
"Server URL should not contain the nfty topic": "Die Server-URL sollte das nfty-Thema nicht enthalten",
|
||||||
"pushDeerServerDescription": "Leer lassen, um den offiziellen Server zu verwenden"
|
"pushDeerServerDescription": "Leer lassen um den offiziellen Server zu verwenden",
|
||||||
|
"FlashDuty Severity": "Schweregrad",
|
||||||
|
"nostrSender": "Privater Schlüssel des Absenders (nsec)",
|
||||||
|
"nostrRecipientsHelp": "npub-Format, eine pro Zeile",
|
||||||
|
"noOrBadCertificate": "Kein/schlechtes Zertifikat",
|
||||||
|
"wayToGetFlashDutyKey": "Gehe zu Channel -> (Wähle einen Channel) -> Integrationen -> Neue Integration hinzufügen', füge ein 'Custom Event' hinzu, um eine Push-Adresse zu erhalten, und kopiere den Integrationsschlüssel in die Adresse. Für weitere Informationen besuche bitte",
|
||||||
|
"nostrRelays": "Nostr relays",
|
||||||
|
"nostrRelaysHelp": "Eine Relay-URL pro Zeile",
|
||||||
|
"nostrRecipients": "Öffentliche Schlüssel des Empfängers (npub)",
|
||||||
|
"gamedigGuessPort": "Gamedig: Guess Port",
|
||||||
|
"Request Timeout": "Zeitüberschreitung der Anfrage",
|
||||||
|
"styleElapsedTimeShowNoLine": "Anzeigen (keine Zeile)",
|
||||||
|
"styleElapsedTimeShowWithLine": "Anzeigen (mit Zeile)",
|
||||||
|
"Select": "Auswählen",
|
||||||
|
"selectedMonitorCount": "Ausgewählt: {0}",
|
||||||
|
"PushDeer Server": "PushDeer Server",
|
||||||
|
"showCertificateExpiry": "Ablauf des Zertifikats anzeigen",
|
||||||
|
"gamedigGuessPortDescription": "Der vom Valve Server Query Protocol verwendete Port kann sich vom Port des Clients unterscheiden. Versuche dies, wenn der Monitor keine Verbindung zum Server herstellen kann.",
|
||||||
|
"timeoutAfter": "Zeitüberschreitung nach {0} Sekunden",
|
||||||
|
"styleElapsedTime": "Verstrichene Zeit unter der Prüfintervallleiste",
|
||||||
|
"Check/Uncheck": "Aktivieren/Deaktivieren"
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,10 +109,10 @@
|
||||||
"Last Result": "Letztes Ergebnis",
|
"Last Result": "Letztes Ergebnis",
|
||||||
"pauseMonitorMsg": "Bist du sicher, dass du den Monitor pausieren möchtest?",
|
"pauseMonitorMsg": "Bist du sicher, dass du den Monitor pausieren möchtest?",
|
||||||
"clearEventsMsg": "Bist du sicher, dass du alle Ereignisse für diesen Monitor löschen möchtest?",
|
"clearEventsMsg": "Bist du sicher, dass du alle Ereignisse für diesen Monitor löschen möchtest?",
|
||||||
"clearHeartbeatsMsg": "Bist du sicher, dass du alle Statistiken für diesen Monitor löschen möchtest?",
|
"clearHeartbeatsMsg": "Bist du sicher, dass du alle Prüfintervalle für diesen Monitor löschen möchtest?",
|
||||||
"Clear Data": "Lösche Daten",
|
"Clear Data": "Lösche Daten",
|
||||||
"Events": "Ereignisse",
|
"Events": "Ereignisse",
|
||||||
"Heartbeats": "Statistiken",
|
"Heartbeats": "Prüfintervalle",
|
||||||
"confirmClearStatisticsMsg": "Bist du dir sicher, dass du ALLE Statistiken löschen möchtest?",
|
"confirmClearStatisticsMsg": "Bist du dir sicher, dass du ALLE Statistiken löschen möchtest?",
|
||||||
"Create your admin account": "Erstelle dein Admin-Konto",
|
"Create your admin account": "Erstelle dein Admin-Konto",
|
||||||
"Repeat Password": "Passwort erneut eingeben",
|
"Repeat Password": "Passwort erneut eingeben",
|
||||||
|
@ -385,7 +385,7 @@
|
||||||
"enabled": "Aktiviert",
|
"enabled": "Aktiviert",
|
||||||
"setAsDefault": "Als Standard setzen",
|
"setAsDefault": "Als Standard setzen",
|
||||||
"deleteProxyMsg": "Bist du sicher, dass du diesen Proxy für alle Monitore löschen willst?",
|
"deleteProxyMsg": "Bist du sicher, dass du diesen Proxy für alle Monitore löschen willst?",
|
||||||
"proxyDescription": "Proxies müssen einem Monitor zugewiesen werden, um zu funktionieren.",
|
"proxyDescription": "Proxys müssen einem Monitor zugewiesen werden, um zu funktionieren.",
|
||||||
"enableProxyDescription": "Dieser Proxy wird keinen Effekt auf Monitor-Anfragen haben, bis er aktiviert ist. Du kannst ihn temporär von allen Monitoren nach Aktivierungsstatus deaktivieren.",
|
"enableProxyDescription": "Dieser Proxy wird keinen Effekt auf Monitor-Anfragen haben, bis er aktiviert ist. Du kannst ihn temporär von allen Monitoren nach Aktivierungsstatus deaktivieren.",
|
||||||
"setAsDefaultProxyDescription": "Dieser Proxy wird standardmäßig für alle neuen Monitore aktiviert sein. Du kannst den Proxy immer noch für jeden Monitor einzeln deaktivieren.",
|
"setAsDefaultProxyDescription": "Dieser Proxy wird standardmäßig für alle neuen Monitore aktiviert sein. Du kannst den Proxy immer noch für jeden Monitor einzeln deaktivieren.",
|
||||||
"Certificate Chain": "Zertifikatskette",
|
"Certificate Chain": "Zertifikatskette",
|
||||||
|
@ -818,5 +818,25 @@
|
||||||
"jsonQueryDescription": "Führe eine JSON-Abfrage gegen die Antwort durch und prüfe den erwarteten Wert (der Rückgabewert wird zum Vergleich in eine Zeichenkette umgewandelt). Auf <a href='https://jsonata.org/'>jsonata.org</a> findest du die Dokumentation zur Abfragesprache. <a href='https://try.jsonata.org/'>Hier</a> kannst du Abfragen üben.",
|
"jsonQueryDescription": "Führe eine JSON-Abfrage gegen die Antwort durch und prüfe den erwarteten Wert (der Rückgabewert wird zum Vergleich in eine Zeichenkette umgewandelt). Auf <a href='https://jsonata.org/'>jsonata.org</a> findest du die Dokumentation zur Abfragesprache. <a href='https://try.jsonata.org/'>Hier</a> kannst du Abfragen üben.",
|
||||||
"tailscalePingWarning": "Um den Tailscale Ping Monitor nutzen zu können, musst du Uptime Kuma ohne Docker installieren und den Tailscale Client auf dem Server installieren.",
|
"tailscalePingWarning": "Um den Tailscale Ping Monitor nutzen zu können, musst du Uptime Kuma ohne Docker installieren und den Tailscale Client auf dem Server installieren.",
|
||||||
"Server URL should not contain the nfty topic": "Die Server-URL sollte das nfty-Thema nicht enthalten",
|
"Server URL should not contain the nfty topic": "Die Server-URL sollte das nfty-Thema nicht enthalten",
|
||||||
"pushDeerServerDescription": "Leer lassen, um den offiziellen Server zu verwenden"
|
"pushDeerServerDescription": "Leer lassen um den offiziellen Server zu verwenden",
|
||||||
|
"FlashDuty Severity": "Schweregrad",
|
||||||
|
"nostrRelays": "Nostr relays",
|
||||||
|
"gamedigGuessPort": "Gamedig: Guess Port",
|
||||||
|
"Request Timeout": "Zeitüberschreitung der Anfrage",
|
||||||
|
"styleElapsedTimeShowNoLine": "Anzeigen (keine Zeile)",
|
||||||
|
"Select": "Auswählen",
|
||||||
|
"selectedMonitorCount": "Ausgewählt: {0}",
|
||||||
|
"PushDeer Server": "PushDeer Server",
|
||||||
|
"nostrRelaysHelp": "Eine Relay-URL pro Zeile",
|
||||||
|
"nostrSender": "Privater Schlüssel des Absenders (nsec)",
|
||||||
|
"gamedigGuessPortDescription": "Der vom Valve Server Query Protocol verwendete Port kann sich vom Port des Clients unterscheiden. Versuche dies, wenn der Monitor keine Verbindung zum Server herstellen kann.",
|
||||||
|
"wayToGetFlashDutyKey": "Gehe zu Channel -> (Wähle einen Channel) -> Integrationen -> Neue Integration hinzufügen', füge ein 'Custom Event' hinzu, um eine Push-Adresse zu erhalten, und kopiere den Integrationsschlüssel in die Adresse. Für weitere Informationen besuche bitte",
|
||||||
|
"timeoutAfter": "Zeitüberschreitung nach {0} Sekunden",
|
||||||
|
"styleElapsedTimeShowWithLine": "Anzeigen (mit Zeile)",
|
||||||
|
"styleElapsedTime": "Verstrichene Zeit unter der Prüfintervallleiste",
|
||||||
|
"Check/Uncheck": "Aktivieren/Deaktivieren",
|
||||||
|
"nostrRecipients": "Öffentliche Schlüssel des Empfängers (npub)",
|
||||||
|
"nostrRecipientsHelp": "npub-Format, eine pro Zeile",
|
||||||
|
"showCertificateExpiry": "Ablauf des Zertifikats anzeigen",
|
||||||
|
"noOrBadCertificate": "Kein/schlechtes Zertifikat"
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,7 +159,7 @@
|
||||||
"Show URI": "Mostra URI",
|
"Show URI": "Mostra URI",
|
||||||
"Tags": "Etichette",
|
"Tags": "Etichette",
|
||||||
"Add New below or Select...": "Aggiungi oppure scegli…",
|
"Add New below or Select...": "Aggiungi oppure scegli…",
|
||||||
"Tag with this name already exist.": "Un'etichetta con questo nome già esiste.",
|
"Tag with this name already exist.": "Un'etichetta con questo nome esiste già.",
|
||||||
"Tag with this value already exist.": "Un'etichetta con questo valore già esiste.",
|
"Tag with this value already exist.": "Un'etichetta con questo valore già esiste.",
|
||||||
"color": "colore",
|
"color": "colore",
|
||||||
"value (optional)": "descrizione (opzionale)",
|
"value (optional)": "descrizione (opzionale)",
|
||||||
|
@ -213,7 +213,7 @@
|
||||||
"smtpBCC": "CCn",
|
"smtpBCC": "CCn",
|
||||||
"discord": "Discord",
|
"discord": "Discord",
|
||||||
"Discord Webhook URL": "URL Webhook di Discord",
|
"Discord Webhook URL": "URL Webhook di Discord",
|
||||||
"wayToGetDiscordURL": "È possibile recuperarlo da Impostazioni server -> Integrazioni -> Creare Webhook",
|
"wayToGetDiscordURL": "Puoi ottenerlo andando su Impostazioni server -> Integrazioni -> Visualizza webhook -> Nuovo webhook",
|
||||||
"Bot Display Name": "Nome del Bot",
|
"Bot Display Name": "Nome del Bot",
|
||||||
"Prefix Custom Message": "Prefisso per il messaggio personalizzato",
|
"Prefix Custom Message": "Prefisso per il messaggio personalizzato",
|
||||||
"Hello @everyone is...": "Ciao a {'@'}everyone …",
|
"Hello @everyone is...": "Ciao a {'@'}everyone …",
|
||||||
|
@ -384,7 +384,7 @@
|
||||||
"resendDisabled": "Reinvio disabilitato",
|
"resendDisabled": "Reinvio disabilitato",
|
||||||
"Resend Notification if Down X times consequently": "Reinvia la notifica se Down X volte di seguito",
|
"Resend Notification if Down X times consequently": "Reinvia la notifica se Down X volte di seguito",
|
||||||
"Add New Status Page": "Aggiungi nuova pagina di stato",
|
"Add New Status Page": "Aggiungi nuova pagina di stato",
|
||||||
"webhookAdditionalHeadersDesc": "Imposta gli header aggiuntivi inviati nel webhook.",
|
"webhookAdditionalHeadersDesc": "Imposta intestazioni aggiuntive inviate con il webhook. Ogni intestazione deve essere definita come chiave/valore JSON.",
|
||||||
"topicExplanation": "MQTT topic da controllare",
|
"topicExplanation": "MQTT topic da controllare",
|
||||||
"successMessage": "Messaggio con successo",
|
"successMessage": "Messaggio con successo",
|
||||||
"successMessageExplanation": "Messaggio MQTT considerato come successo",
|
"successMessageExplanation": "Messaggio MQTT considerato come successo",
|
||||||
|
@ -417,5 +417,196 @@
|
||||||
"Affected Monitors": "Monitoraggi interessati",
|
"Affected Monitors": "Monitoraggi interessati",
|
||||||
"Pick Affected Monitors...": "Seleziona i monitoraggi interessati…",
|
"Pick Affected Monitors...": "Seleziona i monitoraggi interessati…",
|
||||||
"Valid": "Valido",
|
"Valid": "Valido",
|
||||||
"Certificate Expiry Notification": "Notifica scadenza certificato"
|
"Certificate Expiry Notification": "Notifica scadenza certificato",
|
||||||
|
"styleElapsedTimeShowWithLine": "Mostra (con linea)",
|
||||||
|
"webhookBodyPresetOption": "Predefinito - {0}",
|
||||||
|
"webhookBodyCustomOption": "Corpo personalizzato",
|
||||||
|
"topic": "Topic",
|
||||||
|
"selectedMonitorCount": "Selezionato: {0}",
|
||||||
|
"Check/Uncheck": "Seleziona/Deseleziona",
|
||||||
|
"Proxies": "Proxy",
|
||||||
|
"Stop": "Fermare",
|
||||||
|
"startOrEndWithOnly": "Inizia o termina solo con {0}",
|
||||||
|
"No consecutive dashes": "Nessun trattino consecutivo",
|
||||||
|
"HTTP Basic Auth": "Autenticazione di base HTTP",
|
||||||
|
"Reverse Proxy": "Proxy inverso",
|
||||||
|
"Backup": "Backup",
|
||||||
|
"About": "Di",
|
||||||
|
"wayToGetCloudflaredURL": "(Scarica cloudflared da {0})",
|
||||||
|
"cloudflareWebsite": "Sito web di Cloudflare",
|
||||||
|
"Message:": "Messaggio:",
|
||||||
|
"Don't know how to get the token? Please read the guide:": "Non sai come ottenere il token? Si prega di leggere la guida:",
|
||||||
|
"Trust Proxy": "Proxy di fiducia",
|
||||||
|
"Other Software": "Altro Software",
|
||||||
|
"For example: nginx, Apache and Traefik.": "Ad esempio: nginx, Apache e Traefik.",
|
||||||
|
"Please read": "Si prega di leggere",
|
||||||
|
"Subject:": "Soggetto:",
|
||||||
|
"Valid To:": "Valido per:",
|
||||||
|
"Days Remaining:": "Giorni rimanenti:",
|
||||||
|
"Issuer:": "Emittente",
|
||||||
|
"Fingerprint:": "Impronta digitale:",
|
||||||
|
"No status pages": "Nessuna pagina di stato",
|
||||||
|
"Domain Name Expiry Notification": "Notifica di scadenza del nome di dominio",
|
||||||
|
"Date Created": "Data di creazione",
|
||||||
|
"Slug": "Slug",
|
||||||
|
"Show Powered By": "Mostra Alimentato da",
|
||||||
|
"Domain Names": "Nomi di dominio",
|
||||||
|
"signedInDispDisabled": "Autenticazione disabilitata.",
|
||||||
|
"RadiusSecret": "Radius Segreto",
|
||||||
|
"RadiusCalledStationId": "Identificativo della stazione chiamata",
|
||||||
|
"RadiusCallingStationId": "Id stazione chiamante",
|
||||||
|
"RadiusCallingStationIdDescription": "Identificativo del dispositivo chiamante",
|
||||||
|
"API Username": "Nome utente dell'API",
|
||||||
|
"API Key": "Chiave dell'API",
|
||||||
|
"Show update if available": "Mostra aggiornamento se disponibile",
|
||||||
|
"RadiusSecretDescription": "Segreto condiviso tra client e server",
|
||||||
|
"Also check beta release": "Controlla anche la versione beta",
|
||||||
|
"Check how to config it for WebSocket": "Controlla come configurarlo per WebSocket",
|
||||||
|
"Steam Game Server": "Server di gioco Steam",
|
||||||
|
"Most likely causes:": "Cause più probabili:",
|
||||||
|
"The resource is no longer available.": "La risorsa non è più disponibile.",
|
||||||
|
"What you can try:": "Cosa puoi provare:",
|
||||||
|
"Retype the address.": "Ridigita l'indirizzo.",
|
||||||
|
"Go back to the previous page.": "Torna alla pagina precedente.",
|
||||||
|
"Coming Soon": "Prossimamente",
|
||||||
|
"Connection String": "Stringa di connessione",
|
||||||
|
"Query": "Richiesta",
|
||||||
|
"settingsCertificateExpiry": "Scadenza certificato TLS",
|
||||||
|
"deleteDockerHostMsg": "Sei sicuro di voler eliminare questo host docker per tutti i monitor?",
|
||||||
|
"tcp": "TCP / HTTP",
|
||||||
|
"Docker Container": "Contenitore Docker",
|
||||||
|
"Container Name / ID": "Nome/ID contenitore",
|
||||||
|
"Docker Host": "Host Docker",
|
||||||
|
"Docker Hosts": "Host Docker",
|
||||||
|
"Domain": "Dominio",
|
||||||
|
"Workstation": "Postazione di lavoro",
|
||||||
|
"Packet Size": "Dimensione del pacchetto",
|
||||||
|
"Setup Docker Host": "Configurare l'host Docker",
|
||||||
|
"telegramSendSilently": "Invia silenziosamente",
|
||||||
|
"telegramSendSilentlyDescription": "Invia il messaggio in silenzio. Gli utenti riceveranno una notifica senza audio.",
|
||||||
|
"telegramProtectContent": "Proteggi inoltro/salvataggio",
|
||||||
|
"disableCloudflaredNoAuthMsg": "Sei in modalità No Auth, non è richiesta una password.",
|
||||||
|
"wayToGetLineNotifyToken": "Puoi ottenere un token di accesso da {0}",
|
||||||
|
"Examples": "Esempi",
|
||||||
|
"Long-Lived Access Token": "Token di accesso di lunga durata",
|
||||||
|
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Il token di accesso di lunga durata può essere creato facendo clic sul nome del tuo profilo (in basso a sinistra) e scorrendo verso il basso, quindi fai clic su Crea token. ",
|
||||||
|
"Notification Service": "Servizio di notifica",
|
||||||
|
"default: notify all devices": "default: notifica a tutti i dispositivi",
|
||||||
|
"Automations can optionally be triggered in Home Assistant:": "Le automazioni possono essere facoltativamente attivate in Home Assistant:",
|
||||||
|
"Trigger type:": "Tipo di attivazione:",
|
||||||
|
"Event type:": "Tipo di evento:",
|
||||||
|
"Event data:": "Dati dell'evento:",
|
||||||
|
"Then choose an action, for example switch the scene to where an RGB light is red.": "Quindi scegli un'azione, ad esempio cambia la scena in cui una luce RGB è rossa.",
|
||||||
|
"Frontend Version": "Versione front-end",
|
||||||
|
"Frontend Version do not match backend version!": "La versione del frontend non corrisponde alla versione del backend!",
|
||||||
|
"backupOutdatedWarning": "Deprecato: poiché sono state aggiunte molte funzionalità e questa funzionalità di backup è un po' trascurata, non può generare o ripristinare un backup completo.",
|
||||||
|
"backupRecommend": "Eseguire invece il backup diretto del volume o della cartella dei dati (./data/).",
|
||||||
|
"Optional": "Opzionale",
|
||||||
|
"sameAsServerTimezone": "Uguale al fuso orario del server",
|
||||||
|
"startDateTime": "Data/ora di inizio",
|
||||||
|
"endDateTime": "Data/ora di fine",
|
||||||
|
"cronExpression": "Espressione Cron",
|
||||||
|
"cronSchedule": "Programma: ",
|
||||||
|
"recurringInterval": "Intervallo",
|
||||||
|
"Recurring": "Ricorrente",
|
||||||
|
"strategyManual": "Attivo/Inattivo manualmente",
|
||||||
|
"warningTimezone": "Sta usando il fuso orario del server",
|
||||||
|
"weekdayShortMon": "Lun",
|
||||||
|
"weekdayShortTue": "Mar",
|
||||||
|
"weekdayShortWed": "Mer",
|
||||||
|
"weekdayShortThu": "Gio",
|
||||||
|
"weekdayShortSat": "Sab",
|
||||||
|
"weekdayShortSun": "Dom",
|
||||||
|
"dayOfWeek": "Giorno della settimana",
|
||||||
|
"dayOfMonth": "Giorno del mese",
|
||||||
|
"lastDay": "Ultimo giorno",
|
||||||
|
"lastDay1": "Ultimo giorno del mese",
|
||||||
|
"lastDay3": "3° ultimo giorno del mese",
|
||||||
|
"lastDay4": "4° ultimo giorno del mese",
|
||||||
|
"No Maintenance": "Nessuna manutenzione",
|
||||||
|
"pauseMaintenanceMsg": "Sei sicuro di voler mettere in pausa?",
|
||||||
|
"maintenanceStatus-inactive": "Inattivo",
|
||||||
|
"maintenanceStatus-scheduled": "Programmato",
|
||||||
|
"maintenanceStatus-ended": "Conclusa",
|
||||||
|
"maintenanceStatus-unknown": "Sconosciuto",
|
||||||
|
"Display Timezone": "Mostra fuso orario",
|
||||||
|
"Server Timezone": "Fuso orario del server",
|
||||||
|
"statusPageMaintenanceEndDate": "Fine",
|
||||||
|
"IconUrl": "URL dell'icona",
|
||||||
|
"Enable DNS Cache": "Abilita la cache DNS per i monitor HTTP(s).",
|
||||||
|
"Enable": "Abilitare",
|
||||||
|
"Disable": "Disattivare",
|
||||||
|
"chromeExecutableAutoDetect": "Trovato automaticamente",
|
||||||
|
"dnsCacheDescription": "Potrebbe non funzionare in alcuni ambienti IPv6, disabilitalo in caso di problemi.",
|
||||||
|
"Single Maintenance Window": "Singola finestra di manutenzione",
|
||||||
|
"Maintenance Time Window of a Day": "Finestra temporale di manutenzione di un giorno",
|
||||||
|
"Effective Date Range": "Intervallo di date effettivo (facoltativo)",
|
||||||
|
"Schedule Maintenance": "Pianificare la manutenzione",
|
||||||
|
"Edit Maintenance": "Modifica Manutenzione",
|
||||||
|
"Date and Time": "Data e ora",
|
||||||
|
"DateTime Range": "Intervallo DataOra",
|
||||||
|
"loadingError": "Impossibile recuperare i dati, riprova più tardi.",
|
||||||
|
"plugin": "Plug-in | Plugin",
|
||||||
|
"install": "Installare",
|
||||||
|
"installing": "Installazione",
|
||||||
|
"uninstall": "Disinstalla",
|
||||||
|
"confirmUninstallPlugin": "Sei sicuro di voler disinstallare questo plugin?",
|
||||||
|
"notificationRegional": "Regionale",
|
||||||
|
"Clone": "Clone",
|
||||||
|
"cloneOf": "Clone di {0}",
|
||||||
|
"wayToGetZohoCliqURL": "Puoi scoprire come creare un URL webhook {0}.",
|
||||||
|
"dataRetentionTimeError": "Il periodo di conservazione deve essere pari o superiore a 0",
|
||||||
|
"infiniteRetention": "Impostare su 0 per la conservazione infinita.",
|
||||||
|
"enableGRPCTls": "Consenti l'invio di richieste gRPC con connessione TLS",
|
||||||
|
"grpcMethodDescription": "Il nome del metodo viene convertito nel formato cammelCase come sayHello, check, ecc.",
|
||||||
|
"styleElapsedTimeShowNoLine": "Mostra (nessuna riga)",
|
||||||
|
"Add New Tag": "Aggiungi nuova etichetta",
|
||||||
|
"webhookCustomBodyDesc": "Definire un corpo HTTP personalizzato per la richiesta. Le variabili modello {msg}, {heartbeat}, {monitor} sono accettate.",
|
||||||
|
"Select": "Selezionare",
|
||||||
|
"Accept characters:": "Accetta caratteri:",
|
||||||
|
"The slug is already taken. Please choose another slug.": "La lumaca è già slug. Scegli un'altra slug.",
|
||||||
|
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "La connessione corrente potrebbe andare persa se ti stai connettendo tramite Cloudflare Tunnel. Sei sicuro di volerlo fermare? Digita la tua password attuale per confermarla.",
|
||||||
|
"Footer Text": "Testo piè di pagina",
|
||||||
|
"signedInDisp": "Accesso eseguito come {0}",
|
||||||
|
"RadiusCalledStationIdDescription": "Identificativo del dispositivo chiamato",
|
||||||
|
"Clone Monitor": "Monitoraggio clonazione",
|
||||||
|
"styleElapsedTime": "Tempo trascorso sotto la barra del battito cardiaco",
|
||||||
|
"enableProxyDescription": "Questo proxy non avrà effetto sulle richieste di monitoraggio fino a quando non viene attivato. È possibile controllare la disabilitazione temporanea del proxy da tutti i monitor in base allo stato di attivazione.",
|
||||||
|
"Using a Reverse Proxy?": "Utilizzo di un proxy inverso?",
|
||||||
|
"There might be a typing error in the address.": "Potrebbe esserci un errore di battitura nell'indirizzo.",
|
||||||
|
"certificationExpiryDescription": "HTTPS monitora la notifica di attivazione quando il certificato TLS scade tra:",
|
||||||
|
"tailscalePingWarning": "Per utilizzare il monitor Tailscale Ping, è necessario installare Uptime Kuma senza Docker e installare anche il client Tailscale sul server.",
|
||||||
|
"telegramMessageThreadID": "(Facoltativo) ID thread messaggio",
|
||||||
|
"telegramMessageThreadIDDescription": "Facoltativo Identificatore univoco per il thread del messaggio di destinazione (argomento) del forum; solo per i supergruppi del forum",
|
||||||
|
"telegramProtectContentDescription": "Se abilitato, i messaggi del bot in Telegram saranno protetti dall'inoltro e dal salvataggio.",
|
||||||
|
"trustProxyDescription": "Fidati delle intestazioni 'X-Forwarded-*'. Se vuoi ottenere l'IP client corretto e il tuo Uptime Kuma è dietro un proxy come Nginx o Apache, dovresti abilitarlo.",
|
||||||
|
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Un elenco di servizi di notifica è disponibile in Home Assistant in \"Strumenti per sviluppatori> Servizi\" cerca \"notifica\" per trovare il nome del tuo dispositivo/telefono.",
|
||||||
|
"invalidCronExpression": "Espressione Cron non valida: {0}",
|
||||||
|
"lastDay2": "2° ultimo giorno del mese",
|
||||||
|
"maintenanceStatus-under-maintenance": "In manutenzione",
|
||||||
|
"chromeExecutable": "Cromo/cromo eseguibile",
|
||||||
|
"chromeExecutableDescription": "Per gli utenti Docker, se Chromium non è ancora installato, potrebbero essere necessari alcuni minuti per l'installazione e la visualizzazione del risultato del test. Richiede 1 GB di spazio su disco.",
|
||||||
|
"uninstalling": "Disinstallazione",
|
||||||
|
"confirmDeleteTagMsg": "Sei sicuro di voler eliminare questo tag? I monitor associati a questo tag non verranno eliminati.",
|
||||||
|
"Request Timeout": "Richiedi timeout",
|
||||||
|
"timeoutAfter": "Timeout dopo {0} secondi",
|
||||||
|
"Resend Notification if Down X times consecutively": "Invia di nuovo la notifica se giù X volte consecutivamente",
|
||||||
|
"Proxy": "Proxy",
|
||||||
|
"or": "o",
|
||||||
|
"statusPageRefreshIn": "Aggiorna tra: {0}",
|
||||||
|
"HTTP Headers": "Intestazioni HTTP",
|
||||||
|
"Custom": "Personalizzato",
|
||||||
|
"Connection Type": "Tipo di connessione",
|
||||||
|
"Docker Daemon": "Deamon Docker",
|
||||||
|
"socket": "Socket",
|
||||||
|
"Home Assistant URL": "URL dell'assistente domestico",
|
||||||
|
"weekdayShortFri": "Ven",
|
||||||
|
"Home": "Accoglienza",
|
||||||
|
"Invert Keyword": "Inverti parola chiave",
|
||||||
|
"filterActive": "Attiva",
|
||||||
|
"filterActivePaused": "In pausa",
|
||||||
|
"Cannot connect to the socket server": "Impossibile connettersi al server socket",
|
||||||
|
"Reconnecting...": "Riconnessione...",
|
||||||
|
"Expected Value": "Valore atteso",
|
||||||
|
"Json Query": "Query Json"
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
"Delete": "Удалить",
|
"Delete": "Удалить",
|
||||||
"Current": "Текущий",
|
"Current": "Текущий",
|
||||||
"Uptime": "Аптайм",
|
"Uptime": "Аптайм",
|
||||||
"Cert Exp.": "Сертификат истекает",
|
"Cert Exp.": "Сертификат ист.",
|
||||||
"day": "день | дней",
|
"day": "день | дней",
|
||||||
"-day": "-дней",
|
"-day": "-дней",
|
||||||
"hour": "час",
|
"hour": "час",
|
||||||
|
@ -542,7 +542,7 @@
|
||||||
"Container Name / ID": "Название контейнера / ID",
|
"Container Name / ID": "Название контейнера / ID",
|
||||||
"Docker Host": "Хост Docker",
|
"Docker Host": "Хост Docker",
|
||||||
"Docker Hosts": "Хосты Docker",
|
"Docker Hosts": "Хосты Docker",
|
||||||
"ntfy Topic": "тема ntfy",
|
"ntfy Topic": "Тема ntfy",
|
||||||
"Domain": "Домен",
|
"Domain": "Домен",
|
||||||
"Workstation": "Рабочая станция",
|
"Workstation": "Рабочая станция",
|
||||||
"disableCloudflaredNoAuthMsg": "Вы находитесь в режиме без авторизации, пароль не требуется.",
|
"disableCloudflaredNoAuthMsg": "Вы находитесь в режиме без авторизации, пароль не требуется.",
|
||||||
|
@ -639,7 +639,7 @@
|
||||||
"Server Timezone": "Часовой пояс сервера",
|
"Server Timezone": "Часовой пояс сервера",
|
||||||
"statusPageMaintenanceEndDate": "Конец",
|
"statusPageMaintenanceEndDate": "Конец",
|
||||||
"IconUrl": "URL иконки",
|
"IconUrl": "URL иконки",
|
||||||
"Enable DNS Cache": "Включить DNS кэш",
|
"Enable DNS Cache": "Включить DNS кэш для мониторов HTTP(S)",
|
||||||
"Enable": "Включить",
|
"Enable": "Включить",
|
||||||
"Disable": "Отключить",
|
"Disable": "Отключить",
|
||||||
"Single Maintenance Window": "Единое окно техбслуживания",
|
"Single Maintenance Window": "Единое окно техбслуживания",
|
||||||
|
@ -825,5 +825,27 @@
|
||||||
"filterActive": "Активный",
|
"filterActive": "Активный",
|
||||||
"filterActivePaused": "На паузе",
|
"filterActivePaused": "На паузе",
|
||||||
"Invert Keyword": "Инвертировать ключевое слово",
|
"Invert Keyword": "Инвертировать ключевое слово",
|
||||||
"tailscalePingWarning": "Для того чтобы использовать монитор Tailscale Ping, необходимо установить Uptime Kuma без Docker, а также установить на сервер клиент Tailscale."
|
"tailscalePingWarning": "Для того чтобы использовать монитор Tailscale Ping, необходимо установить Uptime Kuma без Docker, а также установить на сервер клиент Tailscale.",
|
||||||
|
"PushDeer Server": "Сервер PushDeer",
|
||||||
|
"pushDeerServerDescription": "Оставьте пустым для использования официального сервера",
|
||||||
|
"showCertificateExpiry": "Показывать истекающий сертификат",
|
||||||
|
"Request Timeout": "Тайм-Аут запроса",
|
||||||
|
"timeoutAfter": "Тайм-Аут через {0} секунд",
|
||||||
|
"Select": "Выбрать",
|
||||||
|
"selectedMonitorCount": "Выбрано: {0}",
|
||||||
|
"Check/Uncheck": "Отметить/Снять",
|
||||||
|
"gamedigGuessPort": "Gamedig: Угадай порт",
|
||||||
|
"styleElapsedTime": "Прошедшее время под полосой частоты опроса",
|
||||||
|
"noOrBadCertificate": "Отсутствие сертификата",
|
||||||
|
"gamedigGuessPortDescription": "Порт, используемый протоколом Valve Server Query Protocol, может отличаться от порта клиента. Попробуйте это сделать, если монитор не может подключиться к серверу.",
|
||||||
|
"nostrSender": "Закрытый ключ отправителя (nsec)",
|
||||||
|
"wayToGetFlashDutyKey": "Вы можете перейти на страницу \"Канал\" -> (Выберите канал) -> \"Интеграции\" -> \"Добавить новую страницу интеграции\", добавить \"Пользовательское событие\", чтобы получить push-адрес, скопировать ключ интеграции в адрес. Для получения дополнительной информации, пожалуйста, посетите",
|
||||||
|
"styleElapsedTimeShowNoLine": "Показать (Без линии)",
|
||||||
|
"styleElapsedTimeShowWithLine": "Показать (С линией)",
|
||||||
|
"Server URL should not contain the nfty topic": "URL сервера не должен содержать тему nfty",
|
||||||
|
"nostrRecipients": "Открытые ключи получателей (npub)",
|
||||||
|
"nostrRecipientsHelp": "формат npub, по одному в строке",
|
||||||
|
"FlashDuty Severity": "Серьёзность",
|
||||||
|
"nostrRelays": "Реле Nostr",
|
||||||
|
"nostrRelaysHelp": "Один URL-адрес ретрансляции в каждой строке"
|
||||||
}
|
}
|
||||||
|
|
|
@ -833,5 +833,10 @@
|
||||||
"Check/Uncheck": "İşaretle/İşareti Kaldır",
|
"Check/Uncheck": "İşaretle/İşareti Kaldır",
|
||||||
"pushDeerServerDescription": "Resmi sunucuyu kullanmak için boş bırakın",
|
"pushDeerServerDescription": "Resmi sunucuyu kullanmak için boş bırakın",
|
||||||
"Request Timeout": "İstek zaman aşımına uğradı",
|
"Request Timeout": "İstek zaman aşımına uğradı",
|
||||||
"timeoutAfter": "{0} saniye sonra zaman aşımı"
|
"timeoutAfter": "{0} saniye sonra zaman aşımı",
|
||||||
|
"gamedigGuessPort": "Gamedig: Ziyaretçi Portu",
|
||||||
|
"gamedigGuessPortDescription": "Valve Server Sorgu Protokolü tarafından kullanılan bağlantı noktası, istemci bağlantı noktasından farklı olabilir. Monitör sunucunuza bağlanamıyorsa bunu deneyin.",
|
||||||
|
"styleElapsedTimeShowNoLine": "Göster (Satır Yok)",
|
||||||
|
"styleElapsedTime": "Kalp atışı çubuğunun altında geçen süre",
|
||||||
|
"styleElapsedTimeShowWithLine": "Göster (Satır ile birlikte)"
|
||||||
}
|
}
|
||||||
|
|
|
@ -835,5 +835,10 @@
|
||||||
"pushDeerServerDescription": "留空则使用官方服务器",
|
"pushDeerServerDescription": "留空则使用官方服务器",
|
||||||
"PushDeer Server": "PushDeer 服务器",
|
"PushDeer Server": "PushDeer 服务器",
|
||||||
"timeoutAfter": "{0} 秒后超时",
|
"timeoutAfter": "{0} 秒后超时",
|
||||||
"Request Timeout": "请求超时"
|
"Request Timeout": "请求超时",
|
||||||
|
"gamedigGuessPortDescription": "Valve 服务器查询协议使用的端口可能与客户端端口不同。如果监控器无法连接到服务器,请尝试此方法。",
|
||||||
|
"gamedigGuessPort": "Gamedig: 自动检测端口号",
|
||||||
|
"styleElapsedTimeShowWithLine": "显示(带连接线)",
|
||||||
|
"styleElapsedTimeShowNoLine": "显示(不带连接线)",
|
||||||
|
"styleElapsedTime": "在监控项详情的心跳栏下显示起止时间"
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,17 +23,17 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-floating mt-3">
|
<div class="form-floating mt-3">
|
||||||
<input id="floatingInput" v-model="username" type="text" class="form-control" placeholder="Username" required data-cy="username-input">
|
<input id="floatingInput" v-model="username" type="text" class="form-control" :placeholder="$t('Username')" required data-cy="username-input">
|
||||||
<label for="floatingInput">{{ $t("Username") }}</label>
|
<label for="floatingInput">{{ $t("Username") }}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-floating mt-3">
|
<div class="form-floating mt-3">
|
||||||
<input id="floatingPassword" v-model="password" type="password" class="form-control" placeholder="Password" required data-cy="password-input">
|
<input id="floatingPassword" v-model="password" type="password" class="form-control" :placeholder="$t('Password')" required data-cy="password-input">
|
||||||
<label for="floatingPassword">{{ $t("Password") }}</label>
|
<label for="floatingPassword">{{ $t("Password") }}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-floating mt-3">
|
<div class="form-floating mt-3">
|
||||||
<input id="repeat" v-model="repeatPassword" type="password" class="form-control" placeholder="Repeat Password" required data-cy="password-repeat-input">
|
<input id="repeat" v-model="repeatPassword" type="password" class="form-control" :placeholder="$t('Repeat Password')" required data-cy="password-repeat-input">
|
||||||
<label for="repeat">{{ $t("Repeat Password") }}</label>
|
<label for="repeat">{{ $t("Repeat Password") }}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue