Merge branch 'master' into master

This commit is contained in:
Moritz R 2022-05-27 13:59:58 +02:00 committed by GitHub
commit e9e78c26e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 1164 additions and 27 deletions

View file

@ -1,6 +1,6 @@
{ {
"name": "uptime-kuma", "name": "uptime-kuma",
"version": "1.16.0-beta.0", "version": "1.16.0",
"license": "MIT", "license": "MIT",
"repository": { "repository": {
"type": "git", "type": "git",
@ -39,7 +39,7 @@
"build-docker-nightly-alpine": "docker buildx build -f docker/dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly-alpine --target nightly . --push", "build-docker-nightly-alpine": "docker buildx build -f docker/dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly-alpine --target nightly . --push",
"build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", "build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain",
"upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain", "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.15.1 && npm ci --production && npm run download-dist", "setup": "git checkout 1.16.0 && npm ci --production && npm run download-dist",
"download-dist": "node extra/download-dist.js", "download-dist": "node extra/download-dist.js",
"mark-as-nightly": "node extra/mark-as-nightly.js", "mark-as-nightly": "node extra/mark-as-nightly.js",
"reset-password": "node extra/reset-password.js", "reset-password": "node extra/reset-password.js",

View file

@ -334,7 +334,7 @@ class Monitor extends BeanModel {
let startTime = dayjs().valueOf(); let startTime = dayjs().valueOf();
let dnsMessage = ""; let dnsMessage = "";
let dnsRes = await dnsResolve(this.hostname, this.dns_resolve_server, this.dns_resolve_type); let dnsRes = await dnsResolve(this.hostname, this.dns_resolve_server, this.port, this.dns_resolve_type);
bean.ping = dayjs().valueOf() - startTime; bean.ping = dayjs().valueOf() - startTime;
if (this.dns_resolve_type === "A" || this.dns_resolve_type === "AAAA" || this.dns_resolve_type === "TXT") { if (this.dns_resolve_type === "A" || this.dns_resolve_type === "AAAA" || this.dns_resolve_type === "TXT") {

View file

@ -55,8 +55,8 @@ class Discord extends NotificationProvider {
value: monitorJSON["name"], value: monitorJSON["name"],
}, },
{ {
name: "Service URL / Address", name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL",
value: address, value: monitorJSON["type"] === "push" ? "Heartbeat" : address,
}, },
{ {
name: "Time (UTC)", name: "Time (UTC)",
@ -90,8 +90,8 @@ class Discord extends NotificationProvider {
value: monitorJSON["name"], value: monitorJSON["name"],
}, },
{ {
name: "Service URL", name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL",
value: address.startsWith("http") ? "[Visit Service](" + address + ")" : address, value: monitorJSON["type"] === "push" ? "Heartbeat" : address.startsWith("http") ? "[Visit Service](" + address + ")" : address,
}, },
{ {
name: "Time (UTC)", name: "Time (UTC)",
@ -99,7 +99,7 @@ class Discord extends NotificationProvider {
}, },
{ {
name: "Ping", name: "Ping",
value: heartbeatJSON["ping"] + "ms", value: heartbeatJSON["ping"] == null ? "N/A" : heartbeatJSON["ping"] + " ms",
}, },
], ],
}], }],

View file

@ -0,0 +1,113 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { UP, DOWN, getMonitorRelativeURL } = require("../../src/util");
const { setting } = require("../util-server");
let successMessage = "Sent Successfully.";
class PagerDuty extends NotificationProvider {
name = "PagerDuty";
/**
* @inheritdoc
*/
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
try {
if (heartbeatJSON == null) {
const title = "Uptime Kuma Alert";
const monitor = {
type: "ping",
url: "Uptime Kuma Test Button",
};
return this.postNotification(notification, title, msg, monitor);
}
if (heartbeatJSON.status === UP) {
const title = "Uptime Kuma Monitor ✅ Up";
const eventAction = notification.pagerdutyAutoResolve || null;
return this.postNotification(notification, title, heartbeatJSON.msg, monitorJSON, eventAction);
}
if (heartbeatJSON.status === DOWN) {
const title = "Uptime Kuma Monitor 🔴 Down";
return this.postNotification(notification, title, heartbeatJSON.msg, monitorJSON, "trigger");
}
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
/**
* Check if result is successful, result code should be in range 2xx
* @param {Object} result Axios response object
* @throws {Error} The status code is not in range 2xx
*/
checkResult(result) {
if (result.status == null) {
throw new Error("PagerDuty notification failed with invalid response!");
}
if (result.status < 200 || result.status >= 300) {
throw new Error("PagerDuty notification failed with status code " + result.status);
}
}
/**
* Send the message
* @param {BeanModel} notification Message title
* @param {string} title Message title
* @param {string} body Message
* @param {Object} monitorInfo Monitor details (For Up/Down only)
* @param {?string} eventAction Action event for PagerDuty (trigger, acknowledge, resolve)
* @returns {string}
*/
async postNotification(notification, title, body, monitorInfo, eventAction = "trigger") {
if (eventAction == null) {
return "No action required";
}
let monitorUrl;
if (monitorInfo.type === "port") {
monitorUrl = monitorInfo.hostname;
if (monitorInfo.port) {
monitorUrl += ":" + monitorInfo.port;
}
} else if (monitorInfo.hostname != null) {
monitorUrl = monitorInfo.hostname;
} else {
monitorUrl = monitorInfo.url;
}
const options = {
method: "POST",
url: notification.pagerdutyIntegrationUrl,
headers: { "Content-Type": "application/json" },
data: {
payload: {
summary: `[${title}] [${monitorInfo.name}] ${body}`,
severity: notification.pagerdutyPriority || "warning",
source: monitorUrl,
},
routing_key: notification.pagerdutyIntegrationKey,
event_action: eventAction,
dedup_key: "Uptime Kuma/" + monitorInfo.id,
}
};
const baseURL = await setting("primaryBaseURL");
if (baseURL && monitorInfo) {
options.client = "Uptime Kuma";
options.client_url = baseURL + getMonitorRelativeURL(monitorInfo.id);
}
let result = await axios.request(options);
this.checkResult(result);
if (result.statusText != null) {
return "PagerDuty notification succeed: " + result.statusText;
}
return successMessage;
}
}
module.exports = PagerDuty;

View file

@ -29,6 +29,7 @@ const SerwerSMS = require("./notification-providers/serwersms");
const Stackfield = require("./notification-providers/stackfield"); const Stackfield = require("./notification-providers/stackfield");
const WeCom = require("./notification-providers/wecom"); const WeCom = require("./notification-providers/wecom");
const GoogleChat = require("./notification-providers/google-chat"); const GoogleChat = require("./notification-providers/google-chat");
const PagerDuty = require("./notification-providers/pagerduty");
const Gorush = require("./notification-providers/gorush"); const Gorush = require("./notification-providers/gorush");
const Alerta = require("./notification-providers/alerta"); const Alerta = require("./notification-providers/alerta");
const OneBot = require("./notification-providers/onebot"); const OneBot = require("./notification-providers/onebot");
@ -74,6 +75,7 @@ class Notification {
new Stackfield(), new Stackfield(),
new WeCom(), new WeCom(),
new GoogleChat(), new GoogleChat(),
new PagerDuty(),
new Gorush(), new Gorush(),
new Alerta(), new Alerta(),
new OneBot(), new OneBot(),

View file

@ -176,12 +176,16 @@ exports.mqttAsync = function (hostname, topic, okMessage, options = {}) {
* Resolves a given record using the specified DNS server * Resolves a given record using the specified DNS server
* @param {string} hostname The hostname of the record to lookup * @param {string} hostname The hostname of the record to lookup
* @param {string} resolverServer The DNS server to use * @param {string} resolverServer The DNS server to use
* @param {string} resolverPort Port the DNS server is listening on
* @param {string} rrtype The type of record to request * @param {string} rrtype The type of record to request
* @returns {Promise<(string[]|Object[]|Object)>} * @returns {Promise<(string[]|Object[]|Object)>}
*/ */
exports.dnsResolve = function (hostname, resolverServer, rrtype) { exports.dnsResolve = function (hostname, resolverServer, resolverPort, rrtype) {
const resolver = new Resolver(); const resolver = new Resolver();
resolver.setServers([ resolverServer ]); // Remove brackets from IPv6 addresses so we can re-add them to
// prevent issues with ::1:5300 (::1 port 5300)
resolverServer = resolverServer.replace("[", "").replace("]", "");
resolver.setServers([`[${resolverServer}]:${resolverPort}`]);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (rrtype === "PTR") { if (rrtype === "PTR") {
resolver.reverse(hostname, (err, records) => { resolver.reverse(hostname, (err, records) => {

View file

@ -0,0 +1,45 @@
<template>
<div class="mb-3">
<label for="pagerduty-integration-key" class="form-label">{{ $t("Integration Key") }}</label>
<HiddenInput id="pagerduty-integration-key" v-model="$parent.notification.pagerdutyIntegrationKey" :required="true" autocomplete="false"></HiddenInput>
<i18n-t tag="div" keypath="wayToGetPagerDutyKey" class="form-text">
<a href="https://support.pagerduty.com/docs/services-and-integrations" target="_blank">{{ $t("here") }}</a>
</i18n-t>
</div>
<div class="mb-3">
<label for="pagerduty-integration-url" class="form-label">{{ $t("Integration URL") }}</label>
<input id="pagerduty-integration-url" v-model="$parent.notification.pagerdutyIntegrationUrl" type="text" class="form-control" autocomplete="false">
</div>
<div class="mb-3">
<label for="pagerduty-priority" class="form-label">{{ $t("Priority") }}</label>
<select id="pagerduty-priority" v-model="$parent.notification.pagerdutyPriority" class="form-select">
<option value="info">{{ $t("info") }}</option>
<option value="warning" selected="selected">{{ $t("warning") }}</option>
<option value="error">{{ $t("error") }}</option>
<option value="critical">{{ $t("critical") }}</option>
</select>
</div>
<div class="mb-3">
<label for="pagerduty-resolve" class="form-label">{{ $t("Auto resolve or acknowledged") }}</label>
<select id="pagerduty-resolve" v-model="$parent.notification.pagerdutyAutoResolve" class="form-select">
<option value="0" selected="selected">{{ $t("do nothing") }}</option>
<option value="acknowledge">{{ $t("auto acknowledged") }}</option>
<option value="resolve">{{ $t("auto resolve") }}</option>
</select>
</div>
</template>
<script>
import HiddenInput from "../HiddenInput.vue";
export default {
components: {
HiddenInput,
},
mounted() {
if (typeof this.$parent.notification.pagerdutyIntegrationUrl === "undefined") {
this.$parent.notification.pagerdutyIntegrationUrl = "https://events.pagerduty.com/v2/enqueue";
}
}
};
</script>

View file

@ -27,6 +27,7 @@ import SerwerSMS from "./SerwerSMS.vue";
import Stackfield from "./Stackfield.vue"; import Stackfield from "./Stackfield.vue";
import WeCom from "./WeCom.vue"; import WeCom from "./WeCom.vue";
import GoogleChat from "./GoogleChat.vue"; import GoogleChat from "./GoogleChat.vue";
import PagerDuty from "./PagerDuty.vue";
import Gorush from "./Gorush.vue"; import Gorush from "./Gorush.vue";
import Alerta from "./Alerta.vue"; import Alerta from "./Alerta.vue";
import OneBot from "./OneBot.vue"; import OneBot from "./OneBot.vue";
@ -67,6 +68,7 @@ const NotificationFormList = {
"stackfield": Stackfield, "stackfield": Stackfield,
"WeCom": WeCom, "WeCom": WeCom,
"GoogleChat": GoogleChat, "GoogleChat": GoogleChat,
"PagerDuty": PagerDuty,
"gorush": Gorush, "gorush": Gorush,
"alerta": Alerta, "alerta": Alerta,
"OneBot": OneBot, "OneBot": OneBot,

View file

@ -206,7 +206,7 @@
<template v-else-if="$i18n.locale === 'bg-BG' "> <template v-else-if="$i18n.locale === 'bg-BG' ">
<p>Сигурни ли сте, че желаете да <strong>изключите удостоверяването</strong>?</p> <p>Сигурни ли сте, че желаете да <strong>изключите удостоверяването</strong>?</p>
<p>Използва се в случаите, когато <strong>има настроен алтернативен метод за удостоверяване</strong> преди Uptime Kuma, например Cloudflare Access.</p> <p>Използва се в случаите, когато <strong>има настроен алтернативен метод за удостоверяване</strong> преди Uptime Kuma, например Cloudflare Access, Authelia или друг механизъм за удостоверяване.</p>
<p>Моля, използвайте с повишено внимание.</p> <p>Моля, използвайте с повишено внимание.</p>
</template> </template>
@ -234,6 +234,12 @@
<p>Vui lòng <strong>cẩn thận</strong>.</p> <p>Vui lòng <strong>cẩn thận</strong>.</p>
</template> </template>
<template v-else-if="$i18n.locale === 'th-TH' ">
<p>ณตองการทจะ <strong>ดใชงานระบบรบรองความถกตองใชหรอไม</strong>?</p>
<p>ระบบนกออกแบบมาเพอการใชงานกบระบบรบรองความถกตองของบคคลทสามเช Cloudflare Access, Authelia หรอวการอ </p>
<p>โปรดใชความระมดระวงในการเลอกใชงานระบบน !</p>
</template>
<!-- English (en) --> <!-- English (en) -->
<template v-else> <template v-else>
<p>Are you sure want to <strong>disable authentication</strong>?</p> <p>Are you sure want to <strong>disable authentication</strong>?</p>

View file

@ -31,6 +31,7 @@ const languageList = {
"vi-VN": "Tiếng Việt", "vi-VN": "Tiếng Việt",
"zh-TW": "繁體中文 (台灣)", "zh-TW": "繁體中文 (台灣)",
"uk-UA": "Український", "uk-UA": "Український",
"th-TH": "ไทย",
}; };
let messages = { let messages = {

View file

@ -464,4 +464,55 @@ export default {
"Domain Names": "Домейни", "Domain Names": "Домейни",
signedInDisp: "Вписан като {0}", signedInDisp: "Вписан като {0}",
signedInDispDisabled: "Удостоверяването е изключено.", signedInDispDisabled: "Удостоверяването е изключено.",
"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": "Octopush API версия",
"Legacy Octopush-DM": "Octopush-DM старa версия",
endpoint: "крайна точка",
octopushAPIKey: "\"API ключ\" от HTTP API удостоверяване в контролния панел",
octopushLogin: "\"Вписване\" от HTTP API удостоверяване в контролния панел",
promosmsLogin: "API Потребителско име",
promosmsPassword: "API Парола",
"pushoversounds pushover": "Pushover (по подразбиране)",
"pushoversounds bike": "Велосипед",
"pushoversounds bugle": "Тромпет",
"pushoversounds cashregister": "Касов апарат",
"pushoversounds classical": "Класическа музика",
"pushoversounds cosmic": "Космически",
"pushoversounds falling": "Падащ",
"pushoversounds gamelan": "Игра в мрежа",
"pushoversounds incoming": "Входящ",
"pushoversounds 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": "Steam Game сървър",
"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} .",
}; };

View file

@ -13,6 +13,7 @@ export default {
pauseDashboardHome: "Pause", pauseDashboardHome: "Pause",
deleteMonitorMsg: "Are you sure want to delete this monitor?", deleteMonitorMsg: "Are you sure want to delete this monitor?",
deleteNotificationMsg: "Are you sure want to delete this notification for all monitors?", 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.", resolverserverDescription: "Cloudflare is the default server. You can change the resolver server anytime.",
rrtypeDescription: "Select the RR type you want to monitor", rrtypeDescription: "Select the RR type you want to monitor",
pauseMonitorMsg: "Are you sure want to pause?", pauseMonitorMsg: "Are you sure want to pause?",
@ -330,6 +331,8 @@ export default {
info: "info", info: "info",
warning: "warning", warning: "warning",
danger: "danger", danger: "danger",
error: "error",
critical: "critical",
primary: "primary", primary: "primary",
light: "light", light: "light",
dark: "dark", dark: "dark",
@ -376,6 +379,13 @@ export default {
"Docker Type": "Connection Type", "Docker Type": "Connection Type",
docker_socket: "Socket", docker_socket: "Socket",
docker_tcp: "TCP / HTTP", docker_tcp: "TCP / HTTP",
wayToGetPagerDutyKey: "You can get this by going to Service -> Service Directory -> (Select a service) -> Integrations -> Add integration. Here you can search for \"Events API V2\". More info {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", gorush: "Gorush",
alerta: "Alerta", alerta: "Alerta",
alertaApiEndpoint: "API Endpoint", alertaApiEndpoint: "API Endpoint",

518
src/languages/th-TH.js Normal file
View file

@ -0,0 +1,518 @@
export default {
languageName: "ไทย",
checkEverySecond: "ตรวจสอบทุก {0} วินาที",
retryCheckEverySecond: "ลองใหม่ทุก {0} วินาที",
retriesDescription: "จำนวนครั้งสูงสุดที่จะลองก่อนบริการถูกระบุว่าไม่สามารถใช้งานได้และส่งการแจ้งเตือน",
ignoreTLSError: "ไม่สนใจข้อผิดพลาด TLS/SSL สำหรับเว็บไซต์ HTTPS",
upsideDownModeDescription: "กลับด้านสถานะ เช่น ถ้าบริการสามารถใช้งานได้จะถูกเปลี่ยนเป็นใช้งานไม่ได้",
maxRedirectDescription: "จำนวนครั้งสูงสุดที่จะเปลี่ยนเส้นทาง, ตั่งเป็น 0 เพื่อปิดการเปลี่ยนเส้นทาง",
acceptedStatusCodesDescription: "เลือกรหัสสถานะที่ถือว่าการตอบกลับสำเร็จ",
passwordNotMatchMsg: "รหัสผ่านไม่ตรงกัน",
notificationDescription: "การแจ้งเตือนต้องกำหนดให้มอนิเตอร์เพื่อให้สามารถใช้งานได้",
keywordDescription: "ค้นหาคำสำคัญใน HTML หรือ JSON ของการตอบกลับ, คำสำคัญต้องคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่",
pauseDashboardHome: "หยุดชั่วคราว",
deleteMonitorMsg: "คุณแน่ใจหรือไม่ที่จะลบมอนิเตอร์?",
deleteNotificationMsg: "คุณแน่ใจหรือไม่ที่จะลบการแจ้งเตือนสำหรับมอนิเตอร์ทั้งหมด?",
resolverserverDescription: "Cloudflare เป็นเซิร์ฟเวอร์ค้นหาเริ่มต้น, คุณสามารถเปลี่ยนเซิร์ฟเวอร์ได้ตลอดเวลา",
rrtypeDescription: "เลือกประเภท DNS Record ที่คุณต้องการจะมอนิเตอร์",
pauseMonitorMsg: "คุณแน่ใจหรือไม่ที่จะหยุดมอนิเตอร์ชั่วคราว?",
enableDefaultNotificationDescription: "การแจ้งเตือนนี้จะถูกเปิดโดนค่าเริ่มต้นสำหรับมอนิเตอร์ใหม่, คุณสามารถปิดการแจ้งเตือนสำหรับแต่ละมอนิเตอร์ได้",
clearEventsMsg: "คุณแน่ใจหรือไม่ที่จะลบเหตุการณ์ทั้งหมดสำหรับมอนิเตอร์นี้?",
clearHeartbeatsMsg: "คุณแน่ใจหรือไม่ที่จะลบประวัติการตรวจสอบทั้งหมดสำหรับมอนิเตอร์นี้?",
confirmClearStatisticsMsg: "คุณแน่ใจหรือไม่ที่จะลบสถิติทั้งหมด?",
importHandleDescription: "เลือก \"ข้ามรายการที่มีอยู่แล้ว\" ถ้าคุณต้องการข้ามทุกมอนิเตอร์หรือการแจ้งเตือนที่มีชื่อซ้ำกัน, \"เขียนทับ\" จะลบทุกมอนิเตอร์หรือการแจ้งเตือนที่มีชื่อซ้ำกัน",
confirmImportMsg: "คุณแน่ใจหรือไม่ที่จะนำเข้าข้อมูลสำรอง, กรุณาตรวจสอบว่าคุณเลือกข้อมูลที่ถูกต้อง",
twoFAVerifyLabel: "โปรดกรอกกุญแจ 2FA ของคุณเพื่อยืนยัน:",
tokenValidSettingsMsg: "กุญแจถูกต้อง, ตอนนี้คุณสามารถบันทึกการตั้งค่า 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: "ปัจจุบัน",
Uptime: "เวลาที่ใช้งาน",
"Cert Exp.": "วันหมดอายุใบรับรอง",
days: "วัน",
day: "วัน",
"-day": "-วัน",
hour: "ชั่วโมง",
"-hour": "-ชั่วโมง",
Response: "การตอบสนอง",
Ping: "การตอบสนอง",
"Monitor Type": "ประเภทมอนิเตอร์",
Keyword: "คำสำคัญ",
"Friendly Name": "ชื่อที่เป็นมิตร",
URL: "URL",
Hostname: "ชื่อโฮสต์",
Port: "พอร์ต",
"Heartbeat Interval": "ระยะห่างระหว่างการทดสอบ",
Retries: "จำนวนครั้งที่จะลองใหม่",
"Heartbeat Retry Interval": "ระยะห่างระหว่างการทดสอบใหม่หลังจากไม่สำเร็จ",
Advanced: "ขั้นสูง",
"Upside Down Mode": "โหมดกลับด้าน",
"Max. Redirects": "จำนวนการเปลี่ยนเส้นทางสูงสุด",
"Accepted Status Codes": "รหัสสถานะที่ยอมรับ",
"Push URL": "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": "เปิดใช้งานการตรวจสอบสิทธิ์",
Logout: "ออกจากระบบ",
Leave: "ออก",
"I understand, please disable": "ฉันเข้าใจแล้ว, กรุณาปิดการใช้งาน",
Confirm: "ยืนยัน",
Yes: "ใช่",
No: "ไม่",
Username: "ชื่อผู้ใช้",
Password: "รหัสผ่าน",
"Remember me": "คงอยู่ในระบบ",
Login: "เข้าสู่ระบบ",
"No Monitors, please": "ไม่มีมอนิเตอร์, กรุณา",
"add one": "สร้าง",
"Notification Type": "ประเภทการแจ้งเตือน",
Email: "อีเมล",
Test: "ทดสอบ",
"Certificate Info": "ข้อมูลใบรับรอง",
"Resolver Server": "เซิร์ฟเวอร์ทีค้นหา",
"Resource Record Type": "ประเภท DNS Record",
"Last Result": "ผลล่าสุด",
"Create your admin account": "สร้างบัญชีผู้ดูแลระบบ",
"Repeat Password": "ยืนยันรหัสผ่าน",
"Import Backup": "นำเข้าข้อมูลสำรอง",
"Export Backup": "ส่งออกข้อมูลสำรอง",
Export: "ส่งออก",
Import: "นำเข้า",
respTime: "ระยะเวลาการตอบสนอง (ms)",
notAvailableShort: "ไม่สามารถใช้งานได้",
"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": "ติดตั้ง 2FA",
"Enable 2FA": "เปิดใช้งาน 2FA",
"Disable 2FA": "ปิดใช้งาน 2FA",
"2FA Settings": "ตั้งค่า 2FA",
"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": "ค่า Ping เฉลี่ย",
"Avg. Response": "ค่า 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: "Telegram",
"Bot Token": "กุญแจของบอท",
wayToGetTelegramToken: "คุณสามารถรับกุญแจได้จาก {0}.",
"Chat ID": "ไอดีแชท",
supportTelegramChatID: "รองรับ แชทส่วนตัว, แชทกลุ่ม, ไอดีแชท",
wayToGetTelegramChatID: "คุณสามารถรับ ID แชทของคุณได้โดยส่งข้อความไปยังบอทและไปที่ URL นี้เพื่อดู chat_id :",
"YOUR BOT TOKEN HERE": "กุญแจของบอทของคุณที่นี่",
chatIDNotFound: "ไม่พบไอดีแชท, กรุณาส่งข้อความไปที่บอท",
webhook: "Webhook",
"Post URL": "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": "Ignore TLS Error",
"From Email": "From Email",
emailCustomSubject: "Custom Subject",
"To Email": "To Email",
smtpCC: "CC",
smtpBCC: "BCC",
discord: "Discord",
"Discord Webhook URL": "Discord Webhook URL",
wayToGetDiscordURL: "คุณสามารถรับได้โดยการไปที่ Server Settings -> Integrations -> Create Webhook",
"Bot Display Name": "ชื่อบอท",
"Prefix Custom Message": "คำนำหน้าข้อความที่กำหนดเอง",
"Hello @everyone is...": "สวัสดี {'@'}everyone นี่...",
teams: "Microsoft Teams",
"Webhook URL": "Webhook URL",
wayToGetTeamsURL: "คุณสามารถเรียนรู้วิธีการสร้าง Webhook URL {0}",
signal: "Signal",
Number: "หมายเลข",
Recipients: "ผู้รับ",
needSignalAPI: "คุณต้องมี Signal Client ที่มี Rest APIl",
wayToCheckSignalURL: "คุณสามารถตรวจสอบ URL นี้เพื่อดูวิธีตั้งค่า :",
signalImportant: "สำคัญ: คุณไม่สามารถผสมกลุ่มและตัวเลขในผู้รับได้!",
gotify: "Gotify",
"Application Token": "กุญแจของแอพพลิเคชั่น",
"Server URL": "Server URL",
Priority: "ลำดับความสำคัญ",
slack: "Slack",
"Icon Emoji": "Icon Emoji",
"Channel Name": "ชื่อห้อง",
"Uptime Kuma URL": "Uptime Kuma URL",
aboutWebhooks: "ข้อมูลเพิ่มเติมสำหรับ Webhooks : {0}",
aboutChannelName: "ใส่ชื่อห้องบน {0} ในช่องชื่อห้องถ้าต้องการที่จะข้าม Webhook, เช่น: #ช่องอื่นๆ",
aboutKumaURL: "ถ้าคุณไม่ใส่ข้อมูลในช่อง Uptime Kuma URL ค่าเริ่มต้นจะเป็นจะเป็น Uptime Kuma 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 (รองรับการแจ้งเตือนมากกว่า 50 บริการ)",
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: "พรีเมี่ยม (เร็ว - แนะนำสำหรับการแจ้งเตือน)",
octopushTypeLowCost: "ต้นทุนต่ำ (ช้า - บางครั้งจะถูกบล็อกโดยผู้ให้บริการ)",
checkPrice: "ตรวจสอบราคาของ {0} :",
apiCredentials: "ข้อมูลการตรวจสอบสิทธิ์ API",
octopushLegacyHint: "คุณใช้เวอร์ชันดั้งเดิมของ Octopush (2011 - 2020) หรือเวอร์ชันใหม่หรือไม่?",
"Check octopush prices": "ตรวจสอบราคาของ Octopush {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": "Line Developers Console",
lineDevConsoleTo: "Line Developers Console - {0}",
"Basic Settings": "การตั้งค่าพื้นฐาน",
"User ID": "ไอดีผู้ใช้",
"Messaging API": "Messaging API",
wayToGetLineChannelToken: "ขั้นแรกให้เข้า {0} สร้างผู้ให้บริการและช่องทาง (Messaging API) จากนั้นคุณจะได้รับกุญแจการเข้าถึงช่องและไอดีผู้ใช้จากรายการเมนูที่กล่าวถึงข้างต้น",
"Icon URL": "Icon URL",
aboutIconURL: "คุณสามารถระบุลิงก์ไปยังรูปภาพใน \"URL ไอคอน\" เพื่อแทนที่รูปภาพโปรไฟล์เริ่มต้น จะไม่ถูกใช้หากมีการตั้งค่า Icon Emoji",
aboutMattermostChannelName: "คุณลบล้างช่องเริ่มต้นที่ Webhook โพสต์ได้ด้วยการป้อนชื่อช่องลงในช่อง \"ชื่อช่อง\" ต้องเปิดใช้งานในการตั้งค่า Mattermost Webhook เช่น #ช่องอื่นๆ",
matrix: "Matrix",
promosmsTypeEco: "SMS ECO - ราคาถูก แต่ช้าและมักจะโอเวอร์โหลด จำกัดเฉพาะผู้รับโปแลนด์",
promosmsTypeFlash: "SMS FLASH - ข้อความจะแสดงบนอุปกรณ์ของผู้รับโดยอัตโนมัติ จำกัดเฉพาะผู้รับโปแลนด์",
promosmsTypeFull: "SMS FULL - SMS ระดับพรีเมียม คุณสามารถใช้ชื่อผู้ส่งของคุณได้ (คุณต้องลงทะเบียนชื่อก่อน) เชื่อถือได้สำหรับการแจ้งเตือน",
promosmsTypeSpeed: "SMS SPEED - ลำดับความสำคัญสูงสุดในระบบ รวดเร็วและเชื่อถือได้ แต่มีค่าใช้จ่ายสูง (ประมาณสองเท่าของราคาเต็ม SMS)",
promosmsPhoneNumber: "หมายเลขโทรศัพท์ (สำหรับผู้รับโปแลนด์ คุณสามารถข้ามรหัสพื้นที่ได้)",
promosmsSMSSender: "ชื่อผู้ส่ง SMS : ชื่อที่ลงทะเบียนล่วงหน้าหรือหนึ่งในค่าเริ่มต้น: InfoSMS, ข้อมูล SMS, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
matrixHomeserverURL: "URL ของโฮมเซิร์ฟเวอร์ (พร้อม http(s):// และพอร์ตเสริม)",
"Internal Room Id": "รหัสห้องภายใน",
matrixDesc1: "คุณค้นหารหัสห้องภายในได้โดยดูในส่วนขั้นสูงของการตั้งค่าห้องในไคลเอ็นต์ Matrix มันควรจะมีลักษณะเช่น !PMdRCpsIfLwsfjIye6:kiznick.server.",
matrixDesc2: "ขอแนะนำเป็นอย่างยิ่งให้คุณสร้างผู้ใช้ใหม่และอย่าใช้โทเค็นการเข้าถึงของผู้ใช้ Matrix ของคุณเอง เนื่องจากจะทำให้สามารถเข้าถึงบัญชีของคุณและห้องทั้งหมดที่คุณเข้าร่วมได้อย่างเต็มที่ ให้สร้างผู้ใช้ใหม่และเชิญเฉพาะห้องที่คุณต้องการรับการแจ้งเตือนแทน คุณสามารถรับโทเค็นเพื่อการเข้าถึงได้โดยเรียกใช้ {0}",
Method: "วิธี",
Body: "เนื้อหา",
Headers: "ส่วนหัว",
PushUrl: "Push URL",
HeadersInvalidFormat: "เนื้อหาคำขอส่วนหัวไม่ใช่ JSON ที่ถูกต้อง :",
BodyInvalidFormat: "เนื้อหาคำขอไม่ใช่ JSON ที่ถูกต้อง : ",
"Monitor History": "ประวัติมอนิเตอร์",
clearDataOlderThan: "เก็บข้อมูลมอนิเตอร์ {0} วัน",
PasswordsDoNotMatch: "รหัสผ่านไม่ตรงกัน",
records: "บันทึก",
"One record": "หนึ่งบันทึก",
steamApiKeyDescription: "สำหรับการมอนิเตอร์ Steam Game Server คุณต้องมี Steam Web-API key, คุณสามารถรสมัครได้จากที่นี่ : ",
"Current User": "ผู้ใช้ปัจจุบัน",
topic: "หัวข้อ",
topicExplanation: "MQTT หัวข้อที่จะมอนิเตอร์",
successMessage: "ข้อความที่จะถือว่าประสบความสำเร็จ",
successMessageExplanation: "MQTT ข้อความที่จะถือว่าประสบความสำเร็จ",
recent: "ล่าสุด",
Done: "สำเร็จ",
Info: "ข้อมูล",
Security: "ความปลอดภัย",
"Steam API Key": "Steam API Key",
"Shrink Database": "ย่อฐานข้อมูล",
"Pick a RR-Type...": "เลือกชนิด DNS Record",
"Pick Accepted Status Codes...": "เลือกสถานะที่ยอมรับ...",
Default: "ค่าเริ่มต้น",
"HTTP Options": "ตัวเลือก HTTP",
"Create Incident": "สร้างเหตุการณ์",
Title: "หัวข้อ",
Content: "เนื้อหา",
Style: "สไตล์",
info: "ข้อมูล",
warning: "แจ้งเตือน",
danger: "อันตราย",
primary: "หลัก",
light: "สว่าง",
dark: "มืด",
Post: "โพสต์",
"Please input title and content": "กรุณาใส่ชื่อและเนื้อหา",
Created: "สร้าง",
"Last Updated": "อัพเดทล่าสุด",
Unpin: "เลิกตรึง",
"Switch to Light Theme": "เปลี่ยนเป็นแบบสว่าง",
"Switch to Dark Theme": "เปลี่ยนเป็นแบบมืด",
"Show Tags": "แสดงแท็ก",
"Hide Tags": "ซ่อนแท็ก",
Description: "รายละเอียด",
"No monitors available.": "ไม่มีมอนิเตอร์ที่สามารถใช้งานได้",
"Add one": "เพิ่ม",
"No Monitors": "ไม่มีมอนิเตอร์",
"Untitled Group": "กลุ่มที่ไม่มีชื่อ",
Services: "บริการ",
Discard: "ทิ้ง",
Cancel: "ยกเลิก",
"Powered by": "ขับเคลื่อนโดย",
shrinkDatabaseDescription: "ทริกเกอร์ฐานข้อมูล VACUUM สำหรับ SQLite หากฐานข้อมูลของคุณถูกสร้างขึ้นหลังจาก 1.10.0 แสดงว่า AUTO_VACUUM เปิดใช้งานอยู่แล้วและไม่จำเป็นต้องดำเนินการนี้",
serwersms: "SerwerSMS.pl",
serwersmsAPIUser: "API Username (incl. webapi_ prefix)",
serwersmsAPIPassword: "API Password",
serwersmsPhoneNumber: "หมายเลขโทรศัพท์",
serwersmsSenderName: "ชื่อผู้ส่ง SMS (ลงทะเบียนผ่านหน้าควบคุม)",
stackfield: "Stackfield",
Customize: "ปรับแต่ง",
"Custom Footer": "ส่วนท้ายที่กำหนดเอง",
"Custom CSS": "CSS ที่กำหนดเอง",
smtpDkimSettings: "ตั้งค่า DKIM",
smtpDkimDesc: "โปรดดู Nodemailer DKIM {0} สำหรับการใช้งาน",
documentation: "เอกสาร",
smtpDkimDomain: "ชื่อโดเมน",
smtpDkimKeySelector: "Key Selector",
smtpDkimPrivateKey: "Private Key",
smtpDkimHashAlgo: "อัลกอริทึมแฮช (ไม่บังคับ)",
smtpDkimheaderFieldNames: "คีย์ส่วนหัวเพื่อลงชื่อ (ไม่บังคับ)",
smtpDkimskipFields: "Header Keys ไม่ต้องเซ็น (ไม่บังคับ)",
gorush: "Gorush",
alerta: "Alerta",
alertaApiEndpoint: "API Endpoint",
alertaEnvironment: "Environment",
alertaApiKey: "กุญแจ API",
alertaAlertState: "แจ้งเตือนสถานะ",
alertaRecoverState: "กู้คืนสถานะ",
deleteStatusPageMsg: "คุณแน่ใจหรือไม่ว่าต้องการลบหน้าสถานะนี้",
Proxies: "พร็อกซี",
default: "ค่าเริ่มต้น",
enabled: "เปิดใช้งาน",
setAsDefault: "ตั่งเป็นค่าเริ่มต้น",
deleteProxyMsg: "คุณแน่ใจหรือไม่ว่าต้องการลบพร็อกซีสำหรับมอนิเตอร์ทั้งหมด?",
proxyDescription: "พร็อกซีจะต้องตั้งค่าให้มอนิเตอร์เพื่อให้ใช้งานได้",
enableProxyDescription: "พร็อกซีนี้จะไม่ส่งผลต่อมอนิเตอร์จนกว่าจะเปิดใช้งาน คุณสามารถควบคุมการปิดใช้งานพร็อกซีชั่วคราวจากมอนิเตอร์ทั้งหมดได้โดยสถานะการเปิดใช้งาน",
setAsDefaultProxyDescription: "พร็อกซีนี้จะถูกเปิดโดนค่าเริ่มต้นสำหรับมอนิเตอร์ใหม่, คุณสามารถปิดการแจ้งเตือนสำหรับแต่ละมอนิเตอร์ได้",
"Certificate Chain": "ห่วงโซ่ใบรับรอง",
Valid: "ถูกต้อง",
Invalid: "ไม่ถูกต้อง",
AccessKeyId: "กุญแจสิทธิ ID",
SecretAccessKey: "กุญแจสิทธิ Secret",
PhoneNumbers: "PhoneNumbers",
TemplateCode: "รหัสเทมเพลต",
SignName: "ป้ายชื่อ",
"Sms template must contain parameters: ": "เทมเพลต SMS ต้องมีพารามิเตอร์ : ",
"Bark Endpoint": "Bark Endpoint",
WebHookUrl: "WebHookUrl",
SecretKey: "SecretKey",
"For safety, must use secret key": "เพื่อความปลอดภัย จำเป็นต้องตั้งค่ากุญแจการเข้าถึง",
"Device Token": "Device Token",
Platform: "แพลตฟอร์ม",
iOS: "iOS",
Android: "Android",
Huawei: "Huawei",
High: "สูง",
Retry: "ลองใหม่",
Topic: "หัวข้อ",
"WeCom Bot Key": "WeCom Bot Key",
"Setup Proxy": "ติดตั้งพร็อกซี่",
"Proxy Protocol": "โปรโตคอลพร็อกซี่",
"Proxy Server": "พร็อกซีเซิร์ฟ",
"Proxy server has authentication": "พร็อกซีเซิร์ฟเวอร์มีการตรวจสอบสิทธิ์",
User: "ผู้ใช้",
Installed: "ติดตั้งแล้ว",
"Not installed": "ไม่ได้ติดตั้ง",
Running: "กำลังทำงาน",
"Not running": "ไม่ได้ทำงาน",
"Remove Token": "ลบกุญแจ",
Start: "เริ่ม",
Stop: "หยุด",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "เพิ่มหน้าสถานะใหม่",
Slug: "ชื่อ",
"Accept characters:": "ตัวอักษรที่ใช้งานได้ :",
startOrEndWithOnly: "เริ่มหรือจบด้วย {0} เท่านั้น",
"No consecutive dashes": "ไม่มีขีดกลางติดต่อกัน",
Next: "ต่อไป",
"The slug is already taken. Please choose another slug.": "ชื่อนี้ถูกใช้งานไปแล้ว กรุณาใช้ชื่ออื่น",
"No Proxy": "ไม่มีพร็อกซี่",
"HTTP Basic Auth": "HTTP Basic 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 Tunnel คุณแน่ใจหรือไม่ที่จะหยุด, พิมรหัสผ่านของคุณเพื่อยืนยัน",
"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": "วันที่สร้าง",
onebotHttpAddress: "ที่อยู่ HTTP OneBot ",
onebotMessageType: "ชนิดข้อความ OneBot",
onebotGroupMessage: "กลุ่ม",
onebotPrivateMessage: "ส่วนตัว",
onebotUserOrGroupId: "กลุ่ม / ไอดีผู้ใช้",
onebotSafetyTips: "เพื่อความปลอดภัย จำเป็นต้องตั้งค่ากุญแจการเข้าถึง",
"PushDeer Key": "กุญแจ PushDeer",
"Footer Text": "ข้อความส่วนท้าย",
"Show Powered By": "แสดงข้อความ \"ขับเคลื่อนโดย\"",
"Domain Names": "Domain Names",
signedInDisp: "เข้าใช้งานในฐานะ {0}",
signedInDispDisabled: "ปิดการตรวจสอบสิทธิ์",
"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 ในแผงควบคุม",
octopushLogin: "\"Login\" จากข้อมูลรับรอง HTTP API ในแผงควบคุม",
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: "Secret API Key",
pushyToken: "Device token",
"Show update if available": "แสดงการอัปเดตถ้ามี",
"Also check beta release": "ตรวจสอบรุ่นเบต้า",
"Using a Reverse Proxy?": "ใช้ 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 Username และ API Key ได้จาก {0}",
};

View file

@ -1,6 +1,7 @@
export default { export default {
languageName: "Türkçe", languageName: "Türkçe",
checkEverySecond: "{0} Saniyede bir kontrol et.", checkEverySecond: "{0} Saniyede bir kontrol et.",
retryCheckEverySecond: "{0} Saniyede bir dene.",
retriesDescription: "Servisin kapalı olarak işaretlenmeden ve bir bildirim gönderilmeden önce maksimum yeniden deneme sayısı", 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", ignoreTLSError: "HTTPS web siteleri için TLS/SSL hatasını yoksay",
upsideDownModeDescription: "Servisin durumunu tersine çevirir. Servis çalışıyorsa kapalı olarak işaretler.", upsideDownModeDescription: "Servisin durumunu tersine çevirir. Servis çalışıyorsa kapalı olarak işaretler.",
@ -12,12 +13,20 @@ export default {
pauseDashboardHome: "Durdur", pauseDashboardHome: "Durdur",
deleteMonitorMsg: "Servisi silmek istediğinden emin misin?", deleteMonitorMsg: "Servisi silmek istediğinden emin misin?",
deleteNotificationMsg: "Bu bildirimi tüm servisler için silmek istediğinden emin misin?", deleteNotificationMsg: "Bu bildirimi tüm servisler için silmek istediğinden emin misin?",
dnsPortDescription: "DNS sunucusu bağlantı noktası. Varsayılan değer 53'tür. Bağlantı noktasını istediğiniz zaman değiştirebilirsiniz.",
resolverserverDescription: "Cloudflare varsayılan sunucudur, çözümleyici sunucusunu istediğiniz zaman değiştirebilirsiniz.", resolverserverDescription: "Cloudflare varsayılan sunucudur, çözümleyici sunucusunu istediğiniz zaman değiştirebilirsiniz.",
rrtypeDescription: "İzlemek istediğiniz servisin RR-Tipini seçin", rrtypeDescription: "İzlemek istediğiniz servisin RR-Tipini seçin",
pauseMonitorMsg: "Durdurmak istediğinden emin misin?", pauseMonitorMsg: "Durdurmak istediğinden emin misin?",
enableDefaultNotificationDescription: "Bu bildirim her yeni serviste aktif olacaktır. Bildirimi servisler için ayrı ayrı deaktive edebilirsiniz. ",
clearEventsMsg: "Bu servisin bütün kayıtlarını silmek istediğinden emin misin?", clearEventsMsg: "Bu servisin bütün kayıtlarını silmek istediğinden emin misin?",
clearHeartbeatsMsg: "Bu servis için tüm sağlık durumunu silmek istediğinden emin misin?", clearHeartbeatsMsg: "Bu servis için tüm sağlık durumunu silmek istediğinden emin misin?",
confirmClearStatisticsMsg: "Tüm istatistikleri silmek istediğinden emin misin?", confirmClearStatisticsMsg: "Tüm istatistikleri silmek istediğinden emin misin?",
importHandleDescription: "Aynı isimdeki bütün servisleri ve bildirimleri atlamak için 'Var olanı atla' seçiniz. 'Üzerine yaz' var olan bütün servisleri ve bildirimleri silecektir. ",
confirmImportMsg: "Yedeği içeri aktarmak istediğinize emin misiniz? Lütfen doğru içeri aktarma seçeneğini seçtiğinizden emin olunuz. ",
twoFAVerifyLabel: "Lütfen tokeni yazarak 2FA doğrulamanın çalıştığından emin olunuz.",
tokenValidSettingsMsg: "Token geçerli! Şimdi 2FA ayarlarını kaydedebilirsiniz. ",
confirmEnableTwoFAMsg: "2FA'ı etkinleştirmek istediğinizden emin misiniz?",
confirmDisableTwoFAMsg: "2FA'ı devre dışı bırakmak istediğinize emin misiniz?",
Settings: "Ayarlar", Settings: "Ayarlar",
Dashboard: "Panel", Dashboard: "Panel",
"New Update": "Yeni Güncelleme", "New Update": "Yeni Güncelleme",
@ -25,6 +34,7 @@ export default {
Appearance: "Görünüm", Appearance: "Görünüm",
Theme: "Tema", Theme: "Tema",
General: "Genel", General: "Genel",
"Primary Base URL": "Birincil Temel URL",
Version: "Versiyon", Version: "Versiyon",
"Check Update On GitHub": "GitHub'da Güncellemeyi Kontrol Edin", "Check Update On GitHub": "GitHub'da Güncellemeyi Kontrol Edin",
List: "Liste", List: "Liste",
@ -62,10 +72,14 @@ export default {
Port: "Port", Port: "Port",
"Heartbeat Interval": "Servis Test Aralığı", "Heartbeat Interval": "Servis Test Aralığı",
Retries: "Yeniden deneme", Retries: "Yeniden deneme",
"Heartbeat Retry Interval": "Sağlık Durumları Tekrar Deneme Sıklığı",
Advanced: "Gelişmiş", Advanced: "Gelişmiş",
"Upside Down Mode": "Ters/Düz Modu", "Upside Down Mode": "Ters/Düz Modu",
"Max. Redirects": "Maksimum Yönlendirme", "Max. Redirects": "Maksimum Yönlendirme",
"Accepted Status Codes": "Kabul Edilen Durum Kodları", "Accepted Status Codes": "Kabul Edilen Durum Kodları",
"Push URL": "Push URL",
needPushEvery: "Bu URL'yi her {0} saniyede bir aramalısınız.",
pushOptionalParams: "İsteğe bağlı parametreler: {0}",
Save: "Kaydet", Save: "Kaydet",
Notifications: "Bildirimler", Notifications: "Bildirimler",
"Not available, please setup.": "Atanmış bildirim yöntemi yok. Ayarlardan belirleyebilirsiniz.", "Not available, please setup.": "Atanmış bildirim yöntemi yok. Ayarlardan belirleyebilirsiniz.",
@ -109,28 +123,19 @@ export default {
"Last Result": "En son sonuçlar", "Last Result": "En son sonuçlar",
"Create your admin account": "Yönetici hesabınızı oluşturun", "Create your admin account": "Yönetici hesabınızı oluşturun",
"Repeat Password": "Şifrenizi tekrar girin", "Repeat Password": "Şifrenizi tekrar girin",
respTime: "Cevap Süresi (ms)",
notAvailableShort: "N/A",
Create: "Yarat",
"Clear Data": "Verileri Temizle",
Events: "Olaylar",
Heartbeats: "Sağlık Durumları",
"Auto Get": "Otomatik Al",
retryCheckEverySecond: "{0} Saniyede bir dene.",
enableDefaultNotificationDescription: "Bu bildirim her yeni serviste aktif olacaktır. Bildirimi servisler için ayrı ayrı deaktive edebilirsiniz. ",
importHandleDescription: "Aynı isimdeki bütün servisleri ve bildirimleri atlamak için 'Var olanı atla' seçiniz. 'Üzerine yaz' var olan bütün servisleri ve bildirimleri silecektir. ",
confirmImportMsg: "Yedeği içeri aktarmak istediğinize emin misiniz? Lütfen doğru içeri aktarma seçeneğini seçtiğinizden emin olunuz. ",
twoFAVerifyLabel: "Lütfen tokeni yazarak 2FA doğrulamanın çalıştığından emin olunuz.",
tokenValidSettingsMsg: "Token geçerli! Şimdi 2FA ayarlarını kaydedebilirsiniz. ",
confirmEnableTwoFAMsg: "2FA'ı etkinleştirmek istediğinizden emin misiniz?",
confirmDisableTwoFAMsg: "2FA'ı devre dışı bırakmak istediğinize emin misiniz?",
"Heartbeat Retry Interval": "Sağlık Durumları Tekrar Deneme Sıklığı",
"Import Backup": "Yedeği içe aktar", "Import Backup": "Yedeği içe aktar",
"Export Backup": "Yedeği dışa aktar", "Export Backup": "Yedeği dışa aktar",
Export: "Dışa aktar", Export: "Dışa aktar",
Import: "İçe aktar", Import: "İçe aktar",
respTime: "Cevap Süresi (ms)",
notAvailableShort: "N/A",
"Default enabled": "Varsayılan etkinleştirilmiş", "Default enabled": "Varsayılan etkinleştirilmiş",
"Apply on all existing monitors": "Var olan bütün servislere uygula", "Apply on all existing monitors": "Var olan bütün servislere uygula",
Create: "Oluştur",
"Clear Data": "Verileri Temizle",
Events: "Olaylar",
Heartbeats: "Sağlık Durumları",
"Auto Get": "Otomatik Al",
backupDescription: "Bütün servisleri ve bildirimleri JSON dosyasına yedekleyebilirsiniz.", backupDescription: "Bütün servisleri ve bildirimleri JSON dosyasına yedekleyebilirsiniz.",
backupDescription2: "Not: Geçmiş ve etkinlik verileri içinde değildir.", backupDescription2: "Not: Geçmiş ve etkinlik verileri içinde değildir.",
backupDescription3: "Dışa aktarma dosyasında bildirim tokeni gibi hassas veriler bulunur, dikkatli bir şekilde saklayınız.", backupDescription3: "Dışa aktarma dosyasında bildirim tokeni gibi hassas veriler bulunur, dikkatli bir şekilde saklayınız.",
@ -149,4 +154,366 @@ export default {
"Two Factor Authentication": "İki Faktörlü Kimlik Doğrulama (2FA)", "Two Factor Authentication": "İki Faktörlü Kimlik Doğrulama (2FA)",
Active: "Aktif", Active: "Aktif",
Inactive: "İnaktif", Inactive: "İnaktif",
Token: "Token",
"Show URI": "URI'yi göster",
Tags: "Etiketler",
"Add New below or Select...": "Aşağıya Yeni Ekle veya Seç...",
"Tag with this name already exist.": "Bu ada sahip etiket zaten var.",
"Tag with this value already exist.": "Bu değere sahip etiket zaten var.",
color: "renk",
"value (optional)": "değer (isteğe bağlı)",
Gray: "Gri",
Red: "Kırmızı",
Orange: "Turuncu",
Green: "Yeşil",
Blue: "Mavi",
Indigo: "Çivit mavisi",
Purple: "Mor",
Pink: "Pembe",
"Search...": "Ara...",
"Avg. Ping": "Ortalama Ping",
"Avg. Response": "Ortalama Cevap Süresi",
"Entry Page": "Giriş Sayfası",
statusPageNothing: "Burada hiçbir şey yok, lütfen bir grup veya servis ekleyin.",
"No Services": "Hizmet Yok",
"All Systems Operational": "Tüm Sistemler Operasyonel",
"Partially Degraded Service": "Kısmen Bozulmuş Hizmet",
"Degraded Service": "Bozulmuş Hizmet",
"Add Group": "Grup Ekle",
"Add a monitor": "Servis Ekle",
"Edit Status Page": "Durum Sayfasını Düzenle",
"Go to Dashboard": "Panele Git",
"Status Page": "Durum Sayfası",
"Status Pages": "Durum Sayfaları",
defaultNotificationName: "My {notification} Alert ({number})",
here: "burada",
Required: "Gerekli",
telegram: "Telegram",
"Bot Token": "Bot Token",
wayToGetTelegramToken: "{0} adresinden bir token alabilirsiniz.",
"Chat ID": "Chat ID",
supportTelegramChatID: "Doğrudan Sohbet / Grup / Kanalın Sohbet Kimliğini Destekleyin",
wayToGetTelegramChatID: "Bot'a bir mesaj göndererek ve chat_id'yi görüntülemek için bu URL'ye giderek sohbet kimliğinizi alabilirsiniz:",
"YOUR BOT TOKEN HERE": "BOT TOKENİNİZ BURADA",
chatIDNotFound: "Chat ID bulunamadı; lütfen önce bu bota bir mesaj gönderin",
webhook: "Webhook",
"Post URL": "Post URL",
"Content Type": "Content Type",
webhookJsonDesc: "{0}, Express.js gibi tüm modern HTTP sunucuları için iyidir",
webhookFormDataDesc: "{multipart} PHP için iyidir. JSON'un {decodeFunction} ile ayrıştırılması gerekecek",
smtp: "E-mail (SMTP)",
secureOptionNone: "Hiçbiri / STARTTLS (25, 587)",
secureOptionTLS: "TLS (465)",
"Ignore TLS Error": "TLS Hatasını Yoksay",
"From Email": "E-postadan",
emailCustomSubject: "Özel Konu",
"To Email": "E-postaya",
smtpCC: "CC",
smtpBCC: "BCC",
discord: "Discord",
"Discord Webhook URL": "Discord Webhook URL",
wayToGetDiscordURL: "Bunu Sunucu Ayarları -> Entegrasyonlar -> Webhook Oluştur'a giderek alabilirsiniz.",
"Bot Display Name": "Botun Görünecek Adı",
"Prefix Custom Message": "Önek Özel Mesaj",
"Hello @everyone is...": "Merhaba {'@'}everyone ...",
teams: "Microsoft Teams",
"Webhook URL": "Webhook URL",
wayToGetTeamsURL: "Bir webhook URL'sinin nasıl oluşturulacağını öğrenebilirsiniz {0}.",
signal: "Signal",
Number: "Numara",
Recipients: "Alıcılar",
needSignalAPI: "REST API ile bir signal istemciniz olması gerekiyor.",
wayToCheckSignalURL: "Nasıl kurulacağını görmek için bu URL'yi kontrol edebilirsiniz:",
signalImportant: "ÖNEMLİ: Alıcılarda grupları ve sayıları karıştıramazsınız!",
gotify: "Gotify",
"Application Token": "Uygulama Tokeni",
"Server URL": "Sunucu URL",
Priority: "Öncelik",
slack: "Slack",
"Icon Emoji": "İkon Emoji",
"Channel Name": "Kanal Adı",
"Uptime Kuma URL": "Uptime Kuma URL",
aboutWebhooks: "Webhook hakkında daha fazla bilgi: {0}",
aboutChannelName: "Webhook kanalını atlamak istiyorsanız, {0} Kanal Adı alanına kanal adını girin. Ör: #diğer-kanal",
aboutKumaURL: "Uptime Kuma URL alanını boş bırakırsanız, varsayılan olarak Project GitHub sayfası olur.",
emojiCheatSheet: "Emoji cheat sheet: {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'den fazla Bildirim hizmetini destekler)",
GoogleChat: "Google Chat (sadece Google Workspace)",
pushbullet: "Pushbullet",
line: "Line Messenger",
mattermost: "Mattermost",
"User Key": "Kullancı Anahtarı",
Device: "Cihaz",
"Message Title": "Mesaj Başlığı",
"Notification Sound": "Bilgilendirme sesi",
"More info on:": "Daha fazla bilgi: {0}",
pushoverDesc1: "Acil durum önceliği (2), yeniden denemeler arasında varsayılan olarak 30 saniyelik bir zaman aşımına sahiptir ve 1 saat sonra sona erecektir.",
pushoverDesc2: "Farklı cihazlara bildirim göndermek istiyorsanız Cihaz alanını doldurunuz.",
"SMS Type": "SMS Tipi",
octopushTypePremium: "Premium (Hızlı - uyarı için önerilir)",
octopushTypeLowCost: "Düşük Maliyet (Yavaş - bazen operatör tarafından engellenir)",
checkPrice: "{0} fiyatlarını kontrol edin:",
apiCredentials: "API kimlik bilgileri",
octopushLegacyHint: "Octopush'un (2011-2020) eski sürümünü mü yoksa yeni sürümünü mü kullanıyorsunuz?",
"Check octopush prices": "Octopush fiyatlarını kontrol edin {0}.",
octopushPhoneNumber: "Telefon numarası (uluslararası biçim, örneğin: +33612345678) ",
octopushSMSSender: "SMS Gönderici Adı : 3-11 alfanümerik karakter ve boşluk (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea Cihaz ID",
"Apprise URL": "Apprise URL",
"Example:": "Örnek: {0}",
"Read more:": "Daha fazla oku: {0}",
"Status:": "Durum: {0}",
"Read more": "Daha fazla oku",
appriseInstalled: "Apprise yüklendi.",
appriseNotInstalled: "Appris yüklü değil. {0}",
"Access Token": "Erişim Tokeni",
"Channel access token": "Kanal erişim tokeni",
"Line Developers Console": "Line Geliştirici Konsolu",
lineDevConsoleTo: "Line Geliştirici Konsolu - {0}",
"Basic Settings": "Temel Ayarlar",
"User ID": "Kullanıcı ID",
"Messaging API": "Messaging API",
wayToGetLineChannelToken: "Önce {0}'e erişin, bir sağlayıcı ve kanal (Messaging API) oluşturun, ardından yukarıda belirtilen menü öğelerinden kanal erişim tokenini ve kullanıcı id alabilirsiniz.",
"Icon URL": "Simge URL",
aboutIconURL: "Varsayılan profil resmini geçersiz kılmak için \"Simge URL\" bölümünde bir resme bağlantı sağlayabilirsiniz. Simge Emojisi ayarlanmışsa kullanılmayacaktır.",
aboutMattermostChannelName: "Kanal adını \"Kanal Adı\" alanına girerek Webhook'un gönderi yaptığı varsayılan kanalı geçersiz kılabilirsiniz. Bunun Mattermost Webhook ayarlarında etkinleştirilmesi gerekir. Ör: #diğer-kanal",
matrix: "Matrix",
promosmsTypeEco: "SMS ECO - ucuz ama yavaş ve genellikle aşırı yüklü. Yalnızca Polonyalı alıcılarla sınırlıdır.",
promosmsTypeFlash: "SMS FLASH - Mesaj, alıcı cihazda otomatik olarak gösterilecektir. Yalnızca Polonyalı alıcılarla sınırlıdır.",
promosmsTypeFull: "SMS FULL - Premium SMS katmanı, Gönderici Adınızı kullanabilirsiniz (Önce adınızı kaydetmeniz gerekir). Uyarılar için güvenilir.",
promosmsTypeSpeed: "SMS HIZI - Sistemde en yüksek öncelik. Çok hızlı ve güvenilir ancak maliyetli (SMS FULL fiyatının yaklaşık iki katı).",
promosmsPhoneNumber: "Telefon numarası (Polonyalı alıcı için Alan kodlarını atlayabilirsiniz)",
promosmsSMSSender: "SMS Gönderici Adı : Ön kayıtlı ad veya varsayılanlardan biri: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
matrixHomeserverURL: "Homeserver URL (http(s):// ve isteğe bağlı olarak bağlantı noktası ile)",
"Internal Room Id": "Internal Room ID",
matrixDesc1: "Internal Room ID'sini, Matrix istemcinizdeki oda ayarlarının gelişmiş bölümüne bakarak bulabilirsiniz. !QMdRCpUIfLwsfjxye6:home.server gibi görünmelidir.",
matrixDesc2: "Hesabınıza ve katıldığınız tüm odalara tam erişime izin vereceğinden, yeni bir kullanıcı oluşturmanız ve kendi Matrix kullanıcınızın erişim belirtecini kullanmamanız şiddetle tavsiye edilir. Bunun yerine, yeni bir kullanıcı oluşturun ve onu yalnızca bildirimi almak istediğiniz odaya davet edin. {0} komutunu çalıştırarak erişim tokenini alabilirsiniz.",
Method: "Yöntem",
Body: "Gövde",
Headers: "Başlıklar",
PushUrl: "Push URL",
HeadersInvalidFormat: "İstek başlıkları geçerli JSON değil:",
BodyInvalidFormat: "İstek gövdesi geçerli JSON değil:",
"Monitor History": "Servis Geçmişi",
clearDataOlderThan: "{0} gün boyunca izleme geçmişi verilerini saklayın.",
PasswordsDoNotMatch: "Parolalar uyuşmuyor.",
records: "kayıtlar",
"One record": "Bir Kayıt",
steamApiKeyDescription: "Bir Steam Oyun Sunucusunu izlemek için bir Steam Web-API anahtarına ihtiyacınız vardır. API anahtarınızı buradan kaydedebilirsiniz: ",
"Current User": "Şu anki kullanıcı",
topic: "Başlık",
topicExplanation: "İzlenecek MQTT servisi",
successMessage: "Başarılı Mesaj",
successMessageExplanation: "Başarılı olarak kabul edilecek MQTT mesajı",
recent: "Son",
Done: "Tamamlandı",
Info: "Bilgi",
Security: "Güvenlik",
"Steam API Key": "Steam API Anahtarı",
"Shrink Database": "Veritabanını Küçült",
"Pick a RR-Type...": "Bir RR-Tipi seçin...",
"Pick Accepted Status Codes...": "Kabul Edilen Durum Kodlarını Seçin...",
Default: "Varsayılan",
"HTTP Options": "HTTP Ayarları",
"Create Incident": "Olay Oluştur",
Title: "Başlık",
Content: "İçerik",
Style: "Stil",
info: "info",
warning: "warning",
danger: "danger",
primary: "primary",
light: "light",
dark: "dark",
Post: "Post",
"Please input title and content": "Lütfen başlık ve içerik girin",
Created: "Oluşturuldu",
"Last Updated": "Son Güncelleme",
Unpin: "Unpin",
"Switch to Light Theme": "Açık Temaya Geç",
"Switch to Dark Theme": "Karanlık Temaya Geç",
"Show Tags": "Etiketleri Göster",
"Hide Tags": "Etiketleri Gizle",
Description: "Açıklama",
"No monitors available.": "Kullanılabilir servis yok.",
"Add one": "Bir tane ekle",
"No Monitors": "Servis Yok",
"Untitled Group": "Adsız Grup",
Services: "Hizmetler",
Discard: "İptal Et",
Cancel: "İptal Et",
"Powered by": "Powered by",
shrinkDatabaseDescription: "SQLite için veritabanı VACUUM'unu tetikleyin. Veritabanınız 1.10.0'dan sonra oluşturulduysa, AUTO_VACUUM zaten etkinleştirilmiştir ve bu eyleme gerek yoktur.",
serwersms: "SerwerSMS.pl",
serwersmsAPIUser: "API Kullanıcı Adı (webapi_ öneki dahil)",
serwersmsAPIPassword: "API Şifre",
serwersmsPhoneNumber: "Telefon numarası",
serwersmsSenderName: "SMS Gönderici Adı (müşteri portalı üzerinden kayıtlı)",
stackfield: "Stackfield",
Customize: "Özelleştirme",
"Custom Footer": "Özel Altbilgi",
"Custom CSS": "Özel CSS",
smtpDkimSettings: "DKIM Ayarları",
smtpDkimDesc: "Kullanım için lütfen Nodemailer DKIM'e {0} bakın.",
documentation: "belgeler",
smtpDkimDomain: "Alan adı",
smtpDkimKeySelector: "Anahtar Seçici",
smtpDkimPrivateKey: "Özel anahtar",
smtpDkimHashAlgo: "Hash Algoritması (Opsiyonel)",
smtpDkimheaderFieldNames: "İmzalanacak Başlık Anahtarları (Opsiyonel)",
smtpDkimskipFields: "İmzalamayacak Başlık Anahtarları (Opsiyonel)",
gorush: "Gorush",
alerta: "Alerta",
alertaApiEndpoint: "API Endpoint",
alertaEnvironment: "Environment",
alertaApiKey: "API Key",
alertaAlertState: "Uyarı Durumu",
alertaRecoverState: "Kurtarma Durumu",
deleteStatusPageMsg: "Bu durum sayfasını silmek istediğinizden emin misiniz?",
Proxies: "Proxy'ler",
default: "Varsayılan",
enabled: "Etkinleştirilmiş",
setAsDefault: "Varsayılan Olarak Ayarla",
deleteProxyMsg: "Bu proxy'yi tüm servisler için silmek istediğinizden emin misiniz?",
proxyDescription: "Proxy'lerin çalışması için bir servise atanması gerekir.",
enableProxyDescription: "Bu proxy, etkinleştirilene kadar izleme isteklerini etkilemeyecektir. Aktivasyon durumuna göre proxy'yi tüm servislerden geçici olarak devre dışı bırakabilirsiniz.",
setAsDefaultProxyDescription: "Bu proxy, yeni servisler için varsayılan olarak etkinleştirilecektir. Yine de proxy'yi her servis için ayrı ayrı devre dışı bırakabilirsiniz.",
"Certificate Chain": "Sertifika Zinciri",
Valid: "Geçerli",
Invalid: "Geçersiz",
AccessKeyId: "AccessKey ID",
SecretAccessKey: "AccessKey Secret",
PhoneNumbers: "PhoneNumbers",
TemplateCode: "TemplateCode",
SignName: "SignName",
"Sms template must contain parameters: ": "Sms şablonu parametreleri içermelidir:",
"Bark Endpoint": "Bark Endpoint",
WebHookUrl: "WebHookUrl",
SecretKey: "SecretKey",
"For safety, must use secret key": "Güvenlik için gizli anahtar kullanılmalıdır",
"Device Token": "Cihaz Tokeni",
Platform: "Platform",
iOS: "iOS",
Android: "Android",
Huawei: "Huawei",
High: "High",
Retry: "Retry",
Topic: "Topic",
"WeCom Bot Key": "WeCom Bot Key",
"Setup Proxy": "Proxy kur",
"Proxy Protocol": "Proxy Protokolü",
"Proxy Server": "Proxy Sunucusu",
"Proxy server has authentication": "Proxy sunucusunun kimlik doğrulaması var",
User: "Kullanıcı",
Installed: "Yüklenmiş",
"Not installed": "Yüklü değil",
Running: "Çalışıyor",
"Not running": "Çalışmıyor",
"Remove Token": "Tokeni Kaldır",
Start: "Başlat",
Stop: "Durdur",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "Yeni Durum Sayfası Ekle",
Slug: "Slug",
"Accept characters:": "Kabul edilen karakterler:",
startOrEndWithOnly: "Yalnızca {0} ile başlayın veya bitirin",
"No consecutive dashes": "Ardışık tire yok",
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",
"HTTP Basic Auth": "HTTP Temel Yetkilendirme",
"New Status Page": "Yeni Durum Sayfası",
"Page Not Found": "Sayfa bulunamadı",
"Reverse Proxy": "Ters Proxy",
Backup: "Yedek",
About: "Hakkında",
wayToGetCloudflaredURL: "(Cloudflared'i {0} adresinden indirin)",
cloudflareWebsite: "Cloudflare Website",
"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.",
"Other Software": "Diğer Yazılımlar",
"For example: nginx, Apache and Traefik.": "Örneğin: nginx, Apache ve Traefik.",
"Please read": "Lütfen oku",
"Subject:": "Başlık:",
"Valid To:": "Geçerlilik:",
"Days Remaining:": "Kalan günler:",
"Issuer:": "Veren:",
"Fingerprint:": "Parmak izi:",
"No status pages": "Durum sayfası yok",
"Domain Name Expiry Notification": "Alan Adı Sona Erme Bildirimi",
Proxy: "Proxy",
"Date Created": "Tarih Oluşturuldu",
onebotHttpAddress: "OneBot HTTP Adresi",
onebotMessageType: "OneBot Mesaj Türü",
onebotGroupMessage: "Grup",
onebotPrivateMessage: "Özel",
onebotUserOrGroupId: "Grup/Kullanıcı Kimliği",
onebotSafetyTips: "Güvenlik için erişim tokeni ayarlamalısınız",
"PushDeer Key": "PushDeer Anahtarı",
"Footer Text": "Altbilgi metni",
"Show Powered By": "\"Powered by\" kısmını göster",
"Domain Names": "Alan isimleri",
signedInDisp: "{0} olarak oturum açıldı",
signedInDispDisabled: "Yetkilendirme Devre Dışı.",
"Certificate Expiry Notification": "Sertifika Sona Erme Bildirimi",
"API Username": "API Kullanıc Adı",
"API Key": "API Anahtarı",
"Recipient Number": "Alıcı Numarası",
"From Name/Number": "İsimden/Numaradan",
"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",
octopushAPIKey: "Kontrol panelindeki HTTP API kimlik bilgilerinden \"API Key\"",
octopushLogin: "Kontrol panelindeki HTTP API kimlik bilgilerinden \"Login\"",
promosmsLogin: "API Oturum Açma Adı",
promosmsPassword: "API Şifresi",
"pushoversounds pushover": "Pushover (varsayılan)",
"pushoversounds bike": "Bisiklet",
"pushoversounds bugle": "Boru",
"pushoversounds cashregister": "Yazar kasa",
"pushoversounds classical": "Klasik",
"pushoversounds cosmic": "Kozmik",
"pushoversounds falling": "Düşme",
"pushoversounds gamelan": "Oyun Alanı",
"pushoversounds incoming": "Gelen",
"pushoversounds intermission": "Ara",
"pushoversounds magic": "Büyü",
"pushoversounds mechanical": "Mekanik",
"pushoversounds pianobar": "Piano",
"pushoversounds siren": "Siren",
"pushoversounds spacealarm": "Uzay Alarmı",
"pushoversounds tugboat": "Römorkör",
"pushoversounds alien": "Uzaylı Alarmı (uzun)",
"pushoversounds climb": "Tırmanış (uzun)",
"pushoversounds persistent": "Sürekli (uzun)",
"pushoversounds echo": "Pushover Yankı (uzun)",
"pushoversounds updown": "Yukarı Aşağı (uzun)",
"pushoversounds vibrate": "Sadece titreşim",
"pushoversounds none": "Yok (sessiz)",
pushyAPIKey: "Gizli API Anahtarı",
pushyToken: "Cihaz tokeni",
"Show update if available": "Varsa güncellemeyi göster",
"Also check beta release": "Ayrıca beta sürümünü kontrol edin",
"Using a Reverse Proxy?": "Ters Proxy mi Kullanıyorsunuz?",
"Check how to config it for WebSocket": "WebSocket için nasıl yapılandırılacağını kontrol edin",
"Steam Game Server": "Steam Oyun Sunucusu",
"Most likely causes:": "En olası nedenler:",
"The resource is no longer available.": "Kaynak artık mevcut değil.",
"There might be a typing error in the address.": "Adreste bir yazım hatası olabilir.",
"What you can try:": "Ne deneyebilirsin:",
"Retype the address.": "Adresi tekrar yazın.",
"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.",
}; };

View file

@ -97,6 +97,15 @@
</div> </div>
</div> </div>
<!-- Port -->
<div 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 class="form-text">
{{ $t("dnsPortDescription") }}
</div>
</div>
<div class="my-3"> <div class="my-3">
<label for="dns_resolve_type" class="form-label">{{ $t("Resource Record Type") }}</label> <label for="dns_resolve_type" class="form-label">{{ $t("Resource Record Type") }}</label>
@ -500,6 +509,15 @@ export default {
this.monitor.pushToken = genSecret(10); this.monitor.pushToken = genSecret(10);
} }
} }
// Set default port for DNS if not already defined
if (! this.monitor.port || this.monitor.port === "53") {
if (this.monitor.type === "dns") {
this.monitor.port = "53";
} else {
this.monitor.port = "";
}
}
} }
}, },