Merge branch 'master' into feature/status-page-offline-monitors-group

pull/4689/head
Zandor Smith 4 months ago committed by GitHub
commit 9977dd2246
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,7 +1,6 @@
/.idea
/node_modules
/data*
/cypress
/out
/test
/kubernetes

@ -1,8 +1,7 @@
module.exports = {
ignorePatterns: [
"test/*.js",
"test/cypress",
"server/modules/apicache/*",
"server/modules/*",
"src/util.js"
],
root: true,

@ -45,7 +45,7 @@ jobs:
needs: [ check-linters ]
runs-on: ${{ matrix.os }}
timeout-minutes: 15
if: ${{ github.repository == 'louislam/uptime-kuma' }}
strategy:
matrix:
os: [ ARMv7 ]

@ -0,0 +1,25 @@
name: Merge Conflict Labeler
on:
push:
branches:
- master
pull_request_target:
branches:
- master
types: [synchronize]
jobs:
label:
name: Labeling
runs-on: ubuntu-latest
if: ${{ github.repository == 'louislam/uptime-kuma' }}
permissions:
contents: read
pull-requests: write
steps:
- name: Apply label
uses: eps1lon/actions-label-merge-conflict@v3
with:
dirtyLabel: 'needs:resolve-merge-conflict'
repoToken: '${{ secrets.GITHUB_TOKEN }}'

@ -9,7 +9,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v8
- uses: actions/stale@v9
with:
stale-issue-message: |-
We are clearing up our old `help`-issues and your issue has been open for 60 days with no activity.
@ -21,7 +21,7 @@ jobs:
exempt-issue-labels: 'News,Medium,High,discussion,bug,doc,feature-request'
exempt-issue-assignees: 'louislam'
operations-per-run: 200
- uses: actions/stale@v8
- uses: actions/stale@v9
with:
stale-issue-message: |-
This issue was marked as `cannot-reproduce` by a maintainer.

@ -427,7 +427,33 @@ Currently, there are 3 maintainers:
### Procedures
We have a few procedures we follow. These are documented here:
- <details><summary>Set up a Docker Builder</summary>
<p>
- amd64, armv7 using local.
- arm64 using remote arm64 cpu, as the emulator is too slow and can no longer pass the `npm ci` command.
1. Add the public key to the remote server.
2. Add the remote context. The remote machine must be arm64 and installed Docker CE.
```
docker context create oracle-arm64-jp --docker "host=ssh://root@100.107.174.88"
```
3. Create a new builder.
```
docker buildx create --name kuma-builder --platform linux/amd64,linux/arm/v7
docker buildx use kuma-builder
docker buildx inspect --bootstrap
```
4. Append the remote context to the builder.
```
docker buildx create --append --name kuma-builder --platform linux/arm64 oracle-arm64-jp
```
5. Verify the builder and check if the builder is using `kuma-builder`.
```
docker buildx inspect kuma-builder
docker buildx ls
```
</p>
</details>
- <details><summary>Release</summary>
<p>

@ -43,11 +43,18 @@ It is a temporary live demo, all data will be deleted after 10 minutes. Sponsore
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
```
Uptime Kuma is now running on http://localhost:3001
Uptime Kuma is now running on <http://0.0.0.0:3001>.
> [!WARNING]
> File Systems like **NFS** (Network File System) are **NOT** supported. Please map to a local directory or volume.
> [!NOTE]
> If you want to limit exposure to localhost (without exposing port for other users or to use a [reverse proxy](https://github.com/louislam/uptime-kuma/wiki/Reverse-Proxy)), you can expose the port like this:
>
> ```bash
> docker run -d --restart=always -p 127.0.0.1:3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
> ```
### 💪🏻 Non-Docker
Requirements:

@ -1,28 +0,0 @@
const { defineConfig } = require("cypress");
module.exports = defineConfig({
projectId: "vyjuem",
e2e: {
experimentalStudio: true,
setupNodeEvents(on, config) {
},
fixturesFolder: "test/cypress/fixtures",
screenshotsFolder: "test/cypress/screenshots",
videosFolder: "test/cypress/videos",
downloadsFolder: "test/cypress/downloads",
supportFile: "test/cypress/support/e2e.js",
baseUrl: "http://localhost:3002",
defaultCommandTimeout: 10000,
pageLoadTimeout: 60000,
viewportWidth: 1920,
viewportHeight: 1080,
specPattern: [
"test/cypress/e2e/setup.cy.js",
"test/cypress/e2e/**/*.js"
],
},
env: {
baseUrl: "http://localhost:3002",
},
});

@ -1,10 +0,0 @@
const { defineConfig } = require("cypress");
module.exports = defineConfig({
e2e: {
supportFile: false,
specPattern: [
"test/cypress/unit/**/*.js"
],
}
});

@ -0,0 +1,12 @@
exports.up = function (knex) {
return knex.schema
.alterTable("status_page", function (table) {
table.integer("auto_refresh_interval").defaultTo(300).unsigned();
});
};
exports.down = function (knex) {
return knex.schema.alterTable("status_page", function (table) {
table.dropColumn("auto_refresh_interval");
});
};

@ -0,0 +1,16 @@
exports.up = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.string("snmp_oid").defaultTo(null);
table.enum("snmp_version", [ "1", "2c", "3" ]).defaultTo("2c");
table.string("json_path_operator").defaultTo(null);
});
};
exports.down = function (knex) {
return knex.schema.alterTable("monitor", function (table) {
table.dropColumn("snmp_oid");
table.dropColumn("snmp_version");
table.dropColumn("json_path_operator");
});
};

@ -0,0 +1,18 @@
BEGIN TRANSACTION;
PRAGMA writable_schema = TRUE;
UPDATE
SQLITE_MASTER
SET
sql = replace(sql,
'monitor_id INTEGER NOT NULL',
'monitor_id INTEGER NOT NULL REFERENCES [monitor] ([id]) ON DELETE CASCADE ON UPDATE CASCADE'
)
WHERE
name = 'monitor_tls_info'
AND type = 'table';
PRAGMA writable_schema = RESET;
COMMIT;

@ -3,7 +3,6 @@ FROM node:20-bookworm-slim AS base2-slim
ARG TARGETPLATFORM
# Specify --no-install-recommends to skip unused dependencies, make the base much smaller!
# apprise = for notifications (From testing repo)
# sqlite3 = for debugging
# iputils-ping = for ping
# util-linux = for setpriv (Should be dropped in 2.0.0?)
@ -12,10 +11,10 @@ ARG TARGETPLATFORM
# ca-certificates = keep the cert up-to-date
# sudo = for start service nscd with non-root user
# nscd = for better DNS caching
RUN echo "deb http://deb.debian.org/debian testing main" >> /etc/apt/sources.list && \
apt update && \
apt --yes --no-install-recommends -t testing install apprise sqlite3 ca-certificates && \
apt --yes --no-install-recommends -t stable install \
RUN apt update && \
apt --yes --no-install-recommends install \
sqlite3 \
ca-certificates \
iputils-ping \
util-linux \
dumb-init \
@ -25,6 +24,15 @@ RUN echo "deb http://deb.debian.org/debian testing main" >> /etc/apt/sources.lis
rm -rf /var/lib/apt/lists/* && \
apt --yes autoremove
# apprise = for notifications (Install from the deb package, as the stable one is too old) (workaround for #4867)
# Switching to testing repo is no longer working, as the testing repo is not bookworm anymore.
# python3-paho-mqtt (#4859)
RUN curl http://ftp.debian.org/debian/pool/main/a/apprise/apprise_1.8.0-2_all.deb --output apprise.deb && \
apt update && \
apt --yes --no-install-recommends install ./apprise.deb python3-paho-mqtt && \
rm -rf /var/lib/apt/lists/* && \
rm -f apprise.deb && \
apt --yes autoremove
# Install cloudflared
RUN curl https://pkg.cloudflare.com/cloudflare-main.gpg --output /usr/share/keyrings/cloudflare-main.gpg && \
@ -42,7 +50,9 @@ COPY ./docker/etc/sudoers /etc/sudoers
# Full Base Image
# MariaDB, Chromium and fonts
FROM base2-slim AS base2
# Make sure to reuse the slim image here. Uncomment the above line if you want to build it from scratch.
# FROM base2-slim AS base2
FROM louislam/uptime-kuma:base2-slim AS base2
ENV UPTIME_KUMA_ENABLE_EMBEDDED_MARIADB=1
RUN apt update && \
apt --yes --no-install-recommends install chromium fonts-indic fonts-noto fonts-noto-cjk mariadb-server && \

5342
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -49,7 +49,7 @@
"build-docker-nightly-local": "npm run build && docker build -f docker/dockerfile -t louislam/uptime-kuma:nightly2 --target nightly .",
"build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test2 --target pr-test2 . --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.23.11 && npm ci --production && npm run download-dist",
"setup": "git checkout 1.23.13 && 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",
@ -79,8 +79,7 @@
"@louislam/sqlite3": "15.1.6",
"@vvo/tzdb": "^6.125.0",
"args-parser": "~1.3.0",
"axios": "~0.28.0",
"axios-ntlm": "1.3.0",
"axios": "~0.28.1",
"badge-maker": "~3.3.1",
"bcryptjs": "~2.4.3",
"chardet": "~1.4.0",
@ -90,8 +89,9 @@
"command-exists": "~1.2.9",
"compare-versions": "~3.6.0",
"compression": "~1.7.4",
"croner": "~6.0.5",
"croner": "~8.1.0",
"dayjs": "~1.11.5",
"dev-null": "^0.1.1",
"dotenv": "~16.0.3",
"express": "~4.19.2",
"express-basic-auth": "~1.2.1",
@ -116,9 +116,10 @@
"mitt": "~3.0.1",
"mongodb": "~4.17.1",
"mqtt": "~4.3.7",
"mssql": "~8.1.4",
"mysql2": "~3.6.2",
"mssql": "~11.0.0",
"mysql2": "~3.9.6",
"nanoid": "~3.3.4",
"net-snmp": "^3.11.2",
"node-cloudflared-tunnel": "~1.0.9",
"node-radius-client": "~1.0.0",
"nodemailer": "~6.9.13",
@ -137,17 +138,17 @@
"redbean-node": "~0.3.0",
"redis": "~4.5.1",
"semver": "~7.5.4",
"socket.io": "~4.6.1",
"socket.io-client": "~4.6.1",
"socket.io": "~4.7.5",
"socket.io-client": "~4.7.5",
"socks-proxy-agent": "6.1.1",
"tar": "~6.1.11",
"tar": "~6.2.1",
"tcp-ping": "~0.1.1",
"thirty-two": "~1.0.2",
"tough-cookie": "~4.1.3",
"ws": "^8.13.0"
},
"devDependencies": {
"@actions/github": "~5.0.1",
"@actions/github": "~5.1.1",
"@fortawesome/fontawesome-svg-core": "~1.2.36",
"@fortawesome/free-regular-svg-icons": "~5.15.4",
"@fortawesome/free-solid-svg-icons": "~5.15.4",
@ -171,7 +172,7 @@
"cross-env": "~7.0.3",
"delay": "^5.0.0",
"dns2": "~2.0.1",
"dompurify": "~2.4.3",
"dompurify": "~3.0.11",
"eslint": "~8.14.0",
"eslint-plugin-jsdoc": "~46.4.6",
"eslint-plugin-vue": "~8.7.1",
@ -192,7 +193,7 @@
"test": "~3.3.0",
"typescript": "~4.4.4",
"v-pagination-3": "~0.1.7",
"vite": "~5.0.10",
"vite": "~5.2.8",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-vue-devtools": "^7.0.15",
"vue": "~3.4.2",

@ -209,9 +209,9 @@ class Database {
let config = {};
let mariadbPoolConfig = {
afterCreate: function (conn, done) {
}
min: 0,
max: 10,
idleTimeoutMillis: 30000,
};
log.info("db", `Database Type: ${dbConfig.type}`);

@ -239,19 +239,7 @@ class Maintenance extends BeanModel {
this.beanMeta.status = "under-maintenance";
clearTimeout(this.beanMeta.durationTimeout);
// Check if duration is still in the window. If not, use the duration from the current time to the end of the window
let duration;
if (customDuration > 0) {
duration = customDuration;
} else if (this.end_date) {
let d = dayjs(this.end_date).diff(dayjs(), "second");
if (d < this.duration) {
duration = d * 1000;
}
} else {
duration = this.duration * 1000;
}
let duration = this.inferDuration(customDuration);
UptimeKumaServer.getInstance().sendMaintenanceListByUserID(this.user_id);
@ -263,9 +251,21 @@ class Maintenance extends BeanModel {
};
// Create Cron
this.beanMeta.job = new Cron(this.cron, {
timezone: await this.getTimezone(),
}, startEvent);
if (this.strategy === "recurring-interval") {
// For recurring-interval, Croner needs to have interval and startAt
const startDate = dayjs(this.startDate);
const [ hour, minute ] = this.startTime.split(":");
const startDateTime = startDate.hour(hour).minute(minute);
this.beanMeta.job = new Cron(this.cron, {
timezone: await this.getTimezone(),
interval: this.interval_day * 24 * 60 * 60,
startAt: startDateTime.toISOString(),
}, startEvent);
} else {
this.beanMeta.job = new Cron(this.cron, {
timezone: await this.getTimezone(),
}, startEvent);
}
// Continue if the maintenance is still in the window
let runningTimeslot = this.getRunningTimeslot();
@ -311,6 +311,24 @@ class Maintenance extends BeanModel {
}
}
/**
* Calculate the maintenance duration
* @param {number} customDuration - The custom duration in milliseconds.
* @returns {number} The inferred duration in milliseconds.
*/
inferDuration(customDuration) {
// Check if duration is still in the window. If not, use the duration from the current time to the end of the window
if (customDuration > 0) {
return customDuration;
} else if (this.end_date) {
let d = dayjs(this.end_date).diff(dayjs(), "second");
if (d < this.duration) {
return d * 1000;
}
}
return this.duration * 1000;
}
/**
* Stop the maintenance
* @returns {void}
@ -395,10 +413,8 @@ class Maintenance extends BeanModel {
} else if (!this.strategy.startsWith("recurring-")) {
this.cron = "";
} else if (this.strategy === "recurring-interval") {
let array = this.start_time.split(":");
let hour = parseInt(array[0]);
let minute = parseInt(array[1]);
this.cron = minute + " " + hour + " */" + this.interval_day + " * *";
// For intervals, the pattern is calculated in the run function as the interval-option is set
this.cron = "* * * * *";
this.duration = this.calcDuration();
log.debug("maintenance", "Cron: " + this.cron);
log.debug("maintenance", "Duration: " + this.duration);

@ -2,10 +2,10 @@ const dayjs = require("dayjs");
const axios = require("axios");
const { Prometheus } = require("../prometheus");
const { log, UP, DOWN, PENDING, MAINTENANCE, flipStatus, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND,
SQL_DATETIME_FORMAT
SQL_DATETIME_FORMAT, evaluateJsonQuery
} = require("../../src/util");
const { tcping, ping, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, setSetting, httpNtlm, radius, grpcQuery,
redisPingAsync, mongodbPing, kafkaProducerAsync, getOidcTokenClientCredentials, rootCertificatesFingerprints, axiosAbortSignal
redisPingAsync, kafkaProducerAsync, getOidcTokenClientCredentials, rootCertificatesFingerprints, axiosAbortSignal
} = require("../util-server");
const { R } = require("redbean-node");
const { BeanModel } = require("redbean-node/dist/bean-model");
@ -17,7 +17,6 @@ const apicache = require("../modules/apicache");
const { UptimeKumaServer } = require("../uptime-kuma-server");
const { DockerHost } = require("../docker");
const Gamedig = require("gamedig");
const jsonata = require("jsonata");
const jwt = require("jsonwebtoken");
const crypto = require("crypto");
const { UptimeCalculator } = require("../uptime-calculator");
@ -161,6 +160,9 @@ class Monitor extends BeanModel {
kafkaProducerMessage: this.kafkaProducerMessage,
screenshot,
remote_browser: this.remote_browser,
snmpOid: this.snmpOid,
jsonPathOperator: this.jsonPathOperator,
snmpVersion: this.snmpVersion,
};
if (includeSensitiveData) {
@ -245,12 +247,12 @@ class Monitor extends BeanModel {
/**
* Encode user and password to Base64 encoding
* for HTTP "basic" auth, as per RFC-7617
* @param {string} user Username to encode
* @param {string} pass Password to encode
* @returns {string} Encoded username:password
* @param {string|null} user - The username (nullable if not changed by a user)
* @param {string|null} pass - The password (nullable if not changed by a user)
* @returns {string} Encoded Base64 string
*/
encodeBase64(user, pass) {
return Buffer.from(user + ":" + pass).toString("base64");
return Buffer.from(`${user || ""}:${pass || ""}`).toString("base64");
}
/**
@ -533,6 +535,18 @@ class Monitor extends BeanModel {
}
}
let tlsInfo = {};
// Store tlsInfo when secureConnect event is emitted
// The keylog event listener is a workaround to access the tlsSocket
options.httpsAgent.once("keylog", async (line, tlsSocket) => {
tlsSocket.once("secureConnect", async () => {
tlsInfo = checkCertificate(tlsSocket);
tlsInfo.valid = tlsSocket.authorized || false;
await this.handleTlsInfo(tlsInfo);
});
});
log.debug("monitor", `[${this.name}] Axios Options: ${JSON.stringify(options)}`);
log.debug("monitor", `[${this.name}] Axios Request`);
@ -542,31 +556,19 @@ class Monitor extends BeanModel {
bean.msg = `${res.status} - ${res.statusText}`;
bean.ping = dayjs().valueOf() - startTime;
// Check certificate if https is used
let certInfoStartTime = dayjs().valueOf();
if (this.getUrl()?.protocol === "https:") {
log.debug("monitor", `[${this.name}] Check cert`);
try {
let tlsInfoObject = checkCertificate(res);
tlsInfo = await this.updateTlsInfo(tlsInfoObject);
// fallback for if kelog event is not emitted, but we may still have tlsInfo,
// e.g. if the connection is made through a proxy
if (this.getUrl()?.protocol === "https:" && tlsInfo.valid === undefined) {
const tlsSocket = res.request.res.socket;
if (!this.getIgnoreTls() && this.isEnabledExpiryNotification()) {
log.debug("monitor", `[${this.name}] call checkCertExpiryNotifications`);
await this.checkCertExpiryNotifications(tlsInfoObject);
}
if (tlsSocket) {
tlsInfo = checkCertificate(tlsSocket);
tlsInfo.valid = tlsSocket.authorized || false;
} catch (e) {
if (e.message !== "No TLS certificate in response") {
log.error("monitor", "Caught error");
log.error("monitor", e.message);
}
await this.handleTlsInfo(tlsInfo);
}
}
if (process.env.TIMELOGGER === "1") {
log.debug("monitor", "Cert Info Query Time: " + (dayjs().valueOf() - certInfoStartTime) + "ms");
}
if (process.env.UPTIME_KUMA_LOG_RESPONSE_BODY_MONITOR_ID === this.id) {
log.info("monitor", res.data);
}
@ -598,21 +600,15 @@ class Monitor extends BeanModel {
} else if (this.type === "json-query") {
let data = res.data;
// convert data to object
if (typeof data === "string") {
data = JSON.parse(data);
}
const { status, response } = await evaluateJsonQuery(data, this.jsonPath, this.jsonPathOperator, this.expectedValue);
let expression = jsonata(this.jsonPath);
let result = await expression.evaluate(data);
if (result.toString() === this.expectedValue) {
bean.msg += ", expected value is found";
if (status) {
bean.status = UP;
bean.msg = `JSON query passes (comparing ${response} ${this.jsonPathOperator} ${this.expectedValue})`;
} else {
throw new Error(bean.msg + ", but value is not equal to expected value, value was: [" + result + "]");
throw new Error(`JSON query does not pass (comparing ${response} ${this.jsonPathOperator} ${this.expectedValue})`);
}
}
} else if (this.type === "port") {
@ -818,15 +814,6 @@ class Monitor extends BeanModel {
bean.msg = await mysqlQuery(this.databaseConnectionString, this.databaseQuery || "SELECT 1", mysqlPassword);
bean.status = UP;
bean.ping = dayjs().valueOf() - startTime;
} else if (this.type === "mongodb") {
let startTime = dayjs().valueOf();
await mongodbPing(this.databaseConnectionString);
bean.msg = "";
bean.status = UP;
bean.ping = dayjs().valueOf() - startTime;
} else if (this.type === "radius") {
let startTime = dayjs().valueOf();
@ -857,7 +844,7 @@ class Monitor extends BeanModel {
} else if (this.type === "redis") {
let startTime = dayjs().valueOf();
bean.msg = await redisPingAsync(this.databaseConnectionString);
bean.msg = await redisPingAsync(this.databaseConnectionString, !this.ignoreTls);
bean.status = UP;
bean.ping = dayjs().valueOf() - startTime;
@ -1615,6 +1602,20 @@ class Monitor extends BeanModel {
return oAuthAccessToken;
}
/**
* Store TLS certificate information and check for expiry
* @param {object} tlsInfo Information about the TLS connection
* @returns {Promise<void>}
*/
async handleTlsInfo(tlsInfo) {
await this.updateTlsInfo(tlsInfo);
this.prometheus?.update(null, tlsInfo);
if (!this.getIgnoreTls() && this.isEnabledExpiryNotification()) {
log.debug("monitor", `[${this.name}] call checkCertExpiryNotifications`);
await this.checkCertExpiryNotifications(tlsInfo);
}
}
}
module.exports = Monitor;

@ -238,6 +238,7 @@ class StatusPage extends BeanModel {
description: this.description,
icon: this.getIcon(),
theme: this.theme,
autoRefreshInterval: this.autoRefreshInterval,
published: !!this.published,
showTags: !!this.show_tags,
domainNameList: this.getDomainNameList(),
@ -260,6 +261,7 @@ class StatusPage extends BeanModel {
title: this.title,
description: this.description,
icon: this.getIcon(),
autoRefreshInterval: this.autoRefreshInterval,
theme: this.theme,
published: !!this.published,
showTags: !!this.show_tags,

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 CatButtes
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,77 @@
'use strict';
// Original file https://raw.githubusercontent.com/elasticio/node-ntlm-client/master/lib/flags.js
module.exports.NTLMFLAG_NEGOTIATE_UNICODE = 1 << 0;
/* Indicates that Unicode strings are supported for use in security buffer
data. */
module.exports.NTLMFLAG_NEGOTIATE_OEM = 1 << 1;
/* Indicates that OEM strings are supported for use in security buffer data. */
module.exports.NTLMFLAG_REQUEST_TARGET = 1 << 2;
/* Requests that the server's authentication realm be included in the Type 2
message. */
/* unknown (1<<3) */
module.exports.NTLMFLAG_NEGOTIATE_SIGN = 1 << 4;
/* Specifies that authenticated communication between the client and server
should carry a digital signature (message integrity). */
module.exports.NTLMFLAG_NEGOTIATE_SEAL = 1 << 5;
/* Specifies that authenticated communication between the client and server
should be encrypted (message confidentiality). */
module.exports.NTLMFLAG_NEGOTIATE_DATAGRAM_STYLE = 1 << 6;
/* Indicates that datagram authentication is being used. */
module.exports.NTLMFLAG_NEGOTIATE_LM_KEY = 1 << 7;
/* Indicates that the LAN Manager session key should be used for signing and
sealing authenticated communications. */
module.exports.NTLMFLAG_NEGOTIATE_NETWARE = 1 << 8;
/* unknown purpose */
module.exports.NTLMFLAG_NEGOTIATE_NTLM_KEY = 1 << 9;
/* Indicates that NTLM authentication is being used. */
/* unknown (1<<10) */
module.exports.NTLMFLAG_NEGOTIATE_ANONYMOUS = 1 << 11;
/* Sent by the client in the Type 3 message to indicate that an anonymous
context has been established. This also affects the response fields. */
module.exports.NTLMFLAG_NEGOTIATE_DOMAIN_SUPPLIED = 1 << 12;
/* Sent by the client in the Type 1 message to indicate that a desired
authentication realm is included in the message. */
module.exports.NTLMFLAG_NEGOTIATE_WORKSTATION_SUPPLIED = 1 << 13;
/* Sent by the client in the Type 1 message to indicate that the client
workstation's name is included in the message. */
module.exports.NTLMFLAG_NEGOTIATE_LOCAL_CALL = 1 << 14;
/* Sent by the server to indicate that the server and client are on the same
machine. Implies that the client may use a pre-established local security
context rather than responding to the challenge. */
module.exports.NTLMFLAG_NEGOTIATE_ALWAYS_SIGN = 1 << 15;
/* Indicates that authenticated communication between the client and server
should be signed with a "dummy" signature. */
module.exports.NTLMFLAG_TARGET_TYPE_DOMAIN = 1 << 16;
/* Sent by the server in the Type 2 message to indicate that the target
authentication realm is a domain. */
module.exports.NTLMFLAG_TARGET_TYPE_SERVER = 1 << 17;
/* Sent by the server in the Type 2 message to indicate that the target
authentication realm is a server. */
module.exports.NTLMFLAG_TARGET_TYPE_SHARE = 1 << 18;
/* Sent by the server in the Type 2 message to indicate that the target
authentication realm is a share. Presumably, this is for share-level
authentication. Usage is unclear. */
module.exports.NTLMFLAG_NEGOTIATE_NTLM2_KEY = 1 << 19;
/* Indicates that the NTLM2 signing and sealing scheme should be used for
protecting authenticated communications. */
module.exports.NTLMFLAG_REQUEST_INIT_RESPONSE = 1 << 20;
/* unknown purpose */
module.exports.NTLMFLAG_REQUEST_ACCEPT_RESPONSE = 1 << 21;
/* unknown purpose */
module.exports.NTLMFLAG_REQUEST_NONNT_SESSION_KEY = 1 << 22;
/* unknown purpose */
module.exports.NTLMFLAG_NEGOTIATE_TARGET_INFO = 1 << 23;
/* Sent by the server in the Type 2 message to indicate that it is including a
Target Information block in the message. */
/* unknown (1<24) */
/* unknown (1<25) */
/* unknown (1<26) */
/* unknown (1<27) */
/* unknown (1<28) */
module.exports.NTLMFLAG_NEGOTIATE_128 = 1 << 29;
/* Indicates that 128-bit encryption is supported. */
module.exports.NTLMFLAG_NEGOTIATE_KEY_EXCHANGE = 1 << 30;
/* Indicates that the client will provide an encrypted master key in
the "Session Key" field of the Type 3 message. */
module.exports.NTLMFLAG_NEGOTIATE_56 = 1 << 31;
//# sourceMappingURL=flags.js.map

@ -0,0 +1,122 @@
'use strict';
// Original source at https://github.com/elasticio/node-ntlm-client/blob/master/lib/hash.js
var crypto = require('crypto');
function createLMResponse(challenge, lmhash) {
var buf = new Buffer.alloc(24), pwBuffer = new Buffer.alloc(21).fill(0);
lmhash.copy(pwBuffer);
calculateDES(pwBuffer.slice(0, 7), challenge).copy(buf);
calculateDES(pwBuffer.slice(7, 14), challenge).copy(buf, 8);
calculateDES(pwBuffer.slice(14), challenge).copy(buf, 16);
return buf;
}
function createLMHash(password) {
var buf = new Buffer.alloc(16), pwBuffer = new Buffer.alloc(14), magicKey = new Buffer.from('KGS!@#$%', 'ascii');
if (password.length > 14) {
buf.fill(0);
return buf;
}
pwBuffer.fill(0);
pwBuffer.write(password.toUpperCase(), 0, 'ascii');
return Buffer.concat([
calculateDES(pwBuffer.slice(0, 7), magicKey),
calculateDES(pwBuffer.slice(7), magicKey)
]);
}
function calculateDES(key, message) {
var desKey = new Buffer.alloc(8);
desKey[0] = key[0] & 0xFE;
desKey[1] = ((key[0] << 7) & 0xFF) | (key[1] >> 1);
desKey[2] = ((key[1] << 6) & 0xFF) | (key[2] >> 2);
desKey[3] = ((key[2] << 5) & 0xFF) | (key[3] >> 3);
desKey[4] = ((key[3] << 4) & 0xFF) | (key[4] >> 4);
desKey[5] = ((key[4] << 3) & 0xFF) | (key[5] >> 5);
desKey[6] = ((key[5] << 2) & 0xFF) | (key[6] >> 6);
desKey[7] = (key[6] << 1) & 0xFF;
for (var i = 0; i < 8; i++) {
var parity = 0;
for (var j = 1; j < 8; j++) {
parity += (desKey[i] >> j) % 2;
}
desKey[i] |= (parity % 2) === 0 ? 1 : 0;
}
var des = crypto.createCipheriv('DES-ECB', desKey, '');
return des.update(message);
}
function createNTLMResponse(challenge, ntlmhash) {
var buf = new Buffer.alloc(24), ntlmBuffer = new Buffer.alloc(21).fill(0);
ntlmhash.copy(ntlmBuffer);
calculateDES(ntlmBuffer.slice(0, 7), challenge).copy(buf);
calculateDES(ntlmBuffer.slice(7, 14), challenge).copy(buf, 8);
calculateDES(ntlmBuffer.slice(14), challenge).copy(buf, 16);
return buf;
}
function createNTLMHash(password) {
var md4sum = crypto.createHash('md4');
md4sum.update(new Buffer.from(password, 'ucs2'));
return md4sum.digest();
}
function createNTLMv2Hash(ntlmhash, username, authTargetName) {
var hmac = crypto.createHmac('md5', ntlmhash);
hmac.update(new Buffer.from(username.toUpperCase() + authTargetName, 'ucs2'));
return hmac.digest();
}
function createLMv2Response(type2message, username, ntlmhash, nonce, targetName) {
var buf = new Buffer.alloc(24), ntlm2hash = createNTLMv2Hash(ntlmhash, username, targetName), hmac = crypto.createHmac('md5', ntlm2hash);
//server challenge
type2message.challenge.copy(buf, 8);
//client nonce
buf.write(nonce || createPseudoRandomValue(16), 16, 'hex');
//create hash
hmac.update(buf.slice(8));
var hashedBuffer = hmac.digest();
hashedBuffer.copy(buf);
return buf;
}
function createNTLMv2Response(type2message, username, ntlmhash, nonce, targetName) {
var buf = new Buffer.alloc(48 + type2message.targetInfo.buffer.length), ntlm2hash = createNTLMv2Hash(ntlmhash, username, targetName), hmac = crypto.createHmac('md5', ntlm2hash);
//the first 8 bytes are spare to store the hashed value before the blob
//server challenge
type2message.challenge.copy(buf, 8);
//blob signature
buf.writeUInt32BE(0x01010000, 16);
//reserved
buf.writeUInt32LE(0, 20);
//timestamp
//TODO: we are loosing precision here since js is not able to handle those large integers
// maybe think about a different solution here
// 11644473600000 = diff between 1970 and 1601
var timestamp = ((Date.now() + 11644473600000) * 10000).toString(16);
var timestampLow = Number('0x' + timestamp.substring(Math.max(0, timestamp.length - 8)));
var timestampHigh = Number('0x' + timestamp.substring(0, Math.max(0, timestamp.length - 8)));
buf.writeUInt32LE(timestampLow, 24, false);
buf.writeUInt32LE(timestampHigh, 28, false);
//random client nonce
buf.write(nonce || createPseudoRandomValue(16), 32, 'hex');
//zero
buf.writeUInt32LE(0, 40);
//complete target information block from type 2 message
type2message.targetInfo.buffer.copy(buf, 44);
//zero
buf.writeUInt32LE(0, 44 + type2message.targetInfo.buffer.length);
hmac.update(buf.slice(8));
var hashedBuffer = hmac.digest();
hashedBuffer.copy(buf);
return buf;
}
function createPseudoRandomValue(length) {
var str = '';
while (str.length < length) {
str += Math.floor(Math.random() * 16).toString(16);
}
return str;
}
module.exports = {
createLMHash: createLMHash,
createNTLMHash: createNTLMHash,
createLMResponse: createLMResponse,
createNTLMResponse: createNTLMResponse,
createLMv2Response: createLMv2Response,
createNTLMv2Response: createNTLMv2Response,
createPseudoRandomValue: createPseudoRandomValue
};
//# sourceMappingURL=hash.js.map

@ -0,0 +1,220 @@
'use strict';
// Original file https://raw.githubusercontent.com/elasticio/node-ntlm-client/master/lib/ntlm.js
var os = require('os'), flags = require('./flags'), hash = require('./hash');
var NTLMSIGNATURE = "NTLMSSP\0";
function createType1Message(workstation, target) {
var dataPos = 32, pos = 0, buf = new Buffer.alloc(1024);
workstation = workstation === undefined ? os.hostname() : workstation;
target = target === undefined ? '' : target;
//signature
buf.write(NTLMSIGNATURE, pos, NTLMSIGNATURE.length, 'ascii');
pos += NTLMSIGNATURE.length;
//message type
buf.writeUInt32LE(1, pos);
pos += 4;
//flags
buf.writeUInt32LE(flags.NTLMFLAG_NEGOTIATE_OEM |
flags.NTLMFLAG_REQUEST_TARGET |
flags.NTLMFLAG_NEGOTIATE_NTLM_KEY |
flags.NTLMFLAG_NEGOTIATE_NTLM2_KEY |
flags.NTLMFLAG_NEGOTIATE_ALWAYS_SIGN, pos);
pos += 4;
//domain security buffer
buf.writeUInt16LE(target.length, pos);
pos += 2;
buf.writeUInt16LE(target.length, pos);
pos += 2;
buf.writeUInt32LE(target.length === 0 ? 0 : dataPos, pos);
pos += 4;
if (target.length > 0) {
dataPos += buf.write(target, dataPos, 'ascii');
}
//workstation security buffer
buf.writeUInt16LE(workstation.length, pos);
pos += 2;
buf.writeUInt16LE(workstation.length, pos);
pos += 2;
buf.writeUInt32LE(workstation.length === 0 ? 0 : dataPos, pos);
pos += 4;
if (workstation.length > 0) {
dataPos += buf.write(workstation, dataPos, 'ascii');
}
return 'NTLM ' + buf.toString('base64', 0, dataPos);
}
function decodeType2Message(str) {
if (str === undefined) {
throw new Error('Invalid argument');
}
//convenience
if (Object.prototype.toString.call(str) !== '[object String]') {
if (str.hasOwnProperty('headers') && str.headers.hasOwnProperty('www-authenticate')) {
str = str.headers['www-authenticate'];
}
else {
throw new Error('Invalid argument');
}
}
var ntlmMatch = /^NTLM ([^,\s]+)/.exec(str);
if (ntlmMatch) {
str = ntlmMatch[1];
}
var buf = new Buffer.from(str, 'base64'), obj = {};
//check signature
if (buf.toString('ascii', 0, NTLMSIGNATURE.length) !== NTLMSIGNATURE) {
throw new Error('Invalid message signature: ' + str);
}
//check message type
if (buf.readUInt32LE(NTLMSIGNATURE.length) !== 2) {
throw new Error('Invalid message type (no type 2)');
}
//read flags
obj.flags = buf.readUInt32LE(20);
obj.encoding = (obj.flags & flags.NTLMFLAG_NEGOTIATE_OEM) ? 'ascii' : 'ucs2';
obj.version = (obj.flags & flags.NTLMFLAG_NEGOTIATE_NTLM2_KEY) ? 2 : 1;
obj.challenge = buf.slice(24, 32);
//read target name
obj.targetName = (function () {
var length = buf.readUInt16LE(12);
//skipping allocated space
var offset = buf.readUInt32LE(16);
if (length === 0) {
return '';
}
if ((offset + length) > buf.length || offset < 32) {
throw new Error('Bad type 2 message');
}
return buf.toString(obj.encoding, offset, offset + length);
})();
//read target info
if (obj.flags & flags.NTLMFLAG_NEGOTIATE_TARGET_INFO) {
obj.targetInfo = (function () {
var info = {};
var length = buf.readUInt16LE(40);
//skipping allocated space
var offset = buf.readUInt32LE(44);
var targetInfoBuffer = new Buffer.alloc(length);
buf.copy(targetInfoBuffer, 0, offset, offset + length);
if (length === 0) {
return info;
}
if ((offset + length) > buf.length || offset < 32) {
throw new Error('Bad type 2 message');
}
var pos = offset;
while (pos < (offset + length)) {
var blockType = buf.readUInt16LE(pos);
pos += 2;
var blockLength = buf.readUInt16LE(pos);
pos += 2;
if (blockType === 0) {
//reached the terminator subblock
break;
}
var blockTypeStr = void 0;
switch (blockType) {
case 1:
blockTypeStr = 'SERVER';
break;
case 2:
blockTypeStr = 'DOMAIN';
break;
case 3:
blockTypeStr = 'FQDN';
break;
case 4:
blockTypeStr = 'DNS';
break;
case 5:
blockTypeStr = 'PARENT_DNS';
break;
default:
blockTypeStr = '';
break;
}
if (blockTypeStr) {
info[blockTypeStr] = buf.toString('ucs2', pos, pos + blockLength);
}
pos += blockLength;
}
return {
parsed: info,
buffer: targetInfoBuffer
};
})();
}
return obj;
}
function createType3Message(type2Message, username, password, workstation, target) {
var dataPos = 52, buf = new Buffer.alloc(1024);
if (workstation === undefined) {
workstation = os.hostname();
}
if (target === undefined) {
target = type2Message.targetName;
}
//signature
buf.write(NTLMSIGNATURE, 0, NTLMSIGNATURE.length, 'ascii');
//message type
buf.writeUInt32LE(3, 8);
if (type2Message.version === 2) {
dataPos = 64;
var ntlmHash = hash.createNTLMHash(password), nonce = hash.createPseudoRandomValue(16), lmv2 = hash.createLMv2Response(type2Message, username, ntlmHash, nonce, target), ntlmv2 = hash.createNTLMv2Response(type2Message, username, ntlmHash, nonce, target);
//lmv2 security buffer
buf.writeUInt16LE(lmv2.length, 12);
buf.writeUInt16LE(lmv2.length, 14);
buf.writeUInt32LE(dataPos, 16);
lmv2.copy(buf, dataPos);
dataPos += lmv2.length;
//ntlmv2 security buffer
buf.writeUInt16LE(ntlmv2.length, 20);
buf.writeUInt16LE(ntlmv2.length, 22);
buf.writeUInt32LE(dataPos, 24);
ntlmv2.copy(buf, dataPos);
dataPos += ntlmv2.length;
}
else {
var lmHash = hash.createLMHash(password), ntlmHash = hash.createNTLMHash(password), lm = hash.createLMResponse(type2Message.challenge, lmHash), ntlm = hash.createNTLMResponse(type2Message.challenge, ntlmHash);
//lm security buffer
buf.writeUInt16LE(lm.length, 12);
buf.writeUInt16LE(lm.length, 14);
buf.writeUInt32LE(dataPos, 16);
lm.copy(buf, dataPos);
dataPos += lm.length;
//ntlm security buffer
buf.writeUInt16LE(ntlm.length, 20);
buf.writeUInt16LE(ntlm.length, 22);
buf.writeUInt32LE(dataPos, 24);
ntlm.copy(buf, dataPos);
dataPos += ntlm.length;
}
//target name security buffer
buf.writeUInt16LE(type2Message.encoding === 'ascii' ? target.length : target.length * 2, 28);
buf.writeUInt16LE(type2Message.encoding === 'ascii' ? target.length : target.length * 2, 30);
buf.writeUInt32LE(dataPos, 32);
dataPos += buf.write(target, dataPos, type2Message.encoding);
//user name security buffer
buf.writeUInt16LE(type2Message.encoding === 'ascii' ? username.length : username.length * 2, 36);
buf.writeUInt16LE(type2Message.encoding === 'ascii' ? username.length : username.length * 2, 38);
buf.writeUInt32LE(dataPos, 40);
dataPos += buf.write(username, dataPos, type2Message.encoding);
//workstation name security buffer
buf.writeUInt16LE(type2Message.encoding === 'ascii' ? workstation.length : workstation.length * 2, 44);
buf.writeUInt16LE(type2Message.encoding === 'ascii' ? workstation.length : workstation.length * 2, 46);
buf.writeUInt32LE(dataPos, 48);
dataPos += buf.write(workstation, dataPos, type2Message.encoding);
if (type2Message.version === 2) {
//session key security buffer
buf.writeUInt16LE(0, 52);
buf.writeUInt16LE(0, 54);
buf.writeUInt32LE(0, 56);
//flags
buf.writeUInt32LE(type2Message.flags, 60);
}
return 'NTLM ' + buf.toString('base64', 0, dataPos);
}
module.exports = {
createType1Message: createType1Message,
decodeType2Message: decodeType2Message,
createType3Message: createType3Message
};
//# sourceMappingURL=ntlm.js.map

@ -0,0 +1,127 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NtlmClient = void 0;
var axios_1 = __importDefault(require("axios"));
var ntlm = __importStar(require("./ntlm"));
var https = __importStar(require("https"));
var http = __importStar(require("http"));
var dev_null_1 = __importDefault(require("dev-null"));
/**
* @param credentials An NtlmCredentials object containing the username and password
* @param AxiosConfig The Axios config for the instance you wish to create
*
* @returns This function returns an axios instance configured to use the provided credentials
*/
function NtlmClient(credentials, AxiosConfig) {
var _this = this;
var config = AxiosConfig !== null && AxiosConfig !== void 0 ? AxiosConfig : {};
if (!config.httpAgent) {
config.httpAgent = new http.Agent({ keepAlive: true });
}
if (!config.httpsAgent) {
config.httpsAgent = new https.Agent({ keepAlive: true });
}
var client = axios_1.default.create(config);
client.interceptors.response.use(function (response) {
return response;
}, function (err) { return __awaiter(_this, void 0, void 0, function () {
var error, t1Msg, t2Msg, t3Msg, stream_1;
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
error = err.response;
if (!(error && error.status === 401
&& error.headers['www-authenticate']
&& error.headers['www-authenticate'].includes('NTLM'))) return [3 /*break*/, 3];
// This length check is a hack because SharePoint is awkward and will
// include the Negotiate option when responding with the T2 message
// There is nore we could do to ensure we are processing correctly,
// but this is the easiest option for now
if (error.headers['www-authenticate'].length < 50) {
t1Msg = ntlm.createType1Message(credentials.workstation, credentials.domain);
error.config.headers["Authorization"] = t1Msg;
}
else {
t2Msg = ntlm.decodeType2Message((error.headers['www-authenticate'].match(/^NTLM\s+(.+?)(,|\s+|$)/) || [])[1]);
t3Msg = ntlm.createType3Message(t2Msg, credentials.username, credentials.password, credentials.workstation, credentials.domain);
error.config.headers["X-retry"] = "false";
error.config.headers["Authorization"] = t3Msg;
}
if (!(error.config.responseType === "stream")) return [3 /*break*/, 2];
stream_1 = (_a = err.response) === null || _a === void 0 ? void 0 : _a.data;
if (!(stream_1 && !stream_1.readableEnded)) return [3 /*break*/, 2];
return [4 /*yield*/, new Promise(function (resolve) {
stream_1.pipe((0, dev_null_1.default)());
stream_1.once('close', resolve);
})];
case 1:
_b.sent();
_b.label = 2;
case 2: return [2 /*return*/, client(error.config)];
case 3: throw err;
}
});
}); });
return client;
}
exports.NtlmClient = NtlmClient;
//# sourceMappingURL=ntlmClient.js.map

@ -5,7 +5,6 @@ const { dnsResolve } = require("../util-server");
const { R } = require("redbean-node");
class DnsMonitorType extends MonitorType {
name = "dns";
/**

@ -0,0 +1,63 @@
const { MonitorType } = require("./monitor-type");
const { UP } = require("../../src/util");
const { MongoClient } = require("mongodb");
const jsonata = require("jsonata");
class MongodbMonitorType extends MonitorType {
name = "mongodb";
/**
* @inheritdoc
*/
async check(monitor, heartbeat, _server) {
let command = { "ping": 1 };
if (monitor.databaseQuery) {
command = JSON.parse(monitor.databaseQuery);
}
let result = await this.runMongodbCommand(monitor.databaseConnectionString, command);
if (result["ok"] !== 1) {
throw new Error("MongoDB command failed");
} else {
heartbeat.msg = "Command executed successfully";
}
if (monitor.jsonPath) {
let expression = jsonata(monitor.jsonPath);
result = await expression.evaluate(result);
if (result) {
heartbeat.msg = "Command executed successfully and the jsonata expression produces a result.";
} else {
throw new Error("Queried value not found.");
}
}
if (monitor.expectedValue) {
if (result.toString() === monitor.expectedValue) {
heartbeat.msg = "Command executed successfully and expected value was found";
} else {
throw new Error("Query executed, but value is not equal to expected value, value was: [" + JSON.stringify(result) + "]");
}
}
heartbeat.status = UP;
}
/**
* Connect to and run MongoDB command on a MongoDB database
* @param {string} connectionString The database connection string
* @param {object} command MongoDB command to run on the database
* @returns {Promise<(string[] | object[] | object)>} Response from server
*/
async runMongodbCommand(connectionString, command) {
let client = await MongoClient.connect(connectionString);
let result = await client.db().command(command);
await client.close();
return result;
}
}
module.exports = {
MongodbMonitorType,
};

@ -11,7 +11,6 @@ class MonitorType {
async check(monitor, heartbeat, server) {
throw new Error("You need to override check()");
}
}
module.exports = {

@ -4,15 +4,10 @@ const mqtt = require("mqtt");
const jsonata = require("jsonata");
class MqttMonitorType extends MonitorType {
name = "mqtt";
/**
* Run the monitoring check on the MQTT monitor
* @param {Monitor} monitor Monitor to check
* @param {Heartbeat} heartbeat Monitor heartbeat to update
* @param {UptimeKumaServer} server Uptime Kuma server
* @returns {Promise<void>}
* @inheritdoc
*/
async check(monitor, heartbeat, server) {
const receivedMessage = await this.mqttAsync(monitor.hostname, monitor.mqttTopic, {

@ -10,6 +10,10 @@ const jwt = require("jsonwebtoken");
const config = require("../config");
const { RemoteBrowser } = require("../remote-browser");
/**
* Cached instance of a browser
* @type {import ("playwright-core").Browser}
*/
let browser = null;
let allowedList = [];
@ -71,10 +75,12 @@ async function isAllowedChromeExecutable(executablePath) {
/**
* Get the current instance of the browser. If there isn't one, create
* it.
* @returns {Promise<Browser>} The browser
* @returns {Promise<import ("playwright-core").Browser>} The browser
*/
async function getBrowser() {
if (!browser) {
if (browser && browser.isConnected()) {
return browser;
} else {
let executablePath = await Settings.get("chromeExecutable");
executablePath = await prepareChromeExecutable(executablePath);
@ -83,8 +89,9 @@ async function getBrowser() {
//headless: false,
executablePath,
});
return browser;
}
return browser;
}
/**

@ -0,0 +1,63 @@
const { MonitorType } = require("./monitor-type");
const { UP, log, evaluateJsonQuery } = require("../../src/util");
const snmp = require("net-snmp");
class SNMPMonitorType extends MonitorType {
name = "snmp";
/**
* @inheritdoc
*/
async check(monitor, heartbeat, _server) {
let session;
try {
const sessionOptions = {
port: monitor.port || "161",
retries: monitor.maxretries,
timeout: monitor.timeout * 1000,
version: snmp.Version[monitor.snmpVersion],
};
session = snmp.createSession(monitor.hostname, monitor.radiusPassword, sessionOptions);
// Handle errors during session creation
session.on("error", (error) => {
throw new Error(`Error creating SNMP session: ${error.message}`);
});
const varbinds = await new Promise((resolve, reject) => {
session.get([ monitor.snmpOid ], (error, varbinds) => {
error ? reject(error) : resolve(varbinds);
});
});
log.debug("monitor", `SNMP: Received varbinds (Type: ${snmp.ObjectType[varbinds[0].type]} Value: ${varbinds[0].value})`);
if (varbinds.length === 0) {
throw new Error(`No varbinds returned from SNMP session (OID: ${monitor.snmpOid})`);
}
if (varbinds[0].type === snmp.ObjectType.NoSuchInstance) {
throw new Error(`The SNMP query returned that no instance exists for OID ${monitor.snmpOid}`);
}
// We restrict querying to one OID per monitor, therefore `varbinds[0]` will always contain the value we're interested in.
const value = varbinds[0].value;
const { status, response } = await evaluateJsonQuery(value, monitor.jsonPath, monitor.jsonPathOperator, monitor.expectedValue);
if (status) {
heartbeat.status = UP;
heartbeat.msg = `JSON query passes (comparing ${response} ${monitor.jsonPathOperator} ${monitor.expectedValue})`;
} else {
throw new Error(`JSON query does not pass (comparing ${response} ${monitor.jsonPathOperator} ${monitor.expectedValue})`);
}
} finally {
if (session) {
session.close();
}
}
}
}
module.exports = {
SNMPMonitorType,
};

@ -2,23 +2,13 @@ const { MonitorType } = require("./monitor-type");
const { UP } = require("../../src/util");
const childProcessAsync = require("promisify-child-process");
/**
* A TailscalePing class extends the MonitorType.
* It runs Tailscale ping to monitor the status of a specific node.
*/
class TailscalePing extends MonitorType {
name = "tailscale-ping";
/**
* Checks the ping status of the URL associated with the monitor.
* It then parses the Tailscale ping command output to update the heatrbeat.
* @param {object} monitor The monitor object associated with the check.
* @param {object} heartbeat The heartbeat object to update.
* @returns {Promise<void>}
* @throws Error if checking Tailscale ping encounters any error
* @inheritdoc
*/
async check(monitor, heartbeat) {
async check(monitor, heartbeat, _server) {
try {
let tailscaleOutput = await this.runTailscalePing(monitor.hostname, monitor.interval);
this.parseTailscaleOutput(tailscaleOutput, heartbeat);

@ -0,0 +1,31 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { UP } = require("../../src/util");
class Bitrix24 extends NotificationProvider {
name = "Bitrix24";
/**
* @inheritdoc
*/
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
try {
const params = {
user_id: notification.bitrix24UserID,
message: "[B]Uptime Kuma[/B]",
"ATTACH[COLOR]": (heartbeatJSON ?? {})["status"] === UP ? "#b73419" : "#67b518",
"ATTACH[BLOCKS][0][MESSAGE]": msg
};
await axios.get(`${notification.bitrix24WebhookURL}/im.notify.system.add.json`, { params });
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = Bitrix24;

@ -19,6 +19,9 @@ class DingDing extends NotificationProvider {
markdown: {
title: `[${this.statusToString(heartbeatJSON["status"])}] ${monitorJSON["name"]}`,
text: `## [${this.statusToString(heartbeatJSON["status"])}] ${monitorJSON["name"]} \n> ${heartbeatJSON["msg"]}\n> Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`,
},
"at": {
"isAtAll": notification.mentioning === "everyone"
}
};
if (await this.sendToDingDing(notification, params)) {
@ -62,7 +65,7 @@ class DingDing extends NotificationProvider {
if (result.data.errmsg === "ok") {
return true;
}
return false;
throw new Error(result.data.errmsg);
}
/**

@ -13,6 +13,10 @@ class Discord extends NotificationProvider {
try {
const discordDisplayName = notification.discordUsername || "Uptime Kuma";
const webhookUrl = new URL(notification.discordWebhookUrl);
if (notification.discordChannelType === "postToThread") {
webhookUrl.searchParams.append("thread_id", notification.threadId);
}
// If heartbeatJSON is null, assume we're testing.
if (heartbeatJSON == null) {
@ -20,28 +24,13 @@ class Discord extends NotificationProvider {
username: discordDisplayName,
content: msg,
};
await axios.post(notification.discordWebhookUrl, discordtestdata);
return okMsg;
}
let address;
if (notification.discordChannelType === "createNewForumPost") {
discordtestdata.thread_name = notification.postName;
}
switch (monitorJSON["type"]) {
case "ping":
address = monitorJSON["hostname"];
break;
case "port":
case "dns":
case "gamedig":
case "steam":
address = monitorJSON["hostname"];
if (monitorJSON["port"]) {
address += ":" + monitorJSON["port"];
}
break;
default:
address = monitorJSON["url"];
break;
await axios.post(webhookUrl.toString(), discordtestdata);
return okMsg;
}
// If heartbeatJSON is not null, we go into the normal alerting loop.
@ -59,7 +48,7 @@ class Discord extends NotificationProvider {
},
{
name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL",
value: monitorJSON["type"] === "push" ? "Heartbeat" : address,
value: this.extractAdress(monitorJSON),
},
{
name: `Time (${heartbeatJSON["timezone"]})`,
@ -72,12 +61,14 @@ class Discord extends NotificationProvider {
],
}],
};
if (notification.discordChannelType === "createNewForumPost") {
discorddowndata.thread_name = notification.postName;
}
if (notification.discordPrefixMessage) {
discorddowndata.content = notification.discordPrefixMessage;
}
await axios.post(notification.discordWebhookUrl, discorddowndata);
await axios.post(webhookUrl.toString(), discorddowndata);
return okMsg;
} else if (heartbeatJSON["status"] === UP) {
@ -94,7 +85,7 @@ class Discord extends NotificationProvider {
},
{
name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL",
value: monitorJSON["type"] === "push" ? "Heartbeat" : address,
value: this.extractAdress(monitorJSON),
},
{
name: `Time (${heartbeatJSON["timezone"]})`,
@ -108,11 +99,15 @@ class Discord extends NotificationProvider {
}],
};
if (notification.discordChannelType === "createNewForumPost") {
discordupdata.thread_name = notification.postName;
}
if (notification.discordPrefixMessage) {
discordupdata.content = notification.discordPrefixMessage;
}
await axios.post(notification.discordWebhookUrl, discordupdata);
await axios.post(webhookUrl.toString(), discordupdata);
return okMsg;
}
} catch (error) {

@ -25,25 +25,29 @@ class Feishu extends NotificationProvider {
if (heartbeatJSON["status"] === DOWN) {
let downdata = {
msg_type: "post",
content: {
post: {
zh_cn: {
title: "UptimeKuma Alert: [Down] " + monitorJSON["name"],
content: [
[
{
tag: "text",
text:
"[Down] " +
heartbeatJSON["msg"] +
`\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`
},
],
],
msg_type: "interactive",
card: {
config: {
update_multi: false,
wide_screen_mode: true,
},
header: {
title: {
tag: "plain_text",
content: "UptimeKuma Alert: [Down] " + monitorJSON["name"],
},
template: "red",
},
},
elements: [
{
tag: "div",
text: {
tag: "lark_md",
content: getContent(heartbeatJSON),
},
}
]
}
};
await axios.post(notification.feishuWebHookUrl, downdata);
return okMsg;
@ -51,25 +55,29 @@ class Feishu extends NotificationProvider {
if (heartbeatJSON["status"] === UP) {
let updata = {
msg_type: "post",
content: {
post: {
zh_cn: {
title: "UptimeKuma Alert: [Up] " + monitorJSON["name"],
content: [
[
{
tag: "text",
text:
"[Up] " +
heartbeatJSON["msg"] +
`\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`,
},
],
],
msg_type: "interactive",
card: {
config: {
update_multi: false,
wide_screen_mode: true,
},
header: {
title: {
tag: "plain_text",
content: "UptimeKuma Alert: [UP] " + monitorJSON["name"],
},
template: "green",
},
},
elements: [
{
tag: "div",
text: {
tag: "lark_md",
content: getContent(heartbeatJSON),
},
},
]
}
};
await axios.post(notification.feishuWebHookUrl, updata);
return okMsg;
@ -80,4 +88,17 @@ class Feishu extends NotificationProvider {
}
}
/**
* Get content
* @param {?object} heartbeatJSON Heartbeat details (For Up/Down only)
* @returns {string} Return Successful Message
*/
function getContent(heartbeatJSON) {
return [
"**Message**: " + heartbeatJSON["msg"],
"**Ping**: " + (heartbeatJSON["ping"] == null ? "N/A" : heartbeatJSON["ping"] + " ms"),
`**Time (${heartbeatJSON["timezone"]})**: ${heartbeatJSON["localDateTime"]}`
].join("\n");
}
module.exports = Feishu;

@ -62,6 +62,15 @@ class FlashDuty extends NotificationProvider {
* @returns {string} Success message
*/
async postNotification(notification, title, body, monitorInfo, eventStatus) {
let labels = {
resource: this.genMonitorUrl(monitorInfo),
check: monitorInfo.name,
};
if (monitorInfo.tags && monitorInfo.tags.length > 0) {
for (let tag of monitorInfo.tags) {
labels[tag.name] = tag.value;
}
}
const options = {
method: "POST",
url: "https://api.flashcat.cloud/event/push/alert/standard?integration_key=" + notification.flashdutyIntegrationKey,
@ -71,9 +80,7 @@ class FlashDuty extends NotificationProvider {
title,
event_status: eventStatus || "Info",
alert_key: String(monitorInfo.id) || Math.random().toString(36).substring(7),
labels: monitorInfo?.tags?.reduce((acc, item) => ({ ...acc,
[item.name]: item.value
}), { resource: this.genMonitorUrl(monitorInfo) }),
labels,
}
};

@ -0,0 +1,42 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
class Keep extends NotificationProvider {
name = "Keep";
/**
* @inheritdoc
*/
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
try {
let data = {
heartbeat: heartbeatJSON,
monitor: monitorJSON,
msg,
};
let config = {
headers: {
"x-api-key": notification.webhookAPIKey,
"content-type": "application/json",
},
};
let url = notification.webhookURL;
if (url.endsWith("/")) {
url = url.slice(0, -1);
}
let webhookURL = url + "/alerts/event/uptimekuma";
await axios.post(webhookURL, data, config);
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = Keep;

@ -19,6 +19,36 @@ class NotificationProvider {
throw new Error("Have to override Notification.send(...)");
}
/**
* Extracts the address from a monitor JSON object based on its type.
* @param {?object} monitorJSON Monitor details (For Up/Down only)
* @returns {string} The extracted address based on the monitor type.
*/
extractAdress(monitorJSON) {
if (!monitorJSON) {
return "";
}
switch (monitorJSON["type"]) {
case "push":
return "Heartbeat";
case "ping":
return monitorJSON["hostname"];
case "port":
case "dns":
case "gamedig":
case "steam":
if (monitorJSON["port"]) {
return monitorJSON["hostname"] + ":" + monitorJSON["port"];
}
return monitorJSON["hostname"];
default:
if (![ "https://", "http://", "" ].includes(monitorJSON["url"])) {
return monitorJSON["url"];
}
return "";
}
}
/**
* Throws an error
* @param {any} error The error to throw

@ -0,0 +1,57 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { DOWN, UP } = require("../../src/util");
class SevenIO extends NotificationProvider {
name = "SevenIO";
/**
* @inheritdoc
*/
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
const data = {
to: notification.sevenioTo,
from: notification.sevenioSender || "Uptime Kuma",
text: msg,
};
const config = {
baseURL: "https://gateway.seven.io/api/",
headers: {
"Content-Type": "application/json",
"X-API-Key": notification.sevenioApiKey,
},
};
try {
// testing or certificate expiry notification
if (heartbeatJSON == null) {
await axios.post("sms", data, config);
return okMsg;
}
let address = this.extractAdress(monitorJSON);
if (address !== "") {
address = `(${address}) `;
}
// If heartbeatJSON is not null, we go into the normal alerting loop.
if (heartbeatJSON["status"] === DOWN) {
data.text = `Your service ${monitorJSON["name"]} ${address}went down at ${heartbeatJSON["localDateTime"]} ` +
`(${heartbeatJSON["timezone"]}). Error: ${heartbeatJSON["msg"]}`;
} else if (heartbeatJSON["status"] === UP) {
data.text = `Your service ${monitorJSON["name"]} ${address}went back up at ${heartbeatJSON["localDateTime"]} ` +
`(${heartbeatJSON["timezone"]}).`;
}
await axios.post("sms", data, config);
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = SevenIO;

@ -48,7 +48,8 @@ class Slack extends NotificationProvider {
}
if (monitorJSON.url) {
const address = this.extractAdress(monitorJSON);
if (address) {
actions.push({
"type": "button",
"text": {
@ -56,7 +57,7 @@ class Slack extends NotificationProvider {
"text": "Visit site",
},
"value": "Site",
"url": monitorJSON.url,
"url": address,
});
}

@ -0,0 +1,46 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
class SMSPartner extends NotificationProvider {
name = "SMSPartner";
/**
* @inheritdoc
*/
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
const url = "https://api.smspartner.fr/v1/send";
try {
// smspartner does not support non ascii characters and only a maximum 639 characters
let cleanMsg = msg.replace(/[^\x00-\x7F]/g, "").substring(0, 639);
let data = {
"apiKey": notification.smspartnerApikey,
"sender": notification.smspartnerSenderName.substring(0, 11),
"phoneNumbers": notification.smspartnerPhoneNumber,
"message": cleanMsg,
};
let config = {
headers: {
"Content-Type": "application/json",
"cache-control": "no-cache",
"Accept": "application/json",
}
};
let resp = await axios.post(url, data, config);
if (resp.data.success !== true) {
throw Error(`Api returned ${resp.data.response.status}.`);
}
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = SMSPartner;

@ -93,12 +93,7 @@ class SMTP extends NotificationProvider {
if (monitorJSON !== null) {
monitorName = monitorJSON["name"];
if (monitorJSON["type"] === "http" || monitorJSON["type"] === "keyword" || monitorJSON["type"] === "json-query") {
monitorHostnameOrURL = monitorJSON["url"];
} else {
monitorHostnameOrURL = monitorJSON["hostname"];
}
monitorHostnameOrURL = this.extractAdress(monitorJSON);
}
let serviceStatus = "⚠️ Test";

@ -34,25 +34,7 @@ class Squadcast extends NotificationProvider {
data.status = "resolve";
}
let address;
switch (monitorJSON["type"]) {
case "ping":
address = monitorJSON["hostname"];
break;
case "port":
case "dns":
case "steam":
address = monitorJSON["hostname"];
if (monitorJSON["port"]) {
address += ":" + monitorJSON["port"];
}
break;
default:
address = monitorJSON["url"];
break;
}
data.tags["AlertAddress"] = address;
data.tags["AlertAddress"] = this.extractAdress(monitorJSON);
monitorJSON["tags"].forEach(tag => {
data.tags[tag["name"]] = {

@ -216,21 +216,6 @@ class Teams extends NotificationProvider {
return okMsg;
}
let monitorUrl;
switch (monitorJSON["type"]) {
case "http":
case "keywork":
monitorUrl = monitorJSON["url"];
break;
case "docker":
monitorUrl = monitorJSON["docker_host"];
break;
default:
monitorUrl = monitorJSON["hostname"];
break;
}
const baseURL = await setting("primaryBaseURL");
let dashboardUrl;
if (baseURL) {
@ -240,7 +225,7 @@ class Teams extends NotificationProvider {
const payload = this._notificationPayloadFactory({
heartbeatJSON: heartbeatJSON,
monitorName: monitorJSON.name,
monitorUrl: monitorUrl,
monitorUrl: this.extractAdress(monitorJSON),
dashboardUrl: dashboardUrl,
});

@ -0,0 +1,77 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
class Threema extends NotificationProvider {
name = "threema";
/**
* @inheritdoc
*/
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const url = "https://msgapi.threema.ch/send_simple";
const config = {
headers: {
"Accept": "*/*",
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
}
};
const data = {
from: notification.threemaSenderIdentity,
secret: notification.threemaSecret,
text: msg
};
switch (notification.threemaRecipientType) {
case "identity":
data.to = notification.threemaRecipient;
break;
case "phone":
data.phone = notification.threemaRecipient;
break;
case "email":
data.email = notification.threemaRecipient;
break;
default:
throw new Error(`Unsupported recipient type: ${notification.threemaRecipientType}`);
}
try {
await axios.post(url, new URLSearchParams(data), config);
return "Threema notification sent successfully.";
} catch (error) {
const errorMessage = this.handleApiError(error);
this.throwGeneralAxiosError(errorMessage);
}
}
/**
* Handle Threema API errors
* @param {any} error The error to handle
* @returns {string} Additional error context
*/
handleApiError(error) {
if (!error.response) {
return error.message;
}
switch (error.response.status) {
case 400:
return "Invalid recipient identity or account not set up for basic mode (400).";
case 401:
return "Incorrect API identity or secret (401).";
case 402:
return "No credits remaining (402).";
case 404:
return "Recipient not found (404).";
case 413:
return "Message is too long (413).";
case 500:
return "Temporary internal server error (500).";
default:
return error.message;
}
}
}
module.exports = Threema;

@ -13,9 +13,9 @@ class ZohoCliq extends NotificationProvider {
*/
_statusMessageFactory = (status, monitorName) => {
if (status === DOWN) {
return `🔴 Application [${monitorName}] went down\n`;
return `🔴 [${monitorName}] went down\n`;
} else if (status === UP) {
return `✅ Application [${monitorName}] is back online\n`;
return `### ✅ [${monitorName}] is back online\n`;
}
return "Notification\n";
};
@ -46,16 +46,11 @@ class ZohoCliq extends NotificationProvider {
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})`);
payload.push(`*URL:* ${monitorUrl}`);
}
return payload;
@ -87,24 +82,10 @@ class ZohoCliq extends NotificationProvider {
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,
monitorUrl: this.extractAdress(monitorJSON),
status: heartbeatJSON.status
});

@ -5,6 +5,7 @@ const AlertNow = require("./notification-providers/alertnow");
const AliyunSms = require("./notification-providers/aliyun-sms");
const Apprise = require("./notification-providers/apprise");
const Bark = require("./notification-providers/bark");
const Bitrix24 = require("./notification-providers/bitrix24");
const ClickSendSMS = require("./notification-providers/clicksendsms");
const CallMeBot = require("./notification-providers/call-me-bot");
const SMSC = require("./notification-providers/smsc");
@ -18,6 +19,7 @@ const Gotify = require("./notification-providers/gotify");
const GrafanaOncall = require("./notification-providers/grafana-oncall");
const HomeAssistant = require("./notification-providers/home-assistant");
const HeiiOnCall = require("./notification-providers/heii-oncall");
const Keep = require("./notification-providers/keep");
const Kook = require("./notification-providers/kook");
const Line = require("./notification-providers/line");
const LineNotify = require("./notification-providers/linenotify");
@ -41,6 +43,7 @@ const RocketChat = require("./notification-providers/rocket-chat");
const SerwerSMS = require("./notification-providers/serwersms");
const Signal = require("./notification-providers/signal");
const Slack = require("./notification-providers/slack");
const SMSPartner = require("./notification-providers/smspartner");
const SMSEagle = require("./notification-providers/smseagle");
const SMTP = require("./notification-providers/smtp");
const Squadcast = require("./notification-providers/squadcast");
@ -48,6 +51,7 @@ const Stackfield = require("./notification-providers/stackfield");
const Teams = require("./notification-providers/teams");
const TechulusPush = require("./notification-providers/techulus-push");
const Telegram = require("./notification-providers/telegram");
const Threema = require("./notification-providers/threema");
const Twilio = require("./notification-providers/twilio");
const Splunk = require("./notification-providers/splunk");
const Webhook = require("./notification-providers/webhook");
@ -56,6 +60,7 @@ 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");
const SevenIO = require("./notification-providers/sevenio");
const Whapi = require("./notification-providers/whapi");
const GtxMessaging = require("./notification-providers/gtx-messaging");
const Cellsynt = require("./notification-providers/cellsynt");
@ -81,6 +86,7 @@ class Notification {
new AliyunSms(),
new Apprise(),
new Bark(),
new Bitrix24(),
new ClickSendSMS(),
new CallMeBot(),
new SMSC(),
@ -94,6 +100,7 @@ class Notification {
new GrafanaOncall(),
new HomeAssistant(),
new HeiiOnCall(),
new Keep(),
new Kook(),
new Line(),
new LineNotify(),
@ -118,6 +125,7 @@ class Notification {
new SerwerSMS(),
new Signal(),
new SMSManager(),
new SMSPartner(),
new Slack(),
new SMSEagle(),
new SMTP(),
@ -126,12 +134,14 @@ class Notification {
new Teams(),
new TechulusPush(),
new Telegram(),
new Threema(),
new Twilio(),
new Splunk(),
new Webhook(),
new WeCom(),
new GoAlert(),
new ZohoCliq(),
new SevenIO(),
new Whapi(),
new GtxMessaging(),
new Cellsynt(),

@ -80,23 +80,25 @@ class Prometheus {
}
}
try {
monitorStatus.set(this.monitorLabelValues, heartbeat.status);
} catch (e) {
log.error("prometheus", "Caught error");
log.error("prometheus", e);
}
if (heartbeat) {
try {
monitorStatus.set(this.monitorLabelValues, heartbeat.status);
} catch (e) {
log.error("prometheus", "Caught error");
log.error("prometheus", e);
}
try {
if (typeof heartbeat.ping === "number") {
monitorResponseTime.set(this.monitorLabelValues, heartbeat.ping);
} else {
// Is it good?
monitorResponseTime.set(this.monitorLabelValues, -1);
try {
if (typeof heartbeat.ping === "number") {
monitorResponseTime.set(this.monitorLabelValues, heartbeat.ping);
} else {
// Is it good?
monitorResponseTime.set(this.monitorLabelValues, -1);
}
} catch (e) {
log.error("prometheus", "Caught error");
log.error("prometheus", e);
}
} catch (e) {
log.error("prometheus", "Caught error");
log.error("prometheus", e);
}
}

@ -44,9 +44,8 @@ router.get("/api/entry-page", async (request, response) => {
response.json(result);
});
router.get("/api/push/:pushToken", async (request, response) => {
router.all("/api/push/:pushToken", async (request, response) => {
try {
let pushToken = request.params.pushToken;
let msg = request.query.msg || "OK";
let ping = parseFloat(request.query.ping) || null;
@ -233,8 +232,8 @@ router.get("/api/badge/:id/uptime/:duration?", cache("5 minutes"), async (reques
let requestedDuration = request.params.duration !== undefined ? request.params.duration : "24h";
const overrideValue = value && parseFloat(value);
if (requestedDuration === "24") {
requestedDuration = "24h";
if (/^[0-9]+$/.test(requestedDuration)) {
requestedDuration = `${requestedDuration}h`;
}
let publicMonitor = await R.getRow(`
@ -266,7 +265,7 @@ router.get("/api/badge/:id/uptime/:duration?", cache("5 minutes"), async (reques
// build a label string. If a custom label is given, override the default one (requestedDuration)
badgeValues.label = filterAndJoin([
labelPrefix,
label ?? `Uptime (${requestedDuration}${labelSuffix})`,
label ?? `Uptime (${requestedDuration.slice(0, -1)}${labelSuffix})`,
]);
badgeValues.message = filterAndJoin([ prefix, cleanUptime, suffix ]);
}
@ -303,8 +302,8 @@ router.get("/api/badge/:id/ping/:duration?", cache("5 minutes"), async (request,
let requestedDuration = request.params.duration !== undefined ? request.params.duration : "24h";
const overrideValue = value && parseFloat(value);
if (requestedDuration === "24") {
requestedDuration = "24h";
if (/^[0-9]+$/.test(requestedDuration)) {
requestedDuration = `${requestedDuration}h`;
}
// Check if monitor is public
@ -326,7 +325,7 @@ router.get("/api/badge/:id/ping/:duration?", cache("5 minutes"), async (request,
// use a given, custom labelColor or use the default badge label color (defined by badge-maker)
badgeValues.labelColor = labelColor ?? "";
// build a lable string. If a custom label is given, override the default one (requestedDuration)
badgeValues.label = filterAndJoin([ labelPrefix, label ?? `Avg. Ping (${requestedDuration}${labelSuffix})` ]);
badgeValues.label = filterAndJoin([ labelPrefix, label ?? `Avg. Ping (${requestedDuration.slice(0, -1)}${labelSuffix})` ]);
badgeValues.message = filterAndJoin([ prefix, avgPing, suffix ]);
}

@ -149,6 +149,7 @@ const apicache = require("./modules/apicache");
const { resetChrome } = require("./monitor-types/real-browser-monitor-type");
const { EmbeddedMariaDB } = require("./embedded-mariadb");
const { SetupDatabase } = require("./setup-database");
const { chartSocketHandler } = require("./socket-handlers/chart-socket-handler");
app.use(express.json());
@ -830,6 +831,10 @@ let needSetup = false;
monitor.kafkaProducerAllowAutoTopicCreation;
bean.gamedigGivenPortOnly = monitor.gamedigGivenPortOnly;
bean.remote_browser = monitor.remote_browser;
bean.snmpVersion = monitor.snmpVersion;
bean.snmpOid = monitor.snmpOid;
bean.jsonPathOperator = monitor.jsonPathOperator;
bean.timeout = monitor.timeout;
bean.validate();
@ -1319,6 +1324,12 @@ let needSetup = false;
await doubleCheckPassword(socket, currentPassword);
}
// Log out all clients if enabling auth
// GHSA-23q2-5gf8-gjpp
if (currentDisabledAuth && !data.disableAuth) {
server.disconnectAllSocketClients(socket.userID, socket.id);
}
const previousChromeExecutable = await Settings.get("chromeExecutable");
const previousNSCDStatus = await Settings.get("nscd");
@ -1522,6 +1533,7 @@ let needSetup = false;
apiKeySocketHandler(socket);
remoteBrowserSocketHandler(socket);
generalSocketHandler(socket, server);
chartSocketHandler(socket);
log.debug("server", "added all socket handlers");
@ -1535,6 +1547,7 @@ let needSetup = false;
await afterLogin(socket, await R.findOne("user"));
socket.emit("autoLogin");
} else {
socket.emit("loginRequired");
log.debug("auth", "need auth");
}

@ -0,0 +1,38 @@
const { checkLogin } = require("../util-server");
const { UptimeCalculator } = require("../uptime-calculator");
const { log } = require("../../src/util");
module.exports.chartSocketHandler = (socket) => {
socket.on("getMonitorChartData", async (monitorID, period, callback) => {
try {
checkLogin(socket);
log.debug("monitor", `Get Monitor Chart Data: ${monitorID} User ID: ${socket.userID}`);
if (period == null) {
throw new Error("Invalid period.");
}
let uptimeCalculator = await UptimeCalculator.getUptimeCalculator(monitorID);
let data;
if (period <= 24) {
data = uptimeCalculator.getDataArray(period * 60, "minute");
} else if (period <= 720) {
data = uptimeCalculator.getDataArray(period, "hour");
} else {
data = uptimeCalculator.getDataArray(period / 24, "day");
}
callback({
ok: true,
data,
});
} catch (e) {
callback({
ok: false,
msg: e.message,
});
}
});
};

@ -148,13 +148,14 @@ module.exports.statusPageSocketHandler = (socket) => {
config.logo = `/upload/${filename}?t=` + Date.now();
} else {
config.icon = imgDataUrl;
config.logo = imgDataUrl;
}
statusPage.slug = config.slug;
statusPage.title = config.title;
statusPage.description = config.description;
statusPage.icon = config.logo;
statusPage.autoRefreshInterval = config.autoRefreshInterval,
statusPage.theme = config.theme;
//statusPage.published = ;
//statusPage.search_engine_index = ;
@ -280,6 +281,7 @@ module.exports.statusPageSocketHandler = (socket) => {
statusPage.title = title;
statusPage.theme = "auto";
statusPage.icon = "";
statusPage.autoRefreshInterval = 300;
await R.store(statusPage);
callback({

@ -290,7 +290,7 @@ class UptimeCalculator {
dailyStatBean.pingMax = dailyData.maxPing;
{
// eslint-disable-next-line no-unused-vars
const { up, down, avgPing, minPing, maxPing, ...extras } = dailyData;
const { up, down, avgPing, minPing, maxPing, timestamp, ...extras } = dailyData;
if (Object.keys(extras).length > 0) {
dailyStatBean.extras = JSON.stringify(extras);
}
@ -305,7 +305,7 @@ class UptimeCalculator {
hourlyStatBean.pingMax = hourlyData.maxPing;
{
// eslint-disable-next-line no-unused-vars
const { up, down, avgPing, minPing, maxPing, ...extras } = hourlyData;
const { up, down, avgPing, minPing, maxPing, timestamp, ...extras } = hourlyData;
if (Object.keys(extras).length > 0) {
hourlyStatBean.extras = JSON.stringify(extras);
}
@ -320,7 +320,7 @@ class UptimeCalculator {
minutelyStatBean.pingMax = minutelyData.maxPing;
{
// eslint-disable-next-line no-unused-vars
const { up, down, avgPing, minPing, maxPing, ...extras } = minutelyData;
const { up, down, avgPing, minPing, maxPing, timestamp, ...extras } = minutelyData;
if (Object.keys(extras).length > 0) {
minutelyStatBean.extras = JSON.stringify(extras);
}
@ -543,7 +543,9 @@ class UptimeCalculator {
if (type === "minute" && num > 24 * 60) {
throw new Error("The maximum number of minutes is 1440");
}
if (type === "day" && num > 365) {
throw new Error("The maximum number of days is 365");
}
// Get the current time period key based on the type
let key = this.getKey(this.getCurrentDate(), type);
@ -741,20 +743,36 @@ class UptimeCalculator {
}
/**
* Get the uptime data by duration
* @param {'24h'|'30d'|'1y'} duration Only accept 24h, 30d, 1y
* Get the uptime data for given duration.
* @param {string} duration A string with a number and a unit (m,h,d,w,M,y), such as 24h, 30d, 1y.
* @returns {UptimeDataResult} UptimeDataResult
* @throws {Error} Invalid duration
* @throws {Error} Invalid duration / Unsupported unit
*/
getDataByDuration(duration) {
if (duration === "24h") {
return this.get24Hour();
} else if (duration === "30d") {
return this.get30Day();
} else if (duration === "1y") {
return this.get1Year();
} else {
throw new Error("Invalid duration");
const durationNumStr = duration.slice(0, -1);
if (!/^[0-9]+$/.test(durationNumStr)) {
throw new Error(`Invalid duration: ${duration}`);
}
const num = Number(durationNumStr);
const unit = duration.slice(-1);
switch (unit) {
case "m":
return this.getData(num, "minute");
case "h":
return this.getData(num, "hour");
case "d":
return this.getData(num, "day");
case "w":
return this.getData(7 * num, "day");
case "M":
return this.getData(30 * num, "day");
case "y":
return this.getData(365 * num, "day");
default:
throw new Error(`Unsupported unit (${unit}) for badge duration ${duration}`
);
}
}

@ -113,6 +113,8 @@ class UptimeKumaServer {
UptimeKumaServer.monitorTypeList["tailscale-ping"] = new TailscalePing();
UptimeKumaServer.monitorTypeList["dns"] = new DnsMonitorType();
UptimeKumaServer.monitorTypeList["mqtt"] = new MqttMonitorType();
UptimeKumaServer.monitorTypeList["snmp"] = new SNMPMonitorType();
UptimeKumaServer.monitorTypeList["mongodb"] = new MongodbMonitorType();
// Allow all CORS origins (polling) in development
let cors = undefined;
@ -516,3 +518,5 @@ const { RealBrowserMonitorType } = require("./monitor-types/real-browser-monitor
const { TailscalePing } = require("./monitor-types/tailscale-ping");
const { DnsMonitorType } = require("./monitor-types/dns");
const { MqttMonitorType } = require("./monitor-types/mqtt");
const { SNMPMonitorType } = require("./monitor-types/snmp");
const { MongodbMonitorType } = require("./monitor-types/mongodb");

@ -11,8 +11,7 @@ const mssql = require("mssql");
const { Client } = require("pg");
const postgresConParse = require("pg-connection-string").parse;
const mysql = require("mysql2");
const { MongoClient } = require("mongodb");
const { NtlmClient } = require("axios-ntlm");
const { NtlmClient } = require("./modules/axios-ntlm/lib/ntlmClient.js");
const { Settings } = require("./settings");
const grpc = require("@grpc/grpc-js");
const protojs = require("protobufjs");
@ -437,24 +436,6 @@ exports.mysqlQuery = function (connectionString, query, password = undefined) {
});
};
/**
* Connect to and ping a MongoDB database
* @param {string} connectionString The database connection string
* @returns {Promise<(string[] | object[] | object)>} Response from
* server
*/
exports.mongodbPing = async function (connectionString) {
let client = await MongoClient.connect(connectionString);
let dbPing = await client.db().command({ ping: 1 });
await client.close();
if (dbPing["ok"] === 1) {
return "UP";
} else {
throw Error("failed");
}
};
/**
* Query radius server
* @param {string} hostname Hostname of radius server
@ -505,12 +486,16 @@ exports.radius = function (
/**
* Redis server ping
* @param {string} dsn The redis connection string
* @returns {Promise<any>} Response from redis server
* @param {boolean} rejectUnauthorized If false, allows unverified server certificates.
* @returns {Promise<any>} Response from server
*/
exports.redisPingAsync = function (dsn) {
exports.redisPingAsync = function (dsn, rejectUnauthorized) {
return new Promise((resolve, reject) => {
const client = redis.createClient({
url: dsn
url: dsn,
socket: {
rejectUnauthorized
}
});
client.on("error", (err) => {
if (client.isOpen) {
@ -653,21 +638,27 @@ const parseCertificateInfo = function (info) {
/**
* Check if certificate is valid
* @param {object} res Response object from axios
* @param {tls.TLSSocket} socket TLSSocket, which may or may not be connected
* @returns {object} Object containing certificate information
* @throws No socket was found to check certificate for
*/
exports.checkCertificate = function (res) {
if (!res.request.res.socket) {
throw new Error("No socket found");
exports.checkCertificate = function (socket) {
let certInfoStartTime = dayjs().valueOf();
// Return null if there is no socket
if (socket === undefined || socket == null) {
return null;
}
const info = res.request.res.socket.getPeerCertificate(true);
const valid = res.request.res.socket.authorized || false;
const info = socket.getPeerCertificate(true);
const valid = socket.authorized || false;
log.debug("cert", "Parsing Certificate Info");
const parsedInfo = parseCertificateInfo(info);
if (process.env.TIMELOGGER === "1") {
log.debug("monitor", "Cert Info Query Time: " + (dayjs().valueOf() - certInfoStartTime) + "ms");
}
return {
valid: valid,
certInfo: parsedInfo

@ -114,6 +114,7 @@ export default {
"AlertNow": "AlertNow",
"apprise": this.$t("apprise"),
"Bark": "Bark",
"Bitrix24": "Bitrix24",
"clicksendsms": "ClickSend SMS",
"CallMeBot": "CallMeBot (WhatsApp, Telegram Call, Facebook Messanger)",
"discord": "Discord",
@ -123,6 +124,7 @@ export default {
"GrafanaOncall": "Grafana Oncall",
"HeiiOnCall": "Heii On-Call",
"HomeAssistant": "Home Assistant",
"Keep": "Keep",
"Kook": "Kook",
"line": "LINE Messenger",
"LineNotify": "LINE Notify",
@ -145,15 +147,18 @@ export default {
"slack": "Slack",
"squadcast": "SquadCast",
"SMSEagle": "SMSEagle",
"SMSPartner": "SMS Partner",
"smtp": this.$t("smtp"),
"stackfield": "Stackfield",
"teams": "Microsoft Teams",
"telegram": "Telegram",
"threema": "Threema",
"twilio": "Twilio",
"Splunk": "Splunk",
"webhook": "Webhook",
"GoAlert": "GoAlert",
"ZohoCliq": "ZohoCliq",
"SevenIO": "SevenIO",
"whapi": "WhatsApp (Whapi)",
"gtxmessaging": "GtxMessaging",
"Cellsynt": "Cellsynt",

@ -1,16 +1,24 @@
<template>
<div>
<div class="period-options">
<button type="button" class="btn btn-light dropdown-toggle btn-period-toggle" data-bs-toggle="dropdown" aria-expanded="false">
<button
type="button" class="btn btn-light dropdown-toggle btn-period-toggle" data-bs-toggle="dropdown"
aria-expanded="false"
>
{{ chartPeriodOptions[chartPeriodHrs] }}&nbsp;
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li v-for="(item, key) in chartPeriodOptions" :key="key">
<a class="dropdown-item" :class="{ active: chartPeriodHrs == key }" href="#" @click="chartPeriodHrs = key">{{ item }}</a>
<button
type="button" class="dropdown-item" :class="{ active: chartPeriodHrs == key }"
@click="chartPeriodHrs = key"
>
{{ item }}
</button>
</li>
</ul>
</div>
<div class="chart-wrapper" :class="{ loading : loading}">
<div class="chart-wrapper" :class="{ loading: loading }">
<Line :data="chartData" :options="chartOptions" />
</div>
</div>
@ -19,9 +27,8 @@
<script lang="js">
import { BarController, BarElement, Chart, Filler, LinearScale, LineController, LineElement, PointElement, TimeScale, Tooltip } from "chart.js";
import "chartjs-adapter-dayjs-4";
import dayjs from "dayjs";
import { Line } from "vue-chartjs";
import { DOWN, PENDING, MAINTENANCE, log } from "../util.ts";
import { UP, DOWN, PENDING, MAINTENANCE } from "../util.ts";
Chart.register(LineController, BarController, LineElement, PointElement, TimeScale, BarElement, LinearScale, Tooltip, Filler);
@ -39,8 +46,9 @@ export default {
loading: false,
// Configurable filtering on top of the returned data
chartPeriodHrs: 0,
// Time period for the chart to display, in hours
// Initial value is 0 as a workaround for triggering a data fetch on created()
chartPeriodHrs: "0",
chartPeriodOptions: {
0: this.$t("recent"),
@ -50,9 +58,8 @@ export default {
168: "1w",
},
// A heartbeatList for 3h, 6h, 24h, 1w
// Uses the $root.heartbeatList when value is null
heartbeatList: null
chartRawData: null,
chartDataFetchInterval: null,
};
},
computed: {
@ -157,34 +164,197 @@ export default {
};
},
chartData() {
if (this.chartPeriodHrs === "0") {
return this.getChartDatapointsFromHeartbeatList();
} else {
return this.getChartDatapointsFromStats();
}
},
},
watch: {
// Update chart data when the selected chart period changes
chartPeriodHrs: function (newPeriod) {
if (this.chartDataFetchInterval) {
clearInterval(this.chartDataFetchInterval);
this.chartDataFetchInterval = null;
}
// eslint-disable-next-line eqeqeq
if (newPeriod == "0") {
this.heartbeatList = null;
this.$root.storage().removeItem(`chart-period-${this.monitorId}`);
} else {
this.loading = true;
let period;
try {
period = parseInt(newPeriod);
} catch (e) {
// Invalid period
period = 24;
}
this.$root.getMonitorChartData(this.monitorId, period, (res) => {
if (!res.ok) {
this.$root.toastError(res.msg);
} else {
this.chartRawData = res.data;
this.$root.storage()[`chart-period-${this.monitorId}`] = newPeriod;
}
this.loading = false;
});
this.chartDataFetchInterval = setInterval(() => {
this.$root.getMonitorChartData(this.monitorId, period, (res) => {
if (res.ok) {
this.chartRawData = res.data;
}
});
}, 5 * 60 * 1000);
}
}
},
created() {
// Load chart period from storage if saved
let period = this.$root.storage()[`chart-period-${this.monitorId}`];
if (period != null) {
// Has this ever been not a string?
if (typeof period !== "string") {
period = period.toString();
}
this.chartPeriodHrs = period;
} else {
this.chartPeriodHrs = "24";
}
},
beforeUnmount() {
if (this.chartDataFetchInterval) {
clearInterval(this.chartDataFetchInterval);
}
},
methods: {
// Get color of bar chart for this datapoint
getBarColorForDatapoint(datapoint) {
if (datapoint.maintenance != null) {
// Target is in maintenance
return "rgba(23,71,245,0.41)";
} else if (datapoint.down === 0) {
// Target is up, no need to display a bar
return "#000";
} else if (datapoint.up === 0) {
// Target is down
return "rgba(220, 53, 69, 0.41)";
} else {
// Show yellow for mixed status
return "rgba(245, 182, 23, 0.41)";
}
},
// push datapoint to chartData
pushDatapoint(datapoint, avgPingData, minPingData, maxPingData, downData, colorData) {
const x = this.$root.unixToDateTime(datapoint.timestamp);
// Show ping values if it was up in this period
avgPingData.push({
x,
y: datapoint.up > 0 && datapoint.avgPing > 0 ? datapoint.avgPing : null,
});
minPingData.push({
x,
y: datapoint.up > 0 && datapoint.avgPing > 0 ? datapoint.minPing : null,
});
maxPingData.push({
x,
y: datapoint.up > 0 && datapoint.avgPing > 0 ? datapoint.maxPing : null,
});
downData.push({
x,
y: datapoint.down + (datapoint.maintenance || 0),
});
colorData.push(this.getBarColorForDatapoint(datapoint));
},
// get the average of a set of datapoints
getAverage(datapoints) {
const totalUp = datapoints.reduce((total, current) => total + current.up, 0);
const totalDown = datapoints.reduce((total, current) => total + current.down, 0);
const totalMaintenance = datapoints.reduce((total, current) => total + (current.maintenance || 0), 0);
const totalPing = datapoints.reduce((total, current) => total + current.avgPing * current.up, 0);
const minPing = datapoints.reduce((min, current) => Math.min(min, current.minPing), Infinity);
const maxPing = datapoints.reduce((max, current) => Math.max(max, current.maxPing), 0);
// Find the middle timestamp to use
let midpoint = Math.floor(datapoints.length / 2);
return {
timestamp: datapoints[midpoint].timestamp,
up: totalUp,
down: totalDown,
maintenance: totalMaintenance > 0 ? totalMaintenance : undefined,
avgPing: totalUp > 0 ? totalPing / totalUp : 0,
minPing,
maxPing,
};
},
getChartDatapointsFromHeartbeatList() {
// Render chart using heartbeatList
let lastHeartbeatTime;
const monitorInterval = this.$root.monitorList[this.monitorId]?.interval;
let pingData = []; // Ping Data for Line Chart, y-axis contains ping time
let downData = []; // Down Data for Bar Chart, y-axis is 1 if target is down (red color), under maintenance (blue color) or pending (orange color), 0 if target is up
let colorData = []; // Color Data for Bar Chart
let heartbeatList = this.heartbeatList ||
(this.monitorId in this.$root.heartbeatList && this.$root.heartbeatList[this.monitorId]) ||
[];
heartbeatList
.filter(
// Filtering as data gets appended
// not the most efficient, but works for now
(beat) => dayjs.utc(beat.time).tz(this.$root.timezone).isAfter(
dayjs().subtract(Math.max(this.chartPeriodHrs, 6), "hours")
)
)
.map((beat) => {
const x = this.$root.datetime(beat.time);
pingData.push({
x,
y: beat.ping,
});
downData.push({
x,
y: (beat.status === DOWN || beat.status === MAINTENANCE || beat.status === PENDING) ? 1 : 0,
});
colorData.push((beat.status === MAINTENANCE) ? "rgba(23,71,245,0.41)" : ((beat.status === PENDING) ? "rgba(245,182,23,0.41)" : "#DC354568"));
let heartbeatList = (this.monitorId in this.$root.heartbeatList && this.$root.heartbeatList[this.monitorId]) || [];
for (const beat of heartbeatList) {
const beatTime = this.$root.toDayjs(beat.time);
const x = beatTime.format("YYYY-MM-DD HH:mm:ss");
// Insert empty datapoint to separate big gaps
if (lastHeartbeatTime && monitorInterval) {
const diff = Math.abs(beatTime.diff(lastHeartbeatTime));
if (diff > monitorInterval * 1000 * 10) {
// Big gap detected
const gapX = [
lastHeartbeatTime.add(monitorInterval, "second").format("YYYY-MM-DD HH:mm:ss"),
beatTime.subtract(monitorInterval, "second").format("YYYY-MM-DD HH:mm:ss")
];
for (const x of gapX) {
pingData.push({
x,
y: null,
});
downData.push({
x,
y: null,
});
colorData.push("#000");
}
}
}
pingData.push({
x,
y: beat.status === UP ? beat.ping : null,
});
downData.push({
x,
y: (beat.status === DOWN || beat.status === MAINTENANCE || beat.status === PENDING) ? 1 : 0,
});
switch (beat.status) {
case MAINTENANCE:
colorData.push("rgba(23 ,71, 245, 0.41)");
break;
case PENDING:
colorData.push("rgba(245, 182, 23, 0.41)");
break;
default:
colorData.push("rgba(220, 53, 69, 0.41)");
}
lastHeartbeatTime = beatTime;
}
return {
datasets: [
@ -214,54 +384,155 @@ export default {
],
};
},
},
watch: {
// Update chart data when the selected chart period changes
chartPeriodHrs: function (newPeriod) {
getChartDatapointsFromStats() {
// Render chart using UptimeCalculator data
let lastHeartbeatTime;
const monitorInterval = this.$root.monitorList[this.monitorId]?.interval;
// eslint-disable-next-line eqeqeq
if (newPeriod == "0") {
this.heartbeatList = null;
this.$root.storage().removeItem(`chart-period-${this.monitorId}`);
} else {
this.loading = true;
let avgPingData = []; // Ping Data for Line Chart, y-axis contains ping time
let minPingData = []; // Ping Data for Line Chart, y-axis contains ping time
let maxPingData = []; // Ping Data for Line Chart, y-axis contains ping time
let downData = []; // Down Data for Bar Chart, y-axis is number of down datapoints in this period
let colorData = []; // Color Data for Bar Chart
this.$root.getMonitorBeats(this.monitorId, newPeriod, (res) => {
if (!res.ok) {
this.$root.toastError(res.msg);
} else {
this.heartbeatList = res.data;
this.$root.storage()[`chart-period-${this.monitorId}`] = newPeriod;
const period = parseInt(this.chartPeriodHrs);
let aggregatePoints = period > 6 ? 12 : 4;
let aggregateBuffer = [];
if (this.chartRawData) {
for (const datapoint of this.chartRawData) {
// Empty datapoints are ignored
if (datapoint.up === 0 && datapoint.down === 0 && datapoint.maintenance === 0) {
continue;
}
this.loading = false;
});
}
}
},
created() {
// Setup Watcher on the root heartbeatList,
// And mirror latest change to this.heartbeatList
this.$watch(() => this.$root.heartbeatList[this.monitorId],
(heartbeatList) => {
log.debug("ping_chart", `this.chartPeriodHrs type ${typeof this.chartPeriodHrs}, value: ${this.chartPeriodHrs}`);
// eslint-disable-next-line eqeqeq
if (this.chartPeriodHrs != "0") {
const newBeat = heartbeatList.at(-1);
if (newBeat && dayjs.utc(newBeat.time) > dayjs.utc(this.heartbeatList.at(-1)?.time)) {
this.heartbeatList.push(heartbeatList.at(-1));
const beatTime = this.$root.unixToDayjs(datapoint.timestamp);
// Insert empty datapoint to separate big gaps
if (lastHeartbeatTime && monitorInterval) {
const diff = Math.abs(beatTime.diff(lastHeartbeatTime));
const oneSecond = 1000;
const oneMinute = oneSecond * 60;
const oneHour = oneMinute * 60;
if ((period <= 24 && diff > Math.max(oneMinute * 10, monitorInterval * oneSecond * 10)) ||
(period > 24 && diff > Math.max(oneHour * 10, monitorInterval * oneSecond * 10))) {
// Big gap detected
// Clear the aggregate buffer
if (aggregateBuffer.length > 0) {
const average = this.getAverage(aggregateBuffer);
this.pushDatapoint(average, avgPingData, minPingData, maxPingData, downData, colorData);
aggregateBuffer = [];
}
const gapX = [
lastHeartbeatTime.subtract(monitorInterval, "second").format("YYYY-MM-DD HH:mm:ss"),
this.$root.unixToDateTime(datapoint.timestamp + 60),
];
for (const x of gapX) {
avgPingData.push({
x,
y: null,
});
minPingData.push({
x,
y: null,
});
maxPingData.push({
x,
y: null,
});
downData.push({
x,
y: null,
});
colorData.push("#000");
}
}
}
if (datapoint.up > 0 && this.chartRawData.length > aggregatePoints * 2) {
// Aggregate Up data using a sliding window
aggregateBuffer.push(datapoint);
if (aggregateBuffer.length === aggregatePoints) {
const average = this.getAverage(aggregateBuffer);
this.pushDatapoint(average, avgPingData, minPingData, maxPingData, downData, colorData);
// Remove the first half of the buffer
aggregateBuffer = aggregateBuffer.slice(Math.floor(aggregatePoints / 2));
}
} else {
// datapoint is fully down or too few datapoints, no need to aggregate
// Clear the aggregate buffer
if (aggregateBuffer.length > 0) {
const average = this.getAverage(aggregateBuffer);
this.pushDatapoint(average, avgPingData, minPingData, maxPingData, downData, colorData);
aggregateBuffer = [];
}
this.pushDatapoint(datapoint, avgPingData, minPingData, maxPingData, downData, colorData);
}
lastHeartbeatTime = beatTime;
}
},
{ deep: true }
);
// Clear the aggregate buffer if there are still datapoints
if (aggregateBuffer.length > 0) {
const average = this.getAverage(aggregateBuffer);
this.pushDatapoint(average, avgPingData, minPingData, maxPingData, downData, colorData);
aggregateBuffer = [];
}
}
// Load chart period from storage if saved
let period = this.$root.storage()[`chart-period-${this.monitorId}`];
if (period != null) {
this.chartPeriodHrs = Math.min(period, 6);
}
return {
datasets: [
{
// average ping chart
data: avgPingData,
fill: "origin",
tension: 0.2,
borderColor: "#5CDD8B",
backgroundColor: "#5CDD8B06",
yAxisID: "y",
label: "avg-ping",
},
{
// minimum ping chart
data: minPingData,
fill: "origin",
tension: 0.2,
borderColor: "#3CBD6B38",
backgroundColor: "#5CDD8B06",
yAxisID: "y",
label: "min-ping",
},
{
// maximum ping chart
data: maxPingData,
fill: "origin",
tension: 0.2,
borderColor: "#7CBD6B38",
backgroundColor: "#5CDD8B06",
yAxisID: "y",
label: "max-ping",
},
{
// Bar Chart
type: "bar",
data: downData,
borderColor: "#00000000",
backgroundColor: colorData,
yAxisID: "y1",
barThickness: "flex",
barPercentage: 1,
categoryPercentage: 1,
inflateAmount: 0.05,
label: "status",
},
],
};
},
}
};
</script>
@ -296,6 +567,7 @@ export default {
.dark & {
background: $dark-bg;
color: $dark-font-color;
}
.dark &:hover {

@ -0,0 +1,24 @@
<template>
<div class="mb-3">
<label for="bitrix24-webhook-url" class="form-label">{{ $t("Bitrix24 Webhook URL") }}</label>
<HiddenInput id="bitrix24-webhook-url" v-model="$parent.notification.bitrix24WebhookURL" :required="true" autocomplete="new-password"></HiddenInput>
<i18n-t tag="div" keypath="wayToGetBitrix24Webhook" class="form-text">
<a href="https://helpdesk.bitrix24.com/open/12357038/" target="_blank">https://helpdesk.bitrix24.com/open/12357038/</a>
</i18n-t>
</div>
<div class="mb-3">
<label for="bitrix24-user-id" class="form-label">{{ $t("User ID") }}</label>
<input id="bitrix24-user-id" v-model="$parent.notification.bitrix24UserID" type="text" class="form-control" required>
<div class="form-text">{{ $t("bitrix24SupportUserID") }}</div>
</div>
</template>
<script>
import HiddenInput from "../HiddenInput.vue";
export default {
components: {
HiddenInput,
}
};
</script>

@ -2,9 +2,10 @@
<div class="mb-3">
<label for="WebHookUrl" class="form-label">{{ $t("WebHookUrl") }}<span style="color: red;"><sup>*</sup></span></label>
<input id="WebHookUrl" v-model="$parent.notification.webHookUrl" type="text" class="form-control" required>
</div>
<div class="mb-3">
<label for="secretKey" class="form-label">{{ $t("SecretKey") }}<span style="color: red;"><sup>*</sup></span></label>
<input id="secretKey" v-model="$parent.notification.secretKey" type="text" class="form-control" required>
<HiddenInput id="secretKey" v-model="$parent.notification.secretKey" :required="true" autocomplete="new-password"></HiddenInput>
<div class="form-text">
<p>{{ $t("For safety, must use secret key") }}</p>
@ -13,4 +14,24 @@
</i18n-t>
</div>
</div>
<div class="mb-3">
<label for="mentioning" class="form-label">{{ $t("Mentioning") }}<span style="color: red;"><sup>*</sup></span></label>
<select id="mentioning" v-model="$parent.notification.mentioning" class="form-select" required>
<option value="nobody">{{ $t("Don't mention people") }}</option>
<option value="everyone">{{ $t("Mention group", { group: "@everyone" }) }}</option>
</select>
</div>
</template>
<script lang="ts">
import HiddenInput from "../HiddenInput.vue";
export default {
components: { HiddenInput },
mounted() {
if (typeof this.$parent.notification.mentioning === "undefined") {
this.$parent.notification.mentioning = "nobody";
}
}
};
</script>

@ -16,4 +16,50 @@
<label for="discord-prefix-message" class="form-label">{{ $t("Prefix Custom Message") }}</label>
<input id="discord-prefix-message" v-model="$parent.notification.discordPrefixMessage" type="text" class="form-control" autocomplete="false" :placeholder="$t('Hello @everyone is...')">
</div>
<div class="mb-3">
<label for="discord-message-type" class="form-label">{{ $t("Select message type") }}</label>
<select id="discord-message-type" v-model="$parent.notification.discordChannelType" class="form-select">
<option value="channel">{{ $t("Send to channel") }}</option>
<option value="createNewForumPost">{{ $t("Create new forum post") }}</option>
<option value="postToThread">{{ $t("postToExistingThread") }}</option>
</select>
</div>
<div v-if="$parent.notification.discordChannelType === 'createNewForumPost'">
<div class="mb-3">
<label for="discord-target" class="form-label">
{{ $t("forumPostName") }}
</label>
<input id="discord-target" v-model="$parent.notification.postName" type="text" class="form-control" autocomplete="false">
<div class="form-text">
{{ $t("whatHappensAtForumPost", { option: $t("postToExistingThread") }) }}
</div>
</div>
</div>
<div v-if="$parent.notification.discordChannelType === 'postToThread'">
<div class="mb-3">
<label for="discord-target" class="form-label">
{{ $t("threadForumPostID") }}
</label>
<input id="discord-target" v-model="$parent.notification.threadId" type="text" class="form-control" autocomplete="false" :placeholder="$t('e.g. {discordThreadID}', { discordThreadID: 1177566663751782411 })">
<div class="form-text">
<i18n-t keypath="wayToGetDiscordThreadId">
<a
href="https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID-"
target="_blank"
>{{ $t("here") }}</a>
</i18n-t>
</div>
</div>
</div>
</template>
<script>
export default {
mounted() {
if (!this.$parent.notification.discordChannelType) {
this.$parent.notification.discordChannelType = "channel";
}
}
};
</script>

@ -0,0 +1,42 @@
<template>
<div class="mb-3">
<label for="webhook-url" class="form-label">{{ $t("Host URL") }}</label>
<input
id="webhook-url"
v-model="$parent.notification.webhookURL"
type="url"
pattern="https?://.+"
class="form-control"
required
/>
<div class="form-text">
<i18n-t tag="p" keypath="Read more:">
<a href="https://docs.keephq.dev/providers/documentation/uptimekuma-provider" target="_blank">https://docs.keephq.dev/providers/documentation/uptimekuma-provider</a>
</i18n-t>
</div>
</div>
<div class="mb-3">
<label for="webhook-apikey" class="form-label">{{
$t("API Key")
}}</label>
<HiddenInput
id="webhook-apikey"
v-model="$parent.notification.webhookAPIKey"
:required="true"
></HiddenInput>
</div>
</template>
<script>
import HiddenInput from "../HiddenInput.vue";
export default {
components: {
HiddenInput,
},
mounted() {
this.$parent.notification.webhookURL ||= "";
},
};
</script>

@ -0,0 +1,39 @@
<template>
<div class="mb-3">
<label for="smspartner-key" class="form-label">{{ $t("API Key") }}</label>
<HiddenInput id="smspartner-key" v-model="$parent.notification.smspartnerApikey" :required="true" autocomplete="new-password"></HiddenInput>
<div class="form-text">
<i18n-t keypath="smspartnerApiurl" tag="div" class="form-text">
<a href="https://my.smspartner.fr/dashboard/api" target="_blank">my.smspartner.fr/dashboard/api</a>
</i18n-t>
</div>
</div>
<div class="mb-3">
<label for="smspartner-phone-number" class="form-label">{{ $t("smspartnerPhoneNumber") }}</label>
<input id="smspartner-phone-number" v-model="$parent.notification.smspartnerPhoneNumber" type="text" minlength="3" maxlength="20" pattern="^[\d+,]+$" class="form-control" required>
<div class="form-text">
<i18n-t keypath="smspartnerPhoneNumberHelptext" tag="div" class="form-text">
<code>+336xxxxxxxx</code>
<code>+496xxxxxxxx</code>
<code>,</code>
</i18n-t>
</div>
</div>
<div class="mb-3">
<label for="smspartner-sender-name" class="form-label">{{ $t("smspartnerSenderName") }}</label>
<input id="smspartner-sender-name" v-model="$parent.notification.smspartnerSenderName" type="text" minlength="3" maxlength="11" pattern="^[a-zA-Z0-9]*$" class="form-control" required>
<div class="form-text">
{{ $t("smspartnerSenderNameInfo") }}
</div>
</div>
</template>
<script>
import HiddenInput from "../HiddenInput.vue";
export default {
components: {
HiddenInput,
},
};
</script>

@ -5,6 +5,14 @@
<input id="hostname" v-model="$parent.notification.smtpHost" type="text" class="form-control" required>
</div>
<i18n-t tag="div" keypath="Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent" class="form-text">
<template #localhost>
<code>localhost</code>
</template>
<template #local_mta>
<a href="https://wikipedia.org/wiki/Mail_Transfer_Agent" target="_blank">{{ $t("locally configured mail transfer agent") }}</a>
</template>
</i18n-t>
<div class="mb-3">
<label for="port" class="form-label">{{ $t("Port") }}</label>
<input id="port" v-model="$parent.notification.smtpPort" type="number" class="form-control" required min="0" max="65535" step="1">

@ -0,0 +1,31 @@
<template>
<div class="mb-3">
<label for="sevenio-api-key" class="form-label">{{ $t("apiKeySevenIO") }}</label>
<HiddenInput id="sevenio-api-key" v-model="$parent.notification.sevenioApiKey" :required="true" autocomplete="new-password"></HiddenInput>
<div class="form-text">
{{ $t("wayToGetSevenIOApiKey") }}
</div>
</div>
<div class="mb-3">
<label for="sevenio-sender" class="form-label">{{ $t("senderSevenIO") }}</label>
<input id="sevenio-sender" v-model="$parent.notification.sevenioSender" type="text" class="form-control" autocomplete="false" placeholder="Uptime Kuma">
</div>
<div class="mb-3">
<label for="sevenio-receiver" class="form-label">{{ $t("receiverSevenIO") }}</label>
<input id="sevenio-receiver" v-model="$parent.notification.sevenioReceiver" type="number" class="form-control" required autocomplete="false" placeholder="0123456789">
<div class="form-text">
{{ $t("receiverInfoSevenIO") }}
</div>
</div>
</template>
<script>
import HiddenInput from "../HiddenInput.vue";
export default {
components: {
HiddenInput,
},
};
</script>

@ -0,0 +1,87 @@
<template>
<div class="mb-3">
<label class="form-label" for="threema-recipient">{{ $t("threemaRecipientType") }}</label>
<select
id="threema-recipient" v-model="$parent.notification.threemaRecipientType" required
class="form-select"
>
<option value="identity">{{ $t("threemaRecipientTypeIdentity") }}</option>
<option value="phone">{{ $t("threemaRecipientTypePhone") }}</option>
<option value="email">{{ $t("threemaRecipientTypeEmail") }}</option>
</select>
</div>
<div v-if="$parent.notification.threemaRecipientType === 'identity'" class="mb-3">
<label class="form-label" for="threema-recipient">{{ $t("threemaRecipient") }} {{ $t("threemaRecipientTypeIdentity") }}</label>
<input
id="threema-recipient"
v-model="$parent.notification.threemaRecipient"
class="form-control"
minlength="8"
maxlength="8"
pattern="[A-Z0-9]{8}"
required
type="text"
>
<div class="form-text">
<p>{{ $t("threemaRecipientTypeIdentityFormat") }}</p>
</div>
</div>
<div v-else-if="$parent.notification.threemaRecipientType === 'phone'" class="mb-3">
<label class="form-label" for="threema-recipient">{{ $t("threemaRecipient") }} {{ $t("threemaRecipientTypePhone") }}</label>
<input
id="threema-recipient"
v-model="$parent.notification.threemaRecipient"
class="form-control"
maxlength="15"
pattern="\d{1,15}"
required
type="text"
>
<div class="form-text">
<p>{{ $t("threemaRecipientTypePhoneFormat") }}</p>
</div>
</div>
<div v-else-if="$parent.notification.threemaRecipientType === 'email'" class="mb-3">
<label class="form-label" for="threema-recipient">{{ $t("threemaRecipient") }} {{ $t("threemaRecipientTypeEmail") }}</label>
<input
id="threema-recipient"
v-model="$parent.notification.threemaRecipient"
class="form-control"
maxlength="254"
required
type="email"
>
</div>
<div class="mb-3">
<label class="form-label" for="threema-sender">{{ $t("threemaSenderIdentity") }}</label>
<input
id="threema-sender"
v-model="$parent.notification.threemaSenderIdentity"
class="form-control"
minlength="8"
maxlength="8"
pattern="^\*[A-Z0-9]{7}$"
required
type="text"
>
<div class="form-text">
<p>{{ $t("threemaSenderIdentityFormat") }}</p>
</div>
</div>
<div class="mb-3">
<label class="form-label" for="threema-secret">{{ $t("threemaApiAuthenticationSecret") }}</label>
<HiddenInput
id="threema-secret" v-model="$parent.notification.threemaSecret" required
autocomplete="false"
></HiddenInput>
</div>
<i18n-t class="form-text" keypath="wayToGetThreemaGateway" tag="div">
<a href="https://threema.ch/en/gateway" target="_blank">{{ $t("here") }}</a>
</i18n-t>
<i18n-t class="form-text" keypath="threemaBasicModeInfo" tag="div">
<a href="https://gateway.threema.ch/en/developer/api" target="_blank">{{ $t("here") }}</a>
</i18n-t>
</template>
<script lang="ts" setup>
import HiddenInput from "../HiddenInput.vue";
</script>

@ -3,6 +3,7 @@ import AlertNow from "./AlertNow.vue";
import AliyunSMS from "./AliyunSms.vue";
import Apprise from "./Apprise.vue";
import Bark from "./Bark.vue";
import Bitrix24 from "./Bitrix24.vue";
import ClickSendSMS from "./ClickSendSMS.vue";
import CallMeBot from "./CallMeBot.vue";
import SMSC from "./SMSC.vue";
@ -17,6 +18,7 @@ import GrafanaOncall from "./GrafanaOncall.vue";
import GtxMessaging from "./GtxMessaging.vue";
import HomeAssistant from "./HomeAssistant.vue";
import HeiiOnCall from "./HeiiOnCall.vue";
import Keep from "./Keep.vue";
import Kook from "./Kook.vue";
import Line from "./Line.vue";
import LineNotify from "./LineNotify.vue";
@ -41,6 +43,7 @@ import ServerChan from "./ServerChan.vue";
import SerwerSMS from "./SerwerSMS.vue";
import Signal from "./Signal.vue";
import SMSManager from "./SMSManager.vue";
import SMSPartner from "./SMSPartner.vue";
import Slack from "./Slack.vue";
import Squadcast from "./Squadcast.vue";
import SMSEagle from "./SMSEagle.vue";
@ -49,12 +52,14 @@ import STMP from "./SMTP.vue";
import Teams from "./Teams.vue";
import TechulusPush from "./TechulusPush.vue";
import Telegram from "./Telegram.vue";
import Threema from "./Threema.vue";
import Twilio from "./Twilio.vue";
import Webhook from "./Webhook.vue";
import WeCom from "./WeCom.vue";
import GoAlert from "./GoAlert.vue";
import ZohoCliq from "./ZohoCliq.vue";
import Splunk from "./Splunk.vue";
import SevenIO from "./SevenIO.vue";
import Whapi from "./Whapi.vue";
import Cellsynt from "./Cellsynt.vue";
@ -68,6 +73,7 @@ const NotificationFormList = {
"AliyunSMS": AliyunSMS,
"apprise": Apprise,
"Bark": Bark,
"Bitrix24": Bitrix24,
"clicksendsms": ClickSendSMS,
"CallMeBot": CallMeBot,
"smsc": SMSC,
@ -81,6 +87,7 @@ const NotificationFormList = {
"GrafanaOncall": GrafanaOncall,
"HomeAssistant": HomeAssistant,
"HeiiOnCall": HeiiOnCall,
"Keep": Keep,
"Kook": Kook,
"line": Line,
"LineNotify": LineNotify,
@ -105,6 +112,7 @@ const NotificationFormList = {
"serwersms": SerwerSMS,
"signal": Signal,
"SMSManager": SMSManager,
"SMSPartner": SMSPartner,
"slack": Slack,
"squadcast": Squadcast,
"SMSEagle": SMSEagle,
@ -112,6 +120,7 @@ const NotificationFormList = {
"stackfield": Stackfield,
"teams": Teams,
"telegram": Telegram,
"threema": Threema,
"twilio": Twilio,
"Splunk": Splunk,
"webhook": Webhook,
@ -119,6 +128,7 @@ const NotificationFormList = {
"GoAlert": GoAlert,
"ServerChan": ServerChan,
"ZohoCliq": ZohoCliq,
"SevenIO": SevenIO,
"whapi": Whapi,
"gtxmessaging": GtxMessaging,
"Cellsynt": Cellsynt,

@ -1,53 +1,63 @@
<template>
<div>
<div class="add-btn">
<button class="btn btn-primary me-2" type="button" @click="$refs.apiKeyDialog.show()">
<font-awesome-icon icon="plus" /> {{ $t("Add API Key") }}
</button>
<div
v-if="settings.disableAuth"
class="mt-5 d-flex align-items-center justify-content-center my-3"
>
{{ $t("apiKeysDisabledMsg") }}
</div>
<div v-else>
<div class="add-btn">
<button class="btn btn-primary me-2" type="button" @click="$refs.apiKeyDialog.show()">
<font-awesome-icon icon="plus" /> {{ $t("Add API Key") }}
</button>
</div>
<div>
<span v-if="Object.keys(keyList).length === 0" class="d-flex align-items-center justify-content-center my-3">
{{ $t("No API Keys") }}
</span>
<div
v-for="(item, index) in keyList"
:key="index"
class="item"
:class="item.status"
>
<div class="left-part">
<div
class="circle"
></div>
<div class="info">
<div class="title">{{ item.name }}</div>
<div class="status">
{{ $t("apiKey-" + item.status) }}
</div>
<div class="date">
{{ $t("Created") }}: {{ item.createdDate }}
</div>
<div class="date">
{{ $t("Expires") }}: {{ item.expires || $t("Never") }}
<div>
<span
v-if="Object.keys(keyList).length === 0"
class="d-flex align-items-center justify-content-center my-3"
>
{{ $t("No API Keys") }}
</span>
<div
v-for="(item, index) in keyList"
:key="index"
class="item"
:class="item.status"
>
<div class="left-part">
<div class="circle"></div>
<div class="info">
<div class="title">{{ item.name }}</div>
<div class="status">
{{ $t("apiKey-" + item.status) }}
</div>
<div class="date">
{{ $t("Created") }}: {{ item.createdDate }}
</div>
<div class="date">
{{ $t("Expires") }}:
{{ item.expires || $t("Never") }}
</div>
</div>
</div>
</div>
<div class="buttons">
<div class="btn-group" role="group">
<button v-if="item.active" class="btn btn-normal" @click="disableDialog(item.id)">
<font-awesome-icon icon="pause" /> {{ $t("Disable") }}
</button>
<div class="buttons">
<div class="btn-group" role="group">
<button v-if="item.active" class="btn btn-normal" @click="disableDialog(item.id)">
<font-awesome-icon icon="pause" /> {{ $t("Disable") }}
</button>
<button v-if="!item.active" class="btn btn-primary" @click="enableKey(item.id)">
<font-awesome-icon icon="play" /> {{ $t("Enable") }}
</button>
<button v-if="!item.active" class="btn btn-primary" @click="enableKey(item.id)">
<font-awesome-icon icon="play" /> {{ $t("Enable") }}
</button>
<button class="btn btn-danger" @click="deleteDialog(item.id)">
<font-awesome-icon icon="trash" /> {{ $t("Delete") }}
</button>
<button class="btn btn-danger" @click="deleteDialog(item.id)">
<font-awesome-icon icon="trash" /> {{ $t("Delete") }}
</button>
</div>
</div>
</div>
</div>
@ -88,6 +98,9 @@ export default {
let result = Object.values(this.$root.apiKeyList);
return result;
},
settings() {
return this.$parent.$parent.$parent.settings;
},
},
methods: {
@ -126,9 +139,11 @@ export default {
* @returns {void}
*/
disableKey() {
this.$root.getSocket().emit("disableAPIKey", this.selectedKeyID, (res) => {
this.$root.toastRes(res);
});
this.$root
.getSocket()
.emit("disableAPIKey", this.selectedKeyID, (res) => {
this.$root.toastRes(res);
});
},
/**
@ -146,113 +161,113 @@ export default {
</script>
<style lang="scss" scoped>
@import "../../assets/vars.scss";
@import "../../assets/vars.scss";
.mobile {
.item {
flex-direction: column;
align-items: flex-start;
margin-bottom: 20px;
}
.mobile {
.item {
flex-direction: column;
align-items: flex-start;
margin-bottom: 20px;
}
.add-btn {
padding-top: 20px;
padding-bottom: 20px;
}
.add-btn {
padding-top: 20px;
padding-bottom: 20px;
}
.item {
display: flex;
align-items: center;
gap: 10px;
text-decoration: none;
border-radius: 10px;
transition: all ease-in-out 0.15s;
justify-content: space-between;
padding: 10px;
min-height: 90px;
margin-bottom: 5px;
&:hover {
background-color: $highlight-white;
}
.item {
display: flex;
align-items: center;
gap: 10px;
text-decoration: none;
border-radius: 10px;
transition: all ease-in-out 0.15s;
justify-content: space-between;
padding: 10px;
min-height: 90px;
margin-bottom: 5px;
&.active {
.circle {
background-color: $primary;
}
}
&:hover {
background-color: $highlight-white;
&.inactive {
.circle {
background-color: $danger;
}
}
&.active {
.circle {
background-color: $primary;
}
&.expired {
.left-part {
opacity: 0.3;
}
&.inactive {
.circle {
background-color: $danger;
}
.circle {
background-color: $dark-font-color;
}
}
&.expired {
.left-part {
opacity: 0.3;
}
.left-part {
display: flex;
gap: 12px;
align-items: center;
.circle {
background-color: $dark-font-color;
}
.circle {
width: 25px;
height: 25px;
border-radius: 50rem;
}
.left-part {
display: flex;
gap: 12px;
align-items: center;
.circle {
width: 25px;
height: 25px;
border-radius: 50rem;
.info {
.title {
font-weight: bold;
font-size: 20px;
}
.info {
.title {
font-weight: bold;
font-size: 20px;
}
.status {
font-size: 14px;
}
.status {
font-size: 14px;
}
}
}
.buttons {
display: flex;
gap: 8px;
flex-direction: row-reverse;
.buttons {
display: flex;
gap: 8px;
flex-direction: row-reverse;
.btn-group {
width: 310px;
}
.btn-group {
width: 310px;
}
}
.date {
margin-top: 5px;
display: block;
font-size: 14px;
background-color: rgba(255, 255, 255, 0.5);
border-radius: 20px;
padding: 0 10px;
width: fit-content;
.dark & {
color: white;
background-color: rgba(255, 255, 255, 0.1);
}
}
.date {
margin-top: 5px;
display: block;
font-size: 14px;
background-color: rgba(255, 255, 255, 0.5);
border-radius: 20px;
padding: 0 10px;
width: fit-content;
.dark & {
color: white;
background-color: rgba(255, 255, 255, 0.1);
}
}
.dark {
.item {
&:hover {
background-color: $dark-bg2;
}
.dark {
.item {
&:hover {
background-color: $dark-bg2;
}
}
}
</style>

@ -59,10 +59,29 @@ for (let lang in languageList) {
const rtlLangs = [ "he-IL", "fa", "ar-SY", "ur" ];
export const currentLocale = () => localStorage.locale
|| languageList[navigator.language] && navigator.language
|| languageList[navigator.language.substring(0, 2)] && navigator.language.substring(0, 2)
|| "en";
/**
* Find the best matching locale to display
* If no locale can be matched, the default is "en"
* @returns {string} the locale that should be displayed
*/
export function currentLocale() {
for (const locale of [ localStorage.locale, navigator.language, ...navigator.languages ]) {
// localstorage might not have a value or there might not be a language in `navigator.language`
if (!locale) {
continue;
}
if (locale in messages) {
return locale;
}
// some locales are further specified such as "en-US".
// If we only have a generic locale for this, we can use it too
const genericLocale = locale.split("-")[0];
if (genericLocale in messages) {
return genericLocale;
}
}
return "en";
}
export const localeDirection = () => {
return rtlLangs.includes(currentLocale()) ? "rtl" : "ltr";

@ -0,0 +1,66 @@
{
"languageName": "Afrikaans",
"setupDatabaseChooseDatabase": "Watter databasis wil u gebruik?",
"setupDatabaseMariaDB": "Konnekteer aan eksterne MariaDB databasis. U sal die databasis konneksie informasie moet insleutel.",
"settingUpDatabaseMSG": "Besig om die databasis op te stel. Dit mag n rukkie neem, so wees asseblief geduldig.",
"dbName": "Databasis Naam",
"Settings": "Verstellings",
"Dashboard": "Paneelbord",
"Help": "Hulp",
"New Update": "Nuwe Weergawe",
"Language": "Taal",
"Appearance": "Voorkoms",
"Theme": "Tema",
"General": "Algemeen",
"Game": "Spel",
"Version": "Weergawe",
"Check Update On GitHub": "Sien GitHub vir opdateering",
"List": "Lys",
"Home": "Tuis",
"Add": "Voeg By",
"Add New Monitor": "Voeg Nuwe Monitor by",
"Quick Stats": "Vinnige Statistiek",
"Up": "Op",
"Down": "Af",
"Pending": "Hangend (or) Besig",
"Maintenance": "Onderhoud",
"Unknown": "Onseker",
"Cannot connect to the socket server": "Kan nie konnekteer aan die sok-bediener nie",
"Reconnecting...": "Besig om te konnekteer...",
"General Monitor Type": "Algemene Monitor Tipe",
"Specific Monitor Type": "Spesifieke Monitor Tipe",
"pauseDashboardHome": "Pouse",
"Pause": "Pouse",
"Name": "Naam",
"Status": "Status",
"DateTime": "DatumTyd",
"Message": "Boodskap",
"No important events": "Geen belangrike gebeurtenisse nie",
"Resume": "Gaan Voort",
"Edit": "Verstel",
"Delete": "Skrap",
"Current": "Huidig(e)",
"Uptime": "Tyd Op",
"Cert Exp.": "Sertifikaat Verval",
"Monitor": "Monitor | Monitors",
"day": "dag | dae",
"-day": "-dag",
"hour": "uur",
"-hour": "-uur",
"Response": "Terugvoer(ing)",
"Ping": "Ping",
"Monitor Type": "Monitor Tipe",
"Keyword": "Sleutelwoord",
"Invert Keyword": "Omkeer Sleutelwoord",
"Expected Value": "Verwagte Waarde",
"Json Query": "JSon Navraag",
"Friendly Name": "Vriendelike Naam",
"URL": "URL",
"Hostname": "Gasheernaam",
"Port": "Poort",
"setupDatabaseEmbeddedMariaDB": "U hoef niks te stel nie. Hierdie docker beeld het MariaDB ingebou en vooraf opgestel vir u. Uptime Kuma sal aan hierdie databasis konnekteer via unix sok verbinding.",
"setupDatabaseSQLite": "'n Eenvoudige databasis leêr, aanbeveel vir klein-skaalse ontploiings. Voor weergawe 2.0.0 het Uptime Kuma SQLite as die verstekopsie.",
"Primary Base URL": "Primêre Basis URL",
"statusMaintenance": "Onderhoud",
"Passive Monitor Type": "Passiewe Monitor Tipe"
}

@ -1,5 +1,5 @@
{
"languageName": "إنجليزي",
"languageName": "العربية",
"checkEverySecond": "تحقق من كل {0} ثانية",
"retryCheckEverySecond": "أعد محاولة كل {0} ثانية",
"resendEveryXTimes": "إعادة تقديم كل {0} مرات",
@ -712,5 +712,8 @@
"More info on:": "مزيد من المعلومات حول: {0}",
"What you can try:": "ماذا تستطيع أن تجرب:",
"Packet Size": "حجم الحزمة",
"confirmUninstallPlugin": "هل أنت متأكد من أنك تريد إلغاء تثبيت هذا المكون الإضافي؟"
"confirmUninstallPlugin": "هل أنت متأكد من أنك تريد إلغاء تثبيت هذا المكون الإضافي؟",
"settingUpDatabaseMSG": "يرجى الإنتظار ، نقوم بإعداد قاعدة البيانات و قد يستغرق الأمر بعض الوقت.",
"setupDatabaseChooseDatabase": "ما هي قاعدة البيانات التي تريد استخدامها؟",
"dbName": "إسم قاعدة البيانات"
}

@ -3,14 +3,14 @@
"Delete": "حذف",
"Current": "حالي",
"Uptime": "مدة التشغيل",
"Monitor": "مراقب | مراقبات",
"Monitor": "مراقبة | مراقبات",
"day": "يوم | أيام",
"-day": "-يوم",
"hour": "ساعة",
"-hour": "-ساعة",
"Response": "استجاية",
"Ping": "بينغ",
"Monitor Type": "نوع المراقب",
"Monitor Type": "نوع المراقبة",
"Cert Exp.": "انتهاء صلاحية شهادة الأمان SSL.",
"Theme - Heartbeat Bar": "موضوع - بار نبضات",
"Normal": "طبيعي",
@ -37,20 +37,20 @@
"Password": "كلمة المرور",
"Remember me": "تذكرنى",
"Login": "تسجيل الدخول",
"No Monitors, please": "لا شاشات من فضلك",
"No Monitors, please": "بدون مراقبة من فضلك",
"alertNoFile": "الرجاء تحديد ملف للاستيراد.",
"Skip existing": "تخطي الموجود",
"Search...": "يبحث…",
"Avg. Ping": "متوسط. بينغ",
"Avg. Response": "متوسط. إجابة",
"Entry Page": "صفحة الدخول",
"statusPageNothing": "لا شيء هنا الرجاء إضافة مجموعة أو شاشة.",
"statusPageNothing": "لا شيء هنا الرجاء إضافة مجموعة أو مراقبة.",
"No Services": "لا توجد خدمات",
"All Systems Operational": "جميع الأنظمة التشغيلية",
"All Systems Operational": "جميع الأنظمة نشطة",
"Partially Degraded Service": "الخدمة المتدهورة جزئيا",
"Degraded Service": "خدمة متدهورة",
"Add Group": "أضف مجموعة",
"Add a monitor": "إضافة شاشة",
"Add a monitor": "إضافة مراقبة",
"Edit Status Page": "تحرير صفحة الحالة",
"Go to Dashboard": "الذهاب إلى لوحة القيادة",
"Status Page": "صفحة الحالة",
@ -73,7 +73,7 @@
"notificationRegional": "إقليمي",
"Clone": "استنسخ",
"cloneOf": "مُستنسَخ من {0}",
"grpcMethodDescription": "يتم تحويل اسم الطريقة إلى تنسيق Cammelcase مثل Sayhello Check وما إلى ذلك.",
"grpcMethodDescription": "إسم الدالة يتم تحويله إلى تنسيق الجمل السفلي مثل sayHello, check, etc.",
"acceptedStatusCodesDescription": "حدد رموز الحالة التي تعتبر استجابة ناجحة.",
"deleteNotificationMsg": "هل أنت متأكد من حذف هذا الإشعار لجميع الشاشات؟",
"dnsPortDescription": "منفذ خادم DNS. الافتراضيات إلى 53. يمكنك تغيير المنفذ في أي وقت.",
@ -98,12 +98,12 @@
"Version": "الإصدار",
"Primary Base URL": "الرابط التشعبي الأساسي",
"Check Update On GitHub": "التحقق من التحديث على GitHub",
"Add New Monitor": "أضف شاشة جديدة",
"Add New Monitor": "أضف مراقبة جديدة",
"Quick Stats": "إحصائيات سريعة",
"Pending": "قيد الانتظار",
"General Monitor Type": "نوع الشاشة العامة",
"Passive Monitor Type": "نوع الشاشة السلبي",
"Specific Monitor Type": "نوع شاشة محدد",
"General Monitor Type": "نوع المراقبة العامة",
"Passive Monitor Type": "نوع المراقبة السلبي",
"Specific Monitor Type": "نوع المراقبة المحدد",
"markdownSupported": "دعم صيغة Markdown",
"pauseDashboardHome": "وقفة",
"Pause": "إيقاف مؤقت",
@ -171,14 +171,14 @@
"respTime": "resp. الوقت (MS)",
"notAvailableShort": "ن/أ",
"Default enabled": "التمكين الافتراضي",
"Apply on all existing monitors": "تنطبق على جميع الشاشات الحالية",
"Apply on all existing monitors": "تنطبق على جميع المراقبات الحالية",
"Create": "خلق",
"Clear Data": "امسح البيانات",
"Events": "الأحداث",
"Heartbeats": "نبضات القلب",
"Schedule maintenance": "جدولة الصيانة",
"Affected Monitors": "الشاشات المتأثرة",
"Pick Affected Monitors...": "اختر الشاشات المتأثرة …",
"Affected Monitors": "المراقبات المتأثرة",
"Pick Affected Monitors...": "اختر المراقبات المتأثرة …",
"Start of maintenance": "بداية الصيانة",
"All Status Pages": "جميع صفحات الحالة",
"Select status pages...": "حدد صفحات الحالة …",
@ -232,14 +232,14 @@
"PushUrl": "دفع عنوان URL",
"HeadersInvalidFormat": "رؤوس الطلبات غير صالحة JSON ",
"BodyInvalidFormat": "هيئة الطلب غير صالحة JSON ",
"Monitor History": "مراقبة التاريخ",
"clearDataOlderThan": "الحفاظ على بيانات سجل المراقبة للأيام {0}.",
"Monitor History": "تاريخ المراقبة",
"clearDataOlderThan": "الحفاظ على بيانات سجل المراقبة لـ{0} أيام.",
"PasswordsDoNotMatch": "كلمة المرور غير مطابقة.",
"records": "السجلات",
"One record": "سجل واحد",
"steamApiKeyDescription": "لمراقبة خادم لعبة Steam ، تحتاج إلى مفتاح Steam Web-API. يمكنك تسجيل مفتاح API الخاص بك هنا ",
"Current User": "المستخدم الحالي",
"topicExplanation": "موضوع MQTT لرصد",
"topicExplanation": "موضوع MQTT للمراقبة",
"successMessage": "نجاح رسالة",
"successMessageExplanation": "رسالة MQTT التي ستعتبر نجاحًا",
"recent": "الأخيرة",
@ -271,8 +271,8 @@
"Switch to Dark Theme": "التبديل إلى موضوع الظلام",
"Hide Tags": "إخفاء العلامات",
"Description": "وصف",
"No monitors available.": "لا شاشات المتاحة.",
"No Monitors": "لا شاشات",
"No monitors available.": "لا يوجد مراقبات متاحة.",
"No Monitors": "لا يوجد مراقبات",
"Untitled Group": "مجموعة بلا عنوان",
"Services": "خدمات",
"Discard": "تجاهل",
@ -287,10 +287,10 @@
"default": "تقصير",
"enabled": "تمكين",
"setAsDefault": "تعيين كافتراضي",
"deleteProxyMsg": "هل أنت متأكد من حذف هذا الوكيل لجميع الشاشات؟",
"proxyDescription": "يجب تعيين الوكلاء إلى شاشة للعمل.",
"enableProxyDescription": "لن يؤثر هذا الوكيل على طلبات الشاشة حتى يتم تنشيطه. يمكنك التحكم مؤقتًا في تعطيل الوكيل من جميع الشاشات حسب حالة التنشيط.",
"setAsDefaultProxyDescription": "سيتم تمكين هذا الوكيل افتراضيًا للشاشات الجديدة. لا يزال بإمكانك تعطيل الوكيل بشكل منفصل لكل شاشة.",
"deleteProxyMsg": "هل أنت متأكد من حذف هذا الوكيل لجميع المراقبات؟",
"proxyDescription": "يجب تعيين وكيل للمراقبة من أجل أن تعمل.",
"enableProxyDescription": "لن يؤثر هذا الوكيل على طلبات المراقبة حتى يتم تنشيطه. يمكنك التحكم مؤقتًا في تعطيل الوكيل من جميع المراقبات حسب حالة التنشيط.",
"setAsDefaultProxyDescription": "سيتم تمكين هذا الوكيل افتراضيًا للمراقبات الجديدة. لا يزال بإمكانك تعطيل الوكيل بشكل منفصل لكل مراقبة.",
"Certificate Chain": "سلسلة الشهادة",
"Valid": "صالح",
"Invalid": "غير صالح",
@ -365,7 +365,7 @@
"Setup Docker Host": "إعداد مضيف Docker",
"Connection Type": "نوع الاتصال",
"Docker Daemon": "دُوكر Daemon",
"deleteDockerHostMsg": "هل أنت متأكد من حذف مضيف Docker لجميع الشاشات؟",
"deleteDockerHostMsg": "هل أنت متأكد من حذف مضيف Docker لجميع المراقبات؟",
"socket": "قابس كهرباء",
"tcp": "TCP / HTTP",
"Docker Container": "حاوية Docker",
@ -433,7 +433,7 @@
"Server Timezone": "المنطقة الزمنية الخادم",
"statusPageMaintenanceEndDate": "نهاية",
"IconUrl": "عنوان URL للرمز",
"Enable DNS Cache": "(مهمل) تمكين ذاكرة التخزين المؤقت لنظام أسماء النطاقات لمراقب HTTP(s)",
"Enable DNS Cache": "(مُهمَل) تمكين ذاكرة التخزين المؤقت لنظام أسماء النطاقات لمراقب HTTP(s)",
"Disable": "إبطال",
"dnsCacheDescription": "قد لا يعمل في بعض بيئات IPv6 تعطيله إذا واجهت أي مشكلات.",
"Single Maintenance Window": "نافذة صيانة واحدة",
@ -484,7 +484,7 @@
"aboutMattermostChannelName": "يمكنك تجاوز القناة الافتراضية التي تنشرها WebHook من خلال إدخال اسم القناة في \"Channel Name\" الحقل. يجب تمكين هذا في إعدادات Webhook Mattern. السابق",
"dataRetentionTimeError": "يجب أن تكون فترة الاستبقاء 0 أو أكبر",
"infiniteRetention": "ضبط على 0 للاحتفاظ لا نهائي.",
"confirmDeleteTagMsg": "هل أنت متأكد من أنك تريد حذف هذه العلامة؟ لن يتم حذف الشاشات المرتبطة بهذه العلامة.",
"confirmDeleteTagMsg": "هل أنت متأكد من أنك تريد حذف هذه العلامة؟ لن يتم حذف المراقبات المرتبطة بهذه العلامة.",
"enableGRPCTls": "السماح لإرسال طلب GRPC مع اتصال TLS",
"deleteMonitorMsg": "هل أنت متأكد من حذف هذا الشاشة؟",
"deleteMaintenanceMsg": "هل أنت متأكد من حذف هذه الصيانة؟",
@ -690,16 +690,16 @@
"setupDatabaseChooseDatabase": "ما هي قاعدة البيانات التي تريد استخدامها؟",
"setupDatabaseEmbeddedMariaDB": "لا تحتاج إلى تعيين أي شيء. قامت نسخة دُوكر بتضمين MariaDB لك تلقائيًا. سيتصل (آب تايم كوما) بقاعدة البيانات هذه عبر مقبس Unix.",
"setupDatabaseMariaDB": "للاتصال بقاعدة بيانات MariaDB خارجية. تحتاج إلى تعيين معلومات اتصال قاعدة البيانات.",
"pushViewCode": "كيف يتم إرسال",
"pushViewCode": "كيف يتم إستخدام مراقبة Push؟ (عرض المصدر)",
"pushOthers": "أخرى",
"programmingLanguages": "لغات البرمجة",
"Reset Token": "إعادة تعيين الرمز الخاص",
"noDockerHostMsg": "غير متوفر. قم بإعداد مضيف Docker أولاً.",
"DockerHostRequired": "الرجاء تعيين مضيف Docker لهذا المراقب.",
"DockerHostRequired": "الرجاء تعيين مضيف Docker لهذة المراقبة.",
"liquidIntroduction": "يتم تحقيق قابلية القولبة من خلال لغة القوالب السائلة. يرجى الرجوع إلى {0} للحصول على تعليمات الاستخدام. هذه هي المتغيرات المتوفرة:",
"templateMsg": "رسالة التنبيه",
"templateHeartbeatJSON": "العنصر الذي يصف نبضات القلب",
"templateMonitorJSON": "العنصر الذي يصف المراقب",
"templateMonitorJSON": "العنصر الذي يصف المراقبة",
"templateLimitedToUpDownCertNotifications": "متوفر فقط لنتبيهات انتهاء صلاحية الشهادات",
"templateLimitedToUpDownNotifications": "متوفر فقط لتنبيهات الأعلى/الأسفل",
"setupDatabaseSQLite": "ملف قاعدة بيانات بسيط، يوصى به لعمليات النشر على نطاق صغير. قبل الإصدار 2.0.0، استخدم (آب تايم كوما) SQLite كقاعدة بيانات افتراضية.",
@ -722,5 +722,17 @@
"Reconnecting...": "إعادة الاتصال...",
"filterActivePaused": "متوقف مؤقتا",
"Add New Tag": "إضافة وسم جديد",
"statusPageRefreshIn": "تحديث خلال: {0}"
"statusPageRefreshIn": "تحديث خلال: {0}",
"successKeywordExplanation": "كلمة MQTT المفتاحية التي ستعتبر رد ناجح",
"successKeyword": "الكلمة المفتاحية الناجحة",
"Search monitored sites": "البحث في المواقع المراقبة",
"statusPageSpecialSlugDesc": "المعرف الخاص {0}: سيتم عرض هذه الصفحة عندما لا يتم توفير معرف",
"telegramProtectContent": "حماية إعادة التوجيه/الحفظ",
"settingUpDatabaseMSG": "جاري إعداد قاعدة البيانات. قد يستغرق بعض الوقت، الرجاء الإنتظار.",
"emailTemplateMonitorJSON": "العنصر الذي يصف المراقبة",
"Add a new expiry notification day": "قم بإضافة تنبيه تاريخ يوم إنتهاء",
"Remove the expiry notification": "إزالة تنبيه يوم تاريخ الإنتهاء",
"tailscalePingWarning": "من أجل استخدام مراقبة Tailscale Ping، تحتاج إلى تثبيت Uptime Kuma بدون Docker وكذلك تثبيت عميل Tailscale على الخادم الخاص بك.",
"Clone Monitor": "نسخ المراقبة",
"telegramMessageThreadIDDescription": "معرف فريد اختياري لسلسلة الرسائل المستهدفة (الموضوع) في المنتدى؛ لمجموعات المنتدى الكبرى فقط"
}

@ -0,0 +1,6 @@
{
"Language": "Sprach",
"Home": "Dahoam",
"setupDatabaseChooseDatabase": "Wos für a Datenbank wuist du?",
"setupDatabaseEmbeddedMariaDB": "Da brauchst nix mocha. Des Docker Buidl hod a Datenbank dabai und nimmt MariaDB. Uptime Kuma verbint se mit Unix Socket."
}

@ -802,7 +802,6 @@
"twilioApiKey": "API ключ (по избор)",
"Expected Value": "Очаквана стойност",
"Json Query": "Заявка тип JSON",
"jsonQueryDescription": "Прави JSON заявка срещу отговора и проверява за очаквана стойност (Върнатата стойност ще бъде преобразувана в низ за сравнение). Разгледайте {0} за документация относно езика на заявката. Имате възможност да тествате {1}.",
"Badge Duration (in hours)": "Времетраене на баджа (в часове)",
"Badge Preview": "Преглед на баджа",
"Notify Channel": "Канал за известяване",
@ -830,7 +829,7 @@
"noOrBadCertificate": "Няма/лош сертификат",
"Select": "Избери",
"selectedMonitorCount": "Избрано: {0}",
"wayToGetFlashDutyKey": "Можете да отидете на страница 'Channel -> (Select a Channel) -> Integrations -> Add a new integration' и да добавите 'Custom Event', за да получите 'push' адрес и да копирате ключа за интегриране в адреса. За повече информация, моля посетете",
"wayToGetFlashDutyKey": "Можете да отидете на страница 'Channel -> (Select a Channel) -> Integrations -> Add a new integration' и да добавите 'UptimeKuma', за да получите 'push' адрес и да копирате ключа за интегриране в адреса. За повече информация, моля посетете",
"PushDeer Server": "PushDeer сървър",
"pushDeerServerDescription": "Оставете празно, за да използвате официалния сървър",
"Check/Uncheck": "Постави/Премахни отметка",
@ -918,5 +917,60 @@
"ntfyPriorityHelptextAllEvents": "Всички събития се изпращат с максимален приоритет",
"settingUpDatabaseMSG": "Настройка на базата данни. Може да отнеме известно време, моля, бъдете търпеливи.",
"Search monitored sites": "Търсене на мониторирани сайтове",
"What is a Remote Browser?": "Какво е отдалечен браузър?"
"What is a Remote Browser?": "Какво е отдалечен браузър?",
"Channel access token (Long-lived)": "Токен код за достъп до канал (дълготраен)",
"Your User ID": "Вашето потребителско ID",
"documentationOf": "{0} Документация",
"wayToGetHeiiOnCallDetails": "Как да получите Trigger ID и API ключове е обяснено в {documentation}",
"To Phone Number": "До телефонен номер",
"gtxMessagingToHint": "Международен формат, като първо въведете знака \"+\" ({e164}, {e212} or {e214})",
"gtxMessagingApiKeyHint": "Можете да намерите вашия API ключ в: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "От телефонен номер / Изходен Адрес на Пътя на Предаване (ИАПП)",
"gtxMessagingFromHint": "На мобилни телефони, вашите получатели виждат ИАПП показан като подател на съобщението. Позволени са до 11 буквено-цифрови знака, кратък код, местен дълъг код или международни номера ({e164}, {e212} or {e214})",
"Alphanumeric (recommended)": "Буквено-цифров (препоръчително)",
"Telephone number": "Телефонен номер",
"Originator type": "Тип автор",
"Originator": "Автор",
"cellsyntOriginator": "Вижда се на мобилния телефон на получателя като автор на съобщението. Позволените стойности и функция зависят от параметъра - тип автор.",
"Destination": "Дестинация",
"Allow Long SMS": "Разреши дълъг SMS",
"cellsyntSplitLongMessages": "Раздели дългите съобщения до 6 части. 153 x 6 = 918 знака.",
"max 15 digits": "Максимум 15 цифри",
"max 11 alphanumeric characters": "Максимум 11 буквено-цифрови знака",
"cellsyntOriginatortypeAlphanumeric": "Буквено-цифров низ (максимум 11 буквено-цифрови знака). Получателите не могат да отговорят на съобщението.",
"cellsyntOriginatortypeNumeric": "Числова стойност (максимум 15 цифри) с телефонен номер в международен формат, без предхождащо въвеждане на 00 (примерен номер в България 088 123 45 67 трябва да бъде зададен като 359881234567). Получателите могат да отговорят на съобщението.",
"cellsyntDestination": "Телефонен номер на получателя в международен формат, предхождан от 00, последвано от код на държавата, напр. 00359881234567 за номер в България 088 123 45 67 (максимум 17 цифри). Максимум 25 000 получатели, разделени със запетая, на HTTP заявка.",
"callMeBotGet": "Тук можете да генерирате крайна точка за {0}, {1} и {2}. Имайте предвид, че може да получите ограничения в опитите. Ограниченията в опитите изглеждат: {3}",
"wayToGetWhapiUrlAndToken": "Можете да получите URL адреса на API и токена, като влезете в желания от вас канал от {0}",
"whapiRecipient": "Телефонен номер / ID на контакт / ID на група",
"API URL": "URL адрес на API",
"wayToWriteWhapiRecipient": "Телефонният номер с международния префикс, но без знака плюс в началото ({0}), ID на контакта ({1}) или ID на групата ({2}).",
"locally configured mail transfer agent": "локално конфигуриран \"mail transfer agent\"",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Или въведете името на хоста на сървъра, към който желаете да се свържете, или {localhost}, ако възнамерявате да използвате {local_mta}",
"Mentioning": "Споменаване",
"Don't mention people": "Не споменавай хора",
"Mention group": "Споменавай {group}",
"wayToGetSevenIOApiKey": "Посетете таблото за управление в app.seven.io > developer > api key > зеленият бутон за добавяне",
"receiverSevenIO": "Номер на получател",
"senderSevenIO": "Номер или име на подател",
"receiverInfoSevenIO": "Ако номерът на получателя не се намира в Германия, трябва да добавите кода на държавата пред номера (напр. за код на държавата 1 от САЩ използвайте 117612121212 вместо 017612121212)",
"apiKeySevenIO": "SevenIO API ключ",
"Host URL": "Хост URL адрес",
"Command": "Команда",
"mongodbCommandDescription": "Изпълни MongoDB команда срещу базата данни. За информация относно наличните команди, вижте {documentation}",
"Bitrix24 Webhook URL": "Bitrix24 Webhook URL адрес",
"wayToGetBitrix24Webhook": "Можете да създадете webhook, като следвате стъпките на {0}",
"bitrix24SupportUserID": "Въведете Вашето потребителско ID в Bitrix24. Можете да го намерите от връзката, като отидете в профила на потребителя.",
"Refresh Interval": "Интервал на опресняване",
"Refresh Interval Description": "Статус страницата ще извършва пълно опресняване на всеки {0} секунди",
"e.g. {discordThreadID}": "напр. {discordThreadID}",
"whatHappensAtForumPost": "Създава нова публикация във форума. Това НЕ публикува съобщения в съществуваща публикация. За да публикувате в съществуваща публикация, използвайте \"{option}\"",
"wayToGetDiscordThreadId": "Получаването на ID на тема/публикация във форум е подобно на получаването на ID на канал. Прочетете повече за това как да получите ID-та {0}",
"Select message type": "Изберете тип съобщение",
"Send to channel": "Изпрати до канал",
"ignoreTLSErrorGeneral": "Игнорирай TLS/SSL грешка зa връзка",
"Create new forum post": "Създай нова публикация във форум",
"postToExistingThread": "Публикувай в съществуваща тема/публикация във форум",
"forumPostName": "Име на публикацията във форума",
"threadForumPostID": "ID на публикация в темата/форум"
}

@ -25,11 +25,50 @@
"languageName": "Català",
"Primary Base URL": "URL Base Primària",
"statusMaintenance": "Manteniment",
"setupDatabaseChooseDatabase": "Quina base de dadas vols utilitzar?",
"setupDatabaseChooseDatabase": "Quina base de dades vols utilitzar?",
"setupDatabaseEmbeddedMariaDB": "No tens que configurar res. Aquesta imatge de docker ha configurat MariaDB automàticament. Uptime Kuma es conectarà a aquesta base de dades per el socket d'unix.",
"setupDatabaseMariaDB": "Conectar a una base de MariaDB externa. Has de ficar les dades de la conexió de la base de dades.",
"setupDatabaseSQLite": "Un simple fitxer de base de dades, es recomana per desplegaments en petita escala. Abans de la v2.0.0, Uptime Kuma utilitzaba SQLite com la base de dades predeterminada.",
"sameAsServerTimezone": "La mateixa zona horaria que el servidor",
"settingUpDatabaseMSG": "Configuració de la base de dades. Pot trigar una estona, si us plau, tingueu paciència.",
"dbName": "Nom de la base de dades"
"dbName": "Nom de la base de dades",
"Passive Monitor Type": "Tipus passiu de monitor",
"pauseDashboardHome": "Pausa",
"Pause": "Pausa",
"Name": "Nom",
"Status": "Estat",
"DateTime": "DataHora",
"Message": "Missatge",
"General Monitor Type": "Tipus general de monitor",
"Specific Monitor Type": "Tipus específic de monitor",
"Heartbeat Interval": "Interval de \"heartbeat\"",
"Request Timeout": "'Timeout' per petició",
"No important events": "Esdeveniments sense importància",
"Resume": "Resum",
"Edit": "Editar",
"Delete": "Eliminar",
"Current": "Actual",
"Uptime": "Temps actiu",
"Cert Exp.": "Caducitat del certificat",
"Monitor": "Monitor | Monitors",
"day": "dia | dies",
"-day": "-dia",
"hour": "hora",
"-hour": "-hora",
"Response": "Resposta",
"Ping": "Ping",
"Monitor Type": "Tipus de monitor",
"Keyword": "Paraula clau",
"Invert Keyword": "Invertir paraula clau",
"Expected Value": "Valor esperat",
"Json Query": "Cerca Json",
"URL": "URL",
"Hostname": "Nom del servidor",
"Port": "Port",
"timeoutAfter": "¡Timeout' després de {0",
"locally configured mail transfer agent": "Agent de transferència de correu configurat localment",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Introduïu el nom del servidor al qual voleu connectar-vos o {localhost} si voleu utilitzar un {local_mta}",
"Host URL": "URL del servidor",
"Friendly Name": "Nom senzill",
"markdownSupported": "Sintaxi de Markdown suportada"
}

@ -823,7 +823,6 @@
"Enable Kafka Producer Auto Topic Creation": "Povolit Kafka zprostředkovateli automatické vytváření vláken",
"Kafka Producer Message": "Zpráva Kafka zprostředkovatele",
"tailscalePingWarning": "Abyste mohli používat Tailscale Ping monitor, je nutné Uptime Kuma nainstalovat mimo Docker, a dále na váš server nainstalovat Tailscale klienta.",
"jsonQueryDescription": "Proveďte JSON dotaz vůči odpovědi a zkontrolujte očekávaný výstup (za účelem porovnání bude návratová hodnota převedena na řetězec). Dokumentaci k dotazovacímu jazyku naleznete na {0}, a využít můžete též {1}.",
"Select": "Vybrat",
"selectedMonitorCount": "Vybráno: {0}",
"Check/Uncheck": "Vybrat/Zrušit výběr",
@ -914,5 +913,44 @@
"Remote Browser": "Vzdálený prohlížeč",
"Add a new expiry notification day": "Přidání nového oznámení o vypršení platnosti",
"Remove the expiry notification": "Odstranit upozornění na vypršení",
"ntfyPriorityHelptextAllExceptDown": "Všechny události jsou odesílány s touto prioritou, kromě událostí {0}, které mají prioritu {1}"
"ntfyPriorityHelptextAllExceptDown": "Všechny události jsou odesílány s touto prioritou, kromě událostí {0}, které mají prioritu {1}",
"What is a Remote Browser?": "Co je to vzdálený prohlížeč?",
"Your User ID": "Vaše uživatelské ID",
"Channel access token (Long-lived)": "Přístupový token kanálu (s dlouhou životností)",
"wayToGetHeiiOnCallDetails": "Jak získat ID spouštěče a klíče API je vysvětleno v {documentation}",
"documentationOf": "{0} Dokumentace",
"gtxMessagingApiKeyHint": "Svůj klíč API najdete v menu: Moje směrovací účty > Zobrazit informace o účtu > Pověření API > REST API (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Z telefonního čísla / adresy původu přenosové cesty (TPOA)",
"To Phone Number": "Na telefonní číslo",
"gtxMessagingToHint": "Mezinárodní formát s počátečním \"+\" ({e164}, {e212} nebo {e214})",
"gtxMessagingFromHint": "V mobilních telefonech se příjemci zobrazí TPOA jako odesílatel zprávy. Povoleno je až 11 alfanumerických znaků, zkrácený kód, místní dlouhý kód nebo mezinárodní čísla ({e164}, {e212} nebo {e214})",
"cellsyntOriginatortypeAlphanumeric": "Alfanumerický řetězec (max. 11 alfanumerických znaků). Příjemci nemohou na zprávu odpovědět.",
"Originator type": "Typ původce",
"Alphanumeric (recommended)": "Alfanumerický (doporučeno)",
"Telephone number": "Telefonní číslo",
"cellsyntOriginatortypeNumeric": "Číselná hodnota (max. 15 číslic) s telefonním číslem v mezinárodním formátu bez počátečního 00 (například číslo pro UK 07920 110 000 by mělo být nastaveno jako 447920110000). Příjemci mohou na zprávu odpovědět.",
"Originator": "Původce",
"callMeBotGet": "Zde můžete vygenerovat koncový bod pro {0}, {1} a {2}. Mějte na paměti, že můžete být omezeni rychlostí. Omezení rychlosti vypadají takto: {3}",
"cellsyntOriginator": "Viditelný v mobilním telefonu příjemce jako původce zprávy. Přípustné hodnoty a funkce závisí na parametru originatortype.",
"Destination": "Cíl",
"cellsyntDestination": "Telefonní číslo příjemce v mezinárodním formátu s počátečním číslem 00 a kódem země, např. 00447920110000 pro číslo 07920 110 000 ve Spojeném království (celkem maximálně 17 číslic). Maximálně 25 000 příjemců oddělených čárkou na jeden požadavek HTTP.",
"whapiRecipient": "Telefonní číslo / ID kontaktu / ID skupiny",
"API URL": "API URL",
"Allow Long SMS": "Povolit dlouhé SMS",
"cellsyntSplitLongMessages": "Rozdělit dlouhé zprávy až na 6 částí. 153 x 6 = 918 znaků.",
"max 15 digits": "maximálně 15 číslic",
"max 11 alphanumeric characters": "maximálně 11 alfanumerických znaků",
"remoteBrowserToggle": "Ve výchozím nastavení běží Chromium uvnitř kontejneru Uptime Kuma. Přepnutím tohoto přepínače můžete použít vzdálený prohlížeč.",
"wayToGetWhapiUrlAndToken": "URL rozhraní API a token získáte tak, že přejdete do požadovaného kanálu z {0}",
"wayToWriteWhapiRecipient": "Telefonní číslo s mezinárodní předvolbou, ale bez znaménka plus na začátku ({0}), ID kontaktu ({1}) nebo ID skupiny ({2}).",
"remoteBrowsersDescription": "Vzdálené prohlížeče jsou alternativou k lokálně spuštěnému Chromu. Nastavte tuto možnost pomocí služby jako je browserless.io, nebo se připojte k vlastnímu vzdálenému prohlížeči",
"statusPageSpecialSlugDesc": "Speciální slug {0}: tato stránka se zobrazí, pokud není definován žádný slug",
"Mentioning": "Zmínky",
"wayToGetSevenIOApiKey": "Navštivte ovládací panel v části app.seven.io > developer > api key > zelené tlačítko přidat",
"senderSevenIO": "Číslo nebo jméno odesílatele",
"receiverSevenIO": "Přijímací číslo",
"apiKeySevenIO": "API klíč SevenIO",
"locally configured mail transfer agent": "místně nakonfigurovaný agent pro přenos pošty",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Zadejte název hostitele serveru, ke kterému se chcete připojit, nebo {localhost}, pokud hodláte použít {local_mta}",
"receiverInfoSevenIO": "Pokud se přijímající číslo nenachází v Německu, musíte před číslo přidat kód země (např. pro kód země 420 z ČR použijte 420603603603 místo 603603603)"
}

@ -655,5 +655,7 @@
"sameAsServerTimezone": "Samme som serverens tidszone",
"wayToGetLineNotifyToken": "Du kan få en adgangsnøgle fra {0}",
"telegramSendSilentlyDescription": "Send beskeden lydløst. Brugerne vil modtage en notifikation uden lyd.",
"pushoverMessageTtl": "Message TTL (Sekunder)"
"pushoverMessageTtl": "Message TTL (Sekunder)",
"setupDatabaseEmbeddedMariaDB": "Du skal ikke opsætte noget. Docker billedet har integreret og konfigureret MariaDB automatisk. Uptime Kuma vil forbinde til databasen vha. en Unix socket.",
"setupDatabaseMariaDB": "Oprette forbindelse til en ekstern MariaDB database. Du skal indstille databasens forbindelsesinformation."
}

@ -282,7 +282,7 @@
"appriseInstalled": "Apprise ist installiert.",
"appriseNotInstalled": "Apprise ist nicht installiert. {0}",
"Access Token": "Access Token",
"Channel access token": "Channel Access Token",
"Channel access token": "Kanalzugriffstoken",
"Line Developers Console": "Line Developers Console",
"lineDevConsoleTo": "Line Developers Console - {0}",
"Basic Settings": "Grundeinstellungen",
@ -337,7 +337,7 @@
"primary": "primär",
"light": "hell",
"dark": "dunkel",
"Post": "Eintrag",
"Post": "Veröffentlichen",
"Please input title and content": "Bitte Titel und Inhalt eingeben",
"Created": "Erstellt",
"Last Updated": "Zuletzt aktualisiert",
@ -394,7 +394,7 @@
"Valid": "Gültig",
"Invalid": "Ungültig",
"AccessKeyId": "AccessKey ID",
"SecretAccessKey": "AccessKey Secret",
"SecretAccessKey": "Geheimer Zugriffsschlüssel",
"PhoneNumbers": "Telefonnummern",
"TemplateCode": "Vorlagencode",
"SignName": "Signaturname",
@ -627,7 +627,7 @@
"lastDay4": "4. letzter Tag im Monat",
"No Maintenance": "Keine Wartung",
"pauseMaintenanceMsg": "Möchtest du wirklich pausieren?",
"maintenanceStatus-under-maintenance": "Unter Wartung",
"maintenanceStatus-under-maintenance": "In Wartung",
"maintenanceStatus-inactive": "Inaktiv",
"maintenanceStatus-scheduled": "Geplant",
"maintenanceStatus-ended": "Ende",
@ -753,30 +753,30 @@
"cronExpression": "Cron-Ausdruck",
"cronSchedule": "Zeitplan: ",
"invalidCronExpression": "Ungültiger Cron-Ausdruck: {0}",
"Open Badge Generator": "Open Badge Generator",
"Badge Generator": "{0}'s Badge Generator",
"Badge Type": "Badge Typ",
"Open Badge Generator": "Abzeichengenerator öffnen",
"Badge Generator": "{0}'s Abzeichen Generator",
"Badge Type": "Abzeichen Typ",
"Badge Duration": "Badge Dauer",
"Badge Label": "Badge Label",
"Badge Prefix": "Badge Wert Präfix",
"Badge Suffix": "Badge Wert Suffix",
"Badge Label Color": "Badge Label Farbe",
"Badge Color": "Badge Farbe",
"Badge Label Prefix": "Badge Label Präfix",
"Badge Up Color": "Badge Up Farbe",
"Badge Maintenance Color": "Badge Wartung Farbe",
"Badge Warn Color": "Badge Warnung Farbe",
"Badge Warn Days": "Badge Warnung Tage",
"Badge Style": "Badge Stil",
"Badge URL": "Badge URL",
"Badge Pending Color": "Badge Pending Farbe",
"Badge Down Days": "Badge Down Tage",
"Badge Label": "Abzeichen Label",
"Badge Prefix": "Abzeichen Wert Präfix",
"Badge Suffix": "Abzeichen Wert Suffix",
"Badge Label Color": "Abzeichen Label Farbe",
"Badge Color": "Abzeichen Farbe",
"Badge Label Prefix": "Abzeichen Label Präfix",
"Badge Up Color": "Abzeichen Up Farbe",
"Badge Maintenance Color": "Abzeichen Wartung Farbe",
"Badge Warn Color": "Abzeichen Warnung Farbe",
"Badge Warn Days": "Abzeichen Warnung Tage",
"Badge Style": "Abzeichen Stil",
"Badge URL": "Abzeichen URL",
"Badge Pending Color": "Abzeichen Pending Farbe",
"Badge Down Days": "Abzeichen Down Tage",
"Monitor Setting": "{0}'s Monitor Einstellung",
"Show Clickable Link": "Klickbaren Link anzeigen",
"Badge Label Suffix": "Badge Label Suffix",
"Badge value (For Testing only.)": "Badge Wert (nur für Tests)",
"Badge Label Suffix": "Abzeichen Label Suffix",
"Badge value (For Testing only.)": "Abzeichen Wert (nur für Tests)",
"Show Clickable Link Description": "Wenn diese Option aktiviert ist, kann jeder, der Zugriff auf diese Statusseite hat, auf die Monitor URL zugreifen.",
"Badge Down Color": "Badge Down Farbe",
"Badge Down Color": "Abzeichen Down Farbe",
"Edit Maintenance": "Wartung bearbeiten",
"Group": "Gruppe",
"Monitor Group": "Monitor Gruppe",
@ -812,9 +812,8 @@
"Json Query": "Json-Abfrage",
"filterActive": "Aktiv",
"filterActivePaused": "Pausiert",
"jsonQueryDescription": "Führe eine JSON-Abfrage gegen die Antwort durch und prüfe den erwarteten Wert (der Rückgabewert wird zum Vergleich in eine Zeichenkette umgewandelt). Auf {0} findest du die Dokumentation zur Abfragesprache. {1} kannst du Abfragen üben.",
"Badge Duration (in hours)": "Badge Dauer (in Stunden)",
"Badge Preview": "Badge Vorschau",
"Badge Duration (in hours)": "Abzeichen Dauer (in Stunden)",
"Badge Preview": "Abzeichen Vorschau",
"tailscalePingWarning": "Um den Tailscale Ping Monitor nutzen zu können, musst du Uptime Kuma ohne Docker installieren und den Tailscale Client auf dem Server installieren.",
"Server URL should not contain the nfty topic": "Die Server-URL sollte das nfty-Thema nicht enthalten",
"pushDeerServerDescription": "Leer lassen um den offiziellen Server zu verwenden",
@ -822,8 +821,8 @@
"nostrSender": "Privater Schlüssel des Absenders (nsec)",
"nostrRecipientsHelp": "npub-Format, eine pro Zeile",
"noOrBadCertificate": "Kein/schlechtes Zertifikat",
"wayToGetFlashDutyKey": "Gehe zu Channel -> (Wähle einen Channel) -> Integrationen -> Neue Integration hinzufügen', füge ein 'Custom Event' hinzu, um eine Push-Adresse zu erhalten, und kopiere den Integrationsschlüssel in die Adresse. Für weitere Informationen besuche bitte",
"nostrRelays": "Nostr relays",
"wayToGetFlashDutyKey": "Gehe zu Channel -> (Wähle einen Channel) -> Integrationen -> Neue Integration hinzufügen', füge ein 'Uptime Kuma' hinzu, um eine Push-Adresse zu erhalten, und kopiere den Integrationsschlüssel in die Adresse. Für weitere Informationen besuche",
"nostrRelays": "Nostr Relays",
"nostrRelaysHelp": "Eine Relay-URL pro Zeile",
"nostrRecipients": "Öffentliche Schlüssel des Empfängers (npub)",
"gamedigGuessPort": "Gamedig: Vermuteter Port",
@ -915,5 +914,60 @@
"Search monitored sites": "Überwachte Seiten durchsuchen",
"statusPageSpecialSlugDesc": "Spezieller Slug {0}: diese Seite wird angezeigt, wenn kein Slug angegeben wird",
"ntfyPriorityHelptextAllEvents": "Alle Ereignisse werden mit der höchsten Priorität gesendet",
"What is a Remote Browser?": "Was ist ein Remote-Browser?"
"What is a Remote Browser?": "Was ist ein Remote-Browser?",
"Channel access token (Long-lived)": "Channel-Token (langlebig)",
"Your User ID": "Deine Benutzer-ID",
"wayToGetHeiiOnCallDetails": "Wie man die Trigger-ID und API-Schlüssel erhält, wird in der {Dokumentation} erklärt",
"documentationOf": "{0} Dokumentation",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Von Telefonnummer / Transmission Path Originating Address (TPOA)",
"To Phone Number": "Zur Telefonnummer",
"gtxMessagingToHint": "Internationales Format, mit vorangestelltem \"+\" ({e164}, {e212} oder {e214})",
"gtxMessagingApiKeyHint": "Du findest deinen API-Schlüssel unter: Meine Routing-Konten > Kontoinformationen anzeigen > API-Anmeldeinformationen > REST-API (v2.x)",
"gtxMessagingFromHint": "Auf Mobiltelefonen sieht der Empfänger die TPOA als Absender der Nachricht. Erlaubt sind bis zu 11 alphanumerische Zeichen, eine Kurzwahlnummer, die lokale Langwahlnummer oder internationale Nummern ({e164}, {e212} oder {e214})",
"Telephone number": "Telefonnummer",
"Originator": "Absender",
"cellsyntOriginator": "Sichtbar auf dem Mobiltelefon des Empfängers als Absender der Nachricht. Zulässige Werte und Funktion hängen vom Parametertyp ab.",
"Destination": "Ziel",
"Allow Long SMS": "Lange SMS zulassen",
"cellsyntSplitLongMessages": "Teile lange Nachrichten in bis zu 6 Teile. 153 x 6 = 918 Zeichen.",
"max 15 digits": "max. 15 Ziffern",
"max 11 alphanumeric characters": "max. 11 alphanumerische Zeichen",
"Originator type": "Typ des Absenders",
"Alphanumeric (recommended)": "Alphanumerisch (empfohlen)",
"cellsyntOriginatortypeAlphanumeric": "Alphanumerische Zeichenfolge (max. 11 alphanumerische Zeichen). Die Empfänger können nicht auf die Nachricht antworten.",
"cellsyntOriginatortypeNumeric": "Numerischer Wert (max. 15 Stellen) mit Telefonnummer im internationalen Format ohne Vorwahl 00 (Beispiel UK-Nummer 07920 110 000 sollte auf 447920110000 gesetzt werden). Empfänger können auf die Nachricht antworten.",
"cellsyntDestination": "Telefonnummer des Empfängers im internationalen Format mit führender 00, gefolgt von der Landesvorwahl, z. B. 00447920110000 für die britische Nummer 07920 110 000 (insgesamt maximal 17 Ziffern). Maximal 25000 kommagetrennte Empfänger pro HTTP-Anfrage.",
"callMeBotGet": "Hier kannst du einen Endpunkt für {0}, {1} und {2} generieren. Denke daran, dass der Durchsatz möglicherweise begrenzt ist. Die Durchsatzbegrenzung ist: {3}",
"whapiRecipient": "Telefonnummer / Kontakt-ID / Gruppen-ID",
"API URL": "API URL",
"wayToWriteWhapiRecipient": "Die Rufnummer mit der internationalen Vorwahl, aber ohne das Pluszeichen am Anfang ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}).",
"wayToGetWhapiUrlAndToken": "Du kannst die API-URL und das Token erhalten, indem du in deinen gewünschten Channel von {0} gehst",
"locally configured mail transfer agent": "Lokal konfigurierter Mail-Transfer-Agent",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Gib entweder den Hostnamen des Servers ein, mit dem eine Verbindung hergestellt werden soll, oder {localhost}, wenn ein {local_mta} verwendet werden soll.",
"Mentioning": "Erwähnung",
"Don't mention people": "Keine Personen erwähnen",
"Mention group": "Erwähne {group}",
"senderSevenIO": "Absendernummer oder Name",
"receiverSevenIO": "Empfangende Nummer",
"receiverInfoSevenIO": "Wenn sich die empfangende Nummer nicht in Deutschland befindet, muss der Nummer die Landesvorwahl vorangestellt werden (z.B. für die Landesvorwahl 1 aus den USA muss 117612121212 anstelle von 017612121212 verwendet werden)",
"apiKeySevenIO": "SevenIO API Schlüssel",
"wayToGetSevenIOApiKey": "Besuche das Dashboard unter app.seven.io > Entwickler > API Schlüssel > grüne Hinzufügen Schaltfläche",
"Host URL": "Host URL",
"whatHappensAtForumPost": "Erstelle einen neuen Forumsbeitrag. Dadurch werden KEINE Nachrichten in einem bestehenden Beitrag veröffentlicht. Um einen Beitrag in einem bestehenden Beitrag zu erstellen, verwende \"{option}\"",
"Command": "Befehl",
"Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
"wayToGetBitrix24Webhook": "Du kannst einen Webhook erstellen, indem du die Schritte unter {0} befolgst",
"bitrix24SupportUserID": "Gib deine User-ID in Bitrix24 ein. Du kannst die ID über den Link erfahren, indem du auf das Profil des Users gehst.",
"mongodbCommandDescription": "Führe einen MongoDB Befehl gegen die Datenbank aus. Informationen zu den verfügbaren Befehlen findest du in der {documentation}",
"Refresh Interval": "Aktualisierungsintervall",
"Refresh Interval Description": "Die Statusseite wird alle {0} Sekunden neu geladen",
"Select message type": "Nachrichtentyp auswählen",
"Send to channel": "An Kanal senden",
"Create new forum post": "Neuen Forumsbeitrag erstellen",
"postToExistingThread": "An bestehendes Thema/Forumbeitrag senden",
"forumPostName": "Name des Forumsbeitrags",
"ignoreTLSErrorGeneral": "TLS/SSL-Fehler für Verbindung ignorieren",
"threadForumPostID": "Themen-/Forumbeitrags-ID",
"e.g. {discordThreadID}": "z.B. {discordThreadID}",
"wayToGetDiscordThreadId": "Das Abrufen einer Thread-/Forumspost-ID ist ähnlich wie das Abrufen einer Channel-ID. Lese mehr darüber, wie man IDs abruft {0}"
}

@ -1,5 +1,5 @@
{
"languageName": "Englisch",
"languageName": "Deutsch",
"Settings": "Einstellungen",
"Dashboard": "Dashboard",
"New Update": "Aktualisierung verfügbar",
@ -107,7 +107,7 @@
"deleteNotificationMsg": "Möchtest du diese Benachrichtigung wirklich für alle Monitore löschen?",
"resolverserverDescription": "Cloudflare ist als der Standardserver festgelegt. Dieser kann jederzeit geändert werden.",
"Resolver Server": "Auflösungsserver",
"rrtypeDescription": "Wähle den RR-Typ aus, welchen du überwachen möchtest.",
"rrtypeDescription": "Wähle den RR-Typ aus, welchen du überwachen möchtest",
"Last Result": "Letztes Ergebnis",
"pauseMonitorMsg": "Bist du sicher, dass du den Monitor pausieren möchtest?",
"clearEventsMsg": "Bist du sicher, dass du alle Ereignisse für diesen Monitor löschen möchtest?",
@ -282,7 +282,7 @@
"appriseInstalled": "Apprise ist installiert.",
"appriseNotInstalled": "Apprise ist nicht installiert. {0}",
"Access Token": "Zugriffstoken",
"Channel access token": "Channel access token",
"Channel access token": "Kanalzugriffstoken",
"Line Developers Console": "Zeile Entwickler Konsole",
"lineDevConsoleTo": "Line Entwicklerkonsole - {0}",
"Basic Settings": "Grundeinstellungen",
@ -337,7 +337,7 @@
"primary": "primär",
"light": "hell",
"dark": "dunkel",
"Post": "Eintrag",
"Post": "Veröffentlichen",
"Please input title and content": "Bitte Titel und Inhalt eingeben",
"Created": "Erstellt",
"Last Updated": "Zuletzt aktualisiert",
@ -567,7 +567,7 @@
"trustProxyDescription": "Vertraue 'X-Forwarded-*' headern. Wenn man die richtige Client IP haben möchte und Uptime Kuma hinter einem Proxy wie Nginx oder Apache läuft, sollte dies aktiviert werden.",
"wayToGetLineNotifyToken": "Du kannst hier ein Token erhalten: {0}",
"Examples": "Beispiele",
"Home Assistant URL": "Home Assistant URL",
"Home Assistant URL": "Heimassistent-URL",
"Long-Lived Access Token": "Lange gültiges Access Token",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Lange gültige Access Token können durch klicken auf den Profilnamen (unten links) und dann einen Klick auf Create Token am Ende erstellt werden. ",
"Notification Service": "Benachrichtigungsdienst",
@ -632,7 +632,7 @@
"Schedule Maintenance": "Wartung planen",
"Edit Maintenance": "Wartung bearbeiten",
"pauseMaintenanceMsg": "Möchtest du wirklich pausieren?",
"maintenanceStatus-under-maintenance": "Unter Wartung",
"maintenanceStatus-under-maintenance": "In Wartung",
"maintenanceStatus-inactive": "Inaktiv",
"maintenanceStatus-scheduled": "Geplant",
"maintenanceStatus-ended": "Ende",
@ -654,7 +654,7 @@
"dnsCacheDescription": "In einigen IPv6-Umgebungen funktioniert es möglicherweise nicht. Deaktiviere es, wenn Probleme auftreten.",
"loadingError": "Die Daten konnten nicht abgerufen werden, bitte später noch einmal versuchen.",
"confirmUninstallPlugin": "Möchtest du dieses Plugin wirklich deinstallieren?",
"grpcMethodDescription": "Der Name der Methode wird in das \"camelCase\"-Format konvertiert (z.B. sayHello, check, etc.)",
"grpcMethodDescription": "Der Name der Methode wird in das \"camelCase\"-Format konvertiert z.B. sayHello, check, etc.",
"Passive Monitor Type": "Passiver Monitortyp",
"Specific Monitor Type": "Spezifischer Monitortyp",
"webhookAdditionalHeadersTitle": "Zusätzliche Header",
@ -758,29 +758,29 @@
"cronSchedule": "Zeitplan: ",
"invalidCronExpression": "Ungültiger Cron-Ausdruck: {0}",
"Show Clickable Link": "Klickbaren Link anzeigen",
"Open Badge Generator": "Open Badge Generator",
"Badge Generator": "{0}'s Badge Generator",
"Badge Type": "Badge Typ",
"Open Badge Generator": "Abzeichengenerator öffnen",
"Badge Generator": "{0}'s Abzeichen Generator",
"Badge Type": "Abzeichen Typ",
"Badge Duration": "Badge Dauer",
"Badge Label": "Badge Label",
"Badge Label": "Abzeichen Label",
"Show Clickable Link Description": "Wenn diese Option aktiviert ist, kann jeder, der Zugriff auf diese Statusseite hat, auf die Monitor-URL zugreifen.",
"Badge Label Color": "Badge Label Farbe",
"Badge Color": "Badge Farbe",
"Badge Label Prefix": "Badge Label Präfix",
"Badge Label Suffix": "Badge Label Suffix",
"Badge Maintenance Color": "Badge Wartung Farbe",
"Badge Warn Color": "Badge Warnung Farbe",
"Badge Style": "Badge Stil",
"Badge value (For Testing only.)": "Badge Wert (nur für Tests)",
"Badge URL": "Badge URL",
"Badge Up Color": "Badge Up Farbe",
"Badge Down Color": "Badge Down Farbe",
"Badge Pending Color": "Badge Pending Farbe",
"Badge Down Days": "Badge Down Tage",
"Badge Label Color": "Abzeichen Label Farbe",
"Badge Color": "Abzeichen Farbe",
"Badge Label Prefix": "Abzeichen Label Präfix",
"Badge Label Suffix": "Abzeichen Label Suffix",
"Badge Maintenance Color": "Abzeichen Wartung Farbe",
"Badge Warn Color": "Abzeichen Warnung Farbe",
"Badge Style": "Abzeichen Stil",
"Badge value (For Testing only.)": "Abzeichen Wert (nur für Tests)",
"Badge URL": "Abzeichen URL",
"Badge Up Color": "Abzeichen Up Farbe",
"Badge Down Color": "Abzeichen Down Farbe",
"Badge Pending Color": "Abzeichen Pending Farbe",
"Badge Down Days": "Abzeichen Down Tage",
"Monitor Setting": "{0}'s Monitor Einstellung",
"Badge Prefix": "Badge Wert Präfix",
"Badge Suffix": "Badge Wert Suffix",
"Badge Warn Days": "Badge Warnung Tage",
"Badge Prefix": "Abzeichen Wert Präfix",
"Badge Suffix": "Abzeichen Wert Suffix",
"Badge Warn Days": "Abzeichen Warnung Tage",
"Group": "Gruppe",
"Monitor Group": "Monitor Gruppe",
"noGroupMonitorMsg": "Nicht verfügbar. Erstelle zunächst einen Gruppenmonitor.",
@ -794,8 +794,8 @@
"webhookBodyPresetOption": "Voreinstellung - {0}",
"webhookBodyCustomOption": "Benutzerdefinierter Body",
"Request Body": "Anforderungstext",
"Badge Duration (in hours)": "Badge Dauer (in Stunden)",
"Badge Preview": "Badge Vorschau",
"Badge Duration (in hours)": "Abzeichen Dauer (in Stunden)",
"Badge Preview": "Abzeichen Vorschau",
"twilioApiKey": "API-Schlüssel (optional)",
"Notify Channel": "Notify Kanal",
"Enter the list of brokers": "Gib die Liste der Broker ein",
@ -808,7 +808,7 @@
"Pick a SASL Mechanism...": "Wähle ein SASL Mechanismus…",
"Authorization Identity": "Authorization Identity",
"AccessKey Id": "AccessKey Id",
"Secret AccessKey": "Secret AccessKey",
"Secret AccessKey": "Geheimer Zugriffsschlüssel",
"Session Token": "Sitzungs-Token",
"aboutNotifyChannel": "Notify Kanal löst eine Desktop- oder Mobilbenachrichtigung für alle Mitglieder des Kanals aus, unabhängig davon, ob deine Verfügbarkeit auf aktiv oder abwesend eingestellt ist.",
"Kafka Brokers": "Kafka Brokers",
@ -817,12 +817,11 @@
"filterActivePaused": "Pausiert",
"Expected Value": "Erwarteter Wert",
"Json Query": "Json-Abfrage",
"jsonQueryDescription": "Führe eine JSON-Abfrage gegen die Antwort durch und prüfe den erwarteten Wert (der Rückgabewert wird zum Vergleich in eine Zeichenkette umgewandelt). Auf {0} findest du die Dokumentation zur Abfragesprache. {1} kannst du Abfragen üben.",
"tailscalePingWarning": "Um den Tailscale Ping Monitor nutzen zu können, musst du Uptime Kuma ohne Docker installieren und den Tailscale Client auf dem Server installieren.",
"Server URL should not contain the nfty topic": "Die Server-URL sollte das nfty-Thema nicht enthalten",
"pushDeerServerDescription": "Leer lassen um den offiziellen Server zu verwenden",
"FlashDuty Severity": "Schweregrad",
"nostrRelays": "Nostr relays",
"nostrRelays": "Nostr Relays",
"gamedigGuessPort": "Gamedig: Vermuteter Port",
"Request Timeout": "Zeitüberschreitung der Anfrage",
"styleElapsedTimeShowNoLine": "Anzeigen (keine Zeile)",
@ -832,7 +831,7 @@
"nostrRelaysHelp": "Eine Relay-URL pro Zeile",
"nostrSender": "Privater Schlüssel des Absenders (nsec)",
"gamedigGuessPortDescription": "Der vom Valve Server Query Protocol verwendete Port kann sich vom Port des Clients unterscheiden. Versuche dies, wenn der Monitor keine Verbindung zum Server herstellen kann.",
"wayToGetFlashDutyKey": "Gehe zu Channel -> (Wähle einen Channel) -> Integrationen -> Neue Integration hinzufügen', füge ein 'Custom Event' hinzu, um eine Push-Adresse zu erhalten, und kopiere den Integrationsschlüssel in die Adresse. Für weitere Informationen besuche bitte",
"wayToGetFlashDutyKey": "Gehe zu Channel -> (Wähle einen Channel) -> Integrationen -> Neue Integration hinzufügen', füge ein 'Uptime Kuma' hinzu, um eine Push-Adresse zu erhalten, und kopiere den Integrationsschlüssel in die Adresse. Für weitere Informationen besuche",
"timeoutAfter": "Zeitüberschreitung nach {0} Sekunden",
"styleElapsedTimeShowWithLine": "Anzeigen (mit Zeile)",
"styleElapsedTime": "Verstrichene Zeit unter der Prüfintervallleiste",
@ -898,11 +897,11 @@
"Browser Screenshot": "Browser Screenshot",
"setup a new monitor group": "Neue Monitorgruppe einrichten",
"Add a new expiry notification day": "Neuen Tag für Auslaufbenachrichtigung hinzufügen",
"Remote Browsers": "Remote Browsers",
"Remote Browsers": "Remote Browser",
"Remote Browser": "Remote Browser",
"Add a Remote Browser": "Remote Browser hinzufügen",
"Remote Browser not found!": "Remote Browser nicht gefunden!",
"remoteBrowsersDescription": "Remote Browser sind eine Alternative zur lokalen Ausführung von Chromium. Einrichtung mit einem Dienst wie browserless.io oder verbinde mit deinem Eigenen.",
"remoteBrowsersDescription": "Remote Browser sind eine Alternative zur lokalen Ausführung von Chromium. Einrichtung mit einem Dienst wie browserless.io oder verbinde mit deinem Eigenen",
"self-hosted container": "Selbstverwalteter Container",
"remoteBrowserToggle": "Standardmäßig läuft Chromium innerhalb des Uptime-Kuma-Containers. Du kannst einen Remote-Browser verwenden, indem du diesen Schalter umlegst.",
"useRemoteBrowser": "Verwende einen Remote Browser",
@ -918,5 +917,60 @@
"statusPageSpecialSlugDesc": "Spezieller Slug {0}: diese Seite wird angezeigt, wenn kein Slug angegeben wird",
"ntfyPriorityHelptextAllEvents": "Alle Ereignisse werden mit der höchsten Priorität gesendet",
"ntfyPriorityHelptextAllExceptDown": "Alle Ereignisse werden mit dieser Priorität gesendet, außer {0}-Ereignisse, die eine Priorität von {1} haben",
"What is a Remote Browser?": "Was ist ein Remote-Browser?"
"What is a Remote Browser?": "Was ist ein Remote-Browser?",
"Channel access token (Long-lived)": "Channel-Token (langlebig)",
"Your User ID": "Deine Benutzer-ID",
"wayToGetHeiiOnCallDetails": "Wie man die Trigger-ID und API-Schlüssel erhält, wird in der {Dokumentation} erklärt",
"documentationOf": "{0} Dokumentation",
"gtxMessagingToHint": "Internationales Format, mit vorangestelltem \"+\" ({e164}, {e212} oder {e214})",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Von Telefonnummer / Transmission Path Originating Address (TPOA)",
"To Phone Number": "Zur Telefonnummer",
"gtxMessagingApiKeyHint": "Du findest deinen API-Schlüssel unter: Meine Routing-Konten > Kontoinformationen anzeigen > API-Anmeldeinformationen > REST-API (v2.x)",
"gtxMessagingFromHint": "Auf Mobiltelefonen sieht der Empfänger die TPOA als Absender der Nachricht. Erlaubt sind bis zu 11 alphanumerische Zeichen, eine Kurzwahlnummer, die lokale Langwahlnummer oder internationale Nummern ({e164}, {e212} oder {e214})",
"Alphanumeric (recommended)": "Alphanumerisch (empfohlen)",
"Telephone number": "Telefonnummer",
"Originator": "Absender",
"cellsyntOriginator": "Sichtbar auf dem Mobiltelefon des Empfängers als Absender der Nachricht. Zulässige Werte und Funktion hängen vom Parametertyp ab.",
"Destination": "Ziel",
"Allow Long SMS": "Lange SMS zulassen",
"cellsyntSplitLongMessages": "Teile lange Nachrichten in bis zu 6 Teile. 153 x 6 = 918 Zeichen.",
"max 15 digits": "max. 15 Ziffern",
"max 11 alphanumeric characters": "max. 11 alphanumerische Zeichen",
"Originator type": "Typ des Absenders",
"cellsyntOriginatortypeAlphanumeric": "Alphanumerische Zeichenfolge (max. 11 alphanumerische Zeichen). Die Empfänger können nicht auf die Nachricht antworten.",
"cellsyntOriginatortypeNumeric": "Numerischer Wert (max. 15 Stellen) mit Telefonnummer im internationalen Format ohne Vorwahl 00 (Beispiel UK-Nummer 07920 110 000 sollte auf 447920110000 gesetzt werden). Empfänger können auf die Nachricht antworten.",
"cellsyntDestination": "Telefonnummer des Empfängers im internationalen Format mit führender 00, gefolgt von der Landesvorwahl, z. B. 00447920110000 für die britische Nummer 07920 110 000 (insgesamt maximal 17 Ziffern). Maximal 25000 kommagetrennte Empfänger pro HTTP-Anfrage.",
"callMeBotGet": "Hier kannst du einen Endpunkt für {0}, {1} und {2} generieren. Denke daran, dass der Durchsatz möglicherweise begrenzt ist. Die Durchsatzbegrenzung ist: {3}",
"wayToGetWhapiUrlAndToken": "Du kannst die API-URL und das Token erhalten, indem du in deinen gewünschten Channel von {0} gehst",
"whapiRecipient": "Telefonnummer / Kontakt-ID / Gruppen-ID",
"API URL": "API URL",
"wayToWriteWhapiRecipient": "Die Rufnummer mit der internationalen Vorwahl, aber ohne das Pluszeichen am Anfang ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}).",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Gib entweder den Hostnamen des Servers ein, mit dem eine Verbindung hergestellt werden soll, oder {localhost}, wenn ein {local_mta} verwendet werden soll.",
"locally configured mail transfer agent": "Lokal konfigurierter Mail-Transfer-Agent",
"Mentioning": "Erwähnung",
"Don't mention people": "Keine Personen erwähnen",
"Mention group": "Erwähne {group}",
"senderSevenIO": "Absendernummer oder Name",
"receiverSevenIO": "Empfangende Nummer",
"apiKeySevenIO": "SevenIO API Schlüssel",
"wayToGetSevenIOApiKey": "Besuche das Dashboard unter app.seven.io > Entwickler > API Schlüssel > grüne Hinzufügen Schaltfläche",
"receiverInfoSevenIO": "Wenn sich die empfangende Nummer nicht in Deutschland befindet, muss der Nummer die Landesvorwahl vorangestellt werden (z.B. für die Landesvorwahl 1 aus den USA muss 117612121212 anstelle von 017612121212 verwendet werden)",
"Host URL": "Host URL",
"whatHappensAtForumPost": "Erstelle einen neuen Forumsbeitrag. Dadurch werden KEINE Nachrichten in einem bestehenden Beitrag veröffentlicht. Um einen Beitrag in einem bestehenden Beitrag zu erstellen, verwende \"{option}\"",
"Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
"wayToGetBitrix24Webhook": "Du kannst einen Webhook erstellen, indem du die Schritte unter {0} befolgst",
"bitrix24SupportUserID": "Gib deine User-ID in Bitrix24 ein. Du kannst die ID über den Link erfahren, indem du auf das Profil des Users gehst.",
"Command": "Befehl",
"mongodbCommandDescription": "Führe einen MongoDB Befehl gegen die Datenbank aus. Informationen zu den verfügbaren Befehlen findest du in der {documentation}",
"Refresh Interval": "Aktualisierungsintervall",
"Refresh Interval Description": "Die Statusseite wird alle {0} Sekunden neu geladen",
"Select message type": "Nachrichtentyp auswählen",
"Send to channel": "An Kanal senden",
"ignoreTLSErrorGeneral": "TLS/SSL-Fehler für Verbindung ignorieren",
"Create new forum post": "Neuen Forumsbeitrag erstellen",
"postToExistingThread": "An bestehendes Thema/Forumbeitrag senden",
"forumPostName": "Name des Forumsbeitrags",
"threadForumPostID": "Themen-/Forumbeitrags-ID",
"e.g. {discordThreadID}": "z.B. {discordThreadID}",
"wayToGetDiscordThreadId": "Das Abrufen einer Thread-/Forumspost-ID ist ähnlich wie das Abrufen einer Channel-ID. Lese mehr darüber, wie man IDs abruft {0}"
}

@ -1,6 +1,6 @@
{
"languageName": "English",
"setupDatabaseChooseDatabase": "Which database do you want to use?",
"setupDatabaseChooseDatabase": "Which database would you like to use?",
"setupDatabaseEmbeddedMariaDB": "You don't need to set anything. This docker image has embedded and configured MariaDB for you automatically. Uptime Kuma will connect to this database via unix socket.",
"setupDatabaseMariaDB": "Connect to an external MariaDB database. You need to set the database connection information.",
"setupDatabaseSQLite": "A simple database file, recommended for small-scale deployments. Prior to v2.0.0, Uptime Kuma used SQLite as the default database.",
@ -59,10 +59,13 @@
"Keyword": "Keyword",
"Invert Keyword": "Invert Keyword",
"Expected Value": "Expected Value",
"Json Query": "Json Query",
"Json Query Expression": "Json Query Expression",
"Friendly Name": "Friendly Name",
"URL": "URL",
"Hostname": "Hostname",
"Host URL": "Host URL",
"locally configured mail transfer agent": "locally configured mail transfer agent",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Either enter the hostname of the server you want to connect to or {localhost} if you intend to use a {local_mta}",
"Port": "Port",
"Heartbeat Interval": "Heartbeat Interval",
"Request Timeout": "Request Timeout",
@ -77,6 +80,7 @@
"resendDisabled": "Resend disabled",
"retriesDescription": "Maximum retries before the service is marked as down and a notification is sent",
"ignoreTLSError": "Ignore TLS/SSL errors for HTTPS websites",
"ignoreTLSErrorGeneral": "Ignore TLS/SSL error for connection",
"upsideDownModeDescription": "Flip the status upside down. If the service is reachable, it is DOWN.",
"maxRedirectDescription": "Maximum number of redirects to follow. Set to 0 to disable redirects.",
"Upside Down Mode": "Upside Down Mode",
@ -90,8 +94,8 @@
"programmingLanguages": "Programming Languages",
"Save": "Save",
"Notifications": "Notifications",
"Not available, please setup.": "Not available, please setup.",
"Setup Notification": "Setup Notification",
"Not available, please setup.": "Not available, please set up.",
"Setup Notification": "Set Up Notification",
"Light": "Light",
"Dark": "Dark",
"Auto": "Auto",
@ -166,7 +170,7 @@
"Options": "Options",
"Keep both": "Keep both",
"Verify Token": "Verify Token",
"Setup 2FA": "Setup 2FA",
"Setup 2FA": "Set Up 2FA",
"Enable 2FA": "Enable 2FA",
"Disable 2FA": "Disable 2FA",
"2FA Settings": "2FA Settings",
@ -279,7 +283,6 @@
"Please input title and content": "Please input title and content",
"Created": "Created",
"Last Updated": "Last Updated",
"Unpin": "Unpin",
"Switch to Light Theme": "Switch to Light Theme",
"Switch to Dark Theme": "Switch to Dark Theme",
"Show Tags": "Show Tags",
@ -358,6 +361,8 @@
"Proxy": "Proxy",
"Date Created": "Date Created",
"Footer Text": "Footer Text",
"Refresh Interval": "Refresh Interval",
"Refresh Interval Description": "The status page will do a full site refresh every {0} seconds",
"Show Powered By": "Show Powered By",
"Domain Names": "Domain Names",
"signedInDisp": "Signed in as {0}",
@ -387,10 +392,10 @@
"Query": "Query",
"settingsCertificateExpiry": "TLS Certificate Expiry",
"certificationExpiryDescription": "HTTPS Monitors trigger notification when TLS certificate expires in:",
"Setup Docker Host": "Setup Docker Host",
"Setup Docker Host": "Set Up Docker Host",
"Connection Type": "Connection Type",
"Docker Daemon": "Docker Daemon",
"noDockerHostMsg": "Not Available. Setup a Docker Host First.",
"noDockerHostMsg": "Not Available. Set Up a Docker Host First.",
"DockerHostRequired": "Please set the Docker Host for this monitor.",
"deleteDockerHostMsg": "Are you sure want to delete this docker host for all monitors?",
"socket": "Socket",
@ -524,6 +529,15 @@
"Bot Display Name": "Bot Display Name",
"Prefix Custom Message": "Prefix Custom Message",
"Hello @everyone is...": "Hello {'@'}everyone is…",
"Select message type": "Select message type",
"Send to channel": "Send to channel",
"Create new forum post": "Create new forum post",
"postToExistingThread": "Post to existing thread / forum post",
"forumPostName": "Forum post name",
"threadForumPostID": "Thread / Forum post ID",
"e.g. {discordThreadID}": "e.g. {discordThreadID}",
"whatHappensAtForumPost": "Create a new forum post. This does NOT post messages in existing post. To post in existing post use \"{option}\"",
"wayToGetDiscordThreadId": "Getting a thread / forum post id is similar to getting a channel id. Read more about how to get ids {0}",
"wayToGetTeamsURL": "You can learn how to create a webhook URL {0}.",
"wayToGetZohoCliqURL": "You can learn how to create a webhook URL {0}.",
"needSignalAPI": "You need to have a signal client with REST API.",
@ -574,7 +588,7 @@
"notificationDescription": "Notifications must be assigned to a monitor to function.",
"keywordDescription": "Search keyword in plain HTML or JSON response. The search is case-sensitive.",
"invertKeywordDescription": "Look for the keyword to be absent rather than present.",
"jsonQueryDescription": "Do a json Query against the response and check for expected value (Return value will get converted into string for comparison). Check out {0} for the documentation about the query language. A playground can be found {1}.",
"jsonQueryDescription": "Parse and extract specific data from the server's JSON response using JSON query or use \"$\" for the raw response, if not expecting JSON. The result is then compared to the expected value, as strings. See {0} for documentation and use {1} to experiment with queries.",
"backupDescription": "You can backup all monitors and notifications into a JSON file.",
"backupDescription2": "Note: history and event data is not included.",
"backupDescription3": "Sensitive data such as notification tokens are included in the export file; please store export securely.",
@ -665,6 +679,9 @@
"WebHookUrl": "WebHookUrl",
"SecretKey": "SecretKey",
"For safety, must use secret key": "For safety, must use secret key",
"Mentioning": "Mentioning",
"Don't mention people": "Don't mention people",
"Mention group": "Mention {group}",
"Device Token": "Device Token",
"Platform": "Platform",
"Huawei": "Huawei",
@ -672,7 +689,7 @@
"Retry": "Retry",
"Topic": "Topic",
"WeCom Bot Key": "WeCom Bot Key",
"Setup Proxy": "Setup Proxy",
"Setup Proxy": "Set Up Proxy",
"Proxy Protocol": "Proxy Protocol",
"Proxy Server": "Proxy Server",
"Proxy server has authentication": "Proxy server has authentication",
@ -692,7 +709,7 @@
"Notify Channel": "Notify Channel",
"aboutNotifyChannel": "Notify channel will trigger a desktop or mobile notification for all members of the channel, whether their availability is set to active or away.",
"Uptime Kuma URL": "Uptime Kuma URL",
"setup a new monitor group": "setup a new monitor group",
"setup a new monitor group": "set up a new monitor group",
"openModalTo": "open modal to {0}",
"Add a domain": "Add a domain",
"Remove domain": "Remove domain '{0}'",
@ -735,6 +752,11 @@
"smseagleUrl": "Your SMSEagle device URL",
"smseagleEncoding": "Send as Unicode",
"smseaglePriority": "Message priority (0-9, default = 0)",
"smspartnerApiurl": "You can find your API key in your dashboard at {0}",
"smspartnerPhoneNumber": "Phone number(s)",
"smspartnerPhoneNumberHelptext": "The number must be in the international format {0}, {1}. Multiple numbers must be separated by {2}",
"smspartnerSenderName": "SMS Sender Name",
"smspartnerSenderNameInfo": "Must be between 3..=11 regular characters",
"Recipient Number": "Recipient Number",
"From Name/Number": "From Name/Number",
"Leave blank to use a shared sender number.": "Leave blank to use a shared sender number.",
@ -789,7 +811,7 @@
"lunaseaDeviceID": "Device ID",
"lunaseaUserID": "User ID",
"ntfyAuthenticationMethod": "Authentication Method",
"ntfyPriorityHelptextAllEvents": "All events are send with the maximum priority",
"ntfyPriorityHelptextAllEvents": "All events are sent with the maximum priority",
"ntfyPriorityHelptextAllExceptDown": "All events are sent with this priority, except {0}-events, which have a priority of {1}",
"ntfyUsernameAndPassword": "Username and Password",
"twilioAccountSID": "Account SID",
@ -845,7 +867,7 @@
"noGroupMonitorMsg": "Not Available. Create a Group Monitor First.",
"Close": "Close",
"Request Body": "Request Body",
"wayToGetFlashDutyKey": "You can go to Channel -> (Select a Channel) -> Integrations -> Add a new integration' page, add a 'Custom Event' to get a push address, copy the Integration Key in the address. For more information, please visit",
"wayToGetFlashDutyKey": "You can go to Channel -> (Select a Channel) -> Integrations -> Add a new integration' page, add a 'Uptime Kuma' to get a push address, copy the Integration Key in the address. For more information, please visit",
"FlashDuty Severity": "Severity",
"nostrRelays": "Nostr relays",
"nostrRelaysHelp": "One relay URL per line",
@ -856,6 +878,9 @@
"noOrBadCertificate": "No/Bad Certificate",
"gamedigGuessPort": "Gamedig: Guess Port",
"gamedigGuessPortDescription": "The port used by Valve Server Query Protocol may be different from the client port. Try this if the monitor cannot connect to your server.",
"Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
"wayToGetBitrix24Webhook": "You can create a webhook by following the steps at {0}",
"bitrix24SupportUserID": "Enter your user ID in Bitrix24. You can find out the ID from the link by going to the user's profile.",
"Saved.": "Saved.",
"authUserInactiveOrDeleted": "The user is inactive or deleted.",
"authInvalidToken": "Invalid Token.",
@ -878,13 +903,20 @@
"Remote Browser": "Remote Browser",
"Add a Remote Browser": "Add a Remote Browser",
"Remote Browser not found!": "Remote Browser not found!",
"remoteBrowsersDescription": "Remote Browsers are an alternative to running Chromium locally. Setup with a service like browserless.io or connect to your own",
"remoteBrowsersDescription": "Remote Browsers are an alternative to running Chromium locally. Set up with a service like browserless.io or connect to your own",
"self-hosted container": "self-hosted container",
"remoteBrowserToggle": "By default Chromium runs inside the Uptime Kuma container. You can use a remote browser by toggling this switch.",
"useRemoteBrowser": "Use a Remote Browser",
"deleteRemoteBrowserMessage": "Are you sure want to delete this Remote Browser for all monitors?",
"GrafanaOncallUrl": "Grafana Oncall URL",
"Browser Screenshot": "Browser Screenshot",
"Command": "Command",
"mongodbCommandDescription": "Run a MongoDB command against the database. For information about the available commands check out the {documentation}",
"wayToGetSevenIOApiKey": "Visit the dashboard under app.seven.io > developer > api key > the green add button",
"senderSevenIO": "Sending number or name",
"receiverSevenIO": "Receiving number",
"receiverInfoSevenIO": "If the receiving number is not located in Germany, you have to add the country code in front of the number (e.g. for the country code 1 from the US use 117612121212 instead of 017612121212)",
"apiKeySevenIO": "SevenIO API Key",
"wayToWriteWhapiRecipient": "The phone number with the international prefix, but without the plus sign at the start ({0}), the Contact ID ({1}) or the Group ID ({2}).",
"wayToGetWhapiUrlAndToken": "You can get the API URL and the token by going into your desired channel from {0}",
"whapiRecipient": "Phone Number / Contact ID / Group ID",
@ -912,5 +944,25 @@
"max 15 digits": "max 15 digits",
"max 11 alphanumeric characters": "max 11 alphanumeric characters",
"offlineMonitor": "Offline Monitor",
"offlineMonitors": "Offline Monitors"
"offlineMonitors": "Offline Monitors",
"Community String": "Community String",
"snmpCommunityStringHelptext": "This string functions as a password to authenticate and control access to SNMP-enabled devices. Match it with your SNMP device's configuration.",
"OID (Object Identifier)": "OID (Object Identifier)",
"snmpOIDHelptext": "Enter the OID for the sensor or status you want to monitor. Use network management tools like MIB browsers or SNMP software if you're unsure about the OID.",
"Condition": "Condition",
"SNMP Version": "SNMP Version",
"Please enter a valid OID.": "Please enter a valid OID.",
"wayToGetThreemaGateway": "You can register for Threema Gateway {0}.",
"threemaRecipient": "Recipient",
"threemaRecipientType": "Recipient Type",
"threemaRecipientTypeIdentity": "Threema-ID",
"threemaRecipientTypeIdentityFormat": "8 characters",
"threemaRecipientTypePhone": "Phone Number",
"threemaRecipientTypePhoneFormat": "E.164, without leading +",
"threemaRecipientTypeEmail": "Email Address",
"threemaSenderIdentity": "Gateway-ID",
"threemaSenderIdentityFormat": "8 characters, usually starts with *",
"threemaApiAuthenticationSecret": "Gateway-ID Secret",
"threemaBasicModeInfo": "Note: This integration uses Threema Gateway in basic mode (server-based encryption). Further details can be found {0}.",
"apiKeysDisabledMsg": "API keys are disabled because authentication is disabled."
}

@ -396,7 +396,7 @@
"successMessage": "Mensaje de éxito",
"Pick Accepted Status Codes...": "Seleccione Códigos de Estado Aceptados…",
"Post": "Post",
"shrinkDatabaseDescription": "Activar ASPIRADORA para SQLite. Si tu base de datos fue creada después 1.10.0, AUTO_ASPIRADORA ya está habilitada y esta acción no es necesaria.",
"shrinkDatabaseDescription": "Activar VACUUM para SQLite. Si tu base de datos fue creada después 1.10.0, AUTO_VACUUM ya está habilitada y esta acción no es necesaria.",
"deleteStatusPageMsg": "¿Estas seguro que quieres eliminar esta página de estado?",
"default": "Predeterminado",
"enabled": "Habilitado",
@ -771,7 +771,6 @@
"Json Query": "Consulta Json",
"invertKeywordDescription": "Comprobar si la palabra clave está ausente en vez de presente.",
"enableNSCD": "Habilitar NSCD (Demonio de Caché de Servicio de Nombres) para almacenar en caché todas las solicitudes DNS",
"jsonQueryDescription": "Realiza una consulta JSON contra la respuesta y verifica el valor esperado (el valor de retorno se convertirá a una cadena para la comparación). Consulta {0} para obtener documentación sobre el lenguaje de consulta. Puede encontrar un espacio de prueba {1}.",
"Request Timeout": "Tiempo de espera máximo de petición",
"timeoutAfter": "Expirar después de {0} segundos",
"chromeExecutableDescription": "Para usuarios de Docker, si Chromium no está instalado, puede que tarde unos minutos en ser instalado y mostrar el resultado de la prueba. Usa 1GB de espacio.",
@ -848,15 +847,15 @@
"toastSuccessTimeout": "Tiempo de espera para notificaciones de éxito",
"toastErrorTimeout": "Tiempo de espera para notificaciones de error",
"setupDatabaseChooseDatabase": "¿Qué base de datos desea utilizar?",
"setupDatabaseEmbeddedMariaDB": "No necesitas configurar nada. Esta imagen docker ha incrustado y configurado MariaDB para ti automáticamente. Uptime Kuma se conectará a esta base de datos a través de un socket unix.",
"setupDatabaseEmbeddedMariaDB": "No necesitas configurar nada. Esta imagen de Docker tiene incorporado y configurado MariaDB para ti automáticamente. Uptime Kuma se conectará a esta base de datos a través de un socket Unix.",
"setupDatabaseMariaDB": "Conectarse a una base de datos MariaDB externa. Debe configurar la información de conexión a la base de datos.",
"setupDatabaseSQLite": "Un archivo de base de datos simple, recomendado para despliegues a pequeña escala. Antes de la versión 2.0.0, Uptime Kuma utilizaba SQLite como base de datos predeterminada.",
"dbName": "Nombre de la base de datos",
"dbName": "Nombre de la Base de Datos",
"authInvalidToken": "Token inválido.",
"authIncorrectCreds": "Nombre de usuario o contraseña incorrectos.",
"2faEnabled": "2FA habilitado.",
"2faDisabled": "2FA deshabilitado.",
"liquidIntroduction": "El lenguaje de plantillas Liquid permite crear plantillas. Consulte las instrucciones de uso en {0}. Estas son las variables disponibles:",
"liquidIntroduction": "La plantilla se logra a través del lenguaje de plantillas Liquid. Consulte {0} para obtener instrucciones de uso. Estas son las variables disponibles:",
"templateLimitedToUpDownCertNotifications": "sólo disponible para las notificaciones de LEVANTADO/CAÍDO/Caducidad de certificado",
"emailTemplateMsg": "mensaje de la notificación",
"emailTemplateLimitedToUpDownNotification": "sólo disponible para pulsos LEVANTADO/CAÍDO, en caso contrario null",
@ -892,7 +891,7 @@
"foundChromiumVersion": "Encontrado Chromium/Chrome. Versión: {0}",
"pushViewCode": "¿Cómo utilizar el monitor Push? (Ver código)",
"pushOthers": "Otros",
"programmingLanguages": "Lenguajes de programación",
"programmingLanguages": "Lenguajes de Programación",
"templateMsg": "mensaje de la notificación",
"templateMonitorJSON": "objeto que describe el monitor",
"templateLimitedToUpDownNotifications": "sólo disponible para notificaciones LEVANTADO/CAÍDO",
@ -916,5 +915,13 @@
"emailTemplateHeartbeatJSON": "Objeto que describe la señal de vida",
"ntfyPriorityHelptextAllEvents": "Todos los eventos son enviados con la máxima prioridad",
"ntfyPriorityHelptextAllExceptDown": "Todos los eventos son enviados con esta prioridad, excepto los eventos {0}, que tienen una prioridad de {1}",
"templateHeartbeatJSON": "Objeto que describe el latido"
"templateHeartbeatJSON": "Objeto que describe el latido",
"What is a Remote Browser?": "¿Qué es un Navegador Remoto?",
"Your User ID": "Tu ID de usuario",
"Alphanumeric (recommended)": "Alfanumérico (recomendado)",
"Destination": "Destino",
"wayToGetWhapiUrlAndToken": "Puedes obtener la URL de la API y el token accediendo al canal que desee desde {0}",
"API URL": "API URL",
"Allow Long SMS": "Permitir SMS largo",
"cellsyntDestination": "Número de teléfono del destinatario en formato internacional precedido de 00, seguido del código de país, ej. 00447920110000 para el número del Reino Unido 07920 110 000 (máximo 17 dígitos en total). Máximo 25.000 destinatarios, separados por comas, por solicitud HTTP."
}

@ -349,7 +349,7 @@
"light": "روشن",
"Query": "کوئری",
"Effective Date Range": "محدوده تاریخ مورد تاثیر (اختیاری)",
"statusPageRefreshIn": "بارگذاری مجدد در هر: {0}",
"statusPageRefreshIn": "تا بارگذاری مجدد: {0}",
"Content Type": "نوع محتوا (Content Type)",
"Server URL": "آدرس سرور",
"Priority": "اهمیت",
@ -759,7 +759,6 @@
"filterActive": "فعال",
"webhookCustomBodyDesc": "یک بدنه HTTP سفارشی برای ریکوئست تعریف کنید. متغیر های قابل استفاده: {msg}, {heartbeat}, {monitor}.",
"tailscalePingWarning": "برای استفاده از Tailscale Ping monitor، شما باید آپتایم کوما را بدون استفاده از داکر و همچنین Tailscale client را نیز بر روی سرور خود نصب داشته باشید.",
"jsonQueryDescription": "یک کوئری json در برابر پاسخ انجام دهید و مقدار مورد انتظار را (مقدار برگشتی برای مقایسه به رشته تبدیل می شود). برای مستندات درباره زبان کوئری، {0} مشاهده کنید. همچنین محیط تست را میتوانید در {1} پیدا کنید.",
"Enter the list of brokers": "لیست بروکر هارا وارد کنید",
"Enable Kafka Producer Auto Topic Creation": "فعال سازی ایجاپ موضوع اتوماتیک تهیه کننده",
"Secret AccessKey": "کلید محرمانه AccessKey",
@ -860,5 +859,37 @@
"emailTemplateStatus": "وضعیت",
"templateMsg": "پیام نوتیفیکیشن",
"templateMonitorJSON": "شی توصیف کننده ناظر",
"Add a new expiry notification day": "تنظیم تاریخ انقضا اطلاع رسانی جدید"
"Add a new expiry notification day": "تنظیم تاریخ انقضا اطلاع رسانی جدید",
"ntfyPriorityHelptextAllExceptDown": "همه ایونت ها با این اولویت ارسال می شوند، به جز {0}-ایونت، که دارای اولویت {1} هستند",
"Browser Screenshot": "اسکرین شات مرورگر",
"GrafanaOncallUrl": "لینک در دسترس گرافانا (Grafana)",
"What is a Remote Browser?": "مرورگر ریموت چیست؟",
"Remote Browsers": "مرورگرهای ریموت",
"Remote Browser": "مرورگر ریموت",
"Add a Remote Browser": "اضافه کردن مرورگر ریموت",
"Remote Browser not found!": "مرورگر ریموت پیدا نشد!",
"remoteBrowsersDescription": "مرورگرهای ریموت جایگزینی برای اجرای لوکالی Chromium هستند.انها را میتوانید با سرویسی مانند browserless.io راه اندازی کنید یا به سرویس خود متصل شوید",
"self-hosted container": "کانتیر سلف-هاست شده",
"remoteBrowserToggle": "به‌طور پیش‌فرض Chromium در کانتینر Uptime Kuma اجرا می‌شود. با تغییر دادن این سوئیچ می توانید از یک مرورگر ریموت استفاده کنید.",
"useRemoteBrowser": "استفاده از یک مرورگر ریموت",
"deleteRemoteBrowserMessage": "آیا مطمئن هستید که می خواهید این مرورگر ریموت را برای همه مانیتورها حذف کنید؟",
"statusPageSpecialSlugDesc": "پسوند اختصاصی {0}: این صفحه زمانی نشان داده می شود که هیچ پسوندی ارائه نشود",
"smtpLiquidIntroduction": "دو فیلد زیر از طریق Liquid templating Language قابل قالب بندی هستند. لطفاً برای نحوه استفاده به {0} مراجعه کنید. متغیرهای موجو:",
"emailTemplateMonitorJSON": "شیء توصیف کننده مانیتور (JSON)",
"emailTemplateHeartbeatJSON": "شیء توصیف کننده Heartbeat",
"emailTemplateMsg": "پیام اطلاع رسانی",
"emailTemplateLimitedToUpDownNotification": "فقط برای heartbeat UP/DOWN در دسترس است، در غیر این صورت NULL است",
"liquidIntroduction": "قالب‌ پذیری از طریق زبان قالب‌سازی مایع قابل انجام است. لطفاً برای دیدن نحوه استفاده به {0} مراجعه کنید. متغیرهای موجود:",
"templateHeartbeatJSON": "شیئی که heartbeat را توصیف می کند (JSON)",
"templateLimitedToUpDownCertNotifications": "فقط برای پیام های UP/DOWN/انقضای گواهی (Certificate Expiry) موجود است",
"templateLimitedToUpDownNotifications": "فقط برای پیام های UP/DOWN موجود است",
"setup a new monitor group": "ایجاد یک گروه مانیتور",
"openModalTo": "باز کردن مدال برای {0}",
"Add a domain": "اضافه کردن دامین",
"Remove domain": "حذف دامین '{0}'",
"ntfyPriorityHelptextAllEvents": "تمامی ایونت ها با حداکثر اولویت ارسال می شوند",
"documentationOf": "کلید مطلب ها",
"wayToGetHeiiOnCallDetails": "روش دریافت ایدی کلید و کلید ای پی آی درمطلب توضیح داده شده است",
"Channel access token (Long-lived)": "توکن دسترسی به کانال",
"Your User ID": "آیدی حساب کاربری شما"
}

@ -1,7 +1,7 @@
{
"Dashboard": "Kojetaulu",
"Help": "Apua",
"New Update": "Uusi Päivitys",
"New Update": "Uusi päivitys",
"Language": "Kieli",
"Appearance": "Ulkonäkö",
"Theme": "Teema",
@ -11,15 +11,15 @@
"List": "Lista",
"Add": "Lisää",
"Add New Monitor": "Lisää uusi seurain",
"Quick Stats": "Nopeat tilastot",
"Quick Stats": "Pikakatsaus",
"Up": "Ylös",
"Down": "Alas",
"Pending": "Odottaa",
"statusMaintenance": "Huolto",
"Maintenance": "Huolto",
"Unknown": "Tuntematon",
"General Monitor Type": "Yleinen seuranta tyyppi",
"Passive Monitor Type": "Passiivinen seuranta tyyppi",
"General Monitor Type": "Yleinen seuraintyyppi",
"Passive Monitor Type": "Passiivinen seuraintyyppi",
"markdownSupported": "Markdown-syntaksi tuettu",
"pauseDashboardHome": "Tauko",
"Pause": "Tauko",
@ -35,47 +35,47 @@
"Uptime": "Päälläoloaika",
"Monitor": "Seurain | Seuraimet",
"day": "Päivä | Päivää",
"-day": "-päivä",
"hour": "Tunti",
"-hour": "-tunti",
"-day": "-päivä(ä)",
"hour": "tunti",
"-hour": "-tunti(a)",
"Response": "Vastaus",
"Ping": "Signaali",
"Monitor Type": "Seurain tyyppi",
"Ping": "Ping",
"Monitor Type": "Seuraintyyppi",
"Keyword": "Avainsana",
"URL": "URL",
"Hostname": "Isäntänimi",
"Heartbeat Interval": "Sydämensyke intervalli",
"Heartbeat Interval": "Sydämensykkeiden aikaväli",
"Retries": "Uusintayrityksiä",
"Resend Notification if Down X times consequently": "Uudelleen lähetä ilmoitus jos ei vastausta X määrä peräkkäin",
"Advanced": "Edistynyt",
"checkEverySecond": "Tarkista jokainen {0} sekuntti",
"retryCheckEverySecond": "Yritä uudelleen jokainen {0} sekuntti",
"resendEveryXTimes": "Uudelleen lähetä jokainen {0} kerta",
"ignoreTLSError": "Älä huomioi TLS/SSL virhettä HTTPS nettisivuilla",
"upsideDownModeDescription": "Pyöräytä tila ylösalaisin. Jos palvelu on saavutettavissa, merkitse se SAMMUNEEKSI.",
"maxRedirectDescription": "Maksimi määrä uudelleen ohjauksia joita seurata. Aseta 0 estääksesi uudelleenohjaukset.",
"Upside Down Mode": "Ylösalaisin-moodi",
"Max. Redirects": "Maksimi määrä uudelleenohjauksia",
"Accepted Status Codes": "Sallitut tila koodit",
"Push URL": "Työnnä URL",
"checkEverySecond": "Tarkista joka {0} sekunti",
"retryCheckEverySecond": "Yritä uudelleen joka {0} sekunti",
"resendEveryXTimes": "Uudelleen lähetä joka {0} kerta",
"ignoreTLSError": "Älä huomioi TLS/SSL virheitä HTTPS nettisivuilla",
"upsideDownModeDescription": "Käännä tila vastakkaiseksi. Jos palvelu on saavutettavissa, merkitse se SAMMUNEEKSI.",
"maxRedirectDescription": "Enimmäismäärä seurattavia uudelleenohjauksia. Aseta arvoksi 0 estääksesi uudelleenohjaukset.",
"Upside Down Mode": "Käänteinen tila",
"Max. Redirects": "Uudelleenohjauksia enintään",
"Accepted Status Codes": "Sallitut tilakoodit",
"Push URL": "Push-ilmoitus URL",
"Save": "Tallenna",
"Notifications": "Ilmoitukset",
"Setup Notification": "Määritä ilmoitukset",
"Light": "Vaalea",
"Dark": "Tumma",
"Auto": "Automaattinen",
"Theme - Heartbeat Bar": "Teema - Sydänlyönti palkki",
"Theme - Heartbeat Bar": "Teema - Sydämensykepalkki",
"Normal": "Normaali",
"Bottom": "Pohja",
"Bottom": "Alhaalla",
"None": "Ei mitään",
"Timezone": "Aikavyöhyke",
"Search Engine Visibility": "Hakukone näkyvyys",
"Search Engine Visibility": "Hakukonenäkyvyys",
"Allow indexing": "Salli indeksointi",
"Change Password": "Vaihda salasana",
"Current Password": "Nykyinen salasana",
"New Password": "Uusi salasana",
"Repeat New Password": "Toista uusi salasana",
"Update Password": "Päivätä salasana",
"Update Password": "Päivitä salasana",
"Disable Auth": "Poista todennus käytöstä",
"Enable Auth": "Ota todennus käyttöön",
"Logout": "Kirjaudu ulos",
@ -87,37 +87,37 @@
"Username": "Käyttäjänimi",
"Password": "Salasana",
"Login": "Kirjaudu",
"add one": "Lisää yksi",
"Notification Type": "Ilmoitus tyyppi",
"add one": "lisää",
"Notification Type": "Ilmoitustyyppi",
"Email": "Sähköposti",
"Test": "Testi",
"Certificate Info": "Sertifikaatti tiedot",
"Certificate Info": "Varmenteen tiedot",
"Settings": "Asetukset",
"Check Update On GitHub": "Tarkista päivitys GitHub:ssa",
"Specific Monitor Type": "Tietty seuranta tyyppi",
"Cert Exp.": "Sertifikaatti vanh.",
"Specific Monitor Type": "Tietty seuraintyyppi",
"Cert Exp.": "Varmenne vanh.",
"Friendly Name": "Ystävällinen nimi",
"Port": "Portti",
"Heartbeat Retry Interval": "Sydämensyke uudelleen yritys intervalli",
"resendDisabled": "Uudelleen lähetys poissa käytöstä",
"retriesDescription": "Maksimi määrä uudelleen yrityksiä ennen kuin palvelu merkitään sammuneeksi ja ilmoitus lähetetään",
"Heartbeat Retry Interval": "Sydämensykkeen uudelleenyritysten aikaväli",
"resendDisabled": "Uudelleenlähetys poissa käytöstä",
"retriesDescription": "Enimmäismäärä uudelleenyrityksiä ennen kuin palvelu merkitään sammuneeksi ja ilmoitus lähetetään",
"Discourage search engines from indexing site": "Estä hakukoneita indeksoimasta sivua",
"Please use this option carefully!": "Käytä tätä vaihtoehtoa varoen!",
"Remember me": "Muista minut",
"languageName": "Suomi",
"Primary Base URL": "Ensisijainen perus-URL-osoite",
"Primary Base URL": "Ensisijainen perus-URL",
"pushOptionalParams": "Valinnaiset parametrit: {0}",
"Not available, please setup.": "Ei saatavilla, määritä ensin.",
"needPushEvery": "Sinun pitäisi kutsua tätä URL joka {0} sekuntti.",
"needPushEvery": "Sinun tulee kutsua tätä URLia joka {0} sekunti.",
"disableauth.message1": "Oletko varma että haluat {disableAuth}?",
"disable authentication": "poistaa todennuksen käytöstä",
"disableauth.message2": "Se on suunniteltu tilanteisiin {intendThirdPartyAuth} Uptime Kuma:n edessä, kuten Cloudflare Access, Authelia tai jotain muuta todennus mekanismia.",
"where you intend to implement third-party authentication": "jossa aiot käyttää kolmannen osapuolen todennnusta",
"No Monitors, please": "Ei seuraimia, kiitos",
"Resolver Server": "Ratkaisija palvelin",
"Resource Record Type": "Resusrssi tallenne tyyppi",
"Last Result": "Viimeinen tulos",
"Create your admin account": "Luo sinun järjestelmänvalvoja käyttäjä",
"No Monitors, please": "Ei seuraimia, ole hyvä",
"Resolver Server": "Nimipalvelin",
"Resource Record Type": "Tietueen tyyppi (RR)",
"Last Result": "Viimeisin tulos",
"Create your admin account": "Luo ylläpitäjän käyttäjätili",
"Repeat Password": "Toista salasana",
"Import Backup": "Tuo varmuuskopio",
"Export Backup": "Vie varmuuskopio",
@ -125,40 +125,40 @@
"Import": "Tuo",
"respTime": "Vast. aika (ms)",
"notAvailableShort": "Ei käytössä",
"Default enabled": "Oletus käytössä",
"Apply on all existing monitors": "Aseta jokaiselle olemassa olevaan seuraimeen",
"Default enabled": "Oletuksena käytössä",
"Apply on all existing monitors": "Aseta jokaiselle olemassa olevalle seuraimelle",
"Create": "Luo",
"Clear Data": "Tyhjennä data",
"Clear Data": "Tyhjennä tiedot",
"Events": "Tapahtumat",
"Heartbeats": "Sydämensyke",
"Auto Get": "Automaattinen haku",
"Schedule maintenance": "Ajoita huolto",
"Schedule maintenance": "Aikatauluta huolto",
"Affected Monitors": "Vaikutetut seuraimet",
"Pick Affected Monitors...": "Poimi vaikutetut seuraimet…",
"Start of maintenance": "Huollon aloitus",
"All Status Pages": "Kaikki tilanne sivut",
"Select status pages...": "Valitse tilanne sivu…",
"All Status Pages": "Kaikki tilasivut",
"Select status pages...": "Valitse tilasivu…",
"alertNoFile": "Valitse tuotava tiedosto.",
"alertWrongFileType": "Valitse JSON tiedosto.",
"alertWrongFileType": "Valitse JSON-tiedosto.",
"Clear all statistics": "Tyhjennä kaikki tilastot",
"Skip existing": "Ohita olemassa oleva",
"Overwrite": "Päälle kirjoita",
"Overwrite": "Päällekirjoita",
"Options": "Vaihtoehdot",
"Keep both": "Pidä molemmat",
"Verify Token": "Vahvista tunnus",
"Setup 2FA": "Määritä 2FA",
"Enable 2FA": "Ota 2FA käyttöön",
"Disable 2FA": "Poista 2FA käytöstä",
"2FA Settings": "2FA asetukset",
"Two Factor Authentication": "kaksivaiheinen tunnistautuminen",
"2FA Settings": "2FA-asetukset",
"Two Factor Authentication": "Kaksivaiheinen tunnistautuminen (2FA)",
"Active": "Aktiivinen",
"Token": "Tokeni",
"Token": "Token",
"Show URI": "Näytä URI",
"Tags": "Tunnisteet",
"Tag with this name already exist.": "Tunniste tällä nimellä on jo olemassa.",
"Tag with this value already exist.": "Tunniste tällä arvolla on jo olemassa.",
"color": "Väri",
"value (optional)": "Arvo (valinnainen)",
"value (optional)": "arvo (valinnainen)",
"Gray": "Harmaa",
"Red": "Punainen",
"Orange": "Oranssi",
@ -168,7 +168,7 @@
"Pink": "Vaaleanpunainen",
"Custom": "Mukautettu",
"Search...": "Etsi…",
"Avg. Ping": "kesk.arv. viive",
"Avg. Ping": "Kesk.arv. viive",
"Entry Page": "Sisääntulosivu",
"statusPageNothing": "Täällä ei ole mitään. Lisää ryhmä tai seurain.",
"No Services": "Ei palveluita",
@ -176,21 +176,21 @@
"Degraded Service": "Heikentynyt palvelu",
"Add Group": "Lisää ryhmä",
"Add a monitor": "Lisää seurain",
"Edit Status Page": "Muokkaa tilanne sivua",
"Edit Status Page": "Muokkaa tilasivua",
"Go to Dashboard": "Mene kojelaudalle",
"Status Page": "Tilanne sivu",
"Status Pages": "Tilanne sivut",
"Status Page": "Tilasivu",
"Status Pages": "Tilasivut",
"here": "täällä",
"Required": "Vaadittu",
"webhook": "Webhookki",
"Post URL": "Lähetys URL",
"Content Type": "Sisältö tyyppi",
"webhookJsonDesc": "{0} on hyvä jokaisille modernilleille HTTP palvelimille kuten Express.js",
"webhookAdditionalHeadersTitle": "Lisä otsakkeet",
"webhookAdditionalHeadersDesc": "Asettaa lisäpäätteet, jotka on lähetetty webhookilla.",
"Post URL": "Lähetys-URL",
"Content Type": "Sisältötyyppi",
"webhookJsonDesc": "{0} soveltuu mille tahansa modernille HTTP-palvelimille kuten Express.js",
"webhookAdditionalHeadersTitle": "Lisäotsakkeet",
"webhookAdditionalHeadersDesc": "Asettaa lisäotsakkeet, jotka lähetetään webhookille. Jokainen lisäotsake tulisi määritellä JSON-avaimena ja -arvona.",
"Webhook URL": "Webhookin URL",
"Application Token": "Sovellus tokeni",
"Server URL": "Palvelin URL",
"Application Token": "Sovellus-token",
"Server URL": "Palvelimen URL",
"Priority": "Prioriteetti",
"emojiCheatSheet": "Emoji lunttilappu: {0}",
"Read more": "Lue lisää",
@ -199,9 +199,9 @@
"Method": "Menetelmä",
"Body": "Runko",
"Headers": "Otsikot",
"PushUrl": "Työntö URL",
"BodyInvalidFormat": "Pyynnön runko ei ole kelvollinen JSON: ",
"Monitor History": "Seuraa historiaa",
"PushUrl": "Push-ilmoitus URL",
"BodyInvalidFormat": "Pyynnön sisältörunko ei ole kelvollisessa JSON-muodossa: ",
"Monitor History": "Seurannan historia",
"PasswordsDoNotMatch": "Salasanat eivät täsmää.",
"records": "tallenteet",
"One record": "Yksi tallenne",
@ -216,24 +216,24 @@
"Security": "Turvallisuus",
"Steam API Key": "Steam API-avain",
"Shrink Database": "Pienennä tietokanta",
"Pick a RR-Type...": "Valitse RR-tyyppi…",
"Pick a RR-Type...": "Valitse tietuetyyppi (RR)…",
"Pick Accepted Status Codes...": "Valitse hyväksytyt tilakoodit…",
"Default": "Oletus",
"HTTP Options": "HTTP-asetukset",
"HTTP Options": "HTTP-valinnat",
"Create Incident": "Luo tapaus",
"Title": "Otsikko",
"Content": "Sisältö",
"Style": "Tyyli",
"info": "Tiedot",
"warning": "Varoitus",
"info": "tiedote",
"warning": "varoitus",
"danger": "vaara",
"error": "virhe",
"critical": "kriittinen",
"primary": "ensisijainen",
"dark": "Tumma",
"dark": "tumma",
"Post": "Lähetä",
"Please input title and content": "Syötä otsikko ja sisältö",
"Created": "Luo",
"Created": "Luotu",
"Last Updated": "Viimeksi päivitetty",
"Unpin": "Irroita",
"Switch to Dark Theme": "Vaihda tummaan teemaan",
@ -245,7 +245,7 @@
"No Monitors": "Ei seuraimia",
"Untitled Group": "Nimetön ryhmä",
"Services": "Palvelut",
"Discard": "Hävitä",
"Discard": "Peruuta",
"Cancel": "Peruuttaa",
"Customize": "Mukauta",
"Custom Footer": "Mukautettu alatunniste",
@ -254,12 +254,12 @@
"Proxies": "Välityspalvelimet",
"default": "Oletus",
"enabled": "Käytössä",
"setAsDefault": "Oletusasetuksena",
"setAsDefault": "Aseta oletukseksi",
"deleteProxyMsg": "Haluatko varmasti poistaa tämän välityspalvelimen kaikista seuraimista?",
"proxyDescription": "Välityspalvelimet on määritettävä seuraimelle toimiakseen.",
"enableProxyDescription": "Tämä välityspalvelin ei vaikuta valvontapyyntöihin ennen kuin se on aktivoitu. Voit hallita välityspalvelimen väliaikaista poistamista käytöstä kaikista seuraimista aktivointitilan perusteella.",
"setAsDefaultProxyDescription": "Tämä välityspalvelin on oletuksena käytössä uusissa seuraimissa. Voit silti poistaa välityspalvelimen käytöstä erikseen jokaisesta seuraimesta.",
"Certificate Chain": "Sertifikaattiketju",
"Certificate Chain": "Varmenneketju",
"Valid": "Voimassa oleva",
"Invalid": "Pätemätön",
"User": "Käyttäjä",
@ -298,10 +298,10 @@
"No status pages": "Ei tilasivuja",
"Domain Name Expiry Notification": "Verkkotunnuksen vanhenemisilmoitus",
"Proxy": "Välityspalvelin",
"Date Created": "Luomis päivämäärä",
"Date Created": "Luomispäivämäärä",
"Footer Text": "Alatunnisteen teksti",
"Show Powered By": "Näytä \"voimanlähteenä\"",
"Domain Names": "Verkkotunnus nimet",
"Show Powered By": "Näytä \"Voimanlähteenä\"",
"Domain Names": "Verkkotunnukset",
"signedInDisp": "Kirjautunut sisään käyttäjänä {0}",
"signedInDispDisabled": "Todennus poistettu käytöstä.",
"RadiusSecretDescription": "Asiakkaan ja palvelimen välinen yhteinen salaisuus",
@ -311,13 +311,13 @@
"API Username": "API-käyttäjänimi",
"API Key": "API-avain",
"Show update if available": "Näytä päivitys, jos saatavilla",
"Also check beta release": "Tarkista myös betaversio",
"Also check beta release": "Tarkista myös beta-versio",
"Using a Reverse Proxy?": "Käytätkö käänteistä välityspalvelinta?",
"The slug is already taken. Please choose another slug.": "Slug on jo otettu. Ole hyvä ja valitse toinen slug.",
"RadiusSecret": "Radius Secret",
"RadiusSecret": "Radius-salaisuus",
"RadiusCalledStationId": "Kutsuttu aseman tunnus",
"Steam Game Server": "Steam pelipalvelin",
"Most likely causes:": "todennäköisimmät syyt:",
"Steam Game Server": "Steam-pelipalvelin",
"Most likely causes:": "Todennäköisimmät syyt:",
"The resource is no longer available.": "Resurssi ei ole enää saatavilla.",
"There might be a typing error in the address.": "Osoitteessa saattaa olla kirjoitusvirhe.",
"What you can try:": "Mitä voit kokeilla:",
@ -325,8 +325,8 @@
"Go back to the previous page.": "Palaa edelliselle sivulle.",
"Coming Soon": "Tulossa pian",
"Connection String": "Yhteysmerkkijono",
"Query": "Tiedustelu",
"settingsCertificateExpiry": "TLS-sertifikaatin vanheneminen",
"Query": "Tiedustelu (Query)",
"settingsCertificateExpiry": "TLS-varmenteen vanheneminen",
"certificationExpiryDescription": "HTTPS-seuraimet käynnistävät ilmoituksen, kun TLS-varmenne vanhenee:",
"Setup Docker Host": "Asenna Docker-isäntä",
"Connection Type": "Yhteystyyppi",
@ -337,15 +337,15 @@
"Docker Hosts": "Docker-isännät",
"Domain": "Verkkotunnus",
"Workstation": "Työasema",
"socket": "kanta",
"socket": "Socket",
"Packet Size": "Paketin koko",
"telegram": "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Botti tokeni",
"Bot Token": "Botin token",
"wayToGetTelegramToken": "Voit saada tunnuksen osoitteesta {0}.",
"Chat ID": "Chat-tunnus",
"wayToGetTelegramChatID": "Saat chat-tunnuksesi lähettämällä viestin botille ja siirtymällä tähän URL-osoitteeseen nähdäksesi chat_id:",
"YOUR BOT TOKEN HERE": "BOT TOKENISI TÄHÄN",
"YOUR BOT TOKEN HERE": "BOTIN TOKEN TÄHÄN",
"chatIDNotFound": "Chat ID:tä ei löydy; lähetä ensin viesti tälle botille",
"disableCloudflaredNoAuthMsg": "Olet No Auth -tilassa, salasanaa ei tarvita.",
"trustProxyDescription": "Luota \"X-Forwarded-*\"-otsikoihin. Jos haluat saada oikean asiakas-IP:n ja Uptime Kumasi on välityspalvelimen, kuten Nginx tai Apache, takana, sinun tulee ottaa tämä käyttöön.",
@ -355,7 +355,7 @@
"Long-Lived Access Token": "Pitkäikäinen pääsytunnus",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Pitkäikäinen pääsytunnus voidaan luoda napsauttamalla profiilisi nimeä (vasemmalla alareunassa) ja vierittämällä alas ja napsauttamalla sitten Luo tunnus. ",
"Notification Service": "Ilmoituspalvelu",
"default: notify all devices": "oletus: Ilmoita kaikille laitteille",
"default: notify all devices": "oletus: ilmoita kaikille laitteille",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Luettelo ilmoituspalveluista löytyy Home Assistantin kohdasta \"Kehittäjätyökalut > Palvelut\". Hae hakusanalla \"ilmoitus\" löytääksesi laitteesi/puhelimesi nimen.",
"Automations can optionally be triggered in Home Assistant:": "Automaatiot voidaan vaihtoehtoisesti laukaista Home Assistantissa:",
"Trigger type:": "Triggerin tyyppi:",
@ -363,7 +363,7 @@
"Frontend Version": "Käyttöliittymän versio",
"Frontend Version do not match backend version!": "Käyttöliittymän versio ei vastaa taustaversiota!",
"backupRecommend": "Varmuuskopioi asema tai tietokansio (./data/) suoraan sen sijaan.",
"Optional": "Vapaaehtoinen",
"Optional": "Valinnainen",
"squadcast": "Squadcast",
"or": "tai",
"recurringInterval": "Aikaväli",
@ -386,21 +386,21 @@
"No Maintenance": "Ei huoltoa",
"pauseMaintenanceMsg": "Haluatko varmasti keskeyttää?",
"maintenanceStatus-under-maintenance": "Huollossa",
"maintenanceStatus-inactive": "Eaktiivinen",
"maintenanceStatus-inactive": "Ei-aktiivinen",
"maintenanceStatus-scheduled": "Aikataulutettu",
"maintenanceStatus-ended": "Päättyi",
"maintenanceStatus-unknown": "Tuntematon",
"Display Timezone": "Näytä aikavyöhyke",
"Display Timezone": "Käyttöliittymän aikavyöhyke",
"Server Timezone": "Palvelimen aikavyöhyke",
"statusPageMaintenanceEndDate": "Loppu",
"Enable": "Ota käyttöön",
"Disable": "Poista käytöstä",
"Single Maintenance Window": "Yksi huoltoikkuna",
"Maintenance Time Window of a Day": "Päivän huoltoaikaikkuna",
"Effective Date Range": "Voimassa oleva ajanjakso",
"Effective Date Range": "Voimassa oleva ajanjakso (valinnainen)",
"Schedule Maintenance": "Ajoita huolto",
"Date and Time": "Päivämäärä ja aika",
"DateTime Range": "Päivämäärä-aika-alue",
"DateTime Range": "Päivämäärä- ja aika-alue",
"loadingError": "Tietoja ei voi noutaa, yritä myöhemmin uudelleen.",
"plugin": "Lisäosa | Lisäosat",
"install": "Asenna",
@ -427,16 +427,16 @@
"Recipients": "Vastaanottajat",
"Access Token": "Käyttöoikeustunnus",
"Channel access token": "Kanavan käyttöoikeustunnus",
"Basic Settings": "Perus asetukset",
"User ID": "käyttäjätunnus",
"Messaging API": "Viestintä API",
"Line Developers Console": "Line Developers Console",
"lineDevConsoleTo": "Line Developers Console - {0}",
"Basic Settings": "Perusasetukset",
"User ID": "Käyttäjätunnus",
"Messaging API": "Viestintä-API",
"Line Developers Console": "Line Kehittäjän Konsoli",
"lineDevConsoleTo": "Line Kehittäjän Konsoli - {0}",
"dataRetentionTimeError": "Säilytysajan on oltava 0 tai suurempi",
"infiniteRetention": "Aseta arvoon 0, jos haluat loputtoman säilytyksen.",
"infiniteRetention": "Aseta arvoksi 0, jos haluat ikuisen säilytyksen.",
"confirmDeleteTagMsg": "Haluatko varmasti poistaa tämän tunnisteen? Tähän tunnisteeseen liittyviä näyttöjä ei poisteta.",
"enableGRPCTls": "Salli lähettää gRPC-pyyntö TLS-yhteydellä",
"grpcMethodDescription": "Menetelmän nimi muunnetaan cammelCase-muotoon, kuten sayHello, check jne.",
"grpcMethodDescription": "Menetelmän nimi muunnetaan camelCase-muotoon, kuten sayHello, check jne.",
"acceptedStatusCodesDescription": "Valitse tilakoodit, jotka katsotaan onnistuneeksi vastaukseksi.",
"deleteMonitorMsg": "Haluatko varmasti poistaa tämän seuraimen?",
"deleteMaintenanceMsg": "Haluatko varmasti poistaa tämän huollon?",
@ -444,10 +444,10 @@
"dnsPortDescription": "DNS-palvelimen portti. Oletusarvo on 53. Voit vaihtaa porttia milloin tahansa.",
"rrtypeDescription": "Valitse valvottava RR-tyyppi",
"pauseMonitorMsg": "Haluatko varmasti keskeyttää?",
"clearHeartbeatsMsg": "Haluatko varmasti poistaa kaikki tämän seuraimen sydämenlyönnit?",
"clearHeartbeatsMsg": "Haluatko varmasti poistaa kaikki tämän seuraimen sydämensykkeet?",
"confirmImportMsg": "Haluatko varmasti tuoda varmuuskopion? Varmista, että olet valinnut oikean tuontivaihtoehdon.",
"twoFAVerifyLabel": "Anna tunnuksesi vahvistaaksesi 2FA:",
"tokenValidSettingsMsg": "Token on voimassa! Voit nyt tallentaa 2FA-asetukset.",
"tokenValidSettingsMsg": "Tunnus on voimassa! Voit nyt tallentaa 2FA-asetukset.",
"confirmEnableTwoFAMsg": "Haluatko varmasti ottaa 2FA:n käyttöön?",
"confirmDisableTwoFAMsg": "Haluatko varmasti poistaa 2FA:n käytöstä?",
"recurringIntervalMessage": "Juokse kerran päivässä | Suorita kerran {0} päivässä",
@ -461,22 +461,22 @@
"octopushLogin": "\"Kirjaudu\" ohjauspaneelin HTTP API -tunnistetiedoista",
"promosmsLogin": "API-kirjautumisnimi",
"promosmsPassword": "API-salasana",
"pushoversounds pushover": "Työnnä yli (oletus)",
"pushoversounds pushover": "Pushover (oletus)",
"pushoversounds bike": "Pyörä",
"pushoversounds bugle": "Merkkitorvi",
"pushoversounds cashregister": "Kassakone",
"pushoversounds classical": "Klassinen",
"pushoversounds cosmic": "Kosminen",
"pushoversounds falling": "Putoaminen",
"pushoversounds gamelan": "Gamelan",
"pushoversounds gamelan": "Gamelan-soitin",
"pushoversounds incoming": "Saapuva",
"pushoversounds intermission": "Väliaika",
"pushoversounds magic": "Taika",
"pushoversounds mechanical": "Mekaaninen",
"pushoversounds pianobar": "Piano Baari",
"pushoversounds pianobar": "Pianobaari",
"pushoversounds spacealarm": "Avaruushälytys",
"pushoversounds tugboat": "Hinaaja",
"pushoversounds alien": "Avaruusolio hälytys (pitkä)",
"pushoversounds alien": "Avaruusoliohälytys (pitkä)",
"pushoversounds climb": "Kiipeily (pitkä)",
"pushoversounds persistent": "Pysyvä (pitkä)",
"pushoversounds updown": "Ylös Alas (pitkä)",
@ -512,8 +512,8 @@
"octopushTypeLowCost": "Alhaiset kustannukset (hidas - joskus operaattori estää)",
"checkPrice": "Tarkista kohteen {0} hinnat:",
"apiCredentials": "API-tunnistetiedot",
"Check octopush prices": "Tarkista octopush hinnat {0}.",
"octopushPhoneNumber": "Puhelinnumero (Intl-muoto, esim.: +33612345678) ",
"Check octopush prices": "Tarkista Octopush-hinnat {0}.",
"octopushPhoneNumber": "Puhelinnumero (Kansainvälinen muoto, esim.: +33612345678) ",
"octopushSMSSender": "Tekstiviestin lähettäjän nimi: 3-11 aakkosnumeerista merkkiä ja välilyönti (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea laitetunnus",
"Apprise URL": "Apprise URL-osoite",
@ -529,28 +529,28 @@
"Economy": "Talous",
"Lowcost": "Halpa",
"high": "korkea",
"SendKey": "LähetäAvain",
"SendKey": "Lähetysavain (SendKey)",
"SMSManager API Docs": "SMSManager API Dokumentointi ",
"Gateway Type": "Yhdyskäytävän tyyppi",
"SMSManager": "SMSManager",
"Base URL": "Perus-URL-osoite",
"Base URL": "Perus-URL",
"goAlertIntegrationKeyInfo": "Hanki yleinen API-integrointiavain palvelulle tässä muodossa \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" yleensä kopioidun URL-osoitteen tunnusparametrin arvona.",
"goAlert": "GoAlert",
"AccessKeyId": "Pääsyn avaimen tunnus",
"SecretAccessKey": "Pääsyn avaimen salaisuus",
"PhoneNumbers": "PuhelinNumerot",
"TemplateCode": "Mallikoodi",
"SignName": "AllekirjoitusNimi",
"AccessKeyId": "Pääsyavaimen tunnus (AccessKey ID)",
"SecretAccessKey": "Pääsyavaimen salaisuus (AccessKey Secret)",
"PhoneNumbers": "Puhelinnumerot (PhoneNumbers)",
"TemplateCode": "Mallikoodi (TemplateCode)",
"SignName": "Allekirjoitusnimi (SignName)",
"Sms template must contain parameters: ": "Tekstiviestimallin tulee sisältää parametrit: ",
"Bark Group": "Bark ryhmä",
"Bark Sound": "Bark ääni",
"WebHookUrl": "WebHookUrl-osoite",
"SecretKey": "Salainen avain",
"WebHookUrl": "Webhookin URL-osoite (WebHookUrl)",
"SecretKey": "Salainen avain (SecretKey)",
"For safety, must use secret key": "Turvallisuuden vuoksi on käytettävä salaista avainta",
"Device Token": "Laitteen tunnus",
"Platform": "Alusta",
"Bark Endpoint": "Bark päätepiste",
"Huawei": "Huawei",
"Huawei": "Huawei-merkki",
"High": "Korkea",
"Topic": "Aihe",
"WeCom Bot Key": "WeCom-bottiavain",
@ -569,13 +569,13 @@
"Uptime Kuma URL": "Uptime Kuma URL-osoite",
"Icon Emoji": "Ikoni Emoji",
"signalImportant": "TÄRKEÄÄ: Et voi sekoittaa ryhmiä ja numeroita vastaanottajissa!",
"aboutWebhooks": "Lisätietoja Webhooksista osoitteessa: {0}",
"aboutWebhooks": "Lisätietoja Webhookeista osoitteessa: {0}",
"aboutChannelName": "Kirjoita kanavan nimi {0} Kanavan nimi -kenttään, jos haluat ohittaa Webhook-kanavan. Esimerkki: #muu-kanava",
"aboutKumaURL": "Jos jätät Uptime Kuma URL -kentän tyhjäksi, se on oletuksena Project GitHub -sivu.",
"smtpDkimSettings": "DKIM-asetukset",
"smtpDkimDesc": "Katso Nodemailer DKIM {0} -sovelluksen käytöstä.",
"documentation": "dokumentointi",
"smtpDkimDomain": "Verkkotunnus nimi",
"smtpDkimDomain": "Verkkotunnus",
"smtpDkimKeySelector": "Näppäinvalitsin",
"smtpDkimPrivateKey": "Yksityinen avain",
"smtpDkimHashAlgo": "Hash-algoritmi (valinnainen)",
@ -612,55 +612,55 @@
"From Name/Number": "Nimestä/numerosta",
"Leave blank to use a shared sender number.": "Jätä tyhjäksi, jos haluat käyttää jaettua lähettäjän numeroa.",
"Octopush API Version": "Octopush API -versio",
"Legacy Octopush-DM": "Legacy Octopush-DM",
"ntfy Topic": "ntfy aihe",
"Legacy Octopush-DM": "Vanha Octopush-DM",
"ntfy Topic": "ntfy-aihe",
"HomeAssistant": "Home Assistant",
"onebotHttpAddress": "OneBot HTTP-osoite",
"onebotGroupMessage": "Ryhmä",
"onebotPrivateMessage": "Yksityinen",
"onebotUserOrGroupId": "Ryhmä/käyttäjätunnus",
"onebotSafetyTips": "Käyttöoikeustunnus on asetettava turvallisuuden vuoksi",
"PushDeer Key": "PushDeer avain",
"PushDeer Key": "PushDeer-avain",
"wayToGetClickSendSMSToken": "Voit saada API-käyttäjänimen ja API-avaimen osoitteesta {0}.",
"Custom Monitor Type": "Mukautettu seurain tyyppi",
"Custom Monitor Type": "Mukautettu seuraintyyppi",
"Google Analytics ID": "Google Analytics -tunnus",
"Edit Tag": "Muokkaa tunnistetta",
"Server Address": "Palvelimen osoite",
"Learn More": "Lisätietoja",
"Inactive": "Eaktiivinen",
"Add New below or Select...": "Lisää uusi alapuolella tai valitse…",
"Inactive": "Ei-aktiivinen",
"Add New below or Select...": "Lisää uusi alapuolelle tai valitse…",
"Blue": "Sininen",
"Avg. Response": "Kesk.arv. vastaus",
"All Systems Operational": "Kaikki järjestelmät toiminnassa",
"defaultNotificationName": "Minun {ilmoitus} Hälytys ({numero})",
"webhookFormDataDesc": "{multipart} on hyvä PHP:lle. JSON pitää parsia {decodeFunction} avulla",
"HeadersInvalidFormat": "Pyynnön otsikot eivät ole kelvollisia JSON-tiedostoja: ",
"clearDataOlderThan": "Säilytä seuraimen historiatiedot {0} päivää.",
"steamApiKeyDescription": "Steam peli palveliment valvontaa varten tarvitset Steam Web-API -avaimen. Voit rekisteröidä API-avaimesi täällä: ",
"light": "Vaalea",
"defaultNotificationName": "Minun {notification} Hälytys ({number})",
"webhookFormDataDesc": "{multipart} soveltuu PHP:lle. JSON pitää tulkita {decodeFunction} avulla",
"HeadersInvalidFormat": "Pyynnön otsikot eivät ole kelvollisessa JSON-muodossa: ",
"clearDataOlderThan": "Säilytä seuraimen historiatiedot {0} päivän ajan.",
"steamApiKeyDescription": "Steam-pelipalvelimen valvontaa varten tarvitset Steam Web API-avaimen. Voit rekisteröidä API-avaimesi täällä: ",
"light": "vaalea",
"Switch to Light Theme": "Vaihda vaaleaan teemaan",
"Powered by": "Voimanlähteenä",
"shrinkDatabaseDescription": "Käynnistä tietokanta VACUUM SQLitelle. Jos tietokanta on luotu 1.10.0:n jälkeen, AUTO_VACUUM on jo käytössä eikä tätä toimintoa tarvita.",
"shrinkDatabaseDescription": "Käynnistä tietokannan VACUUM SQLitelle. Jos tietokanta on luotu 1.10.0:n jälkeen, AUTO_VACUUM on jo käytössä eikä tätä toimintoa tarvita.",
"Accept characters:": "Hyväksy merkit:",
"New Status Page": "Uusi tilasivu",
"wayToGetCloudflaredURL": "(Lataa cloudflared osoitteesta {0})",
"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.": "Nykyinen yhteys saattaa katketa, jos muodostat parhaillaan yhteyttä Cloudflare-tunnelin kautta. Haluatko varmasti lopettaa sen? Vahvista se kirjoittamalla nykyinen salasanasi.",
"RadiusCallingStationIdDescription": "Kutsu laitteen tunniste",
"Check how to config it for WebSocket": "Tarkista, kuinka se määritetään WebSocketille",
"Docker Daemon": "Docker taustatoiminta",
"Docker Daemon": "Docker-daemon",
"deleteDockerHostMsg": "Haluatko varmasti poistaa tämän docker-isännän kaikista seuraimista?",
"supportTelegramChatID": "Tukee suoraa chattia / ryhmää / kanavan chat-tunnusta",
"Event data:": "Tapahtumatyyppi:",
"Event data:": "Tapahtuman tiedot:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Valitse sitten toiminto, esimerkiksi vaihda kohtaus sellaiseen, jossa RGB-valo on punainen.",
"backupOutdatedWarning": "Vanhentunut: Koska monia ominaisuuksia lisättiin ja tätä varmuuskopiointitoimintoa ei ole ylläpidetty, se ei voi luoda tai palauttaa täydellistä varmuuskopiota.",
"lastDay4": "Kuukauden 4. viimeinen päivä",
"IconUrl": "Kuvakkeen URL-osoite",
"Enable DNS Cache": "Ota DNS-välimuisti käyttöön",
"Enable DNS Cache": "(Vanhentunut) Ota DNS-välimuisti käyttöön HTTP(s)-seuraimille",
"dnsCacheDescription": "Se ei ehkä toimi joissakin IPv6-ympäristöissä, poista se käytöstä, jos kohtaat ongelmia.",
"confirmUninstallPlugin": "Haluatko varmasti poistaa tämän laajennuksen?",
"wayToGetDiscordURL": "Saat tämän siirtymällä kohtaan Palvelinasetukset -> Integraatiot -> Näytä Webhookit -> Uusi Webhook",
"needSignalAPI": "Sinulla on oltava signaaliasiakas, jossa on REST API.",
"wayToGetLineChannelToken": "Avaa ensin {0}, luo palveluntarjoaja ja kanava (Viestintä API), sitten saat kanavan käyttö tokenin ja käyttäjätunnuksen yllä mainituista valikon kohdista.",
"wayToGetLineChannelToken": "Avaa ensin {0}, luo palveluntarjoaja ja kanava (Messaging API), sitten saat kanavan käyttö tokenin ja käyttäjätunnuksen yllä mainituista valikon kohdista.",
"Icon URL": "Kuvakkeen URL-osoite",
"aboutIconURL": "Voit ohittaa oletusprofiilikuvan antamalla linkin kuvaan kohdassa \"kuvakeen URL\". Ei käytetä, jos kuvake emoji on asetettu.",
"aboutMattermostChannelName": "Voit ohittaa oletuskanavan, jolle Webhook lähettää viestejä, kirjoittamalla kanavan nimen Kanavan nimi -kenttään. Tämä on otettava käyttöön Mattermost Webhook -asetuksissa. Esimerkki: #muu-kanava",
@ -670,11 +670,11 @@
"confirmClearStatisticsMsg": "Haluatko varmasti poistaa KAIKKI tilastot?",
"importHandleDescription": "Valitse \"Ohita olemassa oleva\", jos haluat ohittaa jokaisen samannimisen seuraimen tai ilmoituksen. \"Korvaa\" poistaa kaikki olemassa olevat seuraimet ja ilmoitukset.",
"passwordNotMatchMsg": "Toistettu salasana ei täsmää.",
"backupDescription3": "Arkaluonteiset tiedot, kuten ilmoitustunnukset, sisältyvät vientitiedostoon. säilytä vienti turvallisesti.",
"backupDescription3": "Arkaluonteiset tiedot, kuten ilmoitustunnukset, sisältyvät vientitiedostoon. Säilytä vienti turvallisesti.",
"endpoint": "päätepiste",
"octopushAPIKey": "\"API-avain\" ohjauspaneelin HTTP API -tunnistetiedoista",
"pushoversounds siren": "Sireeni",
"pushoversounds echo": "Ylityöntö kaiku (pitkä)",
"pushoversounds echo": "Pushover-kaiku (pitkä)",
"pushover": "Ylityöntö",
"apprise": "Apprise (tukee yli 50 ilmoituspalvelua)",
"pushbullet": "Pushbullet",
@ -695,5 +695,280 @@
"wayToGetPagerDutyKey": "Saat tämän siirtymällä kohtaan Palvelu -> Palveluhakemisto -> (Valitse palvelu) -> Integraatiot -> Lisää integraatio. Täältä voit etsiä \"Events API V2\". Lisätietoja {0}",
"alertaAlertState": "Varoitustila",
"serwersmsSenderName": "Tekstiviestin lähettäjän nimi (rekisteröity asiakasportaalin kautta)",
"onebotMessageType": "OneBot-viestityyppi"
"onebotMessageType": "OneBot-viestityyppi",
"pushViewCode": "Kuinka käyttää Push-seurainta? (Näytä Koodi)",
"settingUpDatabaseMSG": "Tietokannan asennus käynnissä. Tämä voi kestää hetken, ole kärsivällinen.",
"setupDatabaseChooseDatabase": "Mitä tietokantaa haluat käyttää?",
"setupDatabaseEmbeddedMariaDB": "Sinun ei tarvitse asettaa mitään. Tämä Docker-kuva on sisäänrakentanut ja konfiguroinut MariaDB:n sinulle automaattisesti. Uptime Kuma yhdistää tähän tietokantaan Unix-socketin kautta.",
"setupDatabaseMariaDB": "Yhdistä ulkoiseen MariaDB-tietokantaan. Sinun on asetettava tietokantayhteyden tiedot.",
"setupDatabaseSQLite": "Yksinkertainen tietokantatiedosto, suositeltu pienimuotoisiin käyttöönottoihin. Ennen versiota 2.0.0 Uptime Kuma käytti SQLitea oletustietokantana.",
"dbName": "Tietokannan nimi",
"pushOthers": "Muut",
"programmingLanguages": "Ohjelmointikielet",
"Home": "Koti",
"Cannot connect to the socket server": "Ei voi yhdistää socket-palvelimeen",
"Reconnecting...": "Yhdistetään uudelleen...",
"Invert Keyword": "Käänteinen Avainsana",
"Request Timeout": "Pyynnön aikakatkaisu",
"timeoutAfter": "Aikakatkaisu {0} sekunnin jälkeen",
"Resend Notification if Down X times consecutively": "Lähetä ilmoitus uudelleen, jos alhaalla X kertaa peräkkäin",
"Expected Value": "Odotettu arvo",
"Json Query": "JSON-kysely",
"wayToGetHeiiOnCallDetails": "Trigger ID:n ja API-avainten hankinta selitetään ohjeistuksessa {documentation}",
"documentationOf": "{0} Dokumentaatio",
"Enter the list of brokers": "Syötä lista välittäjistä",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Joko palvelimen osoite johon haluat yhdistää tai {localhost} jos aiot käyttää {local_mta}",
"successKeyword": "Onnistumisen avainsana",
"tailscalePingWarning": "Käyttääksesi Tailscale Ping-seurainta, sinun täytyy asentaa Uptime Kuma ilman Dockeria ja asentaa Tailscale-asiakasohjelma palvelimellesi.",
"cronExpression": "Cron-määrittely",
"Remove domain": "Poista verkkotunnus '{0}'",
"ntfyPriorityHelptextAllEvents": "Kaikki tapahtumat lähetetään korkeimmalla prioriteetilla",
"Press Enter to add broker": "Paina Enter lisätäksesi välittäjän",
"wayToGetFlashDutyKey": "Mene 'Channel -> (Select a Channel) -> Integrations -> Add a new integration' -sivulle, lisää 'Uptime Kuma' saadaksesi push-osoitteen ja kopioi 'Integration Key' osoitteesta. Lisätietoja saat vierailemalla",
"Saved.": "Tallennettu.",
"receiverInfoSevenIO": "Jos vastaanottajan numero ei ole Saksassa, sinun täytyy lisätä maakoodi numeron eteen (esim. Yhdysvaltojen maakoodille 1 käytä muotoa 117612121212 - ei muotoa 017612121212)",
"gtxMessagingFromHint": "Matkapuhelimissa vastaanottajat näkevät TPOA:n viestin lähettäjänä. Sallittu on korkeintaan 11 aakkosnumeerista merkkiä, lyhytkoodi, paikallinen pitkä koodi tai kansainväliset numerot ({e164}, {e212} or {e214})",
"monitorToastMessagesLabel": "Seuraimen ponnahdusilmoitukset",
"Browser Screenshot": "Selaimen ruutukaappaus",
"Mentioning": "Mainitaan",
"Don't mention people": "Älä mainitse ihmisiä",
"Mention group": "Mainitse {group}",
"API Keys": "API-avaimet",
"Expiry": "Vanhenee",
"Expiry date": "Vanhenemispäivä",
"Don't expire": "Ei vanhene",
"Continue": "Jatka",
"Add Another": "Lisää toinen",
"apiKey-expired": "Vanhentunut",
"apiKey-inactive": "Ei-aktiivinen",
"Expires": "Vanhenee",
"Badge Down Color": "Badgen alhaalla-väri",
"Badge Pending Color": "Badgen odottaa-väri",
"Originator type": "Lähettäjän tyyppi",
"cellsyntDestination": "Vastaanottajan puhelinnumero kansainvälisessä muodossa: etuliitteenä 00 + maakoodi, esim. 00447920110000 numerolle 07920 110 000 (enint. 17 numeroa). Enintään 25000 pilkulla erotettua vastaanottajaa yhtä HTTP-kyselyä kohti.",
"cellsyntOriginatortypeAlphanumeric": "Aakkosnumeerinen merkkijono (enint. 11 merkkiä). Vastaanottajat eivät voi vastata viestiin.",
"cellsyntOriginatortypeNumeric": "Lukuarvo (enint. 15 numeroa). Puhelinnumero kansainvälisessä formaatissa ilman 00-etuliitettä (esim. UK puhelinnumero 07920 110 000 tulisi syöttää 447920110000). Vastaanottajat eivät voi vastata viestiin.",
"callMeBotGet": "Täällä voit luoda päätepisteen {0}, {1} ja {2}. Muistathan, että palvelu saattaa rajoittavan pääsyäsi. Rajoite näyttäisi olevan: {3}",
"cellsyntOriginator": "Näkyy vastaanottajan matkapuhelimessa viestin lähettäjänä. Sallitut arvot ja toiminta riippuvat lähettäjän tyypistä.",
"Allow Long SMS": "Salli pitkä SMS",
"max 15 digits": "Enint. 15 numeroa",
"Host URL": "Isäntä-URL",
"liquidIntroduction": "Sisältömallit toteutetaan Liquid-kielellä. Katso osoitteesta {0} lisäohjeita. Käytettävissä olevat muuttujat:",
"templateMsg": "ilmoituksen viesti",
"templateHeartbeatJSON": "sydämensyke-objekti",
"templateMonitorJSON": "seurain-objekti",
"templateLimitedToUpDownNotifications": "saatavilla vain YLÖS/ALAS -ilmoituksille",
"templateLimitedToUpDownCertNotifications": "saatavilla vain YLÖS/ALAS/Varmenteen vanheneminen -ilmoituksille",
"successKeywordExplanation": "MQTT-avainsana joka tulkitaan onnistumiseksi",
"Check/Uncheck": "Valitse/Poista valinta",
"statusPageSpecialSlugDesc": "Erityinen slug {0}: tätä sivua ei näytetä kun slugia ei ole määritelty",
"Add a new expiry notification day": "Lisää uusi vanhenemismuistutuspäivä",
"Remove the expiry notification": "Poista vanhenemismuistutuspäivä",
"telegramMessageThreadID": "(Valinnainen) Viestilangan ID",
"telegramSendSilently": "Lähetä hiljaisesti",
"telegramSendSilentlyDescription": "Lähettää viestin hiljaisesti. Käyttäjät saavat ilmoituksen ilman äänimerkkiä.",
"telegramProtectContentDescription": "Jos käytössä, botin viestit Telegramissa suojataan uudelleenlähetykseltä ja tallennukselta.",
"telegramProtectContent": "Suojaa uudelleenlähetykseltä ja tallennukselta",
"telegramMessageThreadIDDescription": "Valinnainen yksilöllinen tunnus keskustelualueen viestilangalle (ketju); vain keskustelualueen superryhmille",
"sameAsServerTimezone": "Sama kuin palvelimen aikavyöhyke",
"startDateTime": "Aloitusajankohta",
"endDateTime": "Päättymisajankohta",
"enableNSCD": "Ota käyttöön NSCD (Name Service Cache Daemon) kaikkien DNS-kyselyiden välimuistitusta varten",
"chromeExecutable": "Chrome/Chromium -sovellus",
"chromeExecutableAutoDetect": "Tunnista automaattisesti",
"chromeExecutableDescription": "Docker käyttäjillä, jos Chromium ei ole vielä asennettu, saattaa kulua muutamia minuutteja asennukseen ennen testituloksen näyttämistä. Levytilaa vaaditaan 1 Gt.",
"Edit Maintenance": "Muokkaa Huoltoa",
"smtpLiquidIntroduction": "Kaksi seuraavaa kenttää ovat muokattavissa Liquid template-kielellä. Katso osoitteesta {0} lisäohjeita. Käytettävissä olevat muuttujat:",
"Clone Monitor": "Monista seurain",
"leave blank for default subject": "jätä tyhjäksi käyttääksesi oletusaihetta",
"emailCustomBody": "Mukautettu sisältörunko",
"leave blank for default body": "jätä tyhjäksi käyttääksesi oletussisältörunkoa",
"emailTemplateServiceName": "Palvelun nimi",
"emailTemplateHostnameOrURL": "Isäntänimi tai URL",
"emailTemplateStatus": "Tila",
"emailTemplateMonitorJSON": "seurain-objekti",
"emailTemplateHeartbeatJSON": "sydämensyke-objekti",
"emailTemplateMsg": "ilmoitusviesti",
"emailTemplateLimitedToUpDownNotification": "saatavilla vain YLÖS/ALAS sydämensykkeille, muulloin null",
"Your User ID": "Käyttäjätunnuksesi",
"invertKeywordDescription": "Etsi puuttuvaa avainsanaa.",
"Bark API Version": "Bark API-versio",
"Notify Channel": "Ilmoitus kanavalle",
"aboutNotifyChannel": "Ilmoitus kanavalle antaa työpöytä- tai mobiili-ilmoituksen kaikille kanavan jäsenille; riippumatta ovatko he paikalla vai poissa.",
"setup a new monitor group": "luo uusi seurainryhmä",
"openModalTo": "avaa ikkuna kohteeseen {0}",
"Server URL should not contain the nfty topic": "Palvelimen URL ei saa sisältää nfty-aihetta",
"PushDeer Server": "PushDeer -palvelin",
"pushDeerServerDescription": "Jätä tyhjäksi käyttääksesi virallista palvelinta",
"Add API Key": "Lisää API-avain",
"No API Keys": "Ei API-avaimia",
"apiKeyAddedMsg": "API-avaimesi on lisätty. Laitathan sen muistiin, sillä sitä ei näytetä uudelleen.",
"Body Encoding": "Sisällön muoto (encoding)",
"Key Added": "Avain lisätty",
"apiKey-active": "Aktiivinen",
"disableAPIKeyMsg": "Haluatko varmasti kytkeä tämän API-avaimen pois käytöstä?",
"deleteAPIKeyMsg": "Haluatko varmasti poistaa tämän API-avaimen?",
"Generate": "Luo",
"pagertreeIntegrationUrl": "Integrointi-URL",
"pagertreeUrgency": "Kiireellisyysaste",
"pagertreeSilent": "Hiljainen",
"pagertreeLow": "Alhainen",
"pagertreeMedium": "Keskitaso",
"pagertreeHigh": "Korkea",
"pagertreeCritical": "Kriittinen",
"pagertreeDoNothing": "Älä tee mitään",
"pagertreeResolve": "Ratkaise automaattisesti",
"wayToGetPagerTreeIntegrationURL": "Kun olet luonut PagerTree Uptime Kuma -integraation, kopioi endpoint-URL. Katso lisätietoja: {0}",
"lunaseaTarget": "Kohde",
"lunaseaDeviceID": "Laitetunnus",
"lunaseaUserID": "Käyttäjätunnus",
"ntfyAuthenticationMethod": "Tunnistautumismenetelmä",
"ntfyPriorityHelptextAllExceptDown": "Kaikki tapahtumat lähetetään tällä prioriteetilla, paitsi {0}-tapahtumat, joilla on prioriteetti {1}",
"twilioApiKey": "API-avain (valinnainen)",
"twilioAuthToken": "Tunnistautumis-token / API-avaimen salaisuus",
"twilioFromNumber": "Numerosta",
"Badge Prefix": "Badgen arvon etuliite",
"Badge Suffix": "Badgen arvon pääte",
"Badge Label Color": "Badgen tekstin väri",
"Badge Color": "Badgen väri",
"Badge Label Prefix": "Badgen tekstin etuliite",
"Badge Warn Color": "Badgen varoitusväri",
"Badge Maintenance Color": "Badgen huoltoväri",
"Authorization Identity": "Todennuksen Identititeetti",
"Badge Down Days": "Badgen alhaalla-päivät",
"Badge Style": "Badgen tyyli",
"Badge URL": "Badgen URL",
"monitorToastMessagesDescription": "Ponnahdusilmoitukset seuraimille katoavat annetun sekuntimäärän kuluttua. Arvo -1 kytkee ajastuksen pois. Aseta arvoksi 0 estääksesi ponnahdusilmoitukset.",
"toastErrorTimeout": "Virheilmoitusten kesto",
"Enable Kafka Producer Auto Topic Creation": "Käytä Kafka Producerin automaattista aiheen luontia",
"Kafka SASL Options": "Kafka SASL-valinnat",
"Mechanism": "Mekanismi",
"AccessKey Id": "AccessKey-tunnus",
"Secret AccessKey": "Salainen AccessKey",
"Session Token": "Istunnon token",
"noGroupMonitorMsg": "Ei saatavilla. Luo seurainryhmä ensin.",
"Close": "Sulje",
"Request Body": "Pyynnön sisältörunko",
"FlashDuty Severity": "Vakavuus",
"nostrRelays": "Nostr-releet",
"nostrSender": "Lähettäjän yksityisavain (nsec)",
"nostrRecipients": "Vastaanottajan julkiset avaimet (npub)",
"nostrRecipientsHelp": "npub-formaatissa, yksi per rivi",
"showCertificateExpiry": "Näytä varmenteen vanheneminen",
"noOrBadCertificate": "Puuttuva tai virheellinen varmenne",
"gamedigGuessPort": "Gamedig: Arvaa portti",
"gamedigGuessPortDescription": "Valve Server Query Protocol -portti voi olla eri kuin asiakasportti. Kokeile tätä jos seurain ei voi yhdistää palvelimeesi.",
"authUserInactiveOrDeleted": "Käyttäjä on ei ole aktiivinen tai on poistettu.",
"authInvalidToken": "Virheellinen token.",
"successAdded": "Lisätty onnistuneesti.",
"authIncorrectCreds": "Virheellinen käyttäjänimi tai salasana.",
"2faDisabled": "2FA poistettu käytöstä.",
"2faEnabled": "2FA käytössä.",
"2faAlreadyEnabled": "2FA on jo käytössä.",
"successDeleted": "Poistettu onnistuneesti.",
"successEdited": "Muokattu onnistuneesti.",
"successAuthChangePassword": "Salasana on päivitetty onnistuneesti.",
"successBackupRestored": "Varmuuskopio on palautettu onnistuneesti.",
"successDisabled": "Kytketty pois päältä onnistuneesti.",
"successEnabled": "Kytketty päälle onnistuneesti.",
"useRemoteBrowser": "Käytä etäselainta",
"deleteRemoteBrowserMessage": "Oletko varma että haluat poistaa tämän etäselaimen kaikilta seuraimilta?",
"wayToWriteWhapiRecipient": "Puhelinnumero kansainvälisellä etuliitteellä, mutta ilman plus-merkkiä alussa ({0}), kontaktin tunnusta ({1}) tai ryhmän tunnusta ({2}).",
"Alphanumeric (recommended)": "Aakkosnumeerinen (suositeltu)",
"wayToGetWhapiUrlAndToken": "Voit saada API URLin ja token-avaimen käymällä haluamallasi kanavalla osoitteessa {0}",
"whapiRecipient": "Puhelinnumero / Kontaktin tunnus / Ryhmän tunnus",
"API URL": "API-URL",
"gtxMessagingApiKeyHint": "Löydät API-avaimesi täältä: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Lähettäjän puhelinnumero / Transmission Path Originating Address (TPOA)",
"To Phone Number": "Vastaanottajan puhelinnumero",
"cellsyntSplitLongMessages": "Jaa pitkät viestit korkeintaan kuuteen osaan. 153 x 6 = 918 merkkiä.",
"max 11 alphanumeric characters": "Enint. 11 aakkosnumeerista merkkiä",
"GrafanaOncallUrl": "Grafana Oncall-URL",
"emailCustomisableContent": "Mukautettava sisältö",
"Pick a SASL Mechanism...": "Valitse SASL-mekanismi…",
"Group": "Ryhmä",
"Monitor Group": "Seurainryhmä",
"What is a Remote Browser?": "Mikä on etäselain?",
"Badge Warn Days": "Badgen varoitus-päivät",
"Remote Browsers": "Etäselaimet",
"self-hosted container": "Itse ylläpidetty kontti",
"remoteBrowserToggle": "Oletuksena Chromium ajetaan Uptime Kuma -kontin sisällä. Voit käyttää etäselainta kytkemällä tämän valinnan.",
"Remote Browser": "Etäselain",
"Add a Remote Browser": "Lisää etäselain",
"Remote Browser not found!": "Etäselainta ei löytynyt!",
"remoteBrowsersDescription": "Etäselaimet ovat vaihtoehto paikalliselle Chromiumille. Käytä palvelua kuten browserless.io tai yhdistä oma etäselaimesi",
"Reset Token": "Nollaa token",
"notificationRegional": "Alueellinen",
"twilioToNumber": "Numeroon",
"Monitor Setting": "{0}'s seurainasetukset",
"Badge Duration (in hours)": "Badgen kesto (tunneissa)",
"Badge Label": "Badgen teksti",
"Show Clickable Link Description": "Jos valittu, jokainen jolla on pääsy tälle tilasivulle saavat pääsyn seuraimen URL-osoitteeseen.",
"Show Clickable Link": "Näytä klikattava linkki",
"Open Badge Generator": "Avaa Badge-generaattori",
"Badge Generator": "{0} Badge-generaattori",
"Badge Type": "Badgen tyyppi",
"Badge Preview": "Badgen esikatselu",
"Badge Label Suffix": "Badgen tekstin pääte",
"Badge Up Color": "Badgen ylhäällä-väri",
"tagNotFound": "Tunnistetta ei löydy.",
"foundChromiumVersion": "Löydettiin Chromium/Chrome. Versio: {0}",
"noDockerHostMsg": "Ei saatavilla. Asenna Docker-isäntä ensin.",
"Badge value (For Testing only.)": "Badgen arvo (Vain testausta varten.)",
"toastSuccessTimeout": "Onnistumisilmoitusten kesto",
"wayToGetSevenIOApiKey": "Vieraile hallintasivustolla app.seven.io > developer > api key ja paina vihreää 'add' -painiketta",
"senderSevenIO": "Lähettävä numero tai nimi",
"receiverSevenIO": "Vastaanottajan numero",
"apiKeySevenIO": "SevenIO API-avain",
"Telephone number": "Puhelinnumero",
"gtxMessagingToHint": "Kansainvälisessä muodossa, etuliitteenä \"+\" ({e164}, {e212} or {e214})",
"Originator": "Lähettäjä",
"Destination": "Vastaanottaja",
"locally configured mail transfer agent": "Paikallisesti asetettu postiagentti (MTA)",
"Search monitored sites": "Etsi valvotuista sivustoista",
"DockerHostRequired": "Aseta Docker-isäntä tälle seuraimelle.",
"Clone": "Monista",
"cloneOf": "Monistettu {0}",
"pushoverMessageTtl": "Viestin TTL (Sekuntia)",
"Add a domain": "Lisää verkkotunnus",
"ntfyUsernameAndPassword": "Käyttäjänimi ja salasana",
"twilioAccountSID": "Tilin SID",
"successPaused": "Laitettu tauolle onnistuneesti.",
"successResumed": "Jatkettu onnistuneesti.",
"Channel access token (Long-lived)": "Kanavan pääsyavain (pitkäaikainen)",
"Kafka Brokers": "Kafla-välittäjät",
"Kafka Producer Message": "Kafka Producer -viesti",
"Enable Kafka SSL": "Käytä Kafka SSL:ää",
"cronSchedule": "Aikataulu: ",
"Kafka Topic Name": "Kafka aihenimi",
"nostrRelaysHelp": "Yksi rele-URL riviä kohden",
"styleElapsedTime": "Kulunut aika sydämensykepalkin alla",
"styleElapsedTimeShowNoLine": "Näytä (Ei viivaa)",
"styleElapsedTimeShowWithLine": "Näytä (Viivan kanssa)",
"filterActive": "Aktiivinen",
"filterActivePaused": "Tauolla",
"statusPageRefreshIn": "Päivitetään: {0}",
"webhookBodyPresetOption": "Esivalinta - {0}",
"Select": "Valitse",
"selectedMonitorCount": "Valittu: {0}",
"Add New Tag": "Lisää uusi tunniste",
"webhookBodyCustomOption": "Mukautettu sisältörunko",
"invalidCronExpression": "Virheellinen Cron-määrittely: {0}",
"wayToGetDiscordThreadId": "Langan / keskustelualueketjun ID haetaan samalla tavalla kuin kanavan ID. Lue lisää ID:n hakemisesta {0}",
"mongodbCommandDescription": "Aja MongoDB-komento tietokannassa. Lisätietoja saatavilla olevista komennoista saat osoitteesta {documentation}",
"Bitrix24 Webhook URL": "Bitrix24 Webhookin URL",
"wayToGetBitrix24Webhook": "Voit luoda webhookin seuraamalla ohjeita osoitteessa {0}",
"bitrix24SupportUserID": "Syötä Bitrix24 käyttäjä-ID:si. Löydät käyttäjä-ID:n linkistä vierailemalla käyttäjän profiilissa.",
"Refresh Interval": "Päivityksen aikaväli",
"Refresh Interval Description": "Tilasivu latautuu uudelleen joka {0} sekunti",
"forumPostName": "Keskustelualueketjun nimi",
"ignoreTLSErrorGeneral": "Ohita yhteyden TLS/SSL-virheet",
"Select message type": "Valitse viestityyppi",
"Send to channel": "Lähetä kanavalle",
"postToExistingThread": "Lähetä jo olemassaolevaan lankaan / keskustelualueen ketjuun",
"Create new forum post": "Luo uusi ketju keskustelualueelle",
"threadForumPostID": "Langan / Keskustelualueketjun ID",
"e.g. {discordThreadID}": "esim. {discordThreadID}",
"whatHappensAtForumPost": "Luo uusi keskustelualueketju. Tämä EI jatka edellistä ketjua. Lähettääksesi olemassaolevaan ketjuun käytä toimintoa \"{option}\"",
"Command": "Komento"
}

@ -73,11 +73,11 @@
"Delete": "Supprimer",
"Current": "Actuellement",
"Uptime": "Disponibilité",
"Cert Exp.": "Expiration Cert SSL",
"Cert Exp.": "Expiration Cert SSL.",
"day": "jour | jours",
"-day": "-jour",
"-day": "-jours",
"hour": "heure",
"-hour": "heures",
"-hour": "-heures",
"Response": "Temps de réponse",
"Ping": "Ping",
"Monitor Type": "Type de sonde",
@ -332,13 +332,13 @@
"Headers": "En-têtes",
"PushUrl": "URL Push",
"HeadersInvalidFormat": "Les en-têtes de la requête ne sont pas dans un format JSON valide : ",
"BodyInvalidFormat": "Le corps de la requête n'est pas dans un format JSON valide : ",
"BodyInvalidFormat": "Le corps de la requête n'est pas dans un format JSON valide: ",
"Monitor History": "Historique de la sonde",
"clearDataOlderThan": "Conserver l'historique des données de la sonde durant {0} jours.",
"PasswordsDoNotMatch": "Les mots de passe ne correspondent pas.",
"records": "enregistrements",
"One record": "Un enregistrement",
"steamApiKeyDescription": "Pour surveiller un serveur Steam, vous avez besoin d'une clé Steam Web-API. Vous pouvez enregistrer votre clé ici : ",
"steamApiKeyDescription": "Pour surveiller un serveur Steam, vous avez besoin d'une clé Steam Web-API. Vous pouvez enregistrer votre clé ici : ",
"Current User": "Utilisateur actuel",
"topic": "Sujet",
"topicExplanation": "Topic MQTT à surveiller",
@ -473,7 +473,7 @@
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "Ajouter une page de statut",
"Slug": "Chemin",
"Accept characters:": "Caractères acceptés : ",
"Accept characters:": "Caractères acceptés:",
"startOrEndWithOnly": "Commence uniquement par {0}",
"No consecutive dashes": "Pas de double tirets",
"Next": "Continuer",
@ -488,7 +488,7 @@
"About": "À propos",
"wayToGetCloudflaredURL": "(télécharger cloudflared depuis {0})",
"cloudflareWebsite": "Site web de Cloudflare",
"Message:": "Message : ",
"Message:": "Message :",
"Don't know how to get the token? Please read the guide:": "Vous ne savez pas comment obtenir le jeton ? Lisez le guide :",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "La connexion actuelle peut être perdue si vous vous connectez actuellement via un tunnel Cloudflare. Êtes-vous sûr de vouloir l'arrêter ? Tapez votre mot de passe actuel pour le confirmer.",
"HTTP Headers": "En-têtes HTTP",
@ -496,11 +496,11 @@
"Other Software": "Autres logiciels",
"For example: nginx, Apache and Traefik.": "Par exemple : nginx, Apache et Traefik.",
"Please read": "Veuillez lire",
"Subject:": "Objet : ",
"Valid To:": "Valable jusqu'au : ",
"Days Remaining:": "Jours restants : ",
"Issuer:": "Émetteur : ",
"Fingerprint:": "Empreinte : ",
"Subject:": "Objet :",
"Valid To:": "Valable jusqu'au :",
"Days Remaining:": "Jours restants :",
"Issuer:": "Émetteur :",
"Fingerprint:": "Empreinte :",
"No status pages": "Aucune page de statut",
"Domain Name Expiry Notification": "Notification d'expiration du nom de domaine",
"Proxy": "Proxy",
@ -567,7 +567,7 @@
"Using a Reverse Proxy?": "Utiliser un proxy inverse ?",
"Check how to config it for WebSocket": "Vérifier comment le configurer pour WebSocket",
"Steam Game Server": "Serveur de jeu Steam",
"Most likely causes:": "Causes les plus probables : ",
"Most likely causes:": "Causes les plus probables :",
"The resource is no longer available.": "La ressource n'est plus disponible.",
"There might be a typing error in the address.": "Il se peut qu'il y ait une erreur de frappe dans l'adresse.",
"What you can try:": "Ce que vous pouvez essayer :",
@ -602,10 +602,10 @@
"Notification Service": "Service de notifications",
"default: notify all devices": "par défaut : notifier tous les appareils",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Une liste des services de notification peut être trouvée dans Home Assistant sous \"Outils de développement > Services\" recherchez \"notification\" pour trouver le nom de votre appareil/téléphone.",
"Automations can optionally be triggered in Home Assistant:": "Les automatisations peuvent éventuellement être déclenchées dans Home Assistant : ",
"Trigger type:": "Type de déclencheur : ",
"Event type:": "Type d'événement : ",
"Event data:": "Données d'événement : ",
"Automations can optionally be triggered in Home Assistant:": "Les automatisations peuvent éventuellement être déclenchées dans Home Assistant :",
"Trigger type:": "Type de déclencheur :",
"Event type:": "Type d'événement :",
"Event data:": "Données d'événement :",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Ensuite, choisissez une action, par exemple basculer la scène là où une lumière RVB est rouge.",
"Frontend Version": "Version frontend",
"Frontend Version do not match backend version!": "La version frontend ne correspond pas à la version backend !",
@ -699,7 +699,7 @@
"Edit Tag": "Modifier l'étiquette",
"Body Encoding": "Encodage du corps",
"telegramMessageThreadID": "(Facultatif) ID du fil de message",
"telegramMessageThreadIDDescription": "(Facultatif) Identifiant unique pour le fil de discussion ciblé (sujet) du forum; pour les supergroupes du forum uniquement",
"telegramMessageThreadIDDescription": "(Facultatif) Identifiant unique pour le fil de discussion ciblé (sujet) du forum; pour les supergroupes du forum uniquement",
"telegramProtectContent": "Protéger le transfert/l'enregistrement",
"telegramProtectContentDescription": "S'il est activé, les messages du robot dans Telegram seront protégés contre le transfert et l'enregistrement.",
"telegramSendSilently": "Envoyer silencieusement",
@ -717,7 +717,7 @@
"No API Keys": "Aucune clé API",
"apiKey-active": "Active",
"apiKey-expired": "Expirée",
"apiKey-inactive": "Inactive",
"apiKey-inactive": "Inactif",
"Expires": "Expire",
"disableAPIKeyMsg": "Voulez-vous vraiment désactiver cette clé API ?",
"deleteAPIKeyMsg": "Voulez-vous vraiment supprimer cette clé API ?",
@ -797,7 +797,6 @@
"twilioApiKey": "Clé API (facultatif)",
"Expected Value": "Valeur attendue",
"Json Query": "Requête Json",
"jsonQueryDescription": "Faites une requête json contre la réponse et vérifiez la valeur attendue (la valeur de retour sera convertie en chaîne pour comparaison). Consultez {0} pour la documentation sur le langage de requête. Une aire de jeux peut être trouvée {1}.",
"Badge Duration (in hours)": "Durée du badge (en heures)",
"Badge Preview": "Aperçu du badge",
"aboutNotifyChannel": "Notifier le canal déclenchera une notification de bureau ou mobile pour tous les membres du canal, que leur disponibilité soit active ou absente.",
@ -833,7 +832,7 @@
"noOrBadCertificate": "Pas/Mauvais certificat",
"pushDeerServerDescription": "Laissez le champ vide pour utiliser le serveur officiel",
"FlashDuty Severity": "Gravité",
"wayToGetFlashDutyKey": "Vous pouvez aller dans Canal -> (Sélectionner un canal) -> Intégrations -> Ajouter une nouvelle page d'intégration, ajouter un \"événement personnalisé\" pour obtenir une adresse push, copier la clé d'intégration dans l'adresse. Pour plus d'informations, veuillez visiter",
"wayToGetFlashDutyKey": "Vous pouvez aller dans Canal -> (Sélectionner un canal) -> Intégrations -> Ajouter une nouvelle page d'intégration, ajouter un « Uptime Kuma » pour obtenir une adresse push, copier la clé d'intégration dans l'adresse. Pour plus d'informations, veuillez visiter",
"Request Timeout": "Délai d'expiration de la demande",
"timeoutAfter": "Délai dépassé après {0} secondes",
"gamedigGuessPort": "Gamedig : Devinez le port",
@ -918,5 +917,60 @@
"ntfyPriorityHelptextAllEvents": "Tous les événements sont envoyés avec la priorité maximale",
"ntfyPriorityHelptextAllExceptDown": "Tous les événements sont envoyés avec cette priorité, à l'exception des événements {0}, qui ont une priorité de {1}",
"statusPageSpecialSlugDesc": "Chemin spécial {0} : cette page sera affichée en l'absence de chemin",
"What is a Remote Browser?": "Qu'est-ce qu'un navigateur distant ?"
"What is a Remote Browser?": "Qu'est-ce qu'un navigateur distant ?",
"Channel access token (Long-lived)": "Jeton d'accès au canal (longue durée)",
"Your User ID": "Votre identifiant",
"documentationOf": "{0} Documentation",
"wayToGetHeiiOnCallDetails": "Comment obtenir l'ID de déclencheur et les clés API d'après la {documentation}",
"From Phone Number / Transmission Path Originating Address (TPOA)": "À partir du numéro de téléphone / Adresse d'origine du chemin de transmission (TPOA)",
"To Phone Number": "Au numéro de téléphone",
"gtxMessagingToHint": "Format international, avec \"+\" ({e164}, {e212} ou {e214})",
"gtxMessagingApiKeyHint": "Vous pouvez trouver votre clé API à l'adresse suivante : Mes comptes de routage > Afficher les informations du compte > Informations d'identification de l'API > API REST (v2.x)",
"gtxMessagingFromHint": "Sur les téléphones mobiles, vos destinataires voient le TPOA affiché comme l'expéditeur du message. Sont autorisés jusqu'à 11 caractères alphanumériques, un shortcode, le longcode local ou les numéros internationaux ({e164}, {e212} ou {e214})",
"Telephone number": "Numéro de téléphone",
"Originator": "Auteur",
"cellsyntOriginator": "Visible sur le téléphone mobile du destinataire en tant qu'expéditeur du message. Les valeurs autorisées et la fonction dépendent du type d'auteur du paramètre.",
"Destination": "Destination",
"Allow Long SMS": "Autoriser les SMS longs",
"cellsyntSplitLongMessages": "Divisez les longs messages en 6 parties maximum. 153 x 6 = 918 caractères.",
"max 15 digits": "maximum 15 chiffres",
"max 11 alphanumeric characters": "maximum 11 caractères alphanumériques",
"Originator type": "Type d'auteur",
"Alphanumeric (recommended)": "Alphanumérique (recommandé)",
"cellsyntOriginatortypeAlphanumeric": "Chaîne alphanumérique (max 11 caractères alphanumériques). Les destinataires ne peuvent pas répondre au message.",
"cellsyntOriginatortypeNumeric": "Valeur numérique (maximum 15 chiffres) avec numéro de téléphone au format international sans 00 en tête (par exemple, le numéro britannique 07920 110 000 doit être défini comme 447920110000). Les destinataires peuvent répondre au message.",
"cellsyntDestination": "Numéro de téléphone du destinataire au format international commençant par 00 suivi de l'indicatif du pays, par ex. 00447920110000 pour le numéro britannique 07920 110 000 (max 17 chiffres au total). Max 25 000 destinataires séparés par des virgules par requête HTTP.",
"callMeBotGet": "Ici, vous pouvez générer un point de terminaison pour {0}, {1} et {2}. Gardez à lesprit que votre tarif peut être limité. Les limites de débit semblent être: {3}",
"wayToGetWhapiUrlAndToken": "Vous pouvez obtenir l'URL de l'API et le jeton en allant dans votre canal souhaité à partir de {0}",
"whapiRecipient": "Numéro de téléphone / ID de contact / ID de groupe",
"API URL": "URL de l'API",
"wayToWriteWhapiRecipient": "Le numéro de téléphone avec le préfixe international, mais sans le signe plus au début ({0}), l'ID de contact ({1}) ou l'ID de groupe ({2}).",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Entrez le nom d'hôte du serveur auquel vous souhaitez vous connecter ou {localhost} si vous avez l'intention d'utiliser un {local_mta}",
"locally configured mail transfer agent": "Agent de transfert de courrier configuré localement",
"Don't mention people": "Ne mentionne pas les personnes",
"Mention group": "Mentionne {groupe}",
"Mentioning": "Mentionner",
"senderSevenIO": "Numéro ou nom d'envoi",
"receiverSevenIO": "Numéro de réception",
"apiKeySevenIO": "Clé API SevenIO",
"wayToGetSevenIOApiKey": "Visitez le tableau de bord sous app.seven.io > développeur > clé api > le bouton d'ajout vert",
"receiverInfoSevenIO": "Si le numéro de réception n'est pas situé en Allemagne, vous devez ajouter l'indicatif du pays devant le numéro (par exemple, pour l'indicatif de pays 1 des États-Unis, utilisez 117612121212 au lieu de 017612121212)",
"Host URL": "URL de l'hôte",
"Select message type": "Sélectionnez le type de message",
"Create new forum post": "Créer un nouveau message sur le forum",
"postToExistingThread": "Publier sur le fil de discussion / forum existant",
"forumPostName": "Nom du post sur le forum",
"threadForumPostID": "ID du fil / ID du post sur le forum",
"whatHappensAtForumPost": "Créer un nouveau post sur le forum. Cela ne publie PAS de messages dans un post existant. Pour publier dans un post existant, utilisez \"{option}\"",
"wayToGetDiscordThreadId": "Obtenir un ID de fil / post sur le forum est similaire à obtenir un ID de canal. Pour en savoir plus sur la manière d'obtenir des IDs, lisez {0}",
"Send to channel": "Envoyer au canal",
"e.g. {discordThreadID}": "e.g. {discordThreadID}",
"Command": "Commande",
"mongodbCommandDescription": "Exécutez une commande MongoDB sur la base de données. Pour plus d'informations sur les commandes disponibles, consultez la {documentation}",
"Refresh Interval": "Intervalle de rafraîchissement",
"Refresh Interval Description": "La page de statut effectuera un rafraîchissement complet du site toutes les {0} secondes",
"ignoreTLSErrorGeneral": "Ignorer l'erreur TLS/SSL pour la connexion",
"Bitrix24 Webhook URL": "URL du Webhook Bitrix24",
"wayToGetBitrix24Webhook": "Vous pouvez créer un webhook en suivant les étapes de {0}",
"bitrix24SupportUserID": "Entrez votre identifiant d'utilisateur dans Bitrix24. Vous pouvez trouver l'ID à partir du lien en allant sur le profil de l'utilisateur."
}

@ -0,0 +1,941 @@
{
"setupDatabaseMariaDB": "Ceangail le bunachar sonraí MariaDB seachtrach. Ní mór duit eolas ceangailte na bunachar sonraí a shocrú.",
"settingUpDatabaseMSG": "Ag socrú an bhunachair sonraí. D'fhéadfadh sé tamaill, biodh foighne agat, le do thoil.",
"dbName": "Ainm an Bhunachair Sonraí",
"Settings": "Socruithe",
"Dashboard": "Deais",
"Help": "Cabhair",
"New Update": "Nuashonrú Nua",
"Language": "Teanga",
"Appearance": "Dealramh",
"Theme": "Téama",
"General": "Ginearálta",
"Game": "Cluiche",
"Primary Base URL": "Bonn URL Príomhach",
"Version": "Leagan",
"List": "Liosta",
"Home": "Abhaile",
"Add": "Cui",
"Add New Monitor": "Cuir Monatóir Nua leis",
"Quick Stats": "Staitisticí Tapa",
"Up": "Suas",
"Down": "Síos",
"Pending": "Ar feitheamh",
"Maintenance": "Cothabháil",
"Unknown": "Anaithnid",
"Cannot connect to the socket server": "Ní féidir ceangal a dhéanamh leis an freastalaí soicéad",
"Passive Monitor Type": "Cineál Monatóir Éighníomhach",
"Specific Monitor Type": "Cineál Sonrach Monatóir",
"markdownSupported": "Tacaítear le comhréir Markdown",
"pauseDashboardHome": "Sos",
"Pause": "Sos",
"Name": "Ainm",
"Status": "Stádas",
"DateTime": "Dáta Am",
"Message": "Teachtaireacht",
"Resume": "Lean ar aghaidh",
"Edit": "Cuir in Eagar",
"Delete": "Scrios",
"Current": "Reatha",
"Monitor": "Monatóir | Monatóirí",
"day": "lá | laethanta",
"-day": "-lá",
"hour": "Uair",
"-hour": "-uair",
"Response": "Freagra",
"Ping": "Ping",
"Uptime": "Am Ata ar Fáil",
"Cert Exp.": "Teastas in éag.",
"Keyword": "Eochairfhocal",
"Invert Keyword": "Inbhéartaigh Eochairfhocal",
"Expected Value": "Luach Meastaithe",
"Json Query": "Ceist Json",
"Friendly Name": "Ainm Cairdiúil",
"URL": "URL",
"Hostname": "Ainm Óstach",
"Port": "Port",
"Request Timeout": "Iarr am istigh",
"timeoutAfter": "Am istigh tar éis {0} soicind",
"Retries": "Atriall",
"languageName": "Gaeilge",
"setupDatabaseChooseDatabase": "Cén bunachar sonraí is mian leat a úsáid?",
"setupDatabaseSQLite": "Comhad bunachar sonraí simplí, molta do sholáthairí beaga scála. Roimh v2.0.0, úsáid Uptime Kuma SQLite mar an bunachar sonraí réamhshocraithe.",
"setupDatabaseEmbeddedMariaDB": "Ní gá duit aon rud a shocrú. Tá MariaDB leabaithe agus cumraithe ag an íomhá Docker seo go huathoibríoch duit. Ceanglóidh Uptime Kuma leis an mbunachar sonraí seo trí soicéad unix.",
"Check Update On GitHub": "Seiceáil an Nuashonrú ar GitHub",
"statusMaintenance": "Cothabháil",
"Reconnecting...": "Ag athcheangal…",
"General Monitor Type": "Cineál Monatóir Ginearálta",
"No important events": "Gan imeachtaí tábhachtacha",
"Monitor Type": "Cineal Monatóir",
"Heartbeat Interval": "Buille Croí Eatramh",
"Heartbeat Retry Interval": "Eatramh Athtriail Buille Croí",
"Resend Notification if Down X times consecutively": "Seol Fógra arís má tá Down X uair i ndiaidh a chéile",
"Advanced": "Ardleibhéal",
"checkEverySecond": "Seiceáil gach {0} soicind",
"retryCheckEverySecond": "Atriail gach {0} soicind",
"resendEveryXTimes": "Seol ar ais gach {0} uair eile",
"resendDisabled": "Seol ar ais dhíchumasaithe",
"retriesDescription": "Uasmhéid triailí sula ndéantar an tseirbhís a mharcáil mar síos agus go seoltar fógra",
"ignoreTLSError": "Déan neamhaird de earráidí TLS/SSL do shuíomhanna Gréasáin HTTPS",
"upsideDownModeDescription": "Smeach an stádas bun os cionn. Má tá an tseirbhís inrochtana, tá sé SÍOS.",
"maxRedirectDescription": "Uasmhéid na n-athreoraigh le leanúint. Socraigh go 0 chun athreoraigh a dhíchumasú.",
"Upside Down Mode": "Mód bunoscionn",
"Max. Redirects": "Uasmhéid Athreoraíochtaí",
"Push URL": "Brúigh URL",
"pushOptionalParams": "Paraiméadair roghnacha: {0}",
"Accepted Status Codes": "Códanna Stádais a nGlactar leo",
"needPushEvery": "Ba cheart duit an URL seo a ghairm gach {0} soicind.",
"pushOthers": "Eile",
"programmingLanguages": "Teangacha Programála",
"Save": "Sábháil",
"Notifications": "Fógraí",
"Setup Notification": "Fógraí Socruithe",
"Light": "Solas",
"Dark": "Dorcha",
"Auto": "Uathoibríoch",
"Theme - Heartbeat Bar": "Téama - Barra Buille Croí",
"styleElapsedTime": "Am caite faoi bharra an bhuille croí",
"styleElapsedTimeShowNoLine": "Taispeáin (Gan Líne)",
"Normal": "Gnáth",
"Bottom": "Bun",
"None": "Gan rud",
"Timezone": "Crios ama",
"Disable Auth": "Auth dhíchumasú",
"Enable Auth": "Cumasaigh Auth",
"Change Password": "Athraigh do Phasfhocal",
"Current Password": "Pasfhocal Reatha",
"New Password": "Pasfhocal Nua",
"Repeat New Password": "Déan Pasfhocal Nua arís",
"Search Engine Visibility": "Infheictheacht Inneall Cuardaigh",
"Allow indexing": "Ceadaigh innéacsú",
"Please use this option carefully!": "Bain úsáid as an rogha seo go cúramach, le do thoil!",
"Logout": "Logáil Amach",
"Leave": "Fág",
"I understand, please disable": "Tuigim, le do thoil, múch",
"Confirm": "Deimhnigh",
"Yes": "Tá",
"No": "Níl",
"Username": "Ainm úsáideora",
"Password": "Pasfhocal",
"Remember me": "Cuimhnigh orm",
"Login": "Logáil isteach",
"where you intend to implement third-party authentication": "áit a bhfuil sé ar intinn agat fíordheimhniú tríú páirtí a chur i bhfeidhm",
"disableauth.message1": "An bhfuil tú cinnte gur mhaith leat {disableAuth}?",
"disable authentication": "fíordheimhniú a dhíchumasú",
"No Monitors, please": "Gan Monatóirí, le do thoil",
"add one": "Cuir ceann leis",
"Notification Type": "Cineál Fógra",
"Email": "Ríomhphost",
"Test": "Scrúdú",
"Certificate Info": "Eolas Teastais",
"Resolver Server": "Freastalaí Resolver",
"Resource Record Type": "Cineál Taifead Acmhainn",
"Last Result": "Toradh Deireanach",
"Create your admin account": "Cruthaigh do chuntas riaracháin",
"Repeat Password": "Athscríobh an Pasfhocal",
"Import Backup": "Iompórtáil Cúltaca",
"Export Backup": "Easpórtáil Cúltaca",
"Export": "Easpórtáil",
"Import": "Iompórtáil",
"respTime": "Am freagartha (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Réamhshocrú cumasaithe",
"Apply on all existing monitors": "Déan iarratas ar gach monatóir atá ann cheana féin",
"Create": "Cruthaigh",
"Events": "Imeachtaí",
"Heartbeats": "Buillí croí",
"Auto Get": "Faigh Uathoibríoch",
"Affected Monitors": "Monatóirí Impiachtaithe",
"Pick Affected Monitors...": "Roghnaigh na Monatóirí Impiachtaithe…",
"Start of maintenance": "Tús na Cothabhála",
"All Status Pages": "Gach Leathanach Stádais",
"alertNoFile": "Roghnaigh comhad le haghaidh iompórtála, le do thoil.",
"alertWrongFileType": "Roghnaigh comhad JSON, le do thoil.",
"Clear all statistics": "Glan na Staitistici uile",
"Skip existing": "Scipeáil atá ann cheana",
"Overwrite": "Forscríobh",
"Options": "Roghanna",
"Verify Token": "Dearbhaigh an Tócan",
"Setup 2FA": "Socraigh 2FA",
"Enable 2FA": "Cumasaigh 2FA",
"Disable 2FA": "Díchumasigh 2FA",
"2FA Settings": "Socruithe 2FA",
"filterActive": "Gníomhach",
"filterActivePaused": "Sos",
"Active": "Gníomhach",
"Inactive": "Neamhghníomhach",
"Token": "Tócan",
"Show URI": "Taispeáin URI",
"Tags": "Clibanna",
"Add New Tag": "Cuir Clib Nua",
"Add New below or Select...": "Cuir Nua leis thíos nó Roghnaigh…",
"Tag with this value already exist.": "Tá clib leis an luach seo ann cheana féin.",
"color": "Dath",
"value (optional)": "luach (roghnach)",
"Gray": "Liath",
"Red": "Dearg",
"Orange": "Oráiste",
"Green": "Glas",
"Blue": "Gorm",
"Indigo": "Indeagó",
"Custom": "Gnás",
"Search...": "Cuardach…",
"Search monitored sites": "Cuardaigh suíomhanna monatóireachta",
"Avg. Ping": "Meán Ping",
"Avg. Response": "Meán Freagra",
"statusPageNothing": "Ní dhéanfaidh aon ní anseo, cuir grúpa nó monatóir leis.",
"statusPageRefreshIn": "Athnuaigh i: {0}",
"No Services": "Uimh Seirbhísí",
"Degraded Service": "Seirbhís Díghrádaithe",
"Add Group": "Cuir Grúpa",
"Add a monitor": "Cuir monatóir leis",
"Edit Status Page": "Cuir Leathanach Stádais in Eagar",
"Go to Dashboard": "Téigh go dtí an Deais",
"Status Page": "Leathanach Stádais",
"Status Pages": "Leathanaigh Stádais",
"here": "anseo",
"Required": "Ag teastáil",
"Post URL": "Post URL",
"Content Type": "Cineál Ábhar",
"webhookJsonDesc": "Tá {0} go maith daon fhreastalaithe HTTP nua-aimseartha ar nós Express.js",
"templateMsg": "teachtaireacht an fhógra",
"templateHeartbeatJSON": "réad ag cur síos ar bhuille an chroí",
"templateMonitorJSON": "réad ag cur síos ar an monatóir",
"templateLimitedToUpDownCertNotifications": "ar fáil ach amháin le haghaidh fógraí éaga SUAS/SÍOS/Teastas",
"templateLimitedToUpDownNotifications": "ar fáil ach amháin le fógraí SUAS/SÍOS",
"webhookAdditionalHeadersTitle": "Ceanntásca Breise",
"webhookBodyPresetOption": "Réamhshocrú - {0}",
"webhookBodyCustomOption": "Comhlacht Saincheaptha",
"Webhook URL": "URL Crúca Gréasáin",
"Application Token": "Tócan Feidhmchláir",
"Server URL": "Fhreastalaí URL",
"Priority": "Tosaíocht",
"emojiCheatSheet": "Bileog cheat Emoji: {0}",
"Read more": "Leigh Nios mo",
"appriseInstalled": "Tá Apprise suiteáilte.",
"appriseNotInstalled": "Níl Apprise suiteáilte. {0}",
"Method": "Modh",
"Body": "Corp",
"Headers": "Ceanntásca",
"PushUrl": "Brúigh URL",
"BodyInvalidFormat": "Ní JSON bailí an comhlacht iarratais: ",
"Monitor History": "Stair an Mhiontóra",
"clearDataOlderThan": "Keep monitoring history data for {0} days.",
"PasswordsDoNotMatch": "Ní hionann pasfhocail.",
"records": "taifid",
"One record": "Taifead amháin",
"Current User": "Úsáideoir Reatha",
"topic": "Topaic",
"topicExplanation": "Ábhar MQTT le monatóireacht",
"successKeyword": "Keyword Success",
"successKeywordExplanation": "MQTT Keyword to be considered a success",
"recent": "Le déanaí",
"Reset Token": "Athshocraigh Tócan",
"Done": "Déanta",
"Info": "Eolas",
"Security": "Slándáil",
"Steam API Key": "Eochair Steam API",
"Pick a RR-Type...": "Roghnaigh Cineál RR…",
"Pick Accepted Status Codes...": "Roghnaigh Cóid Stádais a nGlactar leo…",
"Default": "Réamhshocrú",
"HTTP Options": "Roghanna HTTP",
"Create Incident": "Cruthaigh Teagmhas",
"Title": "Teideal",
"Content": "Ábhar",
"Style": "Stíl",
"info": "eolas",
"warning": "rabhadh",
"danger": "contúirt",
"error": "earráid",
"critical": "criticiúil",
"primary": "príomha",
"light": "solas",
"dark": "dorcha",
"Post": "Post",
"Please input title and content": "Cuir isteach teideal agus ábhar",
"Created": "Cruthaithe",
"Last Updated": "Nuashonraithe Deiridh",
"Unpin": "Díbhútaigh",
"Switch to Light Theme": "Athraigh go Téama Solais",
"Switch to Dark Theme": "Athraigh go Téama Dorcha",
"Show Tags": "Taispeáin Clibeanna",
"Hide Tags": "Folaigh Clibeanna",
"Description": "Cur síos",
"Add one": "Cuir ceann leis",
"No Monitors": "Uimh Monatóirí",
"Untitled Group": "Grúpa Gan Teideal",
"Services": "Seirbhísí",
"Discard": "Caith amach",
"Cancel": "Cealaigh",
"Select": "Roghnaigh",
"selectedMonitorCount": "Roghnaithe: {0}",
"Check/Uncheck": "Seiceáil/Díthiceáil",
"Powered by": "Cumhachtaithe ag",
"Customize": "Saincheap",
"Custom Footer": "Buntásc an Chustaim",
"Custom CSS": "CSS saincheaptha",
"default": "Réamhshocrú",
"enabled": "Cumasaithe",
"setAsDefault": "Socraigh Mar Réamhshocrú",
"Proxies": "Seachfhreastalaithe",
"proxyDescription": "Ní mór seachvótálaithe a shannadh do mhonatóir chun feidhmiú.",
"setAsDefaultProxyDescription": "Cumasófar an seachfhreastalaí seo de réir réamhshocraithe le haghaidh monatóirí nua. Is féidir leat an seachfhreastalaí a dhíchumasú fós ar leithligh do gach monatóir.",
"Certificate Chain": "Slabhra Teastais",
"Valid": "Bailí",
"Invalid": "Neamhbhailí",
"User": "Úsáideoir",
"Installed": "Suiteáilte",
"Not installed": "Gan suiteáilte",
"Not running": "Gan rith",
"Running": "Ag Rith",
"Remove Token": "Bain Tócan",
"Start": "Tosaigh",
"Stop": "Stad",
"Add New Status Page": "Cuir Leathanach Stádais Nua leis",
"Slug": "Sluga",
"Accept characters:": "Glac le carachtair:",
"startOrEndWithOnly": "Tosaigh nó críoch le {0} amháin",
"statusPageSpecialSlugDesc": "Sluga speisialta {0}: taispeánfar an leathanach seo nuair nach gcuirtear aon sluga ar fáil",
"Next": "Ar aghaidh",
"No Proxy": "Gan Seachfhreastalaí",
"Authentication": "Fíordheimhniú",
"HTTP Basic Auth": "Fíordheimhniú Bunúsach HTTP",
"New Status Page": "Leathanach Stádais Nua",
"Page Not Found": "Ní bhfuarthas an leathanach",
"Reverse Proxy": "Seachfhreastalaí Droim ar Ais",
"Backup": "Cúltaca",
"About": "Faoi",
"wayToGetCloudflaredURL": "(Íoslódáil cloudflared ó {0})",
"cloudflareWebsite": "Láithreán gréasáin Cloudflare",
"HTTP Headers": "Ceanntásca HTTP",
"Trust Proxy": "Iontaobhas Seachfhreastalaí",
"Other Software": "Bogearraí Eile",
"For example: nginx, Apache and Traefik.": "Mar shampla: nginx, Apache agus Traefik.",
"Please read": "Léigh le do thoil",
"Subject:": "Ábhar:",
"Valid To:": "Bailí do:",
"Days Remaining:": "Laethanta fágtha:",
"Issuer:": "Eisitheoir:",
"Fingerprint:": "Fingerprint:",
"No status pages": "Gan leathanaigh stádais",
"Domain Name Expiry Notification": "Fógra Éaga Ainm Fearainn",
"Add a new expiry notification day": "Cuir lá fógra éaga nua leis",
"Remove the expiry notification": "Bain an lá fógra éaga",
"Proxy": "Seachfhreastalaí",
"Date Created": "Dáta Cruthaithe",
"Footer Text": "Téacs Buntásc",
"Show Powered By": "Taispeáin Cumhachtaithe ag",
"Domain Names": "Ainmneacha Fearainn",
"signedInDisp": "Sínithe isteach mar {0}",
"signedInDispDisabled": "Auth Díchumasaithe.",
"RadiusSecret": "Rún Radius",
"RadiusCalledStationId": "Stáisiún Id a thugtar air",
"RadiusCallingStationId": "Ag glaoch ar Aitheantas an Stáisiúin",
"RadiusCallingStationIdDescription": "Aitheantóir an ghléis ghlaoigh",
"Certificate Expiry Notification": "Fógra Éaga Teastais",
"API Username": "Ainm Úsáideora API",
"API Key": "Eochair API",
"Show update if available": "Taispeáin nuashonrú má tá sé ar fáil",
"Using a Reverse Proxy?": "Ag Úsáid Inléasaithe Dearcadh?",
"Check how to config it for WebSocket": "Seiceáil conas é a chumrú le haghaidh WebSocket",
"Steam Game Server": "Freastalaí Cluiche Steam",
"Most likely causes:": "Na cúiseanna is dócha:",
"There might be a typing error in the address.": "Seans go bhfuil earráid chlóscríobh sa seoladh.",
"What you can try:": "Cad is féidir leat triail a bhaint as:",
"Retype the address.": "Athchlóscríobh an seoladh.",
"Go back to the previous page.": "Téigh ar ais go dtí an leathanach roimhe seo.",
"Coming Soon": "Ag teacht go luath",
"Connection String": "Teaghrán Ceangail",
"Query": "Ceist",
"certificationExpiryDescription": "Spreagann Monatóirí HTTPS fógra nuair a théann teastas TLS in éag i:",
"Setup Docker Host": "Socrú Óstach Docker",
"Connection Type": "Cineál Ceangail",
"Docker Daemon": "Deamhan Docker",
"DockerHostRequired": "Socraigh an tÓstríomhaire Docker don mhonatóir seo.",
"deleteDockerHostMsg": "An bhfuil tú cinnte gur mian leat an t-óstach docker seo a scriosadh do gach monatóir?",
"socket": "Soicéad",
"tcp": "TCP / HTTP",
"Container Name / ID": "Ainm Coimeádán / ID",
"Docker Host": "Óstach Docker",
"Domain": "Fearann",
"Workstation": "Stáisiún Oibre",
"Packet Size": "Méid an Phaicéid",
"Bot Token": "Tócan Bot",
"wayToGetTelegramToken": "Is féidir leat tócan a fháil ó {0}.",
"Chat ID": "Aitheantas Comhrá",
"telegramSendSilently": "Seol Go Ciúin",
"telegramSendSilentlyDescription": "Seolann an teachtaireacht go ciúin. Gheobhaidh úsáideoirí fógra gan aon fhuaim.",
"telegramProtectContent": "Cosain Cur ar Aghaidh/Sábháil",
"telegramProtectContentDescription": "Má tá sé cumasaithe, déanfar na teachtaireachtaí bot in Telegram a chosaint ó chur ar aghaidh agus a shábháil.",
"supportTelegramChatID": "Tacaigh le hAitheantas Comhrá Díreach / Grúpa / Cainéal",
"YOUR BOT TOKEN HERE": "DO CHOMHARTHA BOT ANSEO",
"chatIDNotFound": "Ní aimsítear ID Comhrá; seol teachtaireacht chuig an bot seo ar dtús",
"disableCloudflaredNoAuthMsg": "Tá tú i mód Gan Údar, níl pasfhocal ag teastáil.",
"wayToGetLineNotifyToken": "Is féidir leat comhartha rochtana a fháil ó {0}",
"pushViewCode": "Conas úsáid a bhaint as monatóir Brúigh? (Amharc ar an gCod)",
"Not available, please setup.": "Níl sé ar fáil, socraigh le do thoil.",
"styleElapsedTimeShowWithLine": "Taispeáin (Le Líne)",
"Update Password": "Nuashonraigh Pasfhocal",
"Discourage search engines from indexing site": "Déan innill chuardaigh a dhíspreagadh ón suíomh innéacsaithe",
"disableauth.message2": "Tá sé deartha do chásanna {intendThirdPartyAuth} os comhair Uptime Kuma cosúil le Cloudflare Access, Authelia, nó meicníochtaí fíordheimhnithe eile.",
"Clear Data": "Glan Sonraí",
"Schedule maintenance": "Cothabháil sceideal",
"Select status pages...": "Roghnaigh leathanaigh stádais…",
"Keep both": "Coinnigh an dá rud",
"Two Factor Authentication": "Fíordheimhniú Dhá Fhachtóir",
"Tag with this name already exist.": "Tá clib leis an ainm seo ann cheana féin.",
"Purple": "Corcra",
"Pink": "Bándearg",
"Entry Page": "Leathanach Iontráil",
"All Systems Operational": "Gach Córas Oibriúcháin",
"Partially Degraded Service": "Seirbhís Díghrádaithe i bPáirt",
"defaultNotificationName": "Mo {notification} Fhógra ({number})",
"webhookFormDataDesc": "Tá {multipart} go maith do PHP. Beidh gá an JSON a pharsáil le {decodeFunction}",
"liquidIntroduction": "Baintear an teimpléad amach tríd an teanga Templating Leachtach. Féach ar an {0} le haghaidh treoracha úsáide. Seo iad na hathróga atá ar fáil:",
"webhookAdditionalHeadersDesc": "Socraítear ceanntásca breise a sheoltar leis an gcuaille gréasáin. Ba cheart gach ceanntásc a shainiú mar eochair/luach JSON.",
"HeadersInvalidFormat": "Níl na ceanntásca iarratais bailí JSON: ",
"steamApiKeyDescription": "Chun monatóireacht a dhéanamh ar Fhreastalaí Cluiche Gaile is gá duit eochair Steam Web-API. Is féidir leat deochair API a chlárú anseo: ",
"Shrink Database": "Laghdaigh Bunachar Sonraí",
"No monitors available.": "Níl monatóirí ar fáil.",
"shrinkDatabaseDescription": "Truicear bunachar sonraí Folamh do SQLite. Má chruthaítear do bhunachar sonraí tar éis 1.10.0, tá AUTO_VACUUM cumasaithe cheana féin agus níl an gníomh seo de dhíth.",
"deleteStatusPageMsg": "An bhfuil tú cinnte gur mhaith leat an leathanach stádais seo a scriosadh?",
"deleteProxyMsg": "An bhfuil tú cinnte gur mhaith leat an seachfhreastalaí seo a scriosadh do gach monatóir?",
"enableProxyDescription": "Ní bheidh éifeacht ag an seachfhreastalaí seo ar iarratais ar mhonatóir go dtí go ngníomhófar é. Is féidir leat an seachfhreastalaí a dhíchumasú go sealadach ó gach monatóir de réir stádas gníomhachtaithe.",
"No consecutive dashes": "Uimh dashes as a chéile",
"The slug is already taken. Please choose another slug.": "Tá an sluga glactha cheana féin. Roghnaigh sluga eile le do thoil.",
"Message:": "Teachtaireacht:",
"Don't know how to get the token? Please read the guide:": "Níl a fhios agat conas an tócan a fháil? Léigh an treoir le do thoil:",
"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.": "Seans go gcaillfear an nasc reatha más rud é go bhfuil tú ag nascadh trí Thollán Cloudflare faoi láthair. An bhfuil tú cinnte gur mhaith leat é a stopadh? Clóscríobh do phasfhocal reatha chun é a dhearbhú.",
"RadiusSecretDescription": "Rún Comhroinnte idir an cliant agus an freastalaí",
"RadiusCalledStationIdDescription": "Aitheantóir na feiste ar a dtugtar",
"Also check beta release": "Seiceáil freisin scaoileadh béite",
"The resource is no longer available.": "Níl an acmhainn ar fáil a thuilleadh.",
"settingsCertificateExpiry": "Éaga Teastas TLS",
"noDockerHostMsg": "Níl sé ar fáil. Socraigh Óstach Docker ar dtús.",
"tailscalePingWarning": "D'fhonn an monatóir Tailscale Ping a úsáid, ní mór duit Uptime Kuma gan Docker a shuiteáil agus cliant Tailscale a shuiteáil ar do fhreastalaí freisin.",
"Docker Container": "Coimeádán Docker",
"Docker Hosts": "Óstáin Docker",
"telegramMessageThreadID": "(Roghnach) ID Snáithe Teachtaireacht",
"telegramMessageThreadIDDescription": "Roghnach Aitheantóir uathúil don snáithe sprice teachtaireachta (ábhar) an fhóraim; d'ollghrúpaí fóraim amháin",
"wayToGetTelegramChatID": "Is féidir leat d'aitheantas comhrá a fháil trí theachtaireacht a sheoladh chuig an bot agus dul chuig an URL seo chun an chat_id a fheiceáil:",
"trustProxyDescription": "Cuir muinín i gceanntásca 'X-Ar Aghaidh-*'. Más mian leat an IP cleint ceart a fháil agus má tá do Uptime Kuma taobh thiar de sheachfhreastalaí cosúil le Nginx nó Apache, ba cheart duit é seo a chumasú.",
"Examples": "Samplaí",
"Home Assistant URL": "URL an Home Assistant",
"Long-Lived Access Token": "Tócan Rochtana Fadsaoil",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Is féidir Comhartha Rochtana Fad-Saoil a chruthú trí chliceáil ar ainm do phróifíle (bun ar chlé) agus ag scroill go dtí an bun, ansin cliceáil ar 'Cruthaigh Tócan'. ",
"Notification Service": "Seirbhís Fógra",
"default: notify all devices": "réamhshocraithe: cuir gach feiste ar an eolas",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Is féidir liosta de Sheirbhísí Fógra a fháil i Home Assistant faoi \"Uirlisí Forbróra > Seirbhísí\" cuardach \"fógra\" chun ainm do ghléis/teileafóin a aimsiú.",
"Automations can optionally be triggered in Home Assistant:": "Is féidir uathoibriú a chur i ngníomh go roghnach in Home Assistant:",
"Trigger type:": "Cineál Tionscadal Truicear:",
"Event type:": "Cineál imeachta:",
"Event data:": "Sonraí imeachta:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Ansin roghnaigh gníomh, mar shampla athraigh an radharc go dtí an áit a bhfuil solas RGB dearg.",
"Frontend Version": "Leagan Frontend",
"Frontend Version do not match backend version!": "Ní hionann Leagan Frontend leis an leagan inneall!",
"backupOutdatedWarning": "Gan úsáid: Mar gur cuireadh go leor gnéithe nua leis agus mar go bhfuil an gné chúltaca seo neamhcheadaithe go leor, ní féidir leis cúltaca iomlán a ghiniúint ná a thabhairt ar ais.",
"backupRecommend": "Le do thoil cúltaca an toirt nó an fillteán sonraí (./data/) go díreach ina ionad.",
"Optional": "Roghnach",
"or": "nó",
"sameAsServerTimezone": "Mar an gcéanna le Crios Ama an Fhreastalaí",
"endDateTime": "Dáta/Am Deiridh",
"cronExpression": "Slonn Cron",
"cronSchedule": "Sceideal: ",
"invalidCronExpression": "Slonn Cron Neamhbhailí: {0}",
"recurringInterval": "Eatramh",
"Recurring": "Athfhillteach",
"warningTimezone": "Tá sé ag baint úsáide as crios ama an fhreastalaí",
"weekdayShortMon": "Luan",
"weekdayShortTue": "Már",
"weekdayShortWed": "Céa",
"weekdayShortThu": "Déa",
"weekdayShortFri": "Aoí",
"weekdayShortSat": "Sát",
"weekdayShortSun": "Dom",
"No Maintenance": "Gan Cothabháil",
"lastDay1": "Lá deiridh den Mhí",
"dayOfWeek": "Lá den Seachtaine",
"lastDay2": "2ú Lá Deireanach den Mhí",
"lastDay3": "3ú Lá Deireanach den Mhí",
"lastDay": "Lá Deiridh",
"pauseMaintenanceMsg": "An bhfuil tú cinnte gur mhaith leat sos?",
"maintenanceStatus-under-maintenance": "Faoi Chothabháil",
"maintenanceStatus-inactive": "Neamhghníomhach",
"maintenanceStatus-ended": "Dar Críoch",
"maintenanceStatus-unknown": "Anaithnid",
"Display Timezone": "Crios Ama Taispeána",
"Server Timezone": "Crios Ama Freastalaí",
"statusPageMaintenanceEndDate": "Deireadh",
"IconUrl": "URL deilbhín",
"Enable": "Cumasaigh",
"Disable": "Díchumasaigh",
"enableNSCD": "Cumasaigh NSCD (Deamhan Taisce Ainm na Seirbhíse) chun gach iarratas DNS a thaisceadh",
"chromeExecutable": "Chrome/Chromium Inrite",
"chromeExecutableAutoDetect": "Braith Uathoibríoch",
"dnsCacheDescription": "B'fhéidir nach bhfuil sé ag obair i roinnt timpeallachtaí IPv6, é a dhíchumasú má thagann tú ar aon fhadhbanna.",
"Single Maintenance Window": "Fuinneog Chothabhála Aonair",
"Maintenance Time Window of a Day": "Fuinneog Am Cothabhála Lá",
"Effective Date Range": "Raon Dáta Éifeachtach (Roghnach)",
"Schedule Maintenance": "Cothabháil Sceideal",
"Edit Maintenance": "Cuir Cothabháil in Eagar",
"DateTime Range": "Raon DátaTime",
"install": "Suiteáil",
"installing": "Ag Suiteáil",
"uninstall": "Dhíshuiteáil",
"uninstalling": "Ag Dhíshuiteáil",
"confirmUninstallPlugin": "An bhfuil tú cinnte gur mhaith leat an breiseán seo a dhíshuiteáil?",
"plugin": "Breiseán | Breiseáni",
"notificationRegional": "Réigiúnach",
"Clone": "Clón",
"cloneOf": "Clón de {0}",
"secureOptionNone": "Ceann ar bith / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Déan neamhaird de Earráid TLS",
"From Email": "Ó Ríomhphost",
"emailCustomSubject": "Ábhar an Chustaim",
"leave blank for default subject": "fág bán don ábhar réamhshocraithe",
"emailCustomBody": "Comhlacht Saincheaptha",
"leave blank for default body": "fág bán don chomhlacht réamhshocraithe",
"emailTemplateServiceName": "Ainm Seirbhíse",
"emailTemplateHostnameOrURL": "Óstainm nó URL",
"emailTemplateStatus": "Stádas",
"emailTemplateMsg": "teachtaireacht an fhógra",
"emailTemplateLimitedToUpDownNotification": "ar fáil ach amháin le haghaidh buillí croí SUAS/SÍOS, ar shlí eile ar neamhní",
"emailTemplateMonitorJSON": "réad a mhíníonn an monatóir",
"emailTemplateHeartbeatJSON": "réad a mhíníonn bhuille an chroí",
"To Email": "Chun Ríomhphost",
"smtpCC": "CC",
"smtpBCC": "BCC",
"Discord Webhook URL": "Discord Crúca Gréasáin URL",
"Bot Display Name": "Ainm Taispeána Bot",
"Prefix Custom Message": "Réimír Teachtaireacht Chustaim",
"Hello @everyone is...": "Dia duit {'@'}tá gach duine…",
"wayToGetTeamsURL": "Is féidir leat foghlaim conas URL crúca gréasáin {0} a chruthú.",
"wayToGetZohoCliqURL": "Is féidir leat foghlaim conas URL crúca gréasáin {0} a chruthú.",
"wayToCheckSignalURL": "Is féidir leat an URL seo a sheiceáil chun féachaint ar conas ceann a shocrú:",
"Number": "Uimhir",
"Recipients": "Faighteoirí",
"Access Token": "Tócan Rochtana",
"Channel access token": "Tócan rochtana cainéal",
"Line Developers Console": "Consól Forbróirí Líne",
"Basic Settings": "Socruithe Bunúsacha",
"User ID": "ID Úsáideora",
"Messaging API": "API Teachtaireachtaí",
"Icon URL": "URL Deilbhín",
"aboutIconURL": "Is féidir leat nasc chuig pictiúr a sholáthar i \"URL Deilbhín\" chun an pictiúr próifíle réamhshocraithe a shárú. Ní úsáidfear é má tá Icon Emoji socraithe.",
"confirmDeleteTagMsg": "An bhfuil tú cinnte gur mhaith leat an chlib seo a scriosadh? Ní scriosfar monatóirí a bhaineann leis an gclib seo.",
"enableGRPCTls": "Ceadaigh iarratas gRPC a sheoladh le ceangal TLS",
"acceptedStatusCodesDescription": "Roghnaigh cóid stádais a mheastar mar fhreagra rathúil.",
"deleteMonitorMsg": "An bhfuil tú cinnte gur mhaith leat an monatóir seo a scriosadh?",
"deleteMaintenanceMsg": "An bhfuil tú cinnte gur mhaith leat an cothabháil seo a scriosadh?",
"dnsPortDescription": "Port freastalaí DNS. Réamhshocrú go 53. Is féidir leat an port a athrú am ar bith.",
"rrtypeDescription": "Roghnaigh an cineál RR is mian leat chun monatóireacht a dhéanamh",
"pauseMonitorMsg": "An bhfuil tú cinnte gur mhaith leat sos?",
"clearEventsMsg": "An bhfuil tú cinnte gur mhaith leat gach imeacht don mhonatóir seo a scriosadh?",
"clearHeartbeatsMsg": "An bhfuil tú cinnte gur mhaith leat gach buille croí don mhonatóir seo a scriosadh?",
"confirmClearStatisticsMsg": "An bhfuil tú cinnte gur mian leat GACH staitisticí a scriosadh?",
"confirmImportMsg": "An bhfuil tú cinnte gur mhaith leat an cúltaca a iompórtáil? Cinntigh gur roghnaigh tú an rogha iompórtála ceart.",
"twoFAVerifyLabel": "Cuir isteach do tócan chun 2FA a fhíorú:",
"tokenValidSettingsMsg": "Tá tócan bailí! Is féidir leat na socruithe 2FA a shábháil anois.",
"confirmEnableTwoFAMsg": "An bhfuil tú cinnte gur mhaith leat 2FA a chumasú?",
"recurringIntervalMessage": "Rith uair amháin gach lá | Rith uair amháin gach {0} lá",
"affectedMonitorsDescription": "Roghnaigh monatóirí a bhfuil tionchar ag cothabháil reatha orthu",
"atLeastOneMonitor": "Roghnaigh monatóir difear amháin ar a laghad",
"passwordNotMatchMsg": "Ní hionann an pasfhocal athfhillteach.",
"notificationDescription": "Ní mór fógraí a shannadh do mhonatóir chun feidhmiú.",
"invertKeywordDescription": "Cuardaigh an eochairfhocal a bheith as láthair seachas i láthair.",
"backupDescription3": "Tá sonraí íogaire amhail comharthaí fógra san áireamh sa chomhad easpórtála; stóráil an t-easpórtáil go slán.",
"endpoint": "críochphointe",
"octopushLogin": "\"Logáil isteach\" ó HTTP API dintiúir sa phainéal rialú",
"promosmsLogin": "Ainm Logála Isteach API",
"promosmsPassword": "Pasfhocal API",
"pushoversounds pushover": "Brúite (réamhshocraithe)",
"pushoversounds bike": "Rothar",
"pushoversounds bugle": "buabhall",
"pushoversounds cashregister": "Clár Airgid",
"pushoversounds classical": "Clasaiceach",
"pushoversounds cosmic": "Cósmach",
"pushoversounds falling": "Titim",
"pushoversounds gamelan": "Ceol Traidisiúnta Indinéise",
"pushoversounds incoming": "Teachtaireacht Teacht",
"pushoversounds magic": "Draíocht",
"pushoversounds mechanical": "Meicniúil",
"pushoversounds pianobar": "Báir Pianó",
"pushoversounds siren": "Síorán",
"pushoversounds spacealarm": "Aláram Spáis",
"pushoversounds tugboat": "Bád Tuga",
"pushoversounds alien": "Aláram Eachtráin (fad)",
"pushoversounds climb": "Dreapadh (fad)",
"pushoversounds persistent": "Dianseasmhach (fad)",
"pushoversounds updown": "Suas Síos (fad)",
"pushoversounds vibrate": "Vibráil Amháin",
"pushoversounds none": "Aon Cheann (ciúin)",
"pushyAPIKey": "Eochair Rúnda API",
"pushyToken": "Tócan gléas",
"apprise": "Apprise (Tacaíocht le 50+ seirbhís fógra)",
"wayToGetKookBotToken": "Cruthaigh feidhmchlár agus faigh do tócan bot ag {0}",
"Guild ID": "ID Guild",
"User Key": "Eochair Úsáideora",
"Device": "Gléas",
"Message Title": "Teideal na Teachtaireachta",
"More info on:": "Tuilleadh eolais ar: {0}",
"pushoverDesc2": "Más mian leat fógraí a sheoladh chuig gléasanna éagsúla, líon amach Gléas réimse.",
"pushoverMessageTtl": "Teachtaireacht TTL (Soicindí)",
"SMS Type": "Cineál SMS",
"octopushTypePremium": "Préimh (Gasta - molta le haghaidh foláirimh)",
"octopushTypeLowCost": "Costas Íseal (Mall - uaireanta bac ag oibreoir)",
"checkPrice": "Seiceáil {0} praghsanna:",
"apiCredentials": "Dintiúir API",
"Check octopush prices": "Seiceáil praghsanna ochtapas {0}.",
"octopushPhoneNumber": "Uimhir theileafóin (formáid intl, m.sh. : +33612345678)- ",
"octopushSMSSender": "Ainm Seoltóra SMS : 3-11 carachtar alfa-uimhriúil agus spás (a-zA-Z0-9)",
"LunaSea Device ID": "Aitheantas Gléas LunaSea",
"Apprise URL": "URL Apprise",
"Example:": "Sampla: {0}",
"Read more:": "Léigh tuilleadh: {0}",
"Strategy": "Straitéis",
"Free Mobile User Identifier": "Aitheantóir soghluaiste saor in aisce",
"Free Mobile API Key": "Eochair Soghluaiste API Saor in Aisce",
"Enable TLS": "Cumasaigh TLS",
"Proto Method": "Modh Prótacal",
"Proto Content": "Ábhar Prótacal",
"Economy": "Geilleagar",
"Lowcost": "Chostas Íseal",
"high": "ard",
"SendKey": "Seol Eochair",
"SMSManager API Docs": "Docs API SMSManager ",
"Gateway Type": "Cineál Geata",
"Base URL": "Bun URL",
"goAlertIntegrationKeyInfo": "Faigh eochair chomhtháthaithe cineálach API don tseirbhís san fhormáid seo \"aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" luach paraiméadar comharthaíochta an URL cóipeáilte de ghnáth.",
"AccessKeyId": "Aitheantas Eochair Rochtana",
"SecretAccessKey": "Rúin AccessKey",
"PhoneNumbers": "Uimhreacha Teileafóin",
"Huawei": "Huawei",
"TemplateCode": "Cód Teimpléad",
"SignName": "Ainm Comhartha",
"Bark API Version": "Leagan Bark API",
"Bark Endpoint": "Críochphointe Coirt",
"Bark Group": "Grúpa Bark",
"Bark Sound": "Fuaim Coirt",
"WebHookUrl": "URL Crúca Gréasáin",
"SecretKey": "Eochair Rúnda",
"For safety, must use secret key": "Ar mhaithe le sábháilteacht, ní mór eochair rúnda a úsáid",
"Device Token": "Tócan Gléas",
"Platform": "Ardán",
"High": "Ard",
"Retry": "Bain triail eile as",
"Topic": "Topaic",
"Setup Proxy": "Socrú Seachfhreastalaí",
"Proxy Protocol": "Prótacal Seachfhreastalaí",
"Proxy Server": "Seachfhreastalaí",
"promosmsTypeEco": "SMS ECO - chostas iseal ach mall agus ró-ualach go minic. Teoranta do fhaighteoirí Polainnis amháin.",
"promosmsTypeFull": "SMS IOMLÁN - Sraith préimhe de SMS, Is féidir leat d'Ainm Seoltóra a úsáid (Ní mór duit ainm a chlárú ar dtús). Iontaofa le haghaidh foláirimh.",
"promosmsPhoneNumber": "Uimhir theileafóin (dfhaighteoir Polannach Is féidir leat cóid limistéir a scipeáil)",
"promosmsSMSSender": "Ainm Seoltóra SMS : Ainm réamhchláraithe nó ceann de na réamhshocruithe: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"promosmsAllowLongSMS": "Ceadaigh SMS fada",
"Feishu WebHookUrl": "URL Crúca Gréasáin Feishu",
"matrixHomeserverURL": "URL an fhreastalaí baile (le http(s):// agus go roghnach port)",
"Internal Room Id": "Aitheantas Seomra Inmheánach",
"Channel Name": "Ainm Cainéal",
"Notify Channel": "Cainéal a chur ar an eolas",
"Uptime Kuma URL": "URL Uptime Kuma",
"setup a new monitor group": "grúpa monatóireachta nua a shocrú",
"openModalTo": "módúil a oscailt go {0}",
"Add a domain": "Cuir fearann leis",
"Remove domain": "Bain an fearann '{0}'",
"Icon Emoji": "Deilbhín Emoji",
"signalImportant": "TÁBHACHTACH: Ní féidir leat grúpaí agus uimhreacha i faighteoirí a mheascadh!",
"aboutWebhooks": "Tuilleadh eolais faoi Crúca Gréasáin ar: {0}",
"aboutChannelName": "Cuir isteach ainm an chainéil ar an réimse Ainm Cainéal {0} más mian leat an cainéal Crúca Gréasáin a sheachbhóthar. Mar shampla: #anotherchannel",
"smtpDkimSettings": "Socruithe DKIM",
"smtpDkimDesc": "Déan tagairt don Nodemailer DKIM {0} le haghaidh úsáide.",
"documentation": "doiciméadú",
"smtpDkimKeySelector": "Roghnóir Eochracha",
"smtpDkimPrivateKey": "Eochair Phríobháideach",
"smtpDkimHashAlgo": "Algartam Hash (Roghnach)",
"smtpDkimskipFields": "Eochracha Ceanntásca gan síniú (Roghnach)",
"startDateTime": "Dáta/Am Tosaithe",
"strategyManual": "Gníomhach/Neamhghníomhach de Láimh",
"dayOfMonth": "Lá den Mhí",
"lastDay4": "4ú Lá Deireanach den Mhí",
"maintenanceStatus-scheduled": "Sceidealta",
"Enable DNS Cache": "(Ligthe i léig) Cumasaigh Taisce DNS le haghaidh monatóirí HTTP(s)",
"chromeExecutableDescription": "I gcás úsáideoirí Docker, mura bhfuil Chromium suiteáilte fós, féadfaidh sé cúpla nóiméad a ghlacadh chun toradh na tástála a shuiteáil agus a thaispeáint. Tógann sé 1GB de spás diosca.",
"Date and Time": "Dáta agus Am",
"loadingError": "Ní féidir na sonraí a fháil, bain triail eile as ar ball.",
"Clone Monitor": "Monatóir Clón",
"smtp": "Ríomhphost (SMTP)",
"emailCustomisableContent": "Ábhar inoiriúnaithe",
"smtpLiquidIntroduction": "Tá an dá réimse seo a leanas inphléite trí Theanga Teimpléadúcháin Liquid. Féach ar an {0} le haghaidh treoracha úsáide. Seo iad na hathróga atá ar fáil:",
"wayToGetDiscordURL": "Is féidir leat é seo a fháil ach dul go Socruithe Freastalaí -> Comhtháthaithe -> Féach ar Crúca Gréasáin -> Nua Crúca Gréasán",
"needSignalAPI": "Ní mór duit cliant comhartha a bheith agat le REST API.",
"lineDevConsoleTo": "Consól Forbróirí Líne - {0}",
"wayToGetLineChannelToken": "Déan rochtain ar {0} ar dtús, cruthaigh soláthraí agus cainéal (API Teachtaireachtaí), ansin is féidir leat an comhartha rochtana cainéal agus an t-aitheantas úsáideora a fháil ó na míreanna roghchláir thuasluaite.",
"aboutMattermostChannelName": "Is féidir leat an cainéal réamhshocraithe a phostálann an Crúca Gréasáin dó a shárú trí ainm an chainéil a chur isteach sa réimse \"Ainm na Cainéal\". Ní mór é seo a chumasú i socruithe Mattermost Crúca Gréasáin. Mar shampla: #other-channel",
"dataRetentionTimeError": "Ní mór don tréimhse choinneála a bheith 0 nó níos mó",
"infiniteRetention": "Socraigh go 0 le haghaidh coinneála gan teorainn.",
"grpcMethodDescription": "Tiontaítear ainm an mhodha go formáid camelCase mar sayHello, seiceáil, etc.",
"deleteNotificationMsg": "An bhfuil tú cinnte gur mhaith leat an fógra seo a scriosadh do gach monatóir?",
"resolverserverDescription": "Is é Cloudflare an freastalaí réamhshocraithe. Is féidir leat an freastalaí réititheora a athrú am ar bith.",
"enableDefaultNotificationDescription": "Cumasófar an fógra seo de réir réamhshocraithe le haghaidh monatóirí nua. Is féidir leat an fógra a dhíchumasú fós ar leithligh do gach monatóir.",
"importHandleDescription": "Roghnaigh 'Scipeáil atá ann cheana féin' más mian leat scipeáil a dhéanamh ar gach monatóir nó fógra leis an ainm céanna. Scriosfaidh Forscríobh gach monatóir agus fógra atá ann cheana.",
"confirmDisableTwoFAMsg": "An bhfuil tú cinnte gur mhaith leat 2FA a dhíchumasú?",
"affectedStatusPages": "Taispeáin an teachtaireacht cothabhála seo ar leathanaigh stádais roghnaithe",
"keywordDescription": "Cuardaigh eochairfhocal i ngnáthfhreagra HTML nó JSON. Tá an cuardach cás-íogair.",
"backupDescription": "Is féidir leat gach monatóir agus fógra a chúltaca isteach i gcomhad JSON.",
"backupDescription2": "Nóta: níl sonraí staire agus imeachta san áireamh.",
"octopushAPIKey": "\"Eochair API\" ó dhintiúir API HTTP sa phainéal rialaithe",
"pushoversounds intermission": "Idirsheasúr",
"pushoversounds echo": "Pushover Macalla (fad)",
"GoogleChat": "Google Chat (Google Workspace amháin)",
"wayToGetKookGuildID": "Cuir 'Mód Forbróra' ar siúl i suíomh Kook, agus cliceáil ar dheis ar an guild chun a ID a fháil",
"Notification Sound": "Fuaim Fógra",
"pushoverDesc1": "Tá teorainn ama réamhshocraithe 30 soicind ag tosaíocht éigeandála (2) idir na hathiarratais agus rachaidh sé in éag tar éis 1 uair an chloig.",
"octopushLegacyHint": "An úsáideann tú an leagan oidhreachta de Octopush (2011-2020) nó an leagan nua?",
"Status:": "Stádas: {0}",
"Proto Service Name": "Ainm Seirbhíse Proto",
"You can divide numbers with": "Is féidir leat uimhreacha a roinnt le",
"goAlertInfo": "Is feidhmchlár foinse oscailte é GoAlert le haghaidh sceidealaithe ar ghlao-dhualgas, arduithe uathoibrithe agus fógraí (amhail SMS nó glaonna gutha). Téigh i dteagmháil go huathoibríoch leis an duine ceart, ar an mbealach ceart, agus ag an am ceart! {0}",
"Sms template must contain parameters: ": "Ní mór paraiméadair a bheith sa teimpléad sms: ",
"WeCom Bot Key": "Eochair do WeCom Bot",
"Proxy server has authentication": "Tá fíordheimhniú ag an seachfhreastalaí",
"promosmsTypeFlash": "SMS FLASH - Taispeánfar an teachtaireacht go huathoibríoch ar an ngléas faighteora. Teoranta do fhaighteoirí Polainnis amháin.",
"promosmsTypeSpeed": "SMS LUAS - An tosaíocht is airde sa chóras. An-tapa agus iontaofa ach costasach (thart ar dhá uair de phraghas IOMLÁN SMS).",
"matrixDesc1": "Is féidir leat an t-aitheantas seomra inmheánach a fháil ach breathnú ar an rannán ardleibhéil de shocruithe an tseomra i do chliant Maitrís. Ba cheart go mbeadh cuma air !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Moltar go mór duit úsáideoir nua a chruthú agus ná húsáid do chomhartha rochtana úsáideora Matrix féin mar go gceadóidh sé rochtain iomlán ar do chuntas agus ar na seomraí go léir a ndeachaigh tú isteach ann. Ina áit sin, cruthaigh úsáideoir nua agus gan ach tabhair cuireadh dó go dtí an seomra inar mian leat an fógra a fháil. Is féidir leat an comhartha rochtana a fháil trí {0} a rith",
"aboutNotifyChannel": "Spreagfaidh an cainéal fógra deisce nó soghluaiste do gach ball den chineál, cibé infhaighteacht atá socraithe acu go gníomhach nó as oifig.",
"aboutKumaURL": "Má fhágann tú an réimse URL Uptime Kuma bán, beidh sé réamhshocraithe chuig an leathanach Project GitHub.",
"smtpDkimDomain": "Ainm Fearainn",
"smtpDkimheaderFieldNames": "Eochracha Ceanntásc le síniú (Roghnach)",
"wayToGetPagerDutyKey": "Is féidir leat é seo a fháil ach dul chuig Seirbhís -> Eolaire Seirbhíse -> (Roghnaigh seirbhís) -> Comhtháthaithe -> Cuir comhtháthú leis. Anseo is féidir leat cuardach a dhéanamh ar \"Imeachtaí API V2\". Tuilleadh eolais {0}",
"Integration Key": "Eochair Chomhtháthaithe",
"Integration URL": "URL Comhtháthaithe",
"Auto resolve or acknowledged": "Réiteach uathoibríoch nó admháil",
"do nothing": "ná déan faic",
"auto acknowledged": "auto admháil",
"auto resolve": "réiteach uathoibríoch",
"alertaApiEndpoint": "Críochphointe API",
"alertaEnvironment": "Timpeallacht",
"alertaApiKey": "Eochair API",
"alertaAlertState": "Stát Foláirimh",
"alertaRecoverState": "Aisghabháil Stáit",
"serwersmsAPIUser": "Ainm Úsáideora API (lena n-áirítear réimír webapi_)",
"serwersmsAPIPassword": "Pasfhocal API",
"serwersmsPhoneNumber": "Uimhir teileafón",
"smseagleTo": "Uimhir(eacha) gutháin",
"smseagleGroup": "Ainm(neacha) an ghrúpa ghutháin",
"smseagleContact": "Ainm(neacha) teagmhála an leabhair ghutháin",
"smseagleRecipientType": "Cineál faighteora",
"smseagleRecipient": "Faighteoir(í) (ní mór an iliomad a bheith scartha le camóg)",
"smseagleToken": "Comhartha rochtana API",
"smseagleUrl": "URL do ghléis SMSEagle",
"smseaglePriority": "Tosaíocht na teachtaireachta (0-9, réamhshocraithe = 0)",
"Recipient Number": "Uimhir Faighteoir",
"From Name/Number": "Ó Ainm/Uimhir",
"Octopush API Version": "Leagan API Octopush",
"Legacy Octopush-DM": "Oidhreacht Octopush-DM",
"ntfy Topic": "ntfy Topaic",
"Server URL should not contain the nfty topic": "Níor cheart go mbeadh an topaic nfty i URL an fhreastalaí",
"onebotHttpAddress": "Seoladh HTTP OneBot",
"onebotMessageType": "Cineál Teachtaireachta OneBot",
"onebotPrivateMessage": "Príobháideach",
"onebotSafetyTips": "Ar mhaithe le sábháilteacht, ní mór comhartha rochtana a shocrú",
"PushDeer Server": "Freastalaí PushDeer",
"PushDeer Key": "Eochair PushDeer",
"wayToGetClickSendSMSToken": "Is féidir leat Ainm Úsáideora API agus Eochair API a fháil ó {0} .",
"Custom Monitor Type": "Cineál Monatóir an Chustaim",
"Google Analytics ID": "Aitheantas Google Analytics",
"Edit Tag": "Cuir Clib in Eagar",
"Server Address": "Seoladh an fhreastalaí",
"Learn More": "Foghlaim níos mó",
"API Keys": "Eochracha API",
"Expiry": "Éaga",
"Expiry date": "Dáta éaga",
"Don't expire": "Ná éag",
"Continue": "Leanúint ar aghaidh",
"Add Another": "Cuir Eile leis",
"Key Added": "Cuireadh eochair leis",
"Add API Key": "Cuir Eochair API leis",
"No API Keys": "Gan Eochracha API",
"apiKey-active": "Gníomhach",
"apiKey-expired": "Imithe in Éag",
"apiKey-inactive": "Neamhghníomhach",
"Expires": "In éag",
"disableAPIKeyMsg": "An bhfuil tú cinnte gur mhaith leat an eochair API seo a dhíchumasú?",
"Generate": "Gin",
"pagertreeIntegrationUrl": "URL Comhtháthaithe",
"pagertreeUrgency": "Práinne",
"pagertreeSilent": "Ciúin",
"pagertreeLow": "Íseal",
"pagertreeMedium": "Mheán",
"pagertreeHigh": "Ard",
"pagertreeCritical": "Criticiúil",
"pagertreeResolve": "Uathréiteach",
"pagertreeDoNothing": "Ná Déan Faic",
"lunaseaDeviceID": "Aitheantas an Ghléis",
"lunaseaUserID": "ID Úsáideora",
"ntfyAuthenticationMethod": "Modh Fíordheimhnithe",
"ntfyPriorityHelptextAllExceptDown": "Seoltar gach imeacht leis an tosaíocht seo, seachas {0}-imeachtaí, a bhfuil tosaíocht de {1} acu",
"ntfyUsernameAndPassword": "Ainm Úsáideora agus Pasfhocal",
"twilioAccountSID": "SID cuntais",
"twilioApiKey": "Eochair Api (roghnach)",
"twilioAuthToken": "Auth Tócan / Eochair API Rúnda",
"twilioFromNumber": "Ó Uimhir",
"Show Clickable Link": "Taispeáin Nasc Inchliceáilte",
"Open Badge Generator": "Oscail Gineadóir Suaitheantais",
"Badge Generator": "Gineadóir Suaitheantais {0}",
"Badge Type": "Cineál Suaitheantais",
"Badge Duration (in hours)": "Fad Suaitheantais (in uaireanta)",
"Badge Label": "Lipéad Suaitheantais",
"Badge Prefix": "Réimír Luach Suaitheanta",
"Badge Suffix": "Iarmhír Luach Suaitheanta",
"Badge Label Color": "Dath Lipéad Suaitheantais",
"Badge Color": "Dath Suaitheantas",
"Badge Label Prefix": "Réimír Lipéad Suaitheantais",
"Badge Preview": "Réamhamharc Suaitheantais",
"Badge Label Suffix": "Iarmhír Lipéad Suaitheantais",
"Badge Down Color": "Suaitheantas Síos Dath",
"Badge Pending Color": "Suaitheantas ar Feitheamh Dath",
"Badge Maintenance Color": "Dath Cothabhála Suaitheantais",
"Badge Warn Color": "Dath Rabhadh Suaitheantas",
"Badge Warn Days": "Laethanta Rabhaidh Suaitheanta",
"Badge Style": "Stíl Suaitheantas",
"Badge value (For Testing only.)": "Luach suaitheantais (Le haghaidh Tástála amháin.)",
"Badge URL": "URL Suaitheantais",
"Group": "Grúpa",
"Monitor Group": "Grúpa Monatóireachta",
"toastErrorTimeout": "Teorainn Ama le haghaidh Fógraí Earráide",
"toastSuccessTimeout": "Teorainn Ama le haghaidh Fógraí Ratha",
"Kafka Brokers": "Bróicéirí Kafka",
"Enter the list of brokers": "Cuir isteach an liosta bróicéirí",
"Press Enter to add broker": "Brúigh Enter chun bróicéir a chur leis",
"Kafka Topic Name": "Ainm an Ábhair Kafka",
"Kafka Producer Message": "Teachtaireacht Léiritheoir Kafka",
"Enable Kafka SSL": "Cumasaigh Kafka SSL",
"Kafka SASL Options": "Roghanna Kafka SASL",
"Mechanism": "Meicníocht",
"Pick a SASL Mechanism...": "Roghnaigh Meicníocht SASL…",
"Authorization Identity": "Aitheantas Údaraithe",
"AccessKey Id": "Aitheantas AccessKey",
"Secret AccessKey": "Eochair Rochtana Rúnda",
"Session Token": "Comhartha Seisiúin",
"Close": "Dún",
"Request Body": "Comhlacht Iarratas",
"FlashDuty Severity": "Déine",
"nostrRelays": "Athsheachadáin Nostr",
"nostrRelaysHelp": "URL sealaíochta amháin in aghaidh an líne",
"nostrSender": "Eochair Phríobháideach an Seoltóra (nsec)",
"nostrRecipients": "Eochracha Poiblí Faighteoirí (npub)",
"nostrRecipientsHelp": "formáid npub, ceann in aghaidh an líne",
"showCertificateExpiry": "Taispeáin Éaga Teastais",
"noOrBadCertificate": "Níl/Drochteastas",
"gamedigGuessPort": "Gamedig: Port a Fháil Amach",
"Saved.": "Shábháil.",
"authUserInactiveOrDeleted": "Tá an t-úsáideoir neamhghníomhach nó scriostar é.",
"authInvalidToken": "Tócan Neamhbhailí.",
"authIncorrectCreds": "Ainm úsáideora nó pasfhocal mícheart.",
"2faAlreadyEnabled": "Tá 2FA cumasaithe cheana féin.",
"2faEnabled": "2FA Cumasaithe.",
"2faDisabled": "2FA faoi Mhíchumas.",
"successAdded": "Curtha leis go rathúil.",
"successResumed": "Tá an próiseas ar ais ar bun go rathúil.",
"successPaused": "Curtha ar sos go rathúil.",
"successDeleted": "Scriosta go rathúil.",
"successEdited": "Tá an t-eagarthóireacht athruithe go rathúil.",
"successAuthChangePassword": "Tá an pasfhocal nuashonraithe go rathúil.",
"successDisabled": "Díchumasaithe go rathúil.",
"successEnabled": "Cumasaithe go rathúil.",
"tagNotFound": "Clib gan aimsiú.",
"foundChromiumVersion": "Aimsíodh Cróimiam/Chrome. Leagan: {0}",
"Remote Browsers": "Brabhsálaithe cianda",
"Remote Browser": "Brabhsálaí cianda",
"Add a Remote Browser": "Cuir Brabhsálaí Cianda leis",
"Remote Browser not found!": "Brabhsálaí cianda gan aimsiú!",
"remoteBrowsersDescription": "Is rogha eile iad Brabhsálaithe Cian chun Cróimiam a rith go háitiúil. Socraigh le seirbhís cosúil le browserless.io nó ceangail le do cheann féin",
"self-hosted container": "coimeádán féin-óstach",
"remoteBrowserToggle": "De réir réamhshocraithe ritheann Cróimiam taobh istigh den choimeádán Uptime Kuma. Is féidir leat cianbhrabhsálaí a úsáid tríd an lasc seo a scoránú.",
"useRemoteBrowser": "Úsáid Brabhsálaí Cianda",
"deleteRemoteBrowserMessage": "An bhfuil tú cinnte gur mhaith leat an Cianbhrabhsálaí seo a scriosadh do gach monatóir?",
"GrafanaOncallUrl": "URL Grafana Oncall",
"Browser Screenshot": "Scáileán Brabhsálaí",
"What is a Remote Browser?": "Cad is Brabhsálaí Cianda ann?",
"serwersmsSenderName": "Ainm Seoltóra SMS (cláraithe trí thairseach custaiméirí)",
"smseagleEncoding": "Seol mar Unicode",
"Leave blank to use a shared sender number.": "Fág bán chun uimhir seoltóra roinnte a úsáid.",
"onebotGroupMessage": "Grúpa",
"onebotUserOrGroupId": "Aitheantas Grúpa/Úsáideora",
"pushDeerServerDescription": "Fág bán chun an freastalaí oifigiúil a úsáid",
"Body Encoding": "Ionchódú Coirp",
"apiKeyAddedMsg": "Cuireadh d'eochair API leis. Déan nóta de le do thoil mar ní thaispeánfar arís é.",
"deleteAPIKeyMsg": "An bhfuil tú cinnte gur mhaith leat an eochair API seo a scriosadh?",
"wayToGetPagerTreeIntegrationURL": "Tar éis comhtháthú Uptime Kuma a chruthú i PagerTree, cóipeáil an Endpoint. Féach ar na sonraí iomlána {0}",
"lunaseaTarget": "Sprioc",
"ntfyPriorityHelptextAllEvents": "Seoltar gach imeacht leis an tosaíocht uasta",
"twilioToNumber": "A Uimhir",
"Monitor Setting": "Socrú Monatóir {0}",
"Show Clickable Link Description": "Má dhéantar é a sheiceáil is féidir le gach duine a bhfuil rochtain acu ar an leathanach stádais seo rochtain a fháil ar an monatóireacht a dhéanamh ar URL.",
"Badge Up Color": "Suaitheantas Suas Dath",
"Badge Down Days": "Laethanta Dúin Suaitheanta",
"monitorToastMessagesLabel": "Monatóireacht a dhéanamh ar fhógraí Tósta",
"monitorToastMessagesDescription": "Imíonn fógraí tósta le haghaidh monatóirí tar éis am tugtha i soicindí. Díchumasaítear am istigh le socrú go -1. Díchumasaigh Socrú go 0 fógraí tósta.",
"Enable Kafka Producer Auto Topic Creation": "Cumasaigh Cruthú Uath-Ábhair Táirgeora Kafka",
"noGroupMonitorMsg": "Níl sé ar fáil. Cruthaigh Monatóir Grúpa ar dtús.",
"wayToGetFlashDutyKey": "Is féidir leat dul go Cainéal -> (Roghnaigh Cainéal) -> Comhtháthaithe -> Cuir leathanach comhtháthú nua leis, cuir 'Uptime Kuma' leis chun seoladh brúigh a fháil, cóipeáil an Eochair Chomhtháthaithe sa seoladh. Le haghaidh tuilleadh eolais, tabhair cuairt le do thoil",
"gamedigGuessPortDescription": "Féadfaidh an calafort a úsáideann Prótacal Iarratas Freastalaí Comhla a bheith difriúil ó phort an chliaint. Bain triail as seo mura bhfuil an monatóir in ann ceangal le do fhreastalaí.",
"successBackupRestored": "Tá an cúltaca athchóirithe go rathúil.",
"Host URL": "URL Óstach",
"senderSevenIO": "Sraithnú uimhir nó ainm a sheoladh",
"receiverInfoSevenIO": "Má bhíonn an uimhir atá á fháil ann nach bhfuil i nGearmáin, caithfidh tú an cód tíre a chur leis romhainn na huimhreacha (m.sh. le haghaidh cód tíre 1 ón RA, úsáid 117612121212 in ionad 017612121212)",
"apiKeySevenIO": "Eochair API SevenIO",
"locally configured mail transfer agent": "feidhmchlár aistrúcháin phoist cumraithe go háitiúil",
"wayToGetDiscordThreadId": "Tá sé cosúil le haitheantas poist snáithe / fóraim a fháil agus aitheantas cainéil a fháil. Léigh tuilleadh faoi conas aitheantais a fháil {0}",
"wayToGetHeiiOnCallDetails": "Mínítear sa {documentation} conas an Trigger ID agus Eochracha API a fháil",
"documentationOf": "{0} Doiciméadúchán",
"gtxMessagingApiKeyHint": "Is féidir leat deochair API a aimsiú ag: Mo Chuntais Ródúcháin > Taispeáin Eolas Cuntais > Dintiúir API > REST API (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Ón Uimhir Theileafóin / Seoladh Bunaidh Conair Tarchuir (TPOA)",
"Command": "Ordú",
"mongodbCommandDescription": "Rith ordú MongoDB i gcoinne an bhunachair sonraí. Le haghaidh faisnéise faoi na horduithe atá ar fáil féach ar an {documentation}",
"whapiRecipient": "Uimhir Theileafóin / Aitheantas Teagmhála / ID Grúpa",
"API URL": "URL API",
"callMeBotGet": "Anseo is féidir leat críochphointe a ghiniúint le haghaidh {0}, {1} agus {2}. Coinnigh i gcuimhne go mb'fhéidir go mbeadh an ráta teoranta agat. Is cosúil gurb iad na teorainneacha ráta: {3}",
"To Phone Number": "A chuig Uimhir Theileafóin",
"Mentioning": "Ag lua",
"Don't mention people": "Ná luaigh daoine",
"Mention group": "Luaigh {group}",
"Allow Long SMS": "Ceadaigh SMS Fada",
"Bitrix24 Webhook URL": "URL Webbhook Bitrix24",
"wayToGetBitrix24Webhook": "Is féidir leat cuaille gréasáin a chruthú trí na céimeanna ag {0} a leanúint",
"bitrix24SupportUserID": "Cuir isteach daitheantas úsáideora in Bitrix24. Is féidir leat an ID a fháil amach ón nasc ach dul chuig próifíl an úsáideora.",
"Originator": "Tionscnóir",
"wayToWriteWhapiRecipient": "An uimhir theileafóin leis an réimír idirnáisiúnta, ach gan an comhartha móide ag an tús ({0}), an ID Teagmhála ({1}) nó an Grúpa ID ({2}).",
"wayToGetWhapiUrlAndToken": "Is féidir leat an URL API agus an comhartha a fháil ach dul isteach sa chainéal atá uait ó {0}",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Cuir isteach óstainm an fhreastalaí a bhfuil tú ag iarraidh ceangal leis nó {localhost} má tá sé ar intinn agat {local_mta} a úsáid",
"Refresh Interval": "Eatramh Athnuaigh",
"Refresh Interval Description": "Déanfaidh an leathanach stádais athnuachan iomlán ar an suíomh gach {0} soicind",
"whatHappensAtForumPost": "Cruthaigh post fóraim nua. NÍ phostann sé seo teachtaireachtaí sa phostáil reatha. Chun postáil sa phostáil reatha úsáid \"{option}\"",
"cellsyntOriginatortypeAlphanumeric": "Teaghrán alfa-uimhriúil (uasmhéid 11 carachtar alfa-uimhriúil). Ní féidir leis na faighteoirí freagra a thabhairt ar an teachtaireacht.",
"gtxMessagingFromHint": "Ar fhóin phóca, feiceann dfhaighteoirí an TPOA ar taispeáint mar sheoltóir na teachtaireachta. Tá suas le 11 gcarachtar alfa-uimhriúla ceadaithe, gearrchód, an longchód áitiúil nó uimhreacha idirnáisiúnta ({e164}, {e212} nó {e214})",
"gtxMessagingToHint": "Formáid idirnáisiúnta, le \"+\" chun tosaigh ({e164}, {e212} nó {e214})",
"Originator type": "Cineál tionscnóra",
"Select message type": "Roghnaigh cineál teachtaireachta",
"wayToGetSevenIOApiKey": "Tabhair cuairt ar an painéal faoi app.seven.io > forbróir > eochair api > an cnaipe cuir glas",
"max 11 alphanumeric characters": "11 carachtar alfa-uimhriúil ar a mhéad",
"Your User ID": "D'aitheantas úsáideora",
"cellsyntOriginatortypeNumeric": "Luach uimhriúil (15 dhigit ar a mhéad) le huimhir theileafóin ar an bhformáid idirnáisiúnta gan 00 a threorú (mar shampla ba cheart uimhir RA 07920 110 000 a shocrú mar 447920110000). Is féidir le faighteoirí freagra a thabhairt ar an teachtaireacht.",
"cellsyntOriginator": "Le feiceáil ar ghuthán póca an fhaighteora mar thionscnóir na teachtaireachta. Braitheann luachanna agus feidhm cheadaithe ar chineál tionscnóra paraiméadar.",
"cellsyntDestination": "Uimhir theileafóin an fhaighteora ag baint úsáide as formáid idirnáisiúnta le 00 chun tosaigh agus cód tíre ina dhiaidh, e.g. 00447920110000 don uimhir RA 07920 110 000 (uasmhéid 17 ndigit san iomlán). Uasmhéid 25000 faighteoir scartha le camóg in aghaidh an iarratais HTTP.",
"Destination": "Ceann Scríbe",
"Channel access token (Long-lived)": "Comhartha rochtana cainéal (fadsaolach)",
"ignoreTLSErrorGeneral": "Déan neamhaird de earráid TLS/SSL le haghaidh ceangail",
"Send to channel": "Seol chuig cainéal",
"Create new forum post": "Cruthaigh post fóraim nua",
"postToExistingThread": "Cuir chuig an bpost snáithe / fóram atá ann cheana féin",
"forumPostName": "Ainm post an Fhóraim",
"threadForumPostID": "Snáithe / ID post an Fhóraim",
"e.g. {discordThreadID}": "e.g. {discordThreadID}",
"receiverSevenIO": "Uimhir glactha",
"Alphanumeric (recommended)": "Alfa-uimhriúil (molta)",
"Telephone number": "Uimhir theileafóin",
"cellsyntSplitLongMessages": "Roinn teachtaireachtaí fada suas le 6 chuid. 153 x 6 = 918 carachtar.",
"max 15 digits": "15 dhigit ar a mhéad"
}

@ -799,7 +799,6 @@
"affectedStatusPages": "Prikazuje poruku o održavanju na odabranim statusnim stranicama",
"atLeastOneMonitor": "Odaberite barem jedan zahvaćeni Monitor",
"invertKeywordDescription": "Postavi da ključna riječ mora biti odsutna umjesto prisutna.",
"jsonQueryDescription": "Izvršite JSON upit nad primljenim odgovorom i provjerite očekivanu povrtanu vrijednost. Ona će se za usporedbu pretvoriti u niz znakova (string). Pogledajte stranicu {0} za dokumentaciju o jeziku upita. Testno okruženje možete pronaći {1}.",
"Strategy": "Strategija",
"Free Mobile User Identifier": "Besplatni mobilni korisnički identifikator",
"Free Mobile API Key": "Besplatni mobilni ključ za API",
@ -833,7 +832,7 @@
"noGroupMonitorMsg": "Nije dostupno. Prvo kreirajte grupu Monitora.",
"Close": "Zatvori",
"Request Body": "Tijelo zahtjeva",
"wayToGetFlashDutyKey": "Možete otići na 'Channel' -> (Odaberite kanal) -> 'Integrations' -> 'Add a new integration' i odaberite 'Custom Event' da biste dobili push adresu. Zatim kopirajte integracijski ključ u adresu. Za više informacija posjetite",
"wayToGetFlashDutyKey": "Možete otići na 'Channel' -> (Odaberite kanal) -> 'Integrations' -> 'Add a new integration' i odaberite 'Uptime Kuma' da biste dobili push adresu. Zatim kopirajte integracijski ključ u adresu. Za više informacija posjetite",
"FlashDuty Severity": "Stupanj ozbiljnosti",
"nostrRelays": "Nostr releji",
"nostrRelaysHelp": "Jedan URL releja po liniji",
@ -911,5 +910,61 @@
"self-hosted container": "kontejner koji je self-hosted",
"useRemoteBrowser": "Korištenje udaljenog preglednika",
"Add a new expiry notification day": "Dodaj novi dan za istek obavijesti",
"Remove the expiry notification": "Ukloni dan za istek obavijesti"
"Remove the expiry notification": "Ukloni dan za istek obavijesti",
"What is a Remote Browser?": "Što je udaljeni preglednik?",
"documentationOf": "{0} dokumentacija",
"wayToGetHeiiOnCallDetails": "Postupak pribavljanja identifikatora okidača i API ključeva objašnjeno je u {documentation}",
"gtxMessagingApiKeyHint": "Svoj API ključ možete pronaći odlaskom na postavku: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
"To Phone Number": "Telefonski broj primatelja",
"Originator type": "Izvorišni tip",
"Alphanumeric (recommended)": "Alfanumerički (preporučeno)",
"Destination": "Odredište",
"callMeBotGet": "Ovdje se može generirati krajnja točka za {0}, {1} i {2}. Imajte na umu da biste mogli biti ograničeni tarifom. Čini se da je trenutna tarifa: {3}",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Telefonski broj pošiljatelja / Izvorišna adresa prijenosnog puta (TPOA)",
"whapiRecipient": "Broj telefona / Identifikator kontakta / Identifikator grupe",
"API URL": "URL API-ja",
"gtxMessagingToHint": "Međunarodni format, s početnim plusom (\"+\") ({e164}, {e212} ili {e214})",
"Telephone number": "Telefonski broj",
"cellsyntOriginatortypeAlphanumeric": "Alfanumerički niz znakova (maksimalne duljine 11). Primatelji ne mogu odgovoriti na poruku.",
"cellsyntOriginatortypeNumeric": "Brojčana vrijednost (maksimalno 15 znamenki) telefonskog broja u međunarodnom formatu bez \"00\" na početku (primjerice, broj iz UK-a 07920-110-000 trebao bi biti postavljen kao 447920110000). Primatelji mogu odgovoriti na poruku.",
"Originator": "Izvorište",
"Allow Long SMS": "Dozvoli dugačke SMS poruke",
"cellsyntSplitLongMessages": "Podijeli dugačke poruke na više dijelova, do maksimalnih 6. Maksimalan broj znakova tada je 153 x 6 = 918.",
"max 15 digits": "maks. 15 znamenki",
"max 11 alphanumeric characters": "maks. 11 alfanumeričkih znakova",
"wayToWriteWhapiRecipient": "Telefonski broj s međunarodnim prefiksom, ali bez znaka plus na početku ({0}), identifikatora kontakta ({1}) ili identifikatora grupe ({2}).",
"wayToGetWhapiUrlAndToken": "Moguće je pribaviti token te URL API-ja odlaskom na željeni kanal s {0}",
"gtxMessagingFromHint": "Na mobilnim telefonima, vaši primatelji vide TPOA prikazanu kao pošiljatelja poruke. Dopušteno je do 11 alfanumeričkih znakova, kratki kod, lokalni dugi kod ili međunarodni brojevi ({e164}, {e212} ili {e214})",
"cellsyntOriginator": "Vidljivo na mobilnom telefonu primatelja kao autor poruke. Dopuštene vrijednosti i funkcija ovise o vrsti izvorišta.",
"cellsyntDestination": "Telefonski broj primatelja u međunarodnom formatu s početnim 00 iza kojeg slijedi pozivni broj države (maksimalno 17 znamenki). Primjerice, za broj iz UK-a 07920-110-000 vrijednost mora biti 00447920110000 . Maksimalno 25.000 primatelja odvojenih zarezom po HTTP zahtjevu.",
"Channel access token (Long-lived)": "Pristupni token za kanal (dugovječni)",
"Your User ID": "Vaš korisnički identifikator",
"wayToGetSevenIOApiKey": "Posjetite nadzornu ploču odlaskom na app.seven.io > Developer > API Key i dodajte novi ključ koristeći zeleni gumb za dodavanje",
"Command": "Naredba",
"mongodbCommandDescription": "Pokreni MongoDB naredbu na bazi podataka. Za informacije o dostupnim naredbama posjetite {documentation}",
"Mentioning": "Spominjanje",
"Don't mention people": "Ne spominji ljude",
"Bitrix24 Webhook URL": "URL webhooka za Bitrix24",
"wayToGetBitrix24Webhook": "Možete napraviti webhook prateći upute na {0}",
"bitrix24SupportUserID": "Unesite svoj korisnički identifikator u Bitrix24. Možete ga dobiti iz URL-a odlaskom na vlastiti profil.",
"apiKeySevenIO": "SevenIO API ključ",
"Host URL": "URL domaćina",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Unesite adresu poslužitelja na koju se želite spojiti ili {localhost} ako planirate koristiti {local_mta}",
"Select message type": "Odaberite tip poruke",
"postToExistingThread": "Pošalji u postojeću temu / forumsku raspravu",
"Send to channel": "Slanje u kanal",
"Create new forum post": "Stvori novu forumsku objavu",
"whatHappensAtForumPost": "Stvori novu forumsku raspravu. Ova opcija ne dozvoljava objavu poruka u postojeću raspravu, za to je potrebno koristiti \"{option}\"",
"wayToGetDiscordThreadId": "Pronalaženje indentifikatora forumske rasprave ili objave slično je kao i za indentifikator kanala. Više o tome: {0}",
"Refresh Interval": "Interval osvježavanja",
"Refresh Interval Description": "Statusna stranica će napraviti cjelovito osvježavanje svake/ih {0} sekunde/i",
"locally configured mail transfer agent": "agent prijenosa e-pošte postavljen lokalno",
"ignoreTLSErrorGeneral": "Ignoriraj greške TLS-a/SSL-a prilikom spajanja",
"forumPostName": "Naziv forumske objave",
"e.g. {discordThreadID}": "npr. {discordThreadID}",
"threadForumPostID": "Identifikator forumske rasprave ili objave",
"Mention group": "Spomeni {group}",
"senderSevenIO": "Broj ili naziv pošiljatelja",
"receiverSevenIO": "Broj primatelja",
"receiverInfoSevenIO": "Ako broj primatelja nije registriran u Njemačkoj, potrebno je uključiti i pozivni broj države (primjerice, umjesto 023123123 potrebno je koristiti 36523123123 ako je riječ o hrvatskom broju)"
}

@ -37,7 +37,7 @@
"Check Update On GitHub": "Frissítések keresése a GitHub-on",
"List": "Lista",
"Add": "Hozzáadás",
"Add New Monitor": "Új figyelő hozzáadása",
"Add New Monitor": "Új monitor hozzáadása",
"Quick Stats": "Gyors statisztikák",
"Up": "Működik",
"Down": "Leállt",
@ -61,7 +61,7 @@
"-hour": "- óra",
"Response": "Válasz",
"Ping": "Ping",
"Monitor Type": "Figyelő típusa",
"Monitor Type": "Monitor típusa",
"Keyword": "Kulcsszó",
"Friendly Name": "Rövid név",
"URL": "URL",
@ -111,7 +111,7 @@
"Password": "Jelszó",
"Remember me": "Emlékezzen rám",
"Login": "Bejelentkezés",
"No Monitors, please": "Nincs figyelő, kérem",
"No Monitors, please": "Nincsenek megfigyelők, kérem",
"add one": "adjon hozzá egyet",
"Notification Type": "Értesítés típusa",
"Email": "Email",
@ -129,7 +129,7 @@
"respTime": "Válaszidő (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Alapértelmezetten engedélyezett",
"Apply on all existing monitors": "Alkalmazza az összes figyelőre",
"Apply on all existing monitors": "Alkalmazza az összes monitorra",
"Create": "Létrehozás",
"Clear Data": "Adatok törlése",
"Events": "Események",
@ -174,7 +174,7 @@
"Avg. Response": "Átl. válasz",
"Entry Page": "Nyitólap",
"statusPageNothing": "Semmi nincs itt. Adjon hozzá egy vagy több figyelőt.",
"No Services": "Nincs szolgáltatás",
"No Services": "Nincsenek szolgáltatások",
"All Systems Operational": "Minden rendszer működik",
"Partially Degraded Service": "Részlegesen leállt szolgáltatás",
"Degraded Service": "Leállt szolgáltatás",
@ -343,7 +343,7 @@
"Description": "Leírás",
"No monitors available.": "Nincs még figyelő beállítva.",
"Add one": "Adjon hozzá egyet",
"No Monitors": "Nincs figyelő",
"No Monitors": "Nincsenek megfigyelők",
"Untitled Group": "Névtelen csoport",
"Services": "Szolgáltatások",
"Discard": "Elvet",
@ -520,9 +520,9 @@
"wayToGetKookGuildID": "Válts át 'Developer Mode'-ra a Kook beállításoknál majd jobb klikkelve a guildra megtalálod az ID-jét",
"Resend Notification if Down X times consecutively": "Értesítés Újraküldése ha X-szer nem válaszol",
"Authentication": "Hitelesítés",
"Passive Monitor Type": "Passzív megfigyelési típus",
"General Monitor Type": "Általános figyelő típus",
"Specific Monitor Type": "Specifikus megfigyelési típus",
"Passive Monitor Type": "Passzív monitor típus",
"General Monitor Type": "Általános monitor típus",
"Specific Monitor Type": "Specifikus monitor típus",
"Reconnecting...": "Újracsatlakozás...",
"Saved.": "Elmentve.",
"authUserInactiveOrDeleted": "A felhasználó inaktív vagy nem létezik.",
@ -605,7 +605,7 @@
"filterActivePaused": "Szünetel",
"Add New Tag": "Új címke hozzáadása",
"webhookBodyCustomOption": "Egyedi törzs",
"Search monitored sites": "Megfigyelt oldalak keresése",
"Search monitored sites": "Monitorozott oldalak keresése",
"templateMsg": "az értesítés üzenete",
"templateHeartbeatJSON": "a szívverést leíró objektum",
"templateMonitorJSON": "a monitort leíró objektum",
@ -674,7 +674,7 @@
"wayToGetZohoCliqURL": "Megtudhatja, hogy hogyan hozz létre egy webhook URL-címet {0}.",
"chromeExecutableDescription": "A Docker-felhasználók számára, ha a Chromium még nincs telepítve, a telepítés és a teszteredmény megjelenítése néhány percet vehet igénybe. 1 GB lemezterületet foglal.",
"loadingError": "Nem sikerült lekérni az adatokat, kérjük, próbálja meg később újra.",
"cloneOf": "{0} klónja",
"cloneOf": "{0} duplikációja",
"dataRetentionTimeError": "A megőrzési időszaknak 0-nak vagy annál nagyobbnak kell lennie",
"infiniteRetention": "Végtelen visszatartás esetén állítsa 0-ra.",
"confirmDeleteTagMsg": "Biztos, hogy törölni szeretné ezt a címkét? Az ehhez a címkéhez tartozó monitorok nem kerülnek törlésre.",
@ -773,5 +773,59 @@
"SecretAccessKey": "Titkos Hozzáférési Kulcs",
"Invert Keyword": "Kulcsszó invertálása",
"or": "vagy",
"For safety, must use secret key": "Biztonsági okoból kötelező a titkos kulcs használata"
"For safety, must use secret key": "Biztonsági okoból kötelező a titkos kulcs használata",
"emailCustomisableContent": "Testreszabható tartalom",
"leave blank for default subject": "hagyja üresen az alapértelmezett email tárgyát",
"smtpLiquidIntroduction": "A következő két mező a Liquid sablonozási nyelven keresztül szerkezthető. Kérjük, olvassa el a következőt: {0} a használati utasításokért. Ezek az elérhető változók:",
"Learn More": "Tudjon meg többet",
"Notify Channel": "Csatorna értesítése",
"install": "Telepítés",
"installing": "Telepítés",
"grpcMethodDescription": "A metódus neve camelCase formátumba konvertálva, például sayHello, check stb.",
"Custom Monitor Type": "Egyedi monitor típus",
"uninstall": "Eltávolítás",
"confirmUninstallPlugin": "Biztosan eltávolítja ezt a bővítményt?",
"notificationRegional": "Regionális",
"uninstalling": "Eltávolítás",
"Clone Monitor": "Monitor Duplikálása",
"Clone": "Duplikáció",
"emailCustomBody": "Egyedi email törzs",
"leave blank for default body": "hagyja üresen az alapértelmezett email törzsét",
"emailTemplateServiceName": "Szolgáltatás neve",
"emailTemplateHostnameOrURL": "Hosztnév vagy URL",
"emailTemplateMonitorJSON": "a monitort leíró objektum",
"emailTemplateHeartbeatJSON": "a szívverést leíró objektum",
"emailTemplateMsg": "az értesítés üzenete",
"emailTemplateLimitedToUpDownNotification": "csak FEL/LE szívverés esetén érhető el, egyébként null érték",
"pushoverMessageTtl": "TTL üzenet (másodperc)",
"Platform": "Platform",
"aboutNotifyChannel": "A Csatorna értesítése opció, értesítést fog küldeni a csatorna összes tagjának, függetlenül a tagok elérhetőségétől.",
"setup a new monitor group": "állítson be egy új monitorcsoportot",
"openModalTo": "felugró ablak megnyitása ide: {0}",
"Add a domain": "Adjon hozzá egy domaint",
"Server URL should not contain the nfty topic": "A szerver URL-je nem tartalmazhatja az nfty témát",
"PushDeer Server": "PushDeer Szerver",
"pushDeerServerDescription": "Hagyja üresen a hivatalos szerver használatához",
"Edit Tag": "Címke szerkesztése",
"plugin": "Bővítmény | Bővítmények",
"Expiry date": "Lejárati dátum",
"pagertreeDoNothing": "Ne csináljon semmit",
"ntfyUsernameAndPassword": "Felhasználónév és jelszó",
"Body Encoding": "Törzs kódolás",
"API Keys": "API Kulcsok",
"Expiry": "Lejár",
"Don't expire": "Nem jár le",
"Add Another": "Másik hozzáadása",
"twilioApiKey": "API-kulcs (opcionális)",
"Monitor Setting": "{0} monitor beállítása",
"pagertreeResolve": "Automatikus megoldás",
"wayToGetPagerTreeIntegrationURL": "Miután létrehozta az Uptime Kuma integrációt a PagerTree-ben, másolja át a végpontot. A részletek megtekintése {0}",
"lunaseaTarget": "Cél",
"ntfyPriorityHelptextAllEvents": "Minden esemény maximális prioritással került elküldésre",
"ntfyPriorityHelptextAllExceptDown": "Minden esemény ezzel a prioritással került elküldésre, kivéve a {0} események, amelyek prioritása {1}",
"twilioAccountSID": "Fiók SID",
"Mechanism": "Mechanizmus",
"No API Keys": "Nincsenek API kulcsok",
"Monitor Group": "Monitor csoport",
"ntfyAuthenticationMethod": "Hitelesítési metódus"
}

@ -12,7 +12,7 @@
"passwordNotMatchMsg": "Kata sandi kedua tidak cocok.",
"notificationDescription": "Harap atur notifikasi ke monitor agar berfungsi.",
"keywordDescription": "Kata kunci pencarian dalam HTML biasa atau respons JSON. Pencarian bersifat peka terhadap huruf besar/kecil.",
"pauseDashboardHome": "Jeda",
"pauseDashboardHome": "Dijeda",
"deleteMonitorMsg": "Apakah Anda mau menghapus monitor ini?",
"deleteNotificationMsg": "Apakah Anda mau menghapus notifikasi untuk semua monitor?",
"dnsPortDescription": "Port server DNS. Bawaan menggunakan 53. Anda dapat mengubah port kapan saja.",
@ -47,7 +47,7 @@
"Down": "Tidak Aktif",
"Pending": "Tertunda",
"Unknown": "Tidak diketahui",
"Pause": "Jeda",
"Pause": "Dijeda",
"Name": "Nama",
"Status": "Status",
"DateTime": "Tanggal Waktu",
@ -141,7 +141,7 @@
"Create": "Buat",
"Clear Data": "Bersihkan Data",
"Events": "Peristiwa",
"Heartbeats": "Detak",
"Heartbeats": "Heartbeat",
"Auto Get": "Ambil Otomatis",
"backupDescription": "Anda dapat mencadangkan semua monitor dan semua notifikasi ke dalam berkas JSON.",
"backupDescription2": "Catatan: Data sejarah dan peristiwa tidak disertakan.",
@ -168,7 +168,7 @@
"Tag with this name already exist.": "Tanda dengan nama ini sudah ada.",
"Tag with this value already exist.": "Tanda dengan nilai ini sudah ada.",
"color": "warna",
"value (optional)": "nilai (harus diisi)",
"value (optional)": "nilai (tidak harus diisi)",
"Gray": "Abu-abu",
"Red": "Merah",
"Orange": "Jingga",
@ -180,7 +180,7 @@
"Search...": "Cari…",
"Avg. Ping": "Rata-rata Ping",
"Avg. Response": "Rata-rata Tanggapan",
"Entry Page": "Halaman Masuk",
"Entry Page": "Beranda",
"statusPageNothing": "Tidak ada di sini, silakan tambahkan grup atau monitor.",
"No Services": "Tidak ada Layanan",
"All Systems Operational": "Semua Sistem Berfungsi",
@ -559,7 +559,7 @@
"ntfy Topic": "Topik ntfy",
"Domain": "Domain",
"Workstation": "Workstation",
"disableCloudflaredNoAuthMsg": "Anda berada dalam mode Tanpa Otentikasi, kata sandi tidak diperlukan.",
"disableCloudflaredNoAuthMsg": "Anda berada dalam mode Tanpa Autentikasi, kata sandi tidak diperlukan.",
"trustProxyDescription": "Trust 'X-Forwarded-*' headers. Jika Anda ingin mendapatkan IP klien yang benar dan Uptime Kuma Anda dibalik proxy seperti Nginx or Apache, Anda harus mengaktifkan ini.",
"wayToGetLineNotifyToken": "Anda bisa mendapatkan token akses dari {0}",
"Examples": "Contoh",
@ -666,7 +666,7 @@
"pagertreeHigh": "Tinggi",
"Group": "Grup",
"Body Encoding": "Body Encoding",
"Add New Tag": "Tambahkan Tag Baru",
"Add New Tag": "Tambahkan Tanda Baru",
"chromeExecutableDescription": "Untuk pengguna Docker, jika Chromium belum diinstal, mungkin perlu waktu beberapa menit untuk menginstal dan menampilkan hasil pengujian. Dibutuhkan 1GB ruang penyimpanan.",
"recurringIntervalMessage": "Jalankan sekali setiap hari | Jalankan sekali setiap {0} hari",
"wayToGetKookBotToken": "Buat aplikasi dan dapatkan token bot Anda di {0}",
@ -717,7 +717,7 @@
"No Maintenance": "Tidak Ada Pemeliharaan",
"pauseMaintenanceMsg": "Anda yakin ingin menjeda?",
"maintenanceStatus-inactive": "Tidak aktif",
"Display Timezone": "Tampilkan Zona Waktu",
"Display Timezone": "Zona Waktu Tampilan",
"IconUrl": "URL ikon",
"Enable DNS Cache": "(Tidak berlaku lagi) Aktifkan Cache DNS untuk monitor HTTP(s)",
"Enable": "Aktifkan",
@ -766,7 +766,7 @@
"maintenanceStatus-scheduled": "Dijadwalkan",
"maintenanceStatus-ended": "Berakhir",
"dataRetentionTimeError": "Periode retensi harus 0 atau lebih besar",
"chromeExecutable": "Chrome/Chromium Dapat Dijalankan",
"chromeExecutable": "Chrome/Chromium yang Dapat di Eksekusi",
"chromeExecutableAutoDetect": "Deteksi otomatis",
"Edit Maintenance": "Sunting Pemeliharaan",
"DateTime Range": "Rentang Tanggal dan Waktu",
@ -838,7 +838,6 @@
"emailTemplateHeartbeatJSON": "objek yang menggambarkan heartbeat",
"emailTemplateMsg": "pesan pemberitahuan",
"emailCustomBody": "Kustomisasi Body",
"jsonQueryDescription": "Lakukan Query json terhadap respons dan periksa nilai yang diharapkan (Nilai yang dikembalikan akan diubah menjadi string untuk perbandingan). Lihat {0} untuk dokumentasi tentang bahasa kueri. Taman bermain dapat ditemukan {1}.",
"Notify Channel": "Beritahu Saluran",
"Server URL should not contain the nfty topic": "URL server tidak boleh berisi topik nfty",
"PushDeer Server": "Server PushDeer",
@ -869,7 +868,7 @@
"tagNotFound": "Tag tidak ditemukan.",
"foundChromiumVersion": "Ditemukan Chromium/Chrome. Versi: {0}",
"Kafka SASL Options": "Opsi Kafka SASL",
"Pick a SASL Mechanism...": "Pilih Mekanisme SASL...",
"Pick a SASL Mechanism...": "Pilih Mekanisme SASL",
"AccessKey Id": "Id AccessKey",
"Secret AccessKey": "Secret AccessKey",
"Session Token": "Sesi Token",
@ -879,13 +878,13 @@
"templateMsg": "pesan pemberitahuan",
"templateHeartbeatJSON": "objek yang menggambarkan heartbeat",
"templateMonitorJSON": "objek yang menggambarkan monitor",
"templateLimitedToUpDownCertNotifications": "hanya tersedia untuk notifikasi ATAS/BAWAH/Sertifikat yang kadaluarsa",
"templateLimitedToUpDownNotifications": "hanya tersedia untuk notifikasi ATAS/BAWAH",
"templateLimitedToUpDownCertNotifications": "hanya tersedia untuk notifikasi AKTIF/TIDAK AKTIF/Sertifikat yang kedaluwarsa",
"templateLimitedToUpDownNotifications": "hanya tersedia untuk notifikasi AKTIF/TIDAK AKTIF",
"liquidIntroduction": "Kemampuan templat dicapai melalui bahasa templating Liquid. Silakan lihat {0} untuk petunjuk penggunaan. Ini adalah variabel yang tersedia:",
"selectedMonitorCount": "Terpilih: {0}",
"Check/Uncheck": "Centang/Hapus centang",
"Authorization Identity": "Identitas Otorisasi",
"styleElapsedTime": "Waktu yang berlalu di bawah bilah heartbeat",
"styleElapsedTime": "Waktu yang berlalu pada bilah heartbeat",
"styleElapsedTimeShowNoLine": "Tampilkan (Tanpa Garis)",
"styleElapsedTimeShowWithLine": "Tampilkan (Dengan Garis)",
"Request Timeout": "Batas Waktu Habis",
@ -912,5 +911,33 @@
"statusPageSpecialSlugDesc": "Tanda khusus {0}: halaman ini akan ditampilkan jika tidak ada tanda khusus yang disediakan",
"settingUpDatabaseMSG": "Menyiapkan basis data. Mungkin perlu waktu beberapa saat, harap bersabar.",
"Search monitored sites": "Mencari situs yang dipantau",
"ntfyPriorityHelptextAllEvents": "Semua peristiwa dikirim dengan prioritas maksimum"
"ntfyPriorityHelptextAllEvents": "Semua peristiwa dikirim dengan prioritas maksimum",
"What is a Remote Browser?": "Apa itu Remote Browser?",
"wayToGetHeiiOnCallDetails": "Cara mendapatkan ID Pemicu dan Kunci API dijelaskan di {documentation}",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Dari Nomor Telepon / Transmission Path Originating Address (TPOA)",
"gtxMessagingFromHint": "Penerima pesan akan melihat TPOA yang ditampilkan sebagai pengirim pesan. Diperbolehkan maksimal 11 karakter alfanumerik, kode pendek, kode panjang lokal atau internasional ({e164}, {e212} or {e214})",
"To Phone Number": "Untuk Nomor Telepon",
"gtxMessagingToHint": "Format internasional, dimulai dengan tanda plus \"+\" ({e164}, {e212} or {e214})",
"gtxMessagingApiKeyHint": "Anda dapat menemukan Kunci API Anda di: Perutean Akun Saya > Lihat Informasi Akun > Kredensial API > REST API (v2.x)",
"Originator type": "Tipe Pencetus",
"Alphanumeric (recommended)": "Alfanumerik (direkomendasikan)",
"Telephone number": "Nomor telepon",
"cellsyntOriginatortypeAlphanumeric": "String alfanumerik (maks 11 karakter). Penerima tidak dapat membalas pesan tersebut.",
"cellsyntOriginatortypeNumeric": "Nilai numerik (maks 15 digit) dengan nomor telepon dalam format internasional tanpa awalan 00 (contoh nomor Inggris 07920 110 000 harus diisi sebagai 447920110000). Penerima dapat membalas pesan tersebut.",
"cellsyntDestination": "Nomor telepon penerima dalam format internasional yang diawali angka 00, diikuti dengan kode negara, contoh : 00447920110000 untuk nomor Inggris 07920 110 000 (maks total 17 digit). Maksimum 25.000 penerima yang dipisahkan dengan tanda koma per permintaan HTTP.",
"Allow Long SMS": "Izinkan SMS Panjang",
"max 15 digits": "Maksimal 15 digit",
"callMeBotGet": "Anda dapat membuat endpoint untuk {0}, {1} dan {2}. Ingatlah bahwa Anda mungkin akan terkena batas tarif. Batas tarif saat ini adalah: {3}",
"Originator": "Pencetus",
"cellsyntOriginator": "Terlihat di ponsen penerima sebagai pencetus pesan. Nilai dan fungsi yang diizinkan bergantung pada parameter tipe pencetus.",
"Destination": "Tujuan",
"wayToGetWhapiUrlAndToken": "Anda dapat menggunakan URL API dan token dengan bergabung ke saluran yang Anda inginkan dari {0}",
"whapiRecipient": "Nomor Telepon / Kontak ID / Grup ID",
"API URL": "URL API",
"cellsyntSplitLongMessages": "Pisahkan pesan panjang ke dalam 6 bagian. 153 x 6 = 918 karakter.",
"max 11 alphanumeric characters": "maksimal 11 karakter alfanumerik",
"wayToWriteWhapiRecipient": "Nomor telepon dalam format internasional, tanpa tanda tambah ({0}), Kontak ID ({1}) atau Grup ID ({2}).",
"documentationOf": "{0} Dokumentasi",
"Channel access token (Long-lived)": "Token akses saluran (durasi panjang)",
"Your User ID": "User ID Anda"
}

@ -535,7 +535,7 @@
"Server Timezone": "Fuso orario del server",
"statusPageMaintenanceEndDate": "Fine",
"IconUrl": "URL dell'icona",
"Enable DNS Cache": "Abilita la cache DNS per i monitor HTTP(s).",
"Enable DNS Cache": "(Obsoleto) Abilita la cache DNS per i monitor HTTP(s).",
"Enable": "Abilitare",
"Disable": "Disattivare",
"chromeExecutableAutoDetect": "Trovato automaticamente",
@ -620,7 +620,6 @@
"enableNSCD": "Abilita NSCD (Name Service Cache Daemon) per abilitare la cache su tutte le richieste DNS",
"recurringIntervalMessage": "Esegui una volta al giorno | Esegui una volta ogni {0} giorni",
"affectedMonitorsDescription": "Seleziona i monitoraggi che sono influenzati da questa manutenzione",
"jsonQueryDescription": "Fai una query JSON verso la risposta e controlla se è presente il valore richiesto. (Il valore di ritorno verrà convertito in stringa ai fini della comparazione). Puoi controllare la documentazione su <a href='https://jsonata.org/'>jsonata.org</a> per conoscere come scrivere una query. Un area dimostrativa può essere trovata <a href='https://try.jsonata.org/'>qui</a>.",
"For safety, must use secret key": "Per sicurezza, devi usare una chiave segreta",
"Proxy server has authentication": "Il server Proxy ha una autenticazione",
"smseaglePriority": "Priorità messaggio (0-9, default = 0)",
@ -668,5 +667,13 @@
"liquidIntroduction": "La templatabilità è ottenuta attraverso il linguaggio di templating Liquid. Consulta {0} per le istruzioni d'uso. Queste sono le variabili disponibili:",
"templateMsg": "Messaggio della notifica",
"Search monitored sites": "Ricerca tra i siti monitorati",
"settingUpDatabaseMSG": "Configurazione del database in corso. Potrebbe richiedere un po' di tempo..."
"settingUpDatabaseMSG": "Configurazione del database in corso. Potrebbe richiedere un po' di tempo...",
"templateHeartbeatJSON": "oggetto che descrive il battito cardiaco",
"templateLimitedToUpDownNotifications": "disponibile solo per le notifiche UP/DOWN",
"Add a new expiry notification day": "Aggiungi un nuovo giorno di notifica di scadenza",
"DockerHostRequired": "Per favore, imposta l'host Docker per questo monitor.",
"smtpLiquidIntroduction": "I due campi seguenti sono adattabili tramite il linguaggio di templating Liquid. Consulta {0} per le istruzioni d'uso. Queste sono le variabili disponibili:",
"emailCustomisableContent": "Contenuto personalizzabile",
"noDockerHostMsg": "Non disponibile. Configura prima un host Docker.",
"Remove the expiry notification": "Rimuovi il giorno di notifica di scadenza"
}

@ -565,7 +565,7 @@
"Request Timeout": "リクエストタイムアウト",
"timeoutAfter": "{0} 秒後にタイムアウト",
"selectedMonitorCount": "選択済み: {0}",
"Long-Lived Access Token": "Long-Lived Access Token",
"Long-Lived Access Token": "長期アクセストークン",
"Invert Keyword": "「含まない」キーワード",
"Expected Value": "期待値"
}

@ -23,5 +23,30 @@
"Game": "കളികൾ",
"Check Update On GitHub": "പുതിയ മാറ്റങ്ങൾക്കായി GitHub നോക്കുക",
"Pending": "തീരുമാനം പ്രതീക്ഷിച്ചിരിക്കുന്ന",
"General Monitor Type": "പൊതുവരായ തിര നോട്ടം"
"General Monitor Type": "പൊതുവരായ തിര നോട്ടം",
"settingUpDatabaseMSG": "ഡാറ്റാബേസ് സജ്ജീകരിച്ചുകൊണ്ടിരിക്കുന്നു . ദയവായി കുറച്ച് സമയം കാത്തിരിക്കുക.",
"setupDatabaseChooseDatabase": "ഏത് ഡാറ്റാബേസാണ് നിങ്ങൾ ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്നത്?",
"dbName": "ഡാറ്റാബേസിന്റെ പേര്",
"Reconnecting...": "വീണ്ടും ബന്ധപ്പെടാൻ ശ്രമിക്കുന്നു...",
"Cannot connect to the socket server": "സോക്കറ്റ് സെർവറുമായി ബന്ധപ്പെടാൻ സാധിക്കുന്നില്ല",
"Name": "നാമം",
"hour": "മണിക്കൂർ",
"-hour": "-മണിക്കൂർ",
"Response": "ഉത്തരം",
"Request Timeout": "പ്രതികരണം ലഭിക്കാനുള്ള സമയപരിധി അവസാനിച്ചിരിക്കുന്നു",
"timeoutAfter": "സമയപരിധി {0} നിമിഷങ്ങൾക്കകം അവസാനിക്കും",
"Retries": "വീണ്ടും ശ്രമിക്കൽ",
"Heartbeat Retry Interval": "ഹൃദയമിടിപ്പ് പുനരവലോകന ഇടവേള",
"Resend Notification if Down X times consecutively": "തുടർച്ചയായി X തവണ പ്രവർത്തനം തടസ്സപ്പെട്ടാൽ അറിയിപ്പ് വീണ്ടും അയയ്ക്കുക",
"Advanced": "പുരോഗമിച്ച",
"checkEverySecond": "ഓരോ {0} നിമിഷങ്ങൾക്ക് ശേഷവും പരിശോധിക്കുക",
"retryCheckEverySecond": "ഓരോ {0} നിമിഷങ്ങൾക്ക് ശേഷവും വീണ്ടും ശ്രമിക്കുക",
"resendEveryXTimes": "ഓരോ {0} പ്രാവശ്യവും വീണ്ടും അയയ്ക്കുക",
"resendDisabled": "വീണ്ടും അയയ്ക്കൽ നിരോധിച്ചിരിക്കുന്നു",
"Notifications": "അറിയിപ്പുകൾ",
"Not available, please setup.": "ലഭ്യമല്ല, ദയവായി സജ്ജീകരിക്കുക.",
"Setup Notification": "വിജ്ഞാപനം സജ്ജമാക്കുക",
"Light": "വെളിച്ചം",
"Dark": "ഇരുട്ട്",
"Auto": "സ്വയം"
}

@ -31,7 +31,7 @@
"Theme": "Thema",
"General": "Algemeen",
"Version": "Versie",
"Check Update On GitHub": "Controleer voor updates op GitHub",
"Check Update On GitHub": "Zoek naar updates op GitHub",
"List": "Lijst",
"Add": "Toevoegen",
"Add New Monitor": "Nieuwe monitor toevoegen",
@ -46,7 +46,7 @@
"DateTime": "Datum Tijd",
"Message": "Bericht",
"No important events": "Geen belangrijke gebeurtenissen",
"Resume": "Hervat",
"Resume": "Hervatten",
"Edit": "Wijzigen",
"Delete": "Verwijderen",
"Current": "Huidig",
@ -139,7 +139,7 @@
"Enable 2FA": "Schakel 2FA in",
"Disable 2FA": "Schakel 2FA uit",
"2FA Settings": "2FA-instellingen",
"Two Factor Authentication": "Two Factor Authenticatie",
"Two Factor Authentication": "Twee Factor Authenticatie",
"Active": "Actief",
"Inactive": "Inactief",
"Also apply to existing monitors": "Voeg ook toe aan bestaande monitors",
@ -497,7 +497,7 @@
"do nothing": "niets doen",
"auto acknowledged": "automatisch bevestigen",
"auto resolve": "automatisch oplossen",
"Authentication": "authenticatie",
"Authentication": "Authenticatie",
"signedInDisp": "Aangemeld als {0}",
"signedInDispDisabled": "Authenticatie uitgeschakeld.",
"Certificate Expiry Notification": "Melding over verlopen certificaat",
@ -608,7 +608,7 @@
"Custom": "Aangepast",
"Affected Monitors": "Aangetaste monitors",
"Resend Notification if Down X times consequently": "Verzend offline melding X keer opnieuw bij blijvend offline",
"Monitor": "Monitor | Monitors",
"Monitor": "Monitor | Monitoren",
"Start of maintenance": "Start van onderhoud",
"All Status Pages": "Alle status pagina's",
"Select status pages...": "Selecteer status pagina's…",
@ -625,9 +625,9 @@
"Game": "Spel",
"statusMaintenance": "Onderhoud",
"Maintenance": "Onderhoud",
"Passive Monitor Type": "Passieve Monitor Type",
"Passive Monitor Type": "Passief Monitor Type",
"Pick Affected Monitors...": "Kies aangetaste monitors…",
"Specific Monitor Type": "Specifieke Monitor Type",
"Specific Monitor Type": "Specifiek Monitor Type",
"promosmsLogin": "API Login naam",
"Schedule maintenance": "Onderhoud inplannen",
"resendEveryXTimes": "Verstuur elke {0} keer opnieuw",
@ -804,12 +804,11 @@
"Reconnecting...": "Opnieuw verbinden...",
"Expected Value": "Verwachte waarde",
"Json Query": "Json zoekopdracht",
"jsonQueryDescription": "Voer een JSON-query uit op de respons en controleer de verwachte waarde (De retourwaarde wordt omgezet naar een string voor vergelijking). Bekijk {0} voor de documentatie over de querytaal. Een speelplaats is beschikbaar {1}.",
"pushViewCode": "Hoe gebruik je Push monitor?(View Code)",
"setupDatabaseChooseDatabase": "Welke database wil je gebruiken?",
"setupDatabaseEmbeddedMariaDB": "Je hoeft niks in te stellen. Deze docker image heeft een ingebouwde en geconfigureerde MariaDB instantie. Uptime Kuma verbindt met deze database via een unix socket.",
"setupDatabaseMariaDB": "Verbindt met een externe MariaDB database. Je moet de database connectie informatie instellen.",
"setupDatabaseSQLite": "Een simpel database bestand, aanbevolen voor kleinschalige deployments. Voor v2.0.0, maakte Uptime Kuma standaard gebruik van een SQLite database.",
"setupDatabaseEmbeddedMariaDB": "Je hoeft niks in te stellen. Dit docker image heeft een ingebouwde en geconfigureerde MariaDB instantie. Uptime Kuma verbindt met deze database via een unix socket.",
"setupDatabaseMariaDB": "Verbind met een externe MariaDB database. Je moet de database-connectie informatie instellen.",
"setupDatabaseSQLite": "Een simpel database bestand, aanbevolen voor kleinschalige implementaties. Voor v2.0.0, maakte Uptime Kuma standaard gebruik van een SQLite database.",
"dbName": "Database naam",
"Request Timeout": "Verzoek Timeout",
"pushOthers": "Anderen",
@ -914,9 +913,48 @@
"Add a domain": "Voeg een domein toe",
"Remove domain": "Verwijder domein '{0}'",
"openModalTo": "Modal openen naar {0}",
"settingUpDatabaseMSG": "Database wordt ingesteld. Dit kan even duren dus wees geduldig.",
"settingUpDatabaseMSG": "Database wordt ingesteld. Dit kan even duren, dus wees geduldig.",
"Search monitored sites": "Zoek naar gemonitorde sites",
"statusPageSpecialSlugDesc": "Speciale padnaam {0}: deze pagina wordt getoond als er geen padnaam wordt opgegeven",
"ntfyPriorityHelptextAllEvents": "Alle meldingen worden verzonden met de maximale prioriteit",
"ntfyPriorityHelptextAllExceptDown": "Alle meldingen worden verzonden met deze prioriteit, behalve {0}-meldingen, die hebben een prioriteit van {1}"
"ntfyPriorityHelptextAllEvents": "Alle meldingen worden verzonden met de hoogste prioriteit",
"ntfyPriorityHelptextAllExceptDown": "Alle meldingen worden verzonden met deze prioriteit, behalve {0}-meldingen, die hebben een prioriteit van {1}",
"What is a Remote Browser?": "Wat is een remote webbrowser?",
"Your User ID": "Jouw gebruikers ID",
"Channel access token (Long-lived)": "Kanaal access token (blijvend)",
"documentationOf": "{0} Documentatie",
"wayToGetHeiiOnCallDetails": "Hoe de Trigger ID en de API Keys verkregen kunnen worden is terug te lezen in de {documentation}",
"To Phone Number": "Naar telefoonnummer",
"Telephone number": "Telefoonnummer",
"max 15 digits": "max 15 cijfers",
"max 11 alphanumeric characters": "max 11 alfanumerieke tekens",
"Allow Long SMS": "Lange SMS toestaan",
"Destination": "Bestemming",
"whapiRecipient": "Telefoonnummer / Contact-ID / Groeps-ID",
"API URL": "API URL",
"wayToGetWhapiUrlAndToken": "Je kunt de API-URL en de token verkrijgen door naar het gewenste kanaal te gaan vanaf {0}",
"gtxMessagingFromHint": "Op mobiele telefoons, de ontvangers zien het TPOA als de afzender van het bericht. Toegestaan zijn maximaal 11 alfanumerieke karakters, een shortcode, het lokale longcode of internationale nummers ({e164}, {e212} of {e214})",
"gtxMessagingToHint": "Internationaal formaat, met \"+\" aan het begin ({e164}, {e212} of {e214})",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Van telefoonnummer / Transmission Path Originating Address (TPOA)",
"gtxMessagingApiKeyHint": "Je kan je API key vinden bij: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
"Alphanumeric (recommended)": "Alfanumeriek (aanbevolen)",
"cellsyntOriginatortypeAlphanumeric": "Alfanumerieke reeks (max. 11 alfanumerieke karakters). Ontvangers kunnen niet op het bericht reageren.",
"cellsyntOriginatortypeNumeric": "Numerieke waarde (max. 15 cijfers) met telefoonnummer met landcode zonder + aan het begin (een Nederlands nummer 06 12 34 56 78 moet bijvoorbeeld worden ingesteld als 31612345678). Ontvangers kunnen op het bericht reageren.",
"Originator type": "Originator type",
"cellsyntSplitLongMessages": "Scheid lange berichten op in 6 delen. 153 x 6 = 918 karakters.",
"callMeBotGet": "Hier kan je een eindpunt genereren voor {0}, {1} en {2}. Houd er wel rekening mee dat er een maximaal aantal aanvragen zijn. Het maximum lijkt te zijn: {3}",
"cellsyntOriginator": "Zichtbaar op de mobiele telefoon van de ontvanger als afzender van het bericht. Toegestane waarden en functie zijn afhankelijk van het parameter-originatortype.",
"Originator": "Originator",
"cellsyntDestination": "Ontvanger's telefoonnummer met landcode zonder + aan het begin (een Nederlands nummer 06 12 34 56 78 moet bijvoorbeeld worden ingesteld als 31612345678). Maximaal 25.000 door komma's gescheiden ontvangers per HTTP-verzoek.",
"wayToWriteWhapiRecipient": "Het telefoonnummer met landcode, maar zonder + aan het begin ({0}), het contact ID ({1}) of groep ID ({2}).",
"locally configured mail transfer agent": "lokaal geconfigureerde mail agent",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Geef de hostnaam van de server waar je naar wilt verbinden op of {localhost} als je een {local-mta} wilt gebruiken",
"Don't mention people": "Vermeld geen mensen",
"wayToGetSevenIOApiKey": "Bezoek het dashboard onder app.seven.io > developer > api key > de groene knop",
"senderSevenIO": "Verzenden van nummer of naam",
"Host URL": "Host URL",
"Mention group": "Vermeld {group}",
"Mentioning": "Vermelden",
"receiverSevenIO": "Nummer ontvangen",
"receiverInfoSevenIO": "Als het ontvangende nummer zich niet in Duitsland bevindt, moet u de landcode vóór het nummer zetten (bijvoorbeeld voor de landcode 1 uit de VS gebruikt u 117612121212 in plaats van 017612121212)",
"apiKeySevenIO": "SevenIO API Sleutel"
}

@ -793,7 +793,6 @@
"styleElapsedTime": "Czas, który upłynął pod paskiem bicia serca",
"tailscalePingWarning": "Aby korzystać z monitora Tailscale Ping, należy zainstalować Uptime Kuma bez Dockera, a także zainstalować klienta Tailscale na serwerze.",
"invertKeywordDescription": "Słowo kluczowe powinno być raczej nieobecne niż obecne.",
"jsonQueryDescription": "Wykonaj zapytanie json względem odpowiedzi i sprawdź oczekiwaną wartość (wartość zwracana zostanie przekonwertowana na ciąg znaków do porównania). Sprawdź {0}, aby uzyskać dokumentację dotyczącą języka zapytań. Plac zabaw można znaleźć {1}.",
"Server URL should not contain the nfty topic": "Adres URL serwera nie powinien zawierać tematu nfty",
"Badge Duration (in hours)": "Czas trwania odznaki (w godzinach)",
"Enter the list of brokers": "Wprowadź listę brokerów",
@ -823,7 +822,7 @@
"Enable Kafka SSL": "Włącz Kafka SSL",
"Kafka SASL Options": "Opcje SASL Kafki",
"Mechanism": "Mechanizm",
"Pick a SASL Mechanism...": "Wybierz mechanizm SASL...",
"Pick a SASL Mechanism...": "Wybierz mechanizm SASL",
"nostrRelaysHelp": "Jeden adres URL przekaźnika w wierszu",
"nostrRecipients": "Klucze publiczne odbiorców (npub)",
"nostrRecipientsHelp": "format npub, po jednym w wierszu",
@ -903,7 +902,7 @@
"GrafanaOncallUrl": "Adres URL Grafana Oncall",
"Remote Browsers": "Zdalne przeglądarki",
"self-hosted container": "kontener hostowany samodzielnie",
"settingUpDatabaseMSG": "Konfigurowanie bazy danych. Może to trochę potrwać, prosimy o cierpliwość.",
"settingUpDatabaseMSG": "Konfigurowanie bazy danych. Może to zająć chwilę, bądź cierpliwy.",
"statusPageSpecialSlugDesc": "Specjalny slug {0}: ta strona zostanie wyświetlona, jeśli nie podano żadnego slugu",
"Search monitored sites": "Wyszukiwanie monitorowanych witryn",
"setup a new monitor group": "konfiguracja nowej grupy monitorów",
@ -917,5 +916,12 @@
"remoteBrowserToggle": "Domyślnie Chromium działa wewnątrz kontenera Uptime Kuma. Możesz użyć zdalnej przeglądarki, przełączając ten przełącznik.",
"useRemoteBrowser": "Używaj zdalnej przeglądarki",
"Add a new expiry notification day": "Dodaj nowy dzień wygaśnięcia powiadomienia",
"Remove the expiry notification": "Usunąć dzień powiadomienia o wygaśnięciu"
"Remove the expiry notification": "Usunąć dzień powiadomienia o wygaśnięciu",
"What is a Remote Browser?": "Co to jest zdalna przeglądarka?",
"Mentioning": "Oznaczenia",
"Don't mention people": "Nie oznaczaj nikogo",
"Mention group": "Oznacz {group}",
"Channel access token (Long-lived)": "Token dostępu kanału (długotrwały)",
"Your User ID": "Twój identyfikator użytkownika",
"locally configured mail transfer agent": "lokalnie skonfigurowany serwer poczty"
}

@ -198,7 +198,7 @@
"Required": "Requerido",
"webhookJsonDesc": "{0} é bom para qualquer servidor HTTP moderno, como Express.js",
"webhookAdditionalHeadersTitle": "Cabeçalhos Adicionais",
"webhookAdditionalHeadersDesc": "Define cabeçalhos adicionais enviados com o webhook. Cada cabeçalho pode ser definido como uma chave/valor JSON.",
"webhookAdditionalHeadersDesc": "Define cabeçalhos adicionais enviados com o webhook. Cada cabeçalho pode ser definido como um JSON chave/valor.",
"Webhook URL": "URL Do Webhook",
"Priority": "Prioridade",
"Read more": "Ver mais",
@ -547,7 +547,7 @@
"What you can try:": "O que você pode tentar:",
"apiKey-active": "Ativa",
"Expiry": "Expiração",
"endpoint": "endpoint",
"endpoint": "endpoint (URL Serviço)",
"pagertreeIntegrationUrl": "URL de Integração",
"pagertreeUrgency": "Urgência",
"telegramMessageThreadID": "(Opcional) ID da thread",
@ -605,7 +605,6 @@
"wayToGetLineChannelToken": "Primeiro acesse o {0}, crie um provedor e um canal (API de Mensagens), então você pode obter o token de acesso do canal e o ID do usuário nos itens de menu mencionados acima.",
"aboutMattermostChannelName": "Você pode substituir o canal padrão para o qual o Webhook envia postagens, inserindo o nome do canal no campo \"Nome do Canal\". Isso precisa ser habilitado nas configurações do Webhook do Mattermost. Por exemplo: #outro-canal",
"invertKeywordDescription": "Procure pela palavra-chave estar ausente em vez de presente.",
"jsonQueryDescription": "Faça uma consulta JSON na resposta e verifique o valor esperado (o valor de retorno será convertido em uma string para comparação). Confira {0} para a documentação sobre a linguagem de consulta. Você pode encontrar um playground {1}.",
"octopushTypePremium": "Premium (Rápido - recomendado para alertas)",
"octopushTypeLowCost": "Baixo Custo (Lento - às vezes bloqueado pelo operador)",
"octopushSMSSender": "Nome do Remetente de SMS: 3-11 caracteres alfanuméricos e espaço (a-zA-Z0-9)",
@ -635,7 +634,7 @@
"chromeExecutable": "Executável do Chrome/Chromium",
"Edit Maintenance": "Editar Manutenção",
"aboutIconURL": "Você pode fornecer um link para uma imagem em \"URL do Ícone\" para substituir a imagem de perfil padrão. Não será usado se o \"Ícone Emoji\" estiver configurado.",
"octopushAPIKey": "\"API Key\" da credencial HTTP API do painel de controle",
"octopushAPIKey": "\"Chave de API\" das credenciais da API HTTP no painel de controle",
"octopushLogin": "\"Login\" das credenciais da API HTTP no painel de controle",
"pushoversounds pushover": "Pushover (padrão)",
"pushoversounds bike": "Bicicleta",
@ -885,5 +884,33 @@
"statusPageSpecialSlugDesc": "Slug especial {0}: esta página será mostrada quando nenhum slug for fornecido",
"settingUpDatabaseMSG": "Configurando o banco de dados. Pode demorar um pouco, por favor, seja paciente.",
"Search monitored sites": "Pesquisar sites monitorados",
"ntfyPriorityHelptextAllEvents": "Todos os eventos são enviados com prioridade máxima"
"ntfyPriorityHelptextAllEvents": "Todos os eventos são enviados com prioridade máxima",
"What is a Remote Browser?": "O que é um Navegador Remoto ?",
"wayToGetHeiiOnCallDetails": "Como obter o ID do Trigger e as chaves de API é explicado na {documentação}",
"gtxMessagingApiKeyHint": "Você pode encontrar sua chave de API em: Minhas contas de roteamento > Mostrar informações da conta > Credenciais de API > API REST (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Do número de telefone/endereço de origem do caminho de transmissão (TPOA)",
"To Phone Number": "Para número de telefone",
"gtxMessagingToHint": "Formato internacional, com \"+\" inicial ({e164}, {e212} ou {e214})",
"Originator type": "Tipo de originador",
"Alphanumeric (recommended)": "Alfanumérico (recomendado)",
"Telephone number": "Número de telefone",
"cellsyntOriginatortypeAlphanumeric": "String alfanumérica (máximo de 11 caracteres alfanuméricos). Os destinatários não podem responder à mensagem.",
"cellsyntOriginatortypeNumeric": "Valor numérico (máximo de 15 dígitos) com número de telefone em formato internacional sem 00 inicial (por exemplo, o número do Reino Unido 07920 110 000 deve ser definido como 447920110000). Os destinatários podem responder à mensagem.",
"Originator": "Originador",
"Destination": "Destino",
"callMeBotGet": "Aqui você pode gerar um endpoint para {0}, {1} e {2}. Lembre-se de que você pode barrado por uma taxa limitadora. Os limites de taxa parecem ser: {3}",
"cellsyntOriginator": "Visível no celular do destinatário como originador da mensagem. Os valores permitidos e a função dependem do tipo de originador do parâmetro.",
"wayToGetWhapiUrlAndToken": "Você pode obter o URL da API e o token acessando o canal desejado em {0}",
"whapiRecipient": "Número de telefone/ID do contato/ID do grupo",
"API URL": "API URL",
"documentationOf": "{0} Documentação",
"Allow Long SMS": "Permitir SMS longos",
"cellsyntSplitLongMessages": "Divida mensagens longas em até 6 partes. 153 x 6 = 918 caracteres.",
"max 15 digits": "máximo de 15 dígitos",
"max 11 alphanumeric characters": "máximo de 11 caracteres alfanuméricos",
"wayToWriteWhapiRecipient": "O número de telefone com o prefixo internacional, mas sem o sinal de mais no início ({0}), o ID do contato ({1}) ou o ID do grupo ({2}).",
"cellsyntDestination": "Número de telefone do destinatário em formato internacional com 00 inicial seguido do código do país, por ex. 00447920110000 para o número do Reino Unido 07920 110 000 (máximo de 17 dígitos no total). Máximo de 25.000 destinatários separados por vírgula por solicitação HTTP.",
"Your User ID": "Sua ID de usuário",
"gtxMessagingFromHint": "Em telefones celulares, seus destinatários veem o TPOA exibido como remetente da mensagem. São permitidos até 11 caracteres alfanuméricos, um DDD, o DDI local ou números internacionais ({e164}, {e212} ou {e214})",
"Channel access token (Long-lived)": "Token de acesso ao canal (de longa duração)"
}

@ -441,5 +441,22 @@
"statusMaintenance": "Manutenção",
"Passive Monitor Type": "Tipo de Monitor Passivo",
"Custom": "Personalizar",
"General Monitor Type": "Tipo de Monitor Geral"
"General Monitor Type": "Tipo de Monitor Geral",
"Invert Keyword": "Palavra-chave invertida",
"setupDatabaseChooseDatabase": "Qual base de dados você deseja usar?",
"setupDatabaseEmbeddedMariaDB": "Não é necessário configurar nada. Esta imagem Docker possui o MariaDB incorporado e configurado automaticamente para você. O Uptime Kuma se conectará a esta base de dados através de um socket Unix.",
"setupDatabaseMariaDB": "Conecte-se a uma base de dados MariaDB externa. Você precisa configurar as informações de conexão com a base de dados.",
"setupDatabaseSQLite": "Um arquivo de base de dados simples, recomendado para implementações em pequena escala. Antes da versão 2.0.0, o Uptime Kuma utilizava o SQLite como base de dados padrão.",
"dbName": "Nome da Base de Dados",
"settingUpDatabaseMSG": "Configurando a base de dados. Isso pode levar algum tempo, por favor, seja paciente.",
"pushOthers": "Outros",
"Request Timeout": "Tempo Limite da Requisição",
"timeoutAfter": "Tempo limite após {0} segundos",
"Resend Notification if Down X times consecutively": "Reenviar Notificação se estiver em baixo X vezes consecutivas",
"styleElapsedTime": "Tempo decorrido abaixo da barra de pulsação.",
"Home": "Início",
"Expected Value": "Valor Esperado",
"Json Query": "Consulta JSON",
"Cannot connect to the socket server": "Não é possível conectar ao servidor de sockets",
"Reconnecting...": "Reconectando..."
}

@ -8,8 +8,8 @@
"Version": "Versiune",
"Check Update On GitHub": "Verifică actualizarea pe GitHub",
"Quick Stats": "Statistici Rapide",
"Up": "Sus",
"Down": "Jos",
"Up": "Funcțional",
"Down": "Nefuncțional",
"statusMaintenance": "Mentenanță",
"Maintenance": "Mentenanță",
"General Monitor Type": "Monitor de Tip General",
@ -45,11 +45,11 @@
"resendEveryXTimes": "Retrimite de {0} ori",
"resendDisabled": "Retrimiterea dezactivată",
"ignoreTLSError": "Ignoră erorile TLS/SSL pentru site-urile web HTTPS",
"upsideDownModeDescription": "Întoarce statusul cu susul în jos. Dacă serviciul este accesibil, este OFFLINE.",
"upsideDownModeDescription": "Întoarce statusul cu susul în jos. Dacă serviciul este accesibil, este Nefuncțional.",
"Upside Down Mode": "Modul cu Susul in Jos",
"Max. Redirects": "Nr. Max. de Redirecționări",
"Accepted Status Codes": "Coduri de Status Acceptate",
"Push URL": "Împinge URL",
"Push URL": "URL Push",
"needPushEvery": "Acest URL trebuie să fie contactat la fiecare {0} secunde.",
"pushOptionalParams": "Parametrii opționali: {0}",
"Save": "Salvează",
@ -60,21 +60,21 @@
"Dark": "Întunecat",
"Auto": "Automat",
"Normal": "Normal",
"Bottom": "Fund",
"Bottom": "Dedesubt",
"None": "Nimic",
"Timezone": "Fus Orar",
"Search Engine Visibility": "Vizibilitate în Motoarele de Căutare",
"Allow indexing": "Permite Indexarea",
"Change Password": "Schimbă Parola",
"Change Password": "Schimbaţi parola",
"Current Password": "Parola Curentă",
"New Password": "Parolă Nouă",
"Repeat New Password": "Repetă Parola Nouă",
"Update Password": "Actualizează Parola",
"Disable Auth": "Dezactivează Autentificarea",
"Enable Auth": "Activează Autentificarea",
"Please use this option carefully!": "Utilizează Această Opțiune cu Grijă!",
"Repeat New Password": "Repetați Parola Nouă",
"Update Password": "Actualizați parola",
"Disable Auth": "Dezactivați Autentificarea",
"Enable Auth": "Activați Autentificarea",
"Please use this option carefully!": "Vă rugăm să utilizați această opțiune cu atenție!",
"Logout": "Delogare",
"Leave": "Părăsește",
"Leave": "Părăsiți",
"I understand, please disable": "Am luat la cunoștință, dezactivează",
"Confirm": "Confirmă",
"Yes": "Da",
@ -82,17 +82,17 @@
"Username": "Nume de Utilizator",
"Password": "Parolă",
"Remember me": "Ține-mă Minte",
"No Monitors, please": "Niciun monitor, te rog",
"add one": "adaugă unul",
"No Monitors, please": "Fără monitoare, vă rog",
"add one": "adăugați unul",
"Resource Record Type": "Tipul de Înregistrare a Resurselor",
"Create your admin account": "Crează un Cont de Administrator",
"Create your admin account": "Creați-vă contul de administrator",
"Repeat Password": "Repetă Parola",
"Import Backup": "Importează Backup-ul",
"Export Backup": "Exporta Backup-ul",
"Import Backup": "Importă Backup",
"Export Backup": "Exportă Backup",
"Export": "Exportă",
"Import": "Importă",
"respTime": "Timp de Răspuns (ms)",
"Apply on all existing monitors": "Aplică pentru toate monitoarele existente",
"Apply on all existing monitors": "Aplicați pentru toate monitoarele existente",
"Clear Data": "Șterge Datele",
"Events": "Evenimente",
"Heartbeats": "Heartbeat-uri",
@ -101,7 +101,7 @@
"Pick Affected Monitors...": "Alege Monitoarele Afectate…",
"Start of maintenance": "Începerea Mentenanței",
"All Status Pages": "Toate Paginile de Status",
"Skip existing": "Sari Existente",
"Skip existing": "Omite Similare",
"Overwrite": "Suprascrie",
"Options": "Opțiuni",
"Keep both": "Păstrează Ambele",
@ -113,8 +113,8 @@
"Token": "Token",
"Show URI": "Arată URI",
"Tags": "Etichete",
"Tag with this name already exist.": "Deja Există o Etichetă cu Acest Nume.",
"Tag with this value already exist.": "Deja Există o Etichetă cu Această Valoare.",
"Tag with this name already exist.": "Eticheta cu acest nume există deja.",
"Tag with this value already exist.": "Eticheta cu această valoare există deja.",
"color": "Culoare",
"value (optional)": "valoare (opțional)",
"Gray": "Gri",
@ -125,17 +125,17 @@
"Indigo": "Indigo",
"Purple": "Violet",
"Custom": "Personalizat",
"Entry Page": "Pagina de Implicită",
"Entry Page": "Pagină de intrare",
"No Services": "Niciun Serviciu",
"All Systems Operational": "Toate Sistemele Operaționale",
"Partially Degraded Service": "Servicii Parțial Degradate",
"Degraded Service": "Servicii Degradate",
"Add Group": "Adaugă Grup",
"Add a monitor": "Adaugă Monitor",
"Edit Status Page": "Modifică Pagina de Status",
"Add Group": "Adăugare grup",
"Add a monitor": "Adăugați un monitor",
"Edit Status Page": "Modificați Pagina de Status",
"Status Page": "Pagina de Status",
"Status Pages": "Pagini de Status",
"defaultNotificationName": "A mea {notification} Alertă ({number})",
"defaultNotificationName": "Alerta {notification} mea ({number})",
"here": "aici",
"Required": "Necesar",
"webhook": "Webhook",
@ -148,16 +148,16 @@
"Server URL": "URL-ul Server-ului",
"Priority": "Prioritate",
"emojiCheatSheet": "Emoji-uri: {0}",
"Read more": "Vezi Mai Mult",
"appriseInstalled": "Apprise instalat.",
"Read more": "Citeşte mai mult",
"appriseInstalled": "Apprise este instalat.",
"appriseNotInstalled": "Apprise Neinstalat. {0}",
"Method": "Metodă",
"Body": "Corp",
"Headers": "Antete",
"PushUrl": "Împinge URL",
"PushUrl": "URL Push",
"BodyInvalidFormat": "Formatul corpului de request nu este valid: ",
"Monitor History": "Istoricul Monitorului",
"PasswordsDoNotMatch": "Parolele nu sunt la fel.",
"PasswordsDoNotMatch": "Parolele nu se potrivesc.",
"One record": "O înregistrare",
"Current User": "Utilizatorul Curent",
"topic": "Subiect",
@ -167,7 +167,7 @@
"Done": "Terminat",
"Info": "Informații",
"Security": "Securitate",
"Shrink Database": "Miceste Baza de Date",
"Shrink Database": "Micșorați baza de date",
"Default": "Implicit",
"HTTP Options": "Opțiuni HTTP",
"Title": "Titlu",
@ -180,69 +180,69 @@
"critical": "critic",
"dark": "întunecat",
"Post": "Postează",
"Last Updated": "Actualizat",
"Unpin": "Desprinde",
"Switch to Light Theme": "Schimbă la Tema Luminoasă",
"Show Tags": "Arată Etichetele",
"Hide Tags": "Ascunde Etichetele",
"Last Updated": "Ultima actualizare",
"Unpin": "Anulați fixarea",
"Switch to Light Theme": "Schimbați la Tema Luminoasă",
"Show Tags": "Afișați Etichetele",
"Hide Tags": "Ascundeți Etichetele",
"Description": "Descriere",
"No monitors available.": "Niciun monitor disponibil.",
"Discard": "Elimină",
"Cancel": "Anulează",
"No monitors available.": "Nu există monitoare disponibile.",
"Discard": "Eliminați",
"Cancel": "Anulați",
"Powered by": "Cu ajutorul",
"Customize": "Personalizează",
"Customize": "Personalizați",
"Custom Footer": "Subsol Personalizat",
"Custom CSS": "CSS Personalizat",
"deleteStatusPageMsg": "Ești sigur că vrei să ștergi această pagină de status?",
"deleteStatusPageMsg": "Sigur doriți să ștergeți această pagină de status?",
"Proxies": "Proxy-uri",
"default": "Implicit",
"enabled": "Activat",
"setAsDefault": "Setează ca Implicit",
"deleteProxyMsg": "Ești sigur că vrei să ștergi acest proxy pentru toate monitoarele?",
"Certificate Chain": "Lanț-ul Certificatului",
"setAsDefault": "Setați Ca Implicit",
"deleteProxyMsg": "Sigur doriți să ștergeți acest proxy pentru toate monitoarele?",
"Certificate Chain": "Lanț de certificate",
"Valid": "Valabil",
"Invalid": "Nevalabil",
"User": "Utilizator",
"Installed": "Instalat",
"Running": "Operează",
"Not running": "Nu operează",
"Not running": "Nu rulează",
"Remove Token": "Elimină token-ul",
"Start": "Start",
"Stop": "Stop",
"Add New Status Page": "Adaugă o Pagină de Status Nouă",
"Add New Status Page": "Adăugați o nouă pagină de status",
"Slug": "Slug",
"startOrEndWithOnly": "Începe sau termină doar cu {0}",
"startOrEndWithOnly": "Începe sau se termină numai cu {0}",
"No consecutive dashes": "Fără cratime consecutive",
"Next": "Înainte",
"No Proxy": "Niciun Proxy",
"Authentication": "Autentificate",
"Next": "Următorul",
"No Proxy": "Fără Proxy",
"Authentication": "Autentificare",
"HTTP Basic Auth": "Autentificare de bază HTTP",
"New Status Page": "Pagină de Status Nouă",
"Page Not Found": "Pagină Negăsită",
"Page Not Found": "Pagina nu a fost gasită",
"Backup": "Backup",
"About": "Despre",
"wayToGetCloudflaredURL": "(Cloudflared a fost descărcat de la {0})",
"wayToGetCloudflaredURL": "(Descarcă sub Cloudflare de la {0})",
"cloudflareWebsite": "Website-ul Cloudflare",
"Message:": "Mesaj:",
"HTTP Headers": "Antete HTTP",
"Trust Proxy": "Ai încredere în Proxy",
"Trust Proxy": "Proxy de încredere",
"Other Software": "Alt Software",
"For example: nginx, Apache and Traefik.": "De exemplu: nginx, Apache și Traefik.",
"Please read": "Te rog citește",
"Subject:": "Subiect:",
"Valid To:": "Valid Pâna la:",
"Valid To:": "Valabil Pâna la:",
"Days Remaining:": "Zile rămase:",
"Issuer:": "Emitent:",
"Fingerprint:": "Amprentă:",
"No status pages": "Nicio pagină de status",
"Domain Name Expiry Notification": "Notificare cu Privire la Expirarea Numelui de Domeniu",
"Domain Name Expiry Notification": "Notificare de expirare a numelui de domeniu",
"Proxy": "Proxy",
"Date Created": "Data Creării",
"Footer Text": "Text-ul pentru subsol",
"Footer Text": "Text de subsol",
"Show Powered By": "Arată ”Cu ajutorul”",
"Reverse Proxy": "Proxy invers",
"Domain Names": "Nume de domeniu",
"signedInDisp": "Autentificat ca {0}",
"signedInDisp": "Conectat ca {0}",
"signedInDispDisabled": "Autentificare Dezactivată.",
"RadiusSecret": "Secret Radius",
"RadiusSecretDescription": "Secret împărtășit cu client-ul și server-ul",
@ -253,22 +253,22 @@
"API Username": "Nume de utilizator al API-ului",
"API Key": "Cheie API",
"Also check beta release": "Verifică și actualizările beta",
"Using a Reverse Proxy?": "Folosești un Proxy Invers?",
"Check how to config it for WebSocket": "Află cum să îl configurezi pentru WebSocket",
"Using a Reverse Proxy?": "Utilizați un proxy invers?",
"Check how to config it for WebSocket": "Verificați cum să-l configurați pentru WebSocket",
"Steam Game Server": "Server de Joc Steam",
"Most likely causes:": "Cea mai probabilă cauză:",
"There might be a typing error in the address.": "Ar putea exista o eroare de scriere în adresă.",
"What you can try:": "Ce poți încerca:",
"Retype the address.": "Rescrie adresa.",
"Go back to the previous page.": "Mergi la pagina precedentă.",
"Go back to the previous page.": "Reveniți la pagina anterioară.",
"Coming Soon": "În curând",
"Connection String": "Șirul de conexiune",
"Query": "Query",
"Query": "Interogare",
"settingsCertificateExpiry": "Expirarea certificatului TLS",
"Setup Docker Host": "Configurează Docker Host",
"Connection Type": "Tipul Conexiunii",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "Ești sigur că vrei să ștergi acest docker host pentru toate montoarele?",
"deleteDockerHostMsg": "Sigur doriți să ștergeți acest docker host pentru toate monitoarele?",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Container Docker",
@ -280,12 +280,12 @@
"telegram": "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Token Robot",
"wayToGetTelegramToken": "Poți obține un token de la {0}.",
"wayToGetTelegramToken": "Puteți obține un token de la {0}.",
"Chat ID": "ID-ul Chat-ului",
"YOUR BOT TOKEN HERE": "TOKEN-UL TĂU DE ROBOT",
"chatIDNotFound": "ID-ul Chat-ului nu a fost găsit; te rog întâi trimite un mesaj către robot",
"disableCloudflaredNoAuthMsg": "Ești în modul fără autentificare, nu ai nevoie de o parola.",
"wayToGetLineNotifyToken": "Poți obține un token de acces de la {0}",
"YOUR BOT TOKEN HERE": "TOKEN-UL TĂU DE BOT AICI",
"chatIDNotFound": "ID-ul de chat nu a fost găsit; Vă rugăm să trimiteți mai întâi un mesaj acestui bot",
"disableCloudflaredNoAuthMsg": "Sunteți în modul No Auth, nu este necesară o parolă.",
"wayToGetLineNotifyToken": "Puteți obține un token de acces de la {0}",
"Examples": "Exemple",
"Home Assistant URL": "URL-ul de la Home Assistant",
"Long-Lived Access Token": "Token de acces cu durata de viață mare",
@ -294,10 +294,10 @@
"Trigger type:": "Tipul Declanșatorului:",
"Event type:": "Tipul Evenimentului:",
"Event data:": "Datele Evenimentului:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Apoi alege o acțiune, de exemplu, schimbă un LED RGB în roșu.",
"Frontend Version": "Versiunea Frontend-ului",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Apoi alegeți o acțiune, de exemplu comutați scena în care o lumină RGB este roșie.",
"Frontend Version": "Versiune Frontend",
"Frontend Version do not match backend version!": "Versiunea Frontend-ului nu este aceeași cu cea a backend-ului!",
"backupRecommend": "Te rog fă o copie a directorului (./data/) în loc.",
"backupRecommend": "Vă rugăm să faceți backup direct pentru volumul sau folderul de date (./data/).",
"Optional": "Opțional",
"squadcast": "Squadcast",
"or": "sau",
@ -319,7 +319,7 @@
"lastDay2": "Penultima zi a Lunii",
"lastDay3": "Antepenultima zi a Lunii",
"No Maintenance": "Fără mentenanță",
"pauseMaintenanceMsg": "Ești sigur că vrei sa pui pe pauză?",
"pauseMaintenanceMsg": "Sunteți sigur că vreți sa puneți pe pauză?",
"maintenanceStatus-under-maintenance": "În mentenanță",
"maintenanceStatus-inactive": "Inactiv",
"maintenanceStatus-scheduled": "Planificat",
@ -331,16 +331,16 @@
"Enable DNS Cache": "(Depreciat) Activează DNS Cache pentru monitoarele HTTP(s)",
"Enable": "Activează",
"Disable": "Dezactivează",
"Effective Date Range": "Interval în care se aplică (Optional)",
"Effective Date Range": "Interval în care se aplică (Opțional)",
"Schedule Maintenance": "Planifică Mentenanță",
"Date and Time": "Dată și Oră",
"DateTime Range": "Interval DatăOră",
"loadingError": "Nu se pot obține datele, te rog încearcă mai târziu.",
"loadingError": "Nu se pot prelua datele, vă rugăm să încercați din nou mai târziu.",
"plugin": "Plugin | Plugin-uri",
"install": "Instalează",
"installing": "Instalare",
"uninstall": "Dezinstalează",
"confirmUninstallPlugin": "Ești sigur că vrei să dezinstalezi acest plugin?",
"confirmUninstallPlugin": "Sigur doriți să dezinstalați acest plugin?",
"smtp": "Email (SMTP)",
"secureOptionNone": "Niciunul / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (456)",
@ -352,49 +352,49 @@
"Discord Webhook URL": "URL-ul Webhook-ului Discord",
"Bot Display Name": "Numele Robotului",
"Prefix Custom Message": "Prefix Personalizat",
"Hello @everyone is...": "Salut {'@'}everyone sunt…",
"wayToGetTeamsURL": "Poți învăța cum să creezi un URL webhook {0}.",
"wayToGetZohoCliqURL": "Poți învăța cum să creezi un URL webhook {0}.",
"needSignalAPI": "Trebuie să ai un client signal cu API-ul REST.",
"Hello @everyone is...": "Bună {'@'}toată lumea este…",
"wayToGetTeamsURL": "Puteți afla cum să creați o adresă URL webhook {0}.",
"wayToGetZohoCliqURL": "Puteți afla cum să creați o adresă URL webhook {0}.",
"needSignalAPI": "Trebuie să aveți un client signal cu API-ul REST.",
"Number": "Număr",
"Recipients": "Destinatari",
"Access Token": "Token de acces",
"Channel access token": "Token de acces al canalului",
"Line Developers Console": "Consola Dezvoltatorilor Line",
"lineDevConsoleTo": "Consola Dezvoltatorilor Line - {0}",
"Line Developers Console": "Consola pentru dezvoltatori de linie",
"lineDevConsoleTo": "Consola Dezvoltatorilor de linie - {0}",
"Basic Settings": "Setări de Bază",
"User ID": "ID-ul Utilizatorului",
"Messaging API": "API-ul pentru Mesagerie",
"Icon URL": "URL-ul Pictogramei",
"dataRetentionTimeError": "Perioada de renenție trebuie să fie 0 sau mai mare",
"infiniteRetention": "Setează la „0” pentru retenție pe perioadă nedeterminată.",
"confirmDeleteTagMsg": "Ești sigur că vrei să ștergi această etichetă? Monitoarele asociate cu această etichetă nu vor fi șterse.",
"enableGRPCTls": "Permite trimiterea cererilor gRPC cu conexiune TLS",
"dataRetentionTimeError": "Perioada de retenție trebuie să fie 0 sau mai mare",
"infiniteRetention": "Setați la „0” pentru retenție pe perioadă nedeterminată.",
"confirmDeleteTagMsg": "Sigur doriți să ștergeți această etichetă? Monitoarele asociate cu această etichetă nu vor fi șterse.",
"enableGRPCTls": "Permiteți trimiterea cererii gRPC cu conexiune TLS",
"grpcMethodDescription": "Numele metodei este convertit în format camelCase, cum ar fi sayHello, check etc.",
"deleteMonitorMsg": "Ești sigur că vrei să ștergi acest monitor?",
"deleteMaintenanceMsg": "Ești sigur că vrei să ștergi această mentenanță?",
"dnsPortDescription": "Port-ul server-ului DNS. Este implicit 53. Poți schimba acest port oricând.",
"resolverserverDescription": "Cloudflare este server-ul implicit. Poți schimba asta oricând.",
"rrtypeDescription": "Selectează tipul RR pe care vrei să îl monitorizezi",
"pauseMonitorMsg": "Ești sigur că vrei să pui pe pauză?",
"clearEventsMsg": "Ești sigur că vrei să ștergi toate evenimentele asociate cu acest monitor?",
"clearHeartbeatsMsg": "Ești sigur că vrei să ștergi toate heartbeat-urile asociate cu acest monitor?",
"confirmClearStatisticsMsg": "Ești sigur că vrei să ștergi TOATE statisticile?",
"confirmImportMsg": "Ești sigur că vrei să importezi backup-ul? Te rog verifică dacă ai selectat varianta corectă de importare.",
"twoFAVerifyLabel": "Te rog introdu token-ul pentru a verifica Autentificarea în Doi Pași:",
"tokenValidSettingsMsg": "Token-ul este valid! Acum poți salva setările legate de Autentificarea în Doi Pași.",
"confirmEnableTwoFAMsg": "Ești sigur că vrei să activezi Autentificarea în Doi Pași?",
"deleteMonitorMsg": "Sigur doriți să ștergeți acest monitor?",
"deleteMaintenanceMsg": "Sigur doriți să ștergeți această mentenanță?",
"dnsPortDescription": "Port-ul server-ului DNS. Este implicit 53. Puteți schimba acest port oricând.",
"resolverserverDescription": "Cloudflare este server-ul implicit. Puteți schimba asta oricând.",
"rrtypeDescription": "Selectați tipul RR pe care doriți să îl monitorizați",
"pauseMonitorMsg": "Sigur vrei să pui pe pauză?",
"clearEventsMsg": "Sigur doriți să ștergeți toate evenimentele pentru acest monitor?",
"clearHeartbeatsMsg": "Sigur doriți să ștergeți toate heartbeat-urile pentru acest monitor?",
"confirmClearStatisticsMsg": "Sigur doriți să ștergeți TOATE statisticile?",
"confirmImportMsg": "Sigur doriți să importați copia de rezervă? Vă rugăm să verificați că ați selectat opțiunea corectă de import.",
"twoFAVerifyLabel": "Va rugăm să introduceți token-ul pentru a verifica Autentificarea în Doi Pași:",
"tokenValidSettingsMsg": "Token-ul este valid! Acum puteți salva setările legate de Autentificarea în Doi Pași.",
"confirmEnableTwoFAMsg": "Sigur doriți să activați Autentificarea în Doi Pași?",
"recurringIntervalMessage": "Rulează o dată pe zi | Rulează o dată la {0} zile",
"affectedMonitorsDescription": "Selectează monitoarele afectate de această mentenanță",
"atLeastOneMonitor": "Selectează cel puțin un monitor afectat",
"passwordNotMatchMsg": "Parolele nu se potrivesc.",
"notificationDescription": "Notificările trebuie atribuite unui monitor pentru a funcționa.",
"backupDescription": "Acum poți face backup la toate monitoarele și notificările într-un fișier JSON.",
"affectedMonitorsDescription": "Selectați monitoarele care sunt afectate mentenanța curentă",
"atLeastOneMonitor": "Selectați cel puțin un monitor afectat",
"passwordNotMatchMsg": "Parola repetată nu se potrivește.",
"notificationDescription": "Notificările trebuie alocate unui monitor pentru a funcționa.",
"backupDescription": "Puteți face backup pentru toate monitoarele și notificările într-un fișier JSON.",
"backupDescription2": "Notă: istoricul și datele evenimentelor nu sunt incluse.",
"endpoint": "Punct final",
"octopushAPIKey": "„Cheia API” din credențialele HTTP API în panoul de control",
"octopushLogin": "„Logare” din credențialele HTTP API în panoul de control",
"promosmsLogin": "Numele de Login API",
"promosmsLogin": "Nume de conectare API",
"promosmsPassword": "Parola API",
"pushoversounds pushover": "Pushover (implicit)",
"pushoversounds bike": "Bicicletă",
@ -459,13 +459,13 @@
"Heartbeat Interval": "Interval Heartbeat",
"Resend Notification if Down X times consequently": "Retrimite Notificarea dacă se Întâmpină Eroarea de X ori consecutiv",
"retriesDescription": "Numărul maxim de reîncercări înainte ca serviciul să fie marcat offline și să se trimită o notificare",
"maxRedirectDescription": "Numărul maxim de redirecționări permise. Setează la „0” pentru a dezactiva redirecționările.",
"Theme - Heartbeat Bar": "Temă - Bara de Heartbeat",
"Discourage search engines from indexing site": "Descurajează Motoarele de Căutare din a Indexa Acest Site",
"disableauth.message1": "Ești sigur că vrei să {disableAuth}?",
"disable authentication": "{disableAuth}",
"disableauth.message2": "Este proiectat pentru scenarii {intendThirdPartyAuth} în fața Uptime Kuma, cum ar fi Cloudflare Access, Authelia, sau alt mecanism de autentificare.",
"where you intend to implement third-party authentication": "în care intenționezi să implementezi soluții terțe de autentificare",
"maxRedirectDescription": "Numărul maxim de redirecționări permise. Setați la 0 pentru a dezactiva redirecționările.",
"Theme - Heartbeat Bar": "Temă - Bara Heartbeat",
"Discourage search engines from indexing site": "Descurajează motoarele de căutare să indexeze acest site",
"disableauth.message1": "Sigur doriți să {disableAuth}?",
"disable authentication": "dezactivați autentificarea",
"disableauth.message2": "Este conceput pentru scenarii {intendThirdPartyAuth} în fața Uptime Kuma, cum ar fi Cloudflare Access, Authelia sau alte mecanisme de autentificare.",
"where you intend to implement third-party authentication": "unde intenționați să implementați autentificarea terță parte",
"Login": "Logare",
"Notification Type": "Tipul Notificării",
"Email": "Email",
@ -477,100 +477,100 @@
"Default enabled": "Implicit activat",
"Create": "Creează",
"Schedule maintenance": "Programează Mentenanță",
"Select status pages...": "Selectează pagina de status…",
"alertNoFile": "Te rog selectează un fișier de importat.",
"alertWrongFileType": "Te rog selectează un fișier de tip JSON.",
"Select status pages...": "Selectați paginile de status…",
"alertNoFile": "Vă rugăm să selectați un fișier de importat.",
"alertWrongFileType": "Vă rugăm să selectați un fișier JSON.",
"Clear all statistics": "Șterge toate Statisticile",
"Setup 2FA": "Configurează Autentificarea în Doi Pași",
"Two Factor Authentication": "Autentificare în Doi Pași",
"Inactive": "Inactiv",
"Add New below or Select...": "Adaugă Nou Mai Jos sau Selectează…",
"Add New below or Select...": "Adăugați Nou mai jos sau selectați…",
"Pink": "Roz",
"Search...": "Caută…",
"Search...": "Căutare…",
"Avg. Ping": "Ping Mediu",
"Avg. Response": "Timp de Răspuns Mediu",
"statusPageNothing": "Nimic aici, te rog adaugă un grup sau un monitor.",
"Go to Dashboard": "Mergi la Panoul de Control",
"statusPageNothing": "Nimic aici, vă rugăm să adăugați un grup sau un monitor.",
"Go to Dashboard": "Accesați Tabloul de Control",
"webhookJsonDesc": "{0} este bun pentru orice server HTTP modern cum ar fi Express.js",
"webhookAdditionalHeadersDesc": "Setează antete adiționale trimise împreună cu webhook-ul. Fiecare antet ar trebui definit ca și cheie/valoare JSON.",
"HeadersInvalidFormat": "Formatul header-urilor de request nu este valid: ",
"clearDataOlderThan": "Păstrează istoricul monitorului pentru {0} zile.",
"records": "înregistrări",
"steamApiKeyDescription": "Pentru a monitoriza un server de joc Steam, ai nevoie de un o cheie pentru „Web-API„-ul Steam. Poți înregistra o astfel de cheie aici: ",
"steamApiKeyDescription": "Pentru monitorizarea unui server de joc Steam aveți nevoie de o cheie Steam Web-API. Vă puteți înregistra cheia API aici: ",
"recent": "Recent",
"Steam API Key": "Cheia API Steam",
"Pick a RR-Type...": "Alege un Tip-RR…",
"Pick Accepted Status Codes...": "Alege Codurile de Status Acceptate…",
"Pick a RR-Type...": "Alegeți un Tip-RR…",
"Pick Accepted Status Codes...": "Alegeți Codurile de Status Acceptate…",
"Create Incident": "Creează un Incident",
"primary": "implicit",
"primary": "principal",
"light": "luminos",
"Please input title and content": "Te rog adaugă un titlu și conținut",
"Please input title and content": "Vă rugăm să introduceți titlul și conținutul",
"Created": "Creat",
"Switch to Dark Theme": "Schimbă la Tema Întunecată",
"Add one": "Adaugă unul",
"Switch to Dark Theme": "Schimbați la Tema Întunecată",
"Add one": "Adăugați unul",
"No Monitors": "Niciun monitor",
"Untitled Group": "Grup fără nume",
"Services": "Servicii",
"shrinkDatabaseDescription": "Declanșează database VACUUM pentru SQLite. Dacă baza ta de date a fost creată după 1.10.0, AUTO_VACUUM este deja activat și această acțiune nu este necesară.",
"proxyDescription": "Proxy-urile trebuie să fie atribuite unui monitor pentru a funcționa.",
"enableProxyDescription": "Acest proxy nu va afecta cererile monitoarelor până este activat. Poți dezactiva temporar proxy-ul pentru toate monitoarele.",
"setAsDefaultProxyDescription": "Acest proxy va fi activat implicit pentru toate monitoarele noi. Poți totuși să îl dezactivezi separat pentru fiecare monitor.",
"enableProxyDescription": "Acest proxy nu va avea efect asupra solicitărilor monitoarelor până când nu este activat. Puteți controla dezactivarea temporară a proxy-ului de pe toate monitoarele prin starea de activare.",
"setAsDefaultProxyDescription": "Acest proxy va fi activat în mod implicit pentru monitoare noi. Puteți dezactiva în continuare proxy-ul separat pentru fiecare monitor.",
"Not installed": "Neinstalat",
"Accept characters:": "Acceptă caractere:",
"The slug is already taken. Please choose another slug.": "Acest slug este deja luat. Te rog alege alt slug.",
"The slug is already taken. Please choose another slug.": "Slugul este deja luat. Vă rugăm să alegeți un alt slug.",
"Don't know how to get the token? Please read the guide:": "Nu știi cum să obții token-ul? Te rog citește acest ghid:",
"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.": "Conexiunea curentă s-ar putea pierde dacă ești în proces de conectare printr-un tunel Cloudflare. Ești sigur că vrei să îl oprești? Tastează-ți parola curentă pentru a confirma.",
"Certificate Expiry Notification": "Notificare cu privire la expirarea certificatului",
"Certificate Expiry Notification": "Notificare de expirare a certificatului",
"Show update if available": "Arată actualizarea dacă e disponibilă",
"The resource is no longer available.": "Această resursă nu mai este disponibilă.",
"certificationExpiryDescription": "Monitoarele HTTPS declanșează notificarea când certificatul TLS expiră în:",
"Docker Hosts": "Gazde Docker",
"supportTelegramChatID": "Suport Mesaje Directe / Grup / ID-ul Canalului de Text",
"wayToGetTelegramChatID": "Poți obține ID-ul chat-ului prin trimiterea unui mesaj către robot și mergând la acest URL pentru a vedea chat_id:",
"trustProxyDescription": "Ai incredere in antetele 'X-Forwarded-*'. Dacă vrei să obții IP-ul corect al client-ului și Uptime Kuma este în spatele unui proxy, cum ar fi Nginx sau Apache, trebuie să activezi asta.",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Token-ul de acces cu durată de viață mare poate fi creat dacă dai click pe numele tău de profil (stânga jos) și prin derularea până la capătul paginii și click pe „Creează Token”. ",
"wayToGetTelegramChatID": "Puteți obține ID-ul chat-ului prin trimiterea unui mesaj către robot și accesând acest URL pentru a vedea chat_id:",
"trustProxyDescription": "Aveți incredere in antetele 'X-Forwarded-*'. Dacă doriți să obțineți IP-ul corect al client-ului și Uptime Kuma este în spatele unui proxy, cum ar fi Nginx sau Apache, ar trebui să activați acest lucru.",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Token-ul de acces cu durată de viață mare poate fi creat dând click pe numele profilului dvs. (stânga jos) și derulând în jos, apoi faceți clic pe Creare Token. ",
"Notification Service": "Serviciu de Notificări",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "O listă cu serviciile de notificare poate fi găsită în Home Assistant sub „Opțiuni Dezvoltator > Servicii” caută „notificare” pentru a găsi numele dispozitivului/telefonului.",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "O listă de servicii de notificare poate fi găsită în Home Assistant, sub „Instrumente pentru dezvoltatori > Servicii”, căutați „notificare” pentru a găsi numele dispozitivului/telefonului dvs.",
"backupOutdatedWarning": "Depășit: Pentru că au fost adăugate multe funcționalități, iar această funcție de backup este neîntreținută, nu poate genera sau restaura un backup complet.",
"lastDay4": "Răsantepenultima zi a Lunii",
"Display Timezone": "Afișează Fusul Orar",
"dnsCacheDescription": "Nu funcționează in anumite medii IPv6, dezactivează dacă întâmpini probleme.",
"dnsCacheDescription": "Este posibil să nu funcționeze în unele medii IPv6, dezactivați-l dacă întâmpinați probleme.",
"Single Maintenance Window": "Fereastră unică de timp pentru mentennanță",
"Maintenance Time Window of a Day": "Fereastra de timp alocată pentru mentenanță dintr-o zi",
"uninstalling": "Dezinstalare",
"Ignore TLS Error": "Ignoră erorile TLS",
"wayToGetDiscordURL": "Poți obține asta mergând în Setări Server -> Integrări -> Vezi Webhook-urile -> Webhook Nou",
"wayToCheckSignalURL": "Poți verifica acest URL pentru a vizualiza cum să configurezi unul:",
"wayToGetLineChannelToken": "Pentru început, accesează {0}, creează un furnizor și canal (API-ul Mesageriei), apoi poți obține token-ul de acces al canalului si ID-ul utilizatorului din itemii de meniu mentionati mai sus.",
"aboutIconURL": "Poți furniza un link către o pictogramă la secțiunea „URL-ul Pictogramei” pentru a suprascrie imaginea de profil implicită. Nu va fi folosită dacă există un emoticon configurat deja.",
"wayToGetDiscordURL": "Puteți obține acest lucru mergând la Setări server -> Integrări -> Vizualizați Webhooks -> Webhook nou",
"wayToCheckSignalURL": "Puteți verifica această adresă URL pentru a vedea cum să configurați una:",
"wayToGetLineChannelToken": "Mai întâi accesați {0}, creați un furnizor și un canal (API-ul de mesagerie), apoi puteți obține simbolul de acces la canal și ID-ul utilizatorului din elementele de meniu menționate mai sus.",
"aboutIconURL": "Puteți furniza un link către o imagine în „Adresa URL a pictogramei” pentru a înlocui fotografia de profil implicită. Nu va fi folosit dacă este setat Icon Emoji.",
"Channel Name": "Nume Canal",
"aboutMattermostChannelName": "Poți suprascrie canalul implicit pe care Webhook-ul îl folosește prin introducerea numelui canalului în câmpul „Nume Canal”. Acesta trebuie să fie activat în setările Webhook-ului Mattermost. Ex: #alt-canal",
"acceptedStatusCodesDescription": "Selectează codurile de status care sunt considerate un răspuns de succes.",
"deleteNotificationMsg": "Ești sigur că vrei să ștergi această notificare pentru toate monitoarele?",
"enableDefaultNotificationDescription": "Această notificare va fi activată implicit pentru toate monitoarele noi. Poți totuși să o dezactivezi individual pentru fiecare monitor.",
"importHandleDescription": "Alege „Sari Existente” dacă vrei să sari peste fiecare monitor sau notificare cu același nume. „Suprascrie” va șterge toate monitoarele și notificările existente.",
"confirmDisableTwoFAMsg": "Ești sigur că vrei să dezactivezi Autentificarea în Doi Pași?",
"affectedStatusPages": "Afișează acest mesaj de mentenanță pe paginile de status selectate",
"keywordDescription": "Caută cuvântul cheie în HTML simplu sau JSON. Această căutare ține cont de majuscule.",
"backupDescription3": "Datele importante, cum ar fi token-urile notificărilor sunt incluse în fișierul exportat; te rog stochează-l în siguranță.",
"pushoversounds pianobar": "Pian",
"aboutMattermostChannelName": "Puteți înlocui canalul implicit pe care postează Webhook-ul introducând numele canalului în câmpul „Nume canal”. Acest lucru trebuie să fie activat în setările Mattermost Webhook. Ex: #alt-canal",
"acceptedStatusCodesDescription": "Selectați codurile de status care sunt considerate un răspuns de succes.",
"deleteNotificationMsg": "Sigur doriți să ștergeți această notificare pentru toate monitoarele?",
"enableDefaultNotificationDescription": "Această notificare va fi activată în mod implicit pentru monitoare noi. Puteți dezactiva în continuare notificarea separat pentru fiecare monitor.",
"importHandleDescription": "Alegeți „Omite Similare” dacă doriți să omiteți fiecare monitor sau notificare cu același nume. „Suprascrie” va șterge fiecare monitor și notificare existente.",
"confirmDisableTwoFAMsg": "Sigur doriți să dezactivați Autentificarea în Doi Pași?",
"affectedStatusPages": "Afișați acest mesaj de mentenanță pe paginile de status selectate",
"keywordDescription": "Căutați cuvântul cheie în HTML simplu sau răspuns JSON. Căutarea face distincție între majuscule și minuscule.",
"backupDescription3": "Datele importante, cum ar fi tokenele de notificare, sunt incluse în fișierul exportat; vă rugăm să păstrați exportul în siguranță.",
"pushoversounds pianobar": "Bar cu pian",
"pushoversounds siren": "Sirenă",
"pushoversounds spacealarm": "Alarmă Spațială",
"pushoversounds persistent": "Persistent (lung)",
"gotify": "Gotify",
"clicksendsms": "ClickSend SMS",
"wayToGetKookBotToken": "Creează o aplicație și obține token-ul robot la {0}",
"wayToGetKookGuildID": "Activează „Modul Dezvoltator” în setările Kook și dă click pe breaslă (guild) pentru a-i obține ID-ul",
"wayToGetKookBotToken": "Creați o aplicație și obțineți tokenul dvs. robot la {0}",
"wayToGetKookGuildID": "Activați „Modul dezvoltator” în setarea Kook și faceți clic dreapta pe breaslă pentru a obține ID-ul acesteia",
"pushoverDesc1": "Prioritate de urgență (2) are o pauză implicită de 30 de secunde între reîncercări și expiră după o oră.",
"Setup Proxy": "Configurare Proxy",
"Proxy Protocol": "Protocol Proxy",
"For safety, must use secret key": "Pentru securitate, trebuie să folosești cheia secretă",
"For safety, must use secret key": "Pentru siguranță, trebuie să utilizați cheia secretă",
"promosmsTypeFlash": "SMS FLASH - Mesajul va fi afișat automat pe dispozitivul destinatarului. Valabil doar către destinatarii din Polonia.",
"promosmsTypeEco": "SMS ECO - ieftin dar încet și deseori supraîncărcat. Valabil doar către destinatarii din Polonia.",
"SMS Type": "Tip SMS",
"checkPrice": "Verifică {0} prețurile:",
"apiCredentials": "Credențiale API",
"octopushLegacyHint": "Folosești versiunea veche de Octopush (2011-2020) sau noua versiune?",
"octopushLegacyHint": "Folosiți versiunea veche a Octopush (2011-2020) sau versiunea nouă?",
"Check octopush prices": "Verifică prețurile octopush {0}.",
"octopushPhoneNumber": "Număr de telefon (format internațional, ex : +33612345678 ",
"LunaSea Device ID": "ID Dispozitiv LunaSea",
@ -593,7 +593,7 @@
"Free Mobile User Identifier": "Identificator utilizator Free Mobile",
"Free Mobile API Key": "Cheie API Free Mobile",
"Proto Service Name": "Nume serviciu Proto",
"Enable TLS": "Activează TLS",
"Enable TLS": "Activați TLS",
"Economy": "Economie",
"SMSManager API Docs": "Documente API SMSManager ",
"Gateway Type": "Tip gateway",
@ -605,13 +605,13 @@
"Proto Method": "Metodă Proto",
"Proto Content": "Conținut Proto",
"Lowcost": "Cost scăzut",
"You can divide numbers with": "Poți împărți numerele cu",
"You can divide numbers with": "Puteți împărți numerele cu",
"Huawei": "Huawei",
"Proxy Server": "Server Proxy",
"Proxy server has authentication": "Serverul Proxy are autentificare",
"WebHookUrl": "WebHookURL",
"aboutWebhooks": "Mai multe detalii despre Webhooks pe: {0}",
"signalImportant": "IMPORTANT: Nu poți amesteca grupurile și numerele în recipiente!",
"signalImportant": "IMPORTANT: Nu puteți amesteca grupuri și numere în destinatari!",
"Bark Group": "Grup Bark",
"Bark Sound": "Sunet Bark",
"SecretKey": "CheieSecretă",
@ -621,12 +621,12 @@
"successKeywordExplanation": "Cuvântul cheie MQTT care va fi considerat succes",
"successKeyword": "Cuvânt Cheie Succes",
"pushViewCode": "Cum se utilizează monitorul Push? (Vizualizare cod)",
"setupDatabaseChooseDatabase": "Ce bază de date dorești să utilizezi?",
"setupDatabaseMariaDB": "Conectează-te la o bază de date externă MariaDB. Trebuie să setezi informațiile de conectare la baza de date.",
"setupDatabaseChooseDatabase": "Ce bază de date doriți să utilizați?",
"setupDatabaseMariaDB": "Conectați-vă la o bază de date externă MariaDB. Trebuie să setați informațiile de conectare la baza de date.",
"setupDatabaseSQLite": "Un fișier de bază de date simplu, recomandat pentru implementări la scară mică. Înainte de v2.0.0, Uptime Kuma folosea SQLite ca bază de date implicită.",
"dbName": "Numele bazei de date",
"pagertreeCritical": "Critic",
"setupDatabaseEmbeddedMariaDB": "Nu trebuie să setezi nimic. Această imagine Docker a încorporat și configurat automat MariaDB pentru tine. Uptime Kuma se va conecta la această bază de date prin socket Unix.",
"setupDatabaseEmbeddedMariaDB": "Nu trebuie să setați nimic. Această imagine Docker a încorporat și configurat automat MariaDB pentru dvs. Uptime Kuma se va conecta la această bază de date prin socket Unix.",
"statusPageSpecialSlugDesc": "Slug special {0}: această pagină va fi afișată atunci când nu este furnizat niciun slug",
"chromeExecutableDescription": "Pentru utilizatorii Docker, dacă Chromium nu este încă instalat, instalarea și afișarea rezultatului testului poate dura câteva minute. Este nevoie de 1 GB de spațiu pe disc.",
"apiKeyAddedMsg": "Cheia dvs. API a fost adăugată. Vă rugăm să rețineți că nu va fi afișată din nou.",
@ -638,7 +638,7 @@
"settingUpDatabaseMSG": "Configurarea bazei de date. Poate dura ceva timp, vă rugăm să aveți răbdare.",
"Search monitored sites": "Căutați site-uri monitorizate",
"pushoverMessageTtl": "Mesaj TTL (secunde)",
"matrixDesc1": "Poți găsi ID-ul camerei interne uitându-te în rubrica avansată a setărilor camerei în clientul tau Matrix. Ar trebui să arate așa QMdRCpUlfLwsfjxye6:home.server.",
"matrixDesc1": "Puteți găsi ID-ul intern al camerei uitându-vă în secțiunea avansată a setărilor camerei din clientul dvs. Matrix. Ar trebui să arate ca !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Este foarte recomandat să creați un utilizator nou și să nu utilizați propriul simbol de acces al utilizatorului Matrix, deoarece acesta va permite accesul deplin la contul dvs. și la toate camerele la care v-ați alăturat. În schimb, creați un utilizator nou și invitați-l doar în sala în care doriți să primiți notificarea. Puteți obține tokenul de acces rulând {0}",
"Notify Channel": "Canal de Notificare",
"aboutNotifyChannel": "Canalul de notificare va declanșa o notificare pe desktop sau pe mobil pentru toți membrii canalului, indiferent dacă disponibilitatea acestora este setată activ sau absent.",
@ -671,7 +671,7 @@
"templateMonitorJSON": "object care descrie monitorul",
"noDockerHostMsg": "Nu este disponibil. Configurați mai întâi un host Docker.",
"DockerHostRequired": "Vă rugăm să setați Host Docker pentru acest monitor.",
"tailscalePingWarning": "Pentru a utiliza monitorul Tailscale Ping, trebuie să instalezi Uptime Kuma fără Docker și, de asemenea, să instalezi clientul Tailscale pe server.",
"tailscalePingWarning": "Pentru a utiliza monitorul Tailscale Ping, trebuie să instalați Uptime Kuma fără Docker și, de asemenea, să instalați clientul Tailscale pe server.",
"endDateTime": "Dată/Oră de final",
"cronSchedule": "Program: ",
"enableNSCD": "Activare NSCD (Name Service Cache Daemon) pentru memorarea în cache a tuturor solicitărilor DNS",
@ -689,9 +689,8 @@
"emailTemplateLimitedToUpDownNotification": "disponibil numai pentru heartbeat-uri UP/DOWN, altfel nul",
"emailTemplateStatus": "Stare",
"invertKeywordDescription": "Căutați după cuvântul cheie să fie absent și nu prezent.",
"jsonQueryDescription": "Efectuați o interogare json după răspuns și verificați valoarea așteptată (valoarea returnată va fi convertită în șir pentru comparație). Consultați {0} pentru documentația despre limbajul de interogare. Un playground poate fi găsit {1}.",
"goAlertInfo": "GoAlert este o aplicație open source pentru programarea apelurilor, escalări automate și notificări (cum ar fi SMS-uri sau apeluri vocale). Angajați automat persoana potrivită, în modul potrivit și la momentul potrivit! {0}",
"goAlertIntegrationKeyInfo": "Obține cheia generică de integrare API pentru serviciu în formatul \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" de obicei valoarea parametrului token al URL-ului copiat.",
"goAlertIntegrationKeyInfo": "Obțineți cheia generică de integrare API pentru serviciu în formatul \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" de obicei valoarea parametrului token al URL-ului copiat.",
"SecretAccessKey": "Secret AccessKey",
"SignName": "NumeSemn",
"Bark API Version": "Versiunea API Bark",
@ -724,7 +723,7 @@
"smseagleRecipient": "Destinatar(i) (mai mulți trebuie despărțiți prin virgulă)",
"smseagleToken": "Token Acces API",
"smseagleUrl": "URL-ul dispozitivului tău SMSEagle",
"smseagleEncoding": "Trimite ca Unicode",
"smseagleEncoding": "Trimiteți ca Unicode",
"smseaglePriority": "Prioritate mesaj (0-9, implicit = 0)",
"Recipient Number": "Număr de telefon Destinatar",
"From Name/Number": "Nume Expeditor/Număr",
@ -749,7 +748,7 @@
"Continue": "Continuă",
"Add Another": "Adaugă Altul",
"Key Added": "Cheie Adăugată",
"Add API Key": "Adaugă Cheie API",
"Add API Key": "Adăugați cheia API",
"No API Keys": "Fără Chei APi",
"apiKey-active": "Activ",
"apiKey-expired": "Expirat",
@ -765,11 +764,11 @@
"pagertreeHigh": "Crescut",
"pagertreeResolve": "Rezolvare automată",
"pagertreeDoNothing": "Nu face nimic",
"Add a new expiry notification day": "Adaugă o nouă zi de notificare de expirare",
"Remove the expiry notification": "Elimină ziua de notificare a expirării",
"Add a new expiry notification day": "Adăugați o nouă zi de notificare de expirare",
"Remove the expiry notification": "Eliminați ziua de notificare a expirării",
"startDateTime": "Dată/Oră de început",
"cloneOf": "Clona lui {0}",
"Check/Uncheck": "Bifează/Debifează",
"Check/Uncheck": "Bifați/Debifați",
"telegramSendSilently": "Trimite Silențios",
"telegramProtectContent": "Protejați redirecționarea/salvarea",
"Add New Tag": "Adaugă Etichetă Nouă",
@ -780,7 +779,7 @@
"filterActive": "Activ",
"filterActivePaused": "Întrerupt",
"webhookBodyCustomOption": "Corp Personalizat",
"Select": "Selectează",
"Select": "Selectați",
"selectedMonitorCount": "Selectat: {0}",
"cronExpression": "Expresie Cron",
"invalidCronExpression": "Expresie Cron invalidă: {0}",
@ -863,7 +862,7 @@
"Badge Up Color": "Culoarea Badge Up",
"Badge Down Color": "Culoarea Badge Down",
"Badge Pending Color": "Culoarea în așteptare Badge",
"Badge Maintenance Color": "Culoarea in mentenanță Badge",
"Badge Maintenance Color": "Culoarea mentenanță Badge",
"Badge Warn Color": "Culoare atenționare Badge",
"Badge Down Days": "Badge Zile Down",
"Badge Style": "Stilul Badge",
@ -907,5 +906,43 @@
"telegramMessageThreadIDDescription": "Opțional Identificator unic pentru threadul de mesaje țintă (subiect) al forumului; numai pentru supergrupuri de forum",
"Request Timeout": "Timeout Solicitare",
"webhookBodyPresetOption": "Presetul - {0}",
"Resend Notification if Down X times consecutively": "Retrimiteți notificarea dacă e Down de X ori consecutiv"
"Resend Notification if Down X times consecutively": "Retrimiteți notificarea dacă e Down de X ori consecutiv",
"Channel access token (Long-lived)": "Token de acces la canal (de lungă durată)",
"Your User ID": "ID-ul dvs. de utilizator",
"documentationOf": "{0} Documentaţie",
"wayToGetHeiiOnCallDetails": "Cum să obțineți ID-ul declanșatorului și cheile API este explicat în {documentație}",
"To Phone Number": "La numărul de telefon",
"gtxMessagingToHint": "Format internațional, cu semnul „+” ({e164}, {e212} sau {e214})",
"gtxMessagingApiKeyHint": "Puteți găsi cheia dvs. API la: Conturile mele de rutare > Afișați informații despre cont > Acreditări API > API REST (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "De la numărul de telefon/Adresa de origine a căii de transmisie (TPOA)",
"gtxMessagingFromHint": "Pe telefoanele mobile, destinatarii văd TPOA afișat ca expeditor al mesajului. Sunt permise până la 11 caractere alfanumerice, un cod scurt, un cod lung local sau numere internaționale ({e164}, {e212} sau {e214})",
"Alphanumeric (recommended)": "Alfanumeric (recomandat)",
"Telephone number": "Număr de telefon",
"Originator": "Inițiator",
"cellsyntOriginator": "Vizibil pe telefonul mobil al destinatarului ca emitent al mesajului. Valorile și funcția permise depind de tipul originator al parametrului.",
"Destination": "Destinaţie",
"Allow Long SMS": "Permite SMS-uri lungi",
"cellsyntSplitLongMessages": "Împărțiți mesajele lungi în până la 6 părți. 153 x 6 = 918 caractere.",
"max 15 digits": "max 15 cifre",
"max 11 alphanumeric characters": "max 11 caractere alfanumerice",
"Originator type": "Tip de inițiator",
"cellsyntOriginatortypeAlphanumeric": "Șir alfanumeric (maximum 11 caractere alfanumerice). Destinatarii nu pot răspunde la mesaj.",
"cellsyntOriginatortypeNumeric": "Valoare numerică (maxim 15 cifre) cu număr de telefon în format internațional fără 00 înainte (de exemplu, numărul britanic 07920 110 000 ar trebui setat ca 447920110000). Destinatarii pot răspunde la mesaj.",
"cellsyntDestination": "Numărul de telefon al destinatarului utilizând formatul internațional cu 00 inițial urmat de codul țării, de ex. 00447920110000 pentru numărul britanic 07920 110 000 (maximum 17 cifre în total). Maximum 25000 de destinatari separați prin virgulă pentru fiecare solicitare HTTP.",
"callMeBotGet": "Aici puteți genera un punct final pentru {0}, {1} și {2}. Rețineți că este posibil să obțineți o rată limitată. Limitele ratelor par să fie: {3}",
"wayToGetWhapiUrlAndToken": "Puteți obține adresa URL API și indicativul accesând canalul dorit de la {0}",
"whapiRecipient": "Număr de telefon / ID de contact / ID de grup",
"API URL": "URL API",
"wayToWriteWhapiRecipient": "Numărul de telefon cu prefixul internațional, dar fără semnul plus la început ({0}), ID-ul de contact ({1}) sau ID-ul grupului ({2}).",
"locally configured mail transfer agent": "agent de transfer e-mail configurat local",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Fie introduceți numele de gazdă al serverului la care doriți să vă conectați, fie {localhost} dacă intenționați să utilizați un {local_mta}",
"Host URL": "Adresa URL a gazdei",
"Mentioning": "Menționând",
"Don't mention people": "Nu menționați oameni",
"Mention group": "Menționați {grup}",
"wayToGetSevenIOApiKey": "Accesați tabloul de bord sub app.seven.io > dezvoltator > cheie API > butonul verde de adăugare",
"senderSevenIO": "Numărul sau numele expeditorului",
"receiverSevenIO": "Număr de primire",
"receiverInfoSevenIO": "Dacă numărul de destinație nu se află în Germania, trebuie să adăugați codul de țară în fața numărului (de exemplu, pentru codul de țară 1 din SUA utilizați 117612121212 în loc de 017612121212)",
"apiKeySevenIO": "Cheia API SevenIO"
}

@ -1,9 +1,9 @@
{
"languageName": "Русский",
"checkEverySecond": "Проверка каждые {0} секунд",
"retriesDescription": "Максимальное количество попыток перед пометкой сервиса как недоступного и отправкой уведомления",
"retriesDescription": "Максимальное количество попыток перед пометкой сервиса, как недоступного, и отправкой уведомления",
"ignoreTLSError": "Игнорировать ошибки TLS/SSL для HTTPS сайтов",
"upsideDownModeDescription": "Обратить статус сервиса. Если сервис доступен, то он помечается как НЕДОСТУПНЫЙ.",
"upsideDownModeDescription": "Изменить статус сервиса на РАБОТАЕТ если он доступен, а помечается как НЕ РАБОТАЕТ.",
"maxRedirectDescription": "Максимальное количество перенаправлений. Поставьте 0, чтобы отключить перенаправления.",
"acceptedStatusCodesDescription": "Выберите коды статусов для определения доступности сервиса.",
"passwordNotMatchMsg": "Введённые пароли не совпадают.",
@ -17,32 +17,32 @@
"pauseMonitorMsg": "Вы действительно хотите приостановить?",
"Settings": "Настройки",
"Dashboard": "Панель управления",
"New Update": "Обновление",
"New Update": "Есть обновление",
"Language": "Язык",
"Appearance": "Внешний вид",
"Theme": "Тема",
"General": "Общее",
"Version": "Версия",
"Check Update On GitHub": "Проверить обновления на GitHub",
"Check Update On GitHub": "Проверить обновления в GitHub",
"List": "Список",
"Add": "Добавить",
"Add New Monitor": "Новый монитор",
"Add New Monitor": "Добавить Новый Монитор",
"Quick Stats": "Статистика",
"Up": "Доступен",
"Down": "Недоступен",
"Pending": "Ожидание",
"Up": "Работает",
"Down": "Не работает",
"Pending": "В ожидании",
"Unknown": "Неизвестно",
"Pause": "Пауза",
"Name": "Имя",
"Status": "Статус",
"DateTime": "Дата и время",
"Message": "Сообщение",
"No important events": "Важных событий нет",
"No important events": "Нет важных событий",
"Resume": "Возобновить",
"Edit": "Изменить",
"Delete": "Удалить",
"Current": "Текущий",
"Uptime": "Аптайм",
"Uptime": "Uptime",
"Cert Exp.": "Сертификат ист.",
"day": "день | дней",
"-day": "-дней",
@ -50,34 +50,34 @@
"-hour": "-часа",
"Response": "Ответ",
"Ping": "Пинг",
"Monitor Type": "Тип монитора",
"Keyword": "Слово",
"Monitor Type": "Тип Монитора",
"Keyword": "Ключевое слово",
"Friendly Name": "Имя",
"URL": "URL",
"URL": "URL-ссылка",
"Hostname": "Имя хоста",
"Port": "Порт",
"Heartbeat Interval": "Частота опроса",
"Retries": "Попыток",
"Advanced": "Дополнительно",
"Upside Down Mode": "Реверс статуса",
"Upside Down Mode": "Режим смены статуса",
"Max. Redirects": "Макс. количество перенаправлений",
"Accepted Status Codes": "Допустимые коды статуса",
"Save": "Сохранить",
"Notifications": "Уведомления",
"Not available, please setup.": "Доступных уведомлений нет, необходимо создать.",
"Setup Notification": "Создать уведомление",
"Not available, please setup.": "Уведомления не доступны, требуется настройка.",
"Setup Notification": "Настроить уведомление",
"Light": "Светлая",
"Dark": "Тёмная",
"Auto": "Авто",
"Theme - Heartbeat Bar": "Полоса частоты опроса",
"Auto": "Как в системе",
"Theme - Heartbeat Bar": "Тема - Полосы частоты опроса",
"Normal": "Обычный",
"Bottom": "Снизу",
"Bottom": "Внизу",
"None": "Отсутствует",
"Timezone": "Часовой пояс",
"Search Engine Visibility": "Индексация поисковыми системами",
"Timezone": "Часовой пояс TZ",
"Search Engine Visibility": "Видимость в поисковых системах",
"Allow indexing": "Разрешить индексирование",
"Discourage search engines from indexing site": "Запретить индексирование",
"Change Password": "Сменить пароль",
"Change Password": "Изменить пароль",
"Current Password": "Текущий пароль",
"New Password": "Новый пароль",
"Repeat New Password": "Повтор нового пароля",
@ -86,11 +86,11 @@
"Enable Auth": "Включить авторизацию",
"disableauth.message1": "Вы уверены, что хотите {disableAuth}?",
"disable authentication": "отключить авторизацию",
"disableauth.message2": "Это подходит для {intendThirdPartyAuth} перед открытием Uptime Kuma, например Cloudflare Access и т.п.",
"where you intend to implement third-party authentication": "тех, у кого стоит другая авторизация",
"Please use this option carefully!": "Пожалуйста, используйте с осторожностью!",
"disableauth.message2": "Это подходит для {intendThirdPartyAuth} перед открытием Uptime Kuma, такие как Cloudflare Access, Authelia или другие.",
"where you intend to implement third-party authentication": "тех, у кого настроена сторонняя система авторизации",
"Please use this option carefully!": "Пожалуйста, используйте эту настройку с осторожностью!",
"Logout": "Выйти",
"Leave": "Отмена",
"Leave": "Оставить",
"I understand, please disable": "Я понимаю, всё равно отключить",
"Confirm": "Подтвердить",
"Yes": "Да",
@ -99,12 +99,12 @@
"Password": "Пароль",
"Remember me": "Запомнить меня",
"Login": "Вход в систему",
"No Monitors, please": "Мониторов нет, пожалуйста",
"No Monitors, please": "Нет Мониторов, пожалуйста",
"No Monitors": "Мониторы отсутствуют",
"add one": "создайте новый",
"add one": "добавить",
"Notification Type": "Тип уведомления",
"Email": "Почта",
"Test": "Проверка",
"Email": "Электронная почта",
"Test": "Тест",
"Certificate Info": "Информация о сертификате",
"Resolver Server": "DNS сервер",
"Resource Record Type": "Тип ресурсной записи",
@ -117,12 +117,12 @@
"clearEventsMsg": "Вы действительно хотите удалить всю статистику событий данного монитора?",
"clearHeartbeatsMsg": "Вы действительно хотите удалить всю статистику опросов данного монитора?",
"confirmClearStatisticsMsg": "Вы действительно хотите удалить ВСЮ статистику?",
"Clear Data": "Удалить статистику",
"Clear Data": "Стереть данные",
"Events": "События",
"Heartbeats": "Опросы",
"Auto Get": "Авто-получение",
"enableDefaultNotificationDescription": "Для каждого нового монитора это уведомление будет включено по умолчанию. Вы всё ещё можете отключить уведомления в каждом мониторе отдельно.",
"Default enabled": "Использовать по умолчанию",
"Default enabled": "По умолчанию включён",
"Also apply to existing monitors": "Применить к существующим мониторам",
"Export": "Экспорт",
"Import": "Импорт",
@ -147,21 +147,21 @@
"Token": "Токен",
"Show URI": "Показать URI",
"Clear all statistics": "Очистить статистику",
"retryCheckEverySecond": "Повтор каждые {0} секунд",
"retryCheckEverySecond": "Повторять каждые {0} секунд",
"importHandleDescription": "Выберите \"Пропустить существующие\", если вы хотите пропустить каждый монитор или уведомление с таким же именем. \"Перезаписать\" удалит каждый существующий монитор или уведомление и добавит заново. Вариант \"Не проверять\" принудительно восстанавливает все мониторы и уведомления, даже если они уже существуют.",
"confirmImportMsg": "Вы действительно хотите восстановить резервную копию? Убедитесь, что вы выбрали подходящий вариант импорта.",
"Heartbeat Retry Interval": "Интервал повтора опроса",
"Import Backup": "Импорт",
"Export Backup": "Скачать",
"Import Backup": "Загрузить Backup",
"Export Backup": "Скачать Backup",
"Skip existing": "Пропустить существующие",
"Overwrite": "Перезаписать",
"Options": "Опции",
"Keep both": "Не проверять",
"Keep both": "Оставить оба",
"Tags": "Теги",
"Add New below or Select...": "Добавить новый или выбрать…",
"Tag with this name already exist.": "Такой тег уже существует.",
"Tag with this name already exist.": "Тег с таким именем уже существует.",
"Tag with this value already exist.": "Тег с таким значением уже существует.",
"color": "цвет",
"color": "Цвет",
"value (optional)": "значение (необязательно)",
"Gray": "Серый",
"Red": "Красный",
@ -172,18 +172,18 @@
"Purple": "Пурпурный",
"Pink": "Розовый",
"Search...": "Поиск…",
"Avg. Ping": "Среднее значение пинга",
"Avg. Response": "Среднее время ответа",
"Entry Page": "Главная страница",
"statusPageNothing": "Здесь пусто. Добавьте группу или монитор.",
"No Services": "Нет сервисов",
"Avg. Ping": "Средний пинг",
"Avg. Response": "Средний отклик",
"Entry Page": "Главная",
"statusPageNothing": "Ничего нет, добавьте группу или монитор.",
"No Services": "Нет Сервисов",
"All Systems Operational": "Все системы работают",
"Partially Degraded Service": "Частичная работа сервисов",
"Degraded Service": "Отказ всех сервисов",
"Add Group": "Добавить группу",
"Add Group": "Добавить Группу",
"Add a monitor": "Добавить монитор",
"Edit Status Page": "Редактировать",
"Go to Dashboard": "Панель управления",
"Edit Status Page": "Редактировать страницу статусов",
"Go to Dashboard": "В Панель Управления",
"Status Page": "Страница статуса",
"Status Pages": "Страницы статуса",
"Discard": "Отмена",
@ -209,10 +209,10 @@
"line": "Line Messenger",
"mattermost": "Mattermost",
"Primary Base URL": "Основной URL",
"Push URL": "URL пуша",
"Push URL": "URL-ссылка пуш уведомлений",
"needPushEvery": "К этому URL необходимо обращаться каждые {0} секунд.",
"pushOptionalParams": "Опциональные параметры: {0}",
"defaultNotificationName": "Моё уведомление {notification} ({number})",
"pushOptionalParams": "Необязательные параметры: {0}",
"defaultNotificationName": "Уведомления {notification} ({number})",
"here": "здесь",
"Required": "Обязательно",
"Bot Token": "Токен бота",
@ -409,13 +409,13 @@
"enableProxyDescription": "Этот прокси не будет влиять на запросы монитора, пока не будет активирован. Вы можете контролировать временное отключение прокси для всех мониторов через статус активации.",
"setAsDefaultProxyDescription": "Этот прокси будет по умолчанию включен для новых мониторов. Вы всё ещё можете отдельно отключать прокси в каждом мониторе.",
"Invalid": "Недействительный",
"AccessKeyId": "AccessKey ID",
"SecretAccessKey": "AccessKey Secret",
"PhoneNumbers": "PhoneNumbers",
"TemplateCode": "TemplateCode",
"AccessKeyId": "ID ключа доступа",
"SecretAccessKey": "Секретный ключ доступа",
"PhoneNumbers": "Номера телефонов",
"TemplateCode": "ШаблонКод",
"SignName": "SignName",
"Sms template must contain parameters: ": "Шаблон СМС должен содержать параметры: ",
"Bark Endpoint": "Bark Endpoint",
"Bark Endpoint": "Конечная точка Bark",
"Bark Group": "Bark Group",
"Bark Sound": "Bark Sound",
"WebHookUrl": "WebHookUrl",
@ -490,7 +490,7 @@
"Octopush API Version": "Версия API Octopush",
"Legacy Octopush-DM": "устаревший Octopush-DM",
"endpoint": "конечная точка",
"octopushAPIKey": "\"API key\" из учетных данных HTTP API в панели управления",
"octopushAPIKey": "\"{API key}\" из учетных данных HTTP API в панели управления",
"octopushLogin": "\"Login\" из учетных данных HTTP API в панели управления",
"promosmsLogin": "Логин API",
"promosmsPassword": "Пароль API",
@ -589,30 +589,30 @@
"recurringIntervalMessage": "Запускать 1 раз каждый день | Запускать 1 раз каждые {0} дней",
"error": "ошибка",
"statusMaintenance": "Техобслуживание",
"Affected Monitors": "Затронутые мониторы",
"Affected Monitors": "Задействованные Мониторы",
"Start of maintenance": "Начало техобслуживания",
"All Status Pages": "Все страницы статусов",
"Select status pages...": "Выберите страницу статуса…",
"resendEveryXTimes": овтор каждые {0} раз",
"resendDisabled": овторная отправка отключена",
"resendEveryXTimes": ереотправлять каждые {0} раз",
"resendDisabled": ереотправка отключена",
"deleteMaintenanceMsg": "Вы действительно хотите удалить это техобслуживание?",
"critical": "критично",
"Custom Monitor Type": "Собственный тип монитора",
"markdownSupported": "Поддерживает синтаксис Markdown",
"Passive Monitor Type": "Пассивный тип монитора",
"Specific Monitor Type": "Специфичный тип монитора",
"Passive Monitor Type": "Пассивный Тип Монитора",
"Specific Monitor Type": "Специфичный Тип Монитора",
"Help": "Помощь",
"Game": "Игра",
"Resend Notification if Down X times consequently": "Повторно отправить уведомление, если не работает X раз подряд",
"General Monitor Type": "Основной тип монитора",
"General Monitor Type": "Основной Тип Монитора",
"weekdayShortWed": "Ср",
"weekdayShortThu": "Чт",
"weekdayShortFri": "Пт",
"weekdayShortSat": "Сб",
"weekdayShortSun": "Вс",
"dayOfMonth": "День месяца",
"Pick Affected Monitors...": "Выберите затронутые мониторы…",
"Custom": "Пользовательский",
"Pick Affected Monitors...": "Выберите Задействованные Мониторы…",
"Custom": "Свой цвет",
"successMessage": "Сообщение об успехе",
"successMessageExplanation": "Сообщение MQTT, которое может рассматриваться как успешное",
"Custom CSS": "Пользовательские CSS",
@ -690,7 +690,7 @@
"Guild ID": "Идентификатор гильдии",
"Kook": "Kook",
"wayToGetKookBotToken": "Создайте приложение и получите токен бота по адресу {0}",
"Resend Notification if Down X times consecutively": "Повторная отправка уведомления при падении несколько раз",
"Resend Notification if Down X times consecutively": "Повторная отправка уведомления при отключении несколько раз",
"telegramProtectContent": "Запретить пересылку/сохранение",
"telegramProtectContentDescription": "Если включено, сообщения бота в Telegram будут запрещены для пересылки и сохранения.",
"telegramSendSilently": "Отправить без звука",
@ -707,7 +707,7 @@
"Auto resolve or acknowledged": "Автоматическое разрешение или подтверждение",
"auto acknowledged": "автоматическое подтверждение",
"auto resolve": "автоматическое разрешение",
"API Keys": "Ключи API",
"API Keys": "API Ключи",
"Expiry": "Срок действия",
"Expiry date": "Дата истечения срока действия",
"Don't expire": "Не истекает",
@ -741,7 +741,7 @@
"wayToGetPagerDutyKey": "Вы можете это получить, перейдя в Сервис -> Каталог сервисов -> (Выберите сервис) -> Интеграции -> Добавить интеграцию. Здесь вы можете искать «Events API V2». Подробнее {0}",
"apiKeyAddedMsg": "Ваш ключ API добавлен. Пожалуйста, обратите внимание на это сообщение, так как оно отображается один раз.",
"deleteAPIKeyMsg": "Вы уверены, что хотите удалить этот ключ API?",
"wayToGetPagerTreeIntegrationURL": "После создания интеграции Uptime Kuma в PagerTree скопируйте файл Endpoint. См. полную информацию {0}",
"wayToGetPagerTreeIntegrationURL": "После создания интеграции Uptime Kuma в PagerTree скопируйте файл {Endpoint}. См. полную информацию {0}",
"telegramMessageThreadIDDescription": "Необязательный уникальный идентификатор для цепочки сообщений (темы) форума; только для форумов-супергрупп",
"grpcMethodDescription": "Имя метода преобразуется в формат camelCase, например, sayHello, check и т. д.",
"Proto Service Name": "Название службы Proto",
@ -801,7 +801,7 @@
"Badge Duration (in hours)": "Срок действия значка (в часах)",
"twilioApiKey": "API ключ (необязательно)",
"Expected Value": "Ожидаемое значение",
"Json Query": "JSON запрос",
"Json Query": "JSON Запрос",
"Kafka Brokers": "Kafka Brokers",
"Press Enter to add broker": "Нажмите Enter чтобы добавить брокера",
"Kafka Topic Name": "Название темы Kafka",
@ -812,7 +812,6 @@
"AccessKey Id": "AccessKey Id",
"Secret AccessKey": "Секретный ключ доступа",
"Session Token": "Токен сессии",
"jsonQueryDescription": "Выполните json-запрос к ответу и проверьте наличие ожидаемого значения (возвращаемое значение будет преобразовано в строку для сравнения). Посмотрите {0} для получения документации по языку запросов. A Потренироваться вы можете {1}.",
"Notify Channel": "Канал оповещений",
"aboutNotifyChannel": "Уведомление о канале вызовет настольное или мобильное уведомление для всех участников канала, независимо от того, установлена ли их доступность как активная или отсутствующая.",
"Enter the list of brokers": "Введите список брокеров",
@ -852,10 +851,10 @@
"nostrRelaysHelp": "Один URL-адрес ретрансляции в каждой строке",
"enableNSCD": "Включить NSCD (Name Service Cache Daemon) для кэширования всех DNS-запросов",
"Saved.": "Сохранено",
"setupDatabaseChooseDatabase": "Какую базу данных Вы хотите использовать?",
"setupDatabaseEmbeddedMariaDB": "Вам не нужно ничего настраивать. В этот докер-образ автоматически встроена и настроена MariaDB. Uptime Kuma будет подключаться к этой базе данных через unix-сокет.",
"setupDatabaseChooseDatabase": "Какую базу данных Вы хотели бы использовать?",
"setupDatabaseEmbeddedMariaDB": "Вам не нужно ничего настраивать. В этот Docker образ автоматически встроена и настроена MariaDB. Uptime Kuma будет подключаться к этой базе данных через unix-socket.",
"setupDatabaseSQLite": "Простой файл базы данных, рекомендуемый для небольших развертываний. До версии 2.0.0 Uptime Kuma использовал SQLite в качестве базы данных по умолчанию.",
"setupDatabaseMariaDB": "Подключитесь к внешней базе данных MariaDB. Необходимо задать информацию о подключении к базе данных.",
"setupDatabaseMariaDB": "Подключитесь к внешней базе данных MariaDB. Вам необходимо задать информацию о подключении к базе данных.",
"dbName": "Имя базы данных",
"pushViewCode": "Как использовать монитор Push? (Посмотреть код)",
"programmingLanguages": "Языки программирования",
@ -927,5 +926,43 @@
"deleteRemoteBrowserMessage": "Вы уверены, что хотите удалить этот удаленный браузер для всех мониторов?",
"Remove the expiry notification": "Удалить дату истечения срока действия уведомления",
"Add a new expiry notification day": "Добавить новый день уведомления об истечении срока действия",
"What is a Remote Browser?": "Что такое удаленный браузер?"
"What is a Remote Browser?": "Что такое удаленный браузер?",
"Mention group": "Упомянуть {group}",
"Your User ID": "Ваш идентификатор пользователя",
"Host URL": "URL Хоста",
"locally configured mail transfer agent": "Настроенный локально агент передачи почты",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Введите {Hostname} сервера, к которому вы хотите подключиться, либо {localhost}, если вы собираетесь использовать {local_mta}.",
"wayToGetHeiiOnCallDetails": "Как получить ID триггера и {API Keys}, рассказывается в {documentation}",
"gtxMessagingApiKeyHint": "Вы можете найти свой {API key} на странице: Мои учетные записи маршрутизации > Показать информацию об учетной записи > Учетные данные API > REST API (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Номер телефона / Адрес источника пути передачи (АИПП)",
"Alphanumeric (recommended)": "Буквенно-цифровой (рекомендуется)",
"Originator type": "Тип источника",
"cellsyntOriginatortypeAlphanumeric": "Буквенно-цифровая строка (не более 11 буквенно-цифровых символов). Получатели не могут ответить на это сообщение.",
"cellsyntOriginatortypeNumeric": "Числовое значение (не более 15 цифр) с номером телефона в международном формате без 00 в начале (например, номер Великобритании 07920 110 000 должен быть задан, как 447920110000). Получатели могут ответить на сообщение.",
"cellsyntDestination": "Номер телефона получателя в международном формате с 00 в начале, за которым следует код страны, например, 00447920110000 для номера Великобритании 07920 110 000 (не более 17 цифр в сумме). Не более 25000 получателей, разделенных запятыми, на один HTTP-запрос.",
"callMeBotGet": "Здесь вы можете сгенерировать {endpoint} для {0}, {1} и {2}. Имейте в виду, что вы можете получить ограничение по скорости. Ограничения по скорости выглядят следующим образом: {3}",
"gtxMessagingFromHint": "На мобильных телефонах получатели видят АИПП как отправителя сообщения. Допускается использование до 11 буквенно-цифровых символов, шорткода, местного длинного кода или международных номеров ({e164}, {e212} или {e214}).",
"wayToWriteWhapiRecipient": "Номер телефона с международным префиксом, но без знака плюс в начале ({0}), идентификатора контакта ({1}) или идентификатора группы ({2})",
"cellsyntSplitLongMessages": "Разделять длинные сообщения на 6 частей. 153 x 6 = 918 символов.",
"Mentioning": "Упоминание",
"Don't mention people": "Не упоминайте людей",
"gtxMessagingToHint": "Международный формат, с «+» ({e164}, {e212} или {e214})",
"whapiRecipient": "Номер телефона / ID контакта / ID группы",
"API URL": "API URL-адрес",
"documentationOf": "{0} Документация",
"senderSevenIO": "Отправляет номер или имя",
"receiverSevenIO": "Номер получения",
"wayToGetSevenIOApiKey": "Зайдите на панель управления по адресу app.seven.io > разработчик > {api key} > зеленая кнопка добавить",
"receiverInfoSevenIO": "Если номер получателя не находится в Германии, то перед номером необходимо добавить код страны (например, для США код страны 1, тогда используйте 117612121212, вместо 017612121212)",
"apiKeySevenIO": "SevenIO {API Key}",
"Telephone number": "Номер телефона",
"Channel access token (Long-lived)": "Токен доступа к каналу (долговечный)",
"wayToGetWhapiUrlAndToken": "Вы можете получить {API URL} и токен, зайдя в нужный вам канал с {0}",
"To Phone Number": "На номер телефона",
"Originator": "Источник",
"cellsyntOriginator": "Виден на мобильном телефоне получателя как отправитель сообщения. Допустимые значения и функция зависят от параметра {originatortype}.",
"Destination": "Назначение",
"Allow Long SMS": "Разрешить длинные SMS",
"max 15 digits": "макс. 15 цифр",
"max 11 alphanumeric characters": "максимум 11 буквенно-цифровых символов"
}

@ -55,7 +55,7 @@
"Delete": "Izbriši",
"Current": "Trenutno",
"Uptime": "Uptime",
"Cert Exp.": "Potek certifikata",
"Cert Exp.": "Pot. cer.",
"day": "dan | dni",
"-day": "-dni",
"hour": "ura",
@ -104,7 +104,7 @@
"disable authentication": "avtentikacijo",
"disableauth.message2": "Namenjen je {intendThirdPartyAuth}, na primer Cloudflare Access.",
"where you intend to implement third-party authentication": "nekomu, ki ima pred programom Uptime Kuma vklopljeno zunanje preverjanje pristnosti",
"Please use this option carefully!": "Uporabljajte previdno.",
"Please use this option carefully!": "Uporabljajte to opcijo previdno!",
"Logout": "Odjava",
"Leave": "Zapusti",
"I understand, please disable": "Razumem, prosim onemogočite",
@ -174,7 +174,7 @@
"Purple": "Vijolična",
"Pink": "Roza",
"Search...": "Išči…",
"Avg. Ping": "Avg. Ping",
"Avg. Ping": "Povp. Ping",
"Avg. Response": "Avg. odziv",
"Entry Page": "Vstopna stran",
"statusPageNothing": "Nikjer nič... Dodajte skupino ali monitor.",
@ -315,7 +315,7 @@
"Done": "Zaključi",
"Info": "Info",
"Security": "Varnost",
"Steam API Key": "Steam API Key",
"Steam API Key": "Steam API Ključ",
"Shrink Database": "Stisni bazo",
"Pick a RR-Type...": "Izberi RR tip…",
"Pick Accepted Status Codes...": "Izbiranje sprejetih kod stanja…",
@ -542,5 +542,92 @@
"apiKey-active": "Aktivno",
"apiKey-expired": "Poteklo",
"Resend Notification if Down X times consecutively": "Znova pošljite obvestilo, če X-krat zapored ne uspe",
"alertaEnvironment": "Okolje"
"alertaEnvironment": "Okolje",
"enableProxyDescription": "Ta proxy ne bo vplival na zahteve za spremljanje, dokler ni aktiviran. S stanjem aktivacije lahko nadzirate začasno onemogočanje proxy-ja na vseh monitorjih.",
"setAsDefaultProxyDescription": "Ta proxy bo privzeto omogočen za nove monitorje. Še vedno lahko onemogočite proxy ločeno za vsak monitor.",
"Steam Game Server": "Igralni strežnik Steam",
"There might be a typing error in the address.": "Morda je v naslovu tipkarska napaka.",
"certificationExpiryDescription": "Nadzorniki HTTPS sprožijo obvestilo, ko potrdilo TLS poteče v:",
"pushViewCode": "Kako uporabljati Push monitor? (Ogled kode)",
"No status pages": "Ni Status strani",
"deleteDockerHostMsg": "Ali res želite izbrisati tega docker gostitelja za vse monitorje?",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Docker Container",
"Host URL": "Gostiteljev URL",
"styleElapsedTime": "Pretečeni čas pod vrstico srčnega utripa",
"Affected Monitors": "Prizadeti Monitorji",
"Pick Affected Monitors...": "Izberi prizadete Monitorje…",
"All Status Pages": "Vse Status strani",
"webhookAdditionalHeadersTitle": "Dodatna zaglavja",
"webhookAdditionalHeadersDesc": "Nastavi dodatna zaglavja, poslane z webhookom. Vsaka glava mora biti definirana kot ključ/vrednost JSON.",
"topicExplanation": "MQTT tema za spremljanje",
"deleteProxyMsg": "Ali ste prepričani, da želite izbrisati ta proxy za vse monitorje?",
"Certificate Chain": "Veriga potrdil",
"Running": "Se izvaja",
"Not running": "Se ne izvaja",
"Accept characters:": "Sprejmi znake:",
"For example: nginx, Apache and Traefik.": "Na primer: nginx, Apache in Traefik.",
"Domain Name Expiry Notification": "Obvestilo o poteku imena domene",
"Proxy": "Proxy",
"Date Created": "Datum ustvarjanja",
"Footer Text": "Besedilo v nogi",
"Show Powered By": "Prikaži Powered By",
"Domain Names": "Imena domen",
"signedInDisp": "Prijavljen kot {0}",
"signedInDispDisabled": "Avtentikacija onemogočena.",
"proxyDescription": "Proxy-ji morajo biti dodeljeni monitor funkciji.",
"Certificate Expiry Notification": "Obvestilo o poteku veljavnosti potrdila",
"API Username": "API uporabnik",
"Show update if available": "Prikaži posodobitev, če je na voljo",
"Also check beta release": "Preverite tudi beta izdaje",
"Using a Reverse Proxy?": "Uporabljate povratni proxy?",
"Most likely causes:": "Najverjetnejši vzroki:",
"The resource is no longer available.": "Vir ni več na voljo.",
"What you can try:": "Kaj lahko poskusite:",
"Retype the address.": "Ponovno vnesite naslov.",
"Go back to the previous page.": "Vrni se na prejšnjo stran.",
"Coming Soon": "Prihaja kmalu",
"Query": "Poizvedba",
"settingsCertificateExpiry": "Potek potrdila TLS",
"Setup Docker Host": "Nastavite gostitelja Docker",
"Connection Type": "Vrsta povezave",
"Check how to config it for WebSocket": "Preverite, kako ga konfigurirati za WebSocket",
"Container Name / ID": "Container ime / ID",
"Docker Host": "Docker gostitelj",
"Docker Hosts": "Docker gostitelji",
"Domain": "Domena",
"Workstation": "Delovna postaja",
"Packet Size": "Velikost paketa",
"disableCloudflaredNoAuthMsg": "Ste v No Auth modusu, geslo ni potrebno.",
"wayToGetLineNotifyToken": "Žeton za dostop lahko dobite pri {0}",
"Examples": "Primeri",
"Home Assistant URL": "Home Assistant URL",
"API Key": "API ključ",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Vnesite ime gostitelja strežnika, s katerim se želite povezati, ali {localhost}, če nameravate uporabiti {local_mta}",
"Next": "Naslednji",
"wayToGetCloudflaredURL": "(Prenesite cloudflared iz {0})",
"startOrEndWithOnly": "Začnite ali končajte samo z {0}",
"No consecutive dashes": "Brez zaporednih pomišljajev",
"Authentication": "Avtentikacija",
"HTTP Basic Auth": "HTTP Basic Auth",
"New Status Page": "Nova Status stran",
"Page Not Found": "Stran ne obstaja",
"Reverse Proxy": "Povratni proxy",
"Backup": "Varnostna kopija",
"About": "O nas",
"cloudflareWebsite": "Spletno mesto Cloudflare",
"Message:": "Sporočilo:",
"Don't know how to get the token? Please read the guide:": "Ne veste, kako do žetona? Preberite vodnik:",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Trenutna povezava se lahko izgubi, če se trenutno povezujete prek tunela Cloudflare. Ste prepričani, da ga želite ustaviti? Vnesite trenutno geslo, da ga potrdite.",
"HTTP Headers": "HTTP zaglavja",
"Trust Proxy": "Zaupaj proxy-ju",
"Other Software": "Druga programska oprema",
"Please read": "Prosim preberi",
"Subject:": "Zadeva:",
"Valid To:": "Velja do:",
"Days Remaining:": "Preostali dnevi:",
"Issuer:": "Izdajatelj:",
"Fingerprint:": "Prstni odtis:",
"No Proxy": "Ni proxy-ja"
}

@ -1,25 +1,255 @@
{
"Settings": "Opsione",
"Dashboard": "FaqeKryesore",
"Help": "Ndihma",
"Settings": "Rregullime",
"Dashboard": "Pulti",
"Help": "Ndihmë",
"Language": "Gjuha",
"Appearance": "Paraqitja",
"Theme": "Theme",
"General": "Te pergjithshme",
"Game": "Loje",
"Primary Base URL": "ULR Baze Primare",
"List": "List",
"Appearance": "Shfaqja",
"Theme": "Tema",
"General": "Të përgjithshme",
"Game": "Lojë",
"Primary Base URL": "URL e bazës kryesore",
"List": "Listë",
"Add": "Shto",
"Add New Monitor": "Shto Monitor te Ri",
"Quick Stats": "Statistika Flash",
"Up": "Lart",
"Down": "Poshte",
"Pending": "Ne Pritje",
"statusMaintenance": "Mirembatje",
"Maintenance": "Mirembajtje",
"Add New Monitor": "Shto Monitor të ri",
"Quick Stats": "Statistika të shpejta",
"Up": "Lartë",
"Down": "Poshtë",
"Pending": "Në pritje",
"statusMaintenance": "Mirëmbatje",
"Maintenance": "Mirëmbajtje",
"Unknown": "Panjohur",
"languageName": "Shqip",
"New Update": "Update i ri",
"Version": "Version",
"Check Update On GitHub": "Kontrollo Update ne GitHub"
"New Update": "Përditësim i ri",
"Version": "Verzion",
"Check Update On GitHub": "Shiko për përditësim në GitHub",
"setupDatabaseSQLite": "Një skedar i thjeshtë për bazë të të dhënave, rekomandohet për shpërndarje të shkallës të vogël. Deri tek v2.0.0, Uptime Kuma përdorte SQLite si bazë të të dhënave të preferuar.",
"setupDatabaseEmbeddedMariaDB": "Nuk jeni të obliguar të përcaktoni çkado. Ky imazh i docker posedon të ngulitur dhe konfiguruar MariaDB për ju në mënyrë automatike. Uptime Kuma do të lidhet me këtë bazë të dhënash nëpërmjet një prize të unix.",
"setupDatabaseMariaDB": "Lidhu tek ndonjë bazë të dhënash MariaDB të jashtëm. Ju duhet të përcaktoni informacionet e lidhjes për bazën e të dhënave.",
"settingUpDatabaseMSG": "Duke rregulluar bazën e të dhënave. Mund të merr kohë, ju lutemi të jeni të durueshëm.",
"Cert Exp.": "Skadenca e Cert.",
"Invert Keyword": "Përmbys fjalën kyçe",
"needPushEvery": "Duhet të vizitohet URL çdo {0} sekonda.",
"Theme - Heartbeat Bar": "Tema - Bari i Pulsit",
"Search Engine Visibility": "Arritshmëria nga motorët e kërkimit",
"Notification Type": "Lloj Njoftimi",
"Active": "Aktive",
"Tag with this value already exist.": "Tanimë egziston një etiketë me këtë vlerë.",
"statusPageNothing": "Ska asgjë këtu, ju lutem shto një grup ose një monitor.",
"Edit Status Page": "Modifiko faqen e gjendjes",
"defaultNotificationName": "Njoftimi im i ({number}) {notification}",
"webhookJsonDesc": "{0} është e mirë për HTTP server moderne siç është Express.js",
"appriseNotInstalled": "Apprise nuk është instaluar. {0}",
"error": "gabim",
"Reset Token": "Reseto Token",
"Title": "Titulli",
"dbName": "Emri i bazës së të dhënave",
"Edit": "Modifiko",
"Email": "Email",
"Delete": "Fshij",
"Current": "Aktuale",
"Uptime": "Uptime",
"Monitor": "Monitor | Monitorët",
"day": "ditë | ditët",
"-day": "-ditë",
"hour": "orë",
"-hour": "-orë",
"Response": "Përgjegje",
"Ping": "Ping",
"Monitor Type": "Lloj Monitori",
"Keyword": "Fjalë kyçe",
"URL": "URL",
"Hostname": "Emri hostit",
"Port": "Porta",
"Heartbeat Interval": "Shpeshtia e pulsit",
"Friendly Name": "Nofka",
"ignoreTLSError": "Injoro TLS/SSL vërrejtjet për web faqet HTTPS",
"Push URL": "URL Shtysë",
"pushOptionalParams": "Parametrat jo të detyrueshme",
"Save": "Ruaj",
"Notifications": "Njoftimet",
"Setup Notification": "Rregullo njoftimet",
"Not available, please setup.": "Nuk është në dispozicion, ju lutemi rregulloni.",
"Light": "Ndriçuar",
"Dark": "Errët",
"Auto": "Vetvetiu",
"styleElapsedTimeShowWithLine": "Shfaq (Me rreshta)",
"styleElapsedTimeShowNoLine": "Shfaq (Pa rresht)",
"Normal": "Normal",
"Bottom": "Poshtë",
"None": "Asnjë",
"Timezone": "Zona kohore",
"Allow indexing": "Lejo indeksimin",
"Discourage search engines from indexing site": "Dekurajo motorët e kërkimit të indeksojnë këtë faqe",
"Change Password": "Ndrysho Fjalëkalimin",
"Current Password": "Fjalëkalimi Aktual",
"New Password": "Fjalëkalimi i ri",
"Repeat New Password": "Përsërit Fjalëkalimin e ri",
"Update Password": "Përditëso Fjalëkalimin",
"add one": "shto një",
"Current User": "Përdoruesi aktual",
"default": "Paracaktuar",
"pushOthers": "Tjerët",
"programmingLanguages": "Gjuhët e programimit",
"Disable Auth": "Ndalo autentifikimin",
"Enable Auth": "Lësho Autentifikimin",
"disableauth.message1": "A jeni të sigurtë për {disableAuth}?",
"Please use this option carefully!": "Ju lutem përdorni këtë mundësi me kujdes!",
"records": "regjistrat",
"disable authentication": "ndalo autentifikimin",
"Logout": "Ç'kyçu",
"Yes": "Po",
"No": "Jo",
"Username": "Emri përdorues",
"Password": "Fjalëkalimi",
"Remember me": "Më kujto",
"Login": "Kyçu",
"No Monitors, please": "Asnjë Monitor, ju lutem",
"I understand, please disable": "Kuptoj, të lutem ndalo",
"Confirm": "Konfirmo",
"Leave": "Largohu",
"Clear Data": "Pastro të dhënat",
"Start of maintenance": "Fillimi mirëmbajtjes",
"All Status Pages": "Gjithë faqet e gjendjes",
"Select status pages...": "Zgjedh faqe të gjendjes…",
"alertNoFile": "Të lutem zgjedh skedar për importim.",
"alertWrongFileType": "Të lutem zgjedh skedar të tipit JSON.",
"Clear all statistics": "Pastro gjithë statistikat",
"Skip existing": "Tejkalo ato që egzistojnë",
"Options": "Mundësitë",
"Keep both": "Mbaj që të dy",
"Verify Token": "Verifiko Token",
"Setup 2FA": "Rregullo 2FA",
"Enable 2FA": "Aktivizo 2FA",
"Disable 2FA": "Ndalo 2FA",
"2FA Settings": "2FA Rregullimet",
"Two Factor Authentication": "Autentifikimi Dy Faktorësh",
"filterActive": "Aktive",
"filterActivePaused": "Pushuar",
"Inactive": "Jo aktive",
"Token": "Token",
"Show URI": "Shfaq URI",
"Tags": "Etiketat",
"Add New Tag": "Shto Etiketë të re",
"Add New below or Select...": "Shto ose Zgjedh një nga mëposhtë…",
"Tag with this name already exist.": "Tanimë egziston një etiketë me këtë emër.",
"color": "Ngjyra",
"value (optional)": "vlera (jo detyrueshme)",
"Gray": "Hiri",
"Red": "Kuq",
"Orange": "Portokall",
"Green": "Gjelbërt",
"Blue": "Kaltërt",
"Indigo": "Llullaq",
"Purple": "Vjollcë",
"Pink": "Rozë",
"Custom": "Tjetër",
"Search...": "Kërko…",
"Search monitored sites": "Kërko faqet e monitoruara",
"Avg. Ping": "Ping Mesatar",
"Avg. Response": "Përgjegje Mesatare",
"Entry Page": "Faqja hyrjes",
"statusPageRefreshIn": "Rifresko në: {0}",
"No Services": "Ska shërbime",
"All Systems Operational": "Gjithë sistemet në gjendje pune",
"Partially Degraded Service": "Shërbime pjesërisht të degraduara",
"Degraded Service": "Shërbim i degraduar",
"Add Group": "Shto Grup",
"Add a monitor": "Shto një monitor",
"Go to Dashboard": "Shko tek Pulti",
"Status Page": "Faqe e gjendjes",
"Status Pages": "Faqet e gjendjes",
"here": "këtu",
"Required": "E detyrueshme",
"Post URL": "Posto URL",
"Content Type": "Lloji përmbajtjes",
"webhookFormDataDesc": "{multipart} është e mirë për PHP. JSON duhet të jet e kuptueshme me {decodeFunction}",
"Priority": "Prioriteti",
"One record": "Një regjistër",
"Read more": "Lexo më shumë",
"appriseInstalled": "Apprise është instaluar.",
"Method": "Metoda",
"Body": "Trupi",
"Headers": "Kokat",
"PushUrl": "URL Shtysë",
"webhookBodyCustomOption": "Trup tjetër",
"webhookAdditionalHeadersTitle": "Kokat shtesë",
"topic": "Tema",
"recent": "Të fundit",
"Done": "E bërë",
"Info": "Info",
"Security": "Siguri",
"Default": "Paracaktuar",
"HTTP Options": "Mundësitë HTTP",
"Content": "Përmbajtja",
"Style": "Stili",
"Create Incident": "Krijo incident",
"info": "info",
"warning": "vërrejtje",
"danger": "rrezik",
"critical": "kritike",
"primary": "primare",
"light": "ndriçuar",
"dark": "errët",
"Post": "Posto",
"Created": "Krijuar",
"Cancel": "Anulo",
"Discard": "Mos i ruaj",
"Last Updated": "Përditësuar së fundi",
"Show Tags": "Shfaq Etiketat",
"Home": "Shtëpi",
"Request Timeout": "Kërkesa Dështuar",
"timeoutAfter": "Dështo pas {0} sekondash",
"Resend Notification if Down X times consecutively": "Ridërgo Njoftim nëse bien X here njëpasnjë",
"Advanced": "Avancuar",
"checkEverySecond": "Kontrollo çdo {0} sekonda",
"retryCheckEverySecond": "Riprovo çdo {0} sekonda",
"resendEveryXTimes": "Ridërgo çdo {0} herë",
"resendDisabled": "Ridërgimi është ndalur",
"retriesDescription": "Maximumi provave para se shërbimi të shënohet si i rrëzuar dhe njoftimi dërgohet",
"maxRedirectDescription": "Maksimumi numrit të ridrejtimeve për ti ndjekur. Përcakto 0 për të ndaluar ridrejtimet.",
"Max. Redirects": "Maks. Ridrejtimeve",
"Accepted Status Codes": "Kodet e gjendjeve të pranuara",
"Expected Value": "Vlera e supozuar",
"Json Query": "Kërkesë Json",
"Retries": "Provat",
"Heartbeat Retry Interval": "Intervali riprovimit pulsit",
"Upside Down Mode": "Gjendja kokëposhtë",
"upsideDownModeDescription": "Rotullo statusin kokëposhtë. Nëse shërbimi nuk është i arritshëm, është rrëzuar.",
"Test": "Test",
"Certificate Info": "Info e Çertifikatës",
"Resolver Server": "Server Përgjegjës",
"Resource Record Type": "Lloji i regjistrit të resursit",
"Last Result": "Rezultati fundit",
"Create your admin account": "Krijo llogarinë tuaj admin",
"Repeat Password": "Përsërit Fjalëkalimin",
"Import Backup": "Importo Rezervën",
"Export Backup": "Eksporto Rezervë",
"Export": "Eksporto",
"Import": "Importo",
"respTime": "Koha Përgj. (ms)",
"notAvailableShort": "J/A",
"Default enabled": "Normalisht e aktivizuar",
"Apply on all existing monitors": "Apliko në të gjithë monitorët që egzistojnë",
"Create": "Krijo",
"Events": "Ndodhitë",
"Heartbeats": "Pulset",
"Auto Get": "Merr Vetvetiu",
"Schedule maintenance": "Përcakto mirëmbajtje",
"Affected Monitors": "Monitorët e përfshirë",
"Pick Affected Monitors...": "Zgjedh monitorët e përfshirë…",
"Overwrite": "Mbishkruaj",
"Cannot connect to the socket server": "Nuk mund të realizohet lidhja me serverin socket",
"Reconnecting...": "Duke u ri-lidhur...",
"General Monitor Type": "Lloj i përgjithshëm i Monitor",
"Passive Monitor Type": "Lloji pasiv i Monitor",
"Specific Monitor Type": "Lloj i përcaktuar i Monitor",
"markdownSupported": "Sintaksa Markdown përkrahet",
"pauseDashboardHome": "Pusho",
"Pause": "Pusho",
"Name": "Emri",
"Status": "Gjendja",
"DateTime": "DataKoha",
"Message": "Mesazhi",
"No important events": "Nuk ka ndodhi të rëndësishme",
"Resume": "Vazhdo"
}

@ -795,7 +795,6 @@
"pushoverDesc1": "Nödprioritet (2) har 30 sekunders timeout mellan försök och löper ut efter 1 timme som standard.",
"octopushTypePremium": "Premium (Snabb - rekommenderas för varningar)",
"octopushTypeLowCost": "Låg kostnad (långsam - blockeras ibland av operatören)",
"jsonQueryDescription": "Gör en json-förfrågan mot svaret och kontrollera det förväntade värdet (returvärde konverteras till en sträng för jämförelse). Se {0} för dokumentation angående frågespråket. En lekplats kan hittas här {1}.",
"Check octopush prices": "Kontrollera octopush priser {0}.",
"octopushSMSSender": "SMS avsändarnamn: 3-11 alfanumeriska tecken och mellanslag (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea enhetsid",
@ -886,5 +885,43 @@
"nostrRecipientsHelp": "npub-format, en per rad",
"gamedigGuessPort": "Gamedig: Gissa port",
"twilioAuthToken": "Auth-token / API-nyckelhemlighet",
"What is a Remote Browser?": "Vad är en fjärrläsare?"
"What is a Remote Browser?": "Vad är en fjärrläsare?",
"Channel access token (Long-lived)": "Kanalaccess-token (långtids)",
"Your User ID": "Ditt användarID",
"wayToGetHeiiOnCallDetails": "Hur man får Trigger ID och API-nycklar är förklarat i {dokumentationen}",
"documentationOf": "{0} Dokumentation",
"gtxMessagingFromHint": "På mobiltelefoner, dina mottagare ser TPOA visad som avsändare av meddelandet. 11 alfanumeriska tecken är tillåtet, en kortkod, den lokala långkoden eller internationella nummer ({e164}, {e212} or {e214})",
"gtxMessagingApiKeyHint": "Du kan hitta dina API-nycklar i: Mina routningkonton > Visa kontoinformation > API-referenser > REST API (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Från telefonnummer / Transmission Path Originating Address (TPOA)",
"To Phone Number": "TIll telefonnummer",
"gtxMessagingToHint": "Internationellt format med inledande \"0\" ({e164}, {e212} or {e214})",
"Alphanumeric (recommended)": "Alfanumeriskt (rekommenderat)",
"Originator type": "Avsändartyp",
"cellsyntOriginator": "Synligt på mottagarens mobiltelefon som avsändare av meddelandet. Tillåtna värden och funktioner beror på avsändartyp.",
"cellsyntDestination": "Mottagarens telefonnummer i internationellt format med inledande 00 följt av landskod, ex. 00701234567 för SE nummer 070-123 45 67 (max 17 siffror totalt). Max 25000 kommaseparerade mottagare per HTTP-förfrågan.",
"callMeBotGet": "Här kan du generera en slutpunkt för {0}, {1} och {2}. Var uppmärksam på att du kan få en anslutningsbegränsning. Anslutningsbegränsningarna ser ut som: {3}",
"Telephone number": "Telefonnummer",
"Originator": "Avsändare",
"cellsyntOriginatortypeAlphanumeric": "Alfanumerisk sträng (max 11 alfanumeriska tecken). Mottagare kan inte svara på meddelandet.",
"Destination": "Destination",
"Allow Long SMS": "Tillåt långa SMS",
"cellsyntSplitLongMessages": "Dela långa meddelanden i upp till 6 delar. 153 x 6 = 918 tecken.",
"max 15 digits": "max 15 siffor",
"max 11 alphanumeric characters": "max 11 alfanumeriska tecken",
"cellsyntOriginatortypeNumeric": "Numeriskt värde (max 15 siffror) med telefonnummer i internationellt format utan inledande 00 (exempel SE nummer 070-123 45 67 ska anges som 46701234567). Mottagare kan svara på meddelandet.",
"wayToWriteWhapiRecipient": "Telefonnummer med internationellt prefix, men utan plustecken i början ({0}, KontaktID ({1}) eller GruppID ({2}).",
"wayToGetWhapiUrlAndToken": "Du kan hitta API URL och token genom att gå till din föredragna kanal från {0}",
"whapiRecipient": "Telefonnummer / Kontakt ID / Grupp ID",
"API URL": "API URL",
"Mentioning": "Omnämnande",
"Don't mention people": "Omnämn inte människor",
"Mention group": "Omnämn {group}",
"senderSevenIO": "Skickar nummer eller namn",
"receiverSevenIO": "Mottagande nummer",
"receiverInfoSevenIO": "Om det mottagande numret inte är lokaliserat i Tyskland, måste du lägga till landskoden för numret (ex. för landskod 46 från Sverige, använd 46123123123 istället för 0123123123)",
"apiKeySevenIO": "SevenIO api-nyckel",
"wayToGetSevenIOApiKey": "Besök instrumentpanelen under app.seven.io > utvecklare > api-nyckel > den gröna lägg till knappen",
"locally configured mail transfer agent": "lokalt konfigurerad mejlskickningsagent",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Endera värdnamnet på servern du vill ansluta till eller {localhost} om du vill använda {local_mta}",
"Host URL": "Värd-URL"
}

@ -19,7 +19,7 @@
"resolverserverDescription": "Cloudflare varsayılan sunucudur, çözümleyici sunucusunu istediğiniz zaman değiştirebilirsiniz.",
"rrtypeDescription": "İzlemek istediğiniz servisin RR-Tipini seçin",
"pauseMonitorMsg": "Durdurmak istediğinden emin misin?",
"enableDefaultNotificationDescription": "Bu bildirim her yeni serviste aktif olacaktır. Bildirimi servisler için ayrı ayrı deaktive edebilirsiniz.",
"enableDefaultNotificationDescription": "Bu bildirim yeni monitörler için varsayılan olarak etkinleştirilecektir. Bildirimi her monitör için ayrı ayrı devre dışı bırakabilirsiniz.",
"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?",
"confirmClearStatisticsMsg": "Tüm istatistikleri silmek istediğinden emin misin?",
@ -58,7 +58,7 @@
"Delete": "Sil",
"Current": "Şu anda",
"Uptime": "Çalışma zamanı",
"Cert Exp.": "Sertifika Geç. Süresi",
"Cert Exp.": "Sertifika Geçerlilik Süresi.",
"day": "gün | günler",
"-day": "-gün",
"hour": "saat",
@ -277,7 +277,7 @@
"lineDevConsoleTo": "Line Geliştirici Konsolu - {0}",
"Basic Settings": "Temel Ayarlar",
"User ID": "Kullanıcı ID",
"Messaging API": "Messaging API",
"Messaging API": "Mesajlaşma API'si",
"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.",
@ -794,7 +794,6 @@
"webhookBodyPresetOption": "Ön ayar - {0}",
"webhookBodyCustomOption": "Özel Gövde",
"Request Body": "İstek Gövdesi",
"jsonQueryDescription": "Yanıta karşı bir json sorgusu yapın ve beklenen değeri kontrol edin (Dönüş değeri, karşılaştırma için dizgeye dönüştürülür). Sorgu diliyle ilgili belgeler için {0}'a bakın. Bir oyun alanı {1} bulunabilir.",
"twilioApiKey": "Api Anahtarı (isteğe bağlı)",
"Expected Value": "Beklenen Değer",
"Json Query": "Json Sorgusu",
@ -830,7 +829,7 @@
"noOrBadCertificate": "Sertifika Yok/Geçersiz",
"Select": "Seç",
"PushDeer Server": "PushDeer Sunucusu",
"wayToGetFlashDutyKey": "Kanal -> (Bir Kanal Seçin) -> Entegrasyonlar -> Yeni entegrasyon ekle sayfasına gidebilir, bir push adresi almak için bir 'Özel Etkinlik' ekleyebilir, adresteki Entegrasyon Anahtarını kopyalayabilirsiniz. Daha fazla bilgi için lütfen ziyaret edin",
"wayToGetFlashDutyKey": "Kanal -> (Bir Kanal Seçin) -> Entegrasyonlar -> Yeni bir entegrasyon ekle' sayfasına gidebilir, bir push adresi almak için 'Çalışma Süresi Kuma' ekleyebilir, Entegrasyon Anahtarını adrese kopyalayabilirsiniz. Daha fazla bilgi için lütfen ziyaret edin",
"selectedMonitorCount": "Seçildi: {0}",
"Check/Uncheck": "İşaretle/İşareti Kaldır",
"pushDeerServerDescription": "Resmi sunucuyu kullanmak için boş bırakın",
@ -844,7 +843,7 @@
"enableNSCD": "Tüm DNS isteklerini önbelleğe almak için NSCD'yi (Ad Hizmeti Önbellek Programı) etkinleştirin",
"setupDatabaseEmbeddedMariaDB": "Hiçbir şey ayarlamanıza gerek yok. Bu docker imajı, MariaDB'yi sizin için otomatik olarak yerleştirdi ve yapılandırdı. Çalışma Süresi Kuma bu veritabanına unix soketi aracılığıyla bağlanacaktır.",
"setupDatabaseSQLite": "Küçük ölçekli dağıtımlar için önerilen basit bir veritabanı dosyası. v2.0.0'dan önce Uptime Kuma, varsayılan veritabanı olarak SQLite'ı kullanıyordu.",
"setupDatabaseChooseDatabase": "Hangi veritabanını kullanmak istiyorsunuz?",
"setupDatabaseChooseDatabase": "Hangi veritabanını kullanmak istersiniz?",
"setupDatabaseMariaDB": "Harici bir MariaDB veritabanına bağlanın. Veritabanı bağlantı bilgilerini ayarlamanız gerekir.",
"dbName": "Veritabanı ismi",
"Saved.": "Kaydedildi.",
@ -918,5 +917,60 @@
"settingUpDatabaseMSG": "Veritabanı kuruluyor. Biraz zaman alabilir, lütfen sabırlı olun.",
"statusPageSpecialSlugDesc": "Özel slug {0}: slug belirtilmediğinde bu sayfa gösterilecektir",
"ntfyPriorityHelptextAllExceptDown": "Önceliği {1} olan {0}-olayları hariç tüm olaylar bu öncelik ile gönderilir",
"What is a Remote Browser?": "Uzak Tarayıcı Nedir?"
"What is a Remote Browser?": "Uzak Tarayıcı Nedir?",
"Your User ID": "Kullanıcı kimliğiniz",
"Channel access token (Long-lived)": "Kanal erişim tokenı (Uzun ömürlü)",
"wayToGetHeiiOnCallDetails": "Tetikleyici Kimliği ve API Anahtarlarının nasıl alınacağı {dokümantasyon} bölümünde açıklanmıştır",
"documentationOf": "{0} Dokümantasyon",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Telefon Numarasından / İletim Yolu Kaynak Adresinden (TPOA)",
"gtxMessagingFromHint": "Cep telefonlarında, alıcılarınız mesajın göndericisi olarak görüntülenen TPOA'yı görür. En fazla 11 alfanümerik karakter, bir kısa kod, yerel uzun kod veya uluslararası numaralara izin verilir ({e164}, {e212} veya {e214})",
"To Phone Number": "Telefon Numarasına",
"gtxMessagingToHint": "Uluslararası format, başında \"+\" ile ({e164}, {e212} veya {e214})",
"gtxMessagingApiKeyHint": "API anahtarınızı şu adreste bulabilirsiniz: Yönlendirme Hesaplarım > Hesap Bilgilerini Göster > API Kimlik Bilgileri > REST API (v2.x)",
"Destination": "Varış Noktası",
"cellsyntDestination": "Alıcının uluslararası formattaki telefon numarası, baştaki 00 ve ardından ülke kodu, örneğin İngiltere numarası 07920 110 000 için 00447920110000 (toplamda en fazla 17 hane). HTTP isteği başına maksimum 25000 virgülle ayrılmış alıcı.",
"Allow Long SMS": "Uzun SMS'e İzin Ver",
"cellsyntSplitLongMessages": "Uzun mesajları en fazla 6 parçaya bölün. 153 x 6 = 918 karakter.",
"max 15 digits": "maksimum 15 hane",
"Originator type": "Kaynak tipi",
"Alphanumeric (recommended)": "Alfanümerik (önerilir)",
"Telephone number": "Telefon numarası",
"cellsyntOriginatortypeAlphanumeric": "Alfanümerik dize (maksimum 11 alfanümerik karakter). Alıcılar mesajı yanıtlayamaz.",
"cellsyntOriginatortypeNumeric": "Başında 00 olmadan uluslararası formatta telefon numarası içeren sayısal değer (maksimum 15 hane) (örneğin İngiltere numarası 07920 110 000 447920110000 olarak ayarlanmalıdır). Alıcılar mesajı yanıtlayabilir.",
"Originator": "Kaynak",
"cellsyntOriginator": "Alıcının cep telefonunda mesajın kaynağı olarak görünür. İzin verilen değerler ve işlev kaynaktipi parametresine bağlıdır.",
"callMeBotGet": "Burada {0}, {1} ve {2} için bir uç nokta oluşturabilirsiniz. Hız sınırlaması alabileceğinizi unutmayın. Hız limitleri şöyle görünür: {3}",
"wayToWriteWhapiRecipient": "Uluslararası ön eke sahip, ancak başında artı işareti olmayan telefon numarası ({0}), Kişi Kimliği ({1}) veya Grup Kimliği ({2}).",
"wayToGetWhapiUrlAndToken": "API URL'sini ve belirtecini {0} adresinden istediğiniz kanala girerek alabilirsiniz",
"whapiRecipient": "Telefon Numarası / Kişi Kimliği / Grup Kimliği",
"API URL": "API URL",
"max 11 alphanumeric characters": "maksimum 11 alfanümerik karakter",
"Mentioning": "Bahsetme",
"Don't mention people": "İnsanlardan bahsetme",
"Mention group": "Mention {grup}",
"wayToGetSevenIOApiKey": "App.seven.io > geliştirici > API anahtarı > yeşil ekle düğmesi altındaki kontrol panelini ziyaret edin",
"senderSevenIO": "Numara veya isim gönderiliyor",
"receiverSevenIO": "Alıcı numarası",
"apiKeySevenIO": "SevenIO API Anahtarı",
"receiverInfoSevenIO": "Alıcı numara Almanya'da değilse, numaranın önüne ülke kodunu eklemeniz gerekir (örneğin, ABD'den ülke kodu 1 için 017612121212 yerine 117612121212 kullanın)",
"locally configured mail transfer agent": "yerel olarak yapılandırılmış posta aktarım aracısı",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Bağlanmak istediğiniz sunucunun ana bilgisayar adını girin veya {local_mta} kullanmayı düşünüyorsanız {localhost} girin",
"Host URL": "Host URL",
"whatHappensAtForumPost": "Yeni bir forum gönderisi oluşturun. Bu, mevcut gönderiye mesaj YAYINLAMAZ. Mevcut gönderide yayınlamak için \"{option}\" seçeneğini kullanın",
"Command": "Komut",
"mongodbCommandDescription": "Veritabanına karşı bir MongoDB komutu çalıştırın. Mevcut komutlar hakkında bilgi için {dokümantasyona} bakın",
"Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
"wayToGetBitrix24Webhook": "{0} adresindeki adımları izleyerek bir web kancası oluşturabilirsiniz",
"bitrix24SupportUserID": "Bitrix24'e kullanıcı kimliğinizi girin. Kullanıcının profiline giderek bağlantıdan kimliğini öğrenebilirsiniz.",
"Select message type": "Mesaj türünü seçin",
"Send to channel": "Kanala gönder",
"Create new forum post": "Yeni forum gönderisi oluştur",
"postToExistingThread": "Mevcut konuya / forum gönderisine gönder",
"forumPostName": "Forum gönderi adı",
"Refresh Interval": "Yenileme aralığı",
"Refresh Interval Description": "Durum sayfası her {0} saniyede bir tam site yenilemesi yapacaktır",
"ignoreTLSErrorGeneral": "Bağlantı için TLS/SSL hatasını yoksay",
"threadForumPostID": "Konu / Forum gönderi kimliği",
"e.g. {discordThreadID}": "Örneğin. {discordThreadID}",
"wayToGetDiscordThreadId": "Konu başlığı/forum gönderisi kimliği almak, kanal kimliği almaya benzer. Kimliklerin nasıl alınacağı hakkında daha fazla bilgi edinin {0}"
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save