Compare commits

..

25 Commits

Author SHA1 Message Date
Devang Saklani
aed7b63fc4 Fixes buttons getting out of view on mobile screens less than 450px #5978 (#6113)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-09-09 10:09:04 +02:00
Jozef Gaal
ed3538f72f Update i18n.js (#6111)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-09-06 23:14:11 +02:00
Louis Lam
c6a029a895 Generate a better changelog (#5948)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-09-05 13:01:18 +08:00
Louis Lam
c6048d56b4 Release 2.0.0-beta.4 (#6104) 2025-09-05 12:55:03 +08:00
Kanwarpreet Singh
0e30c43a80 Cache Cleared (#6101) 2025-09-04 14:03:35 +02:00
Louis Lam
cd9f83c54f Update Dependencies (#6094) 2025-08-31 01:39:46 +08:00
Louis Lam
3ce73684b5 Translations Update from Weblate (#6033) 2025-08-31 01:38:59 +08:00
Skalerr
e79be2af22 Translated using Weblate (Russian)
Currently translated at 96.4% (1099 of 1139 strings)

Co-authored-by: Skalerr <rob06121@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Maximiliano Simonazzi
567f9b2b30 Translated using Weblate (Spanish)
Currently translated at 99.0% (1128 of 1139 strings)

Co-authored-by: Maximiliano Simonazzi <maxisimonazzi@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
JPar99
ffa041f8f2 Translated using Weblate (Dutch)
Currently translated at 95.1% (1079 of 1134 strings)

Co-authored-by: JPar99 <github.wad969@passmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Marco
f191699e63 Translated using Weblate (German)
Currently translated at 100.0% (1139 of 1139 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1139 of 1139 strings)

Translated using Weblate (German)

Currently translated at 100.0% (1134 of 1134 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1134 of 1134 strings)

Co-authored-by: Marco <marco@nanoweb.ch>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Buchtič
470600df5b Translated using Weblate (Czech)
Currently translated at 100.0% (1134 of 1134 strings)

Co-authored-by: Buchtič <martin.buchta@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
stanol
e8509e9904 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1139 of 1139 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (1134 of 1134 strings)

Co-authored-by: stanol <stanol777@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Alex
9744f2a027 Translated using Weblate (Russian)
Currently translated at 97.0% (1100 of 1134 strings)

Co-authored-by: Alex <alexcez@bk.ru>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Aluisio
15a9b3d46f Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1134 of 1134 strings)

Co-authored-by: Aluisio <aluisiodeavila@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Adhitya R. K. Putra
7b0bb866f7 Translated using Weblate (Indonesian)
Currently translated at 91.3% (1036 of 1134 strings)

Co-authored-by: Adhitya R. K. Putra <adhitya.putra1903@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Cyril59310
027191503d Translated using Weblate (French)
Currently translated at 100.0% (1139 of 1139 strings)

Translated using Weblate (French)

Currently translated at 100.0% (1134 of 1134 strings)

Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
MrEddX
7cedf5a417 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1139 of 1139 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1134 of 1134 strings)

Co-authored-by: MrEddX <mreddx@chatrix.one>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Marc
9c816cd3cd Translated using Weblate (Catalan)
Currently translated at 54.0% (612 of 1132 strings)

Co-authored-by: Marc <marccasellasmuns@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Frederich Pedersen
4246290eed Translated using Weblate (Danish)
Currently translated at 67.9% (769 of 1132 strings)

Co-authored-by: Frederich Pedersen <frodo@hobbits.dk>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/da/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Ivan Bratović
cc67be8b4b Translated using Weblate (Croatian)
Currently translated at 100.0% (1134 of 1134 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (1132 of 1132 strings)

Co-authored-by: Ivan Bratović <ivanbratovic4@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Àlex
91681c7fce Translated using Weblate (Spanish)
Currently translated at 99.0% (1121 of 1132 strings)

Translated using Weblate (Spanish)

Currently translated at 98.4% (1115 of 1132 strings)

Translated using Weblate (Spanish)

Currently translated at 96.5% (1093 of 1132 strings)

Co-authored-by: Àlex <ladiv12@pm.me>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
AnnAngela
13917111fd Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1132 of 1132 strings)

Co-authored-by: AnnAngela <naganjue@vip.qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Gunnar Norin
69f1a73873 Translated using Weblate (Swedish)
Currently translated at 86.7% (982 of 1132 strings)

Co-authored-by: Gunnar Norin <gunnar.norin@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sv/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
Panagiotis Savvaidis
4c6f8d3e3b Translated using Weblate (Greek)
Currently translated at 66.2% (750 of 1132 strings)

Co-authored-by: Panagiotis Savvaidis <wild13sol@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/el/
Translation: Uptime Kuma/Uptime Kuma
2025-08-30 17:29:37 +00:00
28 changed files with 597 additions and 131 deletions

View File

@@ -24,9 +24,7 @@ if (! exists) {
// Also update package-lock.json
const npm = /^win/.test(process.platform) ? "npm.cmd" : "npm";
childProcess.spawnSync(npm, [ "install" ]);
commit(version);
tag(version);
} else {
console.log("version tag exists, please delete the tag or use another tag");
@@ -54,19 +52,6 @@ function commit(version) {
console.log(res.stdout.toString().trim());
}
/**
* Create a tag with the specified version
* @param {string} version Tag to create
* @returns {void}
*/
function tag(version) {
let res = childProcess.spawnSync("git", [ "tag", version ]);
console.log(res.stdout.toString().trim());
res = childProcess.spawnSync("git", [ "push", "origin", version ]);
console.log(res.stdout.toString().trim());
}
/**
* Check if a tag exists for the specified version
* @param {string} version Version to check

View File

@@ -0,0 +1,201 @@
// Script to generate changelog
// Usage: node generate-changelog.mjs <previous-version-tag>
// GitHub CLI (gh command) is required
import * as childProcess from "child_process";
const ignoreList = [
"louislam",
"CommanderStorm",
"UptimeKumaBot",
"weblate",
"Copilot"
];
const mergeList = [
"Translations Update from Weblate",
"Update dependencies",
];
const template = `
LLM Task: Please help to put above PRs into the following sections based on their content. If a PR fits multiple sections, choose the most relevant one. If a PR doesn't fit any section, place it in "Others". If there are grammatical errors in the PR titles, please correct them. Don't change the PR numbers and authors, and keep the format. Output as markdown.
Changelog:
### 🆕 New Features
### 💇‍♀️ Improvements
### 🐞 Bug Fixes
### ⬆️ Security Fixes
### 🦎 Translation Contributions
### Others
- Other small changes, code refactoring and comment/doc updates in this repo:
`;
await main();
/**
* Main Function
* @returns {Promise<void>}
*/
async function main() {
const previousVersion = process.argv[2];
if (!previousVersion) {
console.error("Please provide the previous version as the first argument.");
process.exit(1);
}
console.log(`Generating changelog since version ${previousVersion}...`);
try {
const prList = await getPullRequestList(previousVersion);
const list = [];
let i = 1;
for (const pr of prList) {
console.log(`Progress: ${i++}/${prList.length}`);
let authorSet = await getAuthorList(pr.number);
authorSet = await mainAuthorToFront(pr.author.login, authorSet);
if (mergeList.includes(pr.title)) {
// Check if it is already in the list
const existingItem = list.find(item => item.title === pr.title);
if (existingItem) {
existingItem.numbers.push(pr.number);
for (const author of authorSet) {
existingItem.authors.add(author);
// Sort the authors
existingItem.authors = new Set([ ...existingItem.authors ].sort((a, b) => a.localeCompare(b)));
}
continue;
}
}
const item = {
numbers: [ pr.number ],
title: pr.title,
authors: authorSet,
};
list.push(item);
}
for (const item of list) {
// Concat pr numbers into a string like #123 #456
const prPart = item.numbers.map(num => `#${num}`).join(" ");
// Concat authors into a string like @user1 @user2
let authorPart = [ ...item.authors ].map(author => `@${author}`).join(" ");
if (authorPart) {
authorPart = `(Thanks ${authorPart})`;
}
console.log(`- ${prPart} ${item.title} ${authorPart}`);
}
console.log(template);
} catch (e) {
console.error("Failed to get pull request list:", e);
process.exit(1);
}
}
/**
* @param {string} previousVersion Previous Version Tag
* @returns {Promise<object>} List of Pull Requests merged since previousVersion
*/
async function getPullRequestList(previousVersion) {
// Get the date of previousVersion in YYYY-MM-DD format from git
const previousVersionDate = childProcess.execSync(`git log -1 --format=%cd --date=short ${previousVersion}`).toString().trim();
if (!previousVersionDate) {
throw new Error(`Unable to find the date of version ${previousVersion}. Please make sure the version tag exists.`);
}
const ghProcess = childProcess.spawnSync("gh", [
"pr",
"list",
"--state",
"merged",
"--base",
"master",
"--search",
`merged:>=${previousVersionDate}`,
"--json",
"number,title,author",
"--limit",
"1000"
], {
encoding: "utf-8"
});
if (ghProcess.error) {
throw ghProcess.error;
}
if (ghProcess.status !== 0) {
throw new Error(`gh command failed with status ${ghProcess.status}: ${ghProcess.stderr}`);
}
return JSON.parse(ghProcess.stdout);
}
/**
* @param {number} prID Pull Request ID
* @returns {Promise<Set<string>>} Set of Authors' GitHub Usernames
*/
async function getAuthorList(prID) {
const ghProcess = childProcess.spawnSync("gh", [
"pr",
"view",
prID,
"--json",
"commits"
], {
encoding: "utf-8"
});
if (ghProcess.error) {
throw ghProcess.error;
}
if (ghProcess.status !== 0) {
throw new Error(`gh command failed with status ${ghProcess.status}: ${ghProcess.stderr}`);
}
const prInfo = JSON.parse(ghProcess.stdout);
const commits = prInfo.commits;
const set = new Set();
for (const commit of commits) {
for (const author of commit.authors) {
if (author.login && !ignoreList.includes(author.login)) {
set.add(author.login);
}
}
}
// Sort the set
return new Set([ ...set ].sort((a, b) => a.localeCompare(b)));
}
/**
* @param {string} mainAuthor Main Author
* @param {Set<string>} authorSet Set of Authors
* @returns {Set<string>} New Set with mainAuthor at the front
*/
async function mainAuthorToFront(mainAuthor, authorSet) {
if (ignoreList.includes(mainAuthor)) {
return authorSet;
}
return new Set([ mainAuthor, ...authorSet ]);
}

View File

@@ -1,44 +0,0 @@
// Generate on GitHub
const input = `
* Add Korean translation by @Alanimdeo in https://github.com/louislam/dockge/pull/86
`;
const template = `
### 🆕 New Features
### 💇‍♀️ Improvements
### 🐞 Bug Fixes
### ⬆️ Security Fixes
### 🦎 Translation Contributions
### Others
- Other small changes, code refactoring and comment/doc updates in this repo:
`;
const lines = input.split("\n").filter((line) => line.trim() !== "");
for (const line of lines) {
// Split the last " by "
const usernamePullRequesURL = line.split(" by ").pop();
if (!usernamePullRequesURL) {
console.log("Unable to parse", line);
continue;
}
const [ username, pullRequestURL ] = usernamePullRequesURL.split(" in ");
const pullRequestID = "#" + pullRequestURL.split("/").pop();
let message = line.split(" by ").shift();
if (!message) {
console.log("Unable to parse", line);
continue;
}
message = message.split("* ").pop();
console.log("-", pullRequestID, message, `(Thanks ${username})`);
}
console.log(template);

View File

@@ -8,7 +8,7 @@ import {
checkVersionFormat,
getRepoNames,
pressAnyKey,
execSync, uploadArtifacts,
execSync, uploadArtifacts, checkReleaseBranch,
} from "./lib.mjs";
import semver from "semver";
@@ -23,6 +23,9 @@ if (!githubToken) {
process.exit(1);
}
// Check if the current branch is "release"
checkReleaseBranch();
// Check if the version is a valid semver
checkVersionFormat(version);

View File

@@ -7,7 +7,7 @@ import {
checkTagExists,
checkVersionFormat,
getRepoNames,
pressAnyKey, execSync, uploadArtifacts
pressAnyKey, execSync, uploadArtifacts, checkReleaseBranch
} from "./lib.mjs";
const repoNames = getRepoNames();
@@ -21,6 +21,9 @@ if (!githubToken) {
process.exit(1);
}
// Check if the current branch is "release"
checkReleaseBranch();
// Check if the version is a valid semver
checkVersionFormat(version);

View File

@@ -249,3 +249,16 @@ export function execSync(cmd) {
console.info(`[DRY RUN] ${cmd}`);
}
}
/**
* Check if the current branch is "release"
* @returns {void}
*/
export function checkReleaseBranch() {
const res = childProcess.spawnSync("git", [ "rev-parse", "--abbrev-ref", "HEAD" ]);
const branch = res.stdout.toString().trim();
if (branch !== "release") {
console.error(`Current branch is ${branch}, please switch to "release" branch`);
process.exit(1);
}
}

View File

@@ -28,9 +28,7 @@ if (! exists) {
// Also update package-lock.json
const npm = /^win/.test(process.platform) ? "npm.cmd" : "npm";
childProcess.spawnSync(npm, [ "install" ]);
commit(newVersion);
tag(newVersion);
} else {
console.log("version exists");
@@ -54,16 +52,6 @@ function commit(version) {
}
}
/**
* Create a tag with the specified version
* @param {string} version Tag to create
* @returns {void}
*/
function tag(version) {
let res = childProcess.spawnSync("git", [ "tag", version ]);
console.log(res.stdout.toString().trim());
}
/**
* Check if a tag exists for the specified version
* @param {string} version Version to check

View File

@@ -1,6 +1,6 @@
{
"name": "uptime-kuma",
"version": "2.0.0-beta.3",
"version": "2.0.0-beta.4",
"license": "MIT",
"repository": {
"type": "git",
@@ -64,7 +64,8 @@
"quick-run-nightly": "docker run --rm --env NODE_ENV=development -p 3001:3001 louislam/uptime-kuma:nightly2",
"start-dev-container": "cd docker && docker-compose -f docker-compose-dev.yml up --force-recreate",
"rebase-pr-to-1.23.X": "node extra/rebase-pr.js 1.23.X",
"reset-migrate-aggregate-table-state": "node extra/reset-migrate-aggregate-table-state.js"
"reset-migrate-aggregate-table-state": "node extra/reset-migrate-aggregate-table-state.js",
"generate-changelog": "node ./extra/generate-changelog.mjs"
},
"dependencies": {
"@grpc/grpc-js": "~1.8.22",

View File

@@ -343,6 +343,8 @@ module.exports.statusPageSocketHandler = (socket) => {
statusPageID
]);
apicache.clear();
} else {
throw new Error("Status Page is not found");
}

View File

@@ -47,6 +47,7 @@ const languageList = {
"ge": "ქართული",
"uz": "O'zbek tili",
"ga": "Gaeilge",
"sk": "Slovenčina",
};
let messages = {

View File

@@ -1180,5 +1180,12 @@
"mqttWebsocketPathInvalid": "Моля, използвайте валиден формат на пътя за Уеб сокет",
"Path": "Път",
"mqttWebsocketPathExplanation": "Уеб сокет път за MQTT през Уеб сокет връзки (напр. /mqtt)",
"mqttHostnameTip": "Моля, използвайте този формат {hostnameFormat}"
"mqttHostnameTip": "Моля, използвайте този формат {hostnameFormat}",
"issueWithGoogleChatOnAndroidHelptext": "Това позволява да се заобиколят грешки, като например {issuetackerURL}",
"Template plain text instead of using cards": "Шаблон с обикновен текст вместо използване на карти",
"Events cleared successfully": "Събитията са изчистени успешно.",
"No monitors found": "Не са намерени монитори.",
"Clear All Events": "Изчисти всички събития",
"clearAllEventsMsg": "Сигурни ли сте, че желатет да изчистите всички събития?",
"Could not clear events": "Неуспешен опит за изчистване на {failed}/{total} събития"
}

View File

@@ -569,5 +569,50 @@
"Messaging API": "API de missatges",
"wayToGetLineChannelToken": "Primer accediu a {0}, creeu un proveïdor i un canal (API de missatgeria) i, a continuació, podeu obtenir el token d'accés al canal i l'identificador d'usuari dels elements del menú esmentats anteriorment.",
"Icon URL": "URL de la icona",
"aboutIconURL": "Pots donar un enllaç a la imatge a \"URL de la icona\" per sobreposar-la a la imatge de perfil pere defecte. No s'usarà si hi ha una icona d'emoji establerta."
"aboutIconURL": "Pots donar un enllaç a la imatge a \"URL de la icona\" per sobreposar-la a la imatge de perfil pere defecte. No s'usarà si hi ha una icona d'emoji establerta.",
"tagAlreadyOnMonitor": "Aquesta etiqueta (nom i valor) ja hi és al monitor o està pendent d'afegir.",
"mqttWebsocketPathInvalid": "Si us plau, feu servir un format de directori de WebSocket vàlid",
"confirmDeleteTagMsg": "Estàs segur que vols eliminar aquesta etiqueta? Els monitors associats amb aquesta etiqueta no seran eliminats.",
"To Phone Number": "Al número de telèfon",
"Manual": "Manual",
"aboutMattermostChannelName": "Podeu substituir el canal predeterminat al qual publica el Webhook introduint el nom del canal al camp \"Nom del canal\". Això s'ha d'activar a la configuració de Mattermost Webhook. Ex: #altre-canal",
"enableGRPCTls": "Permet enviar una sol·licitud gRPC amb connexió TLS",
"deleteMaintenanceMsg": "N'esteu segur que voleu suprimir aquest manteniment?",
"dnsPortDescription": "Port del servidor DNS. El valor predeterminat és 53. Podeu canviar el port en qualsevol moment.",
"enableDefaultNotificationDescription": "Aquesta notificació s'habilitarà per defecte per als monitors nous. Encara podeu desactivar la notificació per separat per a cada monitor.",
"importHandleDescription": "Trieu \"Omet l'existent\" si voleu ometre tots els monitors o notificacions amb el mateix nom. \"Sobreescriure\" suprimirà tots els monitors i notificacions existents.",
"affectedStatusPages": "Mostra aquest missatge de manteniment a les pàgines d'estat seleccionades",
"Path": "Directori",
"mqttWebSocketPath": "Directori MQTT WebSocket",
"mqttHostnameTip": "Si us plau, feu servir aquest format {hostnameFormat}",
"mqttWebsocketPathExplanation": "Directori de WebSocket per a MQTT a través de connexions WebSocket (p. ex., /mqtt)",
"Use HTML for custom E-mail body": "Utilitzeu HTML per al cos personalitzat del correu electrònic",
"dataRetentionTimeError": "El període de retenció ha de ser 0 o superior",
"infiniteRetention": "Establiu a 0 per a una retenció infinita.",
"grpcMethodDescription": "El nom del mètode es converteix en format camelCase, com ara sayHello, check, etc.",
"acceptedStatusCodesDescription": "Seleccioneu els codis d'estat que es considerin una resposta satisfactòria.",
"deleteMonitorMsg": "N'esteu segur que voleu suprimir aquest monitor?",
"deleteNotificationMsg": "Confirmes que vols suprimir aquesta notificació per a tots els monitors?",
"resolverserverDescription": "Cloudflare és el servidor predeterminat. Podeu canviar el servidor de resolució en qualsevol moment.",
"rrtypeDescription": "Seleccioneu el tipus de RR que voleu controlar",
"pauseMonitorMsg": "Segur que vols pausar-ho?",
"clearEventsMsg": "Confirmes que vols suprimir tots els esdeveniments d'aquest monitor?",
"clearHeartbeatsMsg": "Confirmes que vols suprimir tots els batecs d'aquest monitor?",
"confirmClearStatisticsMsg": "Esteu segur que voleu suprimir TOTES les estadístiques?",
"confirmImportMsg": "N'esteu segur que voleu importar la còpia de seguretat? Verifiqueu que heu seleccionat l'opció d'importació correcta.",
"twoFAVerifyLabel": "Introduïu el vostre token per verificar 2FA:",
"tokenValidSettingsMsg": "El token és vàlid! Ara podeu desar la configuració de 2FA.",
"confirmEnableTwoFAMsg": "N'esteu segur que voleu activar 2FA?",
"confirmDisableTwoFAMsg": "Esteu segur que voleu deshabilitar 2FA?",
"recurringIntervalMessage": "Executar un cop cada dia | Executeu un cop cada {0} dies",
"affectedMonitorsDescription": "Seleccioneu els monitors afectats pel manteniment actual",
"atLeastOneMonitor": "Seleccioneu almenys un monitor afectat",
"passwordNotMatchMsg": "La contrasenya repetida no coincideix.",
"notificationDescription": "Les notificacions s'han d'assignar a un monitor perquè funcionin.",
"pushyToken": "Token de dispositiu",
"Add Tags": "Afegir etiquetes",
"tagAlreadyStaged": "Aquesta etiqueta (nom i valor) ja està preparada per a aquest lot.",
"tagNameExists": "Ja existeix una etiqueta del sistema amb aquest nom. Seleccioneu-la de la llista o utilitzeu un nom diferent.",
"high": "alt",
"defaultFriendlyName": "Nou monitor"
}

View File

@@ -1173,5 +1173,7 @@
"mqttWebsocketPathInvalid": "Použijte, prosím platný formát WebSocket cesty",
"mqttHostnameTip": "Použijte, prosím tento formát {hostnameFormat}",
"mqttWebSocketPath": "MQTT WebSocket cesta",
"mqttWebsocketPathExplanation": "WebSocket cesta pro MQTT prostřednictvím WebSocket spojení (např. /mqtt)"
"mqttWebsocketPathExplanation": "WebSocket cesta pro MQTT prostřednictvím WebSocket spojení (např. /mqtt)",
"Template plain text instead of using cards": "Šablona prostého textu namísto použití karet",
"issueWithGoogleChatOnAndroidHelptext": "Tím se můžete rovněž vyhnout chybám v upstreamu jako je {issuetackerURL}"
}

View File

@@ -798,5 +798,9 @@
"Host URL": "Host URL",
"Request Timeout": "Anmod Timeout",
"Cannot connect to the socket server": "Kan ikke oprette forbindelse til socket serveren",
"pushViewCode": "Hvordan bruger man Push Monitor? (Se kode)"
"pushViewCode": "Hvordan bruger man Push Monitor? (Se kode)",
"Path": "Sti",
"Add Tags": "Tilføj Tags",
"tagAlreadyOnMonitor": "Dette tag (navn og værdi) er allerde tilføjet til denne overvågning, eller afventer tilføjelse.",
"defaultFriendlyName": "Ny Overvågning"
}

View File

@@ -1177,5 +1177,12 @@
"mqttWebSocketPath": "MQTT WebSocket Pfad",
"mqttWebsocketPathExplanation": "WebSocket-Pfad für MQTT über WebSocket-Verbindungen (z. B. /mqtt)",
"mqttWebsocketPathInvalid": "Verwende ein gültiges WebSocket-Pfadformat",
"mqttHostnameTip": "Verwende dieses Format {hostnameFormat}"
"mqttHostnameTip": "Verwende dieses Format {hostnameFormat}",
"Template plain text instead of using cards": "Textvorlage anstelle von Karten",
"issueWithGoogleChatOnAndroidHelptext": "Dies ermöglicht auch die Umgehung von Fehlern im Vorfeld wie {issuetackerURL}",
"Clear All Events": "Alle Ereignisse löschen",
"clearAllEventsMsg": "Möchtest du wirklich alle Ereignisse löschen?",
"Events cleared successfully": "Ereignisse erfolgreich gelöscht.",
"No monitors found": "Keine Monitore gefunden.",
"Could not clear events": "{failed}/{total} Ereignisse konnten nicht gelöscht werden"
}

View File

@@ -1180,5 +1180,12 @@
"Path": "Pfad",
"mqttWebSocketPath": "MQTT WebSocket Pfad",
"mqttWebsocketPathExplanation": "WebSocket-Pfad für MQTT über WebSocket-Verbindungen (z. B. /mqtt)",
"mqttHostnameTip": "Verwende dieses Format {hostnameFormat}"
"mqttHostnameTip": "Verwende dieses Format {hostnameFormat}",
"Template plain text instead of using cards": "Textvorlage anstelle von Karten",
"issueWithGoogleChatOnAndroidHelptext": "Dies ermöglicht auch die Umgehung von Fehlern im Vorfeld wie {issuetackerURL}",
"clearAllEventsMsg": "Möchtest du wirklich alle Ereignisse löschen?",
"Events cleared successfully": "Ereignisse erfolgreich gelöscht.",
"No monitors found": "Keine Monitore gefunden.",
"Could not clear events": "{failed}/{total} Ereignisse konnten nicht gelöscht werden",
"Clear All Events": "Alle Ereignisse löschen"
}

View File

@@ -5,7 +5,7 @@
"resendEveryXTimes": "Επανάληψη αποστολής ειδοποίησης κάθε {0} φορές",
"resendDisabled": "Η επανάληψη αποστολής ειδοποίησης είναι απενεργοποιημένη",
"retriesDescription": "Μέγιστες επαναλήψεις προτού η υπηρεσία επισημανθεί ως κατω και σταλεί μια ειδοποίηση",
"ignoreTLSError": "Παράβλεψη σφάλματος TLS/SSL για ιστότοπους HTTPS",
"ignoreTLSError": "Παράβλεψη σφαλμάτων TLS/SSL για ιστότοπους HTTPS",
"upsideDownModeDescription": "Αναποδογυρίστε την κατάσταση. Εάν η υπηρεσία είναι προσβάσιμη, είναι ΚΑΤΩ.",
"maxRedirectDescription": "Μέγιστος αριθμός redirect που θα ακολουθήσουν. Ρυθμίστε το 0 για να απενεργοποιήσετε τα redirect.",
"acceptedStatusCodesDescription": "Επιλέξτε κωδικούς κατάστασης που θεωρούνται επιτυχή.",
@@ -84,8 +84,8 @@
"pushOptionalParams": "Προαιρετικές παράμετροι: {0}",
"Save": "Αποθηκεύση",
"Notifications": "Ειδοποιήσεις",
"Not available, please setup.": "Μη διαθέσιμο, παρακαλώ ρυθμίστε.",
"Setup Notification": "Δημιουργία ειδοποίησης",
"Not available, please setup.": "Μη διαθέσιμο, παρακαλώ αρχικοποιήστε.",
"Setup Notification": "Αρχικοποίηση ειδοποίησης",
"Light": "Φωτεινό",
"Dark": "Σκοτεινό",
"Auto": "Αυτόματο",
@@ -547,7 +547,7 @@
"Query": "Query",
"settingsCertificateExpiry": "Λήξη πιστοποιητικού TLS",
"certificationExpiryDescription": "Οι παρακολουθήσεις HTTPS ενεργοποιούν ειδοποίηση όταν λήξει το πιστοποιητικό TLS σε:",
"Setup Docker Host": "Ρύθμιση Docker Host",
"Setup Docker Host": "Αρχικοποίηση Docker Host",
"Connection Type": "Τύπος σύνδεσης",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον κεντρικό υπολογιστή βάσης για όλες τις παρακολουθήσεις;",
@@ -611,7 +611,7 @@
"Affected Monitors": "Επηρεαζόμενοι Επόπτες",
"Pick Affected Monitors...": "Διαλέξτε Επηρεαζόμενους Επόπτες…",
"webhookAdditionalHeadersTitle": "Επιπρόσθετες Κεφαλίδες",
"webhookAdditionalHeadersDesc": "Ορίζει επιπρόσθετες κεφαλίδες που θα σταλθούν με το webhook.",
"webhookAdditionalHeadersDesc": "Ορίζει επιπρόσθετες κεφαλίδες που θα σταλθούν με το webhook. Κάθε κεφαλίδα πρέπει να ορίζεται ώς JSON ζεύγος κλειδιού/τιμής.",
"weekdayShortSun": "Κυρ",
"dayOfWeek": "Ημέρα της Εβδομάδας",
"dayOfMonth": "Ημέρα του Μήνα",
@@ -645,12 +645,12 @@
"warningTimezone": "Χρησιμοποιεί την ζώνη ώρας του server",
"squadcast": "Squadcast",
"IconUrl": "URL εικονιδίου",
"Enable DNS Cache": "Ενεργοποίηση DNS Cache",
"Enable DNS Cache": "(Καταργήθηκε) Ενεργοποίηση DNS Cache για οθόνες HTTP(s)",
"Enable": "Ενεργοποίηση",
"Disable": "Απενεργοποίηση",
"Single Maintenance Window": "Μονό Παράθυρο Συντήρησης",
"Maintenance Time Window of a Day": "Ημερίσιο πρόγραμμα Συντήρησης",
"Effective Date Range": "Ημερομηνιακό Διάστημα Εφαρμογής",
"Effective Date Range": "Ημερομηνιακό Διάστημα Εφαρμογής (Προαιρετικό)",
"Schedule Maintenance": "Προγραμματισμός Συντήρησης",
"Date and Time": "Ημερομηνία και Ώρα",
"DateTime Range": "Ημερομηνιακό Πλαίσιο",
@@ -708,5 +708,84 @@
"dbName": "Όνομα βάσης δεδομένων",
"Invert Keyword": "Αντιστροφή Λέξης-Κλειδιού",
"Expected Value": "Αναμενόμενη Τιμή",
"Json Query": "Ερώτημα Json"
"Json Query": "Ερώτημα Json",
"Add Tags": "Πρόσθεσε ετικέτες",
"tagAlreadyOnMonitor": "Η ετικέτα (όνομα και τιμή) υπάρχει ήδη στην Οθόνη ή αναμένει να προστεθεί.",
"tagNameExists": "Μια ετικέτα συστήματος υπάρχει ήδη με αυτό το όνομα. Επιλέξτε την από τη λίστα ή χρησιμοποιήστε διαφορετικό όνομα.",
"liquidIntroduction": "H ικανότητα προσαρμογής σε πρότυπο επιτυγχάνεται με τη γλώσσα προτύπων Liquid. Παρακαλώ βρείτε οδηγίες χρήσης στο {0}. Οι διαθέσιμες μεταβλητές είναι:",
"mqttWebsocketPathExplanation": "WebSocket μονοπάτι για MQTT πάνω σε συνδέσεις WebSocket (π.χ., /mqtt)",
"successKeyword": "Λέξη-κλειδί σε περίπτωση επιτυχίας",
"successKeywordExplanation": "MQTT Λέξη-κλειδί που θα θεωρηθεί επιτυχία",
"statusPageSpecialSlugDesc": "Ειδικό slug {0}: η σελίδα δεν θα φανεί αν δεν παρέχεται κανένα slug",
"Add a new expiry notification day": "Προσθέστε νέα μέρα ειδοποίησης λήξης",
"noDockerHostMsg": "Μη διαθέσιμο. Πρώτα αρχικοποιήστε εναν Docker Host.",
"tailscalePingWarning": "Προκειμένου να χρησιμοποιήσετε την οθόνη Tailscale Ping, χρειάζεται να εγκαταστήσετε το Uptime Kuma χωρίς Docker και επίσης εναν Tailscale client στον server σας.",
"telegramProtectContentDescription": "Αν είναι ενεργοποιημένο, τα μηνύματα από μποτς στο Telegram θα προστατεύονται από προώθηση και αποθήκευση.",
"telegramUseTemplateDescription": "Αν είναι ενεργοποιημένο, το μηνυμα θα σταλεί με προσαρμοσμένο πρότυπο.",
"telegramServerUrlDescription": "Για να υπερβείτε τους περιορισμούς του Bot API του Telegram ή να αποκτήσετε πρόσβαση σε αποκλεισμένες περιοχές (Κίνα, Ιραν, κλπ). Για περισσότερες πληροφορίες πατήστε {0}. Προεπιλογή: {1}",
"invalidCronExpression": "Μη έγκυρη έκφραση Cron: {0}",
"chromeExecutableDescription": "Για χρήστες Docker, αν το Chromium δεν είναι ακόμη εγκατεστημένο, μπορεί να πάρει μερικά λεπτά να εγκατασταθεί και να εμφανίσει το αποτέλεσμα της δοκιμής. Παίρνει 1GB χώρου στο δίσκο.",
"telegramServerUrl": "(Προαιρετικό) Server Url",
"Path": "Μονοπάτι",
"styleElapsedTimeShowWithLine": "Εμφάνισε (Με Γραμμή)",
"filterActive": "Ενεργό",
"filterActivePaused": "Σε Διακοπή",
"templateMsg": "μήνυμα ειδοποίησης",
"templateHeartbeatJSON": "Αντικείμενο που περιγράφει το heartbeat",
"templateMonitorJSON": "Αντικείμενο που περιγράφει την οθόνη",
"templateLimitedToUpDownCertNotifications": "διαθέσιμο μόνο για ειδοποιήσεις τύπου UP/DOWN/Certificate expiry",
"templateLimitedToUpDownNotifications": "Διαθέσιμο μόνο για ειδοποιήσεις τύπου UP/DOWN",
"mqttWebSocketPath": "Μονοπάτι MQTT WebSocket",
"mqttWebsocketPathInvalid": "Παρακαλώ χρησιμοποιείστε έγκυρη μορφή μονοπατιού WebSocket",
"mqttHostnameTip": "Παρακαλώ χρησιμοποιείστε τη μορφή {hostnameFormat}",
"Select": "Επιλέξτε",
"selectedMonitorCount": "Επιλεγμένο: {0}",
"Check/Uncheck": "Επιλέξτε/Απεπιλέξτε",
"Remove the expiry notification": "Αφαιρέστε την ημέρα ειδοποίησης λήξης",
"Refresh Interval": "Ανανεώστε το μεσοδιάστημα",
"Refresh Interval Description": "Η σελίδα κατάστασης θα ανανεώνεται κάθε {0} δευτερόλεπτα",
"DockerHostRequired": "Παρακαλώ ορίστε τον Docker Host για αυτή την οθόνη.",
"telegramMessageThreadID": "(Προαιρετικό) Αναγνωριστικό Νήματος Μηνύματος",
"telegramMessageThreadIDDescription": "Προαιρετικό μοναδικό αναγνωριστικό για τον νήμα (θέμα) που αναφέρεστε στο forum, μόνο για υπερσύνολα του forum",
"telegramSendSilently": "Στείλτε αθόρυβα",
"telegramProtectContent": "Προστατέψτε Προώθηση/Αποθήκευση",
"telegramUseTemplate": "Χρησιμοποιήστε προσαρμοσμένο πρότυπο μηνύματος",
"telegramTemplateFormatDescription": "Το Telegram επιτρέπει τη χρήση διαφορετικών γλωσσών markup για μηνύματα, βλέπε Telegram {0} για συγκεκριμένες λεπτομέρειες.",
"sameAsServerTimezone": "Ίδιο με τη ζώνη ώρας του Server",
"startDateTime": "Ημερομηνία/Ώρα έναρξης",
"endDateTime": "Ημερομηνία/Ώρα λήξης",
"cronExpression": "Έκφραση Cron",
"cronSchedule": "Πρόγραμμα: ",
"enableNSCD": "Ενεργοποιήστε NSCD (Name Service Cache Daemon) για προσωρινή αποθήκευση όλων των αιτημάτων DNS",
"chromeExecutable": "Εκτελέσιμο Chrome/Chromium",
"chromeExecutableAutoDetect": "Αυτόματος Εντοπισμός",
"Edit Maintenance": "Επεξεργασία Συντήρησης",
"tagAlreadyStaged": "Η ετικέτα (όνομα και τιμή) είναι ήδη σε κατάσταση staged για αυτό το batch.",
"Reset Token": "Επαναφορά Token",
"defaultFriendlyName": "Νέα Οθόνη",
"styleElapsedTimeShowNoLine": "Εμφάνισε (Χωρίς Γραμμή)",
"telegramSendSilentlyDescription": "Στέλνει το μήνυμα αθόρυβα. Οι χρήστες θα λάβουν ειδοποίηση χωρίς ήχο.",
"templateServiceName": "όνομα υπηρεσίας",
"templateHostnameOrURL": "hostname ή URL",
"templateStatus": "κατάσταση",
"webhookBodyPresetOption": "Πρότυπο - {0}",
"webhookBodyCustomOption": "Προσαρμοσμένο Σώμα",
"and": "και",
"Search monitored sites": "Αναζητήστε παρακολουθούμενα sites",
"shrinkDatabaseDescriptionSqlite": "Πυροδοτήστε τη βαση δεδομένων {vacuum} για SQLite. Το {auto_vacuum} είναι ήδη ενεργοποιημένο αλλα αυτό δεν ανασυγκροτεί τη βάση ούτε επανενώνει μεμονωμένες σελίδες στη βάση όπως το κάνει η εντολή {vacuum}.",
"Host URL": "Host 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 του server που θέλετε να συνδεθείτε ή {localhost} αν σκοπεύετε να χρησιμοποιήσετε την επιλογή {local_mta}",
"now": "τώρα",
"ignoredTLSError": "Έχουν αγνοηθεί τα σφάλματα TLS/SSL",
"ignoreTLSErrorGeneral": "Παράβλεψη σφάλματος TLS/SSL για σύνδεση",
"programmingLanguages": "Γλώσσες Προγραμματισμού",
"styleElapsedTime": "Παρελθόν χρόνος υπό την μπάρα heartbeat",
"pushOthers": "Άλλα",
"time ago": "πριν από {0}",
"-year": "-έτος",
"Json Query Expression": "Έκφραση Json Query",
"Request Timeout": "Timeout Αιτήματος",
"timeoutAfter": "Λήξη χρόνου ύστερα από {0} δευτερόλεπτα",
"pushViewCode": "Πώς να χρησιμοποιήσω Οθόνη Push (βλέπε κώδικα)"
}

View File

@@ -1106,7 +1106,64 @@
"smseagleDuration": "Duración (en segundos)",
"smseagleApiv1": "APIv1 (para proyectos existentes y retrocompatibilidad)",
"smseagleApiv2": "APIv2 (recomendada para nuevas integraciones)",
"templateServiceName": "Nombre del servicio",
"templateHostnameOrURL": "Nombre del host o URL",
"templateStatus": "Estado"
"templateServiceName": "nombre de servicio",
"templateHostnameOrURL": "Nombre de host o URL",
"templateStatus": "estado",
"mqttWebsocketPathInvalid": "Por favor, utiliza un formato válido de ruta WebSocket",
"smseagleDocs": "Consulte la documentación o la disponibilidad de APIv2: {0}",
"SpugPush Template Code": "Plantilla de código",
"FlashDuty Push URL Placeholder": "Copiar de la página de la página de integración de alerta",
"pingNumericLabel": "Salida numérica",
"pingGlobalTimeoutDescription": "Tiempo total en segundos antes de que termine el ping, independientemente de los paquetes enviados",
"customUrlDescription": "Se utilizará como URL en la que se puede hacer clic en lugar de la del monitor.",
"pingNumericDescription": "Si se marca, se mostrarán las direcciones IP en vez de los nombres de host simbólicos",
"pingGlobalTimeoutLabel": "Tiempo de espera global",
"pingPerRequestTimeoutLabel": "Tiempo de espera por ping",
"Custom URL": "URL personalizada",
"OneChatUserIdOrGroupId": "ID de usuario o ID de grupo de OneChat",
"OneChatAccessToken": "Token de acceso de OneChat",
"wayToGetWahaApiUrl": "La URL de tu instancia WAHA.",
"wahaSession": "Sesión",
"pingPerRequestTimeoutDescription": "Este es el tiempo de espera máximo (en segundos) antes de considerar que se ha perdido un paquete",
"OneChatBotId": "ID de bot de OneChat",
"mqttHostnameTip": "Por favor, utiliza este formato {hostnameFormat}",
"smseagleComma": "Multiple debe separarse con comas",
"pingCountLabel": "Paquetes máximos",
"pingCountDescription": "Número de paquetes a enviar antes de parar",
"ntfyPriorityDown": "Prioridad para eventos de caída",
"pause": "Pausar",
"wayToGetWahaSession": "Desde esta sesión, WAHA envía notificaciones a Chat ID. Puedes encontrarlo en el Panel de WAHA.",
"wayToWriteWahaChatId": "El número de teléfono con el prefijo internacional, pero sin el signo más al principio ({0}), el ID de contacto ({1}) o el ID de grupo ({2}). Las notificaciones se envían a este ID de chat desde la sesión de WAHA.",
"YZJ Webhook URL": "URL del webhook de YZJ",
"Add Another Tag": "Añadir otra etiqueta",
"Manual": "Manual",
"wahaChatId": "ID del chat (Número de teléfono / ID de contacto / ID de grupo)",
"smtpHelpText": "\"SMTPS\" comprueba el funcionamiento de SMTP/TLS; \"Ignorar TLS\" se conecta mediante texto plano; \"STARTTLS\" se conecta, emite un comando STARTTLS y verifica el certificado del servidor. Ninguno de estos envía un correo electrónico.",
"Plain Text": "Texto plano",
"Message Template": "Plantilla de mensaje",
"Template Format": "Formato de plantilla",
"wayToGetWahaApiKey": "La clave API es el valor de la variable de entorno WHATSAPP_API_KEY que utilizabas para ejecutar WAHA.",
"smsplanetApiDocs": "Puede encontrar información detallada sobre la obtención de tokens API en {the_smsplanet_documentation}.",
"the smsplanet documentation": "Documentación de smsplanet",
"Phone numbers": "Números de teléfono",
"Sender name": "Nombre del emisor",
"smsplanetNeedToApproveName": "Necesita ser aprobado en el panel de cliente",
"smsplanetApiToken": "Token para la API de SMSPlanet",
"Disable URL in Notification": "Deshabilitar la URL en la notificación",
"YZJ Robot Token": "Token del robot de YZJ",
"pingIntervalAdjustedInfo": "Intervalo ajustado en función del recuento de paquetes, el tiempo de espera global y el tiempo de espera por ping",
"Clear Form": "Limpiar formulario",
"Ip Family": "Familia de IP",
"ipFamilyDescriptionAutoSelect": "Utiliza {happyEyeballs} para determinar la familia de IP.",
"Happy Eyeballs algorithm": "Algoritmo Happy Eyeballs",
"Path": "Ruta",
"mqttWebSocketPath": "Ruta de MQTT WebSocket",
"smseagleMsgRing": "Llamada",
"Clear All Events": "Limpiar todos los eventos",
"clearAllEventsMsg": "Seguro deseas eliminar todos los eventos?",
"Events cleared successfully": "Eventos limpiados exitosamente.",
"No monitors found": "No se encontraron monitores.",
"Could not clear events": "No se pudieron limpiar {failed}/{total} eventos",
"smseagleGroupV2": "ID(s) de grupo(s) de Guía Telefónica",
"mqttWebsocketPathExplanation": "Ruta del WebSocker para MQTT sobre conexion WebSocker (ejemplo, /mqtt)"
}

View File

@@ -1180,5 +1180,12 @@
"mqttWebSocketPath": "Chemin WebSocket MQTT",
"mqttWebsocketPathExplanation": "Chemin WebSocket pour MQTT sur les connexions WebSocket (par exemple, /mqtt)",
"mqttWebsocketPathInvalid": "Veuillez utiliser un format de chemin WebSocket valide",
"mqttHostnameTip": "Veuillez utiliser ce format {hostnameFormat}"
"mqttHostnameTip": "Veuillez utiliser ce format {hostnameFormat}",
"Template plain text instead of using cards": "Modèle en texte brut au lieu d'utiliser des cartes",
"issueWithGoogleChatOnAndroidHelptext": "Cela permet également de contourner les bugs en amont comme {issuetackerURL}",
"clearAllEventsMsg": "Êtes-vous sûr de vouloir supprimer tous les événements ?",
"Clear All Events": "Effacer tous les événements",
"Events cleared successfully": "Événements effacés avec succès.",
"No monitors found": "Aucun sonde trouvé.",
"Could not clear events": "Impossible deffacer {failed}/{total} événements"
}

View File

@@ -819,7 +819,7 @@
"statusMaintenance": "Održavanje",
"General Monitor Type": "Općeniti tip Monitora",
"Maintenance": "Održavanje",
"Specific Monitor Type": "Određeni tip Monitora",
"Specific Monitor Type": "Posebni tip Monitora",
"Monitor": "Monitor | Monitori",
"Invert Keyword": "Obrni ključnu riječ",
"filterActive": "Aktivnost",
@@ -1169,5 +1169,12 @@
"Disable URL in Notification": "Onemogući URL u obavijesti",
"Manual": "Ručno",
"OAuth Audience": "OAuth publika",
"Optional: The audience to request the JWT for": "Neobavezno: Publika za koju se traži JWT"
"Optional: The audience to request the JWT for": "Neobavezno: Publika za koju se traži JWT",
"mqttWebSocketPath": "Putanja MQTT WebSocketa",
"mqttHostnameTip": "Koristiti ovaj format {hostnameFormat}",
"Path": "Putanja",
"mqttWebsocketPathExplanation": "Putanja WebSocketa za MQTT preko WebSocket veza (npr. /mqtt)",
"mqttWebsocketPathInvalid": "Koristiti valjani format putanje WebSocketa",
"Template plain text instead of using cards": "Predložak običnim tekstom umjesto korištenja kartica",
"issueWithGoogleChatOnAndroidHelptext": "Ovo omogućuje izbjegavanje grešaka poput {issuetackerURL}"
}

View File

@@ -41,7 +41,7 @@
"Check Update On GitHub": "Cek Pembaruan di GitHub",
"List": "Daftar",
"Add": "Tambah",
"Add New Monitor": "Tambah Monitor Baru",
"Add New Monitor": "Tambahkan Monitor Baru",
"Quick Stats": "Statistik Singkat",
"Up": "Aktif",
"Down": "Tidak Aktif",
@@ -53,7 +53,7 @@
"DateTime": "Tanggal/Waktu",
"Message": "Pesan",
"No important events": "Tidak ada peristiwa penting",
"Resume": "Lanjut",
"Resume": "Melanjutkan",
"Edit": "Ubah",
"Delete": "Hapus",
"Current": "Saat ini",
@@ -71,9 +71,9 @@
"URL": "URL",
"Hostname": "Nama Host",
"Port": "Port",
"Heartbeat Interval": "Interval Heartbeat",
"Heartbeat Interval": "Waktu Jeda Heartbeat",
"Retries": "Mencoba lagi",
"Heartbeat Retry Interval": "Interval Pengulangan Heartbeat",
"Heartbeat Retry Interval": "Waktu Jeda Pengulangan Heartbeat",
"Resend Notification if Down X times consecutively": "Kirim Ulang Pemberitahuan jika Tidak Aktif X kali berturut-turut",
"Advanced": "Tingkat Lanjut",
"Upside Down Mode": "Mode Terbalik",
@@ -102,8 +102,8 @@
"New Password": "Kata Sandi Baru",
"Repeat New Password": "Ulangi Kata Sandi Baru",
"Update Password": "Perbarui Kata Sandi",
"Disable Auth": "Nonaktifkan Auth",
"Enable Auth": "Aktifkan Auth",
"Disable Auth": "Nonaktifkan autentikasi",
"Enable Auth": "Aktifkan autentikasi",
"disableauth.message1": "Apakah Anda yakin ingin {disableAuth}?",
"disable authentication": "menonaktifkan autentikasi",
"disableauth.message2": "Ini dirancang untuk skenario {intendThirdPartyAuth} di depan Uptime Kuma seperti Cloudflare Access, Authelia, atau mekanisme autentikasi lainnya.",
@@ -126,7 +126,7 @@
"Test": "Tes",
"Certificate Info": "Info Sertifikat",
"Resolver Server": "Server Penyelesai",
"Resource Record Type": "Jenis Rekaman Sumber Daya",
"Resource Record Type": "Jenis Rekaman Sumber",
"Last Result": "Hasil Terakhir",
"Create your admin account": "Buat akun admin Anda",
"Repeat Password": "Ulangi Kata Sandi",
@@ -154,7 +154,7 @@
"Options": "Opsi",
"Keep both": "Simpan keduanya",
"Verify Token": "Verifikasi Token",
"Setup 2FA": "Siapkan 2FA",
"Setup 2FA": "Atur 2FA",
"Enable 2FA": "Aktifkan 2FA",
"Disable 2FA": "Nonaktifkan 2FA",
"2FA Settings": "Pengaturan 2FA",
@@ -186,8 +186,8 @@
"All Systems Operational": "Semua Sistem Berfungsi",
"Partially Degraded Service": "Layanan Terdegradasi Sebagian",
"Degraded Service": "Layanan Terdegradasi",
"Add Group": "Tambah Grup",
"Add a monitor": "Tambah monitor",
"Add Group": "Tambahkan Grup",
"Add a monitor": "Tambahkan monitor",
"Edit Status Page": "Edit Halaman Status",
"Go to Dashboard": "Pergi ke Dasbor",
"Status Page": "Halaman Status",
@@ -877,7 +877,7 @@
"templateMsg": "pesan pemberitahuan",
"templateHeartbeatJSON": "objek yang menggambarkan heartbeat",
"templateMonitorJSON": "objek yang menggambarkan monitor",
"templateLimitedToUpDownCertNotifications": "hanya tersedia untuk notifikasi AKTIF/TIDAK AKTIF/Sertifikat yang kedaluwarsa",
"templateLimitedToUpDownCertNotifications": "hanya tersedia untuk notifikasi AKTIF/TIDAK AKTIF/Sertifikat yang kadaluwarsa",
"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}",
@@ -1088,5 +1088,45 @@
"The phone number of the recipient in E.164 format.": "Nomor telepon penerima dalam format E.164.",
"Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Antara ID pengirim teks atau nomor telepon dalam format E.164 jika Anda ingin menerima balasan.",
"SendGrid API Key": "Kunci API SendGrid",
"Separate multiple email addresses with commas": "Pisahkan beberapa alamat email dengan koma"
"Separate multiple email addresses with commas": "Pisahkan beberapa alamat email dengan koma",
"telegramUseTemplate": "Gunakan pesan kustom templat",
"telegramTemplateFormatDescription": "Telegram mengijinkan menggunakan berbagai bahasa markup untuk pesan, lihat Telegram {0} untuk detail lebih lanjut",
"telegramServerUrlDescription": "Untuk menghapus batasan API bot Telegram atau mendapatkan akses di area yang diblokir (Seperti: China, Iran, dll.). Untuk informasi selengkapnya, klik {0}. Default: {1}",
"Use HTML for custom E-mail body": "Gunakan HTML untuk kustom E-mail body",
"Template plain text instead of using cards": "Templat teks biasa daripada menggunakan kartu",
"issueWithGoogleChatOnAndroidHelptext": "Hal ini juga memungkinkan untuk mengatasi bug di upstream seperti {issuetackerURL}",
"smseagleMsgTtsAdvanced": "Panggilan lanjutan Text-to-speech",
"smseagleDocs": "Cek dokumentasi atau ketersedian APIv2: {0}",
"SpugPush Template Code": "Kode templat",
"ntfyPriorityHelptextPriorityHigherThanDown": "Prioritas biasa harus lebih tinggi daripada prioritas {0}. Prioritas {1} lebih tinggi daripada {0} prioritas {2}",
"defaultFriendlyName": "Monitor Baru",
"telegramServerUrl": "(Opsional) Url Server",
"Path": "Path",
"mqttWebSocketPath": "MQTT WebSocket Path",
"mqttWebsocketPathExplanation": "Path WebSocket untuk MQTT yang melalui koneksi WebSocket (e.g., /mqtt)",
"mqttWebsocketPathInvalid": "Harap gunakan WebSocket Path format yang benar",
"mqttHostnameTip": "Harap gunakan format ini {hostnameFormat}",
"smseagleComma": "Beberapa harus dipisahkan dengan koma",
"Add Tags": "Tambahkan Tanda",
"tagAlreadyOnMonitor": "Tanda ini (name and value) sudah tersedia di monitor atau penambahan tertunda.",
"tagAlreadyStaged": "Tanda ini (name and value) sudah disiapkan untuk batch ini",
"tagNameExists": "Tanda system dengan nama ini telah tersedia. Silakan pilih dari daftar atau gunakan nama lainnya",
"smseagleGroupV2": "ID grup Phonebook",
"smseagleContactV2": "ID kontak Phonebook",
"smseagleMsgType": "Tipe Pesan",
"smseagleMsgSms": "Pesan SMS (default)",
"smseagleMsgRing": "Panggilan dering",
"smseagleMsgTts": "Panggilan teks-ke-ucapan",
"smseagleDuration": "Durasi (dalam detik)",
"smseagleTtsModel": "ID model tulisan-ke-ucapan",
"smseagleApiType": "Versi API",
"smseagleApiv1": "APIv1 (Untuk projek yang telah ada dan kompabilitas ke belakang)",
"smseagleApiv2": "APIv2 (rekomendasi untuk integrasi baru)",
"ntfyPriorityDown": "Prioritas untuk kejadian DOWN",
"FlashDuty Push URL": "Push URL",
"FlashDuty Push URL Placeholder": "Salin dari halaman integrasi peringatan",
"templateServiceName": "nama service",
"templateHostnameOrURL": "Nama Host atau URL",
"templateStatus": "Status",
"telegramUseTemplateDescription": "Jika diaktifkan, pesan akan terkirim menggunakan templat kustom"
}

View File

@@ -1118,5 +1118,8 @@
"smsplanetApiDocs": "Gedetailleerde informatie over het verkrijgen van API-tokens vindt u op {the_smsplanet_documentation}.",
"defaultFriendlyName": "Nieuwe monitor",
"Add Tags": "Labels toevoegen",
"tagAlreadyOnMonitor": "Dit label (naam en waarde) is al op de monitor gekoppeld of in afwachting van koppelen."
"tagAlreadyOnMonitor": "Dit label (naam en waarde) is al op de monitor gekoppeld of in afwachting van koppelen.",
"mqttWebsocketPathExplanation": "WebSocket pad voor MQTT via WebSocket verbindingen (bijv., /mqtt)",
"mqttWebsocketPathInvalid": "Gebruik een geldig WebSocket pad formaat alsjeblieft",
"mqttHostnameTip": "Gebruik dit formaat alsjeblieft {hostnaamFormat}"
}

View File

@@ -1144,5 +1144,7 @@
"mqttWebsocketPathExplanation": "Caminho do WebSocket para conexões MQTT sobre WebSocket (por exemplo, /mqtt)",
"Path": "Caminho",
"mqttWebsocketPathInvalid": "Use um formato de caminho WebSocket válido",
"mqttHostnameTip": "Por favor, use este formato {hostnameFormat}"
"mqttHostnameTip": "Por favor, use este formato {hostnameFormat}",
"issueWithGoogleChatOnAndroidHelptext": "Isso também permite contornar bugs no upstream, como {issuetackerURL}",
"Template plain text instead of using cards": "Modelo de texto simples em vez de usar cartões"
}

View File

@@ -29,7 +29,7 @@
"Add New Monitor": "Новый монитор",
"Quick Stats": "Сводка",
"Up": "Доступен",
"Down": "Не доступен",
"Down": "Недоступен",
"Pending": "В ожидании",
"Unknown": "Неизвестно",
"Pause": "Пауза",
@@ -270,7 +270,7 @@
"octopushLegacyHint": "Вы используете старую версию Octopush (2011-2020) или новую?",
"Check octopush prices": "Тарифы Octopush {0}.",
"octopushPhoneNumber": "Номер телефона (межд. формат, например: +79831234567) ",
"octopushSMSSender": "Имя отправителя SMS: 3-11 символов алвафита, цифр и пробелов (a-zA-Z0-9)",
"octopushSMSSender": "Имя отправителя SMS: 3-11 символов алфавита, цифр и пробелов (a-zA-Z0-9)",
"LunaSea Device ID": "ID устройства LunaSea",
"Apprise URL": "Ссылка Уведомления",
"Example:": "Пример: {0}",
@@ -681,8 +681,8 @@
"smseagleRecipient": "Получатель(и) (если множество, должны быть разделены запятой)",
"smseagleToken": "Токен доступа API",
"smseagleUrl": "URL вашего SMSEagle устройства",
"smseagleEncoding": "Отправить в юникоде",
"smseaglePriority": "Приоритет сообщения (0-9, по умолчанию = 0)",
"smseagleEncoding": "Отправить в юникоде (по умолчанию=GSM-7)",
"smseaglePriority": "Приоритет сообщения (0-9, высший приоритет = 9)",
"Server Address": "Адрес сервера",
"Learn More": "Узнать больше",
"topicExplanation": "MQTT топик для мониторинга",
@@ -907,7 +907,7 @@
"successKeyword": "Ключевое слово успеха",
"statusPageSpecialSlugDesc": "Специальный ярлык {0}: эта страница будет отображаться, если ярлык не указан",
"ntfyPriorityHelptextAllExceptDown": "Все события отправляются с этим приоритетом, кроме {0}-событий, которые имеют приоритет {1}",
"self-hosted container": "контейнер, который хоститься самостоятельно",
"self-hosted container": "контейнер, который хостится самостоятельно",
"remoteBrowserToggle": "По умолчанию Chromium работает внутри контейнера Uptime Kuma. Вы можете использовать удаленный браузер, переключив этот переключатель.",
"Remote Browsers": "Удаленные браузеры",
"Remote Browser": "Удаленный браузер",
@@ -1059,7 +1059,7 @@
"Client ID": "ID клиента",
"Client Secret": "Секрет клиента",
"OAuth Scope": "Область действия OAuth",
"Go back to home page.": "Вернутся на домашнюю страницу.",
"Go back to home page.": "Вернуться на домашнюю страницу.",
"No tags found.": "Теги не найдены.",
"Cannot connect to the socket server.": "Невозможно подключиться к серверу сокетов.",
"SIGNL4": "SIGNL4",
@@ -1134,5 +1134,28 @@
"Sender name": "Имя отправителя",
"smsplanetNeedToApproveName": "Требуется одобрение в панели клиента",
"Add Tags": "Добавить тег",
"tagNameExists": "Тег с таким именем уже существует. Выберите его из списка или используйте другое имя."
"tagNameExists": "Тег с таким именем уже существует. Выберите его из списка или используйте другое имя.",
"Use HTML for custom E-mail body": "Используйте HTML для пользовательского текста E-Mail",
"Template plain text instead of using cards": "Шаблон простого текста вместо использования карт",
"issueWithGoogleChatOnAndroidHelptext": "Это также позволяет обойти баги входящего потока, как {issuetakerURL}",
"smseagleGroupV2": "Идентификатор группы Phonebook(s)",
"smseagleApiv2": "APIv2 (рекомендовано для новых интеграций)",
"smseagleApiv1": "APIv1 (для существующих проектов и обратной совместимости)",
"Path": "Путь",
"mqttWebSocketPath": "MQTT WebSocket путь",
"mqttWebsocketPathExplanation": "WebSocket путь для MQTT через WebSocket соединение (например, /mqtt)",
"mqttWebsocketPathInvalid": "Пожалуйста, используйте правильный формат пути WebSocket",
"mqttHostnameTip": "Пожалуйста, используйте этот формат {hostnameFormat}",
"smseagleApiType": "Версия API",
"smseagleComma": "Множественные должны быть разделены запятой",
"smseagleDocs": "Просмотрите документацию или доступность APIv2: {0}",
"smseagleTtsModel": "Модель текст-в-речь ID",
"smseagleDuration": "Длительность (в секундах)",
"smseagleMsgType": "Сообщение типа",
"smseagleMsgSms": "SMS сообщение (по умолчанию)",
"smseagleMsgTts": "Звонок текст-в-речь",
"smseagleMsgTtsAdvanced": "Текст-в-речь расширенный звонок",
"defaultFriendlyName": "Новый монитор",
"tagAlreadyOnMonitor": "Этот тег (имя и значение) уже отображается на мониторе или ожидает добавления.",
"tagAlreadyStaged": "Этот тег (имя и значение) уже подготовлен для этого пакета."
}

View File

@@ -990,5 +990,13 @@
"OID (Object Identifier)": "OID (Objektsidentifierare)",
"Please enter a valid OID.": "Ange ett giltigt OID.",
"Group ID": "GruppID",
"Add Remote Browser": "Lägg till fjärrbläddrare"
"Add Remote Browser": "Lägg till fjärrbläddrare",
"Path": "Sökväg",
"mqttHostnameTip": "Vänligen använd detta format {hostnameFormat}",
"templateServiceName": "tjänstnamn",
"templateHostnameOrURL": "värdnamn eller URL",
"templateStatus": "status",
"defaultFriendlyName": "Ny övervakare",
"Add Tags": "Lägg till taggar",
"tagAlreadyOnMonitor": "Denna tagg (namn och värde) finns redan på övervakaren eller är köad för tillägg."
}

View File

@@ -1186,5 +1186,12 @@
"Path": "Шлях",
"mqttWebSocketPath": "Шлях до MQTT WebSocket",
"mqttWebsocketPathInvalid": "Будь ласка, використовуйте дійсний формат шляху WebSocket",
"mqttHostnameTip": "Будь ласка, використовуйте цей формат {hostnameFormat}"
"mqttHostnameTip": "Будь ласка, використовуйте цей формат {hostnameFormat}",
"Template plain text instead of using cards": "Шаблон простого тексту замість використання карток",
"issueWithGoogleChatOnAndroidHelptext": "Це також дозволяє обійти помилки на кшталт {issuetackerURL}",
"Clear All Events": "Очистити всі події",
"Events cleared successfully": "Події успішно очищено.",
"No monitors found": "Моніторів не знайдено.",
"Could not clear events": "Не вдалося очистити події {failed}/{total}",
"clearAllEventsMsg": "Ви дійсно хочете видалити всі події?"
}

View File

@@ -1177,5 +1177,10 @@
"smseagleMsgRing": "响铃呼叫",
"smseagleMsgSms": "SMS 短信(默认值)",
"smseagleContactV2": "联系人 ID",
"smseagleGroupV2": "群组 ID"
"smseagleGroupV2": "群组 ID",
"mqttWebsocketPathExplanation": "MQTT 通过 WebSocket 连接时所使用的 WebSocket 路径(例如 /mqtt",
"Path": "路径",
"mqttHostnameTip": "请使用此格式:{hostnameFormat}",
"mqttWebsocketPathInvalid": "请使用合法的 WebSocket 路径格式",
"mqttWebSocketPath": "MQTT WebSocket 路径"
}

View File

@@ -944,10 +944,6 @@ export default {
}
@media (max-width: 550px) {
.functions {
text-align: center;
}
.ping-chart-wrapper {
padding: 10px !important;
}
@@ -957,20 +953,27 @@ export default {
}
}
@media (max-width: 400px) {
@media (max-width: 450px) {
.btn {
display: inline-flex;
flex-direction: column;
align-items: center;
padding-top: 10px;
font-size: 0.9em;
}
a.btn {
padding-left: 25px;
padding-right: 25px;
}
.btn-group {
width: 100%;
.btn, a.btn {
display: inline-flex;
flex-direction: column;
align-items: center;
gap: 4px;
padding-left: 10px;
padding-right: 10px;
}
}
}
@media (max-width: 400px) {
.dropdown-clear-data {
button {
display: block;