mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-08-10 20:08:34 +08:00
fix: resolve conflict
This commit is contained in:
@@ -22,6 +22,19 @@ textarea.form-control {
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
.bg-maintenance {
|
||||
color: white !important;
|
||||
background-color: $maintenance !important;
|
||||
}
|
||||
|
||||
.bg-dark {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.text-maintenance {
|
||||
color: $maintenance !important;
|
||||
}
|
||||
|
||||
.list-group {
|
||||
border-radius: 0.75rem;
|
||||
|
||||
@@ -107,6 +120,19 @@ optgroup {
|
||||
}
|
||||
}
|
||||
|
||||
.btn-normal {
|
||||
$bg-color: #F5F5F5;
|
||||
|
||||
background-color: $bg-color;
|
||||
border-color: $bg-color;
|
||||
|
||||
&:hover {
|
||||
$hover-color: darken($bg-color, 3%);
|
||||
background-color: $hover-color;
|
||||
border-color: $hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-warning {
|
||||
color: white;
|
||||
|
||||
@@ -256,6 +282,20 @@ optgroup {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.btn-normal {
|
||||
$bg-color: $dark-header-bg;
|
||||
|
||||
color: $dark-font-color;
|
||||
background-color: $bg-color;
|
||||
border-color: $bg-color;
|
||||
|
||||
&:hover {
|
||||
$hover-color: darken($bg-color, 3%);
|
||||
background-color: $hover-color;
|
||||
border-color: $hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-warning {
|
||||
color: $dark-font-color2;
|
||||
|
||||
@@ -323,6 +363,7 @@ optgroup {
|
||||
&.bg-info,
|
||||
&.bg-warning,
|
||||
&.bg-danger,
|
||||
&.bg-maintenance,
|
||||
&.bg-light {
|
||||
color: $dark-font-color2;
|
||||
}
|
||||
@@ -382,7 +423,7 @@ optgroup {
|
||||
overflow-y: auto;
|
||||
height: calc(100% - 65px);
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 770px) {
|
||||
&.scrollbar {
|
||||
height: calc(100% - 40px);
|
||||
@@ -403,7 +444,6 @@ optgroup {
|
||||
.info {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
@@ -1,6 +1,7 @@
|
||||
$primary: #5cdd8b;
|
||||
$danger: #dc3545;
|
||||
$warning: #f8a306;
|
||||
$maintenance: #1747f5;
|
||||
$link-color: #111;
|
||||
$border-radius: 50rem;
|
||||
|
||||
|
39
src/assets/vue-datepicker.scss
Normal file
39
src/assets/vue-datepicker.scss
Normal file
@@ -0,0 +1,39 @@
|
||||
@import "@vuepic/vue-datepicker/dist/main.css";
|
||||
@import "vars.scss";
|
||||
|
||||
// Must use #{ }
|
||||
// Remark: https://stackoverflow.com/questions/50202991/unable-to-set-scss-variable-to-css-variable
|
||||
.dp__theme_dark {
|
||||
--dp-background-color: #{$dark-bg2};
|
||||
--dp-text-color: #{$dark-font-color};
|
||||
--dp-hover-color: #484848;
|
||||
--dp-hover-text-color: #ffffff;
|
||||
--dp-hover-icon-color: #959595;
|
||||
--dp-primary-color: #{#5cdd8b};
|
||||
--dp-primary-text-color: #ffffff;
|
||||
--dp-secondary-color: #494949;
|
||||
--dp-border-color: #{$dark-border-color};
|
||||
--dp-menu-border-color: #2d2d2d;
|
||||
--dp-border-color-hover: #{$dark-border-color};
|
||||
--dp-disabled-color: #212121;
|
||||
--dp-scroll-bar-background: #212121;
|
||||
--dp-scroll-bar-color: #484848;
|
||||
--dp-success-color: #{$primary};
|
||||
--dp-success-color-disabled: #428f59;
|
||||
--dp-icon-color: #959595;
|
||||
--dp-danger-color: #e53935;
|
||||
--dp-highlight-color: rgba(0, 92, 178, 0.2);
|
||||
}
|
||||
|
||||
.dp__input {
|
||||
border-radius: $border-radius;
|
||||
}
|
||||
|
||||
// Fix: Full width of text input when using "inline textInput inlineWithInput" mode
|
||||
.dp__main > div[aria-label="Datepicker input"] {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.dp__main > div[aria-label="Datepicker menu"]:nth-child(2) {
|
||||
margin-top: 20px;
|
||||
}
|
@@ -3,14 +3,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import dayjs from "dayjs";
|
||||
import relativeTime from "dayjs/plugin/relativeTime";
|
||||
import timezone from "dayjs/plugin/timezone"; // dependent on utc plugin
|
||||
import utc from "dayjs/plugin/utc";
|
||||
dayjs.extend(utc);
|
||||
dayjs.extend(timezone);
|
||||
dayjs.extend(relativeTime);
|
||||
|
||||
export default {
|
||||
props: {
|
||||
/** Value of date time */
|
||||
|
@@ -30,7 +30,8 @@
|
||||
{{ $t("Examples") }}:
|
||||
<ul>
|
||||
<li>/var/run/docker.sock</li>
|
||||
<li>tcp://localhost:2375</li>
|
||||
<li>http://localhost:2375</li>
|
||||
<li>https://localhost:2376 (TLS)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
v-for="(beat, index) in shortBeatList"
|
||||
:key="index"
|
||||
class="beat"
|
||||
:class="{ 'empty' : (beat === 0), 'down' : (beat.status === 0), 'pending' : (beat.status === 2) }"
|
||||
:class="{ 'empty' : (beat === 0), 'down' : (beat.status === 0), 'pending' : (beat.status === 2), 'maintenance' : (beat.status === 3) }"
|
||||
:style="beatStyle"
|
||||
:title="getBeatTitle(beat)"
|
||||
/>
|
||||
@@ -211,6 +211,10 @@ export default {
|
||||
background-color: $warning;
|
||||
}
|
||||
|
||||
&.maintenance {
|
||||
background-color: $maintenance;
|
||||
}
|
||||
|
||||
&:not(.empty):hover {
|
||||
transition: all ease-in-out 0.15s;
|
||||
opacity: 0.8;
|
||||
|
@@ -42,7 +42,7 @@ export default {
|
||||
/** Should the field auto complete */
|
||||
autocomplete: {
|
||||
type: String,
|
||||
default: undefined,
|
||||
default: "new-password",
|
||||
},
|
||||
/** Is the input required? */
|
||||
required: {
|
||||
|
@@ -54,6 +54,15 @@ export default {
|
||||
tokenRequired: false,
|
||||
};
|
||||
},
|
||||
|
||||
mounted() {
|
||||
document.title += " - Login";
|
||||
},
|
||||
|
||||
unmounted() {
|
||||
document.title = document.title.replace(" - Login", "");
|
||||
},
|
||||
|
||||
methods: {
|
||||
/** Submit the user details and attempt to log in */
|
||||
submit() {
|
||||
|
44
src/components/MaintenanceTime.vue
Normal file
44
src/components/MaintenanceTime.vue
Normal file
@@ -0,0 +1,44 @@
|
||||
<template>
|
||||
<div>
|
||||
<div v-if="maintenance.strategy === 'manual'" class="timeslot">
|
||||
{{ $t("Manual") }}
|
||||
</div>
|
||||
<div v-else-if="maintenance.timeslotList.length > 0" class="timeslot">
|
||||
{{ maintenance.timeslotList[0].startDateServerTimezone }}
|
||||
<span class="to">-</span>
|
||||
{{ maintenance.timeslotList[0].endDateServerTimezone }}
|
||||
(UTC{{ maintenance.timeslotList[0].serverTimezoneOffset }})
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
maintenance: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.timeslot {
|
||||
margin-top: 5px;
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
border-radius: 20px;
|
||||
padding: 0 10px;
|
||||
|
||||
.to {
|
||||
margin: 0 6px;
|
||||
}
|
||||
|
||||
.dark & {
|
||||
color: white;
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
}
|
||||
</style>
|
@@ -16,18 +16,14 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
<script lang="js">
|
||||
import { BarController, BarElement, Chart, Filler, LinearScale, LineController, LineElement, PointElement, TimeScale, Tooltip } from "chart.js";
|
||||
import "chartjs-adapter-dayjs";
|
||||
import dayjs from "dayjs";
|
||||
import timezone from "dayjs/plugin/timezone";
|
||||
import utc from "dayjs/plugin/utc";
|
||||
import { LineChart } from "vue-chart-3";
|
||||
import { useToast } from "vue-toastification";
|
||||
import { DOWN, log } from "../util.ts";
|
||||
import { DOWN, PENDING, MAINTENANCE, log } from "../util.ts";
|
||||
|
||||
dayjs.extend(utc);
|
||||
dayjs.extend(timezone);
|
||||
const toast = useToast();
|
||||
|
||||
Chart.register(LineController, BarController, LineElement, PointElement, TimeScale, BarElement, LinearScale, Tooltip, Filler);
|
||||
@@ -163,7 +159,8 @@ export default {
|
||||
},
|
||||
chartData() {
|
||||
let pingData = []; // Ping Data for Line Chart, y-axis contains ping time
|
||||
let downData = []; // Down Data for Bar Chart, y-axis is 1 if target is down, 0 if target is up
|
||||
let downData = []; // Down Data for Bar Chart, y-axis is 1 if target is down (red color), under maintenance (blue color) or pending (orange color), 0 if target is up
|
||||
let colorData = []; // Color Data for Bar Chart
|
||||
|
||||
let heartbeatList = this.heartbeatList ||
|
||||
(this.monitorId in this.$root.heartbeatList && this.$root.heartbeatList[this.monitorId]) ||
|
||||
@@ -185,8 +182,9 @@ export default {
|
||||
});
|
||||
downData.push({
|
||||
x,
|
||||
y: beat.status === DOWN ? 1 : 0,
|
||||
y: (beat.status === DOWN || beat.status === MAINTENANCE || beat.status === PENDING) ? 1 : 0,
|
||||
});
|
||||
colorData.push((beat.status === MAINTENANCE) ? "rgba(23,71,245,0.41)" : ((beat.status === PENDING) ? "rgba(245,182,23,0.41)" : "#DC354568"));
|
||||
});
|
||||
|
||||
return {
|
||||
@@ -205,7 +203,7 @@ export default {
|
||||
type: "bar",
|
||||
data: downData,
|
||||
borderColor: "#00000000",
|
||||
backgroundColor: "#DC354568",
|
||||
backgroundColor: colorData,
|
||||
yAxisID: "y1",
|
||||
barThickness: "flex",
|
||||
barPercentage: 1,
|
||||
|
@@ -44,6 +44,7 @@
|
||||
:href="monitor.element.url"
|
||||
class="item-name"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{{ monitor.element.name }}
|
||||
</a>
|
||||
@@ -224,4 +225,8 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
.bg-maintenance {
|
||||
background-color: $maintenance;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@@ -26,6 +26,10 @@ export default {
|
||||
return "warning";
|
||||
}
|
||||
|
||||
if (this.status === 3) {
|
||||
return "maintenance";
|
||||
}
|
||||
|
||||
return "secondary";
|
||||
},
|
||||
|
||||
@@ -42,6 +46,10 @@ export default {
|
||||
return this.$t("Pending");
|
||||
}
|
||||
|
||||
if (this.status === 3) {
|
||||
return this.$t("statusMaintenance");
|
||||
}
|
||||
|
||||
return this.$t("Unknown");
|
||||
},
|
||||
},
|
||||
|
@@ -25,6 +25,10 @@ export default {
|
||||
computed: {
|
||||
uptime() {
|
||||
|
||||
if (this.type === "maintenance") {
|
||||
return this.$t("statusMaintenance");
|
||||
}
|
||||
|
||||
let key = this.monitor.id + "_" + this.type;
|
||||
|
||||
if (this.$root.uptimeList[key] !== undefined) {
|
||||
@@ -35,6 +39,10 @@ export default {
|
||||
},
|
||||
|
||||
color() {
|
||||
if (this.type === "maintenance" || this.monitor.maintenance) {
|
||||
return "maintenance";
|
||||
}
|
||||
|
||||
if (this.lastHeartBeat.status === 0) {
|
||||
return "danger";
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@
|
||||
</i18n-t>
|
||||
<input id="clicksendsms-login" v-model="$parent.notification.clicksendsmsLogin" type="text" class="form-control" required>
|
||||
<label for="clicksendsms-key" class="form-label">{{ $t("API Key") }}</label>
|
||||
<HiddenInput id="clicksendsms-key" v-model="$parent.notification.clicksendsmsPassword" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="clicksendsms-key" v-model="$parent.notification.clicksendsmsPassword" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="form-text">
|
||||
|
12
src/components/notifications/FreeMobile.vue
Normal file
12
src/components/notifications/FreeMobile.vue
Normal file
@@ -0,0 +1,12 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="freemobileUser" class="form-label">{{ $t("Free Mobile User Identifier") }}<span style="color: red;"><sup>*</sup></span></label>
|
||||
<input id="freemobileUser" v-model="$parent.notification.freemobileUser" type="text" class="form-control" required>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="freemobilePass" class="form-label">{{ $t("Free Mobile API Key") }}<span style="color: red;"><sup>*</sup></span></label>
|
||||
<input id="freemobilePass" v-model="$parent.notification.freemobilePass" type="text" class="form-control" required>
|
||||
</div>
|
||||
</template>
|
||||
|
30
src/components/notifications/GoAlert.vue
Normal file
30
src/components/notifications/GoAlert.vue
Normal file
@@ -0,0 +1,30 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="goalert-base-url" class="form-label">{{ $t("Base URL") }}</label>
|
||||
<div class="input-group mb-3">
|
||||
<input id="goalert-base-url" v-model="$parent.notification.goAlertBaseURL" type="text" class="form-control" required>
|
||||
</div>
|
||||
<i18n-t tag="div" keypath="goAlertInfo" class="form-text">
|
||||
<a href="https://goalert.me" target="_blank">https://goalert.me</a>
|
||||
</i18n-t>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="goalert-token" class="form-label">{{ $t("Token") }}</label>
|
||||
<HiddenInput id="goalert-token" v-model="$parent.notification.goAlertToken" autocomplete="new-password" :required="true"></HiddenInput>
|
||||
|
||||
<div class="form-text">
|
||||
{{ $t("goAlertIntegrationKeyInfo") }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import HiddenInput from "../HiddenInput.vue";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
HiddenInput,
|
||||
},
|
||||
};
|
||||
</script>
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="gotify-application-token" class="form-label">{{ $t("Application Token") }}</label>
|
||||
<HiddenInput id="gotify-application-token" v-model="$parent.notification.gotifyapplicationToken" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="gotify-application-token" v-model="$parent.notification.gotifyapplicationToken" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="gotify-server-url" class="form-label">{{ $t("Server URL") }}</label>
|
||||
|
@@ -18,7 +18,7 @@
|
||||
<input id="notificationService" v-model="$parent.notification.notificationService" type="text" :placeholder="$t('default: notify all devices')" class="form-control">
|
||||
|
||||
<div class="form-text">
|
||||
<p>{{ $t("A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.") }}</p>
|
||||
<p>{{ $t('A list of Notification Services can be found in Home Assistant under "Developer Tools > Services" search for "notification" to find your device/phone name.') }}</p>
|
||||
<p>{{ $t("Automations can optionally be triggered in Home Assistant:") }}</p>
|
||||
<p>
|
||||
{{ $t("Trigger type:") }} <code>Event</code><br />
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="line-channel-access-token" class="form-label">{{ $t("Channel access token") }}</label>
|
||||
<HiddenInput id="line-channel-access-token" v-model="$parent.notification.lineChannelAccessToken" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="line-channel-access-token" v-model="$parent.notification.lineChannelAccessToken" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
<i18n-t tag="div" keypath="lineDevConsoleTo" class="form-text">
|
||||
<b>{{ $t("Basic Settings") }}</b>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="access-token" class="form-label">{{ $t("Access Token") }}</label><span style="color: red;"><sup>*</sup></span>
|
||||
<HiddenInput id="access-token" v-model="$parent.notification.accessToken" :required="true" autocomplete="one-time-code" :maxlength="500"></HiddenInput>
|
||||
<HiddenInput id="access-token" v-model="$parent.notification.accessToken" :required="true" autocomplete="new-password" :maxlength="500"></HiddenInput>
|
||||
</div>
|
||||
|
||||
<div class="form-text">
|
||||
|
@@ -11,15 +11,31 @@
|
||||
<input id="ntfy-server-url" v-model="$parent.notification.ntfyserverurl" type="text" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="ntfy-priority" class="form-label">{{ $t("Priority") }}</label>
|
||||
<input id="ntfy-priority" v-model="$parent.notification.ntfyPriority" type="number" class="form-control" required min="1" max="5" step="1">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="ntfy-username" class="form-label">{{ $t("Username") }} ({{ $t("Optional") }})</label>
|
||||
<div class="input-group mb-3">
|
||||
<input id="ntfy-username" v-model="$parent.notification.ntfyusername" type="text" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="ntfy-password" class="form-label">{{ $t("Password") }} ({{ $t("Optional") }})</label>
|
||||
<div class="input-group mb-3">
|
||||
<HiddenInput id="ntfy-password" v-model="$parent.notification.ntfypassword" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import HiddenInput from "../HiddenInput.vue";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
HiddenInput,
|
||||
},
|
||||
mounted() {
|
||||
if (typeof this.$parent.notification.ntfyPriority === "undefined") {
|
||||
this.$parent.notification.ntfyserverurl = "https://ntfy.sh";
|
||||
|
@@ -11,7 +11,7 @@
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="octopush-key" class="form-label">{{ $t("octopushAPIKey") }}</label>
|
||||
<HiddenInput id="octopush-key" v-model="$parent.notification.octopushAPIKey" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="octopush-key" v-model="$parent.notification.octopushAPIKey" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
<label for="octopush-login" class="form-label">{{ $t("octopushLogin") }}</label>
|
||||
<input id="octopush-login" v-model="$parent.notification.octopushLogin" type="text" class="form-control" required>
|
||||
</div>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
<label for="promosms-login" class="form-label">{{ $t("promosmsLogin") }}</label>
|
||||
<input id="promosms-login" v-model="$parent.notification.promosmsLogin" type="text" class="form-control" required>
|
||||
<label for="promosms-key" class="form-label">{{ $t("promosmsPassword") }}</label>
|
||||
<HiddenInput id="promosms-key" v-model="$parent.notification.promosmsPassword" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="promosms-key" v-model="$parent.notification.promosmsPassword" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="promosms-type-sms" class="form-label">{{ $t("SMS Type") }}</label>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="pushdeer-key" class="form-label">{{ $t("PushDeer Key") }}</label>
|
||||
<HiddenInput id="pushdeer-key" v-model="$parent.notification.pushdeerKey" :required="true" autocomplete="one-time-code" placeholder="PDUxxxx"></HiddenInput>
|
||||
<HiddenInput id="pushdeer-key" v-model="$parent.notification.pushdeerKey" :required="true" autocomplete="new-password" placeholder="PDUxxxx"></HiddenInput>
|
||||
</div>
|
||||
|
||||
<i18n-t tag="p" keypath="More info on:" style="margin-top: 8px;">
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="pushbullet-access-token" class="form-label">{{ $t("Access Token") }}</label>
|
||||
<HiddenInput id="pushbullet-access-token" v-model="$parent.notification.pushbulletAccessToken" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="pushbullet-access-token" v-model="$parent.notification.pushbulletAccessToken" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
|
||||
<i18n-t tag="p" keypath="More info on:" style="margin-top: 8px;">
|
||||
|
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="pushover-user" class="form-label">{{ $t("User Key") }}<span style="color: red;"><sup>*</sup></span></label>
|
||||
<HiddenInput id="pushover-user" v-model="$parent.notification.pushoveruserkey" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="pushover-user" v-model="$parent.notification.pushoveruserkey" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
<label for="pushover-app-token" class="form-label">{{ $t("Application Token") }}<span style="color: red;"><sup>*</sup></span></label>
|
||||
<HiddenInput id="pushover-app-token" v-model="$parent.notification.pushoverapptoken" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="pushover-app-token" v-model="$parent.notification.pushoverapptoken" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
<label for="pushover-device" class="form-label">{{ $t("Device") }}</label>
|
||||
<input id="pushover-device" v-model="$parent.notification.pushoverdevice" type="text" class="form-control">
|
||||
<label for="pushover-device" class="form-label">{{ $t("Message Title") }}</label>
|
||||
|
@@ -1,13 +1,13 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="pushy-app-token" class="form-label">{{ $t("pushyAPIKey") }}</label>
|
||||
<HiddenInput id="pushy-app-token" v-model="$parent.notification.pushyAPIKey" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="pushy-app-token" v-model="$parent.notification.pushyAPIKey" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="pushy-user-key" class="form-label">{{ $t("pushyToken") }}</label>
|
||||
<div class="input-group mb-3">
|
||||
<HiddenInput id="pushy-user-key" v-model="$parent.notification.pushyToken" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="pushy-user-key" v-model="$parent.notification.pushyToken" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
</div>
|
||||
<i18n-t tag="p" keypath="More info on:" style="margin-top: 8px;">
|
||||
|
31
src/components/notifications/SMSManager.vue
Normal file
31
src/components/notifications/SMSManager.vue
Normal file
@@ -0,0 +1,31 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="smsmanager-key" class="form-label">API Key</label>
|
||||
<div class="form-text">
|
||||
{{ $t("SMSManager API Docs") }}
|
||||
<a href="https://smsmanager.cz/api/http#send" target="_blank">{{ $t("here") }}</a>
|
||||
</div>
|
||||
<input id="smsmanager-key" v-model="$parent.notification.smsmanagerApiKey" type="text" class="form-control">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="smsmanager-numbers" class="form-label"> {{ $t("Recipients") }}</label>
|
||||
<div class="form-text">
|
||||
{{ $t("You can divide numbers with") }} <b>,</b> {{ $t("or") }} <b>;</b>
|
||||
</div>
|
||||
<input id="smsmanager-numbers" v-model="$parent.notification.numbers" type="text" class="form-control">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="smsmanager-messageType" class="form-label">{{ $t("Gateway Type") }}</label>
|
||||
<select id="smsmanager-messageType" v-model="$parent.notification.messageType" class="form-select">
|
||||
<option value="economy">Economy</option>
|
||||
<option value="lowcost">Lowcost</option>
|
||||
<option value="high" selected>High</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<div class="form-text">
|
||||
{{ $t("checkPrice", [$t("SMSManager")]) }}
|
||||
<a href="https://smsmanager.cz/rozesilani-sms/ceny/ceska-republika/" target="_blank">{{ $t("here") }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
@@ -34,7 +34,7 @@
|
||||
|
||||
<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>
|
||||
<HiddenInput id="password" v-model="$parent.notification.smtpPassword" :required="false" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
|
16
src/components/notifications/ServerChan.vue
Normal file
16
src/components/notifications/ServerChan.vue
Normal file
@@ -0,0 +1,16 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="serverchan-sendkey" class="form-label">{{ $t("SendKey") }}</label>
|
||||
<HiddenInput id="serverchan-sendkey" v-model="$parent.notification.serverChanSendKey" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import HiddenInput from "../HiddenInput.vue";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
HiddenInput,
|
||||
},
|
||||
};
|
||||
</script>
|
@@ -5,7 +5,7 @@
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="serwersms-key" class="form-label">{{ $t('serwersmsAPIPassword') }}</label>
|
||||
<HiddenInput id="serwersms-key" v-model="$parent.notification.serwersmsPassword" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="serwersms-key" v-model="$parent.notification.serwersmsPassword" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="serwersms-phone-number" class="form-label">{{ $t("serwersmsPhoneNumber") }}</label>
|
||||
|
6
src/components/notifications/Squadcast.vue
Normal file
6
src/components/notifications/Squadcast.vue
Normal file
@@ -0,0 +1,6 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="webhook-url" class="form-label">{{ $t("Post URL") }}</label>
|
||||
<input id="webhook-url" v-model="$parent.notification.squadcastWebhookURL" type="url" pattern="https?://.+" class="form-control" required>
|
||||
</div>
|
||||
</template>
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="push-api-key" class="form-label">{{ $t("API Key") }}</label>
|
||||
<HiddenInput id="push-api-key" v-model="$parent.notification.pushAPIKey" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="push-api-key" v-model="$parent.notification.pushAPIKey" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
|
||||
<i18n-t tag="p" keypath="More info on:" style="margin-top: 8px;">
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="mb-3">
|
||||
<label for="telegram-bot-token" class="form-label">{{ $t("Bot Token") }}</label>
|
||||
<HiddenInput id="telegram-bot-token" v-model="$parent.notification.telegramBotToken" :required="true" autocomplete="one-time-code"></HiddenInput>
|
||||
<HiddenInput id="telegram-bot-token" v-model="$parent.notification.telegramBotToken" :required="true" autocomplete="new-password"></HiddenInput>
|
||||
<i18n-t tag="div" keypath="wayToGetTelegramToken" class="form-text">
|
||||
<a href="https://t.me/BotFather" target="_blank">https://t.me/BotFather</a>
|
||||
</i18n-t>
|
||||
|
@@ -7,6 +7,7 @@ import ClickSendSMS from "./ClickSendSMS.vue";
|
||||
import DingDing from "./DingDing.vue";
|
||||
import Discord from "./Discord.vue";
|
||||
import Feishu from "./Feishu.vue";
|
||||
import FreeMobile from "./FreeMobile.vue";
|
||||
import GoogleChat from "./GoogleChat.vue";
|
||||
import Gorush from "./Gorush.vue";
|
||||
import Gotify from "./Gotify.vue";
|
||||
@@ -26,9 +27,12 @@ import PushDeer from "./PushDeer.vue";
|
||||
import Pushover from "./Pushover.vue";
|
||||
import Pushy from "./Pushy.vue";
|
||||
import RocketChat from "./RocketChat.vue";
|
||||
import ServerChan from "./ServerChan.vue";
|
||||
import SerwerSMS from "./SerwerSMS.vue";
|
||||
import Signal from "./Signal.vue";
|
||||
import SMSManager from "./SMSManager.vue";
|
||||
import Slack from "./Slack.vue";
|
||||
import Squadcast from "./Squadcast.vue";
|
||||
import Stackfield from "./Stackfield.vue";
|
||||
import STMP from "./SMTP.vue";
|
||||
import Teams from "./Teams.vue";
|
||||
@@ -36,6 +40,7 @@ import TechulusPush from "./TechulusPush.vue";
|
||||
import Telegram from "./Telegram.vue";
|
||||
import Webhook from "./Webhook.vue";
|
||||
import WeCom from "./WeCom.vue";
|
||||
import GoAlert from "./GoAlert.vue";
|
||||
|
||||
/**
|
||||
* Manage all notification form.
|
||||
@@ -52,6 +57,7 @@ const NotificationFormList = {
|
||||
"DingDing": DingDing,
|
||||
"discord": Discord,
|
||||
"Feishu": Feishu,
|
||||
"FreeMobile": FreeMobile,
|
||||
"GoogleChat": GoogleChat,
|
||||
"gorush": Gorush,
|
||||
"gotify": Gotify,
|
||||
@@ -74,13 +80,17 @@ const NotificationFormList = {
|
||||
"rocket.chat": RocketChat,
|
||||
"serwersms": SerwerSMS,
|
||||
"signal": Signal,
|
||||
"SMSManager": SMSManager,
|
||||
"slack": Slack,
|
||||
"squadcast": Squadcast,
|
||||
"smtp": STMP,
|
||||
"stackfield": Stackfield,
|
||||
"teams": Teams,
|
||||
"telegram": Telegram,
|
||||
"webhook": Webhook,
|
||||
"WeCom": WeCom,
|
||||
"GoAlert": GoAlert,
|
||||
"ServerChan": ServerChan,
|
||||
};
|
||||
|
||||
export default NotificationFormList;
|
||||
|
@@ -1,6 +1,12 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="my-4">
|
||||
<div class="alert alert-warning" role="alert" style="border-radius: 15px;">
|
||||
{{ $t("backupOutdatedWarning") }}<br />
|
||||
<br />
|
||||
{{ $t("backupRecommend") }}
|
||||
</div>
|
||||
|
||||
<h4 class="mt-4 mb-2">{{ $t("Export Backup") }}</h4>
|
||||
|
||||
<p>
|
||||
|
@@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<div>
|
||||
<form class="my-4" @submit.prevent="saveGeneral">
|
||||
<!-- Timezone -->
|
||||
<form class="my-4" autocomplete="off" @submit.prevent="saveGeneral">
|
||||
<!-- Client side Timezone -->
|
||||
<div class="mb-4">
|
||||
<label for="timezone" class="form-label">
|
||||
{{ $t("Timezone") }}
|
||||
{{ $t("Display Timezone") }}
|
||||
</label>
|
||||
<select id="timezone" v-model="$root.userTimezone" class="form-select">
|
||||
<option value="auto">
|
||||
@@ -20,6 +20,23 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- Server Timezone -->
|
||||
<div class="mb-4">
|
||||
<label for="timezone" class="form-label">
|
||||
{{ $t("Server Timezone") }}
|
||||
</label>
|
||||
<select id="timezone" v-model="settings.serverTimezone" class="form-select">
|
||||
<option value="UTC">UTC</option>
|
||||
<option
|
||||
v-for="(timezone, index) in timezoneList"
|
||||
:key="index"
|
||||
:value="timezone.value"
|
||||
>
|
||||
{{ timezone.name }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- Search Engine -->
|
||||
<div class="mb-4">
|
||||
<label class="form-label">
|
||||
@@ -105,6 +122,7 @@
|
||||
name="primaryBaseURL"
|
||||
placeholder="https://"
|
||||
pattern="https?://.+"
|
||||
autocomplete="new-password"
|
||||
/>
|
||||
<button class="btn btn-outline-primary" type="button" @click="autoGetPrimaryBaseURL">
|
||||
{{ $t("Auto Get") }}
|
||||
@@ -122,7 +140,7 @@
|
||||
<HiddenInput
|
||||
id="steamAPIKey"
|
||||
v-model="settings.steamAPIKey"
|
||||
autocomplete="one-time-code"
|
||||
autocomplete="new-password"
|
||||
/>
|
||||
<div class="form-text">
|
||||
{{ $t("steamApiKeyDescription") }}
|
||||
@@ -145,11 +163,7 @@
|
||||
<script>
|
||||
import HiddenInput from "../../components/HiddenInput.vue";
|
||||
import dayjs from "dayjs";
|
||||
import utc from "dayjs/plugin/utc";
|
||||
import timezone from "dayjs/plugin/timezone";
|
||||
import { timezoneList } from "../../util-frontend";
|
||||
dayjs.extend(utc);
|
||||
dayjs.extend(timezone);
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
@@ -41,7 +41,7 @@
|
||||
<HiddenInput
|
||||
id="cloudflareTunnelToken"
|
||||
v-model="cloudflareTunnelToken"
|
||||
autocomplete="one-time-code"
|
||||
autocomplete="new-password"
|
||||
:readonly="running"
|
||||
/>
|
||||
<div class="form-text">
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import { createI18n } from "vue-i18n/index";
|
||||
import { createI18n } from "vue-i18n/dist/vue-i18n.esm-browser.prod.js";
|
||||
import en from "./languages/en";
|
||||
|
||||
const languageList = {
|
||||
@@ -34,6 +34,7 @@ const languageList = {
|
||||
"zh-TW": "繁體中文 (台灣)",
|
||||
"uk-UA": "Український",
|
||||
"th-TH": "ไทย",
|
||||
"el-GR": "Ελληνικά",
|
||||
};
|
||||
|
||||
let messages = {
|
||||
|
@@ -41,6 +41,9 @@ import {
|
||||
faUndo,
|
||||
faPlusCircle,
|
||||
faAngleDown,
|
||||
faWrench,
|
||||
faHeartbeat,
|
||||
faFilter,
|
||||
} from "@fortawesome/free-solid-svg-icons";
|
||||
|
||||
library.add(
|
||||
@@ -82,6 +85,9 @@ library.add(
|
||||
faPlusCircle,
|
||||
faAngleDown,
|
||||
faLink,
|
||||
faWrench,
|
||||
faHeartbeat,
|
||||
faFilter,
|
||||
);
|
||||
|
||||
export { FontAwesomeIcon };
|
||||
|
@@ -1,8 +1,12 @@
|
||||
# How to translate
|
||||
|
||||
1. Fork this repo.
|
||||
2. Create a language file (e.g. `zh-TW.js`). The filename must be ISO language code: http://www.lingoes.net/en/translator/langcode.htm
|
||||
3. Run `npm run update-language-files`. You can also use this command to check if there are new strings to translate for your language.
|
||||
2. Run `npm install`
|
||||
3. Run `npm run update-language-files --language=<code>` where `<code>`
|
||||
is a valid ISO language code:
|
||||
http://www.lingoes.net/en/translator/langcode.htm. You can also use
|
||||
this command to check if there are new strings to
|
||||
translate for your language.
|
||||
4. Your language file should be filled in. You can translate now.
|
||||
5. Add it into `languageList` constant.
|
||||
6. Make a [pull request](https://github.com/louislam/uptime-kuma/pulls) when you have done.
|
||||
|
@@ -380,7 +380,7 @@ export default {
|
||||
deleteProxyMsg: "Сигурни ли сте, че желаете да изтриете това прокси за всички монитори?",
|
||||
proxyDescription: "За да функционират трябва да бъдат зададени към монитор.",
|
||||
enableProxyDescription: "Това прокси няма да има ефект върху заявките за мониторинг, докато не бъде активирано. Може да контролирате временното деактивиране на проксито от всички монитори чрез статуса на активиране.",
|
||||
setAsDefaultProxyDescription: "Това проки ще бъде включено по подразбиране за новите монитори. Може да го изключите по отделно за всеки един монитор.",
|
||||
setAsDefaultProxyDescription: "Това прокси ще бъде включено по подразбиране за новите монитори. Може да го изключите по отделно за всеки един монитор.",
|
||||
"Certificate Chain": "Верига на сертификата",
|
||||
Valid: "Валиден",
|
||||
Invalid: "Невалиден",
|
||||
@@ -537,4 +537,98 @@ export default {
|
||||
Workstation: "Работна станция",
|
||||
disableCloudflaredNoAuthMsg: "Тъй като сте в режим \"No Auth mode\", парола не се изисква.",
|
||||
wayToGetLineNotifyToken: "Може да получите токен код за достъп от {0}",
|
||||
resendEveryXTimes: "Изпращай повторно на всеки {0} пъти",
|
||||
resendDisabled: "Повторното изпращане е изключено",
|
||||
"Resend Notification if Down X times consequently": "Повторно изпращане на известие, ако е недостъпен X пъти последователно",
|
||||
"Bark Group": "Bark група",
|
||||
"Bark Sound": "Bark звук",
|
||||
"HTTP Headers": "HTTP хедъри",
|
||||
"Trust Proxy": "Trust Proxy",
|
||||
HomeAssistant: "Home Assistant",
|
||||
RadiusSecret: "Radius таен код",
|
||||
RadiusSecretDescription: "Споделен таен код между клиент и сървър",
|
||||
RadiusCalledStationId: "Повиквана станция ID",
|
||||
RadiusCalledStationIdDescription: "Идентификатор на повикваното устройство",
|
||||
RadiusCallingStationId: "Повикваща станция ID",
|
||||
RadiusCallingStationIdDescription: "Идентификатор на повикващото устройство",
|
||||
"Setup Docker Host": "Настройка на Docker хост",
|
||||
"Connection Type": "Тип свързване",
|
||||
"Docker Daemon": "Docker демон",
|
||||
deleteDockerHostMsg: "Сигурни ли сте, че желаете да изтриете този Docker хост за всички монитори?",
|
||||
socket: "Сокет",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker контейнер",
|
||||
"Container Name / ID": "Име на контейнер / ID",
|
||||
"Docker Host": "Docker хост",
|
||||
"Docker Hosts": "Docker хостове",
|
||||
trustProxyDescription: "Trust 'X-Forwarded-*' headers. Ако искате да получавате правилния IP адрес на клиента, а Uptime Kuma е зад системи като Nginx или Apache, трябва да разрешите тази опция.",
|
||||
Examples: "Примери",
|
||||
"Home Assistant URL": "Home Assistant URL адрес",
|
||||
"Long-Lived Access Token": "Long-Lived Access Token",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token можете да създадете, като кликнете върху името на профила си (долу ляво) и превъртите до най-долу, след това кликнете върху Създаване на токен. ",
|
||||
"Notification Service": "Услуга за известяване",
|
||||
"default: notify all devices": "по подразбиране: извести всички устройства",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Списък с услугите за известяване може да бъде намерен в Home Assistant под \"Developer Tools > Services\", там потърсете \"notification\", за да намерите името на вашето устройство/телефон.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Автоматизациите могат да се задействат при нужда в Home Assistant:",
|
||||
"Trigger type:": "Задействане тип:",
|
||||
"Event type:": "Събитие тип:",
|
||||
"Event data:": "Събитие данни:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "След което изберете действие, например да превключите сцената, където RGB светлината е червена.",
|
||||
"Frontend Version": "Фронтенд версия",
|
||||
"Frontend Version do not match backend version!": "Фронтенд версията не съвпада с Бекенд версията!",
|
||||
"Base URL": "Базов URL адрес",
|
||||
goAlertInfo: "GoAlert е приложение с отворен код за планиране на повиквания, автоматизирани ескалации и известия (като SMS или гласови повиквания). Автоматично ангажирайте точния човек, по точния начин и в точното време! {0}",
|
||||
goAlertIntegrationKeyInfo: "Вземете общ API интеграционен ключ за услугата във формат \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" обикновено стойността на параметъра token на копирания URL адрес.",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Отпаднало: Тъй като са добавени много функции, тази опция за архивиране не е достатъчно поддържана и не може да генерира или възстанови пълен архив.",
|
||||
backupRecommend: "Моля, архивирайте дяла или папката (./data/) директно вместо това.",
|
||||
Maintenance: "Поддръжка",
|
||||
statusMaintenance: "Поддръжка",
|
||||
"Schedule maintenance": "Планиране на поддръжка",
|
||||
"Affected Monitors": "Засегнати монитори",
|
||||
"Pick Affected Monitors...": "Изберете засегнати монитори...",
|
||||
"Start of maintenance": "Стартирай поддръжка",
|
||||
"All Status Pages": "Всички статус страници",
|
||||
"Select status pages...": "Изберете статус страници...",
|
||||
recurringIntervalMessage: "Изпълнявай ежедневно | Изпълнявай всеки {0} дни",
|
||||
affectedMonitorsDescription: "Изберете монитори, засегнати от текущата поддръжка",
|
||||
affectedStatusPages: "Покажи това съобщение за поддръжка на избрани статус страници",
|
||||
atLeastOneMonitor: "Изберете поне един засегнат монитор",
|
||||
deleteMaintenanceMsg: "Сигурни ли сте, че желаете да изтриете тази поддръжка?",
|
||||
Optional: "По желание",
|
||||
squadcast: "Squadcast",
|
||||
SendKey: "SendKey",
|
||||
"SMSManager API Docs": "SMSManager API Документация ",
|
||||
"Gateway Type": "Тип на шлюза",
|
||||
SMSManager: "SMSManager",
|
||||
"You can divide numbers with": "Може да разделяте числата с",
|
||||
or: "или",
|
||||
recurringInterval: "Интервал",
|
||||
Recurring: "Повтаряне",
|
||||
strategyManual: "Активен/Неактивен ръчно",
|
||||
warningTimezone: "Използва се часовата зона на сървъра",
|
||||
weekdayShortMon: "Пон",
|
||||
weekdayShortTue: "Вт",
|
||||
weekdayShortWed: "Ср",
|
||||
weekdayShortThu: "Чет",
|
||||
weekdayShortFri: "Пет",
|
||||
weekdayShortSat: "Съб",
|
||||
weekdayShortSun: "Нед",
|
||||
dayOfWeek: "Ден",
|
||||
dayOfMonth: "Дата",
|
||||
lastDay: "Последен ден",
|
||||
lastDay1: "Последен ден от месеца",
|
||||
lastDay2: "2-ри последен ден на месеца",
|
||||
lastDay3: "3-ти последен ден на месеца",
|
||||
lastDay4: "4-ти последен ден на месеца",
|
||||
"No Maintenance": "Няма поддръжка",
|
||||
pauseMaintenanceMsg: "Сигурни ли сте, че желаете да направите пауза?",
|
||||
"maintenanceStatus-under-maintenance": "В режим подръжка",
|
||||
"maintenanceStatus-inactive": "Неактивен",
|
||||
"maintenanceStatus-scheduled": "Планиран",
|
||||
"maintenanceStatus-ended": "Прилючена",
|
||||
"maintenanceStatus-unknown": "Неизвестен",
|
||||
"Display Timezone": "Покажи часова зона",
|
||||
"Server Timezone": "Часова зона на сървъра",
|
||||
statusPageMaintenanceEndDate: "Край",
|
||||
};
|
||||
|
@@ -2,18 +2,21 @@ export default {
|
||||
languageName: "Czech",
|
||||
checkEverySecond: "Kontrolovat každých {0} sekund",
|
||||
retryCheckEverySecond: "Opakovat každých {0} sekund",
|
||||
resendEveryXTimes: "Znovu zaslat {0}krát",
|
||||
resendDisabled: "Opakované zasílání je vypnuté",
|
||||
retriesDescription: "Maximální počet pokusů před označením služby jako nedostupné a odesláním oznámení",
|
||||
ignoreTLSError: "Ignorovat TLS/SSL chyby na HTTPS stránkách",
|
||||
upsideDownModeDescription: "Pomocí této možnosti změníte způsob vyhodnocování stavu. Pokud je služba dosažitelná, je NEDOSTUPNÁ.",
|
||||
maxRedirectDescription: "Maximální počet přesměrování, která se mají následovat. Nastavením hodnoty 0 zakážete přesměrování.",
|
||||
acceptedStatusCodesDescription: "Vyberte stavové kódy, které jsou považovány za úspěšnou odpověď.",
|
||||
passwordNotMatchMsg: "Hesla se neshodují",
|
||||
notificationDescription: "Pro zajištění funkčnosti oznámení je nutné je přiřadit dohledu.",
|
||||
notificationDescription: "Pro zajištění funkčnosti oznámení je nutné jej přiřadit dohledu.",
|
||||
keywordDescription: "Vyhledat klíčové slovo v prosté odpovědi HTML nebo JSON. Při hledání se rozlišuje velikost písmen.",
|
||||
pauseDashboardHome: "Pozastavit",
|
||||
deleteMonitorMsg: "Opravdu chcete odstranit tento dohled?",
|
||||
deleteNotificationMsg: "Opravdu chcete odstranit toto oznámení pro všechny dohledy?",
|
||||
resolverserverDescription: "Cloudflare je výchozí server. Resolver server můžete kdykoli změnit.",
|
||||
dnsPortDescription: "Port DNS serveru. Standardně běží na portu 53. V případě potřeby jej můžete kdykoli změnit.",
|
||||
resolverserverDescription: "Cloudflare je výchozí server. V případě potřeby můžete Resolver server kdykoli změnit.",
|
||||
rrtypeDescription: "Vyberte typ záznamu o prostředku, který chcete monitorovat",
|
||||
pauseMonitorMsg: "Opravdu chcete dohled pozastavit?",
|
||||
enableDefaultNotificationDescription: "Toto oznámení bude standardně aktivní pro nové dohledy. V případě potřeby můžete oznámení stále zakázat na úrovni jednotlivých dohledů.",
|
||||
@@ -44,10 +47,10 @@ export default {
|
||||
Down: "Nedostupný",
|
||||
Pending: "Čekám",
|
||||
Unknown: "Neznámý",
|
||||
Pause: "Pozastavit",
|
||||
Pause: "Pozastaveno",
|
||||
Name: "Název",
|
||||
Status: "Stav",
|
||||
DateTime: "DateTime",
|
||||
DateTime: "Časové razítko",
|
||||
Message: "Zpráva",
|
||||
"No important events": "Žádné důležité události",
|
||||
Resume: "Pokračovat",
|
||||
@@ -70,10 +73,11 @@ export default {
|
||||
Port: "Port",
|
||||
"Heartbeat Interval": "Heartbeat interval",
|
||||
Retries: "Počet pokusů",
|
||||
"Heartbeat Retry Interval": "Interval opakování prezenčního signálu",
|
||||
"Heartbeat Retry Interval": "Interval opakování heartbeatu",
|
||||
"Resend Notification if Down X times consequently": "Znovu zaslat oznámení, pokud je služba nedostupná Xkrát za sebou",
|
||||
Advanced: "Rozšířené",
|
||||
"Upside Down Mode": "Inverzní režim",
|
||||
"Max. Redirects": "Max. Přesměrování",
|
||||
"Max. Redirects": "Max. přesměrování",
|
||||
"Accepted Status Codes": "Akceptované stavové kódy",
|
||||
"Push URL": "Push URL",
|
||||
needPushEvery: "Tuto URL adresu byste měli volat každých {0} sekund.",
|
||||
@@ -103,7 +107,7 @@ export default {
|
||||
"disableauth.message1": "Opravdu chcete <strong>deaktivovat autentifikaci</strong>?",
|
||||
"disableauth.message2": "Tato možnost je určena pro případy, kdy <strong>máte autentifikaci zajištěnou třetí stranou</strong> ještě před přístupem do Uptime Kuma, například prostřednictvím Cloudflare Access.",
|
||||
"Please use this option carefully!": "Používejte ji prosím s rozmyslem.",
|
||||
Logout: "Odhlášení",
|
||||
Logout: "Odhlásit",
|
||||
Leave: "Odejít",
|
||||
"I understand, please disable": "Rozumím, chci ji deaktivovat",
|
||||
Confirm: "Potvrzení",
|
||||
@@ -128,7 +132,7 @@ export default {
|
||||
"Export Backup": "Exportovat zálohu",
|
||||
Export: "Exportovat",
|
||||
Import: "Importovat",
|
||||
respTime: "Odezva Čas (ms)",
|
||||
respTime: "Doba odezvy (ms)",
|
||||
notAvailableShort: "N/A",
|
||||
"Default enabled": "Standardně povoleno",
|
||||
"Apply on all existing monitors": "Použít pro všechny existující dohledy",
|
||||
@@ -195,7 +199,7 @@ export default {
|
||||
"Chat ID": "ID chatu",
|
||||
supportTelegramChatID: "Podpora přímého chatu / skupiny / ID chatu kanálu",
|
||||
wayToGetTelegramChatID: "ID chatu můžete získat tak, že robotovi zašlete zprávu a přejdete na tuto adresu URL, kde zobrazíte chat_id:",
|
||||
"YOUR BOT TOKEN HERE": "YOUR BOT TOKEN HERE",
|
||||
"YOUR BOT TOKEN HERE": "SEM ZADEJTE TOKEN VAŠEHO CHATBOTA",
|
||||
chatIDNotFound: "ID chatu nebylo nalezeno; nejprve tomuto robotovi zašlete zprávu",
|
||||
webhook: "Webhook",
|
||||
"Post URL": "URL adresa příspěvku",
|
||||
@@ -241,6 +245,7 @@ export default {
|
||||
"rocket.chat": "Rocket.Chat",
|
||||
pushover: "Pushover",
|
||||
pushy: "Pushy",
|
||||
PushByTechulus: "Push by Techulus",
|
||||
octopush: "Octopush",
|
||||
promosms: "PromoSMS",
|
||||
clicksendsms: "ClickSend SMS",
|
||||
@@ -301,15 +306,19 @@ export default {
|
||||
Body: "Tělo",
|
||||
Headers: "Hlavičky",
|
||||
PushUrl: "Push URL",
|
||||
HeadersInvalidFormat: "The request headers are not valid JSON: ",
|
||||
BodyInvalidFormat: "The request body is not valid JSON: ",
|
||||
HeadersInvalidFormat: "Hlaviča žádosti není platný JSON: ",
|
||||
BodyInvalidFormat: "Text žádosti není platný JSON: ",
|
||||
"Monitor History": "Historie dohledu",
|
||||
clearDataOlderThan: "Historie dohledu bude uchovávána po dobu {0} dní.",
|
||||
PasswordsDoNotMatch: "Hesla se neshodují.",
|
||||
records: "záznamů",
|
||||
"One record": "Jeden záznam",
|
||||
steamApiKeyDescription: "For monitoring a Steam Game Server you need a Steam Web-API key. You can register your API key here: ",
|
||||
steamApiKeyDescription: "Pro monitorování Steam Game Serveru je nutné zadat Steam Web-API klíč. Svůj API klíč získáte na následující stránce: ",
|
||||
"Current User": "Aktuálně přihlášený uživatel",
|
||||
topic: "Topic",
|
||||
topicExplanation: "MQTT topic, který chcete sledovat",
|
||||
successMessage: "Zpráva o úspěchu",
|
||||
successMessageExplanation: "MQTT zpráva považovaná za úspěšnou",
|
||||
recent: "Poslední",
|
||||
Done: "Hotovo",
|
||||
Info: "Informace",
|
||||
@@ -318,7 +327,7 @@ export default {
|
||||
"Shrink Database": "Zmenšit databázi",
|
||||
"Pick a RR-Type...": "Vyberte typ záznamu o prostředku…",
|
||||
"Pick Accepted Status Codes...": "Vyberte stavové kódy, které chcete akceptovat…",
|
||||
Default: "Standardní",
|
||||
Default: "Výchozí",
|
||||
"HTTP Options": "Možnosti protokolu HTTP",
|
||||
"Create Incident": "Vytvořit incident",
|
||||
Title: "Předmět",
|
||||
@@ -327,6 +336,8 @@ export default {
|
||||
info: "informace",
|
||||
warning: "upozornění",
|
||||
danger: "riziko",
|
||||
error: "chyba",
|
||||
critical: "kritické",
|
||||
primary: "primární",
|
||||
light: "světlý",
|
||||
dark: "tmavý",
|
||||
@@ -336,7 +347,7 @@ export default {
|
||||
"Last Updated": "Poslední aktualizace",
|
||||
Unpin: "Odepnout",
|
||||
"Switch to Light Theme": "Přepnout na světlý motiv",
|
||||
"Switch to Dark Theme": "Přepnutí na tmavý motiv",
|
||||
"Switch to Dark Theme": "Přepnout na tmavý motiv",
|
||||
"Show Tags": "Zobrazit štítky",
|
||||
"Hide Tags": "Skrýt štítky",
|
||||
Description: "Popis",
|
||||
@@ -355,13 +366,220 @@ export default {
|
||||
serwersmsPhoneNumber: "Telefonní číslo",
|
||||
serwersmsSenderName: "Odesílatel SMS (registrováno prostřednictvím zákaznického portálu)",
|
||||
"stackfield": "Stackfield",
|
||||
Customize: "Přizpůsobit",
|
||||
"Custom Footer": "Vlastní patička",
|
||||
"Custom CSS": "Vlastní CSS",
|
||||
smtpDkimSettings: "Nastavení DKIM",
|
||||
smtpDkimDesc: "Informace o použití naleznete v {0} Nodemailer DKIM.",
|
||||
documentation: "dokumentaci",
|
||||
smtpDkimDomain: "Název domény",
|
||||
smtpDkimKeySelector: "Selector klíče",
|
||||
smtpDkimKeySelector: "Selektor klíče",
|
||||
smtpDkimPrivateKey: "Privátní klíč",
|
||||
smtpDkimHashAlgo: "Hashovací algoritmus (volitelné)",
|
||||
smtpDkimheaderFieldNames: "Podepisovat tyto hlavičky (volitelné)",
|
||||
smtpDkimskipFields: "Nepodepisovat tyto hlavičky (volitelné)",
|
||||
wayToGetPagerDutyKey: "Získat jej můžete v sekci Service -> Service Directory -> (vyberte službu) -> Integrations -> Add integration. Následně vyhledejte \"Events API V2\". Více informace naleznete na adrese {0}",
|
||||
"Integration Key": "Integration Key",
|
||||
"Integration URL": "Integration URL",
|
||||
"Auto resolve or acknowledged": "Auto resolve or acknowledged",
|
||||
"do nothing": "do nothing",
|
||||
"auto acknowledged": "auto acknowledged",
|
||||
"auto resolve": "auto resolve",
|
||||
gorush: "Gorush",
|
||||
alerta: "Alerta",
|
||||
alertaApiEndpoint: "API Endpoint",
|
||||
alertaEnvironment: "Prostředí",
|
||||
alertaApiKey: "API Key",
|
||||
alertaAlertState: "Stav upozornění",
|
||||
alertaRecoverState: "Stav obnovení",
|
||||
deleteStatusPageMsg: "Opravdu chcete odstranit tuto stavovou stránku?",
|
||||
Proxies: "Proxy",
|
||||
default: "Výchozí",
|
||||
enabled: "Zapnuto",
|
||||
setAsDefault: "Nastavit jako výchozí",
|
||||
deleteProxyMsg: "Opravdu chcete odstranit tuto proxy ze všech dohledů?",
|
||||
proxyDescription: "Pro zajištění funkčnosti musí být proxy přiřazena dohledům.",
|
||||
enableProxyDescription: "Tato proxy neovlivní žádosti dohledu do doby, než ji aktivujete. Změnou tohoto nastavení dočasně zakážete použití proxy ve všech dohledech.",
|
||||
setAsDefaultProxyDescription: "Tato proxy se použije pro všechny nové dohledy. V případě potřeby můžete její využívání zakázat v konkrétním dohledu.",
|
||||
"Certificate Chain": "Řetězec certifikátu",
|
||||
Valid: "Platný",
|
||||
Invalid: "Neplatný",
|
||||
AccessKeyId: "AccessKey ID",
|
||||
SecretAccessKey: "AccessKey Secret",
|
||||
PhoneNumbers: "PhoneNumbers",
|
||||
TemplateCode: "TemplateCode",
|
||||
SignName: "SignName",
|
||||
"Sms template must contain parameters: ": "Sms template must contain parameters: ",
|
||||
"Bark Endpoint": "Bark Endpoint",
|
||||
"Bark Group": "Bark Group",
|
||||
"Bark Sound": "Bark Sound",
|
||||
WebHookUrl: "WebHookUrl",
|
||||
SecretKey: "SecretKey",
|
||||
"For safety, must use secret key": "Z důvodu bezpečnosti použijte secret key",
|
||||
"Device Token": "Token zařízení",
|
||||
Platform: "Platforma",
|
||||
iOS: "iOS",
|
||||
Android: "Android",
|
||||
Huawei: "Huawei",
|
||||
High: "Vysoký",
|
||||
Retry: "Opakovat",
|
||||
Topic: "Topic",
|
||||
"WeCom Bot Key": "WeCom Bot Key",
|
||||
"Setup Proxy": "Nastavit proxy",
|
||||
"Proxy Protocol": "Protokol proxy",
|
||||
"Proxy Server": "Proxy Server",
|
||||
"Proxy server has authentication": "Proxy server vyžaduje ověření",
|
||||
User: "Uživatel",
|
||||
Installed: "Nainstalováno",
|
||||
"Not installed": "Nenainstalováno",
|
||||
Running: "Běží",
|
||||
"Not running": "Neběží",
|
||||
"Remove Token": "Odstranit token",
|
||||
Start: "Spustit",
|
||||
Stop: "Zastavit",
|
||||
"Uptime Kuma": "Uptime Kuma",
|
||||
"Add New Status Page": "Přidat novou stavovou stránku",
|
||||
Slug: "Slug",
|
||||
"Accept characters:": "Přípustné znaky:",
|
||||
startOrEndWithOnly: "Počáteční a koncový znak může být pouze {0}",
|
||||
"No consecutive dashes": "Nesmí se opakovat pomlčky",
|
||||
Next: "Další",
|
||||
"The slug is already taken. Please choose another slug.": "Slug s tímto názvem již existuje. Prosím, zadejte jiný název.",
|
||||
"No Proxy": "Žádná proxy",
|
||||
Authentication: "Ověření",
|
||||
"HTTP Basic Auth": "HTTP Basic ověření",
|
||||
"New Status Page": "Nová stavová stránka",
|
||||
"Page Not Found": "Stránka nenalezena",
|
||||
"Reverse Proxy": "Reverzní proxy",
|
||||
Backup: "Záloha",
|
||||
About: "O programu",
|
||||
wayToGetCloudflaredURL: "(Stáhnout cloudflared z {0})",
|
||||
cloudflareWebsite: "Webová stránka Cloudflare",
|
||||
"Message:": "Zpráva:",
|
||||
"Don't know how to get the token? Please read the guide:": "Nevíte jak získat? Prosím, přečtěte si tuto příručku:",
|
||||
"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.": "Stávající připojení mohlo být ztraceno, pokud jste připojeni prostřednictvím Cloudflare tunelu. Opravdu jej chcete zastavit? Pro potvrzení zadejte své současné heslo.",
|
||||
"HTTP Headers": "HTTP hlavičky",
|
||||
"Trust Proxy": "Důvěryhodná proxy",
|
||||
"Other Software": "Jiný software",
|
||||
"For example: nginx, Apache and Traefik.": "Například nginx, Apache nebo Traefik.",
|
||||
"Please read": "Prosím, přečtěte si informace na adrese",
|
||||
"Subject:": "Předmět:",
|
||||
"Valid To:": "Platnost do:",
|
||||
"Days Remaining:": "Počet zbývajících dní:",
|
||||
"Issuer:": "Vydavatel:",
|
||||
"Fingerprint:": "Otisk:",
|
||||
"No status pages": "Žádná stavová stránka",
|
||||
"Domain Name Expiry Notification": "Oznámení na blížící se konec platnosti doménového jména",
|
||||
Proxy: "Proxy",
|
||||
"Date Created": "Datum vytvoření",
|
||||
HomeAssistant: "Home Assistant",
|
||||
onebotHttpAddress: "OneBot HTTP adresa",
|
||||
onebotMessageType: "Typ OneBot zprávy",
|
||||
onebotGroupMessage: "Skupinová",
|
||||
onebotPrivateMessage: "Soukromá",
|
||||
onebotUserOrGroupId: "ID skupiny/uživatele",
|
||||
onebotSafetyTips: "Z důvodu bezpečnosti je nutné zadat přístupový token",
|
||||
"PushDeer Key": "PushDeer klíč",
|
||||
"Footer Text": "Text v patičce",
|
||||
"Show Powered By": "Zobrazit \"Poskytuje\"",
|
||||
"Domain Names": "Názvy domén",
|
||||
signedInDisp: "Přihlášen jako {0}",
|
||||
signedInDispDisabled: "Ověření je vypnuté.",
|
||||
RadiusSecret: "Radius Secret",
|
||||
RadiusSecretDescription: "Sdílený tajný klíč mezi klientem a serverem",
|
||||
RadiusCalledStationId: "ID volaného zařízení",
|
||||
RadiusCalledStationIdDescription: "Identifikátor volaného zařízení",
|
||||
RadiusCallingStationId: "ID volajícího zařízení",
|
||||
RadiusCallingStationIdDescription: "Identifikátor volajícího zařízení",
|
||||
"Certificate Expiry Notification": "Oznámení na blížící se konec platnosti certifikátu",
|
||||
"API Username": "API Username",
|
||||
"API Key": "API Key",
|
||||
"Recipient Number": "Číslo příjemce",
|
||||
"From Name/Number": "Jméno/číslo odesílatele",
|
||||
"Leave blank to use a shared sender number.": "Ponechte prázdné, pokud chcete použít číslo sdíleného příjemce.",
|
||||
"Octopush API Version": "Octopush API verze",
|
||||
"Legacy Octopush-DM": "Legacy Octopush-DM",
|
||||
endpoint: "endpoint",
|
||||
octopushAPIKey: "\"API key\" ze sekce HTTP API credentials na nástěnce",
|
||||
octopushLogin: "\"Login\" ze sekce HTTP API credentials na nástěnce",
|
||||
promosmsLogin: "API Login Name",
|
||||
promosmsPassword: "API Password",
|
||||
"pushoversounds pushover": "Pushover (výchozí)",
|
||||
"pushoversounds bike": "Bike",
|
||||
"pushoversounds bugle": "Bugle",
|
||||
"pushoversounds cashregister": "Cash Register",
|
||||
"pushoversounds classical": "Classical",
|
||||
"pushoversounds cosmic": "Cosmic",
|
||||
"pushoversounds falling": "Falling",
|
||||
"pushoversounds gamelan": "Gamelan",
|
||||
"pushoversounds incoming": "Incoming",
|
||||
"pushoversounds intermission": "Intermission",
|
||||
"pushoversounds magic": "Magic",
|
||||
"pushoversounds mechanical": "Mechanical",
|
||||
"pushoversounds pianobar": "Piano Bar",
|
||||
"pushoversounds siren": "Siren",
|
||||
"pushoversounds spacealarm": "Space Alarm",
|
||||
"pushoversounds tugboat": "Tug Boat",
|
||||
"pushoversounds alien": "Alien Alarm (dlouhý)",
|
||||
"pushoversounds climb": "Climb (dlouhý)",
|
||||
"pushoversounds persistent": "Persistent (dlouhý)",
|
||||
"pushoversounds echo": "Pushover Echo (dlouhý)",
|
||||
"pushoversounds updown": "Up Down (dlouhý)",
|
||||
"pushoversounds vibrate": "Pouze vibrace",
|
||||
"pushoversounds none": "Žádný (ticho)",
|
||||
pushyAPIKey: "Secret API Key",
|
||||
pushyToken: "Token zařízení",
|
||||
"Show update if available": "Upozornit na aktualizace, pokud jsou k dispozici",
|
||||
"Also check beta release": "Kontrolovat také dostupnost beta verzí",
|
||||
"Using a Reverse Proxy?": "Používáte reverzní proxy?",
|
||||
"Check how to config it for WebSocket": "Zjistěte, jak ji nakonfigurovat pro WebSockety",
|
||||
"Steam Game Server": "Steam Game Server",
|
||||
"Most likely causes:": "Nejčastější důvody:",
|
||||
"The resource is no longer available.": "Zdroj již není k dispozici.",
|
||||
"There might be a typing error in the address.": "Při zadávání adresy jste udělali chybu.",
|
||||
"What you can try:": "Co můžete vyzkoušet:",
|
||||
"Retype the address.": "Znovu zadat adresu.",
|
||||
"Go back to the previous page.": "Vrátit se na předchozí stránku.",
|
||||
"Coming Soon": "Připravujeme",
|
||||
wayToGetClickSendSMSToken: "API Username a API Key získáte na adrese {0} .",
|
||||
"Connection String": "Connection String",
|
||||
Query: "Dotaz",
|
||||
settingsCertificateExpiry: "Platnost TLS certifikátu",
|
||||
certificationExpiryDescription: "Aktivovat oznámení nad HTTPS dohledy, pokud platnost TLS certifikátu vyprší za:",
|
||||
"Setup Docker Host": "Nastavit Docker hostitele",
|
||||
"Connection Type": "Typ připojení",
|
||||
"Docker Daemon": "Docker Daemon",
|
||||
deleteDockerHostMsg: "Opravdu chcete odstranit tohoto docker hostitele ze všech dohledů?",
|
||||
socket: "Socket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker kontejner",
|
||||
"Container Name / ID": "ID / název kontejneru",
|
||||
"Docker Host": "Docker hostitel",
|
||||
"Docker Hosts": "Docker hostitelé",
|
||||
"ntfy Topic": "ntfy Topic",
|
||||
"Domain": "Doména",
|
||||
"Workstation": "Pracovní stanice",
|
||||
disableCloudflaredNoAuthMsg: "Používáte režim bez ověření, heslo není vyžadováno.",
|
||||
trustProxyDescription: "Důvěřovat 'X-Forwarded-*' hlavičkám. Pokud chcete získat správnou IP adresu klientů a vaše instance Uptime Kuma je schována za Nginx nebo Apache, měli byste tuto možnost zapnout.",
|
||||
wayToGetLineNotifyToken: "Přístupový token můžete získat na adrese {0}",
|
||||
Examples: "Příklady",
|
||||
"Home Assistant URL": "Home Assistant URL",
|
||||
"Long-Lived Access Token": "Dlouhodobý přístupový token",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Pro vytvoření dlouhodobého přístupový tokenu klikněte na název svého profilu (v levém dolním rohu) a následně v dolní části stránky klikněte na tlačítko Create Token. ",
|
||||
"Notification Service": "Oznamovací služba",
|
||||
"default: notify all devices": "výchozí: upozornit všechny zařízení",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Seznam dostupných oznamovacích služeb naleznete v Home Assistant v sekci \"Developer Tools > Services\", kde vyhledejte \"notification\" pro zjištění názvu zařízení.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Automatizaci můžete volitelně aktivovat prostřednictvím Home Assistant:",
|
||||
"Trigger type:": "Typ podmínky spuštění:",
|
||||
"Event type:": "Typ události:",
|
||||
"Event data:": "Data události:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "Následně vyberte akci, například přepnutí scény z RGB světla na červenou.",
|
||||
"Frontend Version": "Verze frontendu",
|
||||
"Frontend Version do not match backend version!": "Verze frontendu neodpovídá verzi backendu!",
|
||||
"Base URL": "Primární URL adresa",
|
||||
goAlertInfo: "GoAlert je aplikace s otevřeným zdrojovým kódem pro plánování hovorů, automatické eskalace a upozornění (jako jsou SMS nebo hlasové hovory). Automaticky zapojte správnou osobu, správným způsobem a ve správný čas! {0}",
|
||||
goAlertIntegrationKeyInfo: "Obecný API integrační klíč pro danou službu ve formátu \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" se obvykle nachází ve zkopírované URL jako hodnota parametru token.",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Zastaralé: V poslední době byla funkčnost aplikace značně rozšířena, nicméně součást pro zálohování nepokrývá všechny možnosti. Z tohoto důvodu není možné vygenerovat úplnou zálohu a zajistit obnovení všech dat.",
|
||||
backupRecommend: "Prosím, zálohujte si ručně celý svazek nebo datovou složku (./data/).",
|
||||
};
|
||||
|
@@ -68,7 +68,7 @@ export default {
|
||||
Timezone: "Zeitzone",
|
||||
"Search Engine Visibility": "Sichtbarkeit für Suchmaschinen",
|
||||
"Allow indexing": "Indizierung zulassen",
|
||||
"Discourage search engines from indexing site": "Halte Suchmaschinen von der Indexierung der Seite ab",
|
||||
"Discourage search engines from indexing site": "Suchmaschinen darum bitten, die Seite nicht zu indizieren",
|
||||
"Change Password": "Passwort ändern",
|
||||
"Current Password": "Aktuelles Passwort",
|
||||
"New Password": "Neues Passwort",
|
||||
@@ -78,7 +78,7 @@ export default {
|
||||
"Disable Auth": "Authentifizierung deaktivieren",
|
||||
"Enable Auth": "Authentifizierung aktivieren",
|
||||
"disableauth.message1": "Bist du sicher das du die <strong>Authentifizierung deaktivieren</strong> möchtest?",
|
||||
"disableauth.message2": "Es ist für <strong>jemanden der eine externe Authentifizierung</strong> vor Uptime Kuma geschaltet hat, wie z.B. Cloudflare Access.",
|
||||
"disableauth.message2": "Dies ist für Szenarien gedacht, <strong>in denen man eine externe Authentifizierung</strong> vor Uptime Kuma geschaltet hat, wie z.B. Cloudflare Access, Authelia oder andere Authentifizierungsmechanismen.",
|
||||
"Please use this option carefully!": "Bitte mit Vorsicht nutzen.",
|
||||
Logout: "Ausloggen",
|
||||
notificationDescription: "Benachrichtigungen müssen einem Monitor zugewiesen werden, damit diese funktionieren.",
|
||||
@@ -458,4 +458,122 @@ export default {
|
||||
"Domain Names": "Domainnamen",
|
||||
signedInDisp: "Angemeldet als {0}",
|
||||
signedInDispDisabled: "Authentifizierung deaktiviert.",
|
||||
dnsPortDescription: "DNS server port. Standard ist 53. Der Port kann jederzeit geändert werden.",
|
||||
topic: "Thema",
|
||||
topicExplanation: "MQTT Thema für den monitor",
|
||||
successMessage: "Erfolgsnachricht",
|
||||
successMessageExplanation: "MQTT Nachricht, die als Erfolg angesehen wird",
|
||||
error: "Fehler",
|
||||
critical: "kritisch",
|
||||
wayToGetPagerDutyKey: "Dieser kann unter Service -> Service Directory -> (Select a service) -> Integrations -> Add integration gefunden werden. Hier muss nach \"Events API V2\" gesucht werden. Mehr informationen {0}",
|
||||
"Integration Key": "Schlüssel der Integration",
|
||||
"Integration URL": "URL der Integration",
|
||||
"Auto resolve or acknowledged": "Automatisch lösen oder bestätigen",
|
||||
"do nothing": "nichts tun",
|
||||
"auto acknowledged": "automatisch bestätigen",
|
||||
"auto resolve": "automatisch lösen",
|
||||
"Bark Group": "Bark Gruppe",
|
||||
"Bark Sound": "Bark Klang",
|
||||
"HTTP Headers": "HTTP Kopfzeilen",
|
||||
"Trust Proxy": "Vertrauenswürdiger Proxy",
|
||||
Proxy: "Proxy",
|
||||
HomeAssistant: "Home Assistant",
|
||||
onebotHttpAddress: "OneBot HTTP Adresse",
|
||||
onebotMessageType: "OneBot Nachrichtentyp",
|
||||
onebotGroupMessage: "Gruppe",
|
||||
onebotPrivateMessage: "Privat",
|
||||
onebotUserOrGroupId: "Gruppe/Nutzer ID",
|
||||
onebotSafetyTips: "Zur Sicherheit ein access token setzen",
|
||||
"PushDeer Key": "PushDeer Schlüssel",
|
||||
RadiusSecret: "Radius Geheimnis",
|
||||
RadiusSecretDescription: "Geteiltes Geheimnis zwischen Client und Server",
|
||||
RadiusCalledStationId: "ID der angesprochenen Station",
|
||||
RadiusCalledStationIdDescription: "Identifikation des angesprochenen Geräts",
|
||||
RadiusCallingStationId: "ID der ansprechenden Station",
|
||||
RadiusCallingStationIdDescription: "Identifikation des ansprechenden Geräts",
|
||||
"Certificate Expiry Notification": "Benachrichtigung ablaufendes Zertifikat",
|
||||
"API Username": "API Nutzername",
|
||||
"API Key": "API Schlüssel",
|
||||
"Recipient Number": "Empfängernummer",
|
||||
"From Name/Number": "Von Name/Nummer",
|
||||
"Leave blank to use a shared sender number.": "Leer lassen um eine geteilte Sendernummer zu nutzen.",
|
||||
"Octopush API Version": "Octopush API Version",
|
||||
"Legacy Octopush-DM": "Legacy Octopush-DM",
|
||||
endpoint: "Endpunkt",
|
||||
octopushAPIKey: "\"API Schlüssel\" der HTTP API Zugangsdaten im control panel",
|
||||
octopushLogin: "\"Login\" der HTTP API Zugangsdaten im control panel",
|
||||
promosmsLogin: "API Login Name",
|
||||
promosmsPassword: "API Password",
|
||||
"pushoversounds pushover": "Pushover (Standard)",
|
||||
"pushoversounds bike": "Fahrrad",
|
||||
"pushoversounds bugle": "Signalhorn",
|
||||
"pushoversounds cashregister": "Kasse",
|
||||
"pushoversounds classical": "Klassisch",
|
||||
"pushoversounds cosmic": "Kosmisch",
|
||||
"pushoversounds falling": "Abfallend",
|
||||
"pushoversounds gamelan": "Gamelan",
|
||||
"pushoversounds incoming": "Eingang",
|
||||
"pushoversounds intermission": "Pause",
|
||||
"pushoversounds magic": "Magisch",
|
||||
"pushoversounds mechanical": "Mechanisch",
|
||||
"pushoversounds pianobar": "Piano Bar",
|
||||
"pushoversounds siren": "Sirene",
|
||||
"pushoversounds spacealarm": "Space Alarm",
|
||||
"pushoversounds tugboat": "Schlepper Horn",
|
||||
"pushoversounds alien": "Außerirdisch (lang)",
|
||||
"pushoversounds climb": "Ansteigende (lang)",
|
||||
"pushoversounds persistent": "Hartnäckig (lang)",
|
||||
"pushoversounds echo": "Pushover Echo (lang)",
|
||||
"pushoversounds updown": "Auf und Ab (lang)",
|
||||
"pushoversounds vibrate": "Nur vibrieren",
|
||||
"pushoversounds none": "Nichts (Stille)",
|
||||
pushyAPIKey: "Geheimer API Schlüssel",
|
||||
pushyToken: "Gerätetoken",
|
||||
"Show update if available": "Verfügbare Updates anzeigen",
|
||||
"Also check beta release": "Auch nach beta Versionen schauen",
|
||||
"Using a Reverse Proxy?": "Wird ein Reverse Proxy genutzt?",
|
||||
"Check how to config it for WebSocket": "Prüfen, wie er für die Nutzung mit WebSocket konfiguriert wird",
|
||||
"Steam Game Server": "Steam Game Server",
|
||||
"Most likely causes:": "Wahrscheinliche Ursachen:",
|
||||
"The resource is no longer available.": "Die Quelle ist nicht mehr verfügbar.",
|
||||
"There might be a typing error in the address.": "Es gibt einen Tippfehler in der Adresse.",
|
||||
"What you can try:": "Was du versuchen kannst:",
|
||||
"Retype the address.": "Schreibe die Adresse erneut.",
|
||||
"Go back to the previous page.": "Gehe zur vorigen Seite.",
|
||||
"Coming Soon": "Kommt bald",
|
||||
wayToGetClickSendSMSToken: "Du kannst einen API Nutzernamen und Schlüssel unter {0} erhalten.",
|
||||
"Connection String": "Verbindungstext",
|
||||
Query: "Abfrage",
|
||||
settingsCertificateExpiry: "TLS Zertifikatsablauf",
|
||||
certificationExpiryDescription: "HTTPS Monitore senden eine Benachrichtigung, wenn das Zertifikat abläuft in:",
|
||||
"Setup Docker Host": "Docker Host einrichten",
|
||||
"Connection Type": "Verbindungstyp",
|
||||
"Docker Daemon": "Docker Daemon",
|
||||
deleteDockerHostMsg: "Bist du sicher diesen docker host für alle Monitore zu löschen?",
|
||||
socket: "Socket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker Container",
|
||||
"Container Name / ID": "Container Name / ID",
|
||||
"Docker Host": "Docker Host",
|
||||
"Docker Hosts": "Docker Hosts",
|
||||
"ntfy Topic": "ntfy Thema",
|
||||
Domain: "Domain",
|
||||
Workstation: "Workstation",
|
||||
disableCloudflaredNoAuthMsg: "Du bist im nicht-authentifizieren Modus, ein Passwort wird nicht benötigt.",
|
||||
trustProxyDescription: "Vertraue 'X-Forwarded-*' headern. Wenn man die richtige client IP haben möchte und Uptime Kuma hinter einem Proxy wie Nginx or Apache läuft, wollte dies aktiviert werden.",
|
||||
wayToGetLineNotifyToken: "Du kannst hier ein Token erhalten: {0}",
|
||||
Examples: "Beispiele",
|
||||
"Home Assistant URL": "Home Assistant URL",
|
||||
"Long-Lived Access Token": "Lange gültiges Access Token",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Lange gültige Access Token können durch klicken auf den Profilnamen (unten links) und dann einen Klick auf Create Token am Ende erstellt werden. ",
|
||||
"Notification Service": "Benachrichtigungsdienst",
|
||||
"default: notify all devices": "standard: Alle Geräte benachrichtigen",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Eine Liste der Benachrichtigungsdiesnte kann im Home Assistant unter \"Developer Tools > Services\" gefunden werden, wnen man nach \"notification\" sucht um den Geräte-/Telefonnamen zu finden.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Automatisierungen können optional im Home Assistant ausgelöst werden:",
|
||||
"Trigger type:": "Auslösertyp:",
|
||||
"Event type:": "Ereignistyp:",
|
||||
"Event data:": "Ereignis daten:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "Dann eine Aktion wählen, zum Beispiel eine Scene wählen in der ein RGB Licht rot ist.",
|
||||
"Frontend Version": "Frontend Version",
|
||||
"Frontend Version do not match backend version!": "Die Frontend Version stimmt nicht mit der backend version überein!",
|
||||
};
|
||||
|
585
src/languages/el-GR.js
Normal file
585
src/languages/el-GR.js
Normal file
@@ -0,0 +1,585 @@
|
||||
export default {
|
||||
languageName: "Ελληνικά",
|
||||
checkEverySecond: "Έλεγχος κάθε {0} δευτερόλεπτα",
|
||||
retryCheckEverySecond: "Επανάληψη κάθε {0} δευτερόλεπτα",
|
||||
resendEveryXTimes: "Επανάληψη αποστολής ειδοποίησης κάθε {0} φορές",
|
||||
resendDisabled: "Η επανάληψη αποστολής ειδοποίησης είναι απενεργοποιημένη",
|
||||
retriesDescription: "Μέγιστες επαναλήψεις προτού η υπηρεσία επισημανθεί ως κατω και σταλεί μια ειδοποίηση",
|
||||
ignoreTLSError: "Παράβλεψη σφάλματος TLS/SSL για ιστότοπους HTTPS",
|
||||
upsideDownModeDescription: "Αναποδογυρίστε την κατάσταση. Εάν η υπηρεσία είναι προσβάσιμη, είναι ΚΑΤΩ.",
|
||||
maxRedirectDescription: "Μέγιστος αριθμός redirect που θα ακολουθήσουν. Ρυθμίστε το 0 για να απενεργοποιήσετε τα redirect.",
|
||||
acceptedStatusCodesDescription: "Επιλέξτε κωδικούς κατάστασης που θεωρούνται επιτυχή.",
|
||||
passwordNotMatchMsg: "Ο κωδικός δεν ταιριάζει.",
|
||||
notificationDescription: "Οι ειδοποιήσεις πρέπει να εκχωρηθούν σε μια παρακολούθηση για να λειτουργήσουν.",
|
||||
keywordDescription: "Αναζήτηση λέξης-κλειδιού σε απλή απόκριση HTML ή JSON. Η αναζήτηση είναι διάκριση πεζών-κεφαλαίων.",
|
||||
pauseDashboardHome: "Παύση",
|
||||
deleteMonitorMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την παρακολούθηση;",
|
||||
deleteNotificationMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την ειδοποίηση για όλες τις παρακολούθησης?",
|
||||
dnsPortDescription: "Θύρα διακομιστή DNS. Προεπιλογή σε 53. Μπορείτε να αλλάξετε τη θύρα ανά πάσα στιγμή.",
|
||||
resolverserverDescription: "Το Cloudflare είναι ο προεπιλεγμένος διακομιστής. Μπορείτε να αλλάξετε τον διακομιστή επίλυσης ανά πάσα στιγμήhe default server. You can change the resolver server anytime.",
|
||||
rrtypeDescription: "Επιλέξτε τον τύπο RR που θέλετε να παρακολουθήσετε",
|
||||
pauseMonitorMsg: "Είστε βέβαιοι ότι θέλετε να κάνετε παύση;",
|
||||
enableDefaultNotificationDescription: "Αυτή η ειδοποίηση θα είναι ενεργοποιημένη από προεπιλογή για νέες παρακολούθησης. Μπορείτε ακόμα να απενεργοποιήσετε την ειδοποίηση ξεχωριστά για κάθε παρακολούθηση.",
|
||||
clearEventsMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα συμβάντα για αυτήν την παρακολούθηση;",
|
||||
clearHeartbeatsMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε όλους τους καρδιακούς παλμούς για αυτήν την παρακολούθηση;",
|
||||
confirmClearStatisticsMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε ΟΛΑ τα στατιστικά στοιχεία;?",
|
||||
importHandleDescription: "Επιλέξτε «Παράλειψη υπάρχοντος» εάν θέλετε να παραλείψετε κάθε παρακολούθηση ή ειδοποίηση με το ίδιο όνομα. Το 'Overwrite' θα διαγράψει κάθε υπάρχουσα παρακολούθηση και ειδοποίηση.",
|
||||
confirmImportMsg: "Είστε βέβαιοι ότι θέλετε να εισαγάγετε το αντίγραφο ασφαλείας; Επαληθεύστε ότι έχετε επιλέξει τη σωστή επιλογή.",
|
||||
twoFAVerifyLabel: "Εισαγάγετε το 2FA κωδικό για να επαληθεύσετε: ",
|
||||
tokenValidSettingsMsg: "Ο κωδικός 2FA είναι έγκυρο! Τώρα μπορείτε να αποθηκεύσετε τις ρυθμίσεις 2FA",
|
||||
confirmEnableTwoFAMsg: "Είστε βέβαιοι ότι θέλετε να ενεργοποιήσετε το 2FA;",
|
||||
confirmDisableTwoFAMsg: "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε το 2FA;",
|
||||
Settings: "Ρυθμίσεις",
|
||||
Dashboard: "Πίνακας",
|
||||
"New Update": "Νέα αναβάθμιση",
|
||||
Language: "Γλώσσα",
|
||||
Appearance: "Εμφάνιση",
|
||||
Theme: "Θέμα",
|
||||
General: "Γενικά",
|
||||
"Primary Base URL": "Κύρια βασική διεύθυνση URL",
|
||||
Version: "Εκδοχή",
|
||||
"Check Update On GitHub": "Ελέγξτε για Ενημέρωση στο GitHub",
|
||||
List: "Λίστα",
|
||||
Add: "Προσθήκη",
|
||||
"Add New Monitor": "Προσθήκη νέας παρακολούθησης",
|
||||
"Quick Stats": "Γρήγορα στατιστικά",
|
||||
Up: "Πάνω",
|
||||
Down: "Κάτω",
|
||||
Pending: "Εκκρεμεί",
|
||||
Unknown: "Άγνωστο",
|
||||
Pause: "Παύση",
|
||||
Name: "Ονομα",
|
||||
Status: "Κατάσταση",
|
||||
DateTime: "ΗμερομηνίαΏρα",
|
||||
Message: "Μήνυμα",
|
||||
"No important events": "Δεν υπάρχουν σημαντικά γεγονότα",
|
||||
Resume: "Συνέχιση",
|
||||
Edit: "Επεξεργασία",
|
||||
Delete: "Διαγράφη",
|
||||
Current: "Current",
|
||||
Uptime: "Χρόνος λειτουργίας",
|
||||
"Cert Exp.": "Cert Exp.",
|
||||
day: "ημέρα | ημέρες",
|
||||
"-day": "-ημέρα",
|
||||
hour: "ώρα",
|
||||
"-hour": "-ώρα",
|
||||
Response: "Απάντηση",
|
||||
Ping: "Ping",
|
||||
"Monitor Type": "Τύπος παρακολούθησης",
|
||||
Keyword: "Λέξη-κλειδί",
|
||||
"Friendly Name": "Φιλικό όνομα",
|
||||
URL: "URL",
|
||||
Hostname: "Hostname",
|
||||
Port: "Port",
|
||||
"Heartbeat Interval": "Διάστημα καρδιακών παλμών",
|
||||
Retries: "Επαναλήψεις",
|
||||
"Heartbeat Retry Interval": "Διάστημα επανάληψης παλμών καρδιάς",
|
||||
"Resend Notification if Down X times consequently": "Αποστολή νέας ειδοποίησης εάν κατω X φορές κατά συνέχεια",
|
||||
Advanced: "Προχωρημένα",
|
||||
"Upside Down Mode": "Ανάποδη λειτουργία",
|
||||
"Max. Redirects": "Μέγιστη. Ανακατευθύνσεις",
|
||||
"Accepted Status Codes": "Αποδεκτοί Κωδικοί Κατάστασης",
|
||||
"Push URL": "Push URL",
|
||||
needPushEvery: "Θα πρέπει να καλείτε αυτήν τη διεύθυνση URL κάθε {0} δευτερόλεπτα.",
|
||||
pushOptionalParams: "Προαιρετικές παράμετροι: {0}",
|
||||
Save: "Αποθηκεύση",
|
||||
Notifications: "Ειδοποιήσεις",
|
||||
"Not available, please setup.": "Μη διαθέσιμο, παρακαλώ ρυθμίστε.",
|
||||
"Setup Notification": "Δημιουργία ειδοποίησης",
|
||||
Light: "Φωτεινό",
|
||||
Dark: "Σκοτεινό",
|
||||
Auto: "Αυτόματο",
|
||||
"Theme - Heartbeat Bar": "Θέμα - Μπάρα καρδιακών παλμών",
|
||||
Normal: "Κανονικό",
|
||||
Bottom: "Κάτω μέρος",
|
||||
None: "Τίποτα",
|
||||
Timezone: "Ζώνη ώρας",
|
||||
"Search Engine Visibility": "Ορατότητα μηχανών αναζήτησης",
|
||||
"Allow indexing": "Να επιτρέπεται η ευρετηρίαση",
|
||||
"Discourage search engines from indexing site": "Αποθαρρύνετε τις μηχανές αναζήτησης από την ευρετηρίαση ιστότοπου",
|
||||
"Change Password": "Αλλαγή κωδικού πρόσβασης",
|
||||
"Current Password": "Τρέχων κωδικός πρόσβασης",
|
||||
"New Password": "Νέος κωδικός πρόσβασης",
|
||||
"Repeat New Password": "Επαναλάβετε τον νέο κωδικό πρόσβασης",
|
||||
"Update Password": "Ενημέρωση κωδικού πρόσβασης",
|
||||
"Disable Auth": "Απενεργοποίηση ελέγχου ταυτότητας",
|
||||
"Enable Auth": "Ενεργοποίηση ελέγχου ταυτότητας",
|
||||
"disableauth.message1": "Είστε βέβαιοι ότι θέλετε να <strong>απενεργοποιήσετε τον έλεγχο ταυτότητας</strong>;",
|
||||
"disableauth.message2": "Έχει σχεδιαστεί για σενάρια <strong>όπου σκοπεύετε να εφαρμόσετε έλεγχο ταυτότητας τρίτου μέρους</strong> μπροστά από το Uptime Kuma, όπως το Cloudflare Access, Authelia ή άλλους μηχανισμούς ελέγχου ταυτότητας.",
|
||||
"Please use this option carefully!": "Χρησιμοποιήστε αυτή την επιλογή προσεκτικά!",
|
||||
Logout: "Αποσύνδεση",
|
||||
Leave: "Φύγετε",
|
||||
"I understand, please disable": "Καταλαβαίνω, απενεργοποιήστε",
|
||||
Confirm: "Επιβεβαίωση",
|
||||
Yes: "Ναί",
|
||||
No: "Οχι",
|
||||
Username: "Όνομα χρήστη",
|
||||
Password: "Κωδικός πρόσβασης",
|
||||
"Remember me": "Θυμήσου με",
|
||||
Login: "Σύνδεση",
|
||||
"No Monitors, please": "Δεν υπάρχουν παρακολούθησης παρακαλώ",
|
||||
"add one": "προσθέστε ένα",
|
||||
"Notification Type": "Είδος ειδοποίησης",
|
||||
Email: "Email",
|
||||
Test: "Δοκιμή",
|
||||
"Certificate Info": "Πληροφορίες πιστοποιητικού",
|
||||
"Resolver Server": "Διακομιστής επίλυσης",
|
||||
"Resource Record Type": "Τύπος εγγραφής πόρων",
|
||||
"Last Result": "Τελευταίο Αποτέλεσμα",
|
||||
"Create your admin account": "Δημιουργήστε τον λογαριασμό διαχειριστή σας",
|
||||
"Repeat Password": "Επαναλάβετε τον κωδικό πρόσβασης",
|
||||
"Import Backup": "Εισαγωγή αντιγράφων ασφαλείας",
|
||||
"Export Backup": "Εξαγωγή αντιγράφων ασφαλείας",
|
||||
Export: "Εξαγωγή",
|
||||
Import: "Εισαγωγή",
|
||||
respTime: "Χρόν. Aπό (ms)",
|
||||
notAvailableShort: "N/A",
|
||||
"Default enabled": "Προεπιλογή ενεργοποιημένη",
|
||||
"Apply on all existing monitors": "Εφαρμόστε σε όλες τις υπάρχουσες παρακολούθησης",
|
||||
Create: "Δημιουργία",
|
||||
"Clear Data": "Καθαρισμός δεδομένων",
|
||||
Events: "Γεγονότα",
|
||||
Heartbeats: "Παλμοι καρδιας",
|
||||
"Auto Get": "Αυτόματη λήψη",
|
||||
backupDescription: "Μπορείτε να δημιουργήσετε αντίγραφα ασφαλείας γία ολλες της παρακολούθησης και ειδοποιήσης σε ένα αρχείο JSON.",
|
||||
backupDescription2: "Σημείωση: δεν περιλαμβάνονται δεδομένα ιστορικού και συμβάντων.",
|
||||
backupDescription3: "Στο αρχείο εξαγωγής περιλαμβάνονται ευαίσθητα δεδομένα, όπως token ειδοποιήσεων. Aποθηκεύστε την εξαγωγή με ασφάλεια.",
|
||||
alertNoFile: "Επιλέξτε ένα αρχείο για εισαγωγή.",
|
||||
alertWrongFileType: "Επιλέξτε ένα αρχείο JSON.",
|
||||
"Clear all statistics": "Εκκαθάριση όλων των στατιστικών",
|
||||
"Skip existing": "Παράβλεψη υπάρχοντος",
|
||||
Overwrite: "Αντικατάσταση",
|
||||
Options: "Επιλογές",
|
||||
"Keep both": "Κράτα και τα δύο",
|
||||
"Verify Token": "Επαλήθευση Token",
|
||||
"Setup 2FA": "Ρύθμιση 2FA",
|
||||
"Enable 2FA": "Ενεργοποίηση 2FA",
|
||||
"Disable 2FA": "Απενεργοποίηση 2FA",
|
||||
"2FA Settings": "Ρυθμίσεις 2FA",
|
||||
"Two Factor Authentication": "Έλεγχος ταυτότητας δύο παραγόντων",
|
||||
Active: "Ενεργός",
|
||||
Inactive: "Ανενεργό",
|
||||
Token: "Token",
|
||||
"Show URI": "Εμφάνιση URI",
|
||||
Tags: "Ετικέτες",
|
||||
"Add New below or Select...": "Προσθήκη νέου παρακάτω ή Επιλέξτε...",
|
||||
"Tag with this name already exist.": "Υπάρχει ήδη η ετικέτα με αυτό το όνομα.",
|
||||
"Tag with this value already exist.": "Υπάρχει ήδη ετικέτα με αυτό το value.",
|
||||
color: "χρώμα",
|
||||
"value (optional)": "value (optional)",
|
||||
Gray: "Γκρί",
|
||||
Red: "Κόκκινο",
|
||||
Orange: "Πορτοκάλι",
|
||||
Green: "Πράσινο",
|
||||
Blue: "Μπλε",
|
||||
Indigo: "Indigo",
|
||||
Purple: "Μωβ",
|
||||
Pink: "Ροζ",
|
||||
"Search...": "Αναζήτηση...",
|
||||
"Avg. Ping": "Μέσo.Ping",
|
||||
"Avg. Response": "Μέσo. Aπάντηση",
|
||||
"Entry Page": "Σελίδα εισαγωγής",
|
||||
statusPageNothing: "Δεν υπάρχει τίποτα εδώ, προσθέστε μια ομάδα ή μια παρακολούθηση.",
|
||||
"No Services": "Δεν υπάρχουν υπηρεσίες",
|
||||
"All Systems Operational": "Όλα τα συστήματα λειτουργούν",
|
||||
"Partially Degraded Service": "Μερικώς υποβαθμισμένη υπηρεσία",
|
||||
"Degraded Service": "Υποβαθμισμένη υπηρεσία",
|
||||
"Add Group": "Προσθήκη γρουπ",
|
||||
"Add a monitor": "Προσθήκη παρακολούθησης",
|
||||
"Edit Status Page": "Επεξεργασία σελίδας κατάστασης",
|
||||
"Go to Dashboard": "Μεταβείτε στον Πίνακα ελέγχου",
|
||||
"Status Page": "Σελίδα κατάστασης",
|
||||
"Status Pages": "Σελίδες κατάστασης",
|
||||
defaultNotificationName: "Η ειδοποίηση μου {notification} ({number})",
|
||||
here: "εδώ",
|
||||
Required: "Απαιτείται",
|
||||
telegram: "Telegram",
|
||||
"Bot Token": "Διακριτικό Bot",
|
||||
wayToGetTelegramToken: "Μπορείτε να πάρετε ένα διακριτικό από {0}.",
|
||||
"Chat ID": "Chat ID",
|
||||
supportTelegramChatID: "Support Direct Chat / Group / Channel's Chat ID",
|
||||
wayToGetTelegramChatID: "Μπορείτε να λάβετε το αναγνωριστικό συνομιλίας σας στέλνοντας ένα μήνυμα στο bot και μεταβαίνοντας σε αυτήν τη διεύθυνση URL για να προβάλετε το chat_id:",
|
||||
"YOUR BOT TOKEN HERE": "ΤΟ BOT ΣΑΣ ΔΙΑΚΡΙΤΙΚΌ ΕΔΩ",
|
||||
chatIDNotFound: "Το Chat ID δεν βρέθηκε. Στείλτε πρώτα ένα μήνυμα σε αυτό το bot",
|
||||
webhook: "Webhook",
|
||||
"Post URL": "Post URL",
|
||||
"Content Type": "Τύπος περιεχομένου",
|
||||
webhookJsonDesc: "{0} είναι καλό για οποιονδήποτε σύγχρονο διακομιστή HTTP όπως το Express.js",
|
||||
webhookFormDataDesc: "{multipart} είναι καλό για την PHP. Το JSON θα πρέπει να αναλυθεί με {decodeFunction}",
|
||||
smtp: "Email (SMTP)",
|
||||
secureOptionNone: "None / STARTTLS (25, 587)",
|
||||
secureOptionTLS: "TLS (465)",
|
||||
"Ignore TLS Error": "Παράβλεψη σφάλματος TLS",
|
||||
"From Email": "Από Email",
|
||||
emailCustomSubject: "Προσαρμοσμένο θέμα",
|
||||
"To Email": "Προς Email",
|
||||
smtpCC: "CC",
|
||||
smtpBCC: "BCC",
|
||||
discord: "Discord",
|
||||
"Discord Webhook URL": "Discord Webhook URL",
|
||||
wayToGetDiscordURL: "Μπορείτε να το αποκτήσετε μεταβαίνοντας στις Ρυθμίσεις διακομιστή -> Ενσωματώσεις -> Δημιουργία Webhook",
|
||||
"Bot Display Name": "Εμφανιζόμενο όνομα bot",
|
||||
"Prefix Custom Message": "Προσαρμοσμένο μήνυμα",
|
||||
"Hello @everyone is...": "Γεια {'@'}everyone ειναι...",
|
||||
teams: "Microsoft Teams",
|
||||
"Webhook URL": "Webhook URL",
|
||||
wayToGetTeamsURL: "Μπορείτε να μάθετε πώς να δημιουργείτε μια διεύθυνση URL webhook {0}.",
|
||||
signal: "Signal",
|
||||
Number: "Αριθμός",
|
||||
Recipients: "Αποδέκτες",
|
||||
needSignalAPI: "Πρέπει να έχετε ένα signal client με REST API..",
|
||||
wayToCheckSignalURL: "Μπορείτε να ελέγξετε αυτό το URL για να δείτε πώς να ρυθμίσετε ένα:",
|
||||
signalImportant: "ΣΗΜΑΝΤΙΚΟ: Δεν μπορείτε να συνδυάσετε ομάδες και αριθμούς στους παραλήπτες!",
|
||||
gotify: "Gotify",
|
||||
"Application Token": "Token εφαρμογής",
|
||||
"Server URL": "URL διακομιστή",
|
||||
Priority: "Προτεραιότητα",
|
||||
slack: "Slack",
|
||||
"Icon Emoji": "Εικονίδιο Emoji",
|
||||
"Channel Name": "Όνομα καναλιού",
|
||||
"Uptime Kuma URL": "Uptime Kuma URL",
|
||||
aboutWebhooks: "Περισσότερες πληροφορίες σχετικά με τα Webhooks στο: {0}",
|
||||
aboutChannelName: "Εισαγάγετε το όνομα του καναλιού στο {0} Όνομα καναλιού εάν θέλετε να παρακάμψετε το κανάλι Webhook. Π.χ.: #other-channel",
|
||||
aboutKumaURL: "Εάν αφήσετε κενό το πεδίο URL Uptime Kuma, θα είναι προεπιλεγμένο στη σελίδα Project GitHub..",
|
||||
emojiCheatSheet: "Φύλλο εξαπάτησης emoji: {0}",
|
||||
"rocket.chat": "Rocket.Chat",
|
||||
pushover: "Pushover",
|
||||
pushy: "Pushy",
|
||||
PushByTechulus: "Push by Techulus",
|
||||
octopush: "Octopush",
|
||||
promosms: "PromoSMS",
|
||||
clicksendsms: "ClickSend SMS",
|
||||
lunasea: "LunaSea",
|
||||
apprise: "Apprise (Support 50+ Notification services)",
|
||||
GoogleChat: "Google Chat (Google Workspace only)",
|
||||
pushbullet: "Pushbullet",
|
||||
line: "Line Messenger",
|
||||
mattermost: "Mattermost",
|
||||
"User Key": "Κλειδί χρήστη",
|
||||
Device: "Συσκευή",
|
||||
"Message Title": "Τίτλος μηνύματος",
|
||||
"Notification Sound": "Ήχος ειδοποίησης",
|
||||
"More info on:": "Περισσότερες πληροφορίες στο: {0}",
|
||||
pushoverDesc1: "Η προτεραιότητα έκτακτης ανάγκης (2) έχει προεπιλεγμένο χρονικό όριο 30 δευτερολέπτων μεταξύ των επαναλήψεων και θα λήξει μετά από 1 ώρα.",
|
||||
pushoverDesc2: "Εάν θέλετε να στέλνετε ειδοποιήσεις σε διαφορετικές συσκευές, συμπληρώστε το πεδίο Συσκευή.",
|
||||
"SMS Type": "Τύπος SMS",
|
||||
octopushTypePremium: "Premium (Γρήγορη - συνιστάται για ειδοποίηση)",
|
||||
octopushTypeLowCost: "Χαμηλό κόστος (Αργό - μερικές φορές μπλοκάρεται από τον χειριστή)",
|
||||
checkPrice: "Ελέγξτε τις τιμές {0}:",
|
||||
apiCredentials: "API credentials",
|
||||
octopushLegacyHint: "Χρησιμοποιείτε την παλαιού τύπου έκδοση του Octopush (2011-2020) ή τη νέα έκδοση;",
|
||||
"Check octopush prices": "Ελέγξτε τις τιμές OctoPush {0}.",
|
||||
octopushPhoneNumber: "Αριθμός τηλεφώνου (διεθνής μορφή, π.χ.: +30694345678)",
|
||||
octopushSMSSender: "Όνομα αποστολέα SMS: 3-11 αλφαριθμητικοί χαρακτήρες και διάστημα (a-zA-Z0-9)",
|
||||
"LunaSea Device ID": "LunaSea Device ID",
|
||||
"Apprise URL": "Apprise URL",
|
||||
"Example:": "Παράδειγμα: {0}",
|
||||
"Read more:": "Διαβάστε περισσότερα: {0}",
|
||||
"Status:": "Κατάσταση: {0}",
|
||||
"Read more": "Διαβάστε περισσότερα",
|
||||
appriseInstalled: "Το Apprise έχει εγκατασταθεί.",
|
||||
appriseNotInstalled: "Το Apprise δεν έχει εγκατασταθεί. {0}",
|
||||
"Access Token": "Access Token",
|
||||
"Channel access token": "Channel Access Token",
|
||||
"Line Developers Console": "Line Developers Console",
|
||||
lineDevConsoleTo: "Line Developers Console - {0}",
|
||||
"Basic Settings": "Βασικές ρυθμίσεις",
|
||||
"User ID": "User ID",
|
||||
"Messaging API": "Messaging API",
|
||||
wayToGetLineChannelToken: "Πρώτα αποκτήστε πρόσβαση στο {0}, δημιουργήστε έναν πάροχο και ένα κανάλι (Messanging API) και, στη συνέχεια, μπορείτε να λάβετε το channel access token και το user ID από τα παραπάνω στοιχεία μενού.",
|
||||
"Icon URL": "Διεύθυνση URL εικονιδίου",
|
||||
aboutIconURL: "Μπορείτε να παρέχετε έναν σύνδεσμο προς μια εικόνα στο \"Icon URL\" για να παρακάμψετε την προεπιλεγμένη εικόνα προφίλ. Δεν θα χρησιμοποιηθεί εάν έχει οριστεί το εικονίδιο Emoji.",
|
||||
aboutMattermostChannelName: "Μπορείτε να παρακάμψετε το προεπιλεγμένο κανάλι στο οποίο δημοσιεύει το Webhook εισάγοντας το όνομα του καναλιού στο πεδίο \"Όνομα καναλιού\". Αυτό πρέπει να ενεργοποιηθεί στις ρυθμίσεις του Mattermost Webhook. Π.χ.: #other-channel",
|
||||
matrix: "Matrix",
|
||||
promosmsTypeEco: "SMS ECO - φθηνό αλλά αργό και συχνά υπερφορτωμένο. Περιορίζεται μόνο σε Πολωνούς παραλήπτες.",
|
||||
promosmsTypeFlash: "SMS FLASH - Το μήνυμα θα εμφανίζεται αυτόματα στη συσκευή του παραλήπτη. Περιορίζεται μόνο σε Πολωνούς παραλήπτες.",
|
||||
promosmsTypeFull: "SMS FULL - Premium επίπεδο SMS, Μπορείτε να χρησιμοποιήσετε το Όνομα Αποστολέα σας (Πρέπει πρώτα να καταχωρήσετε το όνομα). Αξιόπιστο για ειδοποιήσεις.",
|
||||
promosmsTypeSpeed: "SMS SPEED - Υψηλότερη προτεραιότητα στο σύστημα. Πολύ γρήγορο και αξιόπιστο αλλά ακριβό (περίπου διπλάσια τιμή SMS FULL).",
|
||||
promosmsPhoneNumber: "Αριθμός τηλεφώνου (για πολωνούς παραλήπτες Μπορείτε να παραλείψετε τους κωδικούς περιοχής)",
|
||||
promosmsSMSSender: "Όνομα αποστολέα SMS: Προεγγεγραμμένο όνομα ή ένα από τα προεπιλεγμένα: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
|
||||
"Feishu WebHookUrl": "Feishu WebHookURL",
|
||||
matrixHomeserverURL: "Homeserver URL (με http(s):// και προαιρετικά θύρα)",
|
||||
"Internal Room Id": "Internal Room ID",
|
||||
matrixDesc1: "Μπορείτε να βρείτε το internal room ID ανατρέχοντας στην ενότητα για προχωρημένους των ρυθμίσεων δωματίου στο πρόγραμμα-πελάτη Matrix. Θα πρέπει να μοιάζει με !QMdRCpUIfLwsfjxye6:home.server.",
|
||||
matrixDesc2: "Συνιστάται ανεπιφύλακτα να δημιουργήσετε έναν νέο χρήστη και να μην χρησιμοποιήσετε το διακριτικό πρόσβασης του χρήστη Matrix, καθώς θα επιτρέψει την πλήρη πρόσβαση στον λογαριασμό σας και σε όλα τα δωμάτια στα οποία συμμετέχετε. Αντίθετα, δημιουργήστε έναν νέο χρήστη και προσκαλέστε τον μόνο στο δωμάτιο στο οποίο θέλετε να λαμβάνετε την ειδοποίηση. Μπορείτε να λάβετε το access token εκτελώντας {0}",
|
||||
Method: "Μέθοδος",
|
||||
Body: "Σώμα",
|
||||
Headers: "Headers",
|
||||
PushUrl: "Push URL",
|
||||
HeadersInvalidFormat: "The request headers are not valid JSON: ",
|
||||
BodyInvalidFormat: "The request body is not valid JSON: ",
|
||||
"Monitor History": "Ιστορικο Παρακολούθησης",
|
||||
clearDataOlderThan: "Διατηρήστε τα δεδομένα ιστορικού παρακολούθησης για {0} ημέρες.",
|
||||
PasswordsDoNotMatch: "Οι κωδικοί πρόσβασης δεν ταιριάζουν.",
|
||||
records: "εγγραφές",
|
||||
"One record": "Μία εγγραφή",
|
||||
steamApiKeyDescription: "Για την παρακολούθηση ενός διακομιστή παιχνιδιών Steam χρειάζεστε ένα κλειδί Steam Web-API. Μπορείτε να καταχωρήσετε το κλειδί API σας εδώ: ",
|
||||
"Current User": "Τρέχων χρήστης",
|
||||
topic: "Θέμα",
|
||||
topicExplanation: "Θέμα MQTT προς παρακολούθηση",
|
||||
successMessage: "Μήνυμα επιτυχίας",
|
||||
successMessageExplanation: "Μήνυμα MQTT που θα θεωρηθεί επιτυχές",
|
||||
recent: "Πρόσφατος",
|
||||
Done: "Ολοκληρώθηκε",
|
||||
Info: "Πληροφορίες",
|
||||
Security: "Ασφάλεια",
|
||||
"Steam API Key": "Steam API Key",
|
||||
"Shrink Database": "Συρρίκνωση βάσης δεδομένων",
|
||||
"Pick a RR-Type...": "Επιλέξτε έναν τύπο RR...",
|
||||
"Pick Accepted Status Codes...": "Επιλέξτε Αποδεκτούς κωδικούς κατάστασης...",
|
||||
Default: "Προκαθορισμένο",
|
||||
"HTTP Options": "Επιλογές HTTP",
|
||||
"Create Incident": "Δημιουργία περιστατικού",
|
||||
Title: "Τίτλος",
|
||||
Content: "Περιεχόμενο",
|
||||
Style: "Στυλ",
|
||||
info: "πληροφορίες",
|
||||
warning: "προειδοποίηση",
|
||||
danger: "κίνδυνος",
|
||||
error: "σφάλμα",
|
||||
critical: "κριτικό",
|
||||
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": "Προσθέστε ένα",
|
||||
"No Monitors": "Χωρίς παρακολουθήσεις",
|
||||
"Untitled Group": "Ομάδα χωρίς τίτλο",
|
||||
Services: "Υπηρεσίες",
|
||||
Discard: "Απορρίψει",
|
||||
Cancel: "Ακυρο",
|
||||
"Powered by": "Με την υποστήριξη του",
|
||||
shrinkDatabaseDescription: "Ενεργοποίηση βάσης δεδομένων VACUUM για SQLite. Εάν η βάση δεδομένων σας έχει δημιουργηθεί μετά την έκδοση 1.10.0, το AUTO_VACUUM είναι ήδη ενεργοποιημένο και αυτή η ενέργεια δεν χρειάζεται.",
|
||||
serwersms: "SerwerSMS.pl",
|
||||
serwersmsAPIUser: "API Username (incl. webapi_ prefix)",
|
||||
serwersmsAPIPassword: "API κωδικός πρόσβασης",
|
||||
serwersmsPhoneNumber: "Αριθμός τηλεφώνου",
|
||||
serwersmsSenderName: "Όνομα αποστολέα SMS (καταχωρήθηκε μέσω της πύλης πελατών)",
|
||||
stackfield: "Stackfield",
|
||||
Customize: "Προσαρμογή",
|
||||
"Custom Footer": "Προσαρμογή Footer",
|
||||
"Custom CSS": "Προσαρμογή CSS",
|
||||
smtpDkimSettings: "Ρυθμίσεις DKIM",
|
||||
smtpDkimDesc: "Ανατρέξτε στο Nodemailer DKIM {0} για χρήση.",
|
||||
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)",
|
||||
wayToGetPagerDutyKey: "Μπορείτε να το λάβετε μεταβαίνοντας στο Service -> Service Directory -> (Επιλέξτε μια υπηρεσία) -> Integrations -> Add integration. Εδώ μπορείτε να κάνετε αναζήτηση για \"Events API V2\". Περισσότερες πληροφορίες {0}",
|
||||
"Integration Key": "Integration Key",
|
||||
"Integration URL": "Integration URL",
|
||||
"Auto resolve or acknowledged": "Αυτόματη επίλυση ή αναγνώριση",
|
||||
"do nothing": "μην κάνεις τίποτα",
|
||||
"auto acknowledged": "αυτόματη αναγνώριση",
|
||||
"auto resolve": "αυτόματη επίλυση",
|
||||
gorush: "Gorush",
|
||||
alerta: "Alerta",
|
||||
alertaApiEndpoint: "API Endpoint",
|
||||
alertaEnvironment: "Environment",
|
||||
alertaApiKey: "API Key",
|
||||
alertaAlertState: "Alert State",
|
||||
alertaRecoverState: "Recover State",
|
||||
deleteStatusPageMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν τη σελίδα κατάστασης?",
|
||||
Proxies: "Proxies",
|
||||
default: "Προκαθορισμένο",
|
||||
enabled: "Ενεργοποιημένο",
|
||||
setAsDefault: "Ορίσετε ως προεπιλογή",
|
||||
deleteProxyMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το proxy για όλες τις παρακολουθήσεις;",
|
||||
proxyDescription: "Πρέπει να εκχωρηθούν proxies σε μια οθπαρακολουθή για να λειτουργήσουν..",
|
||||
enableProxyDescription: "Το proxy δεν θα επηρεάσει τα αιτήματα της παρακολουθήσεις μέχρι να ενεργοποιηθεί. Μπορείτε να ελέγξετε την προσωρινή απενεργοποίηση του proxy από όλες τις παρακολουθήσεις βάσει κατάστασης ενεργοποίησης.",
|
||||
setAsDefaultProxyDescription: "Αυτός το proxy θα είναι ενεργοποιημένο από προεπιλογή για νέες παρακολουθήσεις. Μπορείτε ακόμα να απενεργοποιήσετε το proxy ξεχωριστά για κάθε οθόνη.",
|
||||
"Certificate Chain": "Certificate Chain",
|
||||
Valid: "Εγκυρο",
|
||||
Invalid: "Μη έγκυρο",
|
||||
AccessKeyId: "AccessKey ID",
|
||||
SecretAccessKey: "AccessKey Secret",
|
||||
PhoneNumbers: "PhoneNumbers",
|
||||
TemplateCode: "TemplateCode",
|
||||
SignName: "SignName",
|
||||
"Sms template must contain parameters: ": "Το πρότυπο SMS πρέπει να περιέχει παραμέτρους: ",
|
||||
"Bark Endpoint": "Bark Endpoint",
|
||||
"Bark Group": "Bark Ομάδα",
|
||||
"Bark Sound": "Bark Ήχος",
|
||||
WebHookUrl: "WebHookUrl",
|
||||
SecretKey: "SecretKey",
|
||||
"For safety, must use secret key": "Για ασφάλεια, πρέπει να χρησιμοποιήσετε secret key",
|
||||
"Device Token": "Device Token",
|
||||
Platform: "Platform",
|
||||
iOS: "iOS",
|
||||
Android: "Android",
|
||||
Huawei: "Huawei",
|
||||
High: "High",
|
||||
Retry: "Ξαναδοκιμάσετε",
|
||||
Topic: "Θέμα",
|
||||
"WeCom Bot Key": "WeCom Bot Key",
|
||||
"Setup Proxy": "Ρύθμιση Proxy",
|
||||
"Proxy Protocol": "Πρωτόκολλο Proxy",
|
||||
"Proxy Server": "Proxy Server",
|
||||
"Proxy server has authentication": "Το Proxy διαθέτει έλεγχο ταυτότητας",
|
||||
User: "Χρήστης",
|
||||
Installed: "Εγκατεστημένο",
|
||||
"Not installed": "Μη εγκατεστημενο",
|
||||
Running: "Τρέχη",
|
||||
"Not running": "Δεν τρεχη",
|
||||
"Remove Token": "Κατάργηση Token",
|
||||
Start: "Αρχή",
|
||||
Stop: "Στάση",
|
||||
"Uptime Kuma": "Uptime Kuma",
|
||||
"Add New Status Page": "Προσθήκη νέας σελίδας κατάστασης",
|
||||
Slug: "Slug",
|
||||
"Accept characters:": "Αποδοχή χαρακτήρων:",
|
||||
startOrEndWithOnly: "Ξεκινήστε ή τελειώστε μόνο με {0}",
|
||||
"No consecutive dashes": "Χωρίς διαδοχικές παύλες",
|
||||
Next: "Επόμενο",
|
||||
"The slug is already taken. Please choose another slug.": "Ο slug έχει ήδη πιαστεί. Επιλέξτε άλλο slug.",
|
||||
"No Proxy": "Οχι Proxy",
|
||||
Authentication: "Authentication",
|
||||
"HTTP Basic Auth": "HTTP Basic Auth",
|
||||
"New Status Page": "Νέας Σελίδα κατάστασης",
|
||||
"Page Not Found": "Η σελίδα δεν βρέθηκε",
|
||||
"Reverse Proxy": "Αντίστροφο Proxy",
|
||||
Backup: "Αντιγράφων ασφαλείας",
|
||||
About: "Σχετικά με το Uptime Kuma",
|
||||
wayToGetCloudflaredURL: "(Λήψη cloudflared από {0})",
|
||||
cloudflareWebsite: "Ιστοσελίδα Cloudflare",
|
||||
"Message:": "Μήνυμα:",
|
||||
"Don't know how to get the token? Please read the guide:": "Δεν ξέρετε πώς να αποκτήσετε το token; Διαβάστε τον οδηγό:",
|
||||
"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.": "Η τρέχουσα σύνδεση μπορεί να χαθεί εάν αυτή τη στιγμή συνδέεστε μέσω του Cloudflare Tunnel. Θέλετε σίγουρα να το σταματήσετε; Πληκτρολογήστε τον τρέχοντα κωδικό πρόσβασής σας για να τον επιβεβαιώσετε.",
|
||||
"HTTP Headers": "HTTP Headers",
|
||||
"Trust Proxy": "Εμπιστοσύνη του Proxy",
|
||||
"Other Software": "Other Software",
|
||||
"For example: nginx, Apache and Traefik.": "Για παράδειγμα: nginx, Apache και Traefik.",
|
||||
"Please read": "Παρακαλώ διαβάστε",
|
||||
"Subject:": "Θέμα:",
|
||||
"Valid To:": "Εγκυρο για:",
|
||||
"Days Remaining:": "Ημέρες που απομένουν:",
|
||||
"Issuer:": "Εκδότης:",
|
||||
"Fingerprint:": "Δακτυλικό αποτύπωμα:",
|
||||
"No status pages": "Δεν υπάρχουν σελίδες κατάστασης",
|
||||
"Domain Name Expiry Notification": "Ειδοποίηση λήξης ονόματος τομέα",
|
||||
Proxy: "Proxy",
|
||||
"Date Created": "Ημερομηνία Δημιουργίας",
|
||||
HomeAssistant: "Home Assistant",
|
||||
onebotHttpAddress: "OneBot HTTP Address",
|
||||
onebotMessageType: "OneBot Message Type",
|
||||
onebotGroupMessage: "Group",
|
||||
onebotPrivateMessage: "Private",
|
||||
onebotUserOrGroupId: "Group/User ID",
|
||||
onebotSafetyTips: "Για ασφάλεια, πρέπει να ορίσετε το acess token",
|
||||
"PushDeer Key": "PushDeer Key",
|
||||
"Footer Text": "Κείμενο υποσέλιδου",
|
||||
"Show Powered By": "Εμφάνιση Powered By",
|
||||
"Domain Names": "Ονόματα Τομέα",
|
||||
signedInDisp: "Συνδεθήκατε ως {0}",
|
||||
signedInDispDisabled: "Εξουσιοδότηση είναι απενεργοποιημένη.",
|
||||
RadiusSecret: "Radius Secret",
|
||||
RadiusSecretDescription: "Shared Secret μεταξύ client και το server",
|
||||
RadiusCalledStationId: "Called Station Id",
|
||||
RadiusCalledStationIdDescription: "Identifier της καλούμενης συσκευής",
|
||||
RadiusCallingStationId: "Calling Station Id",
|
||||
RadiusCallingStationIdDescription: "Identifier oτης συσκευής κλήσης",
|
||||
"Certificate Expiry Notification": "Ειδοποίηση Λήξης Πιστοποιητικού",
|
||||
"API Username": "API Username",
|
||||
"API Key": "API Key",
|
||||
"Recipient Number": "Αριθμός Παραλήπτη",
|
||||
"From Name/Number": "Από Όνομα/Αριθμός",
|
||||
"Leave blank to use a shared sender number.": "Αφήστε το κενό για να χρησιμοποιήσετε έναν κοινόχρηστο αριθμό αποστολέα.",
|
||||
"Octopush API Version": "Octopush API Version",
|
||||
"Legacy Octopush-DM": "Legacy Octopush-DM",
|
||||
endpoint: "endpoint",
|
||||
octopushAPIKey: "\"API key\" από το HTTP API credentials στον πίνακα ελέγχου",
|
||||
octopushLogin: "\"Login\" από το HTTP API credentials στον πίνακα ελέγχου",
|
||||
promosmsLogin: "API Login Name",
|
||||
promosmsPassword: "API Password",
|
||||
"pushoversounds pushover": "Pushover (default)",
|
||||
"pushoversounds bike": "Bike",
|
||||
"pushoversounds bugle": "Bugle",
|
||||
"pushoversounds cashregister": "Cash Register",
|
||||
"pushoversounds classical": "Classical",
|
||||
"pushoversounds cosmic": "Cosmic",
|
||||
"pushoversounds falling": "Falling",
|
||||
"pushoversounds gamelan": "Gamelan",
|
||||
"pushoversounds incoming": "Incoming",
|
||||
"pushoversounds intermission": "Intermission",
|
||||
"pushoversounds magic": "Magic",
|
||||
"pushoversounds mechanical": "Mechanical",
|
||||
"pushoversounds pianobar": "Piano Bar",
|
||||
"pushoversounds siren": "Siren",
|
||||
"pushoversounds spacealarm": "Space Alarm",
|
||||
"pushoversounds tugboat": "Tug Boat",
|
||||
"pushoversounds alien": "Alien Alarm (long)",
|
||||
"pushoversounds climb": "Climb (long)",
|
||||
"pushoversounds persistent": "Persistent (long)",
|
||||
"pushoversounds echo": "Pushover Echo (long)",
|
||||
"pushoversounds updown": "Up Down (long)",
|
||||
"pushoversounds vibrate": "Vibrate Only",
|
||||
"pushoversounds none": "None (silent)",
|
||||
pushyAPIKey: "Μυστικό API Key",
|
||||
pushyToken: "Τoken Συσκευής",
|
||||
"Show update if available": "Εμφάνιση ενημέρωσης εάν είναι διαθέσιμη",
|
||||
"Also check beta release": "Ελέγξτε επίσης την έκδοση beta",
|
||||
"Using a Reverse Proxy?": "Χρησιμοποιείτε reverse proxy;",
|
||||
"Check how to config it for WebSocket": "Ελέγξτε πώς να το ρυθμίσετε για το WebSocket",
|
||||
"Steam Game Server": "Διακομιστής παιχνιδιών Steam",
|
||||
"Most likely causes:": "Πιο πιθανές αιτίες:",
|
||||
"The resource is no longer available.": "Ο πόρος δεν είναι πλέον διαθέσιμος.",
|
||||
"There might be a typing error in the address.": "Μπορεί να υπάρχει σφάλμα πληκτρολόγησης στη διεύθυνση.",
|
||||
"What you can try:": "Τι μπορείτε να δοκιμάσετε:",
|
||||
"Retype the address.": "Πληκτρολογήστε ξανά τη διεύθυνση.",
|
||||
"Go back to the previous page.": "Επιστρέψτε στην προηγούμενη σελίδα.",
|
||||
"Coming Soon": "Ερχεται σύντομα",
|
||||
wayToGetClickSendSMSToken: "Μπορείτε να πάρετε το API Username και API Key απο {0} .",
|
||||
"Connection String": "Connection String",
|
||||
Query: "Query",
|
||||
settingsCertificateExpiry: "Λήξη πιστοποιητικού TLS",
|
||||
certificationExpiryDescription: "Οι παρακολουθήσεις HTTPS ενεργοποιούν ειδοποίηση όταν λήξει το πιστοποιητικό TLS σε:",
|
||||
"Setup Docker Host": "Ρύθμιση Docker Host",
|
||||
"Connection Type": "Τύπος σύνδεσης",
|
||||
"Docker Daemon": "Docker Daemon",
|
||||
deleteDockerHostMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον κεντρικό υπολογιστή βάσης για όλες τις παρακολουθήσεις;",
|
||||
socket: "Socket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker Container",
|
||||
"Container Name / ID": "Container Name / ID",
|
||||
"Docker Host": "Docker Host",
|
||||
"Docker Hosts": "Docker Hosts",
|
||||
"ntfy Topic": "ntfy Topic",
|
||||
Domain: "Domain",
|
||||
Workstation: "Workstation",
|
||||
disableCloudflaredNoAuthMsg: "Βρίσκεστε σε λειτουργία No Auth, δεν απαιτείται κωδικός πρόσβασης.",
|
||||
trustProxyDescription: "Εμπιστευτείτε τις κεφαλίδες 'X-Forwarded-*'. Εάν θέλετε να λάβετε τη σωστή IP πελάτη και το Uptime Kuma σας βρίσκεται πίσω το Nginx ή το Apache, θα πρέπει να το ενεργοποιήσετε.",
|
||||
wayToGetLineNotifyToken: "Μπορείτε να λάβετε ένα access token από το {0}",
|
||||
Examples: "Παραδείγματα",
|
||||
"Home Assistant URL": "Home Assistant URL",
|
||||
"Long-Lived Access Token": "Long-Lived Access Token",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token μπορεί να δημιουργηθεί κάνοντας κλικ στο όνομα του προφίλ σας (κάτω αριστερά) και κάνοντας κύλιση προς τα κάτω και, στη συνέχεια, κάντε κλικ στο Create Token. ",
|
||||
"Notification Service": "Υπηρεσία ειδοποιήσεων",
|
||||
"default: notify all devices": "προεπιλογή: ειδοποίηση όλων των συσκευών",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Μπορείτε να βρείτε μια λίστα με τις Υπηρεσίες ειδοποιήσεων στον Home assistant στην περιοχή \"Developer Tools > Services\" αναζήτηση για \"notification\" για να βρείτε το όνομα της συσκευής/τηλεφώνου σας.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Οι αυτοματισμοί μπορούν προαιρετικά να ενεργοποιηθούν στο Home Assistant:",
|
||||
"Trigger type:": "Τύπος ενεργοποίησης:",
|
||||
"Event type:": "Τύπος συμβάντος:",
|
||||
"Event data:": "Δεδομένα συμβάντος:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "Στη συνέχεια, επιλέξτε μια ενέργεια, για παράδειγμα αλλάξτε τη σκηνή στο σημείο όπου ένα φως RGB είναι κόκκινο.",
|
||||
"Frontend Version": "Έκδοση Frontend",
|
||||
"Frontend Version do not match backend version!": "Η Frontend έκδοση δεν ταιριάζει με την έκδοση backend!",
|
||||
"Base URL": "Βασική διεύθυνση URL",
|
||||
goAlertInfo: "Το GoAlert είναι μια εφαρμογή ανοιχτού κώδικα για προγραμματισμό κλήσεων, αυτοματοποιημένες κλιμακώσεις και ειδοποιήσεις (όπως SMS ή φωνητικές κλήσεις). Αλληλεπιδράστε αυτόματα με το σωστό άτομο, με τον σωστό τρόπο και τη σωστή στιγμή! {0}",
|
||||
goAlertIntegrationKeyInfo: "Λάβετε το generic API integration key για την υπηρεσία σε αυτήν τη μορφή \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" συνήθως την τιμή της παραμέτρου διακριτικού της αντιγραμμένης διεύθυνσης URL.",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Καταργήθηκε: Επειδή προστέθηκαν πολλές δυνατότητες και αυτή η δυνατότητα δημιουργίας αντιγράφων ασφαλείας δεν διατηρείται πολη, δεν μπορεί να δημιουργήσει ή να επαναφέρει ένα πλήρες αντίγραφο ασφαλείας.",
|
||||
backupRecommend: "Παρακαλούμε δημιουργήστε αντίγραφα ασφαλείας του volume ή του φακέλου δεδομένων (./data/) απευθείας.",
|
||||
};
|
@@ -11,11 +11,24 @@ export default {
|
||||
enableGRPCTls: "Allow to send gRPC request with TLS connection",
|
||||
grpcMethodDescription: "Method name is convert to cammelCase format such as sayHello, check, etc.",
|
||||
acceptedStatusCodesDescription: "Select status codes which are considered as a successful response.",
|
||||
Maintenance: "Maintenance",
|
||||
statusMaintenance: "Maintenance",
|
||||
"Schedule maintenance": "Schedule maintenance",
|
||||
"Affected Monitors": "Affected Monitors",
|
||||
"Pick Affected Monitors...": "Pick Affected Monitors...",
|
||||
"Start of maintenance": "Start of maintenance",
|
||||
"All Status Pages": "All Status Pages",
|
||||
"Select status pages...": "Select status pages...",
|
||||
recurringIntervalMessage: "Run once every day | Run once every {0} days",
|
||||
affectedMonitorsDescription: "Select monitors that are affected by current maintenance",
|
||||
affectedStatusPages: "Show this maintenance message on selected status pages",
|
||||
atLeastOneMonitor: "Select at least one affected monitor",
|
||||
passwordNotMatchMsg: "The repeat password does not match.",
|
||||
notificationDescription: "Notifications must be assigned to a monitor to function.",
|
||||
keywordDescription: "Search keyword in plain HTML or JSON response. The search is case-sensitive.",
|
||||
pauseDashboardHome: "Pause",
|
||||
deleteMonitorMsg: "Are you sure want to delete this monitor?",
|
||||
deleteMaintenanceMsg: "Are you sure want to delete this maintenance?",
|
||||
deleteNotificationMsg: "Are you sure want to delete this notification for all monitors?",
|
||||
dnsPortDescription: "DNS server port. Defaults to 53. You can change the port at any time.",
|
||||
resolverserverDescription: "Cloudflare is the default server. You can change the resolver server anytime.",
|
||||
@@ -559,9 +572,65 @@ export default {
|
||||
"Docker Host": "Docker Host",
|
||||
"Docker Hosts": "Docker Hosts",
|
||||
"ntfy Topic": "ntfy Topic",
|
||||
"Domain": "Domain",
|
||||
"Workstation": "Workstation",
|
||||
disableCloudflaredNoAuthMsg: "You are in No Auth mode, password is not require.",
|
||||
Domain: "Domain",
|
||||
Workstation: "Workstation",
|
||||
disableCloudflaredNoAuthMsg: "You are in No Auth mode, a password is not required.",
|
||||
trustProxyDescription: "Trust 'X-Forwarded-*' headers. If you want to get the correct client IP and your Uptime Kuma is behind such as Nginx or Apache, you should enable this.",
|
||||
wayToGetLineNotifyToken: "You can get an access token from {0}",
|
||||
Examples: "Examples",
|
||||
"Home Assistant URL": "Home Assistant URL",
|
||||
"Long-Lived Access Token": "Long-Lived Access Token",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ",
|
||||
"Notification Service": "Notification Service",
|
||||
"default: notify all devices": "default: notify all devices",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Automations can optionally be triggered in Home Assistant:",
|
||||
"Trigger type:": "Trigger type:",
|
||||
"Event type:": "Event type:",
|
||||
"Event data:": "Event data:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "Then choose an action, for example switch the scene to where an RGB light is red.",
|
||||
"Frontend Version": "Frontend Version",
|
||||
"Frontend Version do not match backend version!": "Frontend Version do not match backend version!",
|
||||
"Base URL": "Base URL",
|
||||
goAlertInfo: "GoAlert is a An open source application for on-call scheduling, automated escalations and notifications (like SMS or voice calls). Automatically engage the right person, the right way, and at the right time! {0}",
|
||||
goAlertIntegrationKeyInfo: "Get generic API integration key for the service in this format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" usually the value of token parameter of copied URL.",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Deprecated: Since a lot of features added and this backup feature is a bit unmaintained, it cannot generate or restore a complete backup.",
|
||||
backupRecommend: "Please backup the volume or the data folder (./data/) directly instead.",
|
||||
"Optional": "Optional",
|
||||
squadcast: "Squadcast",
|
||||
SendKey: "SendKey",
|
||||
"SMSManager API Docs": "SMSManager API Docs ",
|
||||
"Gateway Type": "Gateway Type",
|
||||
SMSManager: "SMSManager",
|
||||
"You can divide numbers with": "You can divide numbers with",
|
||||
"or": "or",
|
||||
recurringInterval: "Interval",
|
||||
"Recurring": "Recurring",
|
||||
strategyManual: "Active/Inactive Manually",
|
||||
warningTimezone: "It is using the server's timezone",
|
||||
weekdayShortMon: "Mon",
|
||||
weekdayShortTue: "Tue",
|
||||
weekdayShortWed: "Wed",
|
||||
weekdayShortThu: "Thu",
|
||||
weekdayShortFri: "Fri",
|
||||
weekdayShortSat: "Sat",
|
||||
weekdayShortSun: "Sun",
|
||||
dayOfWeek: "Day of Week",
|
||||
dayOfMonth: "Day of Month",
|
||||
lastDay: "Last Day",
|
||||
lastDay1: "Last Day of Month",
|
||||
lastDay2: "2nd Last Day of Month",
|
||||
lastDay3: "3rd Last Day of Month",
|
||||
lastDay4: "4th Last Day of Month",
|
||||
"No Maintenance": "No Maintenance",
|
||||
pauseMaintenanceMsg: "Are you sure want to pause?",
|
||||
"maintenanceStatus-under-maintenance": "Under Maintenance",
|
||||
"maintenanceStatus-inactive": "Inactive",
|
||||
"maintenanceStatus-scheduled": "Scheduled",
|
||||
"maintenanceStatus-ended": "Ended",
|
||||
"maintenanceStatus-unknown": "Unknown",
|
||||
"Display Timezone": "Display Timezone",
|
||||
"Server Timezone": "Server Timezone",
|
||||
statusPageMaintenanceEndDate: "End",
|
||||
};
|
||||
|
@@ -177,8 +177,16 @@ export default {
|
||||
"Add a monitor": "Ajouter une sonde",
|
||||
"Edit Status Page": "Modifier la page de statut",
|
||||
"Go to Dashboard": "Accéder au tableau de bord",
|
||||
"Status Page": "Status Page",
|
||||
"Status Pages": "Status Pages",
|
||||
"Status Page": "Page de statut",
|
||||
"Status Pages": "Pages de statut",
|
||||
"New Status Page": "Ajouter page de statut",
|
||||
"Add New Status Page": "Ajouter une page de statut",
|
||||
"No status pages": "Aucune page de statut.",
|
||||
"Accept characters:": "Caractères acceptés:",
|
||||
startOrEndWithOnly: "Commence uniquement par {0}",
|
||||
"No consecutive dashes": "Pas de double tirets",
|
||||
Next: "Continuer",
|
||||
"Setup Proxy": "Configuer Proxy",
|
||||
defaultNotificationName: "Ma notification {notification} numéro ({number})",
|
||||
here: "ici",
|
||||
Required: "Requis",
|
||||
@@ -192,7 +200,7 @@ export default {
|
||||
chatIDNotFound: "ID du salon introuvable, envoyez un message via le bot avant",
|
||||
webhook: "Webhook",
|
||||
"Post URL": "Post URL",
|
||||
"Content Type": "Content Type",
|
||||
"Content Type": "Type de contenu",
|
||||
webhookJsonDesc: "{0} est bien/bon pour tous les serveurs HTTP modernes comme express.js",
|
||||
webhookFormDataDesc: "{multipart} est bien/bon pour du PHP, vous avez juste besoin de mettre le json via/depuis {decodeFunction}",
|
||||
smtp: "Email (SMTP)",
|
||||
@@ -219,8 +227,8 @@ export default {
|
||||
wayToCheckSignalURL: "Vous pouvez regarder l'URL sur comment le mettre en place :",
|
||||
signalImportant: "IMPORTANT : Vous ne pouvez pas mixer les groupes et les numéros en destinataires !",
|
||||
gotify: "Gotify",
|
||||
"Application Token": "Application Token",
|
||||
"Server URL": "Server URL",
|
||||
"Application Token": "Jeton d'application",
|
||||
"Server URL": "URL du serveur",
|
||||
Priority: "Priorité",
|
||||
slack: "Slack",
|
||||
"Icon Emoji": "Icon Emoji",
|
||||
@@ -236,7 +244,7 @@ export default {
|
||||
octopush: "Octopush",
|
||||
promosms: "PromoSMS",
|
||||
lunasea: "LunaSea",
|
||||
apprise: "Apprise (Support 50+ Notification services)",
|
||||
apprise: "Apprise (Prend en charge plus de 50 services de notification)",
|
||||
pushbullet: "Pushbullet",
|
||||
line: "Line Messenger",
|
||||
mattermost: "Mattermost",
|
||||
@@ -261,7 +269,7 @@ export default {
|
||||
"Read more": "En savoir plus",
|
||||
appriseInstalled: "Apprise est installé.",
|
||||
appriseNotInstalled: "Apprise n'est pas installé. {0}",
|
||||
"Access Token": "Access Token",
|
||||
"Access Token": "Token d'accès",
|
||||
"Channel access token": "Token d'accès au canal",
|
||||
"Line Developers Console": "Ligne console de développeurs",
|
||||
lineDevConsoleTo: "Ligne console de développeurs - {0}",
|
||||
@@ -279,7 +287,7 @@ export default {
|
||||
promosmsTypeSpeed: "SMS SPEED - La plus haute des priorités dans le système. Très rapide et fiable mais cher (environ le double du prix d'un SMS FULL).",
|
||||
promosmsPhoneNumber: "Numéro de téléphone (Poiur les déstinataires Polonais, vous pouvez enlever les codes interna.)",
|
||||
promosmsSMSSender: "SMS Expéditeur : Nom pré-enregistré ou l'un de base : InfoSMS, SMS Info, MaxSMS, INFO, SMS",
|
||||
"Primary Base URL": "Primary Base URL",
|
||||
"Primary Base URL": "URL principale",
|
||||
emailCustomSubject: "Sujet personalisé",
|
||||
clicksendsms: "ClickSend SMS",
|
||||
checkPrice: "Vérification {0} tarifs :",
|
||||
@@ -309,4 +317,271 @@ export default {
|
||||
alertaApiKey: "Clé de l'API",
|
||||
alertaAlertState: "État de l'Alerte",
|
||||
alertaRecoverState: "État de récupération",
|
||||
resendEveryXTimes: "Renvoyez toutes les {0} fois",
|
||||
resendDisabled: "Renvoi désactivé",
|
||||
dnsPortDescription: "Port du serveur DNS. La valeur par défaut est 53. Vous pouvez modifier le port à tout moment.",
|
||||
"Resend Notification if Down X times consequently": "Renvoyer la notification a partir d'un certain temps",
|
||||
"Push URL": "Push URL",
|
||||
needPushEvery: "Vous devez appeler cette URL toutes les {0} secondes.",
|
||||
pushOptionalParams: "parametres optionnels: {0}",
|
||||
"disableauth.message1": "Voulez-vous vraiment <strong>désactiver l'authentification</strong>?",
|
||||
"disableauth.message2": "Il est conçu pour les scénarios <strong>où vous avez l'intention d'implémenter une authentification tierce</strong> devant Uptime Kuma, comme Cloudflare Access, Authelia ou d'autres mécanismes d'authentification.",
|
||||
"Please use this option carefully!": "Veuillez utiliser cette option avec précaution !",
|
||||
PushByTechulus: "Pousser par Techulus",
|
||||
GoogleChat: "Google Chat (Google Workspace uniquement)",
|
||||
Done: "Fait",
|
||||
Info: "Info",
|
||||
Security: "Sécurité",
|
||||
"Steam API Key": "Clé API Steam",
|
||||
"Shrink Database": "Réduire la base de données",
|
||||
"Pick a RR-Type...": "Pick a RR-Type...",
|
||||
"Pick Accepted Status Codes...": "Pick Accepted Status Codes...",
|
||||
Default: "Défaut",
|
||||
"HTTP Options": "HTTP Options",
|
||||
"Create Incident": "Créer un incident",
|
||||
Title: "Titre",
|
||||
Content: "Contenu",
|
||||
Style: "Style",
|
||||
info: "Info",
|
||||
warning: "Attention",
|
||||
danger: "Danger",
|
||||
error: "Erreur",
|
||||
critical: "Critique",
|
||||
primary: "Primaire",
|
||||
light: "Blanc",
|
||||
dark: "Noir",
|
||||
Post: "Post",
|
||||
"Please input title and content": "Veuillez entrer le titre et le contenu",
|
||||
Created: "Created",
|
||||
"Last Updated": "Dernière mise à jour",
|
||||
Unpin: "Détacher",
|
||||
"Switch to Light Theme": "Passer au thème clair",
|
||||
"Switch to Dark Theme": "Passer au thème sombre",
|
||||
"Show Tags": "Voir les étiquettes",
|
||||
"Hide Tags": "Masquer les étiquettes",
|
||||
Description: "Description",
|
||||
"No monitors available.": "Aucun moniteur disponible.",
|
||||
"Add one": "En rajouter un",
|
||||
"No Monitors": "Aucun moniteur",
|
||||
"Untitled Group": "Groupe sans titre",
|
||||
Services: "Services",
|
||||
Discard: "Annuler",
|
||||
Cancel: "Annuler",
|
||||
shrinkDatabaseDescription: "Déclencher la base de données VACUUM pour SQLite. Si votre base de données est créée après 1.10.0, AUTO_VACUUM est déjà activé et cette action n'est pas nécessaire.",
|
||||
serwersmsAPIUser: "Nom d'utilisateur de l'API (incl. webapi_ prefix)",
|
||||
serwersmsAPIPassword: "Mot de passe API",
|
||||
serwersmsPhoneNumber: "Numéro de téléphone",
|
||||
serwersmsSenderName: "Nom de l'expéditeur du SMS (enregistré via le portail client)",
|
||||
Customize: "Personnaliser",
|
||||
"Custom Footer": "Pied de page personnalisé",
|
||||
"Custom CSS": "CSS personnalisé",
|
||||
deleteStatusPageMsg: "Voulez-vous vraiment supprimer cette page d'état ?",
|
||||
Proxies: "Proxies",
|
||||
default: "Défaut",
|
||||
enabled: "Activé",
|
||||
setAsDefault: "Définir par défaut",
|
||||
deleteProxyMsg: "Voulez-vous vraiment supprimer ce proxy pour tous les moniteurs ?",
|
||||
proxyDescription: "Les proxys doivent être affectés à un moniteur pour fonctionner.",
|
||||
enableProxyDescription: "Ce proxy n'aura pas d'effet sur les demandes de moniteur tant qu'il n'est pas activé. Vous pouvez contrôler la désactivation temporaire du proxy de tous les moniteurs en fonction de l'état d'activation.",
|
||||
setAsDefaultProxyDescription: "Ce proxy sera activé par défaut pour les nouveaux moniteurs. Vous pouvez toujours désactiver le proxy séparément pour chaque moniteur.",
|
||||
Valid: "Valide",
|
||||
Invalid: "Non valide",
|
||||
User: "Utilisateur",
|
||||
Installed: "Installé",
|
||||
"Not installed": "Pas installé",
|
||||
"Remove Token": "Supprimer le jeton",
|
||||
Slug: "Chemin",
|
||||
"The slug is already taken. Please choose another slug.": "Le chemin est déjà pris. Veuillez choisir un autre chemin.",
|
||||
Authentication: "Authentication",
|
||||
"Page Not Found": "Page non trouvée",
|
||||
Backup: "Sauvegarde",
|
||||
About: "À propos de",
|
||||
"Footer Text": "Texte de pied de page",
|
||||
"Domain Names": "Noms de domaine",
|
||||
signedInDisp: "Connecté en tant que {0}",
|
||||
signedInDispDisabled: "Authentification désactivée.",
|
||||
"Show update if available": "Afficher la mise à jour si disponible",
|
||||
"Also check beta release": "Vérifiez également la version bêta",
|
||||
"Steam Game Server": "Serveur de jeu Steam",
|
||||
"Most likely causes:": "Causes les plus probables:",
|
||||
"The resource is no longer available.": "La ressource n'est plus disponible.",
|
||||
"There might be a typing error in the address.": "Il se peut qu'il y ait une erreur de frappe dans l'adresse.",
|
||||
"What you can try:": "Ce que vous pouvez essayer:",
|
||||
"Retype the address.": "Retapez l'adresse.",
|
||||
"Go back to the previous page.": "Retournez à la page précédente.",
|
||||
"Coming Soon": "À venir",
|
||||
settingsCertificateExpiry: "Expiration du certificat TLS",
|
||||
certificationExpiryDescription: "Les moniteurs HTTPS déclenchent une notification lorsque le certificat TLS expire dans:",
|
||||
"Setup Docker Host": "Configurer l'hôte Docker",
|
||||
"Connection Type": "Type de connexion",
|
||||
deleteDockerHostMsg: "Voulez-vous vraiment supprimer cet hôte Docker pour tous les moniteurs ?",
|
||||
"Container Name / ID": "Nom / ID du conteneur",
|
||||
"Docker Host": "Hôte Docker",
|
||||
"Docker Hosts": "Hôtes Docker",
|
||||
Domain: "Domaine",
|
||||
trustProxyDescription: "Faire confiance aux en-têtes 'X-Forwarded-*'. Si vous souhaitez obtenir la bonne adresse IP client et que votre Uptime Kuma est en retard, comme Nginx ou Apache, vous devez l'activer.",
|
||||
wayToGetLineNotifyToken: "Vous pouvez obtenir un jeton d'accès auprès de {0}",
|
||||
Examples: "Exemples",
|
||||
"Home Assistant URL": "Home Assistant URL",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Un jeton d'accès de longue durée peut être créé en cliquant sur le nom de votre profil (en bas à gauche) et en faisant défiler vers le bas, puis cliquez sur Créer un jeton. ",
|
||||
"Notification Service": "Service de notifications",
|
||||
"default: notify all devices": "par défaut: notifier tous les appareils",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Une liste des services de notification peut être trouvée dans Home Assistant sous \"Outils de développement > Services\" recherchez \"notification\" pour trouver le nom de votre appareil/téléphone.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Les automatisations peuvent éventuellement être déclenchées dans Home Assistant:",
|
||||
"Trigger type:": "Type de déclencheur:",
|
||||
"Event type:": "Type d'événement:",
|
||||
"Event data:": "Données d'événement:",
|
||||
topic: "Topic",
|
||||
topicExplanation: "MQTT sujet à surveiller",
|
||||
successMessage: "Message de réussite",
|
||||
successMessageExplanation: "MQTT message qui sera considéré comme un succès",
|
||||
"Powered by": "Propulsé par",
|
||||
serwersms: "SerwerSMS.pl",
|
||||
stackfield: "Stackfield",
|
||||
smtpDkimSettings: "Paramètres DKIM",
|
||||
smtpDkimDesc: "Veuillez vous référer au Nodemailer DKIM {0} pour l'utilisation.",
|
||||
documentation: "Documentation",
|
||||
smtpDkimDomain: "Nom de domaine",
|
||||
smtpDkimKeySelector: "Sélecteur de clé",
|
||||
smtpDkimPrivateKey: "Clé privée",
|
||||
smtpDkimHashAlgo: "Algorithme de hachage (facultatif)",
|
||||
smtpDkimheaderFieldNames: "Clés d'en-tête à signer (facultatif)",
|
||||
smtpDkimskipFields: "Clés d'en-tête à ne pas signer (facultatif)",
|
||||
wayToGetPagerDutyKey: "Vous pouvez l'obtenir en allant dans Service -> Annuaire des services -> (Sélectionner un service) -> Intégrations -> Ajouter une intégration. Ici, vous pouvez rechercher \"Events API V2\". Plus d'infos {0}",
|
||||
"Integration Key": "Clé d'intégration",
|
||||
"Integration URL": "URL d'intégration",
|
||||
"Auto resolve or acknowledged": "Résolution automatique ou accusé de réception",
|
||||
"do nothing": "ne fais rien",
|
||||
"auto acknowledged": "accusé de réception automatique",
|
||||
"auto resolve": "résolution automatique",
|
||||
AccessKeyId: "ID de clé d'accès",
|
||||
SecretAccessKey: "Clé secrète d'accès",
|
||||
PhoneNumbers: "Les numéros de téléphone",
|
||||
SignName: "Signature",
|
||||
"Sms template must contain parameters: ": "Le modèle de SMS doit contenir des paramètres : ",
|
||||
SecretKey: "Clé secrète",
|
||||
"For safety, must use secret key": "Pour la sécurité, doit utiliser la clé secrète",
|
||||
"Device Token": "Jeton d'appareil",
|
||||
Platform: "Plateforme",
|
||||
Retry: "Recommencez",
|
||||
Topic: "Topic",
|
||||
"Proxy server has authentication": "Le serveur proxy a une authentification",
|
||||
Running: "Fonctionne",
|
||||
"Not running": "Ne fonctionne pas",
|
||||
Start: "Start",
|
||||
Stop: "Stop",
|
||||
"Uptime Kuma": "Uptime Kuma",
|
||||
"No Proxy": "Pas de Proxy",
|
||||
"HTTP Basic Auth": "Authentification de base HTTP",
|
||||
"Reverse Proxy": "Proxy inverse",
|
||||
wayToGetCloudflaredURL: "(Télécharger cloudflared depuis {0})",
|
||||
cloudflareWebsite: "le site Cloudflare ",
|
||||
"Message:": "Message:",
|
||||
"Don't know how to get the token? Please read the guide:": "Vous ne savez pas comment obtenir le jeton ? Veuillez lire le guide:",
|
||||
"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 connexion actuelle peut être perdue si vous vous connectez actuellement via Cloudflare Tunnel. Êtes-vous sûr de vouloir l'arrêter ? Tapez votre mot de passe actuel pour le confirmer.",
|
||||
"HTTP Headers": "En-têtes HTTP",
|
||||
"Trust Proxy": "Proxy de confiance",
|
||||
"Other Software": "Autres logiciels",
|
||||
"For example: nginx, Apache and Traefik.": "Par exemple : nginx, Apache et Traefik.",
|
||||
"Please read": "S'il vous plaît Lisez",
|
||||
"Valid To:": "Valable pour:",
|
||||
"Days Remaining:": "Jours restant:",
|
||||
"Domain Name Expiry Notification": "Notification d'expiration de nom de domaine",
|
||||
"Date Created": "Date de création",
|
||||
HomeAssistant: "Home Assistant",
|
||||
onebotHttpAddress: "Adresse HTTP OneBot",
|
||||
onebotMessageType: "Type de message OneBot",
|
||||
onebotGroupMessage: "Groupe",
|
||||
onebotUserOrGroupId: "ID de groupe/utilisateur",
|
||||
onebotSafetyTips: "Pour des raisons de sécurité, vous devez définir un jeton d'accès",
|
||||
"PushDeer Key": "Clé PushDeer",
|
||||
"Show Powered By": "Afficher \"Propulsé par\"",
|
||||
RadiusSecretDescription: "Secret partagé entre le client et le serveur",
|
||||
RadiusCalledStationId: "Identifiant de la station appelée",
|
||||
RadiusCalledStationIdDescription: "Identifiant de l'appareil appelé",
|
||||
RadiusCallingStationId: "Identifiant de la station appelante",
|
||||
RadiusCallingStationIdDescription: "Identifiant de l'appareil appelant",
|
||||
"Certificate Expiry Notification": "Notification d'expiration du certificat",
|
||||
"API Username": "Nom d'utilisateur de l'API",
|
||||
"API Key": "clé API",
|
||||
"Recipient Number": "Numéro du destinataire",
|
||||
"From Name/Number": "De Nom/Numéro",
|
||||
"Leave blank to use a shared sender number.": "Laisser vide pour utiliser un numéro d'expéditeur partagé.",
|
||||
"Octopush API Version": "Version de l'API Octopush",
|
||||
octopushAPIKey: "\"Clé API\" à partir des informations d'identification de l'API HTTP dans le panneau de configuration",
|
||||
octopushLogin: "\"Connexion\" à partir des informations d'identification de l'API HTTP dans le panneau de configuration",
|
||||
"Using a Reverse Proxy?": "Utiliser un proxy inverse ?",
|
||||
"Check how to config it for WebSocket": "Vérifiez comment le configurer pour WebSocket",
|
||||
wayToGetClickSendSMSToken: "Vous pouvez obtenir le nom d'utilisateur API et la clé API à partir de {0} .",
|
||||
"Connection String": "Chaîne de connexion",
|
||||
Query: "Requête",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Conteneur Docker",
|
||||
Workstation: "Poste de travail",
|
||||
disableCloudflaredNoAuthMsg: "Vous êtes en mode No Auth, un mot de passe n'est pas nécessaire.",
|
||||
"Long-Lived Access Token": "Jeton d'accès de longue durée",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "Ensuite, choisissez une action, par exemple basculer la scène là où une lumière RVB est rouge.",
|
||||
"Frontend Version": "Frontend Version",
|
||||
"Frontend Version do not match backend version!": "La version frontale ne correspond pas à la version principale !",
|
||||
"Base URL": "URL de base",
|
||||
goAlertInfo: "GoAlert est une application open source pour la planification des appels, les escalades automatisées et les notifications (comme les SMS ou les appels vocaux). Engagez automatiquement la bonne personne, de la bonne manière et au bon moment ! {0}",
|
||||
goAlertIntegrationKeyInfo: "Obtenez la clé d'intégration d'API générique pour le service dans ce format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" généralement la valeur du paramètre de jeton de l'URL copiée.",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Obsolète : étant donné que de nombreuses fonctionnalités ont été ajoutées et que cette fonctionnalité de sauvegarde est un peu non maintenue, elle ne peut pas générer ou restaurer une sauvegarde complète.",
|
||||
backupRecommend: "Veuillez sauvegarder le volume ou le dossier de données (./data/) directement à la place.",
|
||||
Optional: "Optionnel",
|
||||
squadcast: "Squadcast",
|
||||
Maintenance: "Maintenance",
|
||||
statusMaintenance: "Maintenance",
|
||||
"Schedule maintenance": "Planifier la maintenance",
|
||||
"Affected Monitors": "Moniteurs concernés",
|
||||
"Pick Affected Monitors...": "Sélectionnez les moniteurs concernés...",
|
||||
"Start of maintenance": "Début de la maintenance",
|
||||
"All Status Pages": "Toutes les pages d'état",
|
||||
"Select status pages...": "Sélectionnez les pages d'état...",
|
||||
recurringIntervalMessage: "Exécuter une fois par jour | Exécuter une fois tous les {0} jours",
|
||||
affectedMonitorsDescription: "Sélectionnez les moniteurs concernés par la maintenance en cours",
|
||||
affectedStatusPages: "Afficher ce message de maintenance sur les pages d'état sélectionnées",
|
||||
atLeastOneMonitor: "Sélectionnez au moins un moniteur concerné",
|
||||
deleteMaintenanceMsg: "Voulez-vous vraiment supprimer cette maintenance ?",
|
||||
pushyAPIKey: "Clé API secrète",
|
||||
pushyToken: "Jeton d'appareil",
|
||||
"You can divide numbers with": "Vous pouvez diviser des nombres avec",
|
||||
or: "ou",
|
||||
recurringInterval: "Intervalle",
|
||||
Recurring: "Récurrent",
|
||||
"Single Maintenance Window": "Fenêtre de maintenance unique",
|
||||
"Maintenance Time Window of a Day": "Fenêtre de temps de maintenance",
|
||||
"Effective Date Range": "Plage de dates d'effet",
|
||||
strategyManual: "activer/desactiver manuellement",
|
||||
warningTimezone: "Il utilise le fuseau horaire du serveur",
|
||||
weekdayShortMon: "Lun",
|
||||
weekdayShortTue: "Mar",
|
||||
weekdayShortWed: "Mer",
|
||||
weekdayShortThu: "Jeu",
|
||||
weekdayShortFri: "Ven",
|
||||
weekdayShortSat: "Sam",
|
||||
weekdayShortSun: "Dim",
|
||||
dayOfWeek: "Jour de la semaine",
|
||||
dayOfMonth: "Jour du mois",
|
||||
lastDay: "Dernier jour",
|
||||
lastDay1: "Dernier jour du mois",
|
||||
lastDay2: "2ème dernier jour du mois",
|
||||
lastDay3: "3ème dernier jour du mois",
|
||||
lastDay4: "4ème dernier jour du mois",
|
||||
"No Maintenance": "Aucune Maintenance",
|
||||
pauseMaintenanceMsg: "Voulez-vous vraiment mettre en pause ?",
|
||||
"maintenanceStatus-under-maintenance": "En maintenance",
|
||||
"maintenanceStatus-inactive": "Inactif",
|
||||
"maintenanceStatus-scheduled": "Programmé",
|
||||
"maintenanceStatus-ended": "Terminé",
|
||||
"maintenanceStatus-unknown": "Inconnue",
|
||||
"Display Timezone": "Afficher le fuseau horaire",
|
||||
"Server Timezone": "Fuseau horaire du serveur",
|
||||
"Date and Time": "Date et heure",
|
||||
"DateTime Range": "Plage de dates et d'heures",
|
||||
Strategy: "Stratégie",
|
||||
statusPageMaintenanceEndDate: "Fin",
|
||||
"Free Mobile User Identifier": "Identifiant d'utilisateur Free Mobile",
|
||||
"Free Mobile API Key": "Clé API Free Mobile",
|
||||
};
|
||||
|
@@ -80,7 +80,7 @@ export default {
|
||||
pushOptionalParams: "Neobavezni parametri: {0}",
|
||||
Save: "Spremi",
|
||||
Notifications: "Obavijesti",
|
||||
"Not available, please setup.": "Obavijesti nisu dostupne, potrebno dodati novu obavijest.",
|
||||
"Not available, please setup.": "Nije dostupno, potrebno je dodati novu stavku.",
|
||||
"Setup Notification": "Dodaj obavijest",
|
||||
Light: "Svijetli način",
|
||||
Dark: "Tamni način",
|
||||
@@ -129,7 +129,7 @@ export default {
|
||||
Export: "Izvoz",
|
||||
Import: "Uvoz",
|
||||
respTime: "Vrijeme odgovora (ms)",
|
||||
notAvailableShort: "N/A",
|
||||
notAvailableShort: "ne postoji",
|
||||
"Default enabled": "Omogući za nove monitore",
|
||||
"Apply on all existing monitors": "Primijeni na postojeće monitore",
|
||||
Create: "Kreiraj",
|
||||
@@ -375,4 +375,207 @@ export default {
|
||||
alertaAlertState: "Stanje upozorenja",
|
||||
alertaRecoverState: "Stanje oporavka",
|
||||
deleteStatusPageMsg: "Sigurno želite obrisati ovu statusnu stranicu?",
|
||||
resendEveryXTimes: "Ponovno pošalji svakih {0} puta",
|
||||
resendDisabled: "Ponovno slanje je onemogućeno",
|
||||
dnsPortDescription: "Port DNS poslužitelja. Zadana vrijednost je 53. Moguće je promijeniti ga u svakom trenutku.",
|
||||
"Resend Notification if Down X times consequently": "Ponovno pošalji obavijest ako je usluga nedostupna više puta zaredom",
|
||||
topic: "Tema",
|
||||
topicExplanation: "MQTT tema koja će se monitorirati",
|
||||
successMessage: "Poruka o uspjehu",
|
||||
successMessageExplanation: "MQTT poruka koja se smatra uspješnom",
|
||||
error: "greška",
|
||||
critical: "kritično",
|
||||
Customize: "Customize",
|
||||
"Custom Footer": "Prilagođeno podnožje",
|
||||
"Custom CSS": "Prilagođeni CSS",
|
||||
wayToGetPagerDutyKey: "Ključ možete dobiti odlaskom na \"Service -> Service Directory -> (Odabrani servis) -> Integrations -> Add integration\". Ovdje pretražite za \"Events API V2\". Više informacija {0}",
|
||||
"Integration Key": "Ključ integracije",
|
||||
"Integration URL": "URL integracije",
|
||||
"Auto resolve or acknowledged": "Automatsko razrješavanje i priznavanje",
|
||||
"do nothing": "Ne radi ništa",
|
||||
"auto acknowledged": "Automatsko priznavanje",
|
||||
"auto resolve": "Automatsko razrješavanje",
|
||||
Proxies: "Proxy poslužitelji",
|
||||
default: "Zadano",
|
||||
enabled: "Omogućeno",
|
||||
setAsDefault: "Postavi kao zadano",
|
||||
deleteProxyMsg: "Sigurno želite obrisati ovaj proxy za sve monitore?",
|
||||
proxyDescription: "Proxy poslužitelji moraju biti dodijeljni monitoru kako bi funkcionirali.",
|
||||
enableProxyDescription: "Onemogućeni proxy poslužitelj neće imati učinak na zahtjeve monitora. Možete privremeno onemogućiti proxy poslužitelja za sve monitore.",
|
||||
setAsDefaultProxyDescription: "Ovaj proxy poslužitelj bit će odmah omogućen za nove monitore. I dalje ga možete onemogućiti za svaki monitor zasebno.",
|
||||
"Certificate Chain": "Lanac certifikata",
|
||||
Valid: "Važeći",
|
||||
Invalid: "Nevažeći",
|
||||
AccessKeyId: "AccessKey ID",
|
||||
SecretAccessKey: "AccessKey tajni ključ",
|
||||
PhoneNumbers: "Telefonski brojevi",
|
||||
TemplateCode: "Predložak koda",
|
||||
SignName: "Potpis",
|
||||
"Sms template must contain parameters: ": "SMS predložak mora sadržavati parametre: ",
|
||||
"Bark Endpoint": "Bark krajnja točka (endpoint)",
|
||||
"Bark Group": "Bark grupa",
|
||||
"Bark Sound": "Bark zvuk",
|
||||
WebHookUrl: "WebHookUrl",
|
||||
SecretKey: "Tajni ključ",
|
||||
"For safety, must use secret key": "Korištenje tajnog ključa je obavezno",
|
||||
"Device Token": "Token uređaja",
|
||||
Platform: "Platforma",
|
||||
iOS: "iOS",
|
||||
Android: "Android",
|
||||
Huawei: "Huawei",
|
||||
High: "Visoko",
|
||||
Retry: "Ponovnih pokušaja",
|
||||
Topic: "Tema",
|
||||
"WeCom Bot Key": "WeCom ključ Bota",
|
||||
"Setup Proxy": "Dodaj proxy poslužitelj",
|
||||
"Proxy Protocol": "Protokol",
|
||||
"Proxy Server": "Proxy poslužitelj",
|
||||
"Proxy server has authentication": "Proxy poslužitelj ima autentikaciju",
|
||||
User: "Korisnik",
|
||||
Installed: "Instalirano",
|
||||
"Not installed": "Nije instalirano",
|
||||
Running: "Pokrenuto",
|
||||
"Not running": "Nije pokrenuto",
|
||||
"Remove Token": "Ukloni Token",
|
||||
Start: "Pokreni",
|
||||
Stop: "Zaustavi",
|
||||
"Uptime Kuma": "Uptime Kuma",
|
||||
"Add New Status Page": "Dodaj novu statusnu stranicu",
|
||||
Slug: "Slug",
|
||||
"Accept characters:": "Dozvoljeni znakovi:",
|
||||
startOrEndWithOnly: "Započinje ili završava znakovima {0}",
|
||||
"No consecutive dashes": "Bez uzastopnih povlaka",
|
||||
Next: "Sljedeće",
|
||||
"The slug is already taken. Please choose another slug.": "Slug je zauzet. Odaberite novi slug.",
|
||||
"No Proxy": "Bez proxy poslužitelja",
|
||||
Authentication: "Autentikacija",
|
||||
"HTTP Basic Auth": "HTTP Basic Auth",
|
||||
"New Status Page": "Dodaj statusnu stranicu",
|
||||
"Page Not Found": "Stranica nije pronađena",
|
||||
"Reverse Proxy": "Reverzni proxy",
|
||||
Backup: "Sigurnosno kopiranje",
|
||||
About: "O Uptime Kumi",
|
||||
wayToGetCloudflaredURL: "(Preuzmite cloudflared s {0})",
|
||||
cloudflareWebsite: "Cloudflare web stranice",
|
||||
"Message:": "Poruka:",
|
||||
"Don't know how to get the token? Please read the guide:": "Ne znate kako doći do tokena? Pročitajte vodič:",
|
||||
"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.": "Trenutna veza možda bude prekinuta jer se koristi Cloudflare tuneliranje. Sigurno želite zaustaviti? Unesite lozinku za potvrdu.",
|
||||
"HTTP Headers": "HTTP zaglavlja",
|
||||
"Trust Proxy": "Vjeruj proxy poslužitelju",
|
||||
"Other Software": "Ostali programi",
|
||||
"For example: nginx, Apache and Traefik.": "Primjerice: nginx, Apache ili Traefik.",
|
||||
"Please read": "Molimo pročitajte",
|
||||
"Subject:": "Predmet:",
|
||||
"Valid To:": "Valjano do:",
|
||||
"Days Remaining:": "Preostalo dana:",
|
||||
"Issuer:": "Izdavatelj:",
|
||||
"Fingerprint:": "Fingerprint:",
|
||||
"No status pages": "Nema statusnih stranica",
|
||||
"Domain Name Expiry Notification": "Obavijest za istek domena",
|
||||
Proxy: "Proxy",
|
||||
"Date Created": "Datum stvaranja",
|
||||
HomeAssistant: "Home Assistant",
|
||||
onebotHttpAddress: "OneBot HTTP adresa",
|
||||
onebotMessageType: "OneBot tip poruke",
|
||||
onebotGroupMessage: "Grupna",
|
||||
onebotPrivateMessage: "Privatna",
|
||||
onebotUserOrGroupId: "ID korisnika/grupe",
|
||||
onebotSafetyTips: "Pristupni token mora biti postavljen",
|
||||
"PushDeer Key": "PushDeer ključ",
|
||||
"Footer Text": "Tekst podnožja",
|
||||
"Show Powered By": "Pokaži natpis 'Pokreće...'",
|
||||
"Domain Names": "Domene",
|
||||
signedInDisp: "Prijavljeni ste kao {0}",
|
||||
signedInDispDisabled: "Autentikacija onemogućena.",
|
||||
RadiusSecret: "Radius Tajna",
|
||||
RadiusSecretDescription: "Dijeljena Tajna između klijenta i poslužitelja",
|
||||
RadiusCalledStationId: "Called Station ID",
|
||||
RadiusCalledStationIdDescription: "Identifikator pozivne stanice",
|
||||
RadiusCallingStationId: "Calling Station ID",
|
||||
RadiusCallingStationIdDescription: "Identifikator pozivajuće stanice",
|
||||
"Certificate Expiry Notification": "Obavijest za istek certifikata",
|
||||
"API Username": "API korisničko ime",
|
||||
"API Key": "API ključ",
|
||||
"Recipient Number": "Broj primatelja",
|
||||
"From Name/Number": "Naziv/broj pošiljatelja",
|
||||
"Leave blank to use a shared sender number.": "Ostaviti prazno za korištenje dijeljenog broja pošiljatelja.",
|
||||
"Octopush API Version": "Octopush verzija API-ja",
|
||||
"Legacy Octopush-DM": "Legacy Octopush-DM",
|
||||
endpoint: "krajnja točka (endpoint)",
|
||||
octopushAPIKey: "\"API ključ\" iz HTTP API postavki",
|
||||
octopushLogin: "\"Korisničko ime\" iz HTTP API postavki",
|
||||
promosmsLogin: "API korisničko ime",
|
||||
promosmsPassword: "API lozinka",
|
||||
"pushoversounds pushover": "Pushover (default)",
|
||||
"pushoversounds bike": "Bike",
|
||||
"pushoversounds bugle": "Bugle",
|
||||
"pushoversounds cashregister": "Cash Register",
|
||||
"pushoversounds classical": "Classical",
|
||||
"pushoversounds cosmic": "Cosmic",
|
||||
"pushoversounds falling": "Falling",
|
||||
"pushoversounds gamelan": "Gamelan",
|
||||
"pushoversounds incoming": "Incoming",
|
||||
"pushoversounds intermission": "Intermission",
|
||||
"pushoversounds magic": "Magic",
|
||||
"pushoversounds mechanical": "Mechanical",
|
||||
"pushoversounds pianobar": "Piano Bar",
|
||||
"pushoversounds siren": "Siren",
|
||||
"pushoversounds spacealarm": "Space Alarm",
|
||||
"pushoversounds tugboat": "Tug Boat",
|
||||
"pushoversounds alien": "Alien Alarm (long)",
|
||||
"pushoversounds climb": "Climb (long)",
|
||||
"pushoversounds persistent": "Persistent (long)",
|
||||
"pushoversounds echo": "Pushover Echo (long)",
|
||||
"pushoversounds updown": "Up Down (long)",
|
||||
"pushoversounds vibrate": "Vibrate Only",
|
||||
"pushoversounds none": "None (silent)",
|
||||
pushyAPIKey: "Tajni API ključ",
|
||||
pushyToken: "Token uređaja",
|
||||
"Show update if available": "Pokaži moguću nadogradnju",
|
||||
"Also check beta release": "Provjeravaj i za beta izdanja",
|
||||
"Using a Reverse Proxy?": "Koristi li se reverzni proxy?",
|
||||
"Check how to config it for WebSocket": "Provjerite kako se konfigurira za WebSocket protokol",
|
||||
"Steam Game Server": "Steam poslužitelj igre",
|
||||
"Most likely causes:": "Najvjerojatniji uzroci:",
|
||||
"The resource is no longer available.": "Resurs više nije dostupan.",
|
||||
"There might be a typing error in the address.": "Možda je nastala greška pri upisu adrese.",
|
||||
"What you can try:": "Što možete pokušati:",
|
||||
"Retype the address.": "Ponovno napišite adresu.",
|
||||
"Go back to the previous page.": "Vratite se na prethodnu stranicu.",
|
||||
"Coming Soon": "Dolazi uskoro",
|
||||
wayToGetClickSendSMSToken: "Možete dobiti API korisničko ime i API ključ sa {0}.",
|
||||
"Connection String": "Tekst veze",
|
||||
Query: "Upit",
|
||||
settingsCertificateExpiry: "TLS istek certifikata",
|
||||
certificationExpiryDescription: "HTTPS monitori će obavijesiti kada je istek TLS certifikata za:",
|
||||
"Setup Docker Host": "Dodaj Docker domaćina",
|
||||
"Connection Type": "Tip veze",
|
||||
"Docker Daemon": "Docker daemon",
|
||||
deleteDockerHostMsg: "Sigurno želite izbrisati ovog Docker domaćina za sve monitore?",
|
||||
socket: "Docker socket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker kontejner",
|
||||
"Container Name / ID": "Naziv / ID kontejnera",
|
||||
"Docker Host": "Docker domaćin",
|
||||
"Docker Hosts": "Docker domaćini",
|
||||
"ntfy Topic": "ntfy tema",
|
||||
Domain: "Domena",
|
||||
Workstation: "Radna stanica",
|
||||
disableCloudflaredNoAuthMsg: "Lozinka nije nužna dok je isključena autentikacija.",
|
||||
trustProxyDescription: "Vjeruj 'X-Forwarded-*' zaglavljima. Ako želite dobiti ispravnu IP adresu klijenta i Uptime Kuma je iza reverznog proxy poslužitelja, trebate omogućiti ovo.",
|
||||
wayToGetLineNotifyToken: "Možete dobiti pristupni token sa {0}",
|
||||
Examples: "Primjeri",
|
||||
"Home Assistant URL": "URL Home Assistanta",
|
||||
"Long-Lived Access Token": "Dugotrajni pristupni token",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Dugotrajni pristupni token može se kreirati klikom na korisničko ime (dolje lijevo) u Home Assistantu, pomicanjem do dna, te klikom na 'Create Token'. ",
|
||||
"Notification Service": "Notification Service",
|
||||
"default: notify all devices": "zadano ponašanje: obavijesti sve uređaje",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Popis servisa za obavijesti u Home Assistantu nalaze se pod \"Developer Tools > Services\" te pretražiti \"notification\".",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Automacije se mogu okinuti u Home Assistantu:",
|
||||
"Trigger type:": "Tip triggera:",
|
||||
"Event type:": "Tip eventa:",
|
||||
"Event data:": "Podaci eventa:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "Potrebno je i odabrati akciju za izvođenje na Home Assistantu.",
|
||||
"Frontend Version": "Inačica sučelja",
|
||||
"Frontend Version do not match backend version!": "Inačica sučelja ne odgovara poslužitelju!",
|
||||
};
|
||||
|
@@ -2,6 +2,8 @@ export default {
|
||||
languageName: "Bahasa Indonesia (Indonesian)",
|
||||
checkEverySecond: "Cek Setiap {0} detik.",
|
||||
retryCheckEverySecond: "Coba lagi setiap {0} detik.",
|
||||
resendEveryXTimes: "Kirim ulang setiap {0} kali",
|
||||
resendDisabled: "Kirim ulang dinonaktifkan",
|
||||
retriesDescription: "Percobaan ulang maksimum sebelum layanan dinyatakan tidak aktif dan notifikasi dikirim",
|
||||
ignoreTLSError: "Abaikan kesalahan TLS/SSL untuk situs web HTTPS",
|
||||
upsideDownModeDescription: "Balikkan statusnya. Jika layanan dapat dijangkau, TIDAK AKTIF.",
|
||||
@@ -13,6 +15,7 @@ export default {
|
||||
pauseDashboardHome: "Jeda",
|
||||
deleteMonitorMsg: "Apakah Anda mau menghapus monitor ini?",
|
||||
deleteNotificationMsg: "Apakah Anda mau menghapus notifikasi untuk semua monitor?",
|
||||
dnsPortDescription: "Port server DNS. Bawaan menggunakan 53. Anda dapat mengubah port kapan saja.",
|
||||
resolverserverDescription: "Cloudflare adalah server bawaan, Anda dapat mengubah server resolver kapan saja.",
|
||||
rrtypeDescription: "Pilih RR-Type yang mau Anda monitor",
|
||||
pauseMonitorMsg: "Apakah Anda yakin mau menjeda?",
|
||||
@@ -24,8 +27,8 @@ export default {
|
||||
confirmImportMsg: "Apakah Anda yakin untuk mengimpor cadangan? Pastikan Anda telah memilih opsi impor yang tepat.",
|
||||
twoFAVerifyLabel: "Silakan ketik token Anda untuk memverifikasi bahwa 2FA berfungsi",
|
||||
tokenValidSettingsMsg: "Token benar! Anda sekarang dapat menyimpan pengaturan 2FA.",
|
||||
confirmEnableTwoFAMsg: "Apakah anda yakin ingin mengaktifkan 2FA?",
|
||||
confirmDisableTwoFAMsg: "Apakah anda yakin ingin menonaktifkan 2FA?",
|
||||
confirmEnableTwoFAMsg: "Apakah Anda yakin ingin mengaktifkan 2FA?",
|
||||
confirmDisableTwoFAMsg: "Apakah Anda yakin ingin menonaktifkan 2FA?",
|
||||
Settings: "Pengaturan",
|
||||
Dashboard: "Dasbor",
|
||||
"New Update": "Pembaruan Baru",
|
||||
@@ -33,6 +36,7 @@ export default {
|
||||
Appearance: "Tampilan",
|
||||
Theme: "Tema",
|
||||
General: "Umum",
|
||||
"Primary Base URL": "URL Dasar Utama",
|
||||
Version: "Versi",
|
||||
"Check Update On GitHub": "Cek Pembaruan di GitHub",
|
||||
List: "Daftar",
|
||||
@@ -54,7 +58,7 @@ export default {
|
||||
Delete: "Hapus",
|
||||
Current: "Saat ini",
|
||||
Uptime: "Waktu aktif",
|
||||
"Cert Exp.": "Cert Exp.",
|
||||
"Cert Exp.": "Batas kedaluwarsa SSL",
|
||||
day: "hari | hari-hari",
|
||||
"-day": "-hari",
|
||||
hour: "Jam",
|
||||
@@ -62,7 +66,7 @@ export default {
|
||||
Response: "Tanggapan",
|
||||
Ping: "Ping",
|
||||
"Monitor Type": "Tipe Monitor",
|
||||
Keyword: "Keyword",
|
||||
Keyword: "Kata Kunci",
|
||||
"Friendly Name": "Nama yang Ramah",
|
||||
URL: "URL",
|
||||
Hostname: "Hostname",
|
||||
@@ -70,10 +74,14 @@ export default {
|
||||
"Heartbeat Interval": "Jarak Waktu Heartbeat ",
|
||||
Retries: "Coba lagi",
|
||||
"Heartbeat Retry Interval": "Jarak Waktu Heartbeat Mencoba kembali ",
|
||||
"Resend Notification if Down X times consequently": "Kirim Ulang Notifikasi jika Tidak Aktif X kali",
|
||||
Advanced: "Tingkat Lanjut",
|
||||
"Upside Down Mode": "Mode Terbalik",
|
||||
"Max. Redirects": "Maksimal Pengalihan",
|
||||
"Accepted Status Codes": "Kode Status yang Diterima",
|
||||
"Push URL": "Push URL",
|
||||
needPushEvery: "Anda harus memanggil URL berikut setiap {0} detik..",
|
||||
pushOptionalParams: "Parameter tambahan: {0}",
|
||||
Save: "Simpan",
|
||||
Notifications: "Notifikasi",
|
||||
"Not available, please setup.": "Tidak tersedia, silakan atur.",
|
||||
@@ -118,11 +126,11 @@ export default {
|
||||
"Resolver Server": "Resolver Server",
|
||||
"Resource Record Type": "Resource Record Type",
|
||||
"Last Result": "Hasil Terakhir",
|
||||
"Create your admin account": "Buat admin akun Anda",
|
||||
"Create your admin account": "Buat akun admin Anda",
|
||||
"Repeat Password": "Ulangi Sandi",
|
||||
"Import Backup": "Impor Cadangan",
|
||||
"Export Backup": "Expor Cadangan",
|
||||
Export: "Expor",
|
||||
"Export Backup": "Ekspor Cadangan",
|
||||
Export: "Ekspor",
|
||||
Import: "Impor",
|
||||
respTime: "Tanggapan. Waktu (milidetik)",
|
||||
notAvailableShort: "N/A",
|
||||
@@ -184,10 +192,10 @@ export default {
|
||||
"Status Pages": "Halaman Status",
|
||||
defaultNotificationName: "{notification} saya Peringatan ({number})",
|
||||
here: "di sini",
|
||||
Required: "Dibutuhkan",
|
||||
Required: "Wajib",
|
||||
telegram: "Telegram",
|
||||
"Bot Token": "Bot Token",
|
||||
"You can get a token from": "Anda bisa mendapatkan token dari",
|
||||
wayToGetTelegramToken: "Anda dapat mendapatkan token dari {0}.",
|
||||
"Chat ID": "Chat ID",
|
||||
supportTelegramChatID: "Mendukung Obrolan Langsung / Grup / Channel Chat ID",
|
||||
wayToGetTelegramChatID: "Anda bisa mendapatkan chat id Anda dengan mengirim pesan ke bot dan pergi ke url ini untuk melihat chat_id:",
|
||||
@@ -202,13 +210,14 @@ export default {
|
||||
secureOptionNone: "None / STARTTLS (25, 587)",
|
||||
secureOptionTLS: "TLS (465)",
|
||||
"Ignore TLS Error": "Abaikan Kesalahan TLS",
|
||||
"From Email": "Dari Surel",
|
||||
"To Email": "Ke Surel",
|
||||
"From Email": "Dari Email",
|
||||
emailCustomSubject: "Subjek",
|
||||
"To Email": "Ke Email",
|
||||
smtpCC: "CC",
|
||||
smtpBCC: "BCC",
|
||||
discord: "Discord",
|
||||
"Discord Webhook URL": "Discord Webhook URL",
|
||||
wayToGetDiscordURL: "Anda bisa mendapatkan ini dengan pergi ke Server Settings -> Integrations -> Create Webhook",
|
||||
wayToGetDiscordURL: "Anda bisa mendapatkan ini dengan pergi ke Server Pengaturan -> Integrasi -> Buat Webhook",
|
||||
"Bot Display Name": "Nama Bot",
|
||||
"Prefix Custom Message": "Awalan Pesan",
|
||||
"Hello @everyone is...": "Halo {'@'}everyone is...",
|
||||
@@ -223,7 +232,7 @@ export default {
|
||||
signalImportant: "PENTING: Anda tidak dapat mencampur grup dan nomor di penerima!",
|
||||
gotify: "Gotify",
|
||||
"Application Token": "Token Aplikasi",
|
||||
"Server URL": "URL Peladen",
|
||||
"Server URL": "URL Server",
|
||||
Priority: "Prioritas",
|
||||
slack: "Slack",
|
||||
"Icon Emoji": "Ikon Emoji",
|
||||
@@ -236,10 +245,13 @@ export default {
|
||||
"rocket.chat": "Rocket.chat",
|
||||
pushover: "Pushover",
|
||||
pushy: "Pushy",
|
||||
PushByTechulus: "Push by Techulus",
|
||||
octopush: "Octopush",
|
||||
promosms: "PromoSMS",
|
||||
clicksendsms: "ClickSend SMS",
|
||||
lunasea: "LunaSea",
|
||||
apprise: "Apprise (Mendukung 50+ layanan notifikasi)",
|
||||
GoogleChat: "Google Chat (hanya Google Workspace)",
|
||||
pushbullet: "Pushbullet",
|
||||
line: "Line Messenger",
|
||||
mattermost: "Mattermost",
|
||||
@@ -253,15 +265,18 @@ export default {
|
||||
"SMS Type": "Tipe SMS",
|
||||
octopushTypePremium: "Premium (Cepat - direkomendasikan untuk mengingatkan)",
|
||||
octopushTypeLowCost: "Low Cost (Lambat, terkadang diblokir oleh operator)",
|
||||
checkPrice: "Check {0} prices:",
|
||||
apiCredentials: "Kredensial API",
|
||||
octopushLegacyHint: "Apakah Anda menggunakan Octopush versi lama (2011-2020) atau versi baru?",
|
||||
"Check octopush prices": "Cek harga octopush {0}.",
|
||||
octopushPhoneNumber: "Nomer Telpon/HP (format internasional, contoh : +33612345678) ",
|
||||
octopushSMSSender: "Nama Pengirim SMS : 3-11 karakter alfanumerik dan spasi (a-zA-Z0-9)",
|
||||
"LunaSea Device ID": "LunaSea Device ID",
|
||||
"Apprise URL": "Apprise URL",
|
||||
"Example:": "Contoh: {0}",
|
||||
"Read more:": "Baca lebih lajut: {0}",
|
||||
"Read more:": "Baca lebih lanjut: {0}",
|
||||
"Status:": "Status: {0}",
|
||||
"Read more": "Baca lebih lajut",
|
||||
"Read more": "Baca lebih lanjut",
|
||||
appriseInstalled: "Apprise diinstall.",
|
||||
appriseNotInstalled: "Apprise tidak diinstall. {0}",
|
||||
"Access Token": "Token Akses",
|
||||
@@ -278,9 +293,293 @@ export default {
|
||||
matrix: "Matrix",
|
||||
promosmsTypeEco: "SMS ECO - murah tapi lambat dan sering kelebihan beban. Terbatas hanya untuk penerima Polandia.",
|
||||
promosmsTypeFlash: "SMS FLASH - Pesan akan otomatis muncul di perangkat penerima. Terbatas hanya untuk penerima Polandia.",
|
||||
promosmsTypeFull: "SMS FULL - SMS tingkat premium, Anda dapat menggunakan Nama Pengirim Anda (Anda harus mendaftarkan nama terlebih dahulu). Dapat diAndalkan untuk peringatan.",
|
||||
promosmsTypeFull: "SMS FULL - SMS tingkat premium, Anda dapat menggunakan Nama Pengirim Anda (Anda harus mendaftarkan nama terlebih dahulu). Dapat diandalkan untuk peringatan.",
|
||||
promosmsTypeSpeed: "SMS SPEED - Prioritas tertinggi dalam sistem. Sangat cepat dan dapat diandalkan tetapi mahal (sekitar dua kali lipat dari harga SMS FULL).",
|
||||
promosmsPhoneNumber: "Nomor telepon (untuk penerima Polandia Anda dapat melewati kode area)",
|
||||
promosmsSMSSender: "Nama Pengirim SMS : Nama pra-registrasi atau salah satu bawaan: InfoSMS, Info SMS, MaxSMS, INFO, SMS",
|
||||
"Feishu WebHookUrl": "Feishu WebHookUrl",
|
||||
matrixHomeserverURL: "Homeserver URL (dengan http(s):// dan port tambahan)",
|
||||
"Internal Room Id": "Internal Room ID",
|
||||
matrixDesc1: "Kamu dapat menemukan Internal Room ID dengan melihat di bagian konfigurasi ruang di Matrix. Seharusnya berbentuk seperti !QMdRCpUIfLwsfjxye6:home.server.",
|
||||
matrixDesc2: "Sangat direkomendasikan kepada Anda untuk membuat akun baru dan jangan menggunakan token atas akun terkini yang memiliki token akses secara penuh terhadap akun dan seluruh ruang yang terdaftar. Alih - alih, buat akun baru dan undang akun tsb ke ruang tempat anda ingin menerima notifikasi. Untuk mendapatkan token akses anda dapat menjalankan {0}",
|
||||
Method: "Method",
|
||||
Body: "Body",
|
||||
Headers: "Headers",
|
||||
PushUrl: "Push URL",
|
||||
HeadersInvalidFormat: "Request Headers memiliki format JSON yang tidak sesuai: ",
|
||||
BodyInvalidFormat: "Request Body memiliki format JSON yang tidak sesuai: ",
|
||||
"Monitor History": "Riyawat Monitor",
|
||||
clearDataOlderThan: "Simpan data riwayat monitoring selama {0} hari.",
|
||||
PasswordsDoNotMatch: "Password tidak sama.",
|
||||
records: "catatan",
|
||||
"One record": "Satu catatan",
|
||||
steamApiKeyDescription: "Untuk monitoring Steam Game Server Anda membutuhkan kunci Steam Web-API. Anda dapat mendaftarkan Kunci API Anda melalui: ",
|
||||
"Current User": "Pengguna Saat Ini",
|
||||
topic: "Topic",
|
||||
topicExplanation: "MQTT topic untuk dimonitor",
|
||||
successMessage: "Pesan Berhasil",
|
||||
successMessageExplanation: "Pesan MQTT yang akan dianggap berhasil",
|
||||
recent: "Baru saja",
|
||||
Done: "Selesai",
|
||||
Info: "Info",
|
||||
Security: "Keamanan",
|
||||
"Steam API Key": "Steam API Key",
|
||||
"Shrink Database": "Shrink Database",
|
||||
"Pick a RR-Type...": "Pilih RR-Type...",
|
||||
"Pick Accepted Status Codes...": "Pilih Kode Status yang Diterima...",
|
||||
Default: "Default",
|
||||
"HTTP Options": "Opsi HTTP",
|
||||
"Create Incident": "Buat Incident",
|
||||
Title: "Judul",
|
||||
Content: "Konten",
|
||||
Style: "Gaya",
|
||||
info: "info",
|
||||
warning: "peringatan",
|
||||
danger: "bahaya",
|
||||
error: "kesalahan",
|
||||
critical: "kritis",
|
||||
primary: "utama",
|
||||
light: "terang",
|
||||
dark: "gelap",
|
||||
Post: "Post",
|
||||
"Please input title and content": "Masukkan judul dan konten",
|
||||
Created: "Dibuat",
|
||||
"Last Updated": "Terakhir Diperbarui",
|
||||
Unpin: "Lepaskan Semat",
|
||||
"Switch to Light Theme": "Ubah ke Tema Terang",
|
||||
"Switch to Dark Theme": "Ubah ke Tema Gelap",
|
||||
"Show Tags": "Tampilkan Tags",
|
||||
"Hide Tags": "Sembunyikan Tags",
|
||||
Description: "Deskripsi",
|
||||
"No monitors available.": "Tidak ada monitor yang tersedia.",
|
||||
"Add one": "Tambahkan",
|
||||
"No Monitors": "Tidak ada monitor",
|
||||
"Untitled Group": "Group Tanpa Judul",
|
||||
Services: "Layanan",
|
||||
Discard: "Buang",
|
||||
Cancel: "Batal",
|
||||
"Powered by": "Dipersembahkan oleh",
|
||||
shrinkDatabaseDescription: "Trigger database VACUUM untuk SQLite. Jika database Anda dibuat setelah 1.10.0, AUTO_VACUUM sudah otomatis diaktifkan dan aksi berikut tidak dibutuhkan.",
|
||||
serwersms: "SerwerSMS.pl",
|
||||
serwersmsAPIUser: "Nama Pengguna API ( termamsuk awalan webapi_ )",
|
||||
serwersmsAPIPassword: "Kata Sandi API",
|
||||
serwersmsPhoneNumber: "Nomor Telepon",
|
||||
serwersmsSenderName: "Nama Pengirim SMS (didaftarkan melalui portal pelanggan)",
|
||||
stackfield: "Stackfield",
|
||||
Customize: "Kustomisasi",
|
||||
"Custom Footer": "Tambahan Footer",
|
||||
"Custom CSS": "Tambahan CSS",
|
||||
smtpDkimSettings: "Pengaturan DKIM",
|
||||
smtpDkimDesc: "Silakan merujuk ke Nodemailer DKIM {0} untuk penggunaan.",
|
||||
documentation: "dokumentasi",
|
||||
smtpDkimDomain: "Nama Domain",
|
||||
smtpDkimKeySelector: "Key Selector",
|
||||
smtpDkimPrivateKey: "Private Key",
|
||||
smtpDkimHashAlgo: "Algoritma Hash (Opsional)",
|
||||
smtpDkimheaderFieldNames: "Header Keys untuk ditambahkan (Optional)",
|
||||
smtpDkimskipFields: "Header Keys not untuk ditambahkan (Optional)",
|
||||
wayToGetPagerDutyKey: "Anda dapat menambahkan melalui Service -> Service Directory -> (Select a service) -> Integrations -> Add integration. Lalu Anda dapat menjadi dengan kata kunci \"Events API V2\". Informasi tambahan {0}",
|
||||
"Integration Key": "Kunci Integrasi",
|
||||
"Integration URL": "URL Integrasi",
|
||||
"Auto resolve or acknowledged": "Penyelesaian otomatis atau diakui",
|
||||
"do nothing": "tidak melakukan apapun",
|
||||
"auto acknowledged": "otomatis diakui",
|
||||
"auto resolve": "otomatis terselesaikan",
|
||||
gorush: "Gorush",
|
||||
alerta: "Alerta",
|
||||
alertaApiEndpoint: "API Endpoint",
|
||||
alertaEnvironment: "Lingkungan",
|
||||
alertaApiKey: "Kunci API",
|
||||
alertaAlertState: "Status Siaga",
|
||||
alertaRecoverState: "Status Pemulihan",
|
||||
deleteStatusPageMsg: "Apakah Anda yakin untuk menghapus halaman status berikut?",
|
||||
Proxies: "Proxy",
|
||||
default: "Bawaan",
|
||||
enabled: "Diaktifkan",
|
||||
setAsDefault: "Tetapkan sebagai bawaan",
|
||||
deleteProxyMsg: "Apakah Anda yakin ingin menghapus proxy berikut untuk seluruh monitor?",
|
||||
proxyDescription: "Proxy harus ditambahkan ke monitor agar berfungsi.",
|
||||
enableProxyDescription: "Proxy berikut tidak akan berdampak ke monitor hingga diaktifkan. Anda dapat mengontrol menonaktifkan sementara proxy dari semua monitor dengan status aktivasi.",
|
||||
setAsDefaultProxyDescription: "Proxy berikut akan diaktifkan sebagai bawaan untuk monitor baru. Anda masih dapat menonaktifkan proxy secara terpisah untuk setiap monitor.",
|
||||
"Certificate Chain": "Certificate Chain",
|
||||
Valid: "Valid",
|
||||
Invalid: "Tidak Valid",
|
||||
AccessKeyId: "AccessKey ID",
|
||||
SecretAccessKey: "AccessKey Secret",
|
||||
PhoneNumbers: "Nomor Telepon",
|
||||
TemplateCode: "Kode Template",
|
||||
SignName: "Nama Tanda",
|
||||
"Sms template must contain parameters: ": "Template SMS harus berisi parameter: ",
|
||||
"Bark Endpoint": "Bark Endpoint",
|
||||
"Bark Group": "Bark Group",
|
||||
"Bark Sound": "Bark Sound",
|
||||
WebHookUrl: "WebHookUrl",
|
||||
SecretKey: "SecretKey",
|
||||
"For safety, must use secret key": "Untuk keamaan Anda harus menggunakan kunci rahasia",
|
||||
"Device Token": "Token Perangkat",
|
||||
Platform: "Platform",
|
||||
iOS: "iOS",
|
||||
Android: "Android",
|
||||
Huawei: "Huawei",
|
||||
High: "Tinggi",
|
||||
Retry: "Ulang",
|
||||
Topic: "Topik",
|
||||
"WeCom Bot Key": "Kunci WeCom Bot",
|
||||
"Setup Proxy": "Siapkan Proxy",
|
||||
"Proxy Protocol": "Protokol Proxy",
|
||||
"Proxy Server": "Server Proxy",
|
||||
"Proxy server has authentication": "Server Proxy memiliki autentikasi",
|
||||
User: "Pengguna",
|
||||
Installed: "Terpasang",
|
||||
"Not installed": "Tidak terpasang",
|
||||
Running: "Berjalan",
|
||||
"Not running": "Tidak berjalan",
|
||||
"Remove Token": "Hapus Token",
|
||||
Start: "Mulai",
|
||||
Stop: "Berhenti",
|
||||
"Uptime Kuma": "Uptime Kuma",
|
||||
"Add New Status Page": "Tambahkan Halaman Status Baru",
|
||||
Slug: "Slug",
|
||||
"Accept characters:": "Terima karakter:",
|
||||
startOrEndWithOnly: "Mulai atau akhiri hanya dengan {0}",
|
||||
"No consecutive dashes": "Tanda hubung tidak berurutan",
|
||||
Next: "Selanjutnya",
|
||||
"The slug is already taken. Please choose another slug.": "Slug telah digunakan. Silakan pilih slug lain.",
|
||||
"No Proxy": "Tidak ada Proxy",
|
||||
Authentication: "Autentikasi",
|
||||
"HTTP Basic Auth": "HTTP Basic Auth",
|
||||
"New Status Page": "Halaman Status Baru",
|
||||
"Page Not Found": "Halaman Tidak Ditemukan",
|
||||
"Reverse Proxy": "Proxy Terbalik",
|
||||
Backup: "Cadangan",
|
||||
About: "Tentang",
|
||||
wayToGetCloudflaredURL: "(Unduh cloudflared dari {0})",
|
||||
cloudflareWebsite: "Situs Cloudflare",
|
||||
"Message:": "Pesan:",
|
||||
"Don't know how to get the token? Please read the guide:": "Tidak tahu cara mendapatkan token? Silakan baca panduannya:",
|
||||
"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.": "Koneksi saat ini mungkin hilang jika Anda saat ini terhubung melalui Cloudflare Tunel. Apakah Anda yakin ingin menghentikannya? Ketik kata sandi Anda saat ini untuk mengonfirmasinya.",
|
||||
"HTTP Headers": "HTTP Headers",
|
||||
"Trust Proxy": "Proxy Terpercaya",
|
||||
"Other Software": "Perangkat Lunak lainnya",
|
||||
"For example: nginx, Apache and Traefik.": "Sebagai contoh: nginx, Apache and Traefik.",
|
||||
"Please read": "Harap dibaca",
|
||||
"Subject:": "Subjek:",
|
||||
"Valid To:": "Berlaku Untuk:",
|
||||
"Days Remaining:": "Hari Tersisa:",
|
||||
"Issuer:": "Penerbit:",
|
||||
"Fingerprint:": "Sidik jari:",
|
||||
"No status pages": "Tidak ada halaman status",
|
||||
"Domain Name Expiry Notification": "Pemberitahuan Kedaluwarsa Nama Domain",
|
||||
Proxy: "Proxy",
|
||||
"Date Created": "Tanggal Dibuat",
|
||||
HomeAssistant: "Home Assistant",
|
||||
onebotHttpAddress: "Alamat HTTP OneBot",
|
||||
onebotMessageType: "Jenis Pesan OneBot",
|
||||
onebotGroupMessage: "Grup",
|
||||
onebotPrivateMessage: "Pribadi",
|
||||
onebotUserOrGroupId: "Grup/Pengguna ID",
|
||||
onebotSafetyTips: "Untuk keamanan, harus mengatur token akses",
|
||||
"PushDeer Key": "Kunci PushDeer",
|
||||
"Footer Text": "Tulisan Footer",
|
||||
"Show Powered By": "Tampilkan Dipersembahkan oleh",
|
||||
"Domain Names": "Nama Domain",
|
||||
signedInDisp: "Masuk sebagai {0}",
|
||||
signedInDispDisabled: "Autentikasi dinonaktifkan.",
|
||||
RadiusSecret: "Radius Secret",
|
||||
RadiusSecretDescription: "Shared Secret antara klien dan server",
|
||||
RadiusCalledStationId: "Called Station Id",
|
||||
RadiusCalledStationIdDescription: "Pengenal perangkat yang dipanggil",
|
||||
RadiusCallingStationId: "Calling Station Id",
|
||||
RadiusCallingStationIdDescription: "Pengenal perangkat panggilan",
|
||||
"Certificate Expiry Notification": "Pemberitahuan Kedaluwarsa Sertifikat",
|
||||
"API Username": "Nama Pengguna API",
|
||||
"API Key": "Kunci API",
|
||||
"Recipient Number": "Nomor Penerima",
|
||||
"From Name/Number": "Dari Nama/Nomor",
|
||||
"Leave blank to use a shared sender number.": "Biarkan kosong untuk menggunakan nomor pengirim bersama.",
|
||||
"Octopush API Version": "Versi API Octopush",
|
||||
"Legacy Octopush-DM": "Legacy Octopush-DM",
|
||||
endpoint: "endpoint",
|
||||
octopushAPIKey: "\"API key\" dari kredensial HTTP API di panel kontrol",
|
||||
octopushLogin: "\"Login\" dari kredensial HTTP API di panel kontrol",
|
||||
promosmsLogin: "Nama Masuk API",
|
||||
promosmsPassword: "Kata Sandi API",
|
||||
"pushoversounds pushover": "Pushover (default)",
|
||||
"pushoversounds bike": "Bike",
|
||||
"pushoversounds bugle": "Bugle",
|
||||
"pushoversounds cashregister": "Cash Register",
|
||||
"pushoversounds classical": "Classical",
|
||||
"pushoversounds cosmic": "Cosmic",
|
||||
"pushoversounds falling": "Falling",
|
||||
"pushoversounds gamelan": "Gamelan",
|
||||
"pushoversounds incoming": "Incoming",
|
||||
"pushoversounds intermission": "Intermission",
|
||||
"pushoversounds magic": "Magic",
|
||||
"pushoversounds mechanical": "Mechanical",
|
||||
"pushoversounds pianobar": "Piano Bar",
|
||||
"pushoversounds siren": "Siren",
|
||||
"pushoversounds spacealarm": "Space Alarm",
|
||||
"pushoversounds tugboat": "Tug Boat",
|
||||
"pushoversounds alien": "Alien Alarm (long)",
|
||||
"pushoversounds climb": "Climb (long)",
|
||||
"pushoversounds persistent": "Persistent (long)",
|
||||
"pushoversounds echo": "Pushover Echo (long)",
|
||||
"pushoversounds updown": "Up Down (long)",
|
||||
"pushoversounds vibrate": "Vibrate Only",
|
||||
"pushoversounds none": "None (silent)",
|
||||
pushyAPIKey: "Secret API Key",
|
||||
pushyToken: "Device token",
|
||||
"Show update if available": "Tampilkan pembaruan jika tersedia",
|
||||
"Also check beta release": "Periksa juga rilis beta",
|
||||
"Using a Reverse Proxy?": "Menggunakan Proxy Terbalik?",
|
||||
"Check how to config it for WebSocket": "Periksa cara mengonfigurasinya untuk A WebSocket",
|
||||
"Steam Game Server": "Steam Game Server",
|
||||
"Most likely causes:": "Kemungkinan besar penyebabnya:",
|
||||
"The resource is no longer available.": "Sumber daya tidak lagi tersedia.",
|
||||
"There might be a typing error in the address.": "Mungkin ada kesalahan pengetikan di alamat.",
|
||||
"What you can try:": "Apa yang dapat kamu coba:",
|
||||
"Retype the address.": "Ketik ulang alamat.",
|
||||
"Go back to the previous page.": "Kembali ke halaman sebelumnya.",
|
||||
"Coming Soon": "Segera",
|
||||
wayToGetClickSendSMSToken: "Anda bisa mendapatkan Nama Pengguna API dan Kunci API dari {0} .",
|
||||
"Connection String": "String Koneksi",
|
||||
Query: "Query",
|
||||
settingsCertificateExpiry: "Sertifikat TLS Kadaluarsa",
|
||||
certificationExpiryDescription: "Monitor HTTPS memicu pemberitahuan saat sertifikat TLS kedaluwarsa dalam:",
|
||||
"Setup Docker Host": "Siapkan Host Docker",
|
||||
"Connection Type": "Jenis Koneksi",
|
||||
"Docker Daemon": "Docker Daemon",
|
||||
deleteDockerHostMsg: "Apakah Anda yakin ingin menghapus host docker berikut untuk semua monitor?",
|
||||
socket: "Socket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker Container",
|
||||
"Container Name / ID": "Container Name / ID",
|
||||
"Docker Host": "Docker Host",
|
||||
"Docker Hosts": "Docker Hosts",
|
||||
"ntfy Topic": "ntfy Topic",
|
||||
Domain: "Domain",
|
||||
Workstation: "Workstation",
|
||||
disableCloudflaredNoAuthMsg: "Anda berada dalam mode Tanpa Otentikasi, kata sandi tidak diperlukan.",
|
||||
trustProxyDescription: "Trust 'X-Forwarded-*' headers. Jika Anda ingin mendapatkan IP klien yang benar dan Uptime Kuma Anda dibalik layanan seperti Nginxor Apache, Anda harus mengaktifkan ini.",
|
||||
wayToGetLineNotifyToken: "Anda bisa mendapatkan token akses dari {0}",
|
||||
Examples: "Contoh",
|
||||
"Home Assistant URL": "Home Assistant URL",
|
||||
"Long-Lived Access Token": "Token Akses Berumur Panjang",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Token Akses Berumur Panjang dapat dibuat dengan mengklik nama profil Anda (kiri bawah) dan menggulir ke bawah lalu klik Buat Token. ",
|
||||
"Notification Service": "Layanan Pemberitahuan",
|
||||
"default: notify all devices": "bawaan: notifikasi seluruh perangkat",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Daftar Layanan Pemberitahuan dapat ditemukan di Home Assistant pada \"Developer Tools > Services\" cari \"notification\" lalu cari nama perangkat Anda.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Otomatisasi dapat dipicu secara opsional di Home Assistant:",
|
||||
"Trigger type:": "Tipe Trigger/Pemicu:",
|
||||
"Event type:": "Tipe event:",
|
||||
"Event data:": "Data event:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "Kemudian pilih tindakan, misalnya alihkan ke tempat dimana lampu RGB berwarna merah.",
|
||||
"Frontend Version": "Versi Frontend",
|
||||
"Frontend Version do not match backend version!": "Versi Frontend tidak sama dengan versi backend!",
|
||||
"Base URL": "URL Dasar",
|
||||
goAlertInfo: "GoAlert adalah aplikasi open source untuk penjadwalan panggilan, eskalasi otomatis dan pemberitahuan (seperti SMS atau panggilan suara). Secara otomatis melibatkan orang yang tepat, dengan cara yang benar, dan pada waktu yang tepat! {0}",
|
||||
goAlertIntegrationKeyInfo: "Dapatkan kunci integrasi API generik untuk layanan dalam format ini \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" biasanya nilai parameter token dari URL yang disalin.",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Tidak digunakan lagi: Karena banyak fitur ditambahkan dan fitur cadangan ini agak tidak terawat, itu tidak dapat menghasilkan atau memulihkan cadangan lengkap.",
|
||||
backupRecommend: "Harap cadangkan volume atau folder data (./data/) secara langsung.",
|
||||
};
|
||||
|
@@ -7,25 +7,25 @@ export default {
|
||||
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.",
|
||||
passwordNotMatchMsg: "La password non corrisponde.",
|
||||
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",
|
||||
pauseDashboardHome: "In Pausa",
|
||||
deleteMonitorMsg: "Si è certi di voler eliminare questo oggetto monitorato?",
|
||||
deleteNotificationMsg: "Si è certi di voler eliminare questa notifica per tutti gli oggetti monitorati?",
|
||||
resolverserverDescription: "Cloudflare è il server predefinito, è possibile cambiare il server DNS.",
|
||||
deleteMonitorMsg: "Sei sicuro di voler eliminare questo oggetto monitorato?",
|
||||
deleteNotificationMsg: "Sei sicuro di voler eliminare questa notifica per tutti gli oggetti monitorati?",
|
||||
resolverserverDescription: "Cloudflare è il server predefinito ma è possibile cambiare il server DNS.",
|
||||
rrtypeDescription: "Scegliere il tipo di RR che si vuole monitorare",
|
||||
pauseMonitorMsg: "Si è certi di voler mettere in pausa?",
|
||||
pauseMonitorMsg: "Sei sicuro di voler mettere in pausa?",
|
||||
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?",
|
||||
clearEventsMsg: "Sei sicuro di voler eliminare tutti gli eventi per questo servizio?",
|
||||
clearHeartbeatsMsg: "Sei sicuro di voler eliminare tutti gli intervalli di controllo per questo servizio?",
|
||||
confirmClearStatisticsMsg: "Sei sicuro di voler eliminare TUTTE le statistiche?",
|
||||
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.",
|
||||
confirmImportMsg: "Sei sicuro di voler importare il backup? Controlla di aver selezionato l'opzione corretta di importazione.",
|
||||
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?",
|
||||
confirmEnableTwoFAMsg: "Sei sicuro di voler abilitare l'autenticazione a due fattori?",
|
||||
confirmDisableTwoFAMsg: "Sei sicuro di voler disabilitare l'autenticazione a due fattori?",
|
||||
Settings: "Impostazioni",
|
||||
Dashboard: "Dashboard",
|
||||
"New Update": "Nuovo aggiornamento disponibile!",
|
||||
|
@@ -69,7 +69,7 @@ export default {
|
||||
Port: "포트",
|
||||
"Heartbeat Interval": "하트비트 주기",
|
||||
Retries: "재시도",
|
||||
"Heartbeat Retry Interval": "하트비드 재시도 주기",
|
||||
"Heartbeat Retry Interval": "하트비트 재시도 주기",
|
||||
Advanced: "고급",
|
||||
"Upside Down Mode": "상태 반전 모드",
|
||||
"Max. Redirects": "최대 리다이렉트",
|
||||
@@ -110,7 +110,7 @@ export default {
|
||||
"Remember me": "비밀번호 기억하기",
|
||||
Login: "로그인",
|
||||
"No Monitors, please": "모니터링이 현재 없어요,",
|
||||
"add one": "한번 추가해보실레요?",
|
||||
"add one": "한번 추가해보실래요?",
|
||||
"Notification Type": "알림 종류",
|
||||
Email: "이메일",
|
||||
Test: "테스트",
|
||||
|
@@ -393,6 +393,12 @@ export default {
|
||||
alertaAlertState: "Состояние алерта",
|
||||
alertaRecoverState: "Состояние восстановления",
|
||||
Proxies: "Прокси",
|
||||
"Setup Proxy": "Настройка Прокси",
|
||||
"Proxy Protocol": "Протокол Прокси",
|
||||
"Proxy Server": "Прокси",
|
||||
"Proxy server has authentication": "Прокси имеет аутентификацию",
|
||||
"Reverse Proxy": "Обратный прокси",
|
||||
"No Proxy": "Без прокси",
|
||||
default: "По умолчанию",
|
||||
enabled: "Включено",
|
||||
setAsDefault: "Установлено по умолчанию",
|
||||
@@ -400,4 +406,176 @@ export default {
|
||||
proxyDescription: "Прокси должны быть привязаны к монитору, чтобы работать.",
|
||||
enableProxyDescription: "Этот прокси не будет влиять на запросы монитора, пока не будет активирован. Вы можете контролировать временное отключение прокси для всех мониторов через статус активации.",
|
||||
setAsDefaultProxyDescription: "Этот прокси будет по умолчанию включен для новых мониторов. Вы всё ещё можете отдельно отключать прокси в каждом мониторе.",
|
||||
Invalid: "Недействительный",
|
||||
AccessKeyId: "AccessKey ID",
|
||||
SecretAccessKey: "AccessKey Secret",
|
||||
PhoneNumbers: "PhoneNumbers",
|
||||
TemplateCode: "TemplateCode",
|
||||
SignName: "SignName",
|
||||
"Sms template must contain parameters: ": "Шаблон СМС должен содержать параметры: ",
|
||||
"Bark Endpoint": "Bark Endpoint",
|
||||
"Bark Group": "Bark Group",
|
||||
"Bark Sound": "Bark Sound",
|
||||
WebHookUrl: "WebHookUrl",
|
||||
SecretKey: "SecretKey",
|
||||
"For safety, must use secret key": "В целях безопасности необходимо использовать секретный ключ",
|
||||
"Device Token": "Токен устройства",
|
||||
Platform: "Платформа",
|
||||
iOS: "iOS",
|
||||
Android: "Android",
|
||||
Huawei: "Huawei",
|
||||
High: "High",
|
||||
Retry: "Повторить",
|
||||
Topic: "Тема",
|
||||
"WeCom Bot Key": "WeCom Bot Key",
|
||||
User: "Пользователь",
|
||||
Installed: "Установлено",
|
||||
"Not installed": "Не установлено",
|
||||
Running: "Запускается",
|
||||
"Not running": "Не запускается",
|
||||
"Remove Token": "Удалить токен",
|
||||
Start: "Запустить",
|
||||
Stop: "Остановить",
|
||||
"Uptime Kuma": "Uptime Kuma",
|
||||
Slug: "Slug",
|
||||
"Accept characters:": "Принимаемые символы:",
|
||||
startOrEndWithOnly: "Начинается или кончается только {0}",
|
||||
"No consecutive dashes": "Без последовательных тире",
|
||||
"The slug is already taken. Please choose another slug.": "The slug is already taken. Please choose another slug.",
|
||||
"Page Not Found": "Страница не найдена",
|
||||
wayToGetCloudflaredURL: "(Скачать cloudflared с {0})",
|
||||
cloudflareWebsite: "Cloudflare Website",
|
||||
"Message:": "Сообщение:",
|
||||
"Don't know how to get the token? Please read the guide:": "Don't know how to get the token? Please read the guide:",
|
||||
"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.": "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.",
|
||||
"HTTP Headers": "HTTP заголовки",
|
||||
"Trust Proxy": "Доверять прокси",
|
||||
"Other Software": "Другое программное обеспечение",
|
||||
"For example: nginx, Apache and Traefik.": "К примеру: nginx, Apache и Traefik.",
|
||||
"Please read": "Пожалуйста, прочитайте",
|
||||
"Subject:": "Тема:",
|
||||
"Valid To:": "Действителен до:",
|
||||
"Days Remaining:": "Дней осталось:",
|
||||
"Issuer:": "Издатель:",
|
||||
"Fingerprint:": "Отпечаток:",
|
||||
"No status pages": "Нет статусных страниц",
|
||||
"Domain Name Expiry Notification": "Уведомление об истечении срока действия доменного имени",
|
||||
Proxy: "Прокси",
|
||||
"Date Created": "Дата создания",
|
||||
HomeAssistant: "Home Assistant",
|
||||
onebotHttpAddress: "OneBot HTTP Address",
|
||||
onebotMessageType: "OneBot Message Type",
|
||||
onebotGroupMessage: "Группа",
|
||||
onebotPrivateMessage: "Private",
|
||||
onebotUserOrGroupId: "Группа/ID пользователя",
|
||||
onebotSafetyTips: "В целях безопасности необходимо установить токен доступа",
|
||||
"PushDeer Key": "PushDeer Key",
|
||||
"Footer Text": "Текст нижнего колонтитула",
|
||||
"Show Powered By": "Показывать на чем создано",
|
||||
"Domain Names": "Доменные имена",
|
||||
signedInDisp: "Вы вошли как {0}",
|
||||
signedInDispDisabled: "Аутентификация отключена.",
|
||||
RadiusSecret: "Секрет Radius",
|
||||
RadiusSecretDescription: "Общий секрет между клиентом и сервером",
|
||||
RadiusCalledStationId: "Идентификатор вызываемой станции",
|
||||
RadiusCalledStationIdDescription: "Идентификатор вызываемого устройства",
|
||||
RadiusCallingStationId: "Идентификатор вызывающей станции",
|
||||
RadiusCallingStationIdDescription: "Идентификатор вызывающего устройства",
|
||||
"Certificate Expiry Notification": "Уведомление об истечении срока действия сертификата",
|
||||
"API Username": "Имя пользователя API",
|
||||
"API Key": "API ключ",
|
||||
"Recipient Number": "Номер получателя",
|
||||
"From Name/Number": "Имя/номер отправителя",
|
||||
"Leave blank to use a shared sender number.": "Оставьте пустым, чтобы использовать общий номер отправителя.",
|
||||
"Octopush API Version": "Версия API Octopush",
|
||||
"Legacy Octopush-DM": "Legacy Octopush-DM",
|
||||
endpoint: "endpoint",
|
||||
octopushAPIKey: "\"API key\" из учетных данных HTTP API в панели управления",
|
||||
octopushLogin: "\"Login\" из учетных данных HTTP API в панели управления",
|
||||
promosmsLogin: "Логин API",
|
||||
promosmsPassword: "Пароль API",
|
||||
"pushoversounds pushover": "Pushover (default)",
|
||||
"pushoversounds bike": "Bike",
|
||||
"pushoversounds bugle": "Bugle",
|
||||
"pushoversounds cashregister": "Cash Register",
|
||||
"pushoversounds classical": "Classical",
|
||||
"pushoversounds cosmic": "Cosmic",
|
||||
"pushoversounds falling": "Falling",
|
||||
"pushoversounds gamelan": "Gamelan",
|
||||
"pushoversounds incoming": "Incoming",
|
||||
"pushoversounds intermission": "Intermission",
|
||||
"pushoversounds magic": "Magic",
|
||||
"pushoversounds mechanical": "Mechanical",
|
||||
"pushoversounds pianobar": "Piano Bar",
|
||||
"pushoversounds siren": "Siren",
|
||||
"pushoversounds spacealarm": "Space Alarm",
|
||||
"pushoversounds tugboat": "Tug Boat",
|
||||
"pushoversounds alien": "Alien Alarm (long)",
|
||||
"pushoversounds climb": "Climb (long)",
|
||||
"pushoversounds persistent": "Persistent (long)",
|
||||
"pushoversounds echo": "Pushover Echo (long)",
|
||||
"pushoversounds updown": "Up Down (long)",
|
||||
"pushoversounds vibrate": "Vibrate Only",
|
||||
"pushoversounds none": "None (silent)",
|
||||
pushyAPIKey: "Secret API Key",
|
||||
pushyToken: "Токен устройства",
|
||||
"Using a Reverse Proxy?": "Используете обратный прокси?",
|
||||
"Check how to config it for WebSocket": "Проверьте, как настроить его для WebSocket",
|
||||
"Steam Game Server": "Steam Game Server",
|
||||
"Most likely causes:": "Наиболее вероятные причины:",
|
||||
"The resource is no longer available.": "Ресурс больше не доступен.",
|
||||
"There might be a typing error in the address.": "В адресе может быть опечатка.",
|
||||
"What you can try:": "Что вы можете попробовать:",
|
||||
"Retype the address.": "Повторите адрес.",
|
||||
"Go back to the previous page.": "Вернуться на предыдущую страницу.",
|
||||
"Coming Soon": "Скоро",
|
||||
wayToGetClickSendSMSToken: "Вы можете получить имя пользователя API и ключ API из {0} .",
|
||||
"Connection String": "Строка подключения",
|
||||
Query: "Запрос",
|
||||
settingsCertificateExpiry: "Истекание TLS сертификата",
|
||||
certificationExpiryDescription: "HTTPS Мониторы инициируют уведомление, когда срок действия сертификата TLS истечет:",
|
||||
"Setup Docker Host": "Настроить Docker Host",
|
||||
"Connection Type": "Тип соединения",
|
||||
"Docker Daemon": "Docker Daemon",
|
||||
deleteDockerHostMsg: "Are you sure want to delete this docker host for all monitors?",
|
||||
socket: "Socket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker контейнер",
|
||||
"Container Name / ID": "Название контейнера / ID",
|
||||
"Docker Host": "Docker Host",
|
||||
"Docker Hosts": "Docker Hosts",
|
||||
"ntfy Topic": "ntfy Topic",
|
||||
Domain: "Домен",
|
||||
Workstation: "Workstation",
|
||||
disableCloudflaredNoAuthMsg: "Вы находитесь в режиме без авторизации, пароль не требуется.",
|
||||
trustProxyDescription: "Доверять заголовкам 'X-Forwarded-*'. Если вы хотите получить правильный IP-адрес клиента, а ваш Uptime Kuma находится под Nginx или Apache, вам следует включить этот параметр.",
|
||||
wayToGetLineNotifyToken: "Вы можете получить токен доступа в {0}",
|
||||
Examples: "Примеры",
|
||||
"Home Assistant URL": "Home Assistant URL",
|
||||
"Long-Lived Access Token": "Токен доступа с длительным сроком службы",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ",
|
||||
"Notification Service": "Служба уведомлений",
|
||||
"default: notify all devices": "по стандарту: уведомлять все устройства",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "При желании автоматизацию можно активировать в Home Assistant.:",
|
||||
"Trigger type:": "Тип триггера:",
|
||||
"Event type:": "Тип события:",
|
||||
"Event data:": "Данные события:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "Затем выберите действие, например, переключите сцену на красный индикатор RGB..",
|
||||
"Frontend Version": "Версия интерфейса",
|
||||
"Frontend Version do not match backend version!": "Версия интерфейса не соответствует версии серверной части!",
|
||||
"Base URL": "Базовый URL",
|
||||
goAlertInfo: "GoAlert is a An open source application for on-call scheduling, automated escalations and notifications (like SMS or voice calls). Automatically engage the right person, the right way, and at the right time! {0}",
|
||||
goAlertIntegrationKeyInfo: "Получить общий ключ интеграции API для сервиса в этом формате \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" обычно значение параметра токена скопированного URL.",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Устарело: поскольку добавлено множество функций, а эта функция резервного копирования немного не поддерживается, она не может создать или восстановить полную резервную копию.",
|
||||
backupRecommend: "Сделайте резервную копию тома или папки с данными (./data/) напрямую.",
|
||||
"Optional": "Необязательно",
|
||||
squadcast: "Squadcast",
|
||||
SendKey: "SendKey",
|
||||
"SMSManager API Docs": "Документация к API SMSManager ",
|
||||
"Gateway Type": "Тип шлюза",
|
||||
SMSManager: "SMSManager",
|
||||
"You can divide numbers with": "Вы можете делить числа с",
|
||||
"or": "или",
|
||||
};
|
||||
|
@@ -206,10 +206,10 @@ export default {
|
||||
smtp: "Email (SMTP)",
|
||||
secureOptionNone: "None / STARTTLS (25, 587)",
|
||||
secureOptionTLS: "TLS (465)",
|
||||
"Ignore TLS Error": "Ignore TLS Error",
|
||||
"From Email": "From Email",
|
||||
emailCustomSubject: "Custom Subject",
|
||||
"To Email": "To Email",
|
||||
"Ignore TLS Error": "เพิกเฉยข้อผิดพลาด TLS",
|
||||
"From Email": "จากอีเมล",
|
||||
emailCustomSubject: "หัวข้อที่กำหนดเอง",
|
||||
"To Email": "ถึงอีเมล",
|
||||
smtpCC: "CC",
|
||||
smtpBCC: "BCC",
|
||||
discord: "Discord",
|
||||
@@ -519,4 +519,62 @@ export default {
|
||||
"Coming Soon": "เร็ว ๆ นี้",
|
||||
wayToGetClickSendSMSToken: "คุณสามารถรับ API Username และ API Key ได้จาก {0}",
|
||||
wayToGetLineNotifyToken: "คุณสามารถรับ access token ได้จาก {0}",
|
||||
resendEveryXTimes: "ส่งซ้ำทุก {0} ครั้ง",
|
||||
resendDisabled: "การส่งซ้ำถูกปิดใช้งาน",
|
||||
dnsPortDescription: "พอร์ตของเซิร์ฟเวอร์ DNS, ค่าเริ่มต้นคือ 53, คุณสามารถเปลี่ยนพอร์ตตอนไหนก็ได้",
|
||||
"Resend Notification if Down X times consequently": "ส่งการแจ้งเตือนซ้ำถ้าออฟไลน์ครบ X ครั้ง",
|
||||
error: "เกิดข้อผิดพลาด",
|
||||
critical: "วิกฤต",
|
||||
wayToGetPagerDutyKey: "คุณสามารถรับได้โดยการไปที่ Service -> Service Directory -> (Select a service) -> Integrations -> Add integration, และค้นหา \"Events API V2\", สำหรับข้อมูลเพิ่มเติม {0}",
|
||||
"Integration Key": "Integration Key",
|
||||
"Integration URL": "Integration URL",
|
||||
"Auto resolve or acknowledged": "แก้ไขอัตโนมัติหรือยอมรับ",
|
||||
"do nothing": "ไม่ทำอะไร",
|
||||
"auto acknowledged": "ยอมรับอัตโนมัติ",
|
||||
"auto resolve": "แก้ไขอัตโนมัติ",
|
||||
"Bark Group": "กลุ่มที่จะประกาศ",
|
||||
"Bark Sound": "เสียงประกาศ",
|
||||
Authentication: "การตรวจสอบสิทธิ์",
|
||||
"HTTP Headers": "HTTP Headers",
|
||||
"Trust Proxy": "Trust Proxy",
|
||||
HomeAssistant: "Home Assistant",
|
||||
RadiusSecret: "Radius Secret",
|
||||
RadiusSecretDescription: "แบ่งปันข้อมูลลับระหว่างผู้ใช้งานและเซิร์ฟเวอร์",
|
||||
RadiusCalledStationId: "Called Station Id",
|
||||
RadiusCalledStationIdDescription: "Identifier of the called device",
|
||||
RadiusCallingStationId: "Calling Station Id",
|
||||
RadiusCallingStationIdDescription: "Identifier of the calling device",
|
||||
"Connection String": "Connection String",
|
||||
Query: "Query",
|
||||
settingsCertificateExpiry: "วันหมดอายุใบรับรอง TLS",
|
||||
certificationExpiryDescription: "การตรวจสอบ HTTPS แจ้งเตือนใบอนุญาติ TLS จะหมดอายุใน:",
|
||||
"Setup Docker Host": "Setup Docker Host",
|
||||
"Connection Type": "ประเภทการเชื่อมต่อ",
|
||||
"Docker Daemon": "Docker Daemon",
|
||||
deleteDockerHostMsg: "คุณแน่ใจหรือไม่ที่จะลบ Docker host นี้สำหรับการมอนิเตอร์ทั้งหมด?",
|
||||
socket: "Socket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker Container",
|
||||
"Container Name / ID": "Container Name / ID",
|
||||
"Docker Host": "Docker Host",
|
||||
"Docker Hosts": "Docker Hosts",
|
||||
"ntfy Topic": "ntfy Topic",
|
||||
Domain: "โดเมน",
|
||||
Workstation: "Workstation",
|
||||
disableCloudflaredNoAuthMsg: "คุณอยู่ในโหมดไม่มีการตรวจสอบสิทธิ์, ไม่จำเป็นต้องมีรหัสผ่าน",
|
||||
trustProxyDescription: "เชื่อ Header 'X-Forwarded-*' ถ้าคุณต้องการไอพีที่ถูกต้องและ Uptime Kuma อยู่ข้างหลัง Nginx หรือ Apache, คุณควรเปิดใช้งาน",
|
||||
Examples: "ตัวอย่าง",
|
||||
"Home Assistant URL": "Home Assistant URL",
|
||||
"Long-Lived Access Token": "Access Token แบบมีอายุ",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Access Token แบบมีอายุนานสามารถสร้างได้โดยคลิกชื่อบนโปรไฟล์ (ล่างซ้าย) และเลื่อนไปข้างล่างจากนั้นคลิก \"Create Token\"",
|
||||
"Notification Service": "บริการแจ้งเตือน",
|
||||
"default: notify all devices": "ค่าเริ่มต้น: แจ้งเตือนทุกอุปกรณ์",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "รายการแจ้งเตือนสามารถหาได้ใน Home Assistant ในเมนู \"Developer Tools > Services\" ค้นหา \"notification\" เพื่อหาชื่ออุปกรณ์หรือชื่อโทรศัพท์",
|
||||
"Automations can optionally be triggered in Home Assistant:": "สามารถเลือกสั่งงานระบบอัตโนมัติได้ใน Home Assistant:",
|
||||
"Trigger type:": "ชนิดสิ่งกระตุ้น:",
|
||||
"Event type:": "ชนิดกิจกรรม:",
|
||||
"Event data:": "ข้อมูลกิจกรรม:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "จากนั้นเลือกการกระทำ, ตัวอย่าง เช่น เปลี่ยนเป็นไฟสีแดง",
|
||||
"Frontend Version": "เวอร์ชั่น Frontend",
|
||||
"Frontend Version do not match backend version!": "เวอร์ชั่น Frontend ไม่ตรงกับ Backend !",
|
||||
};
|
||||
|
@@ -2,6 +2,8 @@ export default {
|
||||
languageName: "Türkçe",
|
||||
checkEverySecond: "{0} Saniyede bir kontrol et.",
|
||||
retryCheckEverySecond: "{0} Saniyede bir dene.",
|
||||
resendEveryXTimes: "Her {0} bir yeniden gönder",
|
||||
resendDisabled: "Yeniden gönderme devre dışı",
|
||||
retriesDescription: "Servisin kapalı olarak işaretlenmeden ve bir bildirim gönderilmeden önce maksimum yeniden deneme sayısı",
|
||||
ignoreTLSError: "HTTPS web siteleri için TLS/SSL hatasını yoksay",
|
||||
upsideDownModeDescription: "Servisin durumunu tersine çevirir. Servis çalışıyorsa kapalı olarak işaretler.",
|
||||
@@ -72,6 +74,7 @@ export default {
|
||||
"Heartbeat Interval": "Servis Test Aralığı",
|
||||
Retries: "Yeniden deneme",
|
||||
"Heartbeat Retry Interval": "Sağlık Durumları Tekrar Deneme Sıklığı",
|
||||
"Resend Notification if Down X times consequently": "Sonuç olarak X kez düşerse bildirimi yeniden gönder",
|
||||
Advanced: "Gelişmiş",
|
||||
"Upside Down Mode": "Ters/Düz Modu",
|
||||
"Max. Redirects": "Maksimum Yönlendirme",
|
||||
@@ -221,7 +224,7 @@ export default {
|
||||
teams: "Microsoft Teams",
|
||||
"Webhook URL": "Webhook URL",
|
||||
wayToGetTeamsURL: "Bir webhook URL'sinin nasıl oluşturulacağını öğrenebilirsiniz {0}.",
|
||||
signal: "Signal",
|
||||
signal: "Sinyal",
|
||||
Number: "Numara",
|
||||
Recipients: "Alıcılar",
|
||||
needSignalAPI: "REST API ile bir signal istemciniz olması gerekiyor.",
|
||||
@@ -333,6 +336,8 @@ export default {
|
||||
info: "info",
|
||||
warning: "warning",
|
||||
danger: "danger",
|
||||
error: "hata",
|
||||
critical: "kritik",
|
||||
primary: "primary",
|
||||
light: "light",
|
||||
dark: "dark",
|
||||
@@ -373,6 +378,13 @@ export default {
|
||||
smtpDkimHashAlgo: "Hash Algoritması (Opsiyonel)",
|
||||
smtpDkimheaderFieldNames: "İmzalanacak Başlık Anahtarları (Opsiyonel)",
|
||||
smtpDkimskipFields: "İmzalamayacak Başlık Anahtarları (Opsiyonel)",
|
||||
wayToGetPagerDutyKey: "Bunu Hizmet -> Hizmet Dizini -> (Bir hizmet seçin) -> Entegrasyonlar -> Entegrasyon ekle'ye giderek alabilirsiniz. Burada \"Events API V2\" için arama yapabilirsiniz. Daha fazla bilgi {0}",
|
||||
"Integration Key": "Entegrasyon Anahtarı",
|
||||
"Integration URL": "Entegrasyon URL'si",
|
||||
"Auto resolve or acknowledged": "Otomatik çözümleme veya onaylandı",
|
||||
"do nothing": "hiçbir şey yapma",
|
||||
"auto acknowledged": "otomatik onaylandı",
|
||||
"auto resolve": "otomatik çözümleme",
|
||||
gorush: "Gorush",
|
||||
alerta: "Alerta",
|
||||
alertaApiEndpoint: "API Endpoint",
|
||||
@@ -399,6 +411,8 @@ export default {
|
||||
SignName: "SignName",
|
||||
"Sms template must contain parameters: ": "Sms şablonu parametreleri içermelidir:",
|
||||
"Bark Endpoint": "Bark Endpoint",
|
||||
"Bark Group": "Bark Group",
|
||||
"Bark Sound": "Bark Sound",
|
||||
WebHookUrl: "WebHookUrl",
|
||||
SecretKey: "SecretKey",
|
||||
"For safety, must use secret key": "Güvenlik için gizli anahtar kullanılmalıdır",
|
||||
@@ -432,6 +446,7 @@ export default {
|
||||
Next: "Sonraki",
|
||||
"The slug is already taken. Please choose another slug.": "Slug zaten alındı. Lütfen başka bir slug seçin.",
|
||||
"No Proxy": "Proxy Yok",
|
||||
Authentication: "Kimlik doğrulama",
|
||||
"HTTP Basic Auth": "HTTP Temel Yetkilendirme",
|
||||
"New Status Page": "Yeni Durum Sayfası",
|
||||
"Page Not Found": "Sayfa bulunamadı",
|
||||
@@ -443,6 +458,8 @@ export default {
|
||||
"Message:": "Mesaj:",
|
||||
"Don't know how to get the token? Please read the guide:": "Tokeni nasıl alacağınızı bilmiyor musunuz? Lütfen kılavuzu okuyun:",
|
||||
"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.": "Halihazırda Cloudflare Tüneli üzerinden bağlanıyorsanız mevcut bağlantı kesilebilir. Durdurmak istediğinden emin misin? Onaylamak için mevcut şifrenizi yazın.",
|
||||
"HTTP Headers": "HTTP Headers",
|
||||
"Trust Proxy": "Trust Proxy",
|
||||
"Other Software": "Diğer Yazılımlar",
|
||||
"For example: nginx, Apache and Traefik.": "Örneğin: nginx, Apache ve Traefik.",
|
||||
"Please read": "Lütfen oku",
|
||||
@@ -455,6 +472,7 @@ export default {
|
||||
"Domain Name Expiry Notification": "Alan Adı Sona Erme Bildirimi",
|
||||
Proxy: "Proxy",
|
||||
"Date Created": "Tarih Oluşturuldu",
|
||||
HomeAssistant: "Home Assistant",
|
||||
onebotHttpAddress: "OneBot HTTP Adresi",
|
||||
onebotMessageType: "OneBot Mesaj Türü",
|
||||
onebotGroupMessage: "Grup",
|
||||
@@ -467,6 +485,12 @@ export default {
|
||||
"Domain Names": "Alan isimleri",
|
||||
signedInDisp: "{0} olarak oturum açıldı",
|
||||
signedInDispDisabled: "Yetkilendirme Devre Dışı.",
|
||||
RadiusSecret: "Radius Secret",
|
||||
RadiusSecretDescription: "İstemci ve sunucu arasında paylaşılan gizli anahtar",
|
||||
RadiusCalledStationId: "Aranan İstasyon Kimliği",
|
||||
RadiusCalledStationIdDescription: "Aranan cihazın tanımlayıcısı",
|
||||
RadiusCallingStationId: "Arayan İstasyon Kimliği",
|
||||
RadiusCallingStationIdDescription: "Arayan cihazın tanımlayıcısı",
|
||||
"Certificate Expiry Notification": "Sertifika Sona Erme Bildirimi",
|
||||
"API Username": "API Kullanıc Adı",
|
||||
"API Key": "API Anahtarı",
|
||||
@@ -475,7 +499,7 @@ export default {
|
||||
"Leave blank to use a shared sender number.": "Paylaşılan bir gönderen numarası kullanmak için boş bırakın.",
|
||||
"Octopush API Version": "Octopush API Sürümü",
|
||||
"Legacy Octopush-DM": "Eski Octopush-DM",
|
||||
"endpoint": "endpoint",
|
||||
endpoint: "uç nokta",
|
||||
octopushAPIKey: "Kontrol panelindeki HTTP API kimlik bilgilerinden \"API Key\"",
|
||||
octopushLogin: "Kontrol panelindeki HTTP API kimlik bilgilerinden \"Login\"",
|
||||
promosmsLogin: "API Oturum Açma Adı",
|
||||
@@ -518,13 +542,44 @@ export default {
|
||||
"Go back to the previous page.": "Bir önceki sayfaya geri git.",
|
||||
"Coming Soon": "Yakında gelecek",
|
||||
wayToGetClickSendSMSToken: "API Kullanıcı Adı ve API Anahtarını {0} adresinden alabilirsiniz.",
|
||||
error: "hata",
|
||||
critical: "kritik",
|
||||
wayToGetPagerDutyKey: "Bunu şuraya giderek alabilirsiniz: Servis -> Servis Dizini -> (Bir servis seçin) -> Entegrasyonlar -> Entegrasyon ekle. Burada \"Events API V2\" için arama yapabilirsiniz. Daha fazla bilgi {0}",
|
||||
"Integration Key": "Entegrasyon Anahtarı",
|
||||
"Integration URL": "Entegrasyon URL",
|
||||
"Auto resolve or acknowledged": "Otomatik çözümleme veya onaylama",
|
||||
"do nothing": "hiçbir şey yapma",
|
||||
"auto acknowledged": "otomatik onaylama",
|
||||
"auto resolve": "otomatik çözümleme",
|
||||
"Connection String": "Bağlantı dizisi",
|
||||
Query: "Sorgu",
|
||||
settingsCertificateExpiry: "TLS Sertifikasının Geçerlilik Süresi",
|
||||
certificationExpiryDescription: "HTTPS Monitörleri, TLS sertifikasının süresi dolduğunda bildirimi tetikler:",
|
||||
"Setup Docker Host": "Docker Ana Bilgisayarını Kur",
|
||||
"Connection Type": "Bağlantı türü",
|
||||
"Docker Daemon": "Docker Daemon",
|
||||
deleteDockerHostMsg: "Bu docker ana bilgisayarını tüm monitörler için silmek istediğinizden emin misiniz?",
|
||||
socket: "Soket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker Konteyner",
|
||||
"Container Name / ID": "Konteyner Adı / Kimliği",
|
||||
"Docker Host": "Docker Ana Bilgisayarı",
|
||||
"Docker Hosts": "Docker Ana Bilgisayarları",
|
||||
"ntfy Topic": "ntfy Konu",
|
||||
Domain: "Domain",
|
||||
Workstation: "İş İstasyonu",
|
||||
disableCloudflaredNoAuthMsg: "Yetki yok modundasınız, şifre gerekli değil.",
|
||||
trustProxyDescription: "'X-Forwarded-*' başlıklarına güvenin. Doğru istemci IP'sini almak istiyorsanız ve Uptime Kuma'nız Nginx veya Apache'nin arkasındaysa, bunu etkinleştirmelisiniz.",
|
||||
wayToGetLineNotifyToken: "{0} adresinden bir erişim jetonu alabilirsiniz.",
|
||||
Examples: "Örnekler",
|
||||
"Home Assistant URL": "Home Assistant URL",
|
||||
"Long-Lived Access Token": "Long-Lived Erişim Anahtarı",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Erişim Anahtarı, profil adınıza (sol altta) tıklayarak ve aşağıya kaydırarak ve ardından Anahtar Oluştur'a tıklayarak oluşturulabilir. ",
|
||||
"Notification Service": "Bildirim Hizmeti",
|
||||
"default: notify all devices": "varsayılan: tüm cihazları bilgilendir",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Cihazınızın/telefonunuzun adını bulmak için Home Assistant'ta \"Geliştirici Araçları > Hizmetler\" \"bildirim\" araması altında bir Bildirim Hizmetleri listesi bulunabilir.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Otomasyonlar isteğe bağlı olarak Home Assistant'ta tetiklenebilir:",
|
||||
"Trigger type:": "Trigger tipi:",
|
||||
"Event type:": "Etkinlik tipi:",
|
||||
"Event data:": "Etkinlik verileri:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "Ardından bir eylem seçin, örneğin RGB ışığının kırmızı olduğu sahneyi değiştirin.",
|
||||
"Frontend Version": "Frontend Sürümü",
|
||||
"Frontend Version do not match backend version!": "Frontend Sürümü, backend sürümüyle eşleşmiyor!",
|
||||
"Base URL": "Temel URL",
|
||||
goAlertInfo: "GoAlert, çağrı üzerine zamanlama, otomatik eskalasyonlar ve bildirimler (SMS veya sesli çağrılar gibi) için açık kaynaklı bir uygulamadır. Doğru kişiyi, doğru şekilde ve doğru zamanda otomatik olarak devreye sokun! {0}",
|
||||
goAlertIntegrationKeyInfo: "Servis için genel API entegrasyon anahtarını, genellikle kopyalanan URL'nin belirteç parametresinin değeri olan \"aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" biçiminde alın.",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Kullanımdan Kaldırıldı: Birçok özellik eklendiğinden ve bu yedekleme özelliği biraz bakımsız olduğundan, tam bir yedekleme oluşturamaz veya geri yükleyemez.",
|
||||
backupRecommend: "Lütfen bunun yerine birimi veya veri klasörünü (./data/) doğrudan yedekleyin.",
|
||||
};
|
||||
|
@@ -540,6 +540,59 @@ export default {
|
||||
settingsCertificateExpiry: "TLS 证书过期通知",
|
||||
certificationExpiryDescription: "HTTPS 监控项发现被监控目标的 TLS 证书剩余有效期少于以下天数时将发出通知:",
|
||||
"ntfy Topic": "ntfy 主题",
|
||||
"Domain": "域名",
|
||||
"Workstation": "工作站",
|
||||
Domain: "域名",
|
||||
Workstation: "工作站",
|
||||
resendEveryXTimes: "每 {0} 次失败则重复发送一次",
|
||||
resendDisabled: "为 0 时禁用重复发送",
|
||||
"Resend Notification if Down X times consequently": "连续失败时重复发送通知的间隔次数",
|
||||
"HTTP Headers": "HTTP 头",
|
||||
"Trust Proxy": "可信的代理类字段",
|
||||
HomeAssistant: "Home Assistant",
|
||||
RadiusSecret: "Radius 共享机密",
|
||||
RadiusSecretDescription: "客户端和服务器之间共享的密钥",
|
||||
RadiusCalledStationId: "NAS 网络访问服务器号码(Called Station Id)",
|
||||
RadiusCalledStationIdDescription: "所访问的服务器的标识",
|
||||
RadiusCallingStationId: "呼叫方号码(Calling Station Id)",
|
||||
RadiusCallingStationIdDescription: "发出请求的设备的标识",
|
||||
"Setup Docker Host": "配置 Docker 宿主信息",
|
||||
"Connection Type": "连接方式",
|
||||
"Docker Daemon": "Docker 守护进程",
|
||||
deleteDockerHostMsg: "您确定您要删除此 Docker 宿主设置吗?这会影响所有 Docker 监控项",
|
||||
socket: "Socket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker 容器",
|
||||
"Container Name / ID": "容器名称 / ID",
|
||||
"Docker Host": "Docker 宿主",
|
||||
"Docker Hosts": "Docker 宿主",
|
||||
disableCloudflaredNoAuthMsg: "您现在正处于 No Auth 模式,无需输入密码",
|
||||
trustProxyDescription: "信任 'X-Forwarded-*' 头。如果您的 Uptime Kuma 是通过 Nginx 或 Apache 等反代服务对外提供访问的话,则您应当启用本功能以获取正确的客户端 IP。",
|
||||
wayToGetLineNotifyToken: "您可以在 {0} 获取 Access token",
|
||||
Examples: "例如",
|
||||
"Home Assistant URL": "Home Assistant 地址",
|
||||
"Long-Lived Access Token": "长期访问令牌",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "长期访问令牌可通过点击左下角您的用户名,滚动到页面底部并点击 Create Token 按钮获取。",
|
||||
"Notification Service": "Notification Service",
|
||||
"default: notify all devices": "默认:通知所有设备",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "通知服务的列表可在 Home Assistant 中的 Developer Tools > Services 通过搜索您的设备或手机的名称来获得。",
|
||||
"Automations can optionally be triggered in Home Assistant:": "可以在 Home Assistant 使用下列模板设置自动化操作的触发条件:",
|
||||
"Trigger type:": "触发类型:",
|
||||
"Event type:": "事件类型:",
|
||||
"Event data:": "事件数据:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "然后您可以选择关联操作,例如切换到 RGB 灯发出红光的场景",
|
||||
"Frontend Version": "前端版本",
|
||||
"Frontend Version do not match backend version!": "前端版本与后端版本不符!",
|
||||
"Base URL": "API 基础地址",
|
||||
goAlertInfo: "GoAlert 是一个用于呼叫调度、自动汇报和通知(如 SMS 或语音呼叫)的开源应用程序。在正确的时间以正确的方式自动让正确的人参与!{0}",
|
||||
goAlertIntegrationKeyInfo: "使用形如 aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee 的通用 API 集成密钥,通常是复制来的链接中的 token 参数值。",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "已弃用:由于大量新功能的加入,以及备份功能没有时时维护,现在备份功能已经无法生成完整的备份和恢复完整的设置。",
|
||||
backupRecommend: "请改为直接备份 docker 卷或者数据文件夹(./data/)。",
|
||||
Optional: "可选的",
|
||||
squadcast: "Squadcast",
|
||||
SendKey: "SendKey",
|
||||
"SMSManager API Docs": "SMSManager API 文档在",
|
||||
"Gateway Type": "网关类型",
|
||||
SMSManager: "SMSManager",
|
||||
"You can divide numbers with": "可用的分隔符:",
|
||||
"or": "或",
|
||||
};
|
||||
|
@@ -380,4 +380,6 @@ export default {
|
||||
proxyDescription: "必須將代理伺服器指派給監測器才能運作。",
|
||||
enableProxyDescription: "此代理伺服器在啟用前不會在監測器上生效,您可以藉由控制啟用狀態來暫時對所有的監測器停用代理伺服器。",
|
||||
setAsDefaultProxyDescription: "預設情況下,新監測器將啟用此代理伺服器。您仍可分別停用各監測器的代理伺服器。",
|
||||
Maintenance: "維護",
|
||||
statusMaintenance: "維護中",
|
||||
};
|
||||
|
@@ -2,6 +2,8 @@ export default {
|
||||
languageName: "繁體中文 (台灣)",
|
||||
checkEverySecond: "每 {0} 秒檢查一次",
|
||||
retryCheckEverySecond: "每 {0} 秒重試一次",
|
||||
resendEveryXTimes: "每 {0} 次便重新傳送",
|
||||
resendDisabled: "重新傳送已停用",
|
||||
retriesDescription: "在服務被標記為離線並傳送通知前的最大重試次數",
|
||||
ignoreTLSError: "忽略 HTTPS 網站的 TLS/SSL 錯誤",
|
||||
upsideDownModeDescription: "反轉顯示狀態。若服務可以連線,將顯示離線。",
|
||||
@@ -72,6 +74,7 @@ export default {
|
||||
"Heartbeat Interval": "心跳間隔",
|
||||
Retries: "重試次數",
|
||||
"Heartbeat Retry Interval": "心跳重試間隔",
|
||||
"Resend Notification if Down X times consequently": "若 X 次心跳皆離線,重新傳送通知",
|
||||
Advanced: "進階",
|
||||
"Upside Down Mode": "顛倒模式",
|
||||
"Max. Redirects": "最大重新導向次數",
|
||||
@@ -455,6 +458,8 @@ export default {
|
||||
"Message:": "訊息:",
|
||||
"Don't know how to get the token? Please read the guide:": "不知道如何取得權杖嗎?請閱讀指南:",
|
||||
"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.": "如果您目前正透過 Cloudflare Tunnel 連線,可能會導致連線中斷。您確定要停止嗎?請輸入密碼以確認。",
|
||||
"HTTP Headers": "HTTP 標頭",
|
||||
"Trust Proxy": "信任的 Proxy",
|
||||
"Other Software": "其他軟體",
|
||||
"For example: nginx, Apache and Traefik.": "例如 nginx、Apache 和 Traefik。",
|
||||
"Please read": "請閱覽",
|
||||
@@ -467,6 +472,7 @@ export default {
|
||||
"Domain Name Expiry Notification": "網域名稱到期通知",
|
||||
Proxy: "Proxy",
|
||||
"Date Created": "建立日期",
|
||||
HomeAssistant: "Home Assistant",
|
||||
onebotHttpAddress: "OneBot HTTP 位址",
|
||||
onebotMessageType: "OneBot 訊息類型",
|
||||
onebotGroupMessage: "群組",
|
||||
@@ -479,6 +485,12 @@ export default {
|
||||
"Domain Names": "網域名稱",
|
||||
signedInDisp: "以 {0} 身分登入",
|
||||
signedInDispDisabled: "驗證已停用。",
|
||||
RadiusSecret: "Radius Secret",
|
||||
RadiusSecretDescription: "客戶端與伺服器端的共享機密",
|
||||
RadiusCalledStationId: "被叫站 Id",
|
||||
RadiusCalledStationIdDescription: "被呼叫裝置的識別碼",
|
||||
RadiusCallingStationId: "呼叫站 Id",
|
||||
RadiusCallingStationIdDescription: "呼叫裝置的識別碼",
|
||||
"Certificate Expiry Notification": "憑證到期通知",
|
||||
"API Username": "API 使用者名稱",
|
||||
"API Key": "API 金鑰",
|
||||
@@ -488,8 +500,8 @@ export default {
|
||||
"Octopush API Version": "Octopush API 版本",
|
||||
"Legacy Octopush-DM": "舊版 Octopush-DM",
|
||||
"endpoint": "端",
|
||||
octopushAPIKey: "\"API key\" from HTTP API credentials in control panel",
|
||||
octopushLogin: "\"Login\" from HTTP API credentials in control panel",
|
||||
octopushAPIKey: "在控制台的 HTTP API 憑證取得的 \"API 金鑰\"",
|
||||
octopushLogin: "在控制台的 HTTP API 憑證取得的 \"Login\"",
|
||||
promosmsLogin: "API 登入名稱",
|
||||
promosmsPassword: "API 密碼",
|
||||
"pushoversounds pushover": "Pushover (預設)",
|
||||
@@ -504,9 +516,9 @@ export default {
|
||||
"pushoversounds intermission": "中場休息",
|
||||
"pushoversounds magic": "魔法",
|
||||
"pushoversounds mechanical": "機械",
|
||||
"pushoversounds pianobar": "Piano Bar",
|
||||
"pushoversounds siren": "Siren",
|
||||
"pushoversounds spacealarm": "Space Alarm",
|
||||
"pushoversounds pianobar": "鋼琴酒吧",
|
||||
"pushoversounds siren": "警鈴",
|
||||
"pushoversounds spacealarm": "太空鬧鐘",
|
||||
"pushoversounds tugboat": "汽笛",
|
||||
"pushoversounds alien": "外星鬧鐘 (長)",
|
||||
"pushoversounds climb": "爬升 (長)",
|
||||
@@ -531,11 +543,43 @@ export default {
|
||||
"Coming Soon": "即將推出",
|
||||
wayToGetClickSendSMSToken: "您可以從 {0} 取得 API 使用者名稱和金鑰。",
|
||||
"Connection String": "連線字串",
|
||||
"Query": "查詢",
|
||||
Query: "查詢",
|
||||
settingsCertificateExpiry: "TLS 憑證到期",
|
||||
certificationExpiryDescription: "TLS 將於 X 天後到期時觸發 HTTPS 監測器通知:",
|
||||
"Setup Docker Host": "設定 Docker 主機",
|
||||
"Connection Type": "連線類型",
|
||||
"Docker Daemon": "Docker 精靈",
|
||||
deleteDockerHostMsg: "您確定要為所有監測器刪除此 Docker 主機嗎?",
|
||||
socket: "通訊端",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker 容器",
|
||||
"Container Name / ID": "容器名稱 / ID",
|
||||
"Docker Host": "Docker 主機",
|
||||
"Docker Hosts": "Docker 主機",
|
||||
"ntfy Topic": "ntfy 主題",
|
||||
"Domain": "網域",
|
||||
"Workstation": "工作站",
|
||||
Domain: "網域",
|
||||
Workstation: "工作站",
|
||||
disableCloudflaredNoAuthMsg: "您處於無驗證模式。無須輸入密碼。",
|
||||
trustProxyDescription: "信任 'X-Forwarded-*' 標頭。如果您想要取得正確的客戶端 IP,且您的 Uptime Kuma 架設於 Nginx 或 Apache 後方,您應啟用此選項。",
|
||||
wayToGetLineNotifyToken: "您可以從 {0} 取得存取權杖",
|
||||
Examples: "範例",
|
||||
"Home Assistant URL": "Home Assistant 網址",
|
||||
"Long-Lived Access Token": "長期有效存取權杖",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "若要建立長期有效存取權杖,請點擊您的個人檔案名稱 (左下角),捲動至最下方,然後點擊建立權杖。",
|
||||
"Notification Service": "通知服務",
|
||||
"default: notify all devices": "預設:通知所有服務",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "您可以在 Home Assistant 中查看通知服務的列表,在\"開發者工具 > 服務\"下搜尋\"通知\"來找到您的裝置/手機的名稱。",
|
||||
"Automations can optionally be triggered in Home Assistant:": "可以選擇在 Home Assistant 中觸發自動化程序:",
|
||||
"Trigger type:": "觸發器類型:",
|
||||
"Event type:": "事件類型:",
|
||||
"Event data:": "事件資料:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "然後選擇動作,例如切換至 RGB 燈為紅色的場景。",
|
||||
"Frontend Version": "前端版本",
|
||||
"Frontend Version do not match backend version!": "前端版本與後端版本不符!",
|
||||
"Base URL": "基底網址",
|
||||
goAlertInfo: "GoAlert 是用於待命排程、升級自動化,以及通知 (如簡訊或語音通話) 的開源應用程式。自動在正確的時間、用洽當的方法、聯絡合適的人! {0}",
|
||||
goAlertIntegrationKeyInfo: "取得服務的通用 API 整合金鑰,格式為 \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"。通常是已複製的網址的權杖參數值。",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "過時:由於新功能的增加,且未妥善維護,故此備份功能無法產生或復原完整備份。",
|
||||
backupRecommend: "請直接備份磁碟區或 ./data/ 資料夾。",
|
||||
};
|
||||
|
@@ -37,19 +37,32 @@
|
||||
<div class="profile-pic">{{ $root.usernameFirstChar }}</div>
|
||||
<font-awesome-icon icon="angle-down" />
|
||||
</div>
|
||||
|
||||
<!-- Header's Dropdown Menu -->
|
||||
<ul class="dropdown-menu">
|
||||
<!-- Username -->
|
||||
<li>
|
||||
<i18n-t v-if="$root.username != null" tag="span" keypath="signedInDisp" class="dropdown-item-text">
|
||||
<strong>{{ $root.username }}</strong>
|
||||
</i18n-t>
|
||||
<span v-if="$root.username == null" class="dropdown-item-text">{{ $t("signedInDispDisabled") }}</span>
|
||||
</li>
|
||||
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
|
||||
<!-- Functions -->
|
||||
<li>
|
||||
<router-link to="/settings" class="dropdown-item" :class="{ active: $route.path.includes('settings') }">
|
||||
<router-link to="/maintenance" class="dropdown-item" :class="{ active: $route.path.includes('manage-maintenance') }">
|
||||
<font-awesome-icon icon="wrench" /> {{ $t("Maintenance") }}
|
||||
</router-link>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<router-link to="/settings/general" class="dropdown-item" :class="{ active: $route.path.includes('settings') }">
|
||||
<font-awesome-icon icon="cog" /> {{ $t("Settings") }}
|
||||
</router-link>
|
||||
</li>
|
||||
|
||||
<li v-if="$root.loggedIn && $root.socket.token !== 'autoLogin'">
|
||||
<button class="dropdown-item" @click="$root.logout">
|
||||
<font-awesome-icon icon="sign-out-alt" />
|
||||
@@ -304,5 +317,4 @@ main {
|
||||
background-color: $dark-bg;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@@ -5,6 +5,7 @@ import Toast from "vue-toastification";
|
||||
import "vue-toastification/dist/index.css";
|
||||
import App from "./App.vue";
|
||||
import "./assets/app.scss";
|
||||
import "./assets/vue-datepicker.scss";
|
||||
import { i18n } from "./i18n";
|
||||
import { FontAwesomeIcon } from "./icon.js";
|
||||
import datetime from "./mixins/datetime";
|
||||
@@ -15,6 +16,13 @@ import theme from "./mixins/theme";
|
||||
import lang from "./mixins/lang";
|
||||
import { router } from "./router";
|
||||
import { appName } from "./util.ts";
|
||||
import dayjs from "dayjs";
|
||||
import timezone from "dayjs/plugin/timezone";
|
||||
import utc from "dayjs/plugin/utc";
|
||||
import relativeTime from "dayjs/plugin/relativeTime";
|
||||
dayjs.extend(utc);
|
||||
dayjs.extend(timezone);
|
||||
dayjs.extend(relativeTime);
|
||||
|
||||
const app = createApp({
|
||||
mixins: [
|
||||
|
@@ -1,10 +1,4 @@
|
||||
import dayjs from "dayjs";
|
||||
import relativeTime from "dayjs/plugin/relativeTime";
|
||||
import timezone from "dayjs/plugin/timezone";
|
||||
import utc from "dayjs/plugin/utc";
|
||||
dayjs.extend(utc);
|
||||
dayjs.extend(timezone);
|
||||
dayjs.extend(relativeTime);
|
||||
|
||||
/**
|
||||
* DateTime Mixin
|
||||
@@ -18,6 +12,19 @@ export default {
|
||||
},
|
||||
|
||||
methods: {
|
||||
toUTC(value) {
|
||||
return dayjs.tz(value, this.timezone).utc().format();
|
||||
},
|
||||
|
||||
/**
|
||||
* Used for <input type="datetime" />
|
||||
* @param value
|
||||
* @returns {string}
|
||||
*/
|
||||
toDateTimeInputFormat(value) {
|
||||
return this.datetimeFormat(value, "YYYY-MM-DDTHH:mm");
|
||||
},
|
||||
|
||||
/**
|
||||
* Return a given value in the format YYYY-MM-DD HH:mm:ss
|
||||
* @param {any} value Value to format as date time
|
||||
@@ -27,6 +34,17 @@ export default {
|
||||
return this.datetimeFormat(value, "YYYY-MM-DD HH:mm:ss");
|
||||
},
|
||||
|
||||
datetimeMaintenance(value) {
|
||||
const inputDate = new Date(value);
|
||||
const now = new Date(Date.now());
|
||||
|
||||
if (inputDate.getFullYear() === now.getUTCFullYear() && inputDate.getMonth() === now.getUTCMonth() && inputDate.getDay() === now.getUTCDay()) {
|
||||
return this.datetimeFormat(value, "HH:mm");
|
||||
} else {
|
||||
return this.datetimeFormat(value, "YYYY-MM-DD HH:mm");
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Return a given value in the format YYYY-MM-DD
|
||||
* @param {any} value Value to format as date
|
||||
@@ -64,7 +82,7 @@ export default {
|
||||
return dayjs.utc(value).tz(this.timezone).format(format);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
computed: {
|
||||
|
@@ -33,6 +33,7 @@ export default {
|
||||
allowLoginDialog: false, // Allowed to show login dialog, but "loggedIn" have to be true too. This exists because prevent the login dialog show 0.1s in first before the socket server auth-ed.
|
||||
loggedIn: false,
|
||||
monitorList: { },
|
||||
maintenanceList: { },
|
||||
heartbeatList: { },
|
||||
importantHeartbeatList: { },
|
||||
avgPingList: { },
|
||||
@@ -129,6 +130,10 @@ export default {
|
||||
this.monitorList = data;
|
||||
});
|
||||
|
||||
socket.on("maintenanceList", (data) => {
|
||||
this.maintenanceList = data;
|
||||
});
|
||||
|
||||
socket.on("notificationList", (data) => {
|
||||
this.notificationList = data;
|
||||
});
|
||||
@@ -445,6 +450,13 @@ export default {
|
||||
socket.emit("getMonitorList", callback);
|
||||
},
|
||||
|
||||
getMaintenanceList(callback) {
|
||||
if (! callback) {
|
||||
callback = () => { };
|
||||
}
|
||||
socket.emit("getMaintenanceList", callback);
|
||||
},
|
||||
|
||||
/**
|
||||
* Add a monitor
|
||||
* @param {Object} monitor Object representing monitor to add
|
||||
@@ -454,6 +466,26 @@ export default {
|
||||
socket.emit("add", monitor, callback);
|
||||
},
|
||||
|
||||
addMaintenance(maintenance, callback) {
|
||||
socket.emit("addMaintenance", maintenance, callback);
|
||||
},
|
||||
|
||||
addMonitorMaintenance(maintenanceID, monitors, callback) {
|
||||
socket.emit("addMonitorMaintenance", maintenanceID, monitors, callback);
|
||||
},
|
||||
|
||||
addMaintenanceStatusPage(maintenanceID, statusPages, callback) {
|
||||
socket.emit("addMaintenanceStatusPage", maintenanceID, statusPages, callback);
|
||||
},
|
||||
|
||||
getMonitorMaintenance(maintenanceID, callback) {
|
||||
socket.emit("getMonitorMaintenance", maintenanceID, callback);
|
||||
},
|
||||
|
||||
getMaintenanceStatusPage(maintenanceID, callback) {
|
||||
socket.emit("getMaintenanceStatusPage", maintenanceID, callback);
|
||||
},
|
||||
|
||||
/**
|
||||
* Delete monitor by ID
|
||||
* @param {number} monitorID ID of monitor to delete
|
||||
@@ -463,6 +495,10 @@ export default {
|
||||
socket.emit("deleteMonitor", monitorID, callback);
|
||||
},
|
||||
|
||||
deleteMaintenance(maintenanceID, callback) {
|
||||
socket.emit("deleteMaintenance", maintenanceID, callback);
|
||||
},
|
||||
|
||||
/** Clear the hearbeat list */
|
||||
clearData() {
|
||||
console.log("reset heartbeat list");
|
||||
@@ -550,7 +586,12 @@ export default {
|
||||
for (let monitorID in this.lastHeartbeatList) {
|
||||
let lastHeartBeat = this.lastHeartbeatList[monitorID];
|
||||
|
||||
if (! lastHeartBeat) {
|
||||
if (this.monitorList[monitorID].maintenance) {
|
||||
result[monitorID] = {
|
||||
text: this.$t("statusMaintenance"),
|
||||
color: "maintenance",
|
||||
};
|
||||
} else if (! lastHeartBeat) {
|
||||
result[monitorID] = unknown;
|
||||
} else if (lastHeartBeat.status === 1) {
|
||||
result[monitorID] = {
|
||||
@@ -579,6 +620,7 @@ export default {
|
||||
let result = {
|
||||
up: 0,
|
||||
down: 0,
|
||||
maintenance: 0,
|
||||
unknown: 0,
|
||||
pause: 0,
|
||||
};
|
||||
@@ -587,7 +629,9 @@ export default {
|
||||
let beat = this.$root.lastHeartbeatList[monitorID];
|
||||
let monitor = this.$root.monitorList[monitorID];
|
||||
|
||||
if (monitor && ! monitor.active) {
|
||||
if (monitor && monitor.maintenance) {
|
||||
result.maintenance++;
|
||||
} else if (monitor && ! monitor.active) {
|
||||
result.pause++;
|
||||
} else if (beat) {
|
||||
if (beat.status === 1) {
|
||||
|
@@ -46,6 +46,10 @@ export default {
|
||||
}
|
||||
return this.userTheme;
|
||||
}
|
||||
},
|
||||
|
||||
isDark() {
|
||||
return this.theme === "dark";
|
||||
}
|
||||
},
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div v-if="! $root.isMobile" class="col-12 col-md-5 col-xl-4">
|
||||
<div v-if="!$root.isMobile" class="col-12 col-md-5 col-xl-4">
|
||||
<div>
|
||||
<router-link to="/add" class="btn btn-primary mb-3"><font-awesome-icon icon="plus" /> {{ $t("Add New Monitor") }}</router-link>
|
||||
</div>
|
||||
|
@@ -15,6 +15,10 @@
|
||||
<h3>{{ $t("Down") }}</h3>
|
||||
<span class="num text-danger">{{ $root.stats.down }}</span>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3>{{ $t("Maintenance") }}</h3>
|
||||
<span class="num text-maintenance">{{ $root.stats.maintenance }}</span>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3>{{ $t("Unknown") }}</h3>
|
||||
<span class="num text-secondary">{{ $root.stats.unknown }}</span>
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<Tag v-for="tag in monitor.tags" :key="tag.id" :item="tag" :size="'sm'" />
|
||||
</div>
|
||||
<p class="url">
|
||||
<a v-if="monitor.type === 'http' || monitor.type === 'keyword' " :href="monitor.url" target="_blank">{{ monitor.url }}</a>
|
||||
<a v-if="monitor.type === 'http' || monitor.type === 'keyword' " :href="monitor.url" target="_blank" rel="noopener noreferrer">{{ monitor.url }}</a>
|
||||
<span v-if="monitor.type === 'port'">TCP Ping {{ monitor.hostname }}:{{ monitor.port }}</span>
|
||||
<span v-if="monitor.type === 'ping'">Ping: {{ monitor.hostname }}</span>
|
||||
<span v-if="monitor.type === 'keyword'">
|
||||
@@ -20,18 +20,20 @@
|
||||
</p>
|
||||
|
||||
<div class="functions">
|
||||
<button v-if="monitor.active" class="btn btn-light" @click="pauseDialog">
|
||||
<font-awesome-icon icon="pause" /> {{ $t("Pause") }}
|
||||
</button>
|
||||
<button v-if="! monitor.active" class="btn btn-primary" @click="resumeMonitor">
|
||||
<font-awesome-icon icon="play" /> {{ $t("Resume") }}
|
||||
</button>
|
||||
<router-link :to=" '/edit/' + monitor.id " class="btn btn-secondary">
|
||||
<font-awesome-icon icon="edit" /> {{ $t("Edit") }}
|
||||
</router-link>
|
||||
<button class="btn btn-danger" @click="deleteDialog">
|
||||
<font-awesome-icon icon="trash" /> {{ $t("Delete") }}
|
||||
</button>
|
||||
<div class="btn-group" role="group">
|
||||
<button v-if="monitor.active" class="btn btn-normal" @click="pauseDialog">
|
||||
<font-awesome-icon icon="pause" /> {{ $t("Pause") }}
|
||||
</button>
|
||||
<button v-if="! monitor.active" class="btn btn-primary" @click="resumeMonitor">
|
||||
<font-awesome-icon icon="play" /> {{ $t("Resume") }}
|
||||
</button>
|
||||
<router-link :to=" '/edit/' + monitor.id " class="btn btn-normal">
|
||||
<font-awesome-icon icon="edit" /> {{ $t("Edit") }}
|
||||
</router-link>
|
||||
<button class="btn btn-danger" @click="deleteDialog">
|
||||
<font-awesome-icon icon="trash" /> {{ $t("Delete") }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="shadow-box">
|
||||
@@ -392,11 +394,6 @@ export default {
|
||||
@media (max-width: 550px) {
|
||||
.functions {
|
||||
text-align: center;
|
||||
|
||||
button, a {
|
||||
margin-left: 10px !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.ping-chart-wrapper {
|
||||
@@ -439,12 +436,6 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
.functions {
|
||||
button, a {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.shadow-box {
|
||||
padding: 20px;
|
||||
margin-top: 25px;
|
||||
|
534
src/pages/EditMaintenance.vue
Normal file
534
src/pages/EditMaintenance.vue
Normal file
@@ -0,0 +1,534 @@
|
||||
<template>
|
||||
<transition name="slide-fade" appear>
|
||||
<div>
|
||||
<h1 class="mb-3">{{ pageName }}</h1>
|
||||
<form @submit.prevent="submit">
|
||||
<div class="shadow-box">
|
||||
<div class="row">
|
||||
<div class="col-xl-10">
|
||||
<!-- Title -->
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">{{ $t("Title") }}</label>
|
||||
<input
|
||||
id="name" v-model="maintenance.title" type="text" class="form-control"
|
||||
required
|
||||
>
|
||||
</div>
|
||||
|
||||
<!-- Description -->
|
||||
<div class="my-3">
|
||||
<label for="description" class="form-label">{{ $t("Description") }}</label>
|
||||
<textarea
|
||||
id="description" v-model="maintenance.description" class="form-control"
|
||||
></textarea>
|
||||
</div>
|
||||
|
||||
<!-- Affected Monitors -->
|
||||
<h2 class="mt-5">{{ $t("Affected Monitors") }}</h2>
|
||||
{{ $t("affectedMonitorsDescription") }}
|
||||
|
||||
<div class="my-3">
|
||||
<VueMultiselect
|
||||
id="affected_monitors"
|
||||
v-model="affectedMonitors"
|
||||
:options="affectedMonitorsOptions"
|
||||
track-by="id"
|
||||
label="name"
|
||||
:multiple="true"
|
||||
:close-on-select="false"
|
||||
:clear-on-select="false"
|
||||
:preserve-search="true"
|
||||
:placeholder="$t('Pick Affected Monitors...')"
|
||||
:preselect-first="false"
|
||||
:max-height="600"
|
||||
:taggable="false"
|
||||
></VueMultiselect>
|
||||
</div>
|
||||
|
||||
<!-- Status pages to display maintenance info on -->
|
||||
<h2 class="mt-5">{{ $t("Status Pages") }}</h2>
|
||||
{{ $t("affectedStatusPages") }}
|
||||
|
||||
<div class="my-3">
|
||||
<!-- Show on all pages -->
|
||||
<div class="form-check mb-2">
|
||||
<input
|
||||
id="show-on-all-pages" v-model="showOnAllPages" class="form-check-input"
|
||||
type="checkbox"
|
||||
>
|
||||
<label class="form-check-label" for="show-powered-by">{{
|
||||
$t("All Status Pages")
|
||||
}}</label>
|
||||
</div>
|
||||
|
||||
<div v-if="!showOnAllPages">
|
||||
<VueMultiselect
|
||||
id="selected_status_pages"
|
||||
v-model="selectedStatusPages"
|
||||
:options="selectedStatusPagesOptions"
|
||||
track-by="id"
|
||||
label="name"
|
||||
:multiple="true"
|
||||
:close-on-select="false"
|
||||
:clear-on-select="false"
|
||||
:preserve-search="true"
|
||||
:placeholder="$t('Select status pages...')"
|
||||
:preselect-first="false"
|
||||
:max-height="600"
|
||||
:taggable="false"
|
||||
></VueMultiselect>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="mt-5">{{ $t("Date and Time") }}</h2>
|
||||
|
||||
<div>⚠️ {{ $t("warningTimezone") }}: <mark>{{ $root.info.serverTimezone }} ({{ $root.info.serverTimezoneOffset }})</mark></div>
|
||||
|
||||
<!-- Strategy -->
|
||||
<div class="my-3">
|
||||
<label for="strategy" class="form-label">{{ $t("Strategy") }}</label>
|
||||
<select id="strategy" v-model="maintenance.strategy" class="form-select">
|
||||
<option value="manual">{{ $t("strategyManual") }}</option>
|
||||
<option value="single">{{ $t("Single Maintenance Window") }}</option>
|
||||
<option value="recurring-interval">{{ $t("Recurring") }} - {{ $t("recurringInterval") }}</option>
|
||||
<option value="recurring-weekday">{{ $t("Recurring") }} - {{ $t("dayOfWeek") }}</option>
|
||||
<option value="recurring-day-of-month">{{ $t("Recurring") }} - {{ $t("dayOfMonth") }}</option>
|
||||
<option v-if="false" value="recurring-day-of-year">{{ $t("Recurring") }} - Day of Year</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- Single Maintenance Window -->
|
||||
<template v-if="maintenance.strategy === 'single'">
|
||||
<!-- DateTime Range -->
|
||||
<div class="my-3">
|
||||
<label class="form-label">{{ $t("DateTime Range") }}</label>
|
||||
<Datepicker
|
||||
v-model="maintenance.dateRange"
|
||||
:dark="$root.isDark"
|
||||
range
|
||||
:monthChangeOnScroll="false"
|
||||
:minDate="minDate"
|
||||
format="yyyy-MM-dd HH:mm"
|
||||
modelType="yyyy-MM-dd HH:mm:ss"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Recurring - Interval -->
|
||||
<template v-if="maintenance.strategy === 'recurring-interval'">
|
||||
<div class="my-3">
|
||||
<label for="interval-day" class="form-label">
|
||||
{{ $t("recurringInterval") }}
|
||||
|
||||
<template v-if="maintenance.intervalDay >= 1">
|
||||
({{
|
||||
$tc("recurringIntervalMessage", maintenance.intervalDay, [
|
||||
maintenance.intervalDay
|
||||
])
|
||||
}})
|
||||
</template>
|
||||
</label>
|
||||
<input id="interval-day" v-model="maintenance.intervalDay" type="number" class="form-control" required min="1" max="3650" step="1">
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Recurring - Weekday -->
|
||||
<template v-if="maintenance.strategy === 'recurring-weekday'">
|
||||
<div class="my-3">
|
||||
<label for="interval-day" class="form-label">
|
||||
{{ $t("dayOfWeek") }}
|
||||
</label>
|
||||
|
||||
<!-- Weekday Picker -->
|
||||
<div class="weekday-picker">
|
||||
<div v-for="(weekday, index) in weekdays" :key="index">
|
||||
<label class="form-check-label" :for="weekday.id">{{ $t(weekday.langKey) }}</label>
|
||||
<div class="form-check-inline"><input :id="weekday.id" v-model="maintenance.weekdays" type="checkbox" :value="weekday.value" class="form-check-input"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Recurring - Day of month -->
|
||||
<template v-if="maintenance.strategy === 'recurring-day-of-month'">
|
||||
<div class="my-3">
|
||||
<label for="interval-day" class="form-label">
|
||||
{{ $t("dayOfMonth") }}
|
||||
</label>
|
||||
|
||||
<!-- Day Picker -->
|
||||
<div class="day-picker">
|
||||
<div v-for="index in 31" :key="index">
|
||||
<label class="form-check-label" :for="'day' + index">{{ index }}</label>
|
||||
<div class="form-check-inline">
|
||||
<input :id="'day' + index" v-model="maintenance.daysOfMonth" type="checkbox" :value="index" class="form-check-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-3 mb-2">{{ $t("lastDay") }}</div>
|
||||
|
||||
<div v-for="(lastDay, index) in lastDays" :key="index" class="form-check">
|
||||
<input :id="lastDay.langKey" v-model="maintenance.daysOfMonth" type="checkbox" :value="lastDay.value" class="form-check-input">
|
||||
<label class="form-check-label" :for="lastDay.langKey">
|
||||
{{ $t(lastDay.langKey) }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- For any recurring types -->
|
||||
<template v-if="maintenance.strategy === 'recurring-interval' || maintenance.strategy === 'recurring-weekday' || maintenance.strategy === 'recurring-day-of-month'">
|
||||
<!-- Maintenance Time Window of a Day -->
|
||||
<div class="my-3">
|
||||
<label class="form-label">{{ $t("Maintenance Time Window of a Day") }}</label>
|
||||
<Datepicker
|
||||
v-model="maintenance.timeRange"
|
||||
:dark="$root.isDark"
|
||||
timePicker
|
||||
disableTimeRangeValidation range
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Date Range -->
|
||||
<div class="my-3">
|
||||
<label class="form-label">{{ $t("Effective Date Range") }}</label>
|
||||
<Datepicker
|
||||
v-model="maintenance.dateRange"
|
||||
:dark="$root.isDark"
|
||||
range datePicker
|
||||
:monthChangeOnScroll="false"
|
||||
:minDate="minDate"
|
||||
format="yyyy-MM-dd HH:mm:ss"
|
||||
modelType="yyyy-MM-dd HH:mm:ss"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="mt-4 mb-1">
|
||||
<button
|
||||
id="monitor-submit-btn" class="btn btn-primary" type="submit"
|
||||
:disabled="processing"
|
||||
>
|
||||
{{ $t("Save") }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import { useToast } from "vue-toastification";
|
||||
import VueMultiselect from "vue-multiselect";
|
||||
import dayjs from "dayjs";
|
||||
import Datepicker from "@vuepic/vue-datepicker";
|
||||
|
||||
const toast = useToast();
|
||||
|
||||
export default {
|
||||
components: {
|
||||
VueMultiselect,
|
||||
Datepicker
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
processing: false,
|
||||
maintenance: {},
|
||||
affectedMonitors: [],
|
||||
affectedMonitorsOptions: [],
|
||||
showOnAllPages: false,
|
||||
selectedStatusPages: [],
|
||||
dark: (this.$root.theme === "dark"),
|
||||
neverEnd: false,
|
||||
minDate: this.$root.date(dayjs()) + " 00:00",
|
||||
lastDays: [
|
||||
{
|
||||
langKey: "lastDay1",
|
||||
value: "lastDay1",
|
||||
},
|
||||
{
|
||||
langKey: "lastDay2",
|
||||
value: "lastDay2",
|
||||
},
|
||||
{
|
||||
langKey: "lastDay3",
|
||||
value: "lastDay3",
|
||||
},
|
||||
{
|
||||
langKey: "lastDay4",
|
||||
value: "lastDay4",
|
||||
}
|
||||
],
|
||||
weekdays: [
|
||||
{
|
||||
id: "weekday1",
|
||||
langKey: "weekdayShortMon",
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
id: "weekday2",
|
||||
langKey: "weekdayShortTue",
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
id: "weekday3",
|
||||
langKey: "weekdayShortWed",
|
||||
value: 3,
|
||||
},
|
||||
{
|
||||
id: "weekday4",
|
||||
langKey: "weekdayShortThu",
|
||||
value: 4,
|
||||
},
|
||||
{
|
||||
id: "weekday5",
|
||||
langKey: "weekdayShortFri",
|
||||
value: 5,
|
||||
},
|
||||
{
|
||||
id: "weekday6",
|
||||
langKey: "weekdayShortSat",
|
||||
value: 6,
|
||||
},
|
||||
{
|
||||
id: "weekday0",
|
||||
langKey: "weekdayShortSun",
|
||||
value: 0,
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
|
||||
selectedStatusPagesOptions() {
|
||||
return Object.values(this.$root.statusPageList).map(statusPage => {
|
||||
return {
|
||||
id: statusPage.id,
|
||||
name: statusPage.title
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
pageName() {
|
||||
return this.$t((this.isAdd) ? "Schedule Maintenance" : "Edit Maintenance");
|
||||
},
|
||||
|
||||
isAdd() {
|
||||
return this.$route.path === "/add-maintenance";
|
||||
},
|
||||
|
||||
isEdit() {
|
||||
return this.$route.path.startsWith("/maintenance/edit");
|
||||
},
|
||||
|
||||
},
|
||||
watch: {
|
||||
"$route.fullPath"() {
|
||||
this.init();
|
||||
},
|
||||
|
||||
neverEnd(value) {
|
||||
if (value) {
|
||||
this.maintenance.recurringEndDate = "";
|
||||
}
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
|
||||
this.$root.getMonitorList((res) => {
|
||||
if (res.ok) {
|
||||
Object.values(this.$root.monitorList).map(monitor => {
|
||||
this.affectedMonitorsOptions.push({
|
||||
id: monitor.id,
|
||||
name: monitor.name,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
this.affectedMonitors = [];
|
||||
this.selectedStatusPages = [];
|
||||
|
||||
if (this.isAdd) {
|
||||
this.maintenance = {
|
||||
title: "",
|
||||
description: "",
|
||||
strategy: "single",
|
||||
active: 1,
|
||||
intervalDay: 1,
|
||||
dateRange: [ this.minDate ],
|
||||
timeRange: [{
|
||||
hours: 2,
|
||||
minutes: 0,
|
||||
}, {
|
||||
hours: 3,
|
||||
minutes: 0,
|
||||
}],
|
||||
weekdays: [],
|
||||
daysOfMonth: [],
|
||||
};
|
||||
} else if (this.isEdit) {
|
||||
this.$root.getSocket().emit("getMaintenance", this.$route.params.id, (res) => {
|
||||
if (res.ok) {
|
||||
this.maintenance = res.maintenance;
|
||||
|
||||
this.$root.getSocket().emit("getMonitorMaintenance", this.$route.params.id, (res) => {
|
||||
if (res.ok) {
|
||||
Object.values(res.monitors).map(monitor => {
|
||||
this.affectedMonitors.push(monitor);
|
||||
});
|
||||
} else {
|
||||
toast.error(res.msg);
|
||||
}
|
||||
});
|
||||
|
||||
this.$root.getSocket().emit("getMaintenanceStatusPage", this.$route.params.id, (res) => {
|
||||
if (res.ok) {
|
||||
Object.values(res.statusPages).map(statusPage => {
|
||||
this.selectedStatusPages.push({
|
||||
id: statusPage.id,
|
||||
name: statusPage.title
|
||||
});
|
||||
});
|
||||
|
||||
this.showOnAllPages = Object.values(res.statusPages).length === this.selectedStatusPagesOptions.length;
|
||||
} else {
|
||||
toast.error(res.msg);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toast.error(res.msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
async submit() {
|
||||
this.processing = true;
|
||||
|
||||
if (this.affectedMonitors.length === 0) {
|
||||
toast.error(this.$t("atLeastOneMonitor"));
|
||||
return this.processing = false;
|
||||
}
|
||||
|
||||
if (this.isAdd) {
|
||||
this.$root.addMaintenance(this.maintenance, async (res) => {
|
||||
if (res.ok) {
|
||||
await this.addMonitorMaintenance(res.maintenanceID, async () => {
|
||||
await this.addMaintenanceStatusPage(res.maintenanceID, () => {
|
||||
toast.success(res.msg);
|
||||
this.processing = false;
|
||||
this.$root.getMaintenanceList();
|
||||
this.$router.push("/maintenance");
|
||||
});
|
||||
});
|
||||
} else {
|
||||
toast.error(res.msg);
|
||||
this.processing = false;
|
||||
}
|
||||
|
||||
});
|
||||
} else {
|
||||
this.$root.getSocket().emit("editMaintenance", this.maintenance, async (res) => {
|
||||
if (res.ok) {
|
||||
await this.addMonitorMaintenance(res.maintenanceID, async () => {
|
||||
await this.addMaintenanceStatusPage(res.maintenanceID, () => {
|
||||
this.processing = false;
|
||||
this.$root.toastRes(res);
|
||||
this.init();
|
||||
this.$router.push("/maintenance");
|
||||
});
|
||||
});
|
||||
} else {
|
||||
this.processing = false;
|
||||
toast.error(res.msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
async addMonitorMaintenance(maintenanceID, callback) {
|
||||
await this.$root.addMonitorMaintenance(maintenanceID, this.affectedMonitors, async (res) => {
|
||||
if (!res.ok) {
|
||||
toast.error(res.msg);
|
||||
} else {
|
||||
this.$root.getMonitorList();
|
||||
}
|
||||
|
||||
callback();
|
||||
});
|
||||
},
|
||||
|
||||
async addMaintenanceStatusPage(maintenanceID, callback) {
|
||||
await this.$root.addMaintenanceStatusPage(maintenanceID, (this.showOnAllPages) ? this.selectedStatusPagesOptions : this.selectedStatusPages, async (res) => {
|
||||
if (!res.ok) {
|
||||
toast.error(res.msg);
|
||||
} else {
|
||||
this.$root.getMaintenanceList();
|
||||
}
|
||||
|
||||
callback();
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.shadow-box {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
min-height: 150px;
|
||||
}
|
||||
|
||||
.dark-calendar::-webkit-calendar-picker-indicator {
|
||||
filter: invert(1);
|
||||
}
|
||||
|
||||
.weekday-picker {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
|
||||
& > div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 40px;
|
||||
|
||||
.form-check-inline {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.day-picker {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
|
||||
& > div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 40px;
|
||||
|
||||
.form-check-inline {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
@@ -106,8 +106,8 @@
|
||||
</div>
|
||||
|
||||
<!-- Port -->
|
||||
<!-- For TCP Port / Steam / MQTT Type -->
|
||||
<div v-if="monitor.type === 'port' || monitor.type === 'steam' || monitor.type === 'mqtt'" class="my-3">
|
||||
<!-- For TCP Port / Steam / MQTT / Radius Type -->
|
||||
<div v-if="monitor.type === 'port' || monitor.type === 'steam' || monitor.type === 'mqtt' || monitor.type === 'radius'" class="my-3">
|
||||
<label for="port" class="form-label">{{ $t("Port") }}</label>
|
||||
<input id="port" v-model="monitor.port" type="number" class="form-control" required min="0" max="65535" step="1">
|
||||
</div>
|
||||
@@ -708,9 +708,11 @@ message HealthCheckResponse {
|
||||
}
|
||||
|
||||
// Set default port for DNS if not already defined
|
||||
if (! this.monitor.port || this.monitor.port === "53") {
|
||||
if (! this.monitor.port || this.monitor.port === "53" || this.monitor.port === "1812") {
|
||||
if (this.monitor.type === "dns") {
|
||||
this.monitor.port = "53";
|
||||
} else if (this.monitor.type === "radius") {
|
||||
this.monitor.port = "1812";
|
||||
} else {
|
||||
this.monitor.port = undefined;
|
||||
}
|
||||
|
161
src/pages/MaintenanceDetails.vue
Normal file
161
src/pages/MaintenanceDetails.vue
Normal file
@@ -0,0 +1,161 @@
|
||||
<template>
|
||||
<transition name="slide-fade" appear>
|
||||
<div v-if="maintenance">
|
||||
<h1>{{ maintenance.title }}</h1>
|
||||
<p class="url">
|
||||
<span>{{ $t("Start") }}: {{ $root.datetimeMaintenance(maintenance.start_date) }}</span>
|
||||
<br>
|
||||
<span>{{ $t("End") }}: {{ $root.datetimeMaintenance(maintenance.end_date) }}</span>
|
||||
</p>
|
||||
|
||||
<div class="functions" style="margin-top: 10px;">
|
||||
<router-link :to=" '/maintenance/edit/' + maintenance.id " class="btn btn-secondary">
|
||||
<font-awesome-icon icon="edit" /> {{ $t("Edit") }}
|
||||
</router-link>
|
||||
<button class="btn btn-danger" @click="deleteDialog">
|
||||
<font-awesome-icon icon="trash" /> {{ $t("Delete") }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<label for="description" class="form-label" style="margin-top: 20px;">{{ $t("Description") }}</label>
|
||||
<textarea id="description" v-model="maintenance.description" class="form-control" disabled></textarea>
|
||||
|
||||
<label for="affected_monitors" class="form-label" style="margin-top: 20px;">{{ $t("Affected Monitors") }}</label>
|
||||
<br>
|
||||
<button v-for="monitor in affectedMonitors" :key="monitor.id" class="btn btn-monitor" style="margin: 5px; cursor: auto; color: white; font-weight: 500;">
|
||||
{{ monitor }}
|
||||
</button>
|
||||
<br />
|
||||
|
||||
<label for="selected_status_pages" class="form-label" style="margin-top: 20px;">{{ $t("Show this Maintenance Message on which Status Pages") }}</label>
|
||||
<br>
|
||||
<button v-for="statusPage in selectedStatusPages" :key="statusPage.id" class="btn btn-monitor" style="margin: 5px; cursor: auto; color: white; font-weight: 500;">
|
||||
{{ statusPage }}
|
||||
</button>
|
||||
|
||||
<Confirm ref="confirmDelete" btn-style="btn-danger" :yes-text="$t('Yes')" :no-text="$t('No')" @yes="deleteMaintenance">
|
||||
{{ $t("deleteMaintenanceMsg") }}
|
||||
</Confirm>
|
||||
</div>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { useToast } from "vue-toastification";
|
||||
const toast = useToast();
|
||||
import Confirm from "../components/Confirm.vue";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Confirm,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
affectedMonitors: [],
|
||||
selectedStatusPages: [],
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
maintenance() {
|
||||
let id = this.$route.params.id;
|
||||
return this.$root.maintenanceList[id];
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
this.$root.getSocket().emit("getMonitorMaintenance", this.$route.params.id, (res) => {
|
||||
if (res.ok) {
|
||||
this.affectedMonitors = Object.values(res.monitors).map(monitor => monitor.name);
|
||||
} else {
|
||||
toast.error(res.msg);
|
||||
}
|
||||
});
|
||||
|
||||
this.$root.getSocket().emit("getMaintenanceStatusPage", this.$route.params.id, (res) => {
|
||||
if (res.ok) {
|
||||
this.selectedStatusPages = Object.values(res.statusPages).map(statusPage => statusPage.title);
|
||||
} else {
|
||||
toast.error(res.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
deleteDialog() {
|
||||
this.$refs.confirmDelete.show();
|
||||
},
|
||||
|
||||
deleteMaintenance() {
|
||||
this.$root.deleteMaintenance(this.maintenance.id, (res) => {
|
||||
if (res.ok) {
|
||||
toast.success(res.msg);
|
||||
this.$router.push("/maintenance");
|
||||
} else {
|
||||
toast.error(res.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "../assets/vars.scss";
|
||||
|
||||
@media (max-width: 550px) {
|
||||
.functions {
|
||||
text-align: center;
|
||||
|
||||
button, a {
|
||||
margin-left: 10px !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 400px) {
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
a.btn {
|
||||
padding-left: 25px;
|
||||
padding-right: 25px;
|
||||
}
|
||||
}
|
||||
|
||||
.url {
|
||||
color: $primary;
|
||||
margin-bottom: 20px;
|
||||
font-weight: bold;
|
||||
|
||||
a {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
|
||||
.functions {
|
||||
button, a {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
min-height: 100px;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.btn-monitor {
|
||||
background-color: #5cdd8b;
|
||||
}
|
||||
|
||||
.dark .btn-monitor {
|
||||
color: #020b05 !important;
|
||||
}
|
||||
|
||||
</style>
|
280
src/pages/ManageMaintenance.vue
Normal file
280
src/pages/ManageMaintenance.vue
Normal file
@@ -0,0 +1,280 @@
|
||||
<template>
|
||||
<transition name="slide-fade" appear>
|
||||
<div>
|
||||
<h1 class="mb-3">
|
||||
{{ $t("Maintenance") }}
|
||||
</h1>
|
||||
|
||||
<div>
|
||||
<router-link to="/add-maintenance" class="btn btn-primary mb-3">
|
||||
<font-awesome-icon icon="plus" /> {{ $t("Schedule Maintenance") }}
|
||||
</router-link>
|
||||
</div>
|
||||
|
||||
<div class="shadow-box">
|
||||
<span v-if="Object.keys(sortedMaintenanceList).length === 0" class="d-flex align-items-center justify-content-center my-3">
|
||||
{{ $t("No Maintenance") }}
|
||||
</span>
|
||||
|
||||
<div
|
||||
v-for="(item, index) in sortedMaintenanceList"
|
||||
:key="index"
|
||||
class="item"
|
||||
:class="item.status"
|
||||
>
|
||||
<div class="left-part">
|
||||
<div
|
||||
class="circle"
|
||||
></div>
|
||||
<div class="info">
|
||||
<div class="title">{{ item.title }}</div>
|
||||
<div v-if="false">{{ item.description }}</div>
|
||||
<div class="status">
|
||||
{{ $t("maintenanceStatus-" + item.status) }}
|
||||
</div>
|
||||
|
||||
<MaintenanceTime :maintenance="item" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="buttons">
|
||||
<router-link v-if="false" :to="maintenanceURL(item.id)" class="btn btn-light">{{ $t("Details") }}</router-link>
|
||||
|
||||
<div class="btn-group" role="group">
|
||||
<button v-if="item.active" class="btn btn-normal" @click="pauseDialog(item.id)">
|
||||
<font-awesome-icon icon="pause" /> {{ $t("Pause") }}
|
||||
</button>
|
||||
|
||||
<button v-if="!item.active" class="btn btn-primary" @click="resumeMaintenance(item.id)">
|
||||
<font-awesome-icon icon="play" /> {{ $t("Resume") }}
|
||||
</button>
|
||||
|
||||
<router-link :to="'/maintenance/edit/' + item.id" class="btn btn-normal">
|
||||
<font-awesome-icon icon="edit" /> {{ $t("Edit") }}
|
||||
</router-link>
|
||||
|
||||
<button class="btn btn-danger" @click="deleteDialog(item.id)">
|
||||
<font-awesome-icon icon="trash" /> {{ $t("Delete") }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-3" style="font-size: 13px;">
|
||||
<a href="https://github.com/louislam/uptime-kuma/wiki/Maintenance" target="_blank">Learn More</a>
|
||||
</div>
|
||||
|
||||
<Confirm ref="confirmPause" :yes-text="$t('Yes')" :no-text="$t('No')" @yes="pauseMaintenance">
|
||||
{{ $t("pauseMaintenanceMsg") }}
|
||||
</Confirm>
|
||||
|
||||
<Confirm ref="confirmDelete" btn-style="btn-danger" :yes-text="$t('Yes')" :no-text="$t('No')" @yes="deleteMaintenance">
|
||||
{{ $t("deleteMaintenanceMsg") }}
|
||||
</Confirm>
|
||||
</div>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getResBaseURL } from "../util-frontend";
|
||||
import { getMaintenanceRelativeURL } from "../util.ts";
|
||||
import Confirm from "../components/Confirm.vue";
|
||||
import MaintenanceTime from "../components/MaintenanceTime.vue";
|
||||
import { useToast } from "vue-toastification";
|
||||
const toast = useToast();
|
||||
|
||||
export default {
|
||||
components: {
|
||||
MaintenanceTime,
|
||||
Confirm,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
selectedMaintenanceID: undefined,
|
||||
statusOrderList: {
|
||||
"under-maintenance": 1000,
|
||||
"scheduled": 900,
|
||||
"inactive": 800,
|
||||
"ended": 700,
|
||||
"unknown": 0,
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
sortedMaintenanceList() {
|
||||
let result = Object.values(this.$root.maintenanceList);
|
||||
|
||||
result.sort((m1, m2) => {
|
||||
if (this.statusOrderList[m1.status] === this.statusOrderList[m2.status]) {
|
||||
return m1.title.localeCompare(m2.title);
|
||||
} else {
|
||||
return this.statusOrderList[m1.status] < this.statusOrderList[m2.status];
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* Get the correct URL for the icon
|
||||
* @param {string} icon Path for icon
|
||||
* @returns {string} Correctly formatted path including port numbers
|
||||
*/
|
||||
icon(icon) {
|
||||
if (icon === "/icon.svg") {
|
||||
return icon;
|
||||
} else {
|
||||
return getResBaseURL() + icon;
|
||||
}
|
||||
},
|
||||
|
||||
maintenanceURL(id) {
|
||||
return getMaintenanceRelativeURL(id);
|
||||
},
|
||||
|
||||
deleteDialog(maintenanceID) {
|
||||
this.selectedMaintenanceID = maintenanceID;
|
||||
this.$refs.confirmDelete.show();
|
||||
},
|
||||
|
||||
deleteMaintenance() {
|
||||
this.$root.deleteMaintenance(this.selectedMaintenanceID, (res) => {
|
||||
if (res.ok) {
|
||||
toast.success(res.msg);
|
||||
this.$router.push("/maintenance");
|
||||
} else {
|
||||
toast.error(res.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Show dialog to confirm pause
|
||||
*/
|
||||
pauseDialog(maintenanceID) {
|
||||
this.selectedMaintenanceID = maintenanceID;
|
||||
this.$refs.confirmPause.show();
|
||||
},
|
||||
|
||||
/**
|
||||
* Pause maintenance
|
||||
*/
|
||||
pauseMaintenance() {
|
||||
this.$root.getSocket().emit("pauseMaintenance", this.selectedMaintenanceID, (res) => {
|
||||
this.$root.toastRes(res);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Resume maintenance
|
||||
*/
|
||||
resumeMaintenance(id) {
|
||||
this.$root.getSocket().emit("resumeMaintenance", id, (res) => {
|
||||
this.$root.toastRes(res);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "../assets/vars.scss";
|
||||
|
||||
.item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
text-decoration: none;
|
||||
border-radius: 10px;
|
||||
transition: all ease-in-out 0.15s;
|
||||
justify-content: space-between;
|
||||
padding: 10px;
|
||||
min-height: 90px;
|
||||
margin-bottom: 5px;
|
||||
|
||||
&:hover {
|
||||
background-color: $highlight-white;
|
||||
}
|
||||
|
||||
&.under-maintenance {
|
||||
background-color: rgba(23, 71, 245, 0.16);
|
||||
|
||||
&:hover {
|
||||
background-color: rgba(23, 71, 245, 0.3) !important;
|
||||
}
|
||||
|
||||
.circle {
|
||||
background-color: $maintenance;
|
||||
}
|
||||
}
|
||||
|
||||
&.scheduled {
|
||||
.circle {
|
||||
background-color: $primary;
|
||||
}
|
||||
}
|
||||
|
||||
&.inactive {
|
||||
.circle {
|
||||
background-color: $danger;
|
||||
}
|
||||
}
|
||||
|
||||
&.ended {
|
||||
.left-part {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.circle {
|
||||
background-color: $dark-font-color;
|
||||
}
|
||||
}
|
||||
|
||||
&.unknown {
|
||||
.circle {
|
||||
background-color: $dark-font-color;
|
||||
}
|
||||
}
|
||||
|
||||
.left-part {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
align-items: center;
|
||||
|
||||
.circle {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
border-radius: 50rem;
|
||||
}
|
||||
|
||||
.info {
|
||||
.title {
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.status {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.dark {
|
||||
.item {
|
||||
&:hover {
|
||||
background-color: $dark-bg2;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="form-container">
|
||||
<div class="form-container" data-cy="setup-form">
|
||||
<div class="form">
|
||||
<form @submit.prevent="submit">
|
||||
<div>
|
||||
@@ -23,21 +23,21 @@
|
||||
</div>
|
||||
|
||||
<div class="form-floating mt-3">
|
||||
<input id="floatingInput" v-model="username" type="text" class="form-control" placeholder="Username" required>
|
||||
<input id="floatingInput" v-model="username" type="text" class="form-control" placeholder="Username" required data-cy="username-input">
|
||||
<label for="floatingInput">{{ $t("Username") }}</label>
|
||||
</div>
|
||||
|
||||
<div class="form-floating mt-3">
|
||||
<input id="floatingPassword" v-model="password" type="password" class="form-control" placeholder="Password" required>
|
||||
<input id="floatingPassword" v-model="password" type="password" class="form-control" placeholder="Password" required data-cy="password-input">
|
||||
<label for="floatingPassword">{{ $t("Password") }}</label>
|
||||
</div>
|
||||
|
||||
<div class="form-floating mt-3">
|
||||
<input id="repeat" v-model="repeatPassword" type="password" class="form-control" placeholder="Repeat Password" required>
|
||||
<input id="repeat" v-model="repeatPassword" type="password" class="form-control" placeholder="Repeat Password" required data-cy="password-repeat-input">
|
||||
<label for="repeat">{{ $t("Repeat Password") }}</label>
|
||||
</div>
|
||||
|
||||
<button class="w-100 btn btn-primary mt-3" type="submit" :disabled="processing">
|
||||
<button class="w-100 btn btn-primary mt-3" type="submit" :disabled="processing" data-cy="submit-setup-form">
|
||||
{{ $t("Create") }}
|
||||
</button>
|
||||
</form>
|
||||
|
@@ -218,12 +218,29 @@
|
||||
{{ $t("Degraded Service") }}
|
||||
</div>
|
||||
|
||||
<div v-else-if="isMaintenance">
|
||||
<font-awesome-icon icon="wrench" class="status-maintenance" />
|
||||
{{ $t("maintenanceStatus-under-maintenance") }}
|
||||
</div>
|
||||
|
||||
<div v-else>
|
||||
<font-awesome-icon icon="question-circle" style="color: #efefef;" />
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<!-- Maintenance -->
|
||||
<template v-if="maintenanceList.length > 0">
|
||||
<div
|
||||
v-for="maintenance in maintenanceList" :key="maintenance.id"
|
||||
class="shadow-box alert mb-4 p-3 bg-maintenance mt-4 position-relative" role="alert"
|
||||
>
|
||||
<h4 class="alert-heading">{{ maintenance.title }}</h4>
|
||||
<div class="content">{{ maintenance.description }}</div>
|
||||
<MaintenanceTime :maintenance="maintenance" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Description -->
|
||||
<strong v-if="editMode">{{ $t("Description") }}:</strong>
|
||||
<Editable v-model="config.description" :contenteditable="editMode" tag="div" class="mb-4 description" />
|
||||
@@ -265,7 +282,7 @@
|
||||
<Editable v-model="config.footerText" tag="div" :contenteditable="enableEditMode" :noNL="false" class="alert-heading p-2" />
|
||||
|
||||
<p v-if="config.showPoweredBy">
|
||||
{{ $t("Powered by") }} <a target="_blank" href="https://github.com/louislam/uptime-kuma">{{ $t("Uptime Kuma" ) }}</a>
|
||||
{{ $t("Powered by") }} <a target="_blank" rel="noopener noreferrer" href="https://github.com/louislam/uptime-kuma">{{ $t("Uptime Kuma" ) }}</a>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
@@ -295,8 +312,9 @@ import "vue-prism-editor/dist/prismeditor.min.css"; // import the styles somewhe
|
||||
import { useToast } from "vue-toastification";
|
||||
import Confirm from "../components/Confirm.vue";
|
||||
import PublicGroupList from "../components/PublicGroupList.vue";
|
||||
import MaintenanceTime from "../components/MaintenanceTime.vue";
|
||||
import { getResBaseURL } from "../util-frontend";
|
||||
import { STATUS_PAGE_ALL_DOWN, STATUS_PAGE_ALL_UP, STATUS_PAGE_PARTIAL_DOWN, UP } from "../util.ts";
|
||||
import { STATUS_PAGE_ALL_DOWN, STATUS_PAGE_ALL_UP, STATUS_PAGE_MAINTENANCE, STATUS_PAGE_PARTIAL_DOWN, UP, MAINTENANCE } from "../util.ts";
|
||||
|
||||
const toast = useToast();
|
||||
|
||||
@@ -316,6 +334,7 @@ export default {
|
||||
ImageCropUpload,
|
||||
Confirm,
|
||||
PrismEditor,
|
||||
MaintenanceTime,
|
||||
},
|
||||
|
||||
// Leave Page for vue route change
|
||||
@@ -356,6 +375,7 @@ export default {
|
||||
loadedData: false,
|
||||
baseURL: "",
|
||||
clickedEditButton: false,
|
||||
maintenanceList: [],
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@@ -409,6 +429,10 @@ export default {
|
||||
return "bg-" + this.incident.style;
|
||||
},
|
||||
|
||||
maintenanceClass() {
|
||||
return "bg-maintenance";
|
||||
},
|
||||
|
||||
overallStatus() {
|
||||
|
||||
if (Object.keys(this.$root.publicLastHeartbeatList).length === 0) {
|
||||
@@ -421,7 +445,9 @@ export default {
|
||||
for (let id in this.$root.publicLastHeartbeatList) {
|
||||
let beat = this.$root.publicLastHeartbeatList[id];
|
||||
|
||||
if (beat.status === UP) {
|
||||
if (beat.status === MAINTENANCE) {
|
||||
return STATUS_PAGE_MAINTENANCE;
|
||||
} else if (beat.status === UP) {
|
||||
hasUp = true;
|
||||
} else {
|
||||
status = STATUS_PAGE_PARTIAL_DOWN;
|
||||
@@ -447,6 +473,10 @@ export default {
|
||||
return this.overallStatus === STATUS_PAGE_ALL_DOWN;
|
||||
},
|
||||
|
||||
isMaintenance() {
|
||||
return this.overallStatus === STATUS_PAGE_MAINTENANCE;
|
||||
},
|
||||
|
||||
},
|
||||
watch: {
|
||||
|
||||
@@ -551,6 +581,7 @@ export default {
|
||||
}
|
||||
|
||||
this.incident = res.data.incident;
|
||||
this.maintenanceList = res.data.maintenanceList;
|
||||
this.$root.publicGroupList = res.data.publicGroupList;
|
||||
}).catch( function (error) {
|
||||
if (error.response.status === 404) {
|
||||
@@ -946,6 +977,24 @@ footer {
|
||||
}
|
||||
}
|
||||
|
||||
.maintenance-bg-info {
|
||||
color: $maintenance;
|
||||
}
|
||||
|
||||
.maintenance-icon {
|
||||
font-size: 35px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.dark .shadow-box {
|
||||
background-color: #0d1117;
|
||||
}
|
||||
|
||||
.status-maintenance {
|
||||
color: $maintenance;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.mobile {
|
||||
h1 {
|
||||
font-size: 22px;
|
||||
@@ -1007,4 +1056,10 @@ footer {
|
||||
}
|
||||
}
|
||||
|
||||
.bg-maintenance {
|
||||
.alert-heading {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@@ -6,6 +6,7 @@ import Dashboard from "./pages/Dashboard.vue";
|
||||
import DashboardHome from "./pages/DashboardHome.vue";
|
||||
import Details from "./pages/Details.vue";
|
||||
import EditMonitor from "./pages/EditMonitor.vue";
|
||||
import EditMaintenance from "./pages/EditMaintenance.vue";
|
||||
import List from "./pages/List.vue";
|
||||
const Settings = () => import("./pages/Settings.vue");
|
||||
import Setup from "./pages/Setup.vue";
|
||||
@@ -14,6 +15,9 @@ import Entry from "./pages/Entry.vue";
|
||||
import ManageStatusPage from "./pages/ManageStatusPage.vue";
|
||||
import AddStatusPage from "./pages/AddStatusPage.vue";
|
||||
import NotFound from "./pages/NotFound.vue";
|
||||
import DockerHosts from "./components/settings/Docker.vue";
|
||||
import MaintenanceDetails from "./pages/MaintenanceDetails.vue";
|
||||
import ManageMaintenance from "./pages/ManageMaintenance.vue";
|
||||
|
||||
// Settings - Sub Pages
|
||||
import Appearance from "./components/settings/Appearance.vue";
|
||||
@@ -25,7 +29,6 @@ const Security = () => import("./components/settings/Security.vue");
|
||||
import Proxies from "./components/settings/Proxies.vue";
|
||||
import Backup from "./components/settings/Backup.vue";
|
||||
import About from "./components/settings/About.vue";
|
||||
import DockerHosts from "./components/settings/Docker.vue";
|
||||
|
||||
const routes = [
|
||||
{
|
||||
@@ -126,6 +129,22 @@ const routes = [
|
||||
path: "/add-status-page",
|
||||
component: AddStatusPage,
|
||||
},
|
||||
{
|
||||
path: "/maintenance",
|
||||
component: ManageMaintenance,
|
||||
},
|
||||
{
|
||||
path: "/maintenance/:id",
|
||||
component: MaintenanceDetails,
|
||||
},
|
||||
{
|
||||
path: "/add-maintenance",
|
||||
component: EditMaintenance,
|
||||
},
|
||||
{
|
||||
path: "/maintenance/edit/:id",
|
||||
component: EditMaintenance,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
@@ -1,12 +1,7 @@
|
||||
import dayjs from "dayjs";
|
||||
import timezone from "dayjs/plugin/timezone";
|
||||
import utc from "dayjs/plugin/utc";
|
||||
import timezones from "timezones-list";
|
||||
import { localeDirection, currentLocale } from "./i18n";
|
||||
|
||||
dayjs.extend(utc);
|
||||
dayjs.extend(timezone);
|
||||
|
||||
/**
|
||||
* Returns the offset from UTC in hours for the current locale.
|
||||
* @returns {number} The offset from UTC in hours.
|
||||
|
86
src/util.js
86
src/util.js
@@ -7,17 +7,21 @@
|
||||
// Backend uses the compiled file util.js
|
||||
// Frontend uses util.ts
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getMonitorRelativeURL = exports.genSecret = exports.getCryptoRandomInt = exports.getRandomInt = exports.getRandomArbitrary = exports.TimeLogger = exports.polyfill = exports.log = exports.debug = exports.ucfirst = exports.sleep = exports.flipStatus = exports.STATUS_PAGE_PARTIAL_DOWN = exports.STATUS_PAGE_ALL_UP = exports.STATUS_PAGE_ALL_DOWN = exports.PENDING = exports.UP = exports.DOWN = exports.appName = exports.isDev = void 0;
|
||||
const _dayjs = require("dayjs");
|
||||
const dayjs = _dayjs;
|
||||
exports.localToUTC = exports.utcToLocal = exports.utcToISODateTime = exports.isoToUTCDateTime = exports.parseTimeFromTimeObject = exports.parseTimeObject = exports.getMaintenanceRelativeURL = exports.getMonitorRelativeURL = exports.genSecret = exports.getCryptoRandomInt = exports.getRandomInt = exports.getRandomArbitrary = exports.TimeLogger = exports.polyfill = exports.log = exports.debug = exports.ucfirst = exports.sleep = exports.flipStatus = exports.SQL_DATETIME_FORMAT_WITHOUT_SECOND = exports.SQL_DATETIME_FORMAT = exports.SQL_DATE_FORMAT = exports.STATUS_PAGE_MAINTENANCE = exports.STATUS_PAGE_PARTIAL_DOWN = exports.STATUS_PAGE_ALL_UP = exports.STATUS_PAGE_ALL_DOWN = exports.MAINTENANCE = exports.PENDING = exports.UP = exports.DOWN = exports.appName = exports.isDev = void 0;
|
||||
const dayjs = require("dayjs");
|
||||
exports.isDev = process.env.NODE_ENV === "development";
|
||||
exports.appName = "Uptime Kuma";
|
||||
exports.DOWN = 0;
|
||||
exports.UP = 1;
|
||||
exports.PENDING = 2;
|
||||
exports.MAINTENANCE = 3;
|
||||
exports.STATUS_PAGE_ALL_DOWN = 0;
|
||||
exports.STATUS_PAGE_ALL_UP = 1;
|
||||
exports.STATUS_PAGE_PARTIAL_DOWN = 2;
|
||||
exports.STATUS_PAGE_MAINTENANCE = 3;
|
||||
exports.SQL_DATE_FORMAT = "YYYY-MM-DD";
|
||||
exports.SQL_DATETIME_FORMAT = "YYYY-MM-DD HH:mm:ss";
|
||||
exports.SQL_DATETIME_FORMAT_WITHOUT_SECOND = "YYYY-MM-DD HH:mm";
|
||||
/** Flip the status of s */
|
||||
function flipStatus(s) {
|
||||
if (s === exports.UP) {
|
||||
@@ -100,7 +104,7 @@ class Logger {
|
||||
}
|
||||
module = module.toUpperCase();
|
||||
level = level.toUpperCase();
|
||||
const now = new Date().toISOString();
|
||||
const now = dayjs.tz(new Date()).format();
|
||||
const formattedMessage = (typeof msg === "string") ? `${now} [${module}] ${level}: ${msg}` : msg;
|
||||
if (level === "INFO") {
|
||||
console.info(formattedMessage);
|
||||
@@ -280,9 +284,9 @@ function getCryptoRandomInt(min, max) {
|
||||
}
|
||||
exports.getCryptoRandomInt = getCryptoRandomInt;
|
||||
/**
|
||||
* Generate a secret
|
||||
* @param length Lenght of secret to generate
|
||||
* @returns
|
||||
* Generate a random alphanumeric string of fixed length
|
||||
* @param length Length of string to generate
|
||||
* @returns string
|
||||
*/
|
||||
function genSecret(length = 64) {
|
||||
let secret = "";
|
||||
@@ -303,3 +307,71 @@ function getMonitorRelativeURL(id) {
|
||||
return "/dashboard/" + id;
|
||||
}
|
||||
exports.getMonitorRelativeURL = getMonitorRelativeURL;
|
||||
function getMaintenanceRelativeURL(id) {
|
||||
return "/maintenance/" + id;
|
||||
}
|
||||
exports.getMaintenanceRelativeURL = getMaintenanceRelativeURL;
|
||||
/**
|
||||
* Parse to Time Object that used in VueDatePicker
|
||||
* @param {string} time E.g. 12:00
|
||||
* @returns object
|
||||
*/
|
||||
function parseTimeObject(time) {
|
||||
if (!time) {
|
||||
return {
|
||||
hours: 0,
|
||||
minutes: 0,
|
||||
};
|
||||
}
|
||||
let array = time.split(":");
|
||||
if (array.length < 2) {
|
||||
throw new Error("parseVueDatePickerTimeFormat: Invalid Time");
|
||||
}
|
||||
let obj = {
|
||||
hours: parseInt(array[0]),
|
||||
minutes: parseInt(array[1]),
|
||||
seconds: 0,
|
||||
};
|
||||
if (array.length >= 3) {
|
||||
obj.seconds = parseInt(array[2]);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
exports.parseTimeObject = parseTimeObject;
|
||||
/**
|
||||
* @returns string e.g. 12:00
|
||||
*/
|
||||
function parseTimeFromTimeObject(obj) {
|
||||
if (!obj) {
|
||||
return obj;
|
||||
}
|
||||
let result = "";
|
||||
result += obj.hours.toString().padStart(2, "0") + ":" + obj.minutes.toString().padStart(2, "0");
|
||||
if (obj.seconds) {
|
||||
result += ":" + obj.seconds.toString().padStart(2, "0");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
exports.parseTimeFromTimeObject = parseTimeFromTimeObject;
|
||||
function isoToUTCDateTime(input) {
|
||||
return dayjs(input).utc().format(exports.SQL_DATETIME_FORMAT);
|
||||
}
|
||||
exports.isoToUTCDateTime = isoToUTCDateTime;
|
||||
/**
|
||||
* @param input
|
||||
*/
|
||||
function utcToISODateTime(input) {
|
||||
return dayjs.utc(input).toISOString();
|
||||
}
|
||||
exports.utcToISODateTime = utcToISODateTime;
|
||||
/**
|
||||
* For SQL_DATETIME_FORMAT
|
||||
*/
|
||||
function utcToLocal(input, format = exports.SQL_DATETIME_FORMAT) {
|
||||
return dayjs.utc(input).local().format(format);
|
||||
}
|
||||
exports.utcToLocal = utcToLocal;
|
||||
function localToUTC(input, format = exports.SQL_DATETIME_FORMAT) {
|
||||
return dayjs(input).utc().format(format);
|
||||
}
|
||||
exports.localToUTC = localToUTC;
|
||||
|
89
src/util.ts
89
src/util.ts
@@ -6,18 +6,25 @@
|
||||
// Backend uses the compiled file util.js
|
||||
// Frontend uses util.ts
|
||||
|
||||
import * as _dayjs from "dayjs";
|
||||
const dayjs = _dayjs;
|
||||
import * as dayjs from "dayjs";
|
||||
import * as timezone from "dayjs/plugin/timezone";
|
||||
import * as utc from "dayjs/plugin/utc";
|
||||
|
||||
export const isDev = process.env.NODE_ENV === "development";
|
||||
export const appName = "Uptime Kuma";
|
||||
export const DOWN = 0;
|
||||
export const UP = 1;
|
||||
export const PENDING = 2;
|
||||
export const MAINTENANCE = 3;
|
||||
|
||||
export const STATUS_PAGE_ALL_DOWN = 0;
|
||||
export const STATUS_PAGE_ALL_UP = 1;
|
||||
export const STATUS_PAGE_PARTIAL_DOWN = 2;
|
||||
export const STATUS_PAGE_MAINTENANCE = 3;
|
||||
|
||||
export const SQL_DATE_FORMAT = "YYYY-MM-DD";
|
||||
export const SQL_DATETIME_FORMAT = "YYYY-MM-DD HH:mm:ss";
|
||||
export const SQL_DATETIME_FORMAT_WITHOUT_SECOND = "YYYY-MM-DD HH:mm";
|
||||
|
||||
/** Flip the status of s */
|
||||
export function flipStatus(s: number) {
|
||||
@@ -112,7 +119,7 @@ class Logger {
|
||||
module = module.toUpperCase();
|
||||
level = level.toUpperCase();
|
||||
|
||||
const now = new Date().toISOString();
|
||||
const now = dayjs.tz(new Date()).format();
|
||||
const formattedMessage = (typeof msg === "string") ? `${now} [${module}] ${level}: ${msg}` : msg;
|
||||
|
||||
if (level === "INFO") {
|
||||
@@ -336,3 +343,79 @@ export function genSecret(length = 64) {
|
||||
export function getMonitorRelativeURL(id: string) {
|
||||
return "/dashboard/" + id;
|
||||
}
|
||||
|
||||
export function getMaintenanceRelativeURL(id: string) {
|
||||
return "/maintenance/" + id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse to Time Object that used in VueDatePicker
|
||||
* @param {string} time E.g. 12:00
|
||||
* @returns object
|
||||
*/
|
||||
export function parseTimeObject(time: string) {
|
||||
if (!time) {
|
||||
return {
|
||||
hours: 0,
|
||||
minutes: 0,
|
||||
};
|
||||
}
|
||||
|
||||
let array = time.split(":");
|
||||
|
||||
if (array.length < 2) {
|
||||
throw new Error("parseVueDatePickerTimeFormat: Invalid Time");
|
||||
}
|
||||
|
||||
let obj = {
|
||||
hours: parseInt(array[0]),
|
||||
minutes: parseInt(array[1]),
|
||||
seconds: 0,
|
||||
}
|
||||
if (array.length >= 3) {
|
||||
obj.seconds = parseInt(array[2]);
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns string e.g. 12:00
|
||||
*/
|
||||
export function parseTimeFromTimeObject(obj : any) {
|
||||
if (!obj) {
|
||||
return obj;
|
||||
}
|
||||
|
||||
let result = "";
|
||||
|
||||
result += obj.hours.toString().padStart(2, "0") + ":" + obj.minutes.toString().padStart(2, "0")
|
||||
|
||||
if (obj.seconds) {
|
||||
result += ":" + obj.seconds.toString().padStart(2, "0")
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
export function isoToUTCDateTime(input : string) {
|
||||
return dayjs(input).utc().format(SQL_DATETIME_FORMAT);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param input
|
||||
*/
|
||||
export function utcToISODateTime(input : string) {
|
||||
return dayjs.utc(input).toISOString();
|
||||
}
|
||||
|
||||
/**
|
||||
* For SQL_DATETIME_FORMAT
|
||||
*/
|
||||
export function utcToLocal(input : string, format = SQL_DATETIME_FORMAT) {
|
||||
return dayjs.utc(input).local().format(format);
|
||||
}
|
||||
|
||||
export function localToUTC(input : string, format = SQL_DATETIME_FORMAT) {
|
||||
return dayjs(input).utc().format(format);
|
||||
}
|
||||
|
Reference in New Issue
Block a user