Merge remote-tracking branch 'origin/master' into plugins

This commit is contained in:
Louis Lam 2023-01-08 14:13:13 +08:00
commit 42f1a9ff34
32 changed files with 2749 additions and 1224 deletions

View File

@ -48,6 +48,7 @@ Here are some references:
- UI/UX is not close to Uptime Kuma
- Existing logic is completely modified or deleted for no reason
- A function that is completely out of scope
- Convert existing code into other programming languages
- Unnecessary large code changes (Hard to review, causes code conflicts to other pull requests)
I will mark your pull request in the [milestones](https://github.com/louislam/uptime-kuma/milestones), if I am plan to review and merge it.

View File

@ -22,17 +22,17 @@ It is a temporary live demo, all data will be deleted after 10 minutes. Use the
## ⭐ Features
* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / Ping / DNS Record / Push / Steam Game Server / Docker Containers.
* Fancy, Reactive, Fast UI/UX.
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications).
* 20 second intervals.
* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / Ping / DNS Record / Push / Steam Game Server / Docker Containers
* Fancy, Reactive, Fast UI/UX
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications)
* 20 second intervals
* [Multi Languages](https://github.com/louislam/uptime-kuma/tree/master/src/languages)
* Multiple Status Pages
* Map Status Page to Domain
* Ping Chart
* Certificate Info
* Proxy Support
* 2FA available
* Multiple status pages
* Map status pages to specific domains
* Ping chart
* Certificate info
* Proxy support
* 2FA support
## 🔧 How to Install
@ -44,14 +44,14 @@ docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name upti
⚠️ Please use a **local volume** only. Other types such as NFS are not supported.
Browse to http://localhost:3001 after starting.
Uptime Kuma is now running on http://localhost:3001
### 💪🏻 Non-Docker
Required Tools:
- [Node.js](https://nodejs.org/en/download/) >= 14
- [Git](https://git-scm.com/downloads)
- [pm2](https://pm2.keymetrics.io/) - For run in background
- [pm2](https://pm2.keymetrics.io/) - For running Uptime Kuma in the background
```bash
# Update your npm to the latest version
@ -73,7 +73,7 @@ pm2 start server/server.js --name uptime-kuma
```
Browse to http://localhost:3001 after starting.
Uptime Kuma is now running on http://localhost:3001
More useful PM2 Commands

View File

@ -2,9 +2,9 @@
## Reporting a Vulnerability
Please report security issues to uptime@kuma.pet.
Please report security issues to https://github.com/louislam/uptime-kuma/security/advisories/new.
Do not use the issue tracker or discuss it in the public as it will cause more damage.
Do not use the public issue tracker or discuss it in the public as it will cause more damage.
## Supported Versions

View File

@ -4,5 +4,5 @@ WORKDIR /app
# Install apprise, iputils for non-root ping, setpriv
RUN apk add --no-cache iputils setpriv dumb-init python3 py3-cryptography py3-pip py3-six py3-yaml py3-click py3-markdown py3-requests py3-requests-oauthlib && \
pip3 --no-cache-dir install apprise==1.2.0 && \
pip3 --no-cache-dir install apprise==1.2.1 && \
rm -rf /root/.cache

View File

@ -11,7 +11,7 @@ WORKDIR /app
RUN apt update && \
apt --yes --no-install-recommends install python3 python3-pip python3-cryptography python3-six python3-yaml python3-click python3-markdown python3-requests python3-requests-oauthlib \
sqlite3 iputils-ping util-linux dumb-init && \
pip3 --no-cache-dir install apprise==1.2.0 && \
pip3 --no-cache-dir install apprise==1.2.1 && \
rm -rf /var/lib/apt/lists/* && \
apt --yes autoremove

2266
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "uptime-kuma",
"version": "1.19.2",
"version": "1.19.3",
"license": "MIT",
"repository": {
"type": "git",
@ -38,7 +38,7 @@
"build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain",
"build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push",
"upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain",
"setup": "git checkout 1.19.2 && npm ci --production && npm run download-dist",
"setup": "git checkout 1.19.3 && npm ci --production && npm run download-dist",
"download-dist": "node extra/download-dist.js",
"mark-as-nightly": "node extra/mark-as-nightly.js",
"reset-password": "node extra/reset-password.js",
@ -90,7 +90,7 @@
"https-proxy-agent": "~5.0.1",
"iconv-lite": "~0.6.3",
"jsesc": "~3.0.2",
"jsonwebtoken": "~8.5.1",
"jsonwebtoken": "~9.0.0",
"jwt-decode": "~3.1.2",
"limiter": "~2.1.0",
"mqtt": "~4.3.7",
@ -103,6 +103,7 @@
"password-hash": "~1.2.2",
"pg": "~8.8.0",
"pg-connection-string": "~2.5.0",
"ping": "~0.4.2",
"prom-client": "~13.2.0",
"prometheus-api-metrics": "~3.2.1",
"protobufjs": "~7.1.1",

View File

@ -514,7 +514,9 @@ class Monitor extends BeanModel {
let res = await axios.request(options);
if (res.data.State.Running) {
bean.status = UP;
bean.msg = "";
bean.msg = res.data.State.Status;
} else {
throw Error("Container State is " + res.data.State.Status);
}
} else if (this.type === "mqtt") {
bean.msg = await mqttAsync(this.hostname, this.mqttTopic, this.mqttSuccessMessage, {
@ -548,7 +550,7 @@ class Monitor extends BeanModel {
log.debug("monitor:", `gRPC response: ${JSON.stringify(response)}`);
let responseData = response.data;
if (responseData.length > 50) {
responseData = response.substring(0, 47) + "...";
responseData = responseData.toString().substring(0, 47) + "...";
}
if (response.code !== 1) {
bean.status = DOWN;
@ -1090,7 +1092,7 @@ class Monitor extends BeanModel {
// Prevent if the msg is undefined, notifications such as Discord cannot send out.
const heartbeatJSON = bean.toJSON();
if (!heartbeatJSON["msg"]) {
heartbeatJSON["msg"] = "";
heartbeatJSON["msg"] = "N/A";
}
await Notification.send(JSON.parse(notification.config), msg, await monitor.toJSON(false), heartbeatJSON);

View File

@ -281,7 +281,7 @@ class StatusPage extends BeanModel {
let activeCondition = Maintenance.getActiveMaintenanceSQLCondition();
let maintenanceBeanList = R.convertToBeans("maintenance", await R.getAll(`
SELECT maintenance.*
SELECT DISTINCT maintenance.*
FROM maintenance
JOIN maintenance_status_page
ON maintenance_status_page.maintenance_id = maintenance.id

View File

@ -91,7 +91,7 @@ class Discord extends NotificationProvider {
},
{
name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL",
value: monitorJSON["type"] === "push" ? "Heartbeat" : address.startsWith("http") ? "[Visit Service](" + address + ")" : address,
value: monitorJSON["type"] === "push" ? "Heartbeat" : address,
},
{
name: "Time (UTC)",

View File

@ -0,0 +1,31 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
class Kook extends NotificationProvider {
name = "Kook";
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully.";
let url = "https://www.kookapp.cn/api/v3/message/create";
let data = {
target_id: notification.kookGuildID,
content: msg,
};
let config = {
headers: {
"Authorization": "Bot " + notification.kookBotToken,
"Content-Type": "application/json",
},
};
try {
await axios.post(url, data, config);
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = Kook;

View File

@ -1,7 +1,7 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { setSettings, setting } = require("../util-server");
const { getMonitorRelativeURL } = require("../../src/util");
const { getMonitorRelativeURL, UP } = require("../../src/util");
class Slack extends NotificationProvider {
@ -46,24 +46,31 @@ class Slack extends NotificationProvider {
"channel": notification.slackchannel,
"username": notification.slackusername,
"icon_emoji": notification.slackiconemo,
"blocks": [{
"type": "header",
"text": {
"type": "plain_text",
"text": "Uptime Kuma Alert",
},
},
{
"type": "section",
"fields": [{
"type": "mrkdwn",
"text": "*Message*\n" + msg,
},
"attachments": [
{
"type": "mrkdwn",
"text": "*Time (UTC)*\n" + time,
}],
}],
"color": (heartbeatJSON["status"] === UP) ? "#2eb886" : "#e01e5a",
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "Uptime Kuma Alert",
},
},
{
"type": "section",
"fields": [{
"type": "mrkdwn",
"text": "*Message*\n" + msg,
},
{
"type": "mrkdwn",
"text": "*Time (UTC)*\n" + time,
}],
}
],
}
]
};
if (notification.slackbutton) {
@ -74,17 +81,19 @@ class Slack extends NotificationProvider {
// Button
if (baseURL) {
data.blocks.push({
"type": "actions",
"elements": [{
"type": "button",
"text": {
"type": "plain_text",
"text": "Visit Uptime Kuma",
},
"value": "Uptime-Kuma",
"url": baseURL + getMonitorRelativeURL(monitorJSON.id),
}],
data.attachments.forEach(element => {
element.blocks.push({
"type": "actions",
"elements": [{
"type": "button",
"text": {
"type": "plain_text",
"text": "Visit Uptime Kuma",
},
"value": "Uptime-Kuma",
"url": baseURL + getMonitorRelativeURL(monitorJSON.id),
}],
});
});
}

View File

@ -0,0 +1,116 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { DOWN, UP } = require("../../src/util");
class ZohoCliq extends NotificationProvider {
name = "ZohoCliq";
/**
* Generate the message to send
* @param {const} status The status constant
* @param {string} monitorName Name of monitor
* @returns {string}
*/
_statusMessageFactory = (status, monitorName) => {
if (status === DOWN) {
return `🔴 Application [${monitorName}] went down\n`;
} else if (status === UP) {
return `✅ Application [${monitorName}] is back online\n`;
}
return "Notification\n";
};
/**
* Send the notification
* @param {string} webhookUrl URL to send the request to
* @param {Array} payload Payload generated by _notificationPayloadFactory
*/
_sendNotification = async (webhookUrl, payload) => {
await axios.post(webhookUrl, { text: payload.join("\n") });
};
/**
* Generate payload for notification
* @param {const} status The status of the monitor
* @param {string} monitorMessage Message to send
* @param {string} monitorName Name of monitor affected
* @param {string} monitorUrl URL of monitor affected
* @returns {Array}
*/
_notificationPayloadFactory = ({
status,
monitorMessage,
monitorName,
monitorUrl,
}) => {
const payload = [];
payload.push("### Uptime Kuma\n");
payload.push(this._statusMessageFactory(status, monitorName));
payload.push(`*Description:* ${monitorMessage}`);
if (monitorName) {
payload.push(`*Monitor:* ${monitorName}`);
}
if (monitorUrl && monitorUrl !== "https://") {
payload.push(`*URL:* [${monitorUrl}](${monitorUrl})`);
}
return payload;
};
/**
* Send a general notification
* @param {string} webhookUrl URL to send request to
* @param {string} msg Message to send
* @returns {Promise<void>}
*/
_handleGeneralNotification = (webhookUrl, msg) => {
const payload = this._notificationPayloadFactory({
monitorMessage: msg
});
return this._sendNotification(webhookUrl, payload);
};
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully.";
try {
if (heartbeatJSON == null) {
await this._handleGeneralNotification(notification.webhookUrl, msg);
return okMsg;
}
let url;
switch (monitorJSON["type"]) {
case "http":
case "keywork":
url = monitorJSON["url"];
break;
case "docker":
url = monitorJSON["docker_host"];
break;
default:
url = monitorJSON["hostname"];
break;
}
const payload = this._notificationPayloadFactory({
monitorMessage: heartbeatJSON.msg,
monitorName: monitorJSON.name,
monitorUrl: url,
status: heartbeatJSON.status
});
await this._sendNotification(notification.webhookUrl, payload);
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = ZohoCliq;

View File

@ -14,6 +14,7 @@ const GoogleChat = require("./notification-providers/google-chat");
const Gorush = require("./notification-providers/gorush");
const Gotify = require("./notification-providers/gotify");
const HomeAssistant = require("./notification-providers/home-assistant");
const Kook = require("./notification-providers/kook");
const Line = require("./notification-providers/line");
const LineNotify = require("./notification-providers/linenotify");
const LunaSea = require("./notification-providers/lunasea");
@ -44,6 +45,7 @@ const WeCom = require("./notification-providers/wecom");
const GoAlert = require("./notification-providers/goalert");
const SMSManager = require("./notification-providers/smsmanager");
const ServerChan = require("./notification-providers/serverchan");
const ZohoCliq = require("./notification-providers/zoho-cliq");
class Notification {
@ -70,6 +72,7 @@ class Notification {
new Gorush(),
new Gotify(),
new HomeAssistant(),
new Kook(),
new Line(),
new LineNotify(),
new LunaSea(),
@ -100,6 +103,7 @@ class Notification {
new Webhook(),
new WeCom(),
new GoAlert(),
new ZohoCliq()
];
for (let item of list) {

View File

@ -1,199 +0,0 @@
// https://github.com/ben-bradley/ping-lite/blob/master/ping-lite.js
// Fixed on Windows
const net = require("net");
const spawn = require("child_process").spawn;
const events = require("events");
const fs = require("fs");
const util = require("./util-server");
module.exports = Ping;
/**
* Constructor for ping class
* @param {string} host Host to ping
* @param {object} [options] Options for the ping command
* @param {array|string} [options.args] - Arguments to pass to the ping command
*/
function Ping(host, options) {
if (!host) {
throw new Error("You must specify a host to ping!");
}
this._host = host;
this._options = options = (options || {});
events.EventEmitter.call(this);
const timeout = 10;
if (util.WIN) {
this._bin = "c:/windows/system32/ping.exe";
this._args = (options.args) ? options.args : [ "-n", "1", "-w", timeout * 1000, host ];
this._regmatch = /[><=]([0-9.]+?)ms/;
} else if (util.LIN) {
this._bin = "/bin/ping";
const defaultArgs = [ "-n", "-w", timeout, "-c", "1", host ];
if (net.isIPv6(host) || options.ipv6) {
defaultArgs.unshift("-6");
}
this._args = (options.args) ? options.args : defaultArgs;
this._regmatch = /=([0-9.]+?) ms/;
} else if (util.MAC) {
if (net.isIPv6(host) || options.ipv6) {
this._bin = "/sbin/ping6";
} else {
this._bin = "/sbin/ping";
}
this._args = (options.args) ? options.args : [ "-n", "-t", timeout, "-c", "1", host ];
this._regmatch = /=([0-9.]+?) ms/;
} else if (util.BSD) {
this._bin = "/sbin/ping";
const defaultArgs = [ "-n", "-t", timeout, "-c", "1", host ];
if (net.isIPv6(host) || options.ipv6) {
defaultArgs.unshift("-6");
}
this._args = (options.args) ? options.args : defaultArgs;
this._regmatch = /=([0-9.]+?) ms/;
} else {
throw new Error("Could not detect your ping binary.");
}
if (!fs.existsSync(this._bin)) {
throw new Error("Could not detect " + this._bin + " on your system");
}
this._i = 0;
return this;
}
Ping.prototype.__proto__ = events.EventEmitter.prototype;
/**
* Callback for send
* @callback pingCB
* @param {any} err Any error encountered
* @param {number} ms Ping time in ms
*/
/**
* Send a ping
* @param {pingCB} callback Callback to call with results
*/
Ping.prototype.send = function (callback) {
let self = this;
callback = callback || function (err, ms) {
if (err) {
return self.emit("error", err);
}
return self.emit("result", ms);
};
let _ended;
let _exited;
let _errored;
this._ping = spawn(this._bin, this._args, { windowsHide: true }); // spawn the binary
this._ping.on("error", function (err) { // handle binary errors
_errored = true;
callback(err);
});
this._ping.stdout.on("data", function (data) { // log stdout
if (util.WIN) {
data = convertOutput(data);
}
this._stdout = (this._stdout || "") + data;
});
this._ping.stdout.on("end", function () {
_ended = true;
if (_exited && !_errored) {
onEnd.call(self._ping);
}
});
this._ping.stderr.on("data", function (data) { // log stderr
if (util.WIN) {
data = convertOutput(data);
}
this._stderr = (this._stderr || "") + data;
});
this._ping.on("exit", function (code) { // handle complete
_exited = true;
if (_ended && !_errored) {
onEnd.call(self._ping);
}
});
/**
* @param {Function} callback
*
* Generated by Trelent
*/
function onEnd() {
let stdout = this.stdout._stdout;
let stderr = this.stderr._stderr;
let ms;
if (stderr) {
return callback(new Error(stderr));
}
if (!stdout) {
return callback(new Error("No stdout detected"));
}
ms = stdout.match(self._regmatch); // parse out the ##ms response
ms = (ms && ms[1]) ? Number(ms[1]) : ms;
callback(null, ms, stdout);
}
};
/**
* Ping every interval
* @param {pingCB} callback Callback to call with results
*/
Ping.prototype.start = function (callback) {
let self = this;
this._i = setInterval(function () {
self.send(callback);
}, (self._options.interval || 5000));
self.send(callback);
};
/** Stop sending pings */
Ping.prototype.stop = function () {
clearInterval(this._i);
};
/**
* Try to convert to UTF-8 for Windows, as the ping's output on Windows is not UTF-8 and could be in other languages
* Thank @pemassi
* https://github.com/louislam/uptime-kuma/issues/570#issuecomment-941984094
* @param {any} data
* @returns {string}
*/
function convertOutput(data) {
if (util.WIN) {
if (data) {
return util.convertToUTF8(data);
}
}
return data;
}

View File

@ -715,6 +715,7 @@ let needSetup = false;
bean.authDomain = monitor.authDomain;
bean.grpcUrl = monitor.grpcUrl;
bean.grpcProtobuf = monitor.grpcProtobuf;
bean.grpcServiceName = monitor.grpcServiceName;
bean.grpcMethod = monitor.grpcMethod;
bean.grpcBody = monitor.grpcBody;
bean.grpcMetadata = monitor.grpcMetadata;

View File

@ -244,6 +244,8 @@ module.exports.maintenanceSocketHandler = (socket) => {
socket.userID,
]);
apicache.clear();
callback({
ok: true,
msg: "Deleted Successfully.",
@ -269,6 +271,8 @@ module.exports.maintenanceSocketHandler = (socket) => {
maintenanceID,
]);
apicache.clear();
callback({
ok: true,
msg: "Paused Successfully.",
@ -294,6 +298,8 @@ module.exports.maintenanceSocketHandler = (socket) => {
maintenanceID,
]);
apicache.clear();
callback({
ok: true,
msg: "Resume Successfully",

View File

@ -1,5 +1,5 @@
const tcpp = require("tcp-ping");
const Ping = require("./ping-lite");
const ping = require("ping");
const { R } = require("redbean-node");
const { log, genSecret } = require("../src/util");
const passwordHash = require("./password-hash");
@ -26,12 +26,7 @@ const {
} = require("node-radius-utils");
const dayjs = require("dayjs");
// From ping-lite
exports.WIN = /^win/.test(process.platform);
exports.LIN = /^linux/.test(process.platform);
exports.MAC = /^darwin/.test(process.platform);
exports.FBSD = /^freebsd/.test(process.platform);
exports.BSD = /bsd$/.test(process.platform);
const isWindows = process.platform === /^win/.test(process.platform);
/**
* Init or reset JWT secret
@ -105,18 +100,23 @@ exports.ping = async (hostname) => {
*/
exports.pingAsync = function (hostname, ipv6 = false) {
return new Promise((resolve, reject) => {
const ping = new Ping(hostname, {
ipv6
});
ping.send(function (err, ms, stdout) {
if (err) {
reject(err);
} else if (ms === null) {
reject(new Error(stdout));
ping.promise.probe(hostname, {
v6: ipv6,
min_reply: 1,
timeout: 10,
}).then((res) => {
// If ping failed, it will set field to unknown
if (res.alive) {
resolve(res.time);
} else {
resolve(Math.round(ms));
if (isWindows) {
reject(new Error(exports.convertToUTF8(res.output)));
} else {
reject(new Error(res.output));
}
}
}).catch((err) => {
reject(err);
});
});
};
@ -248,19 +248,19 @@ exports.dnsResolve = function (hostname, resolverServer, resolverPort, rrtype) {
* @param {string} query The query to validate the database with
* @returns {Promise<(string[]|Object[]|Object)>}
*/
exports.mssqlQuery = function (connectionString, query) {
return new Promise((resolve, reject) => {
mssql.connect(connectionString).then(pool => {
return pool.request()
.query(query);
}).then(result => {
resolve(result);
}).catch(err => {
reject(err);
}).finally(() => {
mssql.close();
});
});
exports.mssqlQuery = async function (connectionString, query) {
let pool;
try {
pool = new mssql.ConnectionPool(connectionString);
await pool.connect();
await pool.request().query(query);
pool.close();
} catch (e) {
if (pool) {
pool.close();
}
throw e;
}
};
/**
@ -778,22 +778,31 @@ module.exports.grpcQuery = async (options) => {
cb);
}, false, false);
return new Promise((resolve, _) => {
return grpcService[`${grpcMethod}`](JSON.parse(grpcBody), function (err, response) {
const responseData = JSON.stringify(response);
if (err) {
return resolve({
code: err.code,
errorMessage: err.details,
data: ""
});
} else {
log.debug("monitor:", `gRPC response: ${response}`);
return resolve({
code: 1,
errorMessage: "",
data: responseData
});
}
});
try {
return grpcService[`${grpcMethod}`](JSON.parse(grpcBody), function (err, response) {
const responseData = JSON.stringify(response);
if (err) {
return resolve({
code: err.code,
errorMessage: err.details,
data: ""
});
} else {
log.debug("monitor:", `gRPC response: ${JSON.stringify(response)}`);
return resolve({
code: 1,
errorMessage: "",
data: responseData
});
}
});
} catch (err) {
return resolve({
code: -1,
errorMessage: `Error ${err}. Please review your gRPC configuration option. The service name must not include package name value, and the method name must follow camelCase format`,
data: ""
});
}
});
};

View File

@ -204,7 +204,7 @@ export default {
nameInvalid = false;
valueInvalid = false;
invalid = false;
} else if (this.existingTags.filter(tag => tag.name === this.newDraftTag.name).length > 0) {
} else if (this.existingTags.filter(tag => tag.name === this.newDraftTag.name).length > 0 && this.newDraftTag.select == null) {
// Try to create new tag with existing name
nameInvalid = true;
invalid = true;

View File

@ -1,5 +1,5 @@
<template>
<span :class="className" :title="24 + $t('-hour')">{{ uptime }}</span>
<span :class="className" :title="title">{{ uptime }}</span>
</template>
<script>
@ -75,6 +75,14 @@ export default {
return "";
},
title() {
if (this.type === "720") {
return `30${this.$t("-day")}`;
}
return `24${this.$t("-hour")}`;
}
},
};
</script>

View File

@ -0,0 +1,36 @@
<template>
<div class="mb-3">
<label for="kook-bot-token" class="form-label">{{ $t("Bot Token") }}</label>
<HiddenInput id="kook-bot-token" v-model="$parent.notification.kookBotToken" :required="true" autocomplete="new-password"></HiddenInput>
<i18n-t tag="div" keypath="wayToGetKookBotToken" class="form-text">
<a href="https://developer.kookapp.cn/bot" target="_blank">https://developer.kookapp.cn/bot</a>
</i18n-t>
</div>
<div class="mb-3">
<label for="kook-guild-id" class="form-label">{{ $t("Guild ID") }}</label>
<div class="input-group mb-3">
<input id="kook-guild-id" v-model="$parent.notification.kookGuildID" type="text" class="form-control" required>
</div>
<div class="form-text">
<p style="margin-top: 8px;">
{{ $t("wayToGetKookGuildID") }}
</p>
</div>
</div>
<i18n-t tag="p" keypath="More info on:" style="margin-top: 8px;">
<a href="https://developer.kookapp.cn" target="_blank">https://developer.kookapp.cn</a>
</i18n-t>
</template>
<script>
import HiddenInput from "../HiddenInput.vue";
export default {
components: {
HiddenInput,
}
};
</script>

View File

@ -0,0 +1,18 @@
<template>
<div class="mb-3">
<label for="zcliq-webhookurl" class="form-label">{{ $t("Webhook URL") }}</label>
<input
id="zcliq-webhookurl"
v-model="$parent.notification.webhookUrl"
type="text"
class="form-control"
required
/>
<i18n-t tag="div" keypath="wayToGetZohoCliqURL" class="form-text">
<a
href="https://www.zoho.com/cliq/help/platform/webhook-tokens.html"
target="_blank"
>{{ $t("here") }}</a>
</i18n-t>
</div>
</template>

View File

@ -12,6 +12,7 @@ import GoogleChat from "./GoogleChat.vue";
import Gorush from "./Gorush.vue";
import Gotify from "./Gotify.vue";
import HomeAssistant from "./HomeAssistant.vue";
import Kook from "./Kook.vue";
import Line from "./Line.vue";
import LineNotify from "./LineNotify.vue";
import LunaSea from "./LunaSea.vue";
@ -42,6 +43,7 @@ import Telegram from "./Telegram.vue";
import Webhook from "./Webhook.vue";
import WeCom from "./WeCom.vue";
import GoAlert from "./GoAlert.vue";
import ZohoCliq from "./ZohoCliq.vue";
/**
* Manage all notification form.
@ -63,6 +65,7 @@ const NotificationFormList = {
"gorush": Gorush,
"gotify": Gotify,
"HomeAssistant": HomeAssistant,
"Kook": Kook,
"line": Line,
"LineNotify": LineNotify,
"lunasea": LunaSea,
@ -93,6 +96,7 @@ const NotificationFormList = {
"WeCom": WeCom,
"GoAlert": GoAlert,
"ServerChan": ServerChan,
"ZohoCliq": ZohoCliq
};
export default NotificationFormList;

View File

@ -194,6 +194,7 @@ export default {
here: "εδώ",
Required: "Απαιτείται",
telegram: "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Διακριτικό Bot",
wayToGetTelegramToken: "Μπορείτε να πάρετε ένα διακριτικό από {0}.",
"Chat ID": "Chat ID",
@ -224,6 +225,7 @@ export default {
teams: "Microsoft Teams",
"Webhook URL": "Webhook URL",
wayToGetTeamsURL: "Μπορείτε να μάθετε πώς να δημιουργείτε μια διεύθυνση URL webhook {0}.",
wayToGetZohoCliqURL: "Μπορείτε να μάθετε πώς να δημιουργείτε μια διεύθυνση URL webhook {0}.",
signal: "Signal",
Number: "Αριθμός",
Recipients: "Αποδέκτες",

View File

@ -209,6 +209,7 @@ export default {
here: "here",
Required: "Required",
telegram: "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Bot Token",
wayToGetTelegramToken: "You can get a token from {0}.",
"Chat ID": "Chat ID",
@ -241,6 +242,7 @@ export default {
teams: "Microsoft Teams",
"Webhook URL": "Webhook URL",
wayToGetTeamsURL: "You can learn how to create a webhook URL {0}.",
wayToGetZohoCliqURL: "You can learn how to create a webhook URL {0}.",
signal: "Signal",
Number: "Number",
Recipients: "Recipients",
@ -270,6 +272,10 @@ export default {
apprise: "Apprise (Support 50+ Notification services)",
GoogleChat: "Google Chat (Google Workspace only)",
pushbullet: "Pushbullet",
Kook: "Kook",
wayToGetKookBotToken: "Create application and get your bot token at {0}",
wayToGetKookGuildID: "Switch on 'Developer Mode' in Kook setting, and right click the guild to get its ID",
"Guild ID": "Guild ID",
line: "Line Messenger",
mattermost: "Mattermost",
"User Key": "User Key",

View File

@ -191,6 +191,7 @@ export default {
here: "Hemen",
Required: "Beharrezkoa",
telegram: "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Bot Tokena",
wayToGetTelegramToken: "You can get a token from {0}.",
"Chat ID": "Txat IDa",
@ -221,6 +222,7 @@ export default {
teams: "Microsoft Teams",
"Webhook URL": "Webhook URL",
wayToGetTeamsURL: "You can learn how to create a webhook URL {0}.",
wayToGetZohoCliqURL: "You can learn how to create a webhook URL {0}.",
signal: "Signal",
Number: "Zenbakia",
Recipients: "Recipients",

View File

@ -99,7 +99,7 @@ export default {
pushOptionalParams: "Paramètres facultatifs : {0}",
Save: "Sauvegarder",
Notifications: "Notifications",
"Not available, please setup.": "Pas de système de notification disponible, merci de le configurer.",
"Not available, please setup.": "Non disponible, merci de le configurer.",
"Setup Notification": "Créer une notification",
Light: "Clair",
Dark: "Sombre",

672
src/languages/he-IL.js Normal file
View File

@ -0,0 +1,672 @@
export default {
languageName: "עברית",
checkEverySecond: "בדוק כל {0} שניות",
retryCheckEverySecond: "נסה שוב כל {0} שניות",
resendEveryXTimes: "התראה שוב כל {0} פעמים",
resendDisabled: "השליחה מחדש מושבתת",
retriesDescription: "מקסימום ניסיונות חוזרים לפני שהשירות יסומן כלא פעיל ונשלחת התראה",
ignoreTLSError: "התעלם משגיאת TLS/SSL עבור אתרי HTTPS",
upsideDownModeDescription: "הפוך את הסטטוס על הפוך. אם ניתן להגיע לשירות, הוא לא פעיל.",
maxRedirectDescription: "המספר המרבי של הפניות מחדש לעקוב. הגדר ל-0 כדי להשבית הפניות מחדש.",
enableGRPCTls: "אפשר לשלוח בקשת gRPC עם חיבור TLS",
grpcMethodDescription: "שם השיטה מומר לפורמט cammelCase כגון sayHello, check וכו.",
acceptedStatusCodesDescription: "בחר קודי סטטוס שנחשבים לתגובה מוצלחת.",
Maintenance: "תחזוקה",
statusMaintenance: "תחזוקה",
"Schedule maintenance": "תחזוקה מתוכננת",
"Affected Monitors": "מוניטורים מושפעים",
"Pick Affected Monitors...": "בחר המוניטרים מושפעים...",
"Start of maintenance": "תחילת תחזוקה",
"All Status Pages": "כל דפי הסטטוס",
"Select status pages...": "בחר דפי סטטוס...",
recurringIntervalMessage: "רוץ פעם ביום | הפעל אחת ל-{0} ימים",
affectedMonitorsDescription: "בחר מוניטורים שמושפעים מהתחזוקה הנוכחית",
affectedStatusPages: "הצג הודעת תחזוקה זו בדפי סטטוס שנבחרו",
atLeastOneMonitor: "בחר לפחות מוניטור אחד מושפע",
passwordNotMatchMsg: "הסיסמאות לא תואמות",
notificationDescription: "יש להקצות התראות למוניטור כדי שהן יעבדו.",
keywordDescription: "חפש מילת מפתח בתגובת HTML או JSON רגילה. החיפוש תלוי רישיות.",
pauseDashboardHome: "עצור",
deleteMonitorMsg: "האם אתה בטוח שברצונך למחוק את המוניטור הזה?",
deleteMaintenanceMsg: "האם אתה בטוח שברצונך למחוק את התחזוקה הזו?",
deleteNotificationMsg: "האם אתה בטוח שברצונך למחוק את ההודעה הזו עבור כל מוניטרים?",
dnsPortDescription: "יציאת שרת DNS. ברירת המחדל היא 53. אתה יכול לשנות את היציאה בכל עת.",
resolverserverDescription: "Cloudflare הוא שרת ברירת המחדל. אתה יכול לשנות את שרת הפותר בכל עת.",
rrtypeDescription: "בחר את סוג ה-RR שברצונך לפקח עליו",
pauseMonitorMsg: "האם אתה בטוח רוצה להשהות?",
enableDefaultNotificationDescription: "הודעה זו תופעל כברירת מחדל עבור מוניטרים חדשים. אתה עדיין יכול להשבית את ההודעה בנפרד עבור כל מוניטור.",
clearEventsMsg: "האם אתה בטוח שברצונך למחוק את כל האירועים עבור המוניטור הזה?",
clearHeartbeatsMsg: "האם אתה בטוח שברצונך למחוק את כל פעימות הלב עבור המוניטור הזה?",
confirmClearStatisticsMsg: "האם אתה בטוח שברצונך למחוק את כל הנתונים הסטטיסטיים?",
importHandleDescription: "בחר 'דלג על קיים' אם ברצונך לדלג על כל מוניטור או התראה באותו שם. 'החלף' ימחק כל מוניטור והתראה קיימים.",
confirmImportMsg: "האם אתה בטוח שברצונך לייבא את הגיבוי? אנא ודא שבחרת באפשרות הייבוא הנכונה.",
twoFAVerifyLabel: "אנא הזן את האסימון שלך כדי לאמת מערכת אדוש:",
tokenValidSettingsMsg: "האסימון תקף! כעת אתה יכול לשמור את הגדרות האדוש.",
confirmEnableTwoFAMsg: "האם אתה בטוח שברצונך להפעיל את מערכת אדוש?",
confirmDisableTwoFAMsg: "Are you sure you want to disable 2FA?",
Settings: "הגדרות",
Dashboard: "פאנל ניהול",
"New Update": "עדכון חדש",
Language: "שפה",
Appearance: "נראות",
Theme: "ערכת נושא",
General: "כללי",
"Primary Base URL": "כתובת האתר הראשית של הבסיס",
Version: "גרסה",
"Check Update On GitHub": "לבדוק עדכונים בגיטהאב",
List: "רשימה",
Add: "הוסף",
"Add New Monitor": "הוספת מוניטור חדש",
"Quick Stats": "נתונים בקצרה",
Up: "פעיל",
Down: "לא פעיל",
Pending: "ממתין",
Unknown: "לא יודע",
Pause: "עצור",
Name: "שם",
Status: "סטטוס",
DateTime: "תאריך שעה",
Message: "הודעה",
"No important events": "אין אירועים חשובים",
Resume: "המשך",
Edit: "עריכה",
Delete: "מחיקה",
Current: "עכשיו",
Uptime: "זמן פעילות",
"Cert Exp.": "Cert Exp.",
day: "יום | ימים",
"-day": "-יום",
hour: "שעה",
"-hour": "-שעה",
Response: "תגובה",
Ping: "פינג",
"Monitor Type": "סוג מוניטור",
Keyword: "מילת מפתח",
"Friendly Name": "שם ידידותי",
URL: "כתובת אתר",
Hostname: "שם המארח",
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": "דחף כתובת URL",
needPushEvery: "עליך להתקשר לכתובת האתר הזו כל {0} שניות.",
pushOptionalParams: "פרמטרים אופציונליים: {0}",
Save: "שמירה",
Notifications: "התראות",
"Not available, please setup.": "לא זמין, אנא הגדר.",
"Setup Notification": "הודעת הגדרה",
Light: "בהיר",
Dark: "חושך",
Auto: "אוטומטי",
"Theme - Heartbeat Bar": "ערכת נושא - 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: "אימייל",
Test: "Test",
"Certificate Info": "פרטי תעודת אבטחה",
"Resolver Server": "שרת פותר",
"Resource Record Type": "סוג רשומת משאבים",
"Last Result": "תוצאה אחרונה",
"Create your admin account": "צור את חשבון הניהול שלך",
"Repeat Password": "חזור על הסיסמה",
"Import Backup": "ייבוא גיבוי",
"Export Backup": "ייצוא גיבוי",
Export: "ייצוא",
Import: "ייבוא",
respTime: "רפ. זמן (ms)",
notAvailableShort: "N/A",
"Default enabled": "ברירת המחדל מופעלת",
"Apply on all existing monitors": "החל על כל המסכים הקיימים",
Create: "ליצור",
"Clear Data": "נקה נתונים",
Events: "אירועים",
Heartbeats: "פעימות לב",
"Auto Get": "קבל אוטומטי",
backupDescription: "אתה יכול לגבות את כל המסכים וההתראות לקובץ JSON.",
backupDescription2: "הערה: היסטוריה ונתוני אירועים אינם כלולים.",
backupDescription3: "נתונים רגישים כגון אסימוני הודעה כלולים בקובץ הייצוא; נא לאחסן יצוא בצורה מאובטחת.",
alertNoFile: "אנא בחר קובץ לייבוא.",
alertWrongFileType: "אנא בחר קובץ JSON.",
"Clear all statistics": "נקה את כל הנתונים הסטטיסטיים",
"Skip existing": "דילוג על הקיים",
Overwrite: "החלף",
Options: "אפשרויות",
"Keep both": "שמור את שניהם",
"Verify Token": "אמת את האסימון",
"Setup 2FA": "הגדרת מערכת אדוש",
"Enable 2FA": "הפעלת אדוש",
"Disable 2FA": "כיבוי אדוש",
"2FA Settings": "הגדרות אדוש",
"Two Factor Authentication": "אימות דו-שלבי (מערכת אדוש)",
Active: "מופעל",
Inactive: "קבוי",
Token: "אסימון",
"Show URI": "הצג URI",
Tags: "תגים",
"Add New below or Select...": "הוסף חדש למטה או בחר...",
"Tag with this name already exist.": "תג בשם זה כבר קיים.",
"Tag with this value already exist.": "תג עם ערך זה כבר קיים.",
color: "צבע",
"value (optional)": "ערך (אופציונלי)",
Gray: "אפור",
Red: "אדום",
Orange: "כתום",
Green: "ירוק",
Blue: "כחול",
Indigo: "כחול כהה",
Purple: "סגול",
Pink: "כתום",
"Search...": "לחפש...",
"Avg. Ping": "פינג ממוצע",
"Avg. Response": "ממוצע תגובה",
"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: "טלגרם",
"Bot Token": "אסימון בוט",
wayToGetTelegramToken: "אתה יכול לקבל אסימון מ-{0}.",
"Chat ID": "מזהה צ'אט",
supportTelegramChatID: "תמיכה בצ'אט ישיר / קבוצה / מזהה הצ'אט של הערוץ",
wayToGetTelegramChatID: "אתה יכול לקבל את מזהה הצ'אט שלך על ידי שליחת הודעה לבוט ומעבר לכתובת האתר הזו כדי להציג את ה-chat_id:",
"YOUR BOT TOKEN HERE": "אסימון הבוט שלך כאן",
chatIDNotFound: "מזהה צ'אט לא נמצא; אנא שלח הודעה לבוט זה תחילה",
webhook: "Webhook",
"Post URL": "כתובת אתר של פוסט",
"Content Type": "סוג התוכן",
webhookJsonDesc: "{0} מתאים לכל שרתי HTTP מודרניים כגון Express.js",
webhookFormDataDesc: "{multipart} טוב ל-PHP. יהיה צורך לנתח את ה-JSON באמצעות {decodeFunction}",
webhookAdditionalHeadersTitle: "כותרות נוספות",
webhookAdditionalHeadersDesc: "מגדיר כותרות נוספות שנשלחות עם ה-webhook.",
smtp: "אימייל (SMTP)",
secureOptionNone: "None / STARTTLS (25, 587)",
secureOptionTLS: "TLS (465)",
"Ignore TLS Error": "התעלם משגיאת TLS",
"From Email": "אמייל שולח",
emailCustomSubject: "נושא מותאם אישית",
"To Email": "למייל",
smtpCC: "עותק",
smtpBCC: "עותק מוסתר",
discord: "דיסקורד",
"Discord Webhook URL": "כתובת אתר של Discord Webhook",
wayToGetDiscordURL: "אתה יכול לקבל זאת על ידי מעבר להגדרות שרת -> אינטגרציות -> צור Webhook",
"Bot Display Name": "שם תצוגה של בוט",
"Prefix Custom Message": "קידומת הודעה מותאמת אישית",
"Hello @everyone is...": "שלום {'@'}כולם...",
teams: "Microsoft Teams",
"Webhook URL": "כתובת האתר של Webhook",
wayToGetTeamsURL: "אתה יכול ללמוד כיצד ליצור כתובת אתר ל-webhook {0}.",
signal: "אוֹת",
Number: "מספר",
Recipients: "נמענים",
needSignalAPI: "אתה צריך שיהיה לך לקוח איתות עם REST API.",
wayToCheckSignalURL: "אתה יכול לבדוק את כתובת האתר הזו כדי לראות כיצד להגדיר אחת:",
signalImportant: "חשוב: לא ניתן לערבב קבוצות ומספרים בנמענים!",
gotify: "Gotify",
"Application Token": "אסימון אפליקציה",
"Server URL": "כתובת האתר של השרת",
Priority: "עדיפות",
slack: "Slack",
"Icon Emoji": "אייקון אימוג'י",
"Channel Name": "שם הערוץ",
"Uptime Kuma URL": "Uptime Kuma URL",
aboutWebhooks: "מידע נוסף על Webhooks ב: {0}",
aboutChannelName: "הזן את שם הערוץ בשדה {0} שם ערוץ אם ברצונך לעקוף את ערוץ Webhook. לדוגמה: #ערוץ אחר",
aboutKumaURL: "אם תשאיר את השדה Uptime Kuma URL ריק, הוא יעבור כברירת מחדל לעמוד Project GitHub.",
emojiCheatSheet: "גיליון הונאה של אמוג'י: {0}",
"rocket.chat": "Rocket.Chat",
pushover: "Pushover",
pushy: "Pushy",
PushByTechulus: "Push by Techulus",
octopush: "Octopush",
promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
lunasea: "LunaSea",
apprise: "Apprise (תומך ב-50+ שירותי התראות)",
GoogleChat: "Google Chat (Google Workspace בלבד)",
pushbullet: "Pushbullet",
line: "Line Messenger",
mattermost: "Mattermost",
"User Key": "מפתח משתמש",
Device: "התקן",
"Message Title": "כותרת ההודעה",
"Notification Sound": "צליל התראה",
"More info on:": "מידע נוסף על: {0}",
pushoverDesc1: "לעדיפות חירום (2) יש פסק זמן של 30 שניות ברירת מחדל בין ניסיונות חוזרים, והיא תפוג לאחר שעה.",
pushoverDesc2: "אם ברצונך לשלוח התראות למכשירים שונים, מלא את שדה התקן.",
"SMS Type": "סוג SMS",
octopushTypePremium: "פרימיום (מהיר - מומלץ להתראה)",
octopushTypeLowCost: "עלות נמוכה (איטית - לפעמים חסומה על ידי המפעיל)",
checkPrice: "בדוק מחירים של {0}:",
apiCredentials: "אישורי API",
octopushLegacyHint: "האם אתה משתמש בגרסה הישנה של Octopush (2011-2020) או בגרסה החדשה?",
"Check octopush prices": "בדוק מחירי תמנון {0}.",
octopushPhoneNumber: "מספר טלפון (פורמט אינטלי, למשל: +33612345678)",
octopushSMSSender: "שם שולח SMS: 3-11 תווים אלפאנומריים ורווח (a-zA-Z0-9)",
"LunaSea Device ID": "מזהה מכשיר LunaSea",
"Apprise URL": "Apprise URL",
"Example:": "דוגמה: {0}",
"Read more:": "קרא עוד: {0}",
"Status:": "סטטוס: {0}",
"Read more": "קרא עוד",
appriseInstalled: "Apprise מותקן.",
appriseNotInstalled: "Apprise אינו מותקן. {0}",
"Access Token": "אסימון גישה",
"Channel access token": "אסימון גישה לערוץ",
"Line Developers Console": "קונסולת מפתחים",
lineDevConsoleTo: "קו מפתחי קונסולת - {0}",
"Basic Settings": "הגדרות בסיסיות",
"User ID": "תעודת זהות של משתמש",
"Messaging API": "Messaging API",
wayToGetLineChannelToken: "תחילה גש ל-{0}, צור ספק וערוץ (Messaging API), לאחר מכן תוכל לקבל את אסימון הגישה לערוץ ומזהה המשתמש מפריטי התפריט שהוזכרו לעיל.",
"Icon URL": "כתובת אתר של סמל",
aboutIconURL: "אתה יכול לספק קישור לתמונה ב\"כתובת URL של סמל\" כדי לעקוף את תמונת הפרופיל המוגדרת כברירת מחדל. לא ישמש אם Icon Emoji מוגדר.",
aboutMattermostChannelName: "אתה יכול לעקוף את ערוץ ברירת המחדל שאליו ה-Webhook מפרסם על ידי הזנת שם הערוץ בשדה \"שם ערוץ\". זה צריך להיות מופעל בהגדרות Mattermos Webhook. לדוגמה: #ערוץ אחר",
matrix: "Matrix",
promosmsTypeEco: "SMS ECO - זול אך איטי ולעיתים עמוס מדי. מוגבל רק לנמענים פולנים.",
promosmsTypeFlash: "SMS FLASH - ההודעה תוצג אוטומטית במכשיר הנמען. מוגבל לנמענים פולנים בלבד.",
promosmsTypeFull: "SMS FULL - שכבת פרימיום של SMS, אתה יכול להשתמש בשם השולח שלך (עליך לרשום את השם תחילה). אמין להתראות.",
promosmsTypeSpeed: "SMS SPEED - העדיפות הגבוהה ביותר במערכת. מאוד מהיר ואמין אבל יקר (בערך פי שניים ממחיר מלא של SMS).",
promosmsPhoneNumber: "מספר טלפון (לנמען פולני ניתן לדלג על אזורי חיוג)",
promosmsSMSSender: "שם שולח SMS: שם רשום מראש או אחת מברירות המחדל: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
matrixHomeserverURL: "כתובת האתר של שרת הבית (עם http(s):// ויציאה אופציונלית)",
"Internal Room Id": "מזהה חדר פנימי",
matrixDesc1: "אתה יכול למצוא את מזהה החדר הפנימי על ידי עיון בחלק המתקדם של לקוח Matrix שלך בהגדרות החדר. זה צריך להיראות כמו !QMdRCpUIfLwsfjxye6:home.server.",
matrixDesc2: "מומלץ מאוד ליצור משתמש חדש ולא להשתמש באסימון הגישה של משתמש מטריקס משלך שכן הוא יאפשר גישה מלאה לחשבון שלך ולכל החדרים שהצטרפת אליהם. במקום זאת, צור משתמש חדש והזמן אותו רק לחדר שבו תרצה לקבל את ההתראה. תוכל לקבל את אסימון הגישה על ידי הפעלת {0}",
Method: "Method",
Body: "Body",
Headers: "Headers",
PushUrl: "Push URL",
HeadersInvalidFormat: "כותרות הבקשה אינן JSON חוקיות:",
BodyInvalidFormat: "גוף הבקשה אינו 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": "מפתח API Steam",
"Shrink Database": "מסד נתונים מכווץ",
"Pick a RR-Type...": "בחר סוג RR ...",
"Pick Accepted Status Codes...": "בחר קודי סטטוס מקובלים ...",
Default: "בְּרִירַת מֶחדָל",
"HTTP Options": "אפשרויות HTTP",
"Create Incident": "ליצור אירוע",
Title: "כותרת",
Content: "תוֹכֶן",
Style: "Style",
info: "מידע",
warning: "אַזהָרָה",
danger: "סַכָּנָה",
error: "שְׁגִיאָה",
critical: "קריטי",
primary: "יְסוֹדִי",
light: "אוֹר",
dark: "אפל",
Post: "הודעה",
"Please input title and content": "אנא הזן כותרת ותוכן",
Created: "נוצר",
"Last Updated": "עודכן לאחרונה",
Unpin: "ענן חוף",
"Switch to Light Theme": "לעבור לנושא האור",
"Switch to Dark Theme": "לעבור לנושא אפל",
"Show Tags": "Show Tags",
"Hide Tags": "הסתר תגיות",
Description: "תיאור",
"No monitors available.": "אין צגים זמינים.",
"Add one": "הוסף אחד",
"No Monitors": "אין צגים",
"Untitled Group": "קבוצה ללא כותרת",
Services: "שירותים",
Discard: "להשליך",
Cancel: "לְבַטֵל",
"Powered by": "פועל על",
shrinkDatabaseDescription: "ואקום מסד נתונים להפעיל עבור SQLITE.אם בסיס הנתונים שלך נוצר לאחר 1.10.0, Auto_VACUUM כבר מופעל ואין צורך בפעולה זו.",
serwersms: "SerwerSMS.pl",
serwersmsAPIUser: "API Username (incl. webapi_ prefix)",
serwersmsAPIPassword: "סיסמת API",
serwersmsPhoneNumber: "מספר טלפון",
serwersmsSenderName: "שם שולח SMS (רשום באמצעות פורטל לקוחות)",
smseagle: "SMSEagle",
smseagleTo: "מספרי טלפון)",
smseagleGroup: "שם קבוצת ספר טלפונים",
smseagleContact: "שם איש קשר בספר הטלפונים",
smseagleRecipientType: "Rסוג הנמען",
smseagleRecipient: "נמענים (ים) (יש להפריד בין מרובים לפסיק)",
smseagleToken: "API Access Token",
smseagleUrl: "כתובת האתר של מכשיר ה- SMSeagege שלך",
smseagleEncoding: "שלח כ- Unicode",
smseaglePriority: "עדיפות הודעה (0-9, ברירת מחדל = 0)",
stackfield: "סטאקפילד",
Customize: "התאמה אישית",
"Custom Footer": "כותרת תחתונה מותאמת אישית",
"Custom CSS": "CSS מותאם אישית",
smtpDkimSettings: "הגדרות DKIM",
smtpDkimDesc: "אנא עיין ב- NodeMailer DKIM {0} לשימוש.",
documentation: "ווקיפדיית מדריכים",
smtpDkimDomain: "שם דומיין",
smtpDkimKeySelector: "בורר מפתח",
smtpDkimPrivateKey: "טוראי של פרטיy",
smtpDkimHashAlgo: "אלגוריתם hash (אופציונלי)",
smtpDkimheaderFieldNames: "מפתחות כותרת לחתום (אופציונלי)",
smtpDkimskipFields: "מפתחות כותרת לא לחתום (אופציונלי)",
wayToGetPagerDutyKey: "אתה יכול להשיג זאת על ידי מעבר לשירות -> ספריית שירות -> (בחר שירות) -> אינטגרציות -> הוסף אינטגרציה.כאן תוכלו לחפש \"אירועים API v2 \".מידע נוסף {0}",
"Integration Key": "מפתח אינטגרציה",
"Integration URL": "URL אינטגרציה",
"Auto resolve or acknowledged": "פיתרון אוטומטי או הודה",
"do nothing": "לעשות כלום",
"auto acknowledged": "Auto הודה",
"auto resolve": "פתרון אוטומטי",
gorush: "Gorush",
alerta: "Alerta",
alertaApiEndpoint: "נקודת קצה של API",
alertaEnvironment: "סביבה",
alertaApiKey: "מפתח API",
alertaAlertState: "מצב התראה",
alertaRecoverState: "לשחזר מדינה",
deleteStatusPageMsg: "האם אתה בטוח רוצה למחוק את דף הסטטוס הזה?",
Proxies: "Proxies",
default: "בְּרִירַת מֶחדָל",
enabled: "מופעל",
setAsDefault: "נקבע כברירת מחדל",
deleteProxyMsg: "האם אתה בטוח רוצה למחוק את הפרוקסי הזה לכל המסכים?",
proxyDescription: "Proxies must be assigned to a monitor to function.",
enableProxyDescription: "פרוקסי זה לא ישפיע על בקשות צג עד שהוא יופעל.אתה יכול לשלוט באופן זמני להשבית את ה- Proxy מכל המסכים לפי מצב ההפעלה.",
setAsDefaultProxyDescription: "פרוקסי זה יופעל כברירת מחדל עבור צגים חדשים.אתה עדיין יכול להשבית את ה- Proxy בנפרד עבור כל צג.",
"Certificate Chain": "שרשרת אישורים",
Valid: "תָקֵף",
Invalid: "לא חוקי",
AccessKeyId: "מזהה AccessKey",
SecretAccessKey: "גישהלמפתחסוד",
PhoneNumbers: "מספר טלפוןs",
TemplateCode: "TemplateCode",
SignName: "שם שם",
"Sms template must contain parameters: ": "תבנית SMS חייבת להכיל פרמטרים: ",
"Bark Endpoint": "Bark Endpoint",
"Bark Group": "Bark Group",
"Bark Sound": "Bark Sound",
WebHookUrl: "WebHookUrl",
SecretKey: "מפתח סודי",
"For safety, must use secret key": "לבטיחות, חייב להשתמש במפתח סודיy",
"Device Token": "אסימון מכשיר",
Platform: "פּלַטפוֹרמָה",
iOS: "iOS",
Android: "דְמוּי אָדָם",
Huawei: "huawei",
High: "High",
Retry: "נסה שוב",
Topic: "נוֹשֵׂא",
"WeCom Bot Key": "WeCom Bot Key",
"Setup Proxy": "הגדרת פרוקסי",
"Proxy Protocol": "פרוטוקול פרוקסי",
"Proxy Server": "שרת פרוקסי",
"Proxy server has authentication": "לשרת ה- Proxy יש אימות",
User: "מִשׁתַמֵשׁ",
Installed: "מוּתקָן",
"Not installed": "לא מותקן",
Running: "רץ",
"Not running": "לא רץ",
"Remove 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.": "השבלול כבר נלקח.אנא בחר שבלול נוסף.",
"No Proxy": "אין פרוקסי",
Authentication: "אבטחה",
"HTTP Basic Auth": "HTTP בסיסי Auth",
"New Status Page": "דף סטטוס חדש",
"Page Not Found": "הדף לא נמצא",
"Reverse Proxy": "פרוקסי הפוך",
Backup: "גיבוי",
About: "אודות",
wayToGetCloudflaredURL: "(הורד את CloudFlared מ- {0})",
cloudflareWebsite: "אתר CloudFlare",
"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.האם אתה בטוח רוצה לעצור את זה?הקלד את הסיסמה הנוכחית שלך כדי לאשר אותה.",
"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: "כתובת HTTP של OneBot ",
onebotMessageType: "סוג ההודעה OneBot",
onebotGroupMessage: "קְבוּצָה",
onebotPrivateMessage: "פְּרָטִי",
onebotUserOrGroupId: "מזהה קבוצה/משתמש ",
onebotSafetyTips: "לבטיחות, חייב לקבוע אסימון גישה ",
"PushDeer Key": "PushDeer Key",
"Footer Text": "טקסט כותרת תחתונה ",
"Show Powered By": "הצג מופעל על ידי ",
"Domain Names": "שמות דומיין ",
signedInDisp: "חתום כ- {0} ",
signedInDispDisabled: "Auth מושבת.",
RadiusSecret: "רדיוס סוד",
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 של תמנון",
"Legacy Octopush-DM": "Legacy Octopush-DM",
endpoint: "נקודת קצה",
octopushAPIKey: "\"מפתח API \" מתוך תעודות API של HTTP בלוח הבקרה",
octopushLogin: "\"כניסה \" מתעודות API של HTTP בלוח הבקרה",
promosmsLogin: "שם כניסה של API",
promosmsPassword: "סיסמת API",
"pushoversounds pushover": "Pushover (ברירת מחדל)",
"pushoversounds bike": "אופניים",
"pushoversounds bugle": "חֲצוֹצְרָה",
"pushoversounds cashregister": "קופה רושמת",
"pushoversounds classical": "קלַאסִי",
"pushoversounds cosmic": "קוֹסמִי",
"pushoversounds falling": "נופל",
"pushoversounds gamelan": "gamelan",
"pushoversounds incoming": "נִכנָס",
"pushoversounds intermission": "Intermission",
"pushoversounds magic": "קֶסֶם",
"pushoversounds mechanical": "מֵכָנִי",
"pushoversounds pianobar": "בר פסנתר",
"pushoversounds siren": "סִירֶנָה",
"pushoversounds spacealarm": "אזעקת חלל",
"pushoversounds tugboat": "סירת משיכה",
"pushoversounds alien": "אזעקת חייזרים (ארוכה)",
"pushoversounds climb": "לטפס (ארוך)",
"pushoversounds persistent": "מתמיד (ארוך)",
"pushoversounds echo": "הד Pushover (ארוך)",
"pushoversounds updown": "למעלה (ארוך)",
"pushoversounds vibrate": "לרטוט בלבד",
"pushoversounds none": "אף אחד (שקט)",
pushyAPIKey: "מפתח API סודי",
pushyToken: "אסימון מכשיר",
"Show update if available": "הצג עדכון אם זמין",
"Also check beta release": "בדוק גם את שחרור הבטא",
"Using a Reverse Proxy?": "באמצעות פרוקסי הפוך?",
"Check how to config it for WebSocket": "בדוק כיצד להגדיר אותו ל- WebSocket",
"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",
"Connection Type": "סוג חיבור",
"Docker Daemon": "Docker Daemon",
deleteDockerHostMsg: "האם אתה בטוח רוצה למחוק את המארח של Docker לכל המוניטורים?",
socket: "Socket",
tcp: "TCP / HTTP",
"Docker Container": "מיכל Docker",
"Container Name / ID": "שם מכולה / מזהה",
"Docker Host": "מארח דוקר",
"Docker Hosts": "מארחי Docker",
"ntfy Topic": "ntfy Topic",
Domain: "תְחוּם",
Workstation: "עמדת עבודה",
disableCloudflaredNoAuthMsg: "אתה לא נמצא במצב AUTH, אין צורך בסיסמה.",
trustProxyDescription: "סמוך על כותרות 'x-forwarded-*'.אם אתה רוצה להשיג את ה- IP של הלקוח הנכון וה- Uptime Kuma שלך מאחור כמו Nginx או Apache, עליך לאפשר זאת.",
wayToGetLineNotifyToken: "אתה יכול לקבל אסימון גישה מ- {0}",
Examples: "דוגמאות",
"Home Assistant URL": "כתובת 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. ": "ניתן ליצור אסימון גישה לאורך זמן על ידי לחיצה על שם הפרופיל שלך (שמאל למטה) וגלילה לתחתית ואז לחץ על צור אסימון. ",
"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.": "רשימה של שירותי הודעה ניתן למצוא בעוזר הבית תחת \"כלי מפתחים> שירותים \" חפש \"הודעה \" כדי למצוא את שם המכשיר/טלפון שלך.",
"Automations can optionally be triggered in 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": "Base URL",
goAlertInfo: "SAETRERT הוא יישום קוד פתוח לתזמון שיחה, הסלמות והודעות אוטומטיות (כמו SMS או שיחות קוליות).לעסוק אוטומטית את האדם הנכון, בדרך הנכונה ובזמן הנכון!{0}",
goAlertIntegrationKeyInfo: "קבל מפתח אינטגרציה של API גנרי לשירות בפורמט זה \"AAAAAAAA-BBB-CCCC-DDDD-EEEEEEEEEEE \" בדרך כלל הערך של פרמטר האסימון של 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: "אוֹ",
recurringInterval: "הפסקה",
Recurring: "מחזורי",
strategyManual: "פעיל/לא פעיל באופן ידני",
warningTimezone: "זה משתמש באזור הזמן של השרת",
weekdayShortMon: "שני",
weekdayShortTue: "שלישי",
weekdayShortWed: "רביעי",
weekdayShortThu: "חמישי",
weekdayShortFri: "שישי",
weekdayShortSat: "שבת",
weekdayShortSun: "ראשון",
dayOfWeek: "יום בשבוע",
dayOfMonth: "יום בחודש",
lastDay: "Last Day",
lastDay1: "היום האחרון של החודש",
lastDay2: "יום שני האחרון של החודש",
lastDay3: "יום 3 האחרון של החודש",
lastDay4: "היום הרביעי האחרון בחודש",
"No Maintenance": "אין תחזוקה",
pauseMaintenanceMsg: "האם אתה בטוח רוצה להשהות?",
"maintenanceStatus-under-maintenance": "מתבצעות עבודות תחזוקה",
"maintenanceStatus-inactive": "לא פעיל",
"maintenanceStatus-scheduled": "מתוזמן",
"maintenanceStatus-ended": "הסתיים",
"maintenanceStatus-unknown": "לא ידוע",
"Display Timezone": "הצג אזור זמן",
"Server Timezone": "אזור זמן של שרת",
statusPageMaintenanceEndDate: "סוך",
IconUrl: "קישור לתמונת אייקון",
"Enable DNS Cache": "הפעל מטמון DNS",
Enable: "הפעל",
Disable: "השבת",
dnsCacheDescription: "ייתכן שהוא לא עובד בסביבות IPv6 מסוימות, השבת אותו אם אתה נתקל בבעיות כלשהן.",
"Single Maintenance Window": "חלון תחזוקה בודד",
"Maintenance Time Window of a Day": "חלון זמן תחזוקה ביום",
"Effective Date Range": "טווח תאריכים אפקטיבי",
"Schedule Maintenance": "לוח זמנים לתחזוקה",
"Date and Time": "תאריך ושעה",
"DateTime Range": "טווח תאריכים וזמן",
Strategy: "אסטרטגיה",
"Free Mobile User Identifier": "מזהה משתמש נייד בחינם",
"Free Mobile API Key": "מפתח API חינם לנייד",
"Enable TLS": "אפשר TLS",
"Proto Service Name": "שם שירות פרוטו",
"Proto Method": "שיטת פרוטו",
"Proto Content": "תוכן פרוטו",
Economy: "חיסכון",
Lowcost: "זול",
high: "גבוהה",
"General Monitor Type": "מוניטור כללי",
"Passive Monitor Type": "מוניטור פסיבי",
"Specific Monitor Type": "סוג מוניטור ספציפי",
};

View File

@ -582,4 +582,97 @@ export default {
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.",
enableGRPCTls: "TLS bağlantısıyla gRPC isteği göndermeye izin ver",
grpcMethodDescription: "Yöntem adı, sayHello, check, vb. gibi cammelCase biçimine dönüştürülür.",
Maintenance: "Bakım",
statusMaintenance: "Bakım",
"Schedule maintenance": "Bakım Planla",
"Affected Monitors": "Etkilenen Monitörler",
"Pick Affected Monitors...": "Etkilenen Monitörleri Seçin...",
"Start of maintenance": "Bakım başlangıcı",
"All Status Pages": "Tüm Durum Sayfaları",
"Select status pages...": "Durum sayfalarını seçin...",
recurringIntervalMessage: "Her gün bir kez çalıştırın | {0} günde bir çalıştırın",
affectedMonitorsDescription: "Geçerli bakımdan etkilenen monitörleri seçin",
affectedStatusPages: "Bu bakım mesajını seçili durum sayfalarında göster",
atLeastOneMonitor: "Etkilenen en az bir monitör seçin",
deleteMaintenanceMsg: "Bu bakımı silmek istediğinizden emin misiniz?",
ZohoCliq: "ZohoCliq",
webhookAdditionalHeadersTitle: "Ek Başlıklar",
webhookAdditionalHeadersDesc: "Webhook ile gönderilen ek başlıkları ayarlar.",
wayToGetZohoCliqURL: "Bir webhook URL'sinin nasıl oluşturulacağını öğrenebilirsiniz {0}.",
Kook: "Kook",
wayToGetKookBotToken: "Uygulama oluşturun ve {0} adresinde bot tokenı alın",
wayToGetKookGuildID: "Kook ayarında \"Geliştirici Modu\"nu açın ve kimliğini almak için guild'e sağ tıklayın",
"Guild ID": "Guild ID",
smseagle: "SMSEagle",
smseagleTo: "Telefon numara(ları)",
smseagleGroup: "Telefon defteri grubu ad(lar)ı",
smseagleContact: "Telefon rehberi kişi ad(lar)ı",
smseagleRecipientType: "Alıcı Türü",
smseagleRecipient: "Alıcı(lar) (birden çok olanlar virgülle ayrılmalıdır)",
smseagleToken: "API Erişim Tokenı",
smseagleUrl: "SMSEagle cihaz URL\"niz",
smseagleEncoding: "Unicode olarak gönder",
smseaglePriority: "Mesaj önceliği (0-9, varsayılan = 0)",
Optional: "İsteğe bağlı",
squadcast: "Squadcast",
SendKey: "SendKey",
"SMSManager API Docs": "SMSManager API Dökümanları ",
"Gateway Type": "Ağ Geçidi Türü",
SMSManager: "SMSManager",
"You can divide numbers with": "Sayıları aşağıdakilerle bölebilirsiniz",
or: "veya",
recurringInterval: "Sıklık",
Recurring: "Yineleme",
strategyManual: "Manuel olarak Aktif/Pasif",
warningTimezone: "Sunucunun kullandığı saat dilimi",
weekdayShortMon: "Pzt",
weekdayShortTue: "Sal",
weekdayShortWed: "Çar",
weekdayShortThu: "Per",
weekdayShortFri: "Cum",
weekdayShortSat: "Cmt",
weekdayShortSun: "Paz",
dayOfWeek: "Haftanın Günleri",
dayOfMonth: "Ayın Günleri",
lastDay: "Son Gün",
lastDay1: "Ayın Son Günü",
lastDay2: "Ayın 2. Son Günü",
lastDay3: "Ayın 3. Son Günü",
lastDay4: "Ayın 4. Son Günü",
"No Maintenance": "Bakım Yok",
pauseMaintenanceMsg: "Duraklatmak istediğinizden emin misiniz?",
"maintenanceStatus-under-maintenance": "Bakımda",
"maintenanceStatus-inactive": "Etkin Değil",
"maintenanceStatus-scheduled": "Planlanmış",
"maintenanceStatus-ended": "Bitti",
"maintenanceStatus-unknown": "Bilinmiyor",
"Display Timezone": "Saat dilimini göster",
"Server Timezone": "Sunucu Saat Dilimi",
statusPageMaintenanceEndDate: "Bitiş Zamanı",
IconUrl: "Icon URL",
"Enable DNS Cache": "DNS Önbelleğini Etkinleştir",
Enable: "Etkin",
Disable: "Devre Dışı",
dnsCacheDescription: "Bazı IPv6 ortamlarında çalışmıyor olabilir, herhangi bir sorunla karşılaşırsanız devre dışı bırakın.",
"Single Maintenance Window": "Tek Seferlik Bakım",
"Maintenance Time Window of a Day": "Bür Günlük Bakım",
"Effective Date Range": "Bakim Tarih Aralığı",
"Schedule Maintenance": "Bakım Planla",
"Date and Time": "Tarih ve Saat",
"DateTime Range": "Tarih ve Saat Aralığı",
Strategy: "Strateji",
"Free Mobile User Identifier": "Ücretsiz Mobil Kullanıcı ID",
"Free Mobile API Key": "Ücretsiz Mobil API Anahtarı",
"Enable TLS": "TLS'yi Etkinleştir",
"Proto Service Name": "Proto Service İsmi",
"Proto Method": "Proto Method",
"Proto Content": "Proto İçeriği",
Economy: "Ekonomik",
Lowcost: "Düşük maliyetli",
high: "Yüksek",
"General Monitor Type": "Genel Monitör Tipi",
"Passive Monitor Type": "Pasif Monitör Tipi",
"Specific Monitor Type": "Özel Monitör Tipi",
};

View File

@ -2,17 +2,35 @@ export default {
languageName: "简体中文",
checkEverySecond: "检测频率 {0} 秒",
retryCheckEverySecond: "重试间隔 {0} 秒",
resendEveryXTimes: "每 {0} 次失败则重复发送一次",
resendDisabled: "为 0 时禁用重复发送",
retriesDescription: "服务被标记为故障并发送通知之前的最大重试次数",
ignoreTLSError: "忽略 HTTPS 站点的 TLS/SSL 错误",
upsideDownModeDescription: "反转状态监控,如果服务可访问,则认为是故障。",
maxRedirectDescription: "允许的最大重定向次数。设置为 0 禁用重定向。",
enableGRPCTls: "允许通过 TLS 连接发送 gRPC 请求",
grpcMethodDescription: "方法名会转换为小驼峰格式,例如 sayHello、check 等等",
acceptedStatusCodesDescription: "选择被视为成功响应的状态码。",
Maintenance: "维护",
statusMaintenance: "维护",
"Schedule maintenance": "计划维护",
"Affected Monitors": "受影响的监控项",
"Pick Affected Monitors...": "选择受影响的监控项…",
"Start of maintenance": "维护开始",
"All Status Pages": "所有状态页面",
"Select status pages...": "选择状态页面…",
recurringIntervalMessage: "每天一次 | 每 {0} 天一次",
affectedMonitorsDescription: "选择受当前维护影响的监控项",
affectedStatusPages: "在所选状态页面上显示此维护消息",
atLeastOneMonitor: "至少选择一个受影响的监控项",
passwordNotMatchMsg: "两次输入的密码不一致。",
notificationDescription: "通知必须被分配给监控项才能正常工作。",
keywordDescription: "在纯 HTML 或 JSON 响应中搜索关键字,区分大小写。",
pauseDashboardHome: "暂停",
deleteMonitorMsg: "确定要删除此监控项吗?",
deleteMaintenanceMsg: "确定要删除此维护吗?",
deleteNotificationMsg: "确定要为所有监控项删除此通知吗?",
dnsPortDescription: "DNS 服务器端口,默认为 53您可以在任何时候更改此端口.",
resolverserverDescription: "默认服务器是 Cloudflare。您随时可以修改解析服务器。",
rrtypeDescription: "选择要监控的资源记录类型",
pauseMonitorMsg: "确定要暂停吗?",
@ -34,7 +52,6 @@ export default {
Theme: "主题",
General: "常规",
"Primary Base URL": "站点主 URL",
About: "关于",
Version: "版本",
"Check Update On GitHub": "检查 GitHub 上的更新",
List: "列表",
@ -72,6 +89,7 @@ export default {
"Heartbeat Interval": "心跳间隔",
Retries: "重试次数",
"Heartbeat Retry Interval": "心跳重试间隔",
"Resend Notification if Down X times consequently": "连续失败时重复发送通知的间隔次数",
Advanced: "高级",
"Upside Down Mode": "反转监控",
"Max. Redirects": "最大重定向次数",
@ -125,7 +143,6 @@ export default {
"Last Result": "上次结果",
"Create your admin account": "创建管理员账户",
"Repeat Password": "重复密码",
Backup: "备份",
"Import Backup": "导入备份",
"Export Backup": "导出备份",
Export: "导出",
@ -160,7 +177,7 @@ export default {
Token: "令牌",
"Show URI": "显示 URI",
Tags: "标签",
"Add New below or Select...": "在下面添加或选择...",
"Add New below or Select...": "在下面添加或选择",
"Tag with this name already exist.": "相同名称的标签已存在。",
"Tag with this value already exist.": "相同内容的标签已存在。",
color: "颜色",
@ -173,7 +190,7 @@ export default {
Indigo: "靛蓝",
Purple: "紫色",
Pink: "粉色",
"Search...": "搜索...",
"Search...": "搜索",
"Avg. Ping": "平均 Ping",
"Avg. Response": "平均响应",
"Entry Page": "入口页面",
@ -192,6 +209,7 @@ export default {
here: "这里",
Required: "必填",
telegram: "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Bot Token",
wayToGetTelegramToken: "您可以从 {0} 获取 Token。",
"Chat ID": "Chat ID",
@ -204,6 +222,8 @@ export default {
"Content Type": "Content Type",
webhookJsonDesc: "{0} 适合现代的 HTTP 服务器,例如 Express.js",
webhookFormDataDesc: "{multipart} 适合 PHP其中 JSON 需要使用 {decodeFunction} 解码",
webhookAdditionalHeadersTitle: "额外 Header",
webhookAdditionalHeadersDesc: "设置通过此 Webhook 发送的额外 Header。",
smtp: "电子邮件SMTP",
secureOptionNone: "无 / STARTTLS常用端口 25、587",
secureOptionTLS: "TLS常用端口 465",
@ -221,7 +241,8 @@ export default {
"Hello @everyone is...": "{'@'}everyone……",
teams: "Microsoft Teams",
"Webhook URL": "Webhook URL",
wayToGetTeamsURL: "您可以在 {0} 了解如何获取 Webhook URL。",
wayToGetTeamsURL: "您可以在{0}了解如何获取 Webhook URL。",
wayToGetZohoCliqURL: "您可以在{0}了解如何创建 Webhook URL。",
signal: "Signal",
Number: "号码",
Recipients: "收件人",
@ -243,6 +264,7 @@ export default {
"rocket.chat": "Rocket.Chat",
pushover: "Pushover",
pushy: "Pushy",
PushByTechulus: "Push by Techulus",
octopush: "Octopush",
promosms: "PromoSMS",
clicksendsms: "ClickSend SMS",
@ -250,6 +272,11 @@ export default {
apprise: "Apprise (支持 50+ 种通知服务)",
GoogleChat: "Google Chat仅 Google Workspace",
pushbullet: "Pushbullet",
AliyunSMS: "阿里云短信服务",
Kook: "Kook",
wayToGetKookBotToken: "在 {0} 创建应用并获取机器人 Token",
wayToGetKookGuildID: "在 Kook 设置中打开“开发者模式”,然后右键点击频道可获取其 ID",
"Guild ID": "频道 ID",
line: "Line Messenger",
mattermost: "Mattermost",
"User Key": "User Key",
@ -294,6 +321,7 @@ export default {
promosmsTypeSpeed: "SMS SPEED - 最高优先级。非常快速可靠,但更贵(大约两倍 SMS FULL 的价格)。",
promosmsPhoneNumber: "电话号码(波兰地区收信人可以不填区号)",
promosmsSMSSender: "短信发信人名称已注册的名称或以下默认值之一InfoSMS、SMS Info、MaxSMS、INFO、SMS",
Feishu: "飞书",
"Feishu WebHookUrl": "飞书 WebHook URL",
matrixHomeserverURL: "服务器 URL包含 http(s):// 和可选的端口号)",
"Internal Room Id": "内部房间 ID",
@ -312,14 +340,18 @@ export default {
"One record": "一条记录",
steamApiKeyDescription: "要监控 Steam 游戏服务器,您需要 Steam Web-API 密钥。您可以在这里注册您的 API 密钥: ",
"Current User": "当前用户",
topic: "Topic",
topicExplanation: "要监控的 MQTT Topic",
successMessage: "成功消息",
successMessageExplanation: "视为成功的 MQTT 消息",
recent: "最近",
Done: "完成",
Info: "信息",
Security: "安全性",
"Steam API Key": "Steam API 密钥",
"Shrink Database": "压缩数据库",
"Pick a RR-Type...": "选择资源记录类型...",
"Pick Accepted Status Codes...": "选择有效的状态码...",
"Pick a RR-Type...": "选择资源记录类型",
"Pick Accepted Status Codes...": "选择有效的状态码",
Default: "默认",
"HTTP Options": "HTTP 选项",
"Create Incident": "创建事件",
@ -329,6 +361,8 @@ export default {
info: "信息",
warning: "警告",
danger: "危险",
error: "错误",
critical: "关键",
primary: "主要",
light: "明亮",
dark: "黑暗",
@ -356,7 +390,20 @@ export default {
serwersmsAPIPassword: "API 密码",
serwersmsPhoneNumber: "电话号码",
serwersmsSenderName: "SMS 发信人名称(需要在客户中心注册)",
smseagle: "SMSEagle",
smseagleTo: "电话号码",
smseagleGroup: "通讯录群组名",
smseagleContact: "通讯录联系人",
smseagleRecipientType: "收信人类型",
smseagleRecipient: "收信人(多个需用半角逗号分隔)",
smseagleToken: "API Access token",
smseagleUrl: "您的 SMSEagle 设备 URL",
smseagleEncoding: "以 Unicode 发送",
smseaglePriority: "消息优先级0-9默认为 0",
stackfield: "Stackfield",
Customize: "自定义",
"Custom Footer": "自定义底部",
"Custom CSS": "自定义 CSS",
smtpDkimSettings: "DKIM 设置",
smtpDkimDesc: "请访问 Nodemailer DKIM {0} 了解配置方法。",
documentation: "文档",
@ -366,16 +413,13 @@ export default {
smtpDkimHashAlgo: "哈希算法(可选)",
smtpDkimheaderFieldNames: "包含在哈希计算对象内的 Header 列表(可选)",
smtpDkimskipFields: "不包含在哈希计算对象内的 Header 列表(可选)",
Feishu: "飞书",
AliyunSMS: "阿里云短信服务",
"Sms template must contain parameters: ": "短信模板必须包含以下变量:",
DingDing: "钉钉自定义机器人",
WebHookUrl: "钉钉自定义机器人 Webhook 地址",
SecretKey: "钉钉自定义机器人加签密钥",
"For safety, must use secret key": "出于安全考虑,必须使用加签密钥",
WeCom: "企业微信群机器人",
"WeCom Bot Key": "企业微信群机器人 Key",
PushByTechulus: "Push by Techulus",
wayToGetPagerDutyKey: "您可以在 Service -> Service Directory -> (选择一个 Service) -> Integrations -> Add integration 页面中搜索“Events API V2”以获取此 Integration Key更多信息请看{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 接入点",
@ -392,9 +436,6 @@ export default {
proxyDescription: "代理必须配置到至少一个监控项后才会工作。",
enableProxyDescription: "此代理必须启用才能对监控项的网络请求起作用。您可以通过修改激活状态,临时在所有监控项中禁用此代理。",
setAsDefaultProxyDescription: "此代理会对新创建的监控项默认激活,您仍可以在监控项配置中单独禁用此代理。",
"Proxy Protocol": "代理协议",
"Proxy Server": "代理服务器",
"Server Address": "服务器地址",
"Certificate Chain": "证书链",
Valid: "有效",
Invalid: "无效",
@ -403,9 +444,14 @@ export default {
PhoneNumbers: "PhoneNumbers",
TemplateCode: "TemplateCode",
SignName: "SignName",
"Sms template must contain parameters: ": "短信模板必须包含以下变量:",
"Bark Endpoint": "Bark 接入点",
"Bark Group": "Bark 群组",
"Bark Sound": "Bark 铃声",
DingDing: "钉钉自定义机器人",
WebHookUrl: "钉钉自定义机器人 Webhook 地址",
SecretKey: "钉钉自定义机器人加签密钥",
"For safety, must use secret key": "出于安全考虑,必须使用加签密钥",
"Device Token": "Apple Device Token",
Platform: "平台",
iOS: "iOS",
@ -414,21 +460,18 @@ export default {
High: "高",
Retry: "重试次数",
Topic: "Gorush Topic",
WeCom: "企业微信群机器人",
"WeCom Bot Key": "企业微信群机器人 Key",
"Setup Proxy": "设置代理",
"Proxy Protocol": "代理协议",
"Proxy Server": "代理服务器",
"Server Address": "服务器地址",
"Proxy server has authentication": "代理服务器启用了身份验证功能",
User: "用户名",
Installed: "已安装",
"Not installed": "未安装",
Running: "运行中",
"Not running": "未运行",
"Message:": "信息:",
wayToGetCloudflaredURL: "(可从 {0} 下载 cloudflared",
cloudflareWebsite: "Cloudflare 网站",
"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 访问网站,则停止可能会导致当前连接断开。您确定要停止吗?请输入密码以确认。",
"Other Software": "其他软件",
"For example: nginx, Apache and Traefik.": "例如nginx、Apache 和 Traefik。",
"Please read": "请阅读",
"Remove Token": "移除 Token",
Start: "启动",
Stop: "停止",
@ -446,6 +489,18 @@ export default {
"New Status Page": "新的状态页",
"Page Not Found": "未找到该页面",
"Reverse Proxy": "反向代理",
Backup: "备份",
About: "关于",
wayToGetCloudflaredURL: "(可从 {0} 下载 cloudflared",
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 头",
"Trust Proxy": "可信的代理类字段",
"Other Software": "其他软件",
"For example: nginx, Apache and Traefik.": "例如nginx、Apache 和 Traefik。",
"Please read": "请阅读",
"Subject:": "颁发给:",
"Valid To:": "有效期至:",
"Days Remaining:": "剩余有效天数:",
@ -455,26 +510,28 @@ export default {
"Domain Name Expiry Notification": "域名到期时通知",
Proxy: "代理",
"Date Created": "创建于",
HomeAssistant: "Home Assistant",
onebotHttpAddress: "OneBot HTTP 地址",
onebotMessageType: "OneBot 消息类型",
onebotGroupMessage: "群聊",
onebotPrivateMessage: "私聊",
onebotUserOrGroupId: "群组/用户ID",
onebotUserOrGroupId: "群组/用户 ID",
onebotSafetyTips: "出于安全原因,请务必设置 AccessToken",
topic: "Topic",
topicExplanation: "MQTT 传递给监控的 Topic",
successMessage: "成功时消息",
successMessageExplanation: "MQTT 成功时所传递的消息",
Customize: "自定义",
"Custom Footer": "自定义底部",
"Custom CSS": "自定义 CSS",
"PushDeer Key": "PushDeer Key",
"Footer Text": "底部自定义文本",
"Show Powered By": "显示 Powered By",
"Domain Names": "域名",
signedInDisp: "当前用户: {0}",
signedInDispDisabled: "已禁用身份验证",
RadiusSecret: "Radius 共享机密",
RadiusSecretDescription: "客户端和服务器之间共享的密钥",
RadiusCalledStationId: "NAS 网络访问服务器号码Called Station Id",
RadiusCalledStationIdDescription: "所访问的服务器的标识",
RadiusCallingStationId: "呼叫方号码Calling Station Id",
RadiusCallingStationIdDescription: "发出请求的设备的标识",
"Certificate Expiry Notification": "证书到期时通知",
"API Username": "API 凭证 Username",
"API Key": "API 凭证 Key",
"API Username": "API Username",
"API Key": "API Key",
"Recipient Number": "收件人手机号码",
"From Name/Number": "发件人名称/手机号码",
"Leave blank to use a shared sender number.": "留空以使用平台共享的发件人手机号码",
@ -522,38 +579,11 @@ export default {
"Retype the address.": "重新输入地址;",
"Go back to the previous page.": "返回到上一页面。",
"Coming Soon": "即将推出",
wayToGetClickSendSMSToken: "您可以从 {0} 获取 API 凭证 Username 和 凭证 Key。",
signedInDisp: "当前用户: {0}",
signedInDispDisabled: "已禁用身份验证",
dnsPortDescription: "DNS 服务器端口,默认为 53你可以在任何时候更改此端口.",
error: "错误",
critical: "关键",
wayToGetPagerDutyKey: "你可以在 Service -> Service Directory -> (选择一个 Service) -> Integrations -> Add integration 页面中搜索 \"Events API V2\" 以获取此 Integration Key更多信息请参见 {0}",
"Integration Key": "Integration Key",
"Integration URL": "Integration URL",
"Auto resolve or acknowledged": "自动标记为已解决或已读",
"do nothing": "不做任何操作",
"auto acknowledged": "自动标记为已读",
"auto resolve": "自动标记为已解决",
wayToGetClickSendSMSToken: "您可以在{0}获取 API Username 和 API Key。",
"Connection String": "连接字符串",
Query: "查询语句",
settingsCertificateExpiry: "TLS 证书过期通知",
certificationExpiryDescription: "HTTPS 监控项发现被监控目标的 TLS 证书剩余有效期少于以下天数时将发出通知:",
"ntfy Topic": "ntfy 主题",
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 守护进程",
@ -564,6 +594,9 @@ export default {
"Container Name / ID": "容器名称 / ID",
"Docker Host": "Docker 宿主",
"Docker Hosts": "Docker 宿主",
"ntfy Topic": "ntfy Topic",
Domain: "域名",
Workstation: "工作站",
disableCloudflaredNoAuthMsg: "您现在正处于 No Auth 模式,无需输入密码",
trustProxyDescription: "信任 'X-Forwarded-*' 头。如果您的 Uptime Kuma 是通过 Nginx 或 Apache 等反代服务对外提供访问的话,则您应当启用本功能以获取正确的客户端 IP。",
wayToGetLineNotifyToken: "您可以在 {0} 获取 Access token",
@ -580,7 +613,7 @@ export default {
"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!": "前端版本与后端版本不",
"Frontend Version do not match backend version!": "前端版本与后端版本不匹配",
"Base URL": "API 基础地址",
goAlertInfo: "GoAlert 是一个用于呼叫调度、自动汇报和通知(如 SMS 或语音呼叫)的开源应用程序。在正确的时间以正确的方式自动让正确的人参与!{0}",
goAlertIntegrationKeyInfo: "使用形如 aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee 的通用 API 集成密钥,通常是复制来的链接中的 token 参数值。",
@ -594,5 +627,57 @@ export default {
"Gateway Type": "网关类型",
SMSManager: "SMSManager",
"You can divide numbers with": "可用的分隔符:",
"or": "或",
or: "或",
recurringInterval: "时间间隔",
Recurring: "重复",
strategyManual: "手动启用/禁用",
warningTimezone: "使用服务器时区",
weekdayShortMon: "周一",
weekdayShortTue: "周二",
weekdayShortWed: "周三",
weekdayShortThu: "周四",
weekdayShortFri: "周五",
weekdayShortSat: "周六",
weekdayShortSun: "周日",
dayOfWeek: "每周计划",
dayOfMonth: "每月计划",
lastDay: "结束日",
lastDay1: "每月最后一天",
lastDay2: "每月倒数第二天",
lastDay3: "每月倒数第三天",
lastDay4: "每月倒数第四天",
"No Maintenance": "无维护计划",
pauseMaintenanceMsg: "确定要暂停吗?",
"maintenanceStatus-under-maintenance": "正在维护",
"maintenanceStatus-inactive": "未启用",
"maintenanceStatus-scheduled": "已计划",
"maintenanceStatus-ended": "已结束",
"maintenanceStatus-unknown": "未知",
"Display Timezone": "显示时区",
"Server Timezone": "服务器时区",
statusPageMaintenanceEndDate: "结束时间",
IconUrl: "图标 URL",
"Enable DNS Cache": "启用 DNS 缓存",
Enable: "启用",
Disable: "禁用",
dnsCacheDescription: "可能无法在某些 IPv6 环境工作,如果遇到问题请禁用。",
"Single Maintenance Window": "单一时间窗口",
"Maintenance Time Window of a Day": "每日维护时间窗口",
"Effective Date Range": "生效日期范围",
"Schedule Maintenance": "计划维护",
"Date and Time": "日期时间",
"DateTime Range": "日期时间范围",
Strategy: "策略",
"Free Mobile User Identifier": "Free Mobile User Identifier",
"Free Mobile API Key": "Free Mobile API Key",
"Enable TLS": "启用 TLS",
"Proto Service Name": "Proto 服务名称",
"Proto Method": "Proto 方法",
"Proto Content": "Proto 内容",
Economy: "经济",
Lowcost: "低价",
high: "高价",
"General Monitor Type": "常规监控类型",
"Passive Monitor Type": "被动监控类型",
"Specific Monitor Type": "针对监控类型",
};

View File

@ -8,6 +8,8 @@ export default {
ignoreTLSError: "忽略 HTTPS 網站的 TLS/SSL 錯誤",
upsideDownModeDescription: "反轉顯示狀態。若服務可以連線,將顯示離線。",
maxRedirectDescription: "最大重新導向跟隨次數。設為 0 將停用重新導向。",
enableGRPCTls: "允許以 TLS 連線傳送 gRPC 要求",
grpcMethodDescription: "方法名稱將轉換至駝峰式命名,如 sayHello、check 等。",
acceptedStatusCodesDescription: "選擇視為成功回應的狀態碼。",
Maintenance: "維護",
statusMaintenance: "維護",
@ -219,13 +221,15 @@ export default {
"Content Type": "內容類型",
webhookJsonDesc: "{0} 適合任何現代的 HTTP 伺服器,如 Express.js",
webhookFormDataDesc: "{multipart} 適合 PHP。 JSON 必須先經由 {decodeFunction} 剖析。",
webhookAdditionalHeadersTitle: "額外標頭",
webhookAdditionalHeadersDesc: "設定與 webhook 一同傳送的額外標頭。",
smtp: "Email (SMTP)",
secureOptionNone: "無 / STARTTLS (25, 587)",
secureOptionTLS: "TLS (465)",
"Ignore TLS Error": "忽略 TLS 錯誤",
"From Email": "寄件人",
emailCustomSubject: "自訂主旨",
"To Email": "收件",
"To Email": "收件",
smtpCC: "CC",
smtpBCC: "BCC",
discord: "Discord",
@ -239,10 +243,10 @@ export default {
wayToGetTeamsURL: "您可以前往此頁面以了解如何建立 Webhook 網址 {0}。",
signal: "Signal",
Number: "號碼",
Recipients: "收件",
Recipients: "收件",
needSignalAPI: "您需要有 REST API 的 Signal 客戶端。",
wayToCheckSignalURL: "您可以前往下列網址以了解如何設定:",
signalImportant: "注意: 不得混合收件的群組和號碼!",
signalImportant: "注意: 不得混合收件的群組和號碼!",
gotify: "Gotify",
"Application Token": "應用程式權杖",
"Server URL": "伺服器網址",
@ -304,11 +308,11 @@ export default {
aboutIconURL: "您可以在 \"圖示網址\" 中提供圖片網址以覆蓋預設個人檔案圖片。若已設定 Emoji 圖示,將忽略此設定。",
aboutMattermostChannelName: "您可以在 \"頻道名稱\" 欄位中填寫頻道名稱以覆蓋 Webhook 的預設頻道。必須在 Mattermost 的 Webhook 設定中啟用。例如:#其他頻道",
matrix: "Matrix",
promosmsTypeEco: "SMS ECO - 便宜,但是很慢且經常過載。僅限位於波蘭的收件。",
promosmsTypeFlash: "SMS FLASH - 訊息會自動在收件人的裝置上顯示。僅限位於波蘭的收件人。",
promosmsTypeEco: "SMS ECO - 便宜,但是很慢且經常過載。僅限位於波蘭的收件。",
promosmsTypeFlash: "SMS FLASH - 訊息會自動在收件者的裝置上顯示。僅限位於波蘭的收件者。",
promosmsTypeFull: "SMS FULL - 高級版,您可以使用您的寄件人名稱 (必須先註冊名稱。對於警報來說十分可靠。",
promosmsTypeSpeed: "SMS SPEED - 系統中的最高優先度。快速、可靠,但昂貴 (約 SMS FULL 的兩倍價格)。",
promosmsPhoneNumber: "電話號碼 (若收件位於波蘭則無需輸入區域代碼)",
promosmsPhoneNumber: "電話號碼 (若收件位於波蘭則無需輸入區域代碼)",
promosmsSMSSender: "簡訊寄件人名稱預先註冊的名稱或以下的預設名稱InfoSMS、SMS Info、MaxSMS、INFO、SMS",
"Feishu WebHookUrl": "飛書 WebHook 網址",
matrixHomeserverURL: "Homeserver 網址 (開頭為 http(s)://,結尾可能帶連接埠)",
@ -320,7 +324,7 @@ export default {
Headers: "標頭",
PushUrl: "Push 網址",
HeadersInvalidFormat: "要求標頭不是有效的 JSON",
BodyInvalidFormat: "求主體不是有效的 JSON",
BodyInvalidFormat: "求主體不是有效的 JSON",
"Monitor History": "監測器歷史紀錄",
clearDataOlderThan: "保留 {0} 天內的監測器歷史紀錄。",
PasswordsDoNotMatch: "密碼不相符。",
@ -378,6 +382,16 @@ export default {
serwersmsAPIPassword: "API 密碼",
serwersmsPhoneNumber: "電話號碼",
serwersmsSenderName: "SMS 寄件人名稱 (由客戶入口網站註冊)",
smseagle: "SMSEagle",
smseagleTo: "電話號碼",
smseagleGroup: "電話簿群組名稱",
smseagleContact: "電話簿聯絡人名稱",
smseagleRecipientType: "收件者類型",
smseagleRecipient: "收件者 (用逗號分隔)",
smseagleToken: "API 存取權杖",
smseagleUrl: "您的 SMSEagle 裝置網址",
smseagleEncoding: "以 Unicode 傳送",
smseaglePriority: "訊息優先度 (0-9預設 = 0)",
stackfield: "Stackfield",
Customize: "自訂",
"Custom Footer": "自訂頁尾",
@ -631,4 +645,28 @@ export default {
"Display Timezone": "顯示時區",
"Server Timezone": "伺服器時區",
statusPageMaintenanceEndDate: "結束",
IconUrl: "圖示網址",
"Enable DNS Cache": "啟用 DNS 快取",
Enable: "啟用",
Disable: "停用",
dnsCacheDescription: "在某些 IPv6 環境可能會無法運作,如果您遇到任何問題,請停用。",
"Single Maintenance Window": "單一維護時段",
"Maintenance Time Window of a Day": "每日的維護時段",
"Effective Date Range": "有效的日期範圍",
"Schedule Maintenance": "排程維護",
"Date and Time": "時間和日期",
"DateTime Range": "DateTime 範圍",
Strategy: "策略",
"Free Mobile User Identifier": "Free Mobile User Identifier",
"Free Mobile API Key": "Free Mobile API 金鑰",
"Enable TLS": "啟用 TLS",
"Proto Service Name": "Proto 服務名稱",
"Proto Method": "Proto 方式",
"Proto Content": "Proto 內容",
Economy: "節約",
Lowcost: "低費率",
high: "高",
"General Monitor Type": "一般監測器類型",
"Passive Monitor Type": "被動監測器類型",
"Specific Monitor Type": "指定監測器類型",
};

View File

@ -473,6 +473,12 @@ table {
.dropdown-clear-data {
float: right;
ul {
width: 100%;
min-width: unset;
padding-left: 0;
}
}
.dark {