Merge remote-tracking branch 'origin/master'

This commit is contained in:
Louis Lam 2022-01-05 16:26:03 +08:00
commit c5fe3a64c2
19 changed files with 758 additions and 74 deletions

View file

@ -37,7 +37,7 @@ const github = require("@actions/github");
owner: issue.owner,
repo: issue.repo,
issue_number: issue.number,
body: `@${username}: Hello! :wave:\n\nThis issue is being automatically closed because it does not follow the issue template. Please DO NOT open a blank issue`
body: `@${username}: Hello! :wave:\n\nThis issue is being automatically closed because it does not follow the issue template. Please DO NOT open a blank issue.`
});
// Close the issue

View file

@ -0,0 +1,47 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { setting } = require("../util-server");
const { getMonitorRelativeURL } = require("../../src/util");
const { DOWN, UP } = require("../../src/util");
class GoogleChat extends NotificationProvider {
name = "Google Chat";
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully.";
try {
// Google Chat message formatting: https://developers.google.com/chat/api/guides/message-formats/basic
let textMsg = ''
if (heartbeatJSON && heartbeatJSON.status === UP) {
textMsg = `✅ Application is back online\n`;
} else if (heartbeatJSON && heartbeatJSON.status === DOWN) {
textMsg = `🔴 Application went down\n`;
}
if (monitorJSON && monitorJSON.name) {
textMsg += `*${monitorJSON.name}*\n`;
}
textMsg += `${msg}`;
const baseURL = await setting("primaryBaseURL");
if (baseURL) {
textMsg += `\n${baseURL + getMonitorRelativeURL(monitorJSON.id)}`;
}
const data = {
"text": textMsg,
};
await axios.post(notification.googleChatWebhookURL, data);
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = GoogleChat;

View file

@ -15,6 +15,14 @@ class SMTP extends NotificationProvider {
tls: {
rejectUnauthorized: notification.smtpIgnoreTLSError || false,
},
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

View file

@ -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;

View file

@ -25,6 +25,8 @@ 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 {
@ -62,6 +64,8 @@ class Notification {
new Bark(),
new SerwerSMS(),
new Stackfield(),
new WeCom(),
new GoogleChat()
];
for (let item of list) {

View file

@ -313,6 +313,20 @@ textarea.form-control {
opacity: 0;
}
.slide-fade-up-enter-active {
transition: all 0.2s $easing-in;
}
.slide-fade-up-leave-active {
transition: all 0.2s $easing-in;
}
.slide-fade-up-enter-from,
.slide-fade-up-leave-to {
transform: translateY(-50px);
opacity: 0;
}
.monitor-list {
&.scrollbar {
min-height: calc(100vh - 240px);

View file

@ -0,0 +1,67 @@
<template>
<div class="my-3 py-3">
<h5 @click="isOpen = !isOpen">
<div
class="
w-50
d-flex
justify-content-between
align-items-center
pe-2
"
>
<span class="pb-2">{{ heading }}</span>
<font-awesome-icon
icon="chevron-down"
class="animated"
:class="{ open: isOpen }"
/>
</div>
</h5>
<transition name="slide-fade-up">
<div v-if="isOpen" class="mt-3">
<slot></slot>
</div>
</transition>
</div>
</template>
<script>
export default {
props: {
heading: {
type: String,
default: "",
},
defaultOpen: {
type: Boolean,
default: false,
},
},
data() {
return {
isOpen: this.defaultOpen,
};
},
};
</script>
<style lang="scss" scoped>
@import "../assets/vars.scss";
h5:after {
content: "";
display: block;
width: 50%;
padding-top: 8px;
border-bottom: 1px solid $dark-border-color;
}
.open {
transform: rotate(180deg);
}
.animated {
transition: all 0.2s $easing-in;
}
</style>

View file

@ -0,0 +1,13 @@
<template>
<div class="mb-3">
<label for="google-chat-webhook-url" class="form-label">{{ $t("Webhook URL") }}<span style="color: red;"><sup>*</sup></span></label>
<input id="google-chat-webhook-url" v-model="$parent.notification.googleChatWebhookURL" type="text" class="form-control" required>
<div class="form-text">
<span style="color: red;"><sup>*</sup></span>{{ $t("Required") }}
<i18n-t tag="p" keypath="aboutWebhooks" style="margin-top: 8px;">
<a href="https://developers.google.com/chat/how-tos/webhooks" target="_blank">https://developers.google.com/chat/how-tos/webhooks</a>
</i18n-t>
</div>
</div>
</template>

View file

@ -1,82 +1,117 @@
<template>
<div class="mb-3">
<label for="hostname" class="form-label">{{ $t("Hostname") }}</label>
<input id="hostname" v-model="$parent.notification.smtpHost" type="text" class="form-control" required>
</div>
<div class="mb-3">
<label for="port" class="form-label">{{ $t("Port") }}</label>
<input id="port" v-model="$parent.notification.smtpPort" type="number" class="form-control" required min="0" max="65535" step="1">
</div>
<div class="mb-3">
<label for="secure" class="form-label">{{ $t("Security") }}</label>
<select id="secure" v-model="$parent.notification.smtpSecure" class="form-select">
<option :value="false">{{ $t("secureOptionNone") }}</option>
<option :value="true">{{ $t("secureOptionTLS") }}</option>
</select>
</div>
<div class="mb-3">
<div class="form-check">
<input id="ignore-tls-error" v-model="$parent.notification.smtpIgnoreTLSError" class="form-check-input" type="checkbox" value="">
<label class="form-check-label" for="ignore-tls-error">
{{ $t("Ignore TLS Error") }}
</label>
<div>
<div class="mb-3">
<label for="hostname" class="form-label">{{ $t("Hostname") }}</label>
<input id="hostname" v-model="$parent.notification.smtpHost" type="text" class="form-control" required>
</div>
</div>
<div class="mb-3">
<label for="username" class="form-label">{{ $t("Username") }}</label>
<input id="username" v-model="$parent.notification.smtpUsername" type="text" class="form-control" autocomplete="false">
</div>
<div class="mb-3">
<label for="password" class="form-label">{{ $t("Password") }}</label>
<HiddenInput id="password" v-model="$parent.notification.smtpPassword" :required="false" autocomplete="one-time-code"></HiddenInput>
</div>
<div class="mb-3">
<label for="from-email" class="form-label">{{ $t("From Email") }}</label>
<input id="from-email" v-model="$parent.notification.smtpFrom" type="text" class="form-control" required autocomplete="false" placeholder="&quot;Uptime Kuma&quot; &lt;example@kuma.pet&gt;">
<div class="form-text">
<div class="mb-3">
<label for="port" class="form-label">{{ $t("Port") }}</label>
<input id="port" v-model="$parent.notification.smtpPort" type="number" class="form-control" required min="0" max="65535" step="1">
</div>
</div>
<div class="mb-3">
<label for="to-email" class="form-label">{{ $t("To Email") }}</label>
<input id="to-email" v-model="$parent.notification.smtpTo" type="text" class="form-control" autocomplete="false" placeholder="example2@kuma.pet, example3@kuma.pet" :required="!hasRecipient">
</div>
<div class="mb-3">
<label for="secure" class="form-label">{{ $t("Security") }}</label>
<select id="secure" v-model="$parent.notification.smtpSecure" class="form-select">
<option :value="false">{{ $t("secureOptionNone") }}</option>
<option :value="true">{{ $t("secureOptionTLS") }}</option>
</select>
</div>
<div class="mb-3">
<label for="to-cc" class="form-label">{{ $t("smtpCC") }}</label>
<input id="to-cc" v-model="$parent.notification.smtpCC" type="text" class="form-control" autocomplete="false" :required="!hasRecipient">
</div>
<div class="mb-3">
<div class="form-check">
<input id="ignore-tls-error" v-model="$parent.notification.smtpIgnoreTLSError" class="form-check-input" type="checkbox" value="">
<label class="form-check-label" for="ignore-tls-error">
{{ $t("Ignore TLS Error") }}
</label>
</div>
</div>
<div class="mb-3">
<label for="to-bcc" class="form-label">{{ $t("smtpBCC") }}</label>
<input id="to-bcc" v-model="$parent.notification.smtpBCC" type="text" class="form-control" autocomplete="false" :required="!hasRecipient">
</div>
<div class="mb-3">
<label for="username" class="form-label">{{ $t("Username") }}</label>
<input id="username" v-model="$parent.notification.smtpUsername" type="text" class="form-control" autocomplete="false">
</div>
<div class="mb-3">
<label for="subject-email" class="form-label">{{ $t("emailCustomSubject") }}</label>
<input id="subject-email" v-model="$parent.notification.customSubject" type="text" class="form-control" autocomplete="false" placeholder="">
<div v-pre class="form-text">
(leave blank for default one)<br />
{{NAME}}: Service Name<br />
{{HOSTNAME_OR_URL}}: Hostname or URL<br />
{{URL}}: URL<br />
{{STATUS}}: Status<br />
<div class="mb-3">
<label for="password" class="form-label">{{ $t("Password") }}</label>
<HiddenInput id="password" v-model="$parent.notification.smtpPassword" :required="false" autocomplete="one-time-code"></HiddenInput>
</div>
<div class="mb-3">
<label for="from-email" class="form-label">{{ $t("From Email") }}</label>
<input id="from-email" v-model="$parent.notification.smtpFrom" type="text" class="form-control" required autocomplete="false" placeholder="&quot;Uptime Kuma&quot; &lt;example@kuma.pet&gt;">
<div class="form-text">
</div>
</div>
<div class="mb-3">
<label for="to-email" class="form-label">{{ $t("To Email") }}</label>
<input id="to-email" v-model="$parent.notification.smtpTo" type="text" class="form-control" autocomplete="false" placeholder="example2@kuma.pet, example3@kuma.pet" :required="!hasRecipient">
</div>
<div class="mb-3">
<label for="to-cc" class="form-label">{{ $t("smtpCC") }}</label>
<input id="to-cc" v-model="$parent.notification.smtpCC" type="text" class="form-control" autocomplete="false" :required="!hasRecipient">
</div>
<div class="mb-3">
<label for="to-bcc" class="form-label">{{ $t("smtpBCC") }}</label>
<input id="to-bcc" v-model="$parent.notification.smtpBCC" type="text" class="form-control" autocomplete="false" :required="!hasRecipient">
</div>
<ToggleSection :heading="$t('smtpDkimSettings')">
<i18n-t tag="div" keypath="smtpDkimDesc" class="form-text mb-3">
<a href="https://nodemailer.com/dkim/" target="_blank">{{ $t("documentation") }}</a>
</i18n-t>
<div class="mb-3">
<label for="dkim-domain" class="form-label">{{ $t("smtpDkimDomain") }}</label>
<input id="dkim-domain" v-model="$parent.notification.smtpDkimDomain" type="text" class="form-control" autocomplete="false" placeholder="example.com">
</div>
<div class="mb-3">
<label for="dkim-key-selector" class="form-label">{{ $t("smtpDkimKeySelector") }}</label>
<input id="dkim-key-selector" v-model="$parent.notification.smtpDkimKeySelector" type="text" class="form-control" autocomplete="false" placeholder="2017">
</div>
<div class="mb-3">
<label for="dkim-private-key" class="form-label">{{ $t("smtpDkimPrivateKey") }}</label>
<textarea id="dkim-private-key" v-model="$parent.notification.smtpDkimPrivateKey" rows="5" type="text" class="form-control" autocomplete="false" placeholder="-----BEGIN PRIVATE KEY-----"></textarea>
</div>
<div class="mb-3">
<label for="dkim-hash-algo" class="form-label">{{ $t("smtpDkimHashAlgo") }}</label>
<input id="dkim-hash-algo" v-model="$parent.notification.smtpDkimHashAlgo" type="text" class="form-control" autocomplete="false" placeholder="sha256">
</div>
<div class="mb-3">
<label for="dkim-header-fields" class="form-label">{{ $t("smtpDkimheaderFieldNames") }}</label>
<input id="dkim-header-fields" v-model="$parent.notification.smtpDkimheaderFieldNames" type="text" class="form-control" autocomplete="false" placeholder="message-id:date:from:to">
</div>
<div class="mb-3">
<label for="dkim-skip-fields" class="form-label">{{ $t("smtpDkimskipFields") }}</label>
<input id="dkim-skip-fields" v-model="$parent.notification.smtpDkimskipFields" type="text" class="form-control" autocomplete="false" placeholder="message-id:date">
</div>
</ToggleSection>
<div class="mb-3">
<label for="subject-email" class="form-label">{{ $t("emailCustomSubject") }}</label>
<input id="subject-email" v-model="$parent.notification.customSubject" type="text" class="form-control" autocomplete="false" placeholder="">
<div v-pre class="form-text">
(leave blank for default one)<br />
{{NAME}}: Service Name<br />
{{HOSTNAME_OR_URL}}: Hostname or URL<br />
{{URL}}: URL<br />
{{STATUS}}: Status<br />
</div>
</div>
</div>
</template>
<script>
import HiddenInput from "../HiddenInput.vue";
import ToggleSection from "../ToggleSection.vue";
export default {
components: {
HiddenInput,
ToggleSection,
},
computed: {
hasRecipient() {

View file

@ -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>

View file

@ -1,4 +1,4 @@
import STMP from "./SMTP.vue"
import STMP from "./SMTP.vue";
import Telegram from "./Telegram.vue";
import Discord from "./Discord.vue";
import Webhook from "./Webhook.vue";
@ -24,6 +24,8 @@ import DingDing from "./DingDing.vue";
import Bark from "./Bark.vue";
import SerwerSMS from "./SerwerSMS.vue";
import Stackfield from './Stackfield.vue';
import WeCom from "./WeCom.vue";
import GoogleChat from "./GoogleChat.vue";
/**
* Manage all notification form.
@ -57,6 +59,8 @@ const NotificationFormList = {
"Bark": Bark,
"serwersms": SerwerSMS,
"stackfield": Stackfield,
}
"WeCom": WeCom,
"Google Chat (Google Workspace only)": GoogleChat
};
export default NotificationFormList
export default NotificationFormList;

View file

@ -126,6 +126,12 @@
<p>Bitte mit Vorsicht nutzen.</p>
</template>
<template v-else-if="$i18n.locale === 'sl-SI' ">
<p>Ali ste prepričani, da želite onemogočiti <strong>avtentikacijo</strong>?</p>
<p>Namenjen je <strong>nekomu, ki ima pred programom Uptime Kuma vklopljeno zunanje preverjanje pristnosti</strong>, na primer Cloudflare Access.</p>
<p>Uporabljajte previdno.</p>
</template>
<template v-else-if="$i18n.locale === 'sr' ">
<p>Да ли сте сигурни да желите да <strong>искључите аутентификацију</strong>?</p>
<p>То је за <strong>оне који имају додату аутентификацију</strong> испред Uptime Kuma као на пример Cloudflare Access.</p>

View file

@ -18,6 +18,7 @@ const languageList = {
"ja": "日本語",
"da-DK": "Danish (Danmark)",
"sr": "Српски",
"sl-SI": "Slovenščina",
"sr-latn": "Srpski",
"sv-SE": "Svenska",
"tr-TR": "Türkçe",

View file

@ -33,6 +33,7 @@ import {
faFile,
faAward,
faLink,
faChevronDown,
} from "@fortawesome/free-solid-svg-icons";
library.add(
@ -65,6 +66,7 @@ library.add(
faFile,
faAward,
faLink,
faChevronDown,
);
export { FontAwesomeIcon };

View file

@ -131,8 +131,8 @@ export default {
Events: "Събития",
Heartbeats: "Проверки",
"Auto Get": "Авт. попълване",
backupDescription: "Можете да архивирате всички монитори и всички известия в JSON файл.",
backupDescription2: "PS: Данни за история и събития не са включени.",
backupDescription: "Можете да архивирате всички монитори и всички известявания в JSON файл.",
backupDescription2: "PS: Имайте предвид, че данните за история и събития няма да бъдат включени.",
backupDescription3: "Чувствителни данни, като токен кодове за известяване, се съдържат в експортирания файл. Моля, бъдете внимателни с неговото съхранение.",
alertNoFile: "Моля, изберете файл за импортиране.",
alertWrongFileType: "Моля, изберете JSON файл.",
@ -200,7 +200,7 @@ export default {
"Primary Base URL": "Основен базов URL адрес",
"Push URL": "Генериран Push URL адрес",
needPushEvery: "Необходимо е да извършвате заявка към този URL адрес на всеки {0} секунди",
pushOptionalParams: "Допълнителни, но незадължителни параметри: {0}",
pushOptionalParams: "Допълнителни, но не задължителни параметри: {0}",
defaultNotificationName: "Моето {notification} известяване ({number})",
here: "тук",
Required: "Задължително поле",
@ -308,4 +308,56 @@ export default {
"Current User": "Текущ потребител",
recent: "Скорошни",
shrinkDatabaseDescription: "Инициира \"VACUUM\" за \"SQLite\" база данни. Ако Вашата база данни е създадена след версия 1.10.0, \"AUTO_VACUUM\" функцията е активна и това действие не нужно.",
Done: "Готово",
Info: "Информация",
Security: "Сигурност",
"Steam API Key": "Steam API ключ",
"Shrink Database": "Редуциране база данни",
"Pick a RR-Type...": "Изберете вида на ресурсния запис за мониторитане...",
"Pick Accepted Status Codes...": "Изберете статус кодове, които да се считат за успешен отговор...",
Default: "По подразбиране",
"HTTP Options": "HTTP Опции",
"Create Incident": "Създаване на инцидент",
Title: "Заглавие",
Content: "Съдържание",
Style: "Стил",
info: "информация",
warning: "предупреждение",
danger: "опасност",
primary: "основен",
light: "светъл",
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": "Добави един",
"No Monitors": "Няма монитори",
"Untitled Group": "Група без заглавие",
Services: "Услуги",
Discard: "Премахни",
Cancel: "Отмени",
"Powered by": "Създадено чрез",
serwersms: "SerwerSMS.pl",
serwersmsAPIUser: "API Потребителско име (вкл. webapi_ prefix)",
serwersmsAPIPassword: "API Парола",
serwersmsPhoneNumber: "Телефон номер",
serwersmsSenderName: "SMS Подател име (регистриран през клиентския портал)",
stackfield: "Stackfield",
smtpDkimSettings: "DKIM Настройки",
smtpDkimDesc: "Моля, вижте Nodemailer DKIM {0} за инструкции.",
documentation: "документация",
smtpDkimDomain: "Домейн",
smtpDkimKeySelector: "Селектор на ключ",
smtpDkimPrivateKey: "Частен ключ",
smtpDkimHashAlgo: "Хеш алгоритъм (по желание)",
smtpDkimheaderFieldNames: "Хедър ключове за подписване (по желание)",
smtpDkimskipFields: "Хедър ключове, които да не се подписват (по желание)",
};

View file

@ -339,7 +339,6 @@ export default {
"No monitors available.": "No monitors available.",
"Add one": "Add one",
"No Monitors": "No Monitors",
"Add one": "Add one",
"Untitled Group": "Untitled Group",
Services: "Services",
Discard: "Discard",
@ -352,4 +351,13 @@ export default {
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: "Domain Name",
smtpDkimKeySelector: "Key Selector",
smtpDkimPrivateKey: "Private Key",
smtpDkimHashAlgo: "Hash Algorithm (Optional)",
smtpDkimheaderFieldNames: "Header Keys to sign (Optional)",
smtpDkimskipFields: "Header Keys not to sign (Optional)",
};

View file

@ -207,7 +207,7 @@ export default {
"Discord Webhook URL": "Discord Webhook URL",
wayToGetDiscordURL: "Vous pouvez l'obtenir en allant dans 'Paramètres du Serveur' -> 'Intégrations' -> 'Créer un Webhook'",
"Bot Display Name": "Nom du bot (affiché)",
"Prefix Custom Message": "Prefix Custom Message",
"Prefix Custom Message": "Prefixe du message personnalisé",
"Hello @everyone is...": "Bonjour {'@'}everyone il...",
teams: "Microsoft Teams",
"Webhook URL": "Webhook URL",
@ -229,7 +229,7 @@ export default {
aboutWebhooks: "Plus d'informations sur les Webhooks ici : {0}",
aboutChannelName: "Mettez le nom du salon dans {0} dans 'Channel Name' si vous voulez bypass le salon Webhook. Ex : #autre-salon",
aboutKumaURL: "Si vous laissez l'URL d'Uptime Kuma vierge, elle redirigera vers la page du projet GitHub.",
emojiCheatSheet: "Emoji cheat sheet : {0}",
emojiCheatSheet: "Aide emoji : {0}",
"rocket.chat": "Rocket.chat",
pushover: "Pushover",
pushy: "Pushy",
@ -262,9 +262,9 @@ export default {
appriseInstalled: "Apprise est installé.",
appriseNotInstalled: "Apprise n'est pas installé. {0}",
"Access Token": "Access Token",
"Channel access token": "Channel access token",
"Line Developers Console": "Line Developers Console",
lineDevConsoleTo: "Line Developers Console - {0}",
"Channel access token": "Token d'accès au canal",
"Line Developers Console": "Ligne console de développeurs",
lineDevConsoleTo: "Ligne console de développeurs - {0}",
"Basic Settings": "Paramètres de base",
"User ID": "Identifiant utilisateur",
"Messaging API": "Messaging API",

View file

@ -351,4 +351,13 @@ export default {
serwersmsPhoneNumber: "Numero di Telefono",
serwersmsSenderName: "Nome del mittente SMS (registrato via portale cliente)",
stackfield: "Stackfield",
smtpDkimSettings: "Impostazioni DKIM",
smtpDkimDesc: "Fare riferimento a Nodemailer DKIM {0} per l'utilizzo.",
documentation: "documentazione",
smtpDkimDomain: "Dominio",
smtpDkimKeySelector: "Selettore Chiave",
smtpDkimPrivateKey: "Chiave Privata",
smtpDkimHashAlgo: "Algoritmo di hashing (opzionale)",
smtpDkimheaderFieldNames: "Campi Intestazione da firmare (opzionale)",
smtpDkimskipFields: "Campi Intestazione da non firmare (opzionale)",
};

355
src/languages/sl-SI.js Normal file
View file

@ -0,0 +1,355 @@
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",
ignoreTLSError: "Ignoriraj TLS/SSL napake za HTTPS spletne strani",
upsideDownModeDescription: "Negiraj status. Če je storitev dosegljiva je NEDOSEGLJIVA.",
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.",
notificationDescription: "Obvestila morajo biti dodeljena monitorju, da delujejo.",
keywordDescription: "Iskana ključna beseda v surovem HTML ali JSON odgovoru. Iskanje je občutljivo na začetnico.",
pauseDashboardHome: "Pavza",
deleteMonitorMsg: "Ste prepričani, da želite izbrisati ta monitor?",
deleteNotificationMsg: "Ste prepričani, da želite izbrisati to obvestilo za vse monitorje?",
resoverserverDescription: "Cloudflare je privzeti strežnik. DNS strežnik lahko spremenite kadarkoli.",
rrtypeDescription: "Izberite RR tip, ki ga želite spremljati",
pauseMonitorMsg: "Ste prepričani, da želite pavzirati?",
enableDefaultNotificationDescription: "To obvestilo bo kot privzeto omogočeno za vse nove monitorje. Še vedno ga lahko izključite posebej za vsak monitor.",
clearEventsMsg: "Ste prepričani da želite izbrisati vse dogodke tega monitorja?",
clearHeartbeatsMsg: "Ste prepričani da želite izbrisati vse srčne utripe tega monitorja?",
confirmClearStatisticsMsg: "Ste prepričani da želite izbrisati VSO statistiko?",
importHandleDescription: "Izberite 'Preskoči obstoječe', če želite preskočiti vsak monitor ali obvestilo z istim imenom. 'Prepiši' bo prepisal vse obstoječe monitorje in obvestila.",
confirmImportMsg: "Ste prepričani da želite uvoziti varnostno kopijo? Preverite da ste izbrali pravo opcijo za uvoz.",
twoFAVerifyLabel: "Prosimo vnesite žeton za potrditev 2FA:",
tokenValidSettingsMsg: "Žeton je veljaven! Sedaj lahko shranite 2FA nastavitev.",
confirmEnableTwoFAMsg: "Ste prepričani, da želite omogočiti 2FA?",
confirmDisableTwoFAMsg: "Ste prepričani, da želite onemogočiti 2FA?",
Settings: "Nastavitve",
Dashboard: "Nadzorna plošča",
"New Update": "Nova posodobitev",
Language: "Jezik",
Appearance: "Izgled",
Theme: "Teme",
General: "Splošno",
"Primary Base URL": "Primaren URL",
Version: "Različica",
"Check Update On GitHub": "Preveri posodobitev na GitHub-u",
List: "Seznam",
Add: "Dodaj",
"Add New Monitor": "Dodaj nov monitor",
"Quick Stats": "Hitro stanje",
Up: "Dosegljiv",
Down: "Nedosegljiv",
Pending: "Na čakanju",
Unknown: "Neznano",
Pause: "Pavza",
Name: "Ime",
Status: "Status",
DateTime: "DateTime",
Message: "Sporočilo",
"No important events": "Ni pomembnih dogodkov",
Resume: "Nadaljuj",
Edit: "Uredi",
Delete: "Izbriši",
Current: "Trenutno",
Uptime: "Uptime",
"Cert Exp.": "Potek certifikata",
days: "dni",
day: "dan",
"-day": "-dan",
hour: "ura",
"-hour": "-ura",
Response: "Odgovor",
Ping: "Ping",
"Monitor Type": "Tip monitorja",
Keyword: "Ključna beseda",
"Friendly Name": "Prijazno ime",
URL: "URL",
Hostname: "Hostname",
Port: "Vrata",
"Heartbeat Interval": "Interval srčnega utripa",
Retries: "Ponovni poskusi",
"Heartbeat Retry Interval": "Ponovni poskus srčnega utripa",
Advanced: "Napredno",
"Upside Down Mode": "Negiran način",
"Max. Redirects": "Max. preusmeritev",
"Accepted Status Codes": "Sprejete kode statusa",
"Push URL": "Push URL",
needPushEvery: "Pokliči ta URL vsakih {0} sekund.",
pushOptionalParams: "Dodatni parametri: {0}",
Save: "Shrani",
Notifications: "Obvestila",
"Not available, please setup.": "Ni na voljo, prosimo nastavite.",
"Setup Notification": "Nastavi obvestila",
Light: "Svetlo",
Dark: "Temno",
Auto: "Auto",
"Theme - Heartbeat Bar": "Tema - vrstica srčnega utripa",
Normal: "Normalna",
Bottom: "Spodaj",
None: "Brez",
Timezone: "Časovni pas",
"Search Engine Visibility": "Vidljivost v spletnih iskalnikih",
"Allow indexing": "Dovoli indeksiranje",
"Discourage search engines from indexing site": "Odvračaj spletne iskalnike od indeksiranja te strani",
"Change Password": "Zamenjaj geslo",
"Current Password": "Trenutno geslo",
"New Password": "Novo geslo",
"Repeat New Password": "Ponovi novo geslo",
"Update Password": "Posodobi geslo",
"Disable Auth": "Onemogoči auth",
"Enable Auth": "Omogoči auth",
Logout: "Odjava",
Leave: "Zapusti",
"I understand, please disable": "Razumem, prosim onemogočite",
Confirm: "Potrdi",
Yes: "Da",
No: "Ne",
Username: "Uporabniško ime",
Password: "Geslo",
"Remember me": "Zapomni si me",
Login: "Vpis",
"No Monitors, please": "Prosim, brez monitorjev",
"add one": "Dodaj enega",
"Notification Type": "Tip obvestila",
Email: "Email",
Test: "Test",
"Certificate Info": "Informacije certifikata",
"Resolver Server": "Strežnik za razreševanje",
"Resource Record Type": "Vrsta zapisa o viru",
"Last Result": "Zadnji rezultat",
"Create your admin account": "Ustvari administratorski račun",
"Repeat Password": "Ponovi geslo",
"Import Backup": "Uvozi varnostno kopijo",
"Export Backup": "Izvozi varnostno kopijo",
Export: "Izvozi",
Import: "Uvozi",
respTime: "Odzivni čas (ms)",
notAvailableShort: "N/A",
"Default enabled": "Privzeto omogočeno",
"Apply on all existing monitors": "Uporabi na vseh obstoječih monitorjih",
Create: "Ustvari",
"Clear Data": "Izbriši podatke",
Events: "Dogodki",
Heartbeats: "Srčni utripi",
"Auto Get": "Auto Get",
backupDescription: "Izvozite lahko vse monitorje in obvestila v JSON datoteko.",
backupDescription2: "Pomni: Zgodovina in podatki dogodkov niso vključeni.",
backupDescription3: "Občutljivi podatki, kot žetoni za obvestila so vlkjučeni v datoteko za izvoz; prosimo hranite na varnem.",
alertNoFile: "Izberite datoteko za Uvoz.",
alertWrongFileType: "Prosimo izberite JSON datoteko.",
"Clear all statistics": "Pobrišite vso statistiko",
"Skip existing": "Preskoči obstoječe",
Overwrite: "Prepiši",
Options: "Možnosti",
"Keep both": "Ohrani oboje",
"Verify Token": "Potrdi žeton",
"Setup 2FA": "Nastavi 2FA",
"Enable 2FA": "Omogoči 2FA",
"Disable 2FA": "Onemogoči 2FA",
"2FA Settings": "2FA nastavitve",
"Two Factor Authentication": "Preverjanje pristnosti z dvema dejavnikoma",
Active: "Aktivno",
Inactive: "Neaktivno",
Token: "Žeton",
"Show URI": "Prikaži URI",
Tags: "Značke",
"Add New below or Select...": "Dodaj novo spodaj ali izberi iz seznama...",
"Tag with this name already exist.": "Značka s tem imenom že obstaja.",
"Tag with this value already exist.": "Značka s to vrednostjo že obstaja.",
color: "barva",
"value (optional)": "vrednost (po želji)",
Gray: "Siva",
Red: "Rdeča",
Orange: "Oranžna",
Green: "Zelena",
Blue: "Modra",
Indigo: "Indigo",
Purple: "Vijolična",
Pink: "Roza",
"Search...": "Išči...",
"Avg. Ping": "Avg. Ping",
"Avg. Response": "Avg. odziv",
"Entry Page": "Vstopna stran",
statusPageNothing: "Nikjer nič... Dodajte skupino ali monitor.",
"No Services": "Ni storitev",
"All Systems Operational": "Vsi sistemi delujejo",
"Partially Degraded Service": "Delno poslabšana storitev",
"Degraded Service": "Poslabšana storitev",
"Add Group": "Dodaj skupino",
"Add a monitor": "Dodaj monitor",
"Edit Status Page": "Uredi statusno stran",
"Go to Dashboard": "Pojdi na nadzorno ploščo",
"Status Page": "Statusna stran",
defaultNotificationName: "Moje {notification} Obvestilo ({number})",
here: "tukaj",
Required: "Obvezno",
telegram: "Telegram",
"Bot Token": "Robotkov žetonček",
wayToGetTelegramToken: "Lahko dobiš žeton od {0}.",
"Chat ID": "ID pogovora",
supportTelegramChatID: "Direkten pogovor pomoči / Skupina / ID kanala",
wayToGetTelegramChatID: "Id lahko dobiš, če pošlješ sporočilo robotku in odpreš ta URL, da bi videl chat_id:",
"YOUR BOT TOKEN HERE": "ROBOTKOV ŽETON TUKAJ",
chatIDNotFound: "Ne najdem Chat Id-ja; prvo pošlji sporočilo robotku",
webhook: "Webhook",
"Post URL": "Post URL",
"Content Type": "Vrsta vsebine",
webhookJsonDesc: "{0} je v redu za vsak moderen HTTP strežnik, kot recimo Express.js",
webhookFormDataDesc: "{multipart} je v redu za PHP. JSON bo moral biti razčlenjen s {decodeFunction}",
smtp: "Email (SMTP)",
secureOptionNone: "Brez / STARTTLS (25, 587)",
secureOptionTLS: "TLS (465)",
"Ignore TLS Error": "Ignoriraj TLS napako",
"From Email": "Od Email",
emailCustomSubject: "Poljubna zadeva",
"To Email": "Za Email",
smtpCC: "CC",
smtpBCC: "BCC",
discord: "Discord",
"Discord Webhook URL": "Discord Webhook URL",
wayToGetDiscordURL: "To lahko dibiš v Server Settings -> Integrations -> Create Webhook",
"Bot Display Name": "Prikazno ime robotka",
"Prefix Custom Message": "Predpona poljubnega sporočila",
"Hello @everyone is...": "Pozdravljen {'@'}everyone je...",
teams: "Microsoft Teams",
"Webhook URL": "Webhook URL",
wayToGetTeamsURL: "Izvedi kako narediš webhook URL {0}.",
signal: "Signal",
Number: "Številka",
Recipients: "Prejemniki",
needSignalAPI: "Imeti moraš signal klienta z REST API.",
wayToCheckSignalURL: "Kako se to naredi, lahko preveriš na tem URL-ju:",
signalImportant: "POMEMBNO: Ne moreš mešati skupin in številk v prejemnikih!",
gotify: "Gotify",
"Application Token": "Žeton za aplikacijo",
"Server URL": "URL Strežnika",
Priority: "Prioriteta",
slack: "Slack",
"Icon Emoji": "Emoji ikona",
"Channel Name": "Ime kanala",
"Uptime Kuma URL": "Uptime Kuma URL",
aboutWebhooks: "Več o webhook-ih: {0}",
aboutChannelName: "Vnesi ime kanala na {0} Channel Name polje, če želiš preskočiti webhook kanal. npr.: #drug-kanal",
aboutKumaURL: "Če pustite polje Uptime Kuma URL prazno, bo nastavljeno privzeto na GitHub stran projekta.",
emojiCheatSheet: "Emoji plonk listek: {0}",
"rocket.chat": "Rocket.Chat",
pushover: "Pushover",
pushy: "Pushy",
octopush: "Octopush",
promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea",
apprise: "Apprise (podpira 50+ storitev za obveščevanje)",
pushbullet: "Pushbullet",
line: "Line Messenger",
mattermost: "Mattermost",
"User Key": "User Key",
Device: "Naprava",
"Message Title": "Naslov sporočila",
"Notification Sound": "Zvok obvestila",
"More info on:": "Več informacij na: {0}",
pushoverDesc1: "Prioriteta nujnosti (2) ima privzeto nastavitev 30 sekund časa med ponovni poskusi in poteče po 1 uri.",
pushoverDesc2: "Če želite pošiljati obvestila na različne naprave izpolnite polje 'Naprava'.",
"SMS Type": "Vrsta SMS-a",
octopushTypePremium: "Premium (hitro - priporočljivo za opozarjanje)",
octopushTypeLowCost: "Cenovno ugodno (počasno - včasih jih blokira operater)",
checkPrice: "preveri {0} cene:",
apiCredentials: "API poverilnice",
octopushLegacyHint: "Uporabljate legacy verzijo Octopush-a (2011-2020) ali novo verzijo?",
"Check octopush prices": "Preveri octopush cene {0}.",
octopushPhoneNumber: "Telefonska številka (npr.: +386031234567) ",
octopushSMSSender: "Ime SMS pošiljatelja: 3-11 alfanumeričnih znakov in presledki (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea Device ID",
"Apprise URL": "Apprise URL",
"Example:": "Primer: {0}",
"Read more:": "Preberi več: {0}",
"Status:": "Status: {0}",
"Read more": "Preberi več",
appriseInstalled: "Apprise je nameščen.",
appriseNotInstalled: "Apprise ni nameščen. {0}",
"Access Token": "Žeton za dostop",
"Channel access token": "Žeton za dostop do kanala",
"Line Developers Console": "Line Developers Console",
lineDevConsoleTo: "Line Developers Console - {0}",
"Basic Settings": "Osnovne nastavitve",
"User ID": "User ID",
"Messaging API": "Messaging API",
wayToGetLineChannelToken: "Prvo odpri {0}, ustvarite ponudnika in kanal (Messaging API), potem lahko žeton za dostop do kanala in ID uporabnika dobite iz zgoraj navedenih elementov menija.",
"Icon URL": "URL ikone",
aboutIconURL: "V razdelku \"URL ikone\" lahko zagotovite povezavo do slike, ki bo nadomestila privzeto sliko profila. Ne bo uporabljena, če je nastavljena ikona Emoji.",
aboutMattermostChannelName: "V razdelku \"URL ikone\" lahko zagotovite povezavo do slike, ki bo nadomestila privzeto sliko profila. Ne bo uporabljena, če je nastavljena ikona Emoji",
matrix: "Matrix",
promosmsTypeEco: "SMS ECO - poceni, vendar počasen in pogosto preobremenjen. Omejeno samo na poljske prejemnike.",
promosmsTypeFlash: "SMS FLASH - sporočilo se samodejno prikaže v napravi prejemnika. Omejeno samo na poljske prejemnike.",
promosmsTypeFull: "SMS FULL - Premium raven SMS, Uporabite lahko svoje ime pošiljatelja (najprej morate registrirati ime). Zanesljivo za opozorila.",
promosmsTypeSpeed: "SMS SPEED - Najvišja prednost v sistemu. Zelo hitro in zanesljivo, vendar drago (približno dvakratnik cene SMS FULL)..",
promosmsPhoneNumber: "Telefonska številka (za poljskega prejemnika Lahko preskočite področne oznake",
promosmsSMSSender: "Ime pošiljatelja SMS : vnaprej registrirano ime ali eno od privzetih: SMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
matrixHomeserverURL: "Homeserver URL (z http(s):// in vrata po želji)",
"Internal Room Id": "Interni ID sobe",
matrixDesc1: "Notranji ID sobe lahko poiščete v naprednem razdelku nastavitev sobe v odjemalcu Matrix. Izgledati mora kot !QMdRCpUIfLwsfjxye6:home.server",
matrixDesc2: "Zelo priporočljivo je, da ustvarite novega uporabnika in ne uporabljate svojega žetona za dostop uporabnika Matrix, saj bo omogočil popoln dostop do vašega računa in vseh sob, ki ste se jim pridružili. Namesto tega ustvarite novega uporabnika in ga povabite le v sobo, v kateri želite prejemati obvestila. Token dostopa lahko dobite tako, da zaženete {0}",
Method: "Metoda",
Body: "Telo",
Headers: "Glave",
PushUrl: "Push URL",
HeadersInvalidFormat: "Glave zahtevka niso veljavni JSON: ",
BodyInvalidFormat: "Telo zahteve ni veljaven JSON: ",
"Monitor History": "Zgodovina",
clearDataOlderThan: "Ohrani zgodovino {0} dni.",
PasswordsDoNotMatch: "Gesli se ne ujemata.",
records: "vnosi",
"One record": "En vnos",
steamApiKeyDescription: "Za spremljanje igralnega strežnika Steam potrebujete ključ spletnega vmesnika Steam. Ključ API lahko registrirate tukaj: ",
"Current User": "Trenuten uporabnik",
recent: "Nedavno",
Done: "Zaključi",
Info: "Info",
Security: "Varnost",
"Steam API Key": "Steam API Key",
"Shrink Database": "Stisni bazo",
"Pick a RR-Type...": "Izberi RR tip...",
"Pick Accepted Status Codes...": "Izbiranje sprejetih kod stanja...",
Default: "Privzeto",
"HTTP Options": "HTTP možnosti",
"Create Incident": "Ustvari incident",
Title: "Naslov",
Content: "Vsebina",
Style: "Stil",
info: "info",
warning: "opozorilo",
danger: "nevarnost",
primary: "primarno",
light: "svetlo",
dark: "temno",
Post: "Objavi",
"Please input title and content": "Vnesi naslov in vsebino",
Created: "Ustvarjeno",
"Last Updated": "Nazadnje posodobljeno",
Unpin: "Odpni",
"Switch to Light Theme": "Preklopi na svetlo temo",
"Switch to Dark Theme": "Preklopi na temno temo",
"Show Tags": "Prikaži značke",
"Hide Tags": "Skrij značke",
Description: "Opis",
"No monitors available.": "Nobenega monitorja ni na voljo.",
"Add one": "Dodaj enega",
"No Monitors": "Ni monitorjev",
"Add one": "Dodaj enega",
"Untitled Group": "Skupina brez imena",
Services: "Storitve",
Discard: "zavrzi",
Cancel: "Prekliči",
"Powered by": "Powered by",
shrinkDatabaseDescription: "Sprožitev podatkovne zbirke VACUUM za SQLite. Če je vaša zbirka podatkov ustvarjena po različici 1.10.0, je funkcija AUTO_VACUUM že omogočena in ta ukrep ni potreben.",
serwersms: "SerwerSMS.pl",
serwersmsAPIUser: "API uporabniško ime (vključno z webapi_ prefix)",
serwersmsAPIPassword: "API geslo",
serwersmsPhoneNumber: "Telefonska številka",
serwersmsSenderName: "Ime SMS pošiljatelja (registrirani prek portala za stranke)",
"stackfield": "Stackfield",
};