Compare commits

...

176 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
Louis Lam
85455a1ebc Fix: update cloudflared installation to use bookworm instead of bullseye (#6093) 2025-08-31 01:29:32 +08:00
Louis Lam
a4d2e077b8 Fix: Check MySQL database name (#5991) 2025-08-31 01:26:32 +08:00
Cyril59310
668636c9d5 feat: add clear events botton (#6052)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-08-27 15:04:21 +02:00
Toubi
8d3649966a Feature/deletion button on status list item (#6079) 2025-08-25 15:31:32 +02:00
Jona Bastian
bc2db2e36e fix: HeartbeatBar DOWN status showing green instead of red (#6081)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-08-25 05:01:29 +02:00
Jan Niklas Benn
7587269b62 Fix monitor name cropping in nested groups (#5981) (#6080) 2025-08-25 02:31:29 +02:00
Erik
4f944cd869 feat: Templating and plaintext for Google Workspace Notification Provider (#6048)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-08-09 19:31:44 +02:00
Kanwarpreet Singh
f027ce309e Made chart-period global instead of individual (#6049)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-08-09 18:52:15 +02:00
Louis Lam
4b5ff08cdd Update dependencies (#6016) 2025-07-29 20:09:47 +08:00
Louis Lam
e4baa99088 Fix weblate conflict (#6017) 2025-07-29 20:03:10 +08:00
Louis Lam
b9ac9fbb08 Translations Update from Weblate (#5971) 2025-07-29 19:50:09 +08:00
JianChao Ye
771d05363e fix: send slack message throw 400 invalid_attachments (#6014) 2025-07-28 16:55:46 +02:00
Aluisio
d073d1642f Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1132 of 1132 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-07-26 08:06:56 +00:00
stanol
20a11846d6 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1132 of 1132 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-07-26 08:06:56 +00:00
Cyril59310
d360ce808d Translated using Weblate (French)
Currently translated at 100.0% (1132 of 1132 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-07-26 08:06:56 +00:00
Marco
3c84abb3fd Translated using Weblate (German)
Currently translated at 100.0% (1132 of 1132 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1132 of 1132 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-07-26 08:06:56 +00:00
MrEddX
01e1edb545 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1132 of 1132 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-07-26 08:06:56 +00:00
Jusi Monteiro
102d70d8a7 Translated using Weblate (Portuguese)
Currently translated at 19.3% (218 of 1127 strings)

Co-authored-by: Jusi Monteiro <jusi.monteiro@protonmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt/
Translation: Uptime Kuma/Uptime Kuma
2025-07-26 08:06:56 +00:00
Jochem Pluim
8191f49b6c Translated using Weblate (Dutch)
Currently translated at 95.4% (1076 of 1127 strings)

Translated using Weblate (Dutch)

Currently translated at 95.2% (1074 of 1127 strings)

Co-authored-by: Jochem Pluim <jochem@pluim.nu>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2025-07-26 08:06:56 +00:00
Andrey Sheremetinskiy
29ec447cc8 Translated using Weblate (Russian)
Currently translated at 95.3% (1075 of 1127 strings)

Co-authored-by: Andrey Sheremetinskiy <andrew.sherd@outlook.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2025-07-26 08:06:56 +00:00
Marco Ciotola
2f5ca5aa19 Translated using Weblate (Italian)
Currently translated at 66.1% (746 of 1127 strings)

Co-authored-by: Marco Ciotola <github@ciotola.dev>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translation: Uptime Kuma/Uptime Kuma
2025-07-26 08:06:56 +00:00
Donker_Jumala
5a387538dc Translated using Weblate (Japanese)
Currently translated at 100.0% (1127 of 1127 strings)

Co-authored-by: Donker_Jumala <weareh0711@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/
Translation: Uptime Kuma/Uptime Kuma
2025-07-26 08:06:56 +00:00
Buchtič
2e0299b76a Translated using Weblate (Czech)
Currently translated at 100.0% (1127 of 1127 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-07-26 08:06:56 +00:00
Talip ÇAKIR
2ec9fcca6d Translated using Weblate (Turkish)
Currently translated at 100.0% (1127 of 1127 strings)

Co-authored-by: Talip ÇAKIR <talip@cakir.info.tr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2025-07-26 08:06:56 +00:00
Aindriú Mac Giolla Eoin
0713d44d37 Translated using Weblate (Irish)
Currently translated at 100.0% (1127 of 1127 strings)

Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ga/
Translation: Uptime Kuma/Uptime Kuma
2025-07-26 08:06:56 +00:00
Süleyman Ünlü
bdf40835cc Translated using Weblate (Turkish)
Currently translated at 99.9% (1126 of 1127 strings)

Co-authored-by: Süleyman Ünlü <suleymn20@proton.me>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2025-07-26 08:06:56 +00:00
Vivek Pandey
c1adcfbfc2 feat(ui): Convert interval seconds to days, hours, minutes, and seconds (#5220)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-07-26 10:06:51 +02:00
Paulus Lucas
2a6d9b4acd Add Websocket path to mqtt monitor for WebSocket connection (#6009)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: lupaulus <20111917+lupaulus@users.noreply.github.com>
2025-07-24 22:04:43 +02:00
Otto Richter (fnetX)
2fd4e1cc72 Matrix token command hint should send JSON (#5990)
Co-authored-by: Otto Richter <otto@codeberg.org>
2025-07-17 08:47:51 +02:00
Ionys
7c88a38df3 Fixing recurring maintenance start (again) (#5914)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-07-16 17:28:29 +02:00
yumeiyin
d490285a44 chore: fix some minor issues in comments (#5984)
Signed-off-by: yumeiyin <yin.yumei@qq.com>
2025-07-14 10:08:53 +02:00
Peak Twilight
5bbbef5305 feat: Add heartbeat tooltip while hovering over status page heartbeats (#5929)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-07-12 13:34:33 +02:00
Lyall
487cb8fdc5 fix: refresh interval getting incremented by 10 on status page despite a minimum of 5 (#5961)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-07-11 23:41:43 +02:00
Louis Lam
03037e2a9a Delete .github/workflows/pr-reply.yml (#5975) 2025-07-09 16:22:55 +02:00
Louis Lam
f395222423 Translations Update from Weblate (#5889) 2025-07-05 15:01:25 +08:00
José Perlin
db0bb6d87b Translated using Weblate (Portuguese)
Currently translated at 19.3% (218 of 1127 strings)

Co-authored-by: José Perlin <jose.vendr@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
Samuel-MM
4d35dd14b4 Translated using Weblate (Portuguese)
Currently translated at 19.3% (218 of 1127 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1127 of 1127 strings)

Co-authored-by: Samuel-MM <samuelmangia@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
AnnAngela
0d4249dfb5 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1127 of 1127 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-07-05 04:38:13 +00:00
Enes
b6f8454676 Translated using Weblate (Turkish)
Currently translated at 100.0% (1127 of 1127 strings)

Co-authored-by: Enes <enes3078@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
Kang Dongheon
a45bff4bb4 Translated using Weblate (Korean)
Currently translated at 76.2% (858 of 1125 strings)

Co-authored-by: Kang Dongheon <daniel2231.dev@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
michalpixels
9427a5e434 Translated using Weblate (Slovak)
Currently translated at 66.1% (744 of 1125 strings)

Co-authored-by: michalpixels <michalpixels@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sk/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
Hemanth Rachapalli
530db0a4bd Translated using Weblate (English (Old))
Currently translated at 0.1% (1 of 1125 strings)

Added translation using Weblate (English (Old))

Co-authored-by: Hemanth Rachapalli <rachapalli.hemanth5544@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ang/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
Maximiliano Simonazzi
a0924f2810 Translated using Weblate (Spanish)
Currently translated at 95.2% (1071 of 1125 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-07-05 04:38:13 +00:00
Howard Guo
e4b3c935e7 Translated using Weblate (Chinese (Traditional))
Currently translated at 96.5% (1086 of 1125 strings)

Co-authored-by: Howard Guo <toto6038@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
Talip ÇAKIR
5ede3f298c Translated using Weblate (Turkish)
Currently translated at 100.0% (1125 of 1125 strings)

Co-authored-by: Talip ÇAKIR <talip@cakir.info.tr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
dekkeng
b52ec3b219 Translated using Weblate (Thai)
Currently translated at 85.2% (959 of 1125 strings)

Co-authored-by: dekkeng <dek_keng@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
VoraprotSeesod
025a8cb519 Translated using Weblate (Thai)
Currently translated at 85.2% (959 of 1125 strings)

Co-authored-by: VoraprotSeesod <voraprot.seesod.contact@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:13 +00:00
Unai Tolosa Pontesta
bd686b3647 Translated using Weblate (Basque)
Currently translated at 63.2% (711 of 1125 strings)

Co-authored-by: Unai Tolosa Pontesta <utolosa002@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/eu/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:12 +00:00
Thearex12
39f79d6807 Translated using Weblate (Finnish)
Currently translated at 97.9% (1102 of 1125 strings)

Co-authored-by: Thearex12 <thearex@thearex12.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:12 +00:00
Ionys
8f72683010 Translated using Weblate (French)
Currently translated at 100.0% (1125 of 1125 strings)

Co-authored-by: Ionys <kylliandm@hotmail.fr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:12 +00:00
Ivan Bratović
c6ae7ad4b5 Translated using Weblate (Croatian)
Currently translated at 100.0% (1127 of 1127 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (1124 of 1124 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-07-05 04:38:12 +00:00
PIXELHIZE
64d4544b2c Translated using Weblate (Korean)
Currently translated at 76.1% (854 of 1121 strings)

Co-authored-by: PIXELHIZE <pixelhize@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:12 +00:00
Stark
1fd1b24c00 Translated using Weblate (Italian)
Currently translated at 66.2% (743 of 1121 strings)

Co-authored-by: Stark <maverick.arrows@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:12 +00:00
PangBo
2ec3c350f2 Translated using Weblate (Chinese (Simplified))
Currently translated at 98.8% (1100 of 1113 strings)

Co-authored-by: PangBo <373108669@qq.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:12 +00:00
stanol
f7051dc6f3 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1127 of 1127 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (1121 of 1121 strings)

Translated using Weblate (Ukrainian)

Currently translated at 96.4% (1074 of 1113 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-07-05 04:38:12 +00:00
Yoswaris Lawpaiboon
15e302f7f5 Translated using Weblate (Thai)
Currently translated at 86.1% (957 of 1111 strings)

Co-authored-by: Yoswaris Lawpaiboon <konglha19@outlook.co.th>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:12 +00:00
Aluisio
ddce1180f5 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1127 of 1127 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1121 of 1121 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1113 of 1113 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1111 of 1111 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-07-05 04:38:12 +00:00
Alex Javadi
f981685c34 Translated using Weblate (Persian)
Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (1121 of 1121 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (1121 of 1121 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (1111 of 1111 strings)

Co-authored-by: Alex Javadi <15309978+aljvdi@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:12 +00:00
Ramin Mazloomi
c306bddd85 Translated using Weblate (Persian)
Currently translated at 94.9% (1055 of 1111 strings)

Co-authored-by: Ramin Mazloomi <RaminMT007@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:12 +00:00
Alex Javadi
4c0ad485c5 Translated using Weblate (Persian)
Currently translated at 94.9% (1055 of 1111 strings)

Co-authored-by: Alex Javadi <15309978+aljvdi@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:11 +00:00
Emir Yılmazer
54151fa222 Translated using Weblate (Turkish)
Currently translated at 99.9% (1110 of 1111 strings)

Co-authored-by: Emir Yılmazer <benemiryilmazer@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:11 +00:00
Marco
bfe045ccaa Translated using Weblate (German)
Currently translated at 100.0% (1127 of 1127 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1127 of 1127 strings)

Translated using Weblate (German)

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (German)

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (German)

Currently translated at 100.0% (1111 of 1111 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1111 of 1111 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-07-05 04:38:11 +00:00
MrEddX
317ebbfbf7 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1127 of 1127 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1121 of 1121 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1113 of 1113 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1111 of 1111 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-07-05 04:38:11 +00:00
Cyril59310
1c8cdaf18b Translated using Weblate (French)
Currently translated at 100.0% (1127 of 1127 strings)

Translated using Weblate (French)

Currently translated at 100.0% (1125 of 1125 strings)

Translated using Weblate (French)

Currently translated at 100.0% (1121 of 1121 strings)

Translated using Weblate (French)

Currently translated at 100.0% (1113 of 1113 strings)

Translated using Weblate (French)

Currently translated at 100.0% (1111 of 1111 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-07-05 04:38:11 +00:00
Saba Sakvarelidze
914c4ea0ad Translated using Weblate (Georgian)
Currently translated at 3.1% (34 of 1076 strings)

Co-authored-by: Saba Sakvarelidze <cal1b4nnn@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ka/
Translation: Uptime Kuma/Uptime Kuma
2025-07-05 04:38:11 +00:00
ianlv
54b0c89ea5 chore: fix typos in code comments (#5966)
Signed-off-by: ianlv <sunlvyun@outlook.com>
2025-07-02 16:18:13 +02:00
Ryan Hartje
9506b3a16b feat: Add optional audience for http-monitors via the oauth2 client credentials flow (#5950)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-30 02:37:41 +02:00
Frank Elsinga
5336b05a7f remove feature freeze messaging from templates (#5957) 2025-06-28 18:27:31 +02:00
Louis Lam
10fd6ede1e [Eliminate Blocking] Docker monitor (#5927) 2025-06-25 13:39:00 +08:00
mindsolo
9976ef94af feat: Add proxy clone functionality to settings (#5944)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-23 15:38:01 +02:00
Louis Lam
9e7ea4913a Fix auto pr reply (#5945) 2025-06-23 15:12:18 +02:00
Louis Lam
92f2484a8d Auto reply to PRs (#5943)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-23 17:56:39 +08:00
Louis Lam
b55d6e8911 Improve the experience of testing pull requests (#5942) 2025-06-23 15:24:49 +08:00
Frank Elsinga
59d10062ca chore: remove fluff from PR-template (#5941) 2025-06-22 14:49:24 +02:00
Ionys
072226bde2 Improve i18n language matching (#5939) 2025-06-22 01:02:52 +02:00
Eden Yemini
5aeda2dab0 feat: render markdown in monitor descriptions (#5576) 2025-06-19 23:56:43 +02:00
Louis Lam
b1e8d9b4d2 [Eliminate Blocking] Push example (#5925) 2025-06-19 15:41:21 +08:00
Louis Lam
e0335ecfbd [Eliminate Blocking] Database related (#5926) 2025-06-19 14:30:24 +08:00
Louis Lam
4962817795 [Eliminate Blocking] User related (#5928) 2025-06-19 14:29:43 +08:00
Peak Twilight
443d5cf554 Improve UI: Edit Buttons in Status Page (#5920)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-15 20:44:28 +02:00
Louis Lam
609429bd7e Fix dayjs (#5923) 2025-06-15 18:37:01 +08:00
Maksim
3b6a78bd80 Fix db coloum type for manual monitor (#5921) 2025-06-15 16:43:09 +08:00
Florian Feka
55817061c0 fix: Properly handle the NTLM part being embedded inside other authentication headers (#5871)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-13 15:08:11 +02:00
warpreality
18cfa901ad feat: Add a "manual" (static/fixed) monitor (#5897)
Co-authored-by: Maksim Kachynski <max.kachinsky@rocketdata.io>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-13 13:38:49 +02:00
Fabian Triebsch
f282422b22 added option to force ipv4 or ipv6 for http(s) monitor type (#5880)
Co-authored-by: Ionys <9364594+Ionys320@users.noreply.github.com>
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-13 08:14:55 +02:00
Manu
53e83e7722 Add monitor id label to prometheus metrics (#5907) 2025-06-12 12:31:01 +02:00
grvwy
8909cd008c feat: add multiple tags in bulk for a monitor (#5846)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-12 03:52:35 +02:00
Ionys
c7bacbb7fe Ensure maintenance are always runned at the right moment (#5903)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-12 01:42:25 +02:00
Ionys
4d51aaa6f8 Fix invalid maintenance date (#5901) 2025-06-12 00:28:04 +02:00
Andrea Mastellone
f27811c394 ntfy.sh separate down priority (#5893)
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2025-06-11 01:41:09 +02:00
Cyril59310
c46772dafc Add default avatar in discord notifications (#5890) 2025-06-07 21:09:56 +02:00
Louis Lam
4bdb616641 Translations Update from Weblate (#5888) 2025-06-07 13:47:02 +08:00
Louis Lam
87308a7778 Merge branch 'master' into fix-weblate-conflict
# Conflicts:
#	src/lang/bg-BG.json
#	src/lang/de-CH.json
#	src/lang/de-DE.json
#	src/lang/fi.json
#	src/lang/fr-FR.json
#	src/lang/it-IT.json
#	src/lang/ja.json
#	src/lang/ko-KR.json
#	src/lang/nl-NL.json
#	src/lang/pl.json
#	src/lang/pt-BR.json
#	src/lang/ru-RU.json
#	src/lang/uk-UA.json
#	src/lang/zh-CN.json
2025-06-07 13:43:08 +08:00
Louis Lam
8d710e217a Update to 2.0.0-beta.3 (#5877) 2025-06-04 11:32:44 +08:00
Youssef Bourourou
ab418342a8 Translated using Weblate (Arabic)
Currently translated at 69.9% (753 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ar/
2025-05-30 10:43:07 +00:00
Ilkka Myller
1ca035da80 Translated using Weblate (Finnish)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/
2025-05-27 12:04:41 +00:00
rainy5810
735f4a8268 Translated using Weblate (Korean)
Currently translated at 75.2% (810 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
2025-05-27 12:04:37 +00:00
Adam Stachowicz
f3828262c9 Translated using Weblate (Polish)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
2025-05-19 23:04:36 +00:00
Brian Pravato
3760d8021b Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
2025-05-18 20:36:01 +00:00
丛林意志
0f1547febd Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
2025-05-17 21:33:06 +00:00
Matteo Morari
413cb08a81 Translated using Weblate (Italian)
Currently translated at 69.2% (745 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
2025-05-15 11:04:35 +00:00
AnnAngela
60b3fb4c18 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
2025-05-14 01:04:35 +00:00
Ivan Bratović
edf788f97f Translated using Weblate (Croatian)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/
2025-05-07 09:06:48 +00:00
Pargorn Ruasijan
e1bb3324e4 Translated using Weblate (Thai)
Currently translated at 89.0% (958 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
2025-05-05 15:25:27 +00:00
Frank Elsinga
6f0571fc30 Translated using Weblate (German)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
2025-05-04 04:28:38 +00:00
Pargorn Ruasijan
36741e2023 Translated using Weblate (Thai)
Currently translated at 89.0% (958 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
2025-05-02 19:18:55 +00:00
Pargorn Ruasijan
4bbe61fb46 Translated using Weblate (Thai)
Currently translated at 82.8% (892 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
2025-05-02 14:23:06 +00:00
Rachatat Bunpat
f814d86dd2 Translated using Weblate (Thai)
Currently translated at 81.0% (872 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
2025-05-02 05:17:46 +00:00
Pargorn Ruasijan
0306596311 Translated using Weblate (Thai)
Currently translated at 81.0% (872 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
2025-05-02 05:17:46 +00:00
Donker_Jumala
5d3d8b387d Translated using Weblate (Japanese)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/
2025-05-02 03:32:29 +00:00
Robin Janssens
474861e1c1 Translated using Weblate (Dutch)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
2025-05-01 22:29:49 +00:00
Pargorn Ruasijan
fb980b1065 Translated using Weblate (Thai)
Currently translated at 64.4% (693 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
2025-05-01 17:36:46 +00:00
Manuel Zavatta
00025e2a2d Translated using Weblate (Italian)
Currently translated at 67.4% (726 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
2025-05-01 08:15:02 +00:00
Junghyuk Kwon
2ba33f068b Translated using Weblate (Korean)
Currently translated at 74.4% (801 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
2025-04-30 19:13:42 +00:00
Donker_Jumala
5255b6bbb9 Translated using Weblate (Japanese)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/
2025-04-30 19:13:42 +00:00
Junghyuk Kwon
5c7b91a99d Translated using Weblate (Korean)
Currently translated at 74.4% (801 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
2025-04-30 00:27:53 +00:00
Artur S
d2a4972f6a Translated using Weblate (Belarusian)
Currently translated at 89.9% (968 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/be/
2025-04-29 12:43:11 +00:00
Artur S
8f245b89cf Translated using Weblate (Russian)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
2025-04-29 12:43:11 +00:00
Junghyuk Kwon
94275de493 Translated using Weblate (Korean)
Currently translated at 74.4% (801 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
2025-04-29 12:43:11 +00:00
carbeso
c60c0c4912 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/
2025-04-28 12:16:06 +00:00
Aluisio
cf82085917 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
2025-04-28 01:16:08 +00:00
Marco
fbd9490fc7 Translated using Weblate (German)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/
2025-04-27 19:16:07 +00:00
Marco
2cbf3483bd Translated using Weblate (German (Switzerland))
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/
2025-04-27 19:16:07 +00:00
stanol
a3ca2d1838 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
2025-04-27 16:30:24 +00:00
MrEddX
95023e64ab Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
2025-04-27 04:27:04 +00:00
Cyril59310
64b2c6b183 Translated using Weblate (French)
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
2025-04-26 23:33:30 +00:00
Jonne Saloranta
0e9ba79ef2 Translated using Weblate (Finnish)
Currently translated at 100.0% (1070 of 1070 strings)

Co-authored-by: Jonne Saloranta <saloranta.jonne@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
Aluisio
e6aea02ddf Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1070 of 1070 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-04-26 21:01:27 +00:00
tepung
9f92760238 Translated using Weblate (Malay)
Currently translated at 8.1% (87 of 1070 strings)

Translated using Weblate (Malay)

Currently translated at 7.6% (82 of 1070 strings)

Co-authored-by: tepung <nikimran@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ms/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
JC
dfc424494b Translated using Weblate (Catalan)
Currently translated at 52.9% (567 of 1070 strings)

Co-authored-by: JC <jjsuscc@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
AnnAngela
ae52d9f68f Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1070 of 1070 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-04-26 21:01:27 +00:00
stanol
edadbd5e9e Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1070 of 1070 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-04-26 21:01:27 +00:00
Cyril59310
cf7a6b0831 Translated using Weblate (French)
Currently translated at 100.0% (1070 of 1070 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-04-26 21:01:27 +00:00
Marco
8ea23daf2e Translated using Weblate (German)
Currently translated at 100.0% (1070 of 1070 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 100.0% (1070 of 1070 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-04-26 21:01:27 +00:00
MrEddX
a09cbd176f Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1070 of 1070 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-04-26 21:01:27 +00:00
Enes
2ac56d39bd Translated using Weblate (Turkish)
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: Enes <enes3078@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
maz1lovo
2660382a73 Translated using Weblate (Russian)
Currently translated at 99.6% (1065 of 1069 strings)

Co-authored-by: maz1lovo <smakshinov@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
dongsu8142
6a7c5eb11d Translated using Weblate (Korean)
Currently translated at 74.9% (801 of 1069 strings)

Co-authored-by: dongsu8142 <dongsu8142@naver.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
ASTERISK Kwon
6869036a30 Translated using Weblate (Korean)
Currently translated at 74.1% (793 of 1069 strings)

Co-authored-by: ASTERISK Kwon <whying010@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
Marcis Pauls
d0d5dbc8e7 Translated using Weblate (Latvian)
Currently translated at 0.3% (4 of 1069 strings)

Added translation using Weblate (Latvian)

Co-authored-by: Marcis Pauls <marcis.pauls@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/lv/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
Donker_Jumala
139a2b7865 Translated using Weblate (Japanese)
Currently translated at 100.0% (1070 of 1070 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: Donker_Jumala <weareh0711@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
Roberto Agria
395e505c18 Translated using Weblate (Italian)
Currently translated at 66.3% (709 of 1069 strings)

Co-authored-by: Roberto Agria <roberto.agria@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
ramondsq
16c048f3bb Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: ramondsq <quruis@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
A3
acdd1e6a32 Translated using Weblate (Dutch)
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: A3 <warmerdamm03@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
B3CKDOOR
8eea2bde65 Translated using Weblate (Dutch)
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: B3CKDOOR <B3CKDOOR@users.noreply.weblate.kuma.pet>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
A3
c82ee23d65 Translated using Weblate (Dutch)
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: A3 <warmerdamm03@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
Adam Stachowicz
87ab164a45 Translated using Weblate (Polish)
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
B3CKDOOR
edc62bd68e Translated using Weblate (Dutch)
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: B3CKDOOR <B3CKDOOR@users.noreply.weblate.kuma.pet>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
A3
5654130ab4 Translated using Weblate (Dutch)
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: A3 <warmerdamm03@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
Tiramisu
4953bf5eac Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: Tiramisu <garcia.o.felipe@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
Alex Nagy
52b0856a2a Translated using Weblate (Hungarian)
Currently translated at 100.0% (1069 of 1069 strings)

Co-authored-by: Alex Nagy <nagyalex003@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2025-04-26 21:01:27 +00:00
116 changed files with 5918 additions and 2149 deletions

View File

@@ -3,7 +3,7 @@ name: ❓ Ask for help
description: |
Submit any question related to Uptime Kuma
#title: "[Help]"
labels: ["help", "P3-low"]
labels: ["help"]
body:
- type: markdown
attributes:

View File

@@ -3,7 +3,7 @@ name: 🐛 Bug Report
description: |
Submit a bug report to help us improve
#title: "[Bug]"
labels: ["bug", "P2-medium"]
labels: ["bug"]
body:
- type: markdown
attributes:

View File

@@ -3,28 +3,15 @@ name: 🚀 Feature Request
description: |
Submit a proposal for a new feature
# title: "[Feature]"
labels: ["feature-request", "P3-low"]
labels: ["feature-request"]
body:
- type: markdown
attributes:
value: |
## ❗Important Announcement
### 🚧 Temporary Delay in Feature Requests and Pull Request Reviews
**At this time, we may be slower to respond to new feature requests and review pull requests. Existing requests and PRs will remain in the backlog but may not be prioritized immediately.**
- **Reason**: Our current focus is on addressing bugs, improving system performance, and implementing essential updates. This will help stabilize the project and ensure smoother management.
- **Impact**: While no new feature requests or pull requests are being outright rejected, there may be significant delays in reviews. We encourage the community to help by reviewing PRs or assisting other users in the meantime.
- **What You Can Do**: If you're interested in contributing, reviewing open PRs by following our [Review Guidelines](https://github.com/louislam/uptime-kuma/blob/master/.github/REVIEW_GUIDELINES.md) or offering help to other users is greatly appreciated. All feature requests and PRs will be revisited once the suspension period is lifted.
We appreciate your patience and understanding as we continue to improve Uptime Kuma.
### 🚫 Please Avoid Unnecessary Pinging of Maintainers
**We kindly ask you to refrain from pinging maintainers unless absolutely necessary. Pings are reserved for critical/urgent pull requests that require immediate attention.**
**Why**: Reserving pings for urgent matters ensures maintainers can prioritize critical tasks effectively.
We kindly ask you to refrain from pinging maintainers unless absolutely necessary.
Pings are for critical/urgent pull requests that require immediate attention.
- type: textarea
id: related-issues
validations:

View File

@@ -3,7 +3,7 @@ name: 🛡️ Security Issue
description: |
Notify Louis Lam about a security concern. Please do NOT include any sensitive details in this issue.
# title: "Security Issue"
labels: ["security", "P1-high"]
labels: ["security"]
assignees: [louislam]
body:
- type: markdown

View File

@@ -1,44 +1,35 @@
**⚠️ Please Note: We do not accept all types of pull requests, and we want to ensure we dont waste your time. Before submitting, make sure you have read our pull request guidelines: [Pull Request Rules](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma)**
## ❗ Important Announcement
## ❗ Important Announcements
<details><summary>Click here for more details:</summary>
</p>
### 🚧 Temporary Delay in Feature Requests and Pull Request Reviews
**At this time, we may be slower to respond to new feature requests and review pull requests. Existing requests and PRs will remain in the backlog but may not be prioritized immediately.**
- **Reason**: Our current focus is on addressing bugs, improving system performance, and implementing essential updates. This will help stabilize the project and ensure smoother management.
- **Impact**: While no new feature requests or pull requests are being outright rejected, there may be significant delays in reviews. We encourage the community to help by reviewing PRs or assisting other users in the meantime.
- **What You Can Do**: If you're interested in contributing, reviewing open PRs by following our [Review Guidelines](https://github.com/louislam/uptime-kuma/blob/master/.github/REVIEW_GUIDELINES.md) or offering support to other users is greatly appreciated. All feature requests and PRs will be revisited once the suspension period is lifted.
We appreciate your patience and understanding as we continue to improve Uptime Kuma.
**⚠️ Please Note: We do not accept all types of pull requests, and we want to ensure we dont waste your time. Before submitting, make sure you have read our pull request guidelines: [Pull Request Rules](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma)**
### 🚫 Please Avoid Unnecessary Pinging of Maintainers
**We kindly ask you to refrain from pinging maintainers unless absolutely necessary. Pings are reserved for critical/urgent pull requests that require immediate attention.**
**Why**: Reserving pings for urgent matters ensures maintainers can prioritize critical tasks effectively.
We kindly ask you to refrain from pinging maintainers unless absolutely necessary. Pings are for critical/urgent pull requests that require immediate attention.
</p>
</details>
## 📋 Overview
Provide a clear summary of the purpose and scope of this pull request:
<!-- Provide a clear summary of the purpose and scope of this pull request:-->
- **What problem does this pull request address?**
- Please provide a detailed explanation here.
- **What features or functionality does this pull request introduce or enhance?**
- Please provide a detailed explanation here.
## 🔄 Changes
<!--
Please link any GitHub issues or tasks that this pull request addresses.
Use the appropriate issue numbers or links to enable auto-closing.
-->
### 🛠️ Type of change
- Relates to #issue-number
- Resolves #issue-number
## 🛠️ Type of change
<!-- Please select all options that apply -->
@@ -52,23 +43,12 @@ Provide a clear summary of the purpose and scope of this pull request:
- [ ] 🔧 Other (please specify):
- Provide additional details here.
## 🔗 Related Issues
<!--
Please link any GitHub issues or tasks that this pull request addresses. Use the appropriate issue numbers or links.
**Note**: Include only issues directly related to this PR. Remove any irrelevant reference.
-->
- Relates to #issue-number
- Resolves #issue-number
- Fixes #issue-number
## 📄 Checklist *
## 📄 Checklist
<!-- Please select all options that apply -->
- [ ] 🔍 My code adheres to the style guidelines of this project.
- [ ] 🦿 I have indicated where (if any) I used an LLM for the contributions
- [ ] ✅ I ran ESLint and other code linters for modified files.
- [ ] 🛠️ I have reviewed and tested my code.
- [ ] 📝 I have commented my code, especially in hard-to-understand areas (e.g., using JSDoc for methods).
@@ -82,10 +62,11 @@ Please link any GitHub issues or tasks that this pull request addresses. Use the
## 📷 Screenshots or Visual Changes
<!--
Please upload the image directly here by pasting it or dragging and dropping. Avoid using external image services as the image will be uploaded automatically.
If this pull request introduces visual changes, please provide the following details.
If not, remove this section.
Please upload the image directly here by pasting it or dragging and dropping.
Avoid using external image services as the image will be uploaded automatically.
-->
- **UI Modifications**: Highlight any changes made to the user interface.
@@ -97,26 +78,3 @@ If not, remove this section.
| `DOWN` | ![Before](image-link) | ![After](image-link) |
| Certificate-expiry | ![Before](image-link) | ![After](image-link) |
| Testing | ![Before](image-link) | ![After](image-link) |
## Additional Context
Provide any relevant details to assist reviewers in understanding the changes.
<details><summary>Click here for more details:</summary>
</p>
**Key Considerations**:
- **Design decisions** Key choices or trade-offs made during development.
- **Alternative solutions** Approaches considered but not implemented, along with reasons.
- **Relevant links** Specifications, discussions, or resources that provide context.
- **Dependencies** Related pull requests or issues that must be resolved before merging.
- **Additional context** Any other details that may help reviewers understand the changes.
Provide details here
## 💬 Requested Feedback
<!-- If a part of our docs is unclear, you are unsure how to do something/.. this is where we would appreciate your feedback -->
- `Mention documents needing feedback here`

View File

@@ -86,7 +86,7 @@ to review the appropriate one for your contribution.
PR:
- A text may not be currently localisable. In this case, **adding a new
language key** via `$t("languageKey")` might be nessesary
language key** via `$t("languageKey")` might be necessary
- language keys need to be **added to `en.json`** to be visible in weblate. If
this has not happened, a PR is appreciated.
- **Adding a new language** requires a new file see

View File

@@ -0,0 +1,13 @@
exports.up = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.boolean("ip_family").defaultTo(null);
});
};
exports.down = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.dropColumn("ip_family");
});
};

View File

@@ -0,0 +1,12 @@
exports.up = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.string("manual_status").defaultTo(null);
});
};
exports.down = function (knex) {
return knex.schema.alterTable("monitor", function (table) {
table.dropColumn("manual_status");
});
};

View File

@@ -0,0 +1,34 @@
// Add column last_start_date to maintenance table
exports.up = async function (knex) {
await knex.schema
.alterTable("maintenance", function (table) {
table.datetime("last_start_date");
});
// Perform migration for recurring-interval strategy
const recurringMaintenances = await knex("maintenance").where({
strategy: "recurring-interval",
cron: "* * * * *"
}).select("id", "start_time");
// eslint-disable-next-line camelcase
const maintenanceUpdates = recurringMaintenances.map(async ({ start_time, id }) => {
// eslint-disable-next-line camelcase
const [ hourStr, minuteStr ] = start_time.split(":");
const hour = parseInt(hourStr, 10);
const minute = parseInt(minuteStr, 10);
const cron = `${minute} ${hour} * * *`;
await knex("maintenance")
.where({ id })
.update({ cron });
});
await Promise.all(maintenanceUpdates);
};
exports.down = function (knex) {
return knex.schema.alterTable("maintenance", function (table) {
table.dropColumn("last_start_date");
});
};

View File

@@ -0,0 +1,13 @@
// Fix: Change manual_status column type to smallint
exports.up = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.smallint("manual_status").alter();
});
};
exports.down = function (knex) {
return knex.schema.alterTable("monitor", function (table) {
table.string("manual_status").alter();
});
};

View File

@@ -0,0 +1,12 @@
exports.up = function (knex) {
return knex.schema
.alterTable("monitor", function (table) {
table.string("oauth_audience").nullable().defaultTo(null);
});
};
exports.down = function (knex) {
return knex.schema.alterTable("monitor", function (table) {
table.string("oauth_audience").alter();
});
};

View File

@@ -0,0 +1,15 @@
exports.up = function (knex) {
// Add new column monitor.mqtt_websocket_path
return knex.schema
.alterTable("monitor", function (table) {
table.string("mqtt_websocket_path", 255).nullable();
});
};
exports.down = function (knex) {
// Drop column monitor.mqtt_websocket_path
return knex.schema
.alterTable("monitor", function (table) {
table.dropColumn("mqtt_websocket_path");
});
};

View File

@@ -47,9 +47,9 @@ RUN apt update && \
# Install cloudflared
RUN curl https://pkg.cloudflare.com/cloudflare-main.gpg --output /usr/share/keyrings/cloudflare-main.gpg && \
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bullseye main' | tee /etc/apt/sources.list.d/cloudflared.list && \
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bookworm main' | tee /etc/apt/sources.list.d/cloudflared.list && \
apt update && \
apt install --yes --no-install-recommends -t stable cloudflared && \
apt install --yes --no-install-recommends cloudflared && \
cloudflared version && \
rm -rf /var/lib/apt/lists/* && \
apt --yes autoremove

View File

@@ -79,6 +79,10 @@ USER node
RUN git config --global user.email "no-reply@no-reply.com"
RUN git config --global user.name "PR Tester"
RUN git clone https://github.com/louislam/uptime-kuma.git .
# Hide the warning when running in detached head state
RUN git config --global advice.detachedHead false
RUN npm ci
EXPOSE 3000 3001

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

@@ -1,33 +0,0 @@
const childProcess = require("child_process");
if (!process.env.UPTIME_KUMA_GH_REPO) {
console.error("Please set a repo to the environment variable 'UPTIME_KUMA_GH_REPO' (e.g. mhkarimi1383:goalert-notification)");
process.exit(1);
}
let inputArray = process.env.UPTIME_KUMA_GH_REPO.split(":");
if (inputArray.length !== 2) {
console.error("Invalid format. Please set a repo to the environment variable 'UPTIME_KUMA_GH_REPO' (e.g. mhkarimi1383:goalert-notification)");
}
let name = inputArray[0];
let branch = inputArray[1];
console.log("Checkout pr");
// Checkout the pr
let result = childProcess.spawnSync("git", [ "remote", "add", name, `https://github.com/${name}/uptime-kuma` ]);
console.log(result.stdout.toString());
console.error(result.stderr.toString());
result = childProcess.spawnSync("git", [ "fetch", name, branch ]);
console.log(result.stdout.toString());
console.error(result.stderr.toString());
result = childProcess.spawnSync("git", [ "checkout", `${name}/${branch}`, "--force" ]);
console.log(result.stdout.toString());
console.error(result.stderr.toString());

34
extra/checkout-pr.mjs Normal file
View File

@@ -0,0 +1,34 @@
import childProcess from "child_process";
import { parsePrName } from "./kuma-pr/pr-lib.mjs";
let { name, branch } = parsePrName(process.env.UPTIME_KUMA_GH_REPO);
console.log(`Checking out PR from ${name}:${branch}`);
// Checkout the pr
let result = childProcess.spawnSync("git", [ "remote", "add", name, `https://github.com/${name}/uptime-kuma` ], {
stdio: "inherit"
});
if (result.status !== 0) {
console.error("Failed to add remote repository.");
process.exit(1);
}
result = childProcess.spawnSync("git", [ "fetch", name, branch ], {
stdio: "inherit"
});
if (result.status !== 0) {
console.error("Failed to fetch the branch.");
process.exit(1);
}
result = childProcess.spawnSync("git", [ "checkout", `${name}/${branch}`, "--force" ], {
stdio: "inherit"
});
if (result.status !== 0) {
console.error("Failed to checkout the branch.");
process.exit(1);
}

View File

@@ -37,7 +37,7 @@ const github = require("@actions/github");
owner: issue.owner,
repo: issue.repo,
issue_number: issue.number,
body: `@${username}: Hello! :wave:\n\nThis issue is being automatically closed because it does not follow the issue template. Please **DO NOT open blank issues and use our [issue-templates](https://github.com/louislam/uptime-kuma/issues/new/choose) instead**.\nBlank Issues do not contain the context nessesary for a good discussions.`
body: `@${username}: Hello! :wave:\n\nThis issue is being automatically closed because it does not follow the issue template. Please **DO NOT open blank issues and use our [issue-templates](https://github.com/louislam/uptime-kuma/issues/new/choose) instead**.\nBlank Issues do not contain the context necessary for a good discussions.`
});
// Close the issue

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 ]);
}

26
extra/kuma-pr/index.mjs Normal file
View File

@@ -0,0 +1,26 @@
#!/usr/bin/env node
import { spawn } from "child_process";
import { parsePrName } from "./pr-lib.mjs";
const prName = process.argv[2];
// Pre-check the prName here, so testers don't need to wait until the Docker image is pulled to see the error.
try {
parsePrName(prName);
} catch (error) {
console.error(error.message);
process.exit(1);
}
spawn("docker", [
"run",
"--rm",
"-it",
"-p", "3000:3000",
"-p", "3001:3001",
"--pull", "always",
"-e", `UPTIME_KUMA_GH_REPO=${prName}`,
"louislam/uptime-kuma:pr-test2"
], {
stdio: "inherit",
});

View File

@@ -0,0 +1,8 @@
{
"name": "kuma-pr",
"version": "1.0.0",
"type": "module",
"bin": {
"kuma-pr": "./index.mjs"
}
}

39
extra/kuma-pr/pr-lib.mjs Normal file
View File

@@ -0,0 +1,39 @@
/**
* Parse <name>:<branch> to an object.
* @param {string} prName <name>:<branch>
* @returns {object} An object with name and branch properties.
*/
export function parsePrName(prName) {
let name = "louislam";
let branch;
const errorMessage = "Please set a repo to the environment variable 'UPTIME_KUMA_GH_REPO' (e.g. mhkarimi1383:goalert-notification)";
if (!prName) {
throw new Error(errorMessage);
}
prName = prName.trim();
if (prName === "") {
throw new Error(errorMessage);
}
let inputArray = prName.split(":");
// Just realized that owner's prs are not prefixed with "louislam:"
if (inputArray.length === 1) {
branch = inputArray[0];
} else if (inputArray.length === 2) {
name = inputArray[0];
branch = inputArray[1];
} else {
throw new Error("Invalid format. The format is like this: mhkarimi1383:goalert-notification");
}
return {
name,
branch
};
}

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

2210
package-lock.json generated

File diff suppressed because it is too large Load Diff

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",
@@ -57,14 +57,15 @@
"release-nightly": "node ./extra/release/nightly.mjs",
"git-remove-tag": "git tag -d",
"build-dist-and-restart": "npm run build && npm run start-server-dev",
"start-pr-test": "node extra/checkout-pr.js && npm install && npm run dev",
"start-pr-test": "node extra/checkout-pr.mjs && npm install && npm run dev",
"build-healthcheck-armv7": "cross-env GOOS=linux GOARCH=arm GOARM=7 go build -x -o ./extra/healthcheck-armv7 ./extra/healthcheck.go",
"deploy-demo-server": "node extra/deploy-demo-server.js",
"sort-contributors": "node extra/sort-contributors.js",
"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",
@@ -99,6 +100,7 @@
"http-proxy-agent": "~7.0.2",
"https-proxy-agent": "~7.0.6",
"iconv-lite": "~0.6.3",
"is-url": "^1.2.4",
"isomorphic-ws": "^5.0.0",
"jsesc": "~3.0.2",
"jsonata": "^2.0.3",
@@ -137,6 +139,7 @@
"socket.io": "~4.8.0",
"socket.io-client": "~4.8.0",
"socks-proxy-agent": "~8.0.5",
"sqlstring": "~2.3.3",
"tar": "~6.2.1",
"tcp-ping": "~0.1.1",
"thirty-two": "~1.0.2",

View File

@@ -26,7 +26,7 @@ exports.login = async function (username, password) {
// Upgrade the hash to bcrypt
if (passwordHash.needRehash(user.password)) {
await R.exec("UPDATE `user` SET password = ? WHERE id = ? ", [
passwordHash.generate(password),
await passwordHash.generate(password),
user.id,
]);
}

View File

@@ -1,4 +1,5 @@
const fs = require("fs");
const fsAsync = fs.promises;
const { R } = require("redbean-node");
const { setSetting, setting } = require("./util-server");
const { log, sleep } = require("../src/util");
@@ -11,6 +12,7 @@ const { UptimeCalculator } = require("./uptime-calculator");
const dayjs = require("dayjs");
const { SimpleMigrationServer } = require("./utils/simple-migration-server");
const KumaColumnCompiler = require("./utils/knex/lib/dialects/mysql2/schema/mysql2-columncompiler");
const SqlString = require("sqlstring");
/**
* Database & App Data Folder
@@ -18,7 +20,7 @@ const KumaColumnCompiler = require("./utils/knex/lib/dialects/mysql2/schema/mysq
class Database {
/**
* Boostrap database for SQLite
* Bootstrap database for SQLite
* @type {string}
*/
static templatePath = "./db/kuma.db";
@@ -255,10 +257,6 @@ class Database {
}
};
} else if (dbConfig.type === "mariadb") {
if (!/^\w+$/.test(dbConfig.dbName)) {
throw Error("Invalid database name. A database name can only consist of letters, numbers and underscores");
}
const connection = await mysql.createConnection({
host: dbConfig.hostname,
port: dbConfig.port,
@@ -266,7 +264,11 @@ class Database {
password: dbConfig.password,
});
await connection.execute("CREATE DATABASE IF NOT EXISTS " + dbConfig.dbName + " CHARACTER SET utf8mb4");
// Set to true, so for example "uptime.kuma", becomes `uptime.kuma`, not `uptime`.`kuma`
// Doc: https://github.com/mysqljs/sqlstring?tab=readme-ov-file#escaping-query-identifiers
const escapedDBName = SqlString.escapeId(dbConfig.dbName, true);
await connection.execute("CREATE DATABASE IF NOT EXISTS " + escapedDBName + " CHARACTER SET utf8mb4");
connection.end();
config = {
@@ -707,12 +709,12 @@ class Database {
/**
* Get the size of the database (SQLite only)
* @returns {number} Size of database
* @returns {Promise<number>} Size of database
*/
static getSize() {
static async getSize() {
if (Database.dbConfig.type === "sqlite") {
log.debug("db", "Database.getSize()");
let stats = fs.statSync(Database.sqlitePath);
let stats = await fsAsync.stat(Database.sqlitePath);
log.debug("db", stats);
return stats.size;
}

View File

@@ -1,10 +1,10 @@
const axios = require("axios");
const { R } = require("redbean-node");
const https = require("https");
const fs = require("fs");
const fsAsync = require("fs").promises;
const path = require("path");
const Database = require("./database");
const { axiosAbortSignal } = require("./util-server");
const { axiosAbortSignal, fsExists } = require("./util-server");
class DockerHost {
@@ -81,7 +81,7 @@ class DockerHost {
options.socketPath = dockerHost.dockerDaemon;
} else if (dockerHost.dockerType === "tcp") {
options.baseURL = DockerHost.patchDockerURL(dockerHost.dockerDaemon);
options.httpsAgent = new https.Agent(DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL));
options.httpsAgent = new https.Agent(await DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL));
}
try {
@@ -141,9 +141,9 @@ class DockerHost {
* File names can also be overridden via 'DOCKER_TLS_FILE_NAME_(CA|KEY|CERT)'.
* @param {string} dockerType i.e. "tcp" or "socket"
* @param {string} url The docker host URL rewritten to https://
* @returns {object} HTTP agent options
* @returns {Promise<object>} HTTP agent options
*/
static getHttpsAgentOptions(dockerType, url) {
static async getHttpsAgentOptions(dockerType, url) {
let baseOptions = {
maxCachedSessions: 0,
rejectUnauthorized: true
@@ -156,10 +156,10 @@ class DockerHost {
let certPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameCert);
let keyPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameKey);
if (dockerType === "tcp" && fs.existsSync(caPath) && fs.existsSync(certPath) && fs.existsSync(keyPath)) {
let ca = fs.readFileSync(caPath);
let key = fs.readFileSync(keyPath);
let cert = fs.readFileSync(certPath);
if (dockerType === "tcp" && await fsExists(caPath) && await fsExists(certPath) && await fsExists(keyPath)) {
let ca = await fsAsync.readFile(caPath);
let key = await fsAsync.readFile(keyPath);
let cert = await fsAsync.readFile(certPath);
certOptions = {
ca,
key,

View File

@@ -158,12 +158,22 @@ class Maintenance extends BeanModel {
bean.active = obj.active;
if (obj.dateRange[0]) {
const parsedDate = new Date(obj.dateRange[0]);
if (isNaN(parsedDate.getTime()) || parsedDate.getFullYear() > 9999) {
throw new Error("Invalid start date");
}
bean.start_date = obj.dateRange[0];
} else {
bean.start_date = null;
}
if (obj.dateRange[1]) {
const parsedDate = new Date(obj.dateRange[1]);
if (isNaN(parsedDate.getTime()) || parsedDate.getFullYear() > 9999) {
throw new Error("Invalid end date");
}
bean.end_date = obj.dateRange[1];
} else {
bean.end_date = null;
@@ -192,7 +202,7 @@ class Maintenance extends BeanModel {
* @returns {void}
*/
static validateCron(cron) {
let job = new Cron(cron, () => {});
let job = new Cron(cron, () => { });
job.stop();
}
@@ -229,11 +239,13 @@ class Maintenance extends BeanModel {
apicache.clear();
});
} else if (this.cron != null) {
let current = dayjs();
// Here should be cron or recurring
try {
this.beanMeta.status = "scheduled";
let startEvent = (customDuration = 0) => {
let startEvent = async (customDuration = 0) => {
log.info("maintenance", "Maintenance id: " + this.id + " is under maintenance now");
this.beanMeta.status = "under-maintenance";
@@ -248,6 +260,10 @@ class Maintenance extends BeanModel {
this.beanMeta.status = "scheduled";
UptimeKumaServer.getInstance().sendMaintenanceListByUserID(this.user_id);
}, duration);
// Set last start date to current time
this.last_start_date = current.toISOString();
R.store(this);
};
// Create Cron
@@ -258,9 +274,25 @@ class Maintenance extends BeanModel {
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);
}, () => {
if (!this.lastStartDate || this.interval_day === 1) {
return startEvent();
}
// If last start date is set, it means the maintenance has been started before
let lastStartDate = dayjs(this.lastStartDate)
.subtract(1.1, "hour"); // Subtract 1.1 hour to avoid issues with timezone differences
// Check if the interval is enough
if (current.diff(lastStartDate, "day") < this.interval_day) {
log.debug("maintenance", "Maintenance id: " + this.id + " is still in the window, skipping start event");
return;
}
log.debug("maintenance", "Maintenance id: " + this.id + " is not in the window, starting event");
return startEvent();
});
} else {
this.beanMeta.job = new Cron(this.cron, {
timezone: await this.getTimezone(),
@@ -269,7 +301,6 @@ class Maintenance extends BeanModel {
// Continue if the maintenance is still in the window
let runningTimeslot = this.getRunningTimeslot();
let current = dayjs();
if (runningTimeslot) {
let duration = dayjs(runningTimeslot.endDate).diff(current, "second") * 1000;
@@ -413,8 +444,11 @@ class Maintenance extends BeanModel {
} else if (!this.strategy.startsWith("recurring-")) {
this.cron = "";
} else if (this.strategy === "recurring-interval") {
// For intervals, the pattern is calculated in the run function as the interval-option is set
this.cron = "* * * * *";
// For intervals, the pattern is used to check if the execution should be started
let array = this.start_time.split(":");
let hour = parseInt(array[0]);
let minute = parseInt(array[1]);
this.cron = `${minute} ${hour} * * *`;
this.duration = this.calcDuration();
log.debug("maintenance", "Cron: " + this.cron);
log.debug("maintenance", "Duration: " + this.duration);

View File

@@ -160,6 +160,7 @@ class Monitor extends BeanModel {
smtpSecurity: this.smtpSecurity,
rabbitmqNodes: JSON.parse(this.rabbitmqNodes),
conditions: JSON.parse(this.conditions),
ipFamily: this.ipFamily,
// ping advanced options
ping_numeric: this.isPingNumeric(),
@@ -180,6 +181,7 @@ class Monitor extends BeanModel {
oauth_client_secret: this.oauth_client_secret,
oauth_token_url: this.oauth_token_url,
oauth_scopes: this.oauth_scopes,
oauth_audience: this.oauth_audience,
oauth_auth_method: this.oauth_auth_method,
pushToken: this.pushToken,
databaseConnectionString: this.databaseConnectionString,
@@ -188,6 +190,7 @@ class Monitor extends BeanModel {
radiusSecret: this.radiusSecret,
mqttUsername: this.mqttUsername,
mqttPassword: this.mqttPassword,
mqttWebsocketPath: this.mqttWebsocketPath,
authWorkstation: this.authWorkstation,
authDomain: this.authDomain,
tlsCa: this.tlsCa,
@@ -426,10 +429,26 @@ class Monitor extends BeanModel {
}
}
let agentFamily = undefined;
if (this.ipFamily === "ipv4") {
agentFamily = 4;
}
if (this.ipFamily === "ipv6") {
agentFamily = 6;
}
const httpsAgentOptions = {
maxCachedSessions: 0, // Use Custom agent to disable session reuse (https://github.com/nodejs/node/issues/3940)
rejectUnauthorized: !this.getIgnoreTls(),
secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT,
autoSelectFamily: true,
...(agentFamily ? { family: agentFamily } : {})
};
const httpAgentOptions = {
maxCachedSessions: 0,
autoSelectFamily: true,
...(agentFamily ? { family: agentFamily } : {})
};
log.debug("monitor", `[${this.name}] Prepare Options for axios`);
@@ -491,6 +510,7 @@ class Monitor extends BeanModel {
if (proxy && proxy.active) {
const { httpAgent, httpsAgent } = Proxy.createAgents(proxy, {
httpsAgentOptions: httpsAgentOptions,
httpAgentOptions: httpAgentOptions,
});
options.proxy = false;
@@ -499,6 +519,10 @@ class Monitor extends BeanModel {
}
}
if (!options.httpAgent) {
options.httpAgent = new http.Agent(httpAgentOptions);
}
if (!options.httpsAgent) {
let jar = new CookieJar();
let httpsCookieAgentOptions = {
@@ -724,7 +748,7 @@ class Monitor extends BeanModel {
} else if (dockerHost._dockerType === "tcp") {
options.baseURL = DockerHost.patchDockerURL(dockerHost._dockerDaemon);
options.httpsAgent = new https.Agent(
DockerHost.getHttpsAgentOptions(dockerHost._dockerType, options.baseURL)
await DockerHost.getHttpsAgentOptions(dockerHost._dockerType, options.baseURL)
);
}
@@ -1291,7 +1315,7 @@ class Monitor extends BeanModel {
/**
* Send a notification about a monitor
* @param {boolean} isFirstBeat Is this beat the first of this monitor?
* @param {Monitor} monitor The monitor to send a notificaton about
* @param {Monitor} monitor The monitor to send a notification about
* @param {Bean} bean Status information about monitor
* @returns {void}
*/
@@ -1724,7 +1748,7 @@ class Monitor extends BeanModel {
*/
async makeOidcTokenClientCredentialsRequest() {
log.debug("monitor", `[${this.name}] The oauth access-token undefined or expired. Requesting a new token`);
const oAuthAccessToken = await getOidcTokenClientCredentials(this.oauth_token_url, this.oauth_client_id, this.oauth_client_secret, this.oauth_scopes, this.oauth_auth_method);
const oAuthAccessToken = await getOidcTokenClientCredentials(this.oauth_token_url, this.oauth_client_id, this.oauth_client_secret, this.oauth_scopes, this.oauth_audience, this.oauth_auth_method);
if (this.oauthAccessToken?.expires_at) {
log.debug("monitor", `[${this.name}] Obtained oauth access-token. Expires at ${new Date(this.oauthAccessToken?.expires_at * 1000)}`);
} else {

View File

@@ -120,8 +120,8 @@ class StatusPage extends BeanModel {
const head = $("head");
if (statusPage.googleAnalyticsTagId) {
let escapedGoogleAnalyticsScript = googleAnalytics.getGoogleAnalyticsScript(statusPage.googleAnalyticsTagId);
if (statusPage.google_analytics_tag_id) {
let escapedGoogleAnalyticsScript = googleAnalytics.getGoogleAnalyticsScript(statusPage.google_analytics_tag_id);
head.append($(escapedGoogleAnalyticsScript));
}

View File

@@ -14,7 +14,7 @@ class User extends BeanModel {
*/
static async resetPassword(userID, newPassword) {
await R.exec("UPDATE `user` SET password = ? WHERE id = ? ", [
passwordHash.generate(newPassword),
await passwordHash.generate(newPassword),
userID
]);
}
@@ -25,7 +25,7 @@ class User extends BeanModel {
* @returns {Promise<void>}
*/
async resetPassword(newPassword) {
const hashedPassword = passwordHash.generate(newPassword);
const hashedPassword = await passwordHash.generate(newPassword);
await R.exec("UPDATE `user` SET password = ? WHERE id = ? ", [
hashedPassword,

View File

@@ -89,6 +89,9 @@ function NtlmClient(credentials, AxiosConfig) {
switch (_b.label) {
case 0:
error = err.response;
// The header may look like this: `Negotiate, NTLM, Basic realm="itsahiddenrealm.example.net"`Add commentMore actions
// so extract the 'NTLM' part first
const ntlmheader = error.headers['www-authenticate'].split(',').find(_ => _.match(/ *NTLM/))?.trim() || '';
if (!(error && error.status === 401
&& error.headers['www-authenticate']
&& error.headers['www-authenticate'].includes('NTLM'))) return [3 /*break*/, 3];
@@ -96,12 +99,12 @@ function NtlmClient(credentials, AxiosConfig) {
// 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) {
if (ntlmheader.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]);
t2Msg = ntlm.decodeType2Message((ntlmheader.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;

View File

@@ -0,0 +1,36 @@
const { MonitorType } = require("./monitor-type");
const { UP, DOWN, PENDING } = require("../../src/util");
class ManualMonitorType extends MonitorType {
name = "Manual";
type = "manual";
description = "A monitor that allows manual control of the status";
supportsConditions = false;
conditionVariables = [];
/**
* @inheritdoc
*/
async check(monitor, heartbeat) {
if (monitor.manual_status !== null) {
heartbeat.status = monitor.manual_status;
switch (monitor.manual_status) {
case UP:
heartbeat.msg = "Up";
break;
case DOWN:
heartbeat.msg = "Down";
break;
default:
heartbeat.msg = "Pending";
}
} else {
heartbeat.status = PENDING;
heartbeat.msg = "Manual monitoring - No status set";
}
}
}
module.exports = {
ManualMonitorType
};

View File

@@ -15,6 +15,7 @@ class MqttMonitorType extends MonitorType {
username: monitor.mqttUsername,
password: monitor.mqttPassword,
interval: monitor.interval,
websocketPath: monitor.mqttWebsocketPath,
});
if (monitor.mqttCheckType == null || monitor.mqttCheckType === "") {
@@ -52,12 +53,12 @@ class MqttMonitorType extends MonitorType {
* @param {string} hostname Hostname / address of machine to test
* @param {string} topic MQTT topic
* @param {object} options MQTT options. Contains port, username,
* password and interval (interval defaults to 20)
* password, websocketPath and interval (interval defaults to 20)
* @returns {Promise<string>} Received MQTT message
*/
mqttAsync(hostname, topic, options = {}) {
return new Promise((resolve, reject) => {
const { port, username, password, interval = 20 } = options;
const { port, username, password, websocketPath, interval = 20 } = options;
// Adds MQTT protocol to the hostname if not already present
if (!/^(?:http|mqtt|ws)s?:\/\//.test(hostname)) {
@@ -70,7 +71,15 @@ class MqttMonitorType extends MonitorType {
reject(new Error("Timeout, Message not received"));
}, interval * 1000 * 0.8);
const mqttUrl = `${hostname}:${port}`;
// Construct the URL based on protocol
let mqttUrl = `${hostname}:${port}`;
if (hostname.startsWith("ws://") || hostname.startsWith("wss://")) {
if (websocketPath && !websocketPath.startsWith("/")) {
mqttUrl = `${hostname}:${port}/${websocketPath || ""}`;
} else {
mqttUrl = `${hostname}:${port}${websocketPath || ""}`;
}
}
log.debug("mqtt", `MQTT connecting to ${mqttUrl}`);

View File

@@ -18,17 +18,28 @@ class Discord extends NotificationProvider {
webhookUrl.searchParams.append("thread_id", notification.threadId);
}
// Check if the webhook has an avatar
let webhookHasAvatar = true;
try {
const webhookInfo = await axios.get(webhookUrl.toString());
webhookHasAvatar = !!webhookInfo.data.avatar;
} catch (e) {
// If we can't verify, we assume he has an avatar to avoid forcing the default avatar
webhookHasAvatar = true;
}
// If heartbeatJSON is null, assume we're testing.
if (heartbeatJSON == null) {
let discordtestdata = {
username: discordDisplayName,
content: msg,
};
if (!webhookHasAvatar) {
discordtestdata.avatar_url = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
}
if (notification.discordChannelType === "createNewForumPost") {
discordtestdata.thread_name = notification.postName;
}
await axios.post(webhookUrl.toString(), discordtestdata);
return okMsg;
}
@@ -61,6 +72,9 @@ class Discord extends NotificationProvider {
],
}],
};
if (!webhookHasAvatar) {
discorddowndata.avatar_url = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
}
if (notification.discordChannelType === "createNewForumPost") {
discorddowndata.thread_name = notification.postName;
}
@@ -98,6 +112,9 @@ class Discord extends NotificationProvider {
],
}],
};
if (!webhookHasAvatar) {
discordupdata.avatar_url = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png";
}
if (notification.discordChannelType === "createNewForumPost") {
discordupdata.thread_name = notification.postName;

View File

@@ -38,7 +38,7 @@ class FlashDuty extends NotificationProvider {
}
/**
* Generate a monitor url from the monitors infomation
* Generate a monitor url from the monitors information
* @param {object} monitorInfo Monitor details
* @returns {string|undefined} Monitor URL
*/

View File

@@ -14,6 +14,18 @@ class GoogleChat extends NotificationProvider {
try {
// Google Chat message formatting: https://developers.google.com/chat/api/guides/message-formats/basic
if (notification.googleChatUseTemplate && notification.googleChatTemplate) {
// Send message using template
const renderedText = await this.renderTemplate(
notification.googleChatTemplate,
msg,
monitorJSON,
heartbeatJSON
);
const data = { "text": renderedText };
await axios.post(notification.googleChatWebhookURL, data);
return okMsg;
}
let chatHeader = {
title: "Uptime Kuma Alert",
@@ -88,7 +100,6 @@ class GoogleChat extends NotificationProvider {
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}

View File

@@ -41,8 +41,8 @@ class Ntfy extends NotificationProvider {
if (heartbeatJSON.status === DOWN) {
tags = [ "red_circle" ];
status = "Down";
// if priority is not 5, increase priority for down alerts
priority = priority === 5 ? priority : priority + 1;
// defaults to max(priority + 1, 5)
priority = notification.ntfyPriorityDown || (priority === 5 ? priority : priority + 1);
} else if (heartbeatJSON["status"] === UP) {
tags = [ "green_circle" ];
status = "Up";

View File

@@ -15,7 +15,7 @@ class PromoSMS extends NotificationProvider {
notification.promosmsAllowLongSMS = false;
}
//TODO: Add option for enabling special characters. It will decrese message max length from 160 to 70 chars.
//TODO: Add option for enabling special characters. It will decrease message max length from 160 to 70 chars.
//Lets remove non ascii char
let cleanMsg = msg.replace(/[^\x00-\x7F]/g, "");

View File

@@ -11,7 +11,7 @@ class PushDeer extends NotificationProvider {
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
const serverUrl = notification.pushdeerServer || "https://api2.pushdeer.com";
// capture group below is nessesary to prevent an ReDOS-attack
// capture group below is necessary to prevent an ReDOS-attack
const url = `${serverUrl.trim().replace(/([^/])\/+$/, "$1")}/message/push`;
let valid = msg != null && monitorJSON != null && heartbeatJSON != null;

View File

@@ -2,6 +2,7 @@ const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { setSettings, setting } = require("../util-server");
const { getMonitorRelativeURL, UP, log } = require("../../src/util");
const isUrl = require("is-url");
class Slack extends NotificationProvider {
name = "slack";
@@ -49,7 +50,7 @@ class Slack extends NotificationProvider {
}
const address = this.extractAddress(monitorJSON);
if (address) {
if (isUrl(address)) {
try {
actions.push({
"type": "button",

View File

@@ -5,10 +5,10 @@ const saltRounds = 10;
/**
* Hash a password
* @param {string} password Password to hash
* @returns {string} Hash
* @returns {Promise<string>} Hash
*/
exports.generate = function (password) {
return bcrypt.hashSync(password, saltRounds);
return bcrypt.hash(password, saltRounds);
};
/**

View File

@@ -2,6 +2,7 @@ const PrometheusClient = require("prom-client");
const { log } = require("../src/util");
const commonLabels = [
"monitor_id",
"monitor_name",
"monitor_type",
"monitor_url",
@@ -40,6 +41,7 @@ class Prometheus {
*/
constructor(monitor) {
this.monitorLabelValues = {
monitor_id: monitor.id,
monitor_name: monitor.name,
monitor_type: monitor.type,
monitor_url: monitor.url,

View File

@@ -674,7 +674,7 @@ let needSetup = false;
let user = R.dispense("user");
user.username = username;
user.password = passwordHash.generate(password);
user.password = await passwordHash.generate(password);
await R.store(user);
needSetup = false;
@@ -720,6 +720,17 @@ let needSetup = false;
monitor.rabbitmqNodes = JSON.stringify(monitor.rabbitmqNodes);
/*
* List of frontend-only properties that should not be saved to the database.
* Should clean up before saving to the database.
*/
const frontendOnlyProperties = [ "humanReadableInterval" ];
for (const prop of frontendOnlyProperties) {
if (prop in monitor) {
delete monitor[prop];
}
}
bean.import(monitor);
bean.user_id = socket.userID;
@@ -792,6 +803,7 @@ let needSetup = false;
bean.url = monitor.url;
bean.method = monitor.method;
bean.body = monitor.body;
bean.ipFamily = monitor.ipFamily;
bean.headers = monitor.headers;
bean.basic_auth_user = monitor.basic_auth_user;
bean.basic_auth_pass = monitor.basic_auth_pass;
@@ -801,6 +813,7 @@ let needSetup = false;
bean.oauth_auth_method = monitor.oauth_auth_method;
bean.oauth_token_url = monitor.oauth_token_url;
bean.oauth_scopes = monitor.oauth_scopes;
bean.oauth_audience = monitor.oauth_audience;
bean.tlsCa = monitor.tlsCa;
bean.tlsCert = monitor.tlsCert;
bean.tlsKey = monitor.tlsKey;
@@ -835,6 +848,7 @@ let needSetup = false;
bean.mqttTopic = monitor.mqttTopic;
bean.mqttSuccessMessage = monitor.mqttSuccessMessage;
bean.mqttCheckType = monitor.mqttCheckType;
bean.mqttWebsocketPath = monitor.mqttWebsocketPath;
bean.databaseConnectionString = monitor.databaseConnectionString;
bean.databaseQuery = monitor.databaseQuery;
bean.authMethod = monitor.authMethod;
@@ -875,6 +889,7 @@ let needSetup = false;
bean.rabbitmqUsername = monitor.rabbitmqUsername;
bean.rabbitmqPassword = monitor.rabbitmqPassword;
bean.conditions = JSON.stringify(monitor.conditions);
bean.manual_status = monitor.manual_status;
// ping advanced options
bean.ping_numeric = monitor.ping_numeric;

View File

@@ -208,11 +208,13 @@ class SetupDatabase {
// Test connection
try {
log.info("setup-database", "Testing database connection...");
const connection = await mysql.createConnection({
host: dbConfig.hostname,
port: dbConfig.port,
user: dbConfig.username,
password: dbConfig.password,
database: dbConfig.dbName,
});
await connection.execute("SELECT 1");
connection.end();

View File

@@ -20,14 +20,14 @@ module.exports.apiKeySocketHandler = (socket) => {
checkLogin(socket);
let clearKey = nanoid(40);
let hashedKey = passwordHash.generate(clearKey);
let hashedKey = await passwordHash.generate(clearKey);
key["key"] = hashedKey;
let bean = await APIKey.save(key, socket.userID);
log.debug("apikeys", "Added API Key");
log.debug("apikeys", key);
// Append key ID and prefix to start of key seperated by _, used to get
// Append key ID and prefix to start of key separated by _, used to get
// correct hash when validating key.
let formattedKey = "uk" + bean.id + "_" + clearKey;
await sendAPIKeyList(socket);

View File

@@ -14,7 +14,7 @@ module.exports.databaseSocketHandler = (socket) => {
checkLogin(socket);
callback({
ok: true,
size: Database.getSize(),
size: await Database.getSize(),
});
} catch (error) {
callback({

View File

@@ -4,7 +4,7 @@ const { sendInfo } = require("../client");
const { checkLogin } = require("../util-server");
const GameResolver = require("gamedig/lib/GameResolver");
const { testChrome } = require("../monitor-types/real-browser-monitor-type");
const fs = require("fs");
const fsAsync = require("fs").promises;
const path = require("path");
let gameResolver = new GameResolver();
@@ -90,7 +90,7 @@ module.exports.generalSocketHandler = (socket, server) => {
}
});
socket.on("getPushExample", (language, callback) => {
socket.on("getPushExample", async (language, callback) => {
try {
checkLogin(socket);
if (!/^[a-z-]+$/.test(language)) {
@@ -106,13 +106,13 @@ module.exports.generalSocketHandler = (socket, server) => {
try {
let dir = path.join("./extra/push-examples", language);
let files = fs.readdirSync(dir);
let files = await fsAsync.readdir(dir);
for (let file of files) {
if (file.startsWith("index.")) {
callback({
ok: true,
code: fs.readFileSync(path.join(dir, file), "utf8"),
code: await fsAsync.readFile(path.join(dir, file), "utf8"),
});
return;
}

View File

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

View File

@@ -582,7 +582,7 @@ class UptimeCalculator {
let totalPing = 0;
let endTimestamp;
// Get the eariest timestamp of the required period based on the type
// Get the earliest timestamp of the required period based on the type
switch (type) {
case "day":
endTimestamp = key - 86400 * (num - 1);
@@ -710,7 +710,7 @@ class UptimeCalculator {
let endTimestamp;
// Get the eariest timestamp of the required period based on the type
// Get the earliest timestamp of the required period based on the type
switch (type) {
case "day":
endTimestamp = key - 86400 * (num - 1);

View File

@@ -118,6 +118,7 @@ class UptimeKumaServer {
UptimeKumaServer.monitorTypeList["snmp"] = new SNMPMonitorType();
UptimeKumaServer.monitorTypeList["mongodb"] = new MongodbMonitorType();
UptimeKumaServer.monitorTypeList["rabbitmq"] = new RabbitMqMonitorType();
UptimeKumaServer.monitorTypeList["manual"] = new ManualMonitorType();
// Allow all CORS origins (polling) in development
let cors = undefined;
@@ -558,4 +559,5 @@ const { GroupMonitorType } = require("./monitor-types/group");
const { SNMPMonitorType } = require("./monitor-types/snmp");
const { MongodbMonitorType } = require("./monitor-types/mongodb");
const { RabbitMqMonitorType } = require("./monitor-types/rabbitmq");
const { ManualMonitorType } = require("./monitor-types/manual");
const Monitor = require("./model/monitor");

View File

@@ -23,6 +23,7 @@ const radiusClient = require("node-radius-client");
const redis = require("redis");
const oidc = require("openid-client");
const tls = require("tls");
const { exists } = require("fs");
const {
dictionaries: {
@@ -51,13 +52,13 @@ exports.initJWTSecret = async () => {
jwtSecretBean.key = "jwtSecret";
}
jwtSecretBean.value = passwordHash.generate(genSecret());
jwtSecretBean.value = await passwordHash.generate(genSecret());
await R.store(jwtSecretBean);
return jwtSecretBean;
};
/**
* Decodes a jwt and returns the payload portion without verifying the jqt.
* Decodes a jwt and returns the payload portion without verifying the jwt.
* @param {string} jwt The input jwt as a string
* @returns {object} Decoded jwt payload object
*/
@@ -66,15 +67,16 @@ exports.decodeJwt = (jwt) => {
};
/**
* Gets a Access Token form a oidc/oauth2 provider
* @param {string} tokenEndpoint The token URI form the auth service provider
* Gets an Access Token from an oidc/oauth2 provider
* @param {string} tokenEndpoint The token URI from the auth service provider
* @param {string} clientId The oidc/oauth application client id
* @param {string} clientSecret The oidc/oauth application client secret
* @param {string} scope The scope the for which the token should be issued for
* @param {string} authMethod The method on how to sent the credentials. Default client_secret_basic
* @param {string} scope The scope(s) for which the token should be issued for
* @param {string} audience The audience for which the token should be issued for
* @param {string} authMethod The method used to send the credentials. Default client_secret_basic
* @returns {Promise<oidc.TokenSet>} TokenSet promise if the token request was successful
*/
exports.getOidcTokenClientCredentials = async (tokenEndpoint, clientId, clientSecret, scope, authMethod = "client_secret_basic") => {
exports.getOidcTokenClientCredentials = async (tokenEndpoint, clientId, clientSecret, scope, audience, authMethod = "client_secret_basic") => {
const oauthProvider = new oidc.Issuer({ token_endpoint: tokenEndpoint });
let client = new oauthProvider.Client({
client_id: clientId,
@@ -90,6 +92,10 @@ exports.getOidcTokenClientCredentials = async (tokenEndpoint, clientId, clientSe
if (scope) {
grantParams.scope = scope;
}
if (audience) {
grantParams.audience = audience;
}
return await client.grant(grantParams);
};
@@ -1096,3 +1102,17 @@ module.exports.axiosAbortSignal = (timeoutMs) => {
}
}
};
/**
* Async version of fs.existsSync
* @param {PathLike} path File path
* @returns {Promise<boolean>} True if file exists, false otherwise
*/
function fsExists(path) {
return new Promise(function (resolve, reject) {
exists(path, function (exists) {
resolve(exists);
});
});
}
module.exports.fsExists = fsExists;

View File

@@ -482,6 +482,7 @@ optgroup {
.info {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
&:hover {

View File

@@ -7,11 +7,17 @@
class="beat-hover-area"
:class="{ 'empty': (beat === 0) }"
:style="beatHoverAreaStyle"
:title="getBeatTitle(beat)"
:aria-label="getBeatAriaLabel(beat)"
role="status"
tabindex="0"
@mouseenter="showTooltip(beat, $event)"
@mouseleave="hideTooltip"
@focus="showTooltip(beat, $event)"
@blur="hideTooltip"
>
<div
class="beat"
:class="{ 'empty': (beat === 0), 'down': (beat.status === 0), 'pending': (beat.status === 2), 'maintenance': (beat.status === 3) }"
:class="getBeatClasses(beat)"
:style="beatStyle"
/>
</div>
@@ -24,13 +30,27 @@
<div v-if="$root.styleElapsedTime === 'with-line'" class="connecting-line"></div>
<div>{{ timeSinceLastBeat }}</div>
</div>
<!-- Custom Tooltip -->
<Tooltip
:visible="tooltipVisible"
:content="tooltipContent"
:x="tooltipX"
:y="tooltipY"
:position="tooltipPosition"
/>
</div>
</template>
<script>
import dayjs from "dayjs";
import { DOWN, UP, PENDING, MAINTENANCE } from "../util.ts";
import Tooltip from "./Tooltip.vue";
export default {
components: {
Tooltip,
},
props: {
/** Size of the heartbeat bar */
size: {
@@ -46,6 +66,11 @@ export default {
heartbeatList: {
type: Array,
default: null,
},
/** Heartbeat bar days */
heartbeatBarDays: {
type: Number,
default: 0
}
},
data() {
@@ -56,10 +81,25 @@ export default {
beatHoverAreaPadding: 4,
move: false,
maxBeat: -1,
// Tooltip data
tooltipVisible: false,
tooltipContent: null,
tooltipX: 0,
tooltipY: 0,
tooltipPosition: "below",
tooltipTimeoutId: null,
};
},
computed: {
/**
* Normalized heartbeatBarDays as a number
* @returns {number} Number of days for heartbeat bar
*/
normalizedHeartbeatBarDays() {
return Math.max(0, Math.min(365, Math.floor(this.heartbeatBarDays || 0)));
},
/**
* If heartbeatList is null, get it from $root.heartbeatList
* @returns {object} Heartbeat list
@@ -80,6 +120,12 @@ export default {
if (!this.beatList) {
return 0;
}
// For configured ranges, no padding needed since we show all beats
if (this.normalizedHeartbeatBarDays > 0) {
return 0;
}
let num = this.beatList.length - this.maxBeat;
if (this.move) {
@@ -98,8 +144,20 @@ export default {
return [];
}
// If heartbeat days is configured (not auto), data is already aggregated from server
if (this.normalizedHeartbeatBarDays > 0 && this.beatList.length > 0) {
// Show all beats from server - they are already properly aggregated
return this.beatList;
}
// Original logic for auto mode (heartbeatBarDays = 0)
let placeholders = [];
// Handle case where maxBeat is -1 (no limit)
if (this.maxBeat <= 0) {
return this.beatList;
}
let start = this.beatList.length - this.maxBeat;
if (this.move) {
@@ -172,13 +230,17 @@ export default {
* @returns {string} The time elapsed in minutes or hours.
*/
timeSinceFirstBeat() {
if (this.normalizedHeartbeatBarDays === 1) {
return (this.normalizedHeartbeatBarDays * 24) + "h";
}
if (this.normalizedHeartbeatBarDays >= 2) {
return this.normalizedHeartbeatBarDays + "d";
}
// Need to calculate from actual data
const firstValidBeat = this.shortBeatList.at(this.numPadding);
const minutes = dayjs().diff(dayjs.utc(firstValidBeat?.time), "minutes");
if (minutes > 60) {
return (minutes / 60).toFixed(0) + "h";
} else {
return minutes + "m";
}
return minutes > 60 ? Math.floor(minutes / 60) + "h" : minutes + "m";
},
/**
@@ -197,15 +259,15 @@ export default {
if (seconds < tolerance) {
return this.$t("now");
} else if (seconds < 60 * 60) {
return this.$t("time ago", [ (seconds / 60).toFixed(0) + "m" ]);
return this.$t("time ago", [ (seconds / 60).toFixed(0) + "m" ] );
} else {
return this.$t("time ago", [ (seconds / 60 / 60).toFixed(0) + "h" ]);
return this.$t("time ago", [ (seconds / 60 / 60).toFixed(0) + "h" ] );
}
}
},
watch: {
beatList: {
handler(val, oldVal) {
handler() {
this.move = true;
setTimeout(() => {
@@ -217,6 +279,10 @@ export default {
},
unmounted() {
window.removeEventListener("resize", this.resize);
// Clean up tooltip timeout
if (this.tooltipTimeoutId) {
clearTimeout(this.tooltipTimeoutId);
}
},
beforeMount() {
if (this.heartbeatList === null) {
@@ -256,7 +322,23 @@ export default {
*/
resize() {
if (this.$refs.wrap) {
this.maxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatHoverAreaPadding * 2));
const newMaxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatHoverAreaPadding * 2));
// If maxBeat changed and we're in configured days mode, notify parent to reload data
if (newMaxBeat !== this.maxBeat && this.normalizedHeartbeatBarDays > 0) {
this.maxBeat = newMaxBeat;
// Find the closest parent with reloadHeartbeatData method (StatusPage)
let parent = this.$parent;
while (parent && !parent.reloadHeartbeatData) {
parent = parent.$parent;
}
if (parent && parent.reloadHeartbeatData) {
parent.reloadHeartbeatData(newMaxBeat);
}
} else {
this.maxBeat = newMaxBeat;
}
}
},
@@ -267,7 +349,124 @@ export default {
* @returns {string} Beat title
*/
getBeatTitle(beat) {
return `${this.$root.datetime(beat.time)}` + ((beat.msg) ? ` - ${beat.msg}` : "");
if (!beat) {
return "";
}
// Show timestamp for all beats (both individual and aggregated)
return `${this.$root.datetime(beat.time)}${beat.msg ? ` - ${beat.msg}` : ""}`;
},
/**
* Get CSS classes for a beat element based on its status
* @param {object} beat - Beat object containing status information
* @returns {object} Object with CSS class names as keys and boolean values
*/
getBeatClasses(beat) {
if (beat === 0 || beat === null || beat?.status === null) {
return { empty: true };
}
const status = Number(beat.status);
return {
down: status === DOWN,
pending: status === PENDING,
maintenance: status === MAINTENANCE
};
},
/**
* Get the aria-label for accessibility
* @param {object} beat Beat to get aria-label from
* @returns {string} Aria label
*/
getBeatAriaLabel(beat) {
switch (beat?.status) {
case DOWN:
return `Down at ${this.$root.datetime(beat.time)}`;
case UP:
return `Up at ${this.$root.datetime(beat.time)}`;
case PENDING:
return `Pending at ${this.$root.datetime(beat.time)}`;
case MAINTENANCE:
return `Maintenance at ${this.$root.datetime(beat.time)}`;
default:
return "No data";
}
},
/**
* Show custom tooltip
* @param {object} beat Beat data
* @param {Event} event Mouse event
* @returns {void}
*/
showTooltip(beat, event) {
if (beat === 0 || !beat) {
this.hideTooltip();
return;
}
// Clear any existing timeout
if (this.tooltipTimeoutId) {
clearTimeout(this.tooltipTimeoutId);
}
// Small delay for better UX
this.tooltipTimeoutId = setTimeout(() => {
this.tooltipContent = beat;
// Calculate position relative to viewport
const rect = event.target.getBoundingClientRect();
// Position relative to viewport
const x = rect.left + (rect.width / 2);
const y = rect.top;
// Check if tooltip would go off-screen and adjust position
const tooltipHeight = 80; // Approximate tooltip height
const viewportHeight = window.innerHeight;
const spaceAbove = y;
const spaceBelow = viewportHeight - y - rect.height;
if (spaceAbove > tooltipHeight && spaceBelow < tooltipHeight) {
// Show above - arrow points down
this.tooltipPosition = "above";
this.tooltipY = y - 10;
} else {
// Show below - arrow points up
this.tooltipPosition = "below";
this.tooltipY = y + rect.height + 10;
}
// Ensure tooltip doesn't go off the left or right edge
const tooltipWidth = 120; // Approximate tooltip width
let adjustedX = x;
if ((x - tooltipWidth / 2) < 10) {
adjustedX = tooltipWidth / 2 + 10;
} else if ((x + tooltipWidth / 2) > (window.innerWidth - 10)) {
adjustedX = window.innerWidth - tooltipWidth / 2 - 10;
}
this.tooltipX = adjustedX;
this.tooltipVisible = true;
}, 150);
},
/**
* Hide custom tooltip
* @returns {void}
*/
hideTooltip() {
if (this.tooltipTimeoutId) {
clearTimeout(this.tooltipTimeoutId);
this.tooltipTimeoutId = null;
}
this.tooltipVisible = false;
this.tooltipContent = null;
},
},

View File

@@ -182,7 +182,7 @@ export default {
// eslint-disable-next-line eqeqeq
if (newPeriod == "0") {
this.heartbeatList = null;
this.$root.storage().removeItem(`chart-period-${this.monitorId}`);
this.$root.storage()["chart-period"] = newPeriod;
} else {
this.loading = true;
@@ -199,7 +199,7 @@ export default {
this.$root.toastError(res.msg);
} else {
this.chartRawData = res.data;
this.$root.storage()[`chart-period-${this.monitorId}`] = newPeriod;
this.$root.storage()["chart-period"] = newPeriod;
}
this.loading = false;
});
@@ -216,7 +216,7 @@ export default {
},
created() {
// Load chart period from storage if saved
let period = this.$root.storage()[`chart-period-${this.monitorId}`];
let period = this.$root.storage()["chart-period"];
if (period != null) {
// Has this ever been not a string?
if (typeof period !== "string") {
@@ -224,7 +224,7 @@ export default {
}
this.chartPeriodHrs = period;
} else {
this.chartPeriodHrs = "24";
this.chartPeriodHrs = "0";
}
},
beforeUnmount() {

View File

@@ -174,6 +174,38 @@ export default {
this.modal.show();
},
/**
* Show dialog to clone a proxy
* @param {number} proxyID ID of proxy to clone
* @returns {void}
*/
showClone(proxyID) {
if (proxyID) {
for (let proxy of this.$root.proxyList) {
if (proxy.id === proxyID) {
// Create a clone of the proxy data
this.proxy = {
protocol: proxy.protocol,
host: proxy.host,
port: proxy.port,
auth: proxy.auth,
username: proxy.username,
password: proxy.password,
active: proxy.active,
default: false, // Cloned proxy should not be default
applyExisting: false,
};
break;
}
}
}
// Set id to null to indicate this is a new proxy (clone)
this.id = null;
this.modal.show();
},
/**
* Submit form data for saving
* @returns {void}

View File

@@ -4,7 +4,7 @@
<div v-if="selectedTags.length > 0" class="mb-2 p-1">
<tag
v-for="item in selectedTags"
:key="item.id"
:key="`${item.tag_id || item.id}-${item.value || ''}`"
:item="item"
:remove="deleteTag"
/>
@@ -20,10 +20,20 @@
<font-awesome-icon class="me-1" icon="plus" /> {{ $t("Add") }}
</button>
</div>
<div ref="modal" class="modal fade" tabindex="-1">
<div ref="modal" class="modal fade" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-body">
<h4 v-if="stagedForBatchAdd.length > 0">{{ $t("Add Tags") }}</h4>
<div v-if="stagedForBatchAdd.length > 0" class="mb-3 staging-area" style="max-height: 150px; overflow-y: auto;">
<Tag
v-for="stagedTag in stagedForBatchAdd"
:key="stagedTag.keyForList"
:item="mapStagedTagToDisplayItem(stagedTag)"
:remove="() => unstageTag(stagedTag)"
/>
</div>
<vue-multiselect
v-model="newDraftTag.select"
class="mb-2"
@@ -58,14 +68,11 @@
<div class="w-50 pe-2">
<input
v-model="newDraftTag.name" class="form-control"
:class="{'is-invalid': validateDraftTag.nameInvalid}"
:class="{'is-invalid': validateDraftTag.invalid && (validateDraftTag.messageKey === 'tagNameColorRequired' || validateDraftTag.messageKey === 'tagNameExists')}"
:placeholder="$t('Name')"
data-testid="tag-name-input"
@keydown.enter.prevent="onEnter"
/>
<div class="invalid-feedback">
{{ $t("Tag with this name already exist.") }}
</div>
</div>
<div class="w-50 ps-2">
<vue-multiselect
@@ -104,27 +111,24 @@
<div class="mb-2">
<input
v-model="newDraftTag.value" class="form-control"
:class="{'is-invalid': validateDraftTag.valueInvalid}"
:class="{'is-invalid': validateDraftTag.invalid && validateDraftTag.messageKey === 'tagAlreadyOnMonitor'}"
:placeholder="$t('value (optional)')"
data-testid="tag-value-input"
@keydown.enter.prevent="onEnter"
/>
<div class="invalid-feedback">
{{ $t("Tag with this value already exist.") }}
</div>
</div>
<div class="mb-2">
<button
type="button"
class="btn btn-secondary float-end"
:disabled="processing || validateDraftTag.invalid"
data-testid="tag-submit-button"
@click.stop="addDraftTag"
>
{{ $t("Add") }}
</button>
<div v-if="validateDraftTag.invalid && validateDraftTag.messageKey" class="form-text text-danger mb-2">
{{ $t(validateDraftTag.messageKey, validateDraftTag.messageParams) }}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click.stop="clearStagingAndCloseModal">{{ $t("Cancel") }}</button>
<button type="button" class="btn btn-outline-primary me-2" :disabled="processing || validateDraftTag.invalid" @click.stop="stageCurrentTag">
{{ $t("Add Another Tag") }}
</button>
<button type="button" class="btn btn-primary" :disabled="processing || (stagedForBatchAdd.length === 0 && validateDraftTag.invalid)" data-testid="add-tags-final-button" @click.stop="confirmAndCommitStagedTags">{{ $t("Done") }}</button>
</div>
</div>
</div>
</div>
@@ -176,71 +180,146 @@ export default {
newTags: [],
/** @type {Tag[]} */
deleteTags: [],
/**
* @type {Array<object>} Holds tag objects staged for addition.
* Each object: { name, color, value, isNewSystemTag, systemTagId, keyForList }
*/
stagedForBatchAdd: [],
newDraftTag: {
name: null,
select: null,
color: null,
value: "",
invalid: true,
nameInvalid: false,
},
};
},
computed: {
tagOptions() {
const tagOptions = this.existingTags;
const tagOptions = [ ...this.existingTags ]; // Create a copy
// Add tags from newTags
for (const tag of this.newTags) {
if (!tagOptions.find(t => t.name === tag.name && t.color === tag.color)) {
tagOptions.push(tag);
}
}
// Add newly created system tags from staging area
for (const stagedTag of this.stagedForBatchAdd) {
if (stagedTag.isNewSystemTag) {
// Check if this system tag is already in the options
if (!tagOptions.find(t => t.name === stagedTag.name && t.color === stagedTag.color)) {
// Create a tag option object for the dropdown
tagOptions.push({
id: null, // Will be assigned when actually created
name: stagedTag.name,
color: stagedTag.color
});
}
}
}
return tagOptions;
},
selectedTags() {
return this.preSelectedTags.concat(this.newTags).filter(tag => !this.deleteTags.find(monitorTag => monitorTag.tag_id === tag.tag_id));
// Helper function to normalize tag values for comparison
const normalizeValue = (value) => {
if (value === null || value === undefined) {
return "";
}
return String(value).trim();
};
// Helper function to get tag ID from different structures
const getTagId = (tag) => tag.tag_id || tag.id;
return this.preSelectedTags.concat(this.newTags).filter(tag =>
!this.deleteTags.find(monitorTag => {
const tagIdMatch = getTagId(monitorTag) === getTagId(tag);
const valueMatch = normalizeValue(monitorTag.value) === normalizeValue(tag.value);
return tagIdMatch && valueMatch;
})
);
},
/**
* @returns {boolean} True if more new system tags can be staged, false otherwise.
*/
canStageMoreNewSystemTags() {
return true; // Always allow adding more tags, no limit
},
/**
* Provides the color options for the tag color selector.
* @returns {Array<object>} Array of color options.
*/
colorOptions() {
return colorOptions(this);
},
/**
* Validates the current draft tag based on several conditions.
* @returns {{invalid: boolean, messageKey: string|null, messageParams: object|null}} Object indicating validity, and a message key/params if invalid.
*/
validateDraftTag() {
let nameInvalid = false;
let valueInvalid = false;
let invalid = true;
if (this.deleteTags.find(tag => tag.name === this.newDraftTag.select?.name && tag.value === this.newDraftTag.value)) {
// Undo removing a Tag
nameInvalid = false;
valueInvalid = false;
invalid = false;
} else if (this.existingTags.filter(tag => tag.name === this.newDraftTag.name).length > 0 && this.newDraftTag.select == null) {
// Try to create new tag with existing name
nameInvalid = true;
invalid = true;
} else if (this.newTags.concat(this.preSelectedTags).filter(tag => (
tag.name === this.newDraftTag.select?.name && tag.value === this.newDraftTag.value
) || (
tag.name === this.newDraftTag.name && tag.value === this.newDraftTag.value
)).length > 0) {
// Try to add a tag with existing name and value
valueInvalid = true;
invalid = true;
} else if (this.newDraftTag.select != null) {
// Select an existing tag, no need to validate
invalid = false;
valueInvalid = false;
} else if (this.newDraftTag.color == null || this.newDraftTag.name === "") {
// Missing form inputs
nameInvalid = false;
invalid = true;
} else {
// Looks valid
invalid = false;
nameInvalid = false;
valueInvalid = false;
// If defining a new system tag (newDraftTag.select == null)
if (this.newDraftTag.select == null) {
if (!this.newDraftTag.name || this.newDraftTag.name.trim() === "" || !this.newDraftTag.color) {
// Keep button disabled, but don't show the explicit message for this case
return {
invalid: true,
messageKey: null,
messageParams: null,
};
}
if (this.tagOptions.find(opt => opt.name.toLowerCase() === this.newDraftTag.name.trim().toLowerCase())) {
return {
invalid: true,
messageKey: "tagNameExists",
messageParams: null,
};
}
}
// For any tag definition (new or existing system tag + value)
const draftTagName = this.newDraftTag.select ? this.newDraftTag.select.name : this.newDraftTag.name.trim();
const draftTagValue = this.newDraftTag.value ? this.newDraftTag.value.trim() : ""; // Treat null/undefined value as empty string for comparison
// Check if (name + value) combination already exists in this.stagedForBatchAdd
if (this.stagedForBatchAdd.find(staged => staged.name === draftTagName && staged.value === draftTagValue)) {
return {
invalid: true,
messageKey: "tagAlreadyStaged",
messageParams: null,
};
}
// Check if (name + value) combination already exists in this.selectedTags (final list on monitor)
// AND it's NOT an "undo delete"
const isUndoDelete = this.deleteTags.find(dTag =>
dTag.tag_id === (this.newDraftTag.select ? this.newDraftTag.select.id : null) &&
dTag.value === draftTagValue
);
if (!isUndoDelete && this.selectedTags.find(sTag => sTag.name === draftTagName && sTag.value === draftTagValue)) {
return {
invalid: true,
messageKey: "tagAlreadyOnMonitor",
messageParams: null,
};
}
// If an existing tag is selected at this point, it has passed all relevant checks
if (this.newDraftTag.select != null) {
return {
invalid: false,
messageKey: null,
messageParams: null,
};
}
// If it's a new tag definition, and it passed its specific checks, it's valid.
// (This also serves as a final default to valid if other logic paths were missed, though ideally covered above)
return {
invalid,
nameInvalid,
valueInvalid,
invalid: false,
messageKey: null,
messageParams: null,
};
},
},
@@ -257,6 +336,9 @@ export default {
* @returns {void}
*/
showAddDialog() {
this.stagedForBatchAdd = [];
this.clearDraftTag();
this.getExistingTags();
this.modal.show();
},
/**
@@ -300,37 +382,6 @@ export default {
return this.$root.theme === "light" ? "var(--bs-body-color)" : "inherit";
}
},
/**
* Add a draft tag
* @returns {void}
*/
addDraftTag() {
console.log("Adding Draft Tag: ", this.newDraftTag);
if (this.newDraftTag.select != null) {
if (this.deleteTags.find(tag => tag.name === this.newDraftTag.select.name && tag.value === this.newDraftTag.value)) {
// Undo removing a tag
this.deleteTags = this.deleteTags.filter(tag => !(tag.name === this.newDraftTag.select.name && tag.value === this.newDraftTag.value));
} else {
// Add an existing Tag
this.newTags.push({
id: this.newDraftTag.select.id,
color: this.newDraftTag.select.color,
name: this.newDraftTag.select.name,
value: this.newDraftTag.value,
new: true,
});
}
} else {
// Add new Tag
this.newTags.push({
color: this.newDraftTag.color.color,
name: this.newDraftTag.name.trim(),
value: this.newDraftTag.value,
new: true,
});
}
this.clearDraftTag();
},
/**
* Remove a draft tag
* @returns {void}
@@ -341,10 +392,8 @@ export default {
select: null,
color: null,
value: "",
invalid: true,
nameInvalid: false,
// invalid: true, // Initial validation will be handled by computed prop
};
this.modal.hide();
},
/**
* Add a tag asynchronously
@@ -386,7 +435,7 @@ export default {
*/
onEnter() {
if (!this.validateDraftTag.invalid) {
this.addDraftTag();
this.stageCurrentTag();
}
},
/**
@@ -475,7 +524,119 @@ export default {
console.warn("Modal hide failed:", e);
}
}
}
this.stagedForBatchAdd = [];
},
/**
* Stages the current draft tag for batch addition.
* @returns {void}
*/
stageCurrentTag() {
if (this.validateDraftTag.invalid) {
return;
}
const isNew = this.newDraftTag.select == null;
const name = isNew ? this.newDraftTag.name.trim() : this.newDraftTag.select.name;
const color = isNew ? this.newDraftTag.color.color : this.newDraftTag.select.color;
const value = this.newDraftTag.value ? this.newDraftTag.value.trim() : "";
const stagedTagObject = {
name: name,
color: color,
value: value,
isNewSystemTag: isNew,
systemTagId: isNew ? null : this.newDraftTag.select.id,
keyForList: `staged-${Date.now()}-${Math.random().toString(36).substring(2, 15)}` // Unique key
};
this.stagedForBatchAdd.push(stagedTagObject);
this.clearDraftTag(); // Reset input fields for the next tag
},
/**
* Removes a tag from the staged list.
* @param {object} tagToUnstage The tag object to remove from staging.
* @returns {void}
*/
unstageTag(tagToUnstage) {
this.stagedForBatchAdd = this.stagedForBatchAdd.filter(tag => tag.keyForList !== tagToUnstage.keyForList);
},
/**
* Maps a staged tag object to the structure expected by the Tag component.
* @param {object} stagedTag The staged tag object.
* @returns {object} Object with name, color, value for the Tag component.
*/
mapStagedTagToDisplayItem(stagedTag) {
return {
name: stagedTag.name,
color: stagedTag.color,
value: stagedTag.value,
// id: stagedTag.keyForList, // Pass keyForList as id for the Tag component if it expects an id for display/keying internally beyond v-for key
};
},
/**
* Clears the staging list, draft inputs, and closes the modal.
* @returns {void}
*/
clearStagingAndCloseModal() {
this.stagedForBatchAdd = [];
this.clearDraftTag(); // Clears input fields
this.modal.hide();
},
/**
* Processes all staged tags, adds them to the monitor, and closes the modal.
* @returns {void}
*/
confirmAndCommitStagedTags() {
// Phase 1: If there's a currently valid newDraftTag that hasn't been staged yet,
// (e.g. user typed a full tag and directly clicked the footer "Add"), then stage it now.
// stageCurrentTag has its own check for validateDraftTag.invalid and will clear the draft.
if (!this.validateDraftTag.invalid) {
// Check if newDraftTag actually has content, to avoid staging an empty cleared draft.
// A valid draft implies it has content, but double-checking select or name is safer.
if (this.newDraftTag.select || (this.newDraftTag.name && this.newDraftTag.color)) {
this.stageCurrentTag();
}
}
// Phase 2: Process everything that is now in stagedForBatchAdd.
if (this.stagedForBatchAdd.length === 0) {
this.clearDraftTag(); // Ensure draft is clear even if nothing was committed
this.modal.hide();
return;
}
for (const sTag of this.stagedForBatchAdd) {
let isAnUndo = false; // Flag to track if this was an undo
// Check if it's an "undo delete"
if (sTag.systemTagId) { // Only existing system tags can be an undo delete
const undoDeleteIndex = this.deleteTags.findIndex(
dTag => dTag.tag_id === sTag.systemTagId && dTag.value === sTag.value
);
if (undoDeleteIndex > -1) {
this.deleteTags.splice(undoDeleteIndex, 1);
isAnUndo = true;
}
}
// Only add to newTags if it's not an "undo delete" operation.
// An "undo delete" means the tag is now considered active again from its previous state.
if (!isAnUndo) {
const tagObjectForNewTags = {
id: sTag.systemTagId, // This will be null for brand new system tags
color: sTag.color,
name: sTag.name,
value: sTag.value,
new: true, // As per plan, signals new to this monitor transaction
};
this.newTags.push(tagObjectForNewTags);
}
}
// newDraftTag should have been cleared if stageCurrentTag ran in Phase 1, or earlier.
// Call clearDraftTag again to be certain the form is reset before closing.
this.clearDraftTag();
this.modal.hide();
},
},
};
</script>

276
src/components/Tooltip.vue Normal file
View File

@@ -0,0 +1,276 @@
<template>
<teleport to="body">
<div
v-if="content"
ref="tooltip"
class="tooltip-wrapper"
:style="tooltipStyle"
:class="{ 'tooltip-above': position === 'above' }"
>
<div class="tooltip-content">
<slot :content="content">
<!-- Default content if no slot provided -->
<div class="tooltip-status" :class="statusClass">
{{ statusText }}
</div>
<div class="tooltip-time">{{ timeText }}</div>
<div v-if="content?.msg" class="tooltip-message">{{ content.msg }}</div>
</slot>
</div>
<div class="tooltip-arrow" :class="{ 'arrow-above': position === 'above' }"></div>
</div>
</teleport>
</template>
<script>
import { DOWN, UP, PENDING, MAINTENANCE } from "../util.ts";
export default {
name: "Tooltip",
props: {
/** Whether tooltip is visible */
visible: {
type: Boolean,
default: false
},
/** Content object to display */
content: {
type: Object,
default: null
},
/** X position (viewport coordinates) */
x: {
type: Number,
default: 0
},
/** Y position (viewport coordinates) */
y: {
type: Number,
default: 0
},
/** Position relative to target element */
position: {
type: String,
default: "below",
validator: (value) => [ "above", "below" ].includes(value)
}
},
computed: {
tooltipStyle() {
return {
left: this.x + "px",
top: this.y + "px",
};
},
statusText() {
if (!this.content || this.content === 0) {
return this.$t("Unknown");
}
switch (this.content.status) {
case DOWN:
return this.$t("Down");
case UP:
return this.$t("Up");
case PENDING:
return this.$t("Pending");
case MAINTENANCE:
return this.$t("Maintenance");
default:
return this.$t("Unknown");
}
},
statusClass() {
if (!this.content || this.content === 0) {
return "status-empty";
}
switch (this.content.status) {
case DOWN:
return "status-down";
case UP:
return "status-up";
case PENDING:
return "status-pending";
case MAINTENANCE:
return "status-maintenance";
default:
return "status-unknown";
}
},
timeText() {
if (!this.content || this.content === 0) {
return "";
}
return this.$root.datetime(this.content.time);
},
}
};
</script>
<style lang="scss" scoped>
@import "../assets/vars.scss";
.tooltip-wrapper {
position: fixed;
z-index: 9999;
pointer-events: none;
transform: translateX(-50%);
.tooltip-content {
background: rgba(17, 24, 39, 0.95);
backdrop-filter: blur(8px);
border: 1px solid rgba(75, 85, 99, 0.3);
border-radius: 8px;
padding: 8px 12px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.25);
min-width: 120px;
text-align: center;
position: relative;
&::before {
content: "";
position: absolute;
left: 50%;
transform: translateX(-50%);
width: 14px;
height: 2px;
background: rgba(17, 24, 39, 0.95);
top: -1px;
}
.tooltip-status {
font-size: 16px;
font-weight: 600;
margin-bottom: 4px;
text-transform: uppercase;
letter-spacing: 0.5px;
&.status-up {
color: $primary;
}
&.status-down {
color: $danger;
}
&.status-pending {
color: $warning;
}
&.status-maintenance {
color: $maintenance;
}
&.status-empty {
color: $secondary-text;
}
}
.tooltip-time {
color: #d1d5db;
font-size: 13px;
margin-bottom: 2px;
}
.tooltip-message {
color: #f3f4f6;
font-size: 12px;
margin-top: 4px;
padding-top: 4px;
border-top: 1px solid rgba(75, 85, 99, 0.3);
}
}
.tooltip-arrow {
position: absolute;
left: 50%;
transform: translateX(-50%);
width: 12px;
height: 6px;
overflow: hidden;
top: -6px;
&::before {
content: "";
position: absolute;
left: 50%;
top: 100%;
transform: translateX(-50%) translateY(-50%) rotate(45deg);
width: 8px;
height: 8px;
background: rgba(17, 24, 39, 0.95);
border: 1px solid rgba(75, 85, 99, 0.3);
border-bottom: none;
border-right: none;
}
&.arrow-above {
top: auto;
bottom: -6px;
&::before {
top: 0%;
transform: translateX(-50%) translateY(-50%) rotate(225deg);
border: 1px solid rgba(75, 85, 99, 0.3);
border-bottom: none;
border-right: none;
}
}
}
// Smooth entrance animation
animation: tooltip-fade-in 0.2s $easing-out;
&.tooltip-above {
transform: translateX(-50%) translateY(-8px);
.tooltip-content::before {
top: auto;
bottom: -1px;
}
}
}
// Dark theme adjustments
.dark .tooltip-wrapper {
.tooltip-content {
background: rgba(31, 41, 55, 0.95);
border-color: rgba(107, 114, 128, 0.3);
&::before {
background: rgba(31, 41, 55, 0.95);
}
}
.tooltip-arrow {
&::before {
background: rgba(31, 41, 55, 0.95);
border-color: rgba(107, 114, 128, 0.3);
}
}
}
@keyframes tooltip-fade-in {
from {
opacity: 0;
transform: translateX(-50%) translateY(4px);
}
to {
opacity: 1;
transform: translateX(-50%) translateY(0);
}
}
// Accessibility improvements
@media (prefers-reduced-motion: reduce) {
.tooltip-wrapper {
animation: none !important;
}
}
</style>

View File

@@ -10,4 +10,40 @@
</i18n-t>
</div>
</div>
<div class="mb-3">
<div class="form-check form-switch">
<input id="google-chat-use-template" v-model="$parent.notification.googleChatUseTemplate" type="checkbox" class="form-check-input">
<label for="google-chat-use-template" class="form-check-label"> {{ $t("Template plain text instead of using cards") }} </label>
<i18n-t tag="p" class="form-text" keypath="issueWithGoogleChatOnAndroidHelptext">
<template #issuetackerURL>
<a href="https://issuetracker.google.com/issues/283746283" target="_blank">issuetracker.google.com/issues/283746283</a>
</template>
</i18n-t>
</div>
</div>
<template v-if="$parent.notification.googleChatUseTemplate">
<div class="mb-3">
<TemplatedTextarea id="google-chat-template" v-model="$parent.notification.googleChatTemplate" :required="true" :placeholder="googleChatTemplatePlaceholder" />
</div>
</template>
</template>
<script>
import TemplatedTextarea from "../TemplatedTextarea.vue";
export default {
name: "GoogleChat",
components: {
TemplatedTextarea,
},
computed: {
googleChatTemplatePlaceholder() {
return this.$t("Example:", [
"{{ name }} - {{ msg }}{% if hostnameOrURL %} ({{ hostnameOrURL }}){% endif %}"
]);
}
},
};
</script>

View File

@@ -18,7 +18,7 @@
{{ $t("matrixDesc1") }}
</p>
<i18n-t tag="p" keypath="matrixDesc2" style="margin-top: 8px;">
<code>curl -XPOST -d '{"type": "m.login.password", "identifier": {"user": "botusername", "type": "m.id.user"}, "password": "passwordforuser"}' "https://home.server/_matrix/client/v3/login"</code>.
<code>curl -XPOST --json '{"type": "m.login.password", "identifier": {"user": "botusername", "type": "m.id.user"}, "password": "passwordforuser"}' "https://home.server/_matrix/client/v3/login"</code>.
</i18n-t>
</div>
</template>

View File

@@ -13,13 +13,20 @@
<div class="mb-3">
<label for="ntfy-priority" class="form-label">{{ $t("Priority") }}</label>
<input id="ntfy-priority" v-model="$parent.notification.ntfyPriority" type="number" class="form-control" required min="1" max="5" step="1">
<label for="ntfy-priority-down" class="form-label">{{ $t("ntfyPriorityDown") }}</label>
<input id="ntfy-priority-down" v-model="$parent.notification.ntfyPriorityDown" type="number" class="form-control" required min="1" max="5" step="1">
<div class="form-text">
<p v-if="$parent.notification.ntfyPriority >= 5">
<p v-if="$parent.notification.ntfyPriority == $parent.notification.ntfyPriorityDown && $parent.notification.ntfyPriority >= 5">
{{ $t("ntfyPriorityHelptextAllEvents") }}
</p>
<i18n-t v-else-if="$parent.notification.ntfyPriority > $parent.notification.ntfyPriorityDown" tag="p" keypath="ntfyPriorityHelptextPriorityHigherThanDown">
<code>DOWN</code>
<code>{{ $parent.notification.ntfyPriority }}</code>
<code>{{ $parent.notification.ntfyPriorityDown }}</code>
</i18n-t>
<i18n-t v-else tag="p" keypath="ntfyPriorityHelptextAllExceptDown">
<code>DOWN</code>
<code>{{ $parent.notification.ntfyPriority + 1 }}</code>
<code>{{ $parent.notification.ntfyPriorityDown }}</code>
</i18n-t>
</div>
</div>
@@ -69,6 +76,11 @@ export default {
this.$parent.notification.ntfyPriority = 5;
}
// Setting down priority if it's undefined
if (typeof this.$parent.notification.ntfyPriorityDown === "undefined") {
this.$parent.notification.ntfyPriorityDown = 5;
}
// Handling notifications that added before 1.22.0
if (typeof this.$parent.notification.ntfyAuthenticationMethod === "undefined") {
if (!this.$parent.notification.ntfyusername) {

View File

@@ -13,7 +13,8 @@
<li v-for="(proxy, index) in $root.proxyList" :key="index" class="list-group-item">
{{ proxy.host }}:{{ proxy.port }} ({{ proxy.protocol }})
<span v-if="proxy.default === true" class="badge bg-primary ms-2">{{ $t("Default") }}</span><br>
<a href="#" @click="$refs.proxyDialog.show(proxy.id)">{{ $t("Edit") }}</a>
<a href="#" @click="$refs.proxyDialog.show(proxy.id)">{{ $t("Edit") }}</a> |
<a href="#" @click="$refs.proxyDialog.showClone(proxy.id)">{{ $t("Clone") }}</a>
</li>
</ul>

View File

@@ -47,6 +47,7 @@ const languageList = {
"ge": "ქართული",
"uz": "O'zbek tili",
"ga": "Gaeilge",
"sk": "Slovenčina",
};
let messages = {
@@ -75,11 +76,20 @@ export function currentLocale() {
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;
// If the locale is a 2-letter code, we can try to find a regional variant
// e.g. "fr" may not be in the messages, but "fr-FR" is
if (locale.length === 2) {
const regionalLocale = `${locale}-${locale.toUpperCase()}`;
if (regionalLocale in messages) {
return regionalLocale;
}
} else {
// 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.slice(0, 2);
if (genericLocale in messages) {
return genericLocale;
}
}
}
return "en";

3
src/lang/ang.json Normal file
View File

@@ -0,0 +1,3 @@
{
"languageName": "RTSP Username"
}

View File

@@ -145,7 +145,7 @@
"Save": "يحفظ",
"Notifications": "إشعارات",
"Not available, please setup.": "غير متوفر من فضلك الإعداد.",
"Setup Notification": "إشعار الإعداد",
"Setup Notification": "إشعار جديد",
"Light": "نور",
"Dark": "داكن",
"Auto": "آلي",
@@ -598,7 +598,7 @@
"Retry": "إعادة المحاولة",
"Topic": "عنوان",
"WeCom Bot Key": "WECOM BOT KEY",
"Setup Proxy": "وكيل الإعداد",
"Setup Proxy": "إعداد الوكيل",
"Proxy Protocol": "بروتوكول الوكيل",
"Proxy Server": "مخدم بروكسي",
"Proxy server has authentication": "خادم الوكيل لديه مصادقة",
@@ -740,5 +740,26 @@
"leave blank for default body": "اترك فارغاً ليتم تعيين النص تلقائياً",
"emailTemplateServiceName": "اسم الخدمة",
"emailTemplateHostnameOrURL": "اسم المضيف أو عنوان URL",
"smspartnerPhoneNumber": "رقم الهاتف"
"smspartnerPhoneNumber": "رقم الهاتف",
"endDateTime": "تاريخ/وقت الإنتهاء",
"chromeExecutableAutoDetect": "كشف تلقائي",
"Edit Maintenance": "تعديل الصيانة",
"smspartnerSenderName": "اسم مرسل الرسائل القصيرة",
"telegramServerUrl": "(اختياري) رابط الخادم",
"emailCustomisableContent": "محتوى قابل للتخصيص",
"emailTemplateMsg": "رسالة الإشعار",
"Select message type": "اختر نوع الرسالة",
"Your User ID": "معرف المستخدم الخاص بك",
"setup a new monitor group": "إنشاء مجموعة مراقبة جديدة",
"Expires": "تاريخ الانتهاء",
"templateStatus": "الحالة",
"telegramUseTemplate": "استخدم قالب رسالة مخصص",
"telegramUseTemplateDescription": "إذا تم التفعيل، سيتم إرسال الرسالة باستخدام قالب مخصص.",
"now": "الآن",
"-year": "-سنة",
"and": "و",
"Add a domain": "إضافة نطاق",
"Remove domain": "إزالة النطاق '{0}'",
"time ago": "منذ {0}",
"startDateTime": "تاريخ/وقت البدء"
}

View File

@@ -933,5 +933,43 @@
"threadForumPostID": "Трэд / ID паста",
"whatHappensAtForumPost": "Стварыць новы пост на форуме. Гэта НЕ размяшчае паведамленні ў існуючым пасце. Для публікацыі ў існуючай публікацыі выкарыстоўвайце \"{option}\"",
"now": "зараз",
"-year": "-год"
"-year": "-год",
"telegramServerUrl": "(Неабавязкова) URL сервера",
"telegramServerUrlDescription": "Каб зняць абмежаванні API бота Telegram або атрымаць доступ у заблакіраваных рэгіёнах (Кітай, Іран і інш.), націсніце {0} для атрымання дадатковай інфармацыі. Значэнне па змаўчанні: {1}",
"smspartnerPhoneNumber": "Нумар(ы) тэлефона",
"smspartnerSenderName": "Імя адпраўніка SMS",
"Command": "Каманда",
"mongodbCommandDescription": "Выканаць каманду MongoDB для базы даных. Інфармацыю пра даступныя каманды можна знайсці ў {documentation}",
"Community String": "Радок супольнасці",
"snmpCommunityStringHelptext": "Гэты радок выконвае функцыю пароля для аўтэнтыфікацыі і кантролю доступу да прылад з падтрымкай SNMP. Павінен адпавядаць канфігурацыі вашай SNMP-прылады.",
"OID (Object Identifier)": "OID (Ідэнтыфікатар аб’екта)",
"snmpOIDHelptext": "Увядзіце OID для датчыка або статусу, які вы хочаце маніторыць. Выкарыстоўвайце інструменты кіравання сеткай, такія як аглядальнікі MIB або праграмы SNMP, калі вы не ўпэўнены ў патрэбным OID.",
"SNMP Version": "Версія SNMP",
"Please enter a valid OID.": "Калі ласка, увядзіце карэктны OID.",
"wayToGetThreemaGateway": "Вы можаце зарэгістравацца для Threema Gateway {0}.",
"threemaRecipient": "Атрымальнік",
"templateServiceName": "назва сэрвісу",
"templateHostnameOrURL": "імя хоста або URL",
"templateStatus": "статус",
"telegramUseTemplate": "Выкарыстоўваць уласны шаблон паведамлення",
"telegramUseTemplateDescription": "Калі ўключана, паведамленне будзе адпраўлена з выкарыстаннем уласнага шаблона.",
"telegramTemplateFormatDescription": "Telegram дазваляе выкарыстоўваць розныя мовы разметкі для паведамленняў, падрабязнасці глядзіце ў Telegram {0}.",
"cacheBusterParamDescription": "Выпадкова згенераваны параметр для абыходу кэша.",
"Send rich messages": "Адправіць пашыраныя паведамленні",
"Bitrix24 Webhook URL": "URL вэбхука Bitrix24",
"wayToGetBitrix24Webhook": "Вы можаце стварыць вэбхук, выканаўшы крокі, апісаныя тут: {0}",
"bitrix24SupportUserID": "Увядзіце свой ідэнтыфікатар карыстальніка ў Bitrix24. Вы можаце даведацца ідэнтыфікатар па спасылцы, перайшоўшы ў профіль карыстальніка.",
"Condition": "Умова",
"aboutSlackUsername": "Змяняе адлюстраванае імя адпраўніка паведамлення. Калі вы хочаце згадваць кагосьці, уключыце гэта ў сяброўскае імя замест гэтага.",
"time ago": "{0} таму",
"Json Query Expression": "Выраз запыту JSON",
"and": "i",
"smspartnerApiurl": "Вы можаце знайсці свой ключ API на панэлі кіравання па адрасе {0}",
"smspartnerSenderNameInfo": "Павінна быць ад 3 да 11 звычайных сімвалаў",
"Message format": "Фармат паведамлення",
"ignoredTLSError": "Памылкі TLS/SSL былі праігнараваныя",
"shrinkDatabaseDescriptionSqlite": "Запусціць аперацыю {vacuum} для SQLite. {auto_vacuum} ужо ўключаны, але ён не дэфрагментуе базу даных і не перапакоўвае асобныя старонкі базы даных так, як гэта робіць каманда {vacuum}.",
"wayToGetDiscordThreadId": "Атрыманне ідэнтыфікатара тэмы або паведамлення на форуме аналагічнае атрыманню ідэнтыфікатара канала. Падрабязней пра тое, як атрымаць ідэнтыфікатары, чытайце тут {0}",
"smspartnerPhoneNumberHelptext": "Нумар павінен быць у міжнародным фармаце {0}, {1}. Некалькі нумароў павінны быць падзелены {2}",
"cacheBusterParam": "Дадайце параметр {0}"
}

View File

@@ -640,8 +640,8 @@
"smseagleRecipient": "Получател(и) (при повече от един разделете със запетая)",
"smseagleToken": "API токен за достъп",
"smseagleUrl": "Вашият SMSEagle URL на устройството",
"smseagleEncoding": "Изпрати като Unicode",
"smseaglePriority": "Приоритет на съобщението (0-9, по подразбиране = 0)",
"smseagleEncoding": "Изпрати като Unicode (по подразбиране=GSM-7)",
"smseaglePriority": "Приоритет на съобщението (0-9, най-висок приоритет = 9)",
"IconUrl": "Икона URL адрес",
"webhookAdditionalHeadersTitle": "Допълнителни хедъри",
"webhookAdditionalHeadersDesc": "Задава допълнителни хедъри, изпратени с уеб куката. Всеки хедър трябва да бъде дефиниран като JSON ключ/стойност.",
@@ -828,7 +828,7 @@
"noOrBadCertificate": "Няма/лош сертификат",
"Select": "Избери",
"selectedMonitorCount": "Избрано: {0}",
"wayToGetFlashDutyKey": "Можете да отидете на страница 'Channel -> (Select a Channel) -> Integrations -> Add a new integration' и да добавите 'UptimeKuma', за да получите 'push' адрес и да копирате ключа за интегриране в адреса. За повече информация, моля посетете",
"wayToGetFlashDutyKey": "За да интегрирате Uptime Kuma с Flashduty: Отидете на Канали > Изберете канал > Интеграции > Добавяне на нова интеграция, изберете Uptime Kuma и копирайте Push URL адреса.",
"PushDeer Server": "PushDeer сървър",
"pushDeerServerDescription": "Оставете празно, за да използвате официалния сървър",
"Check/Uncheck": "Постави/Премахни отметка",
@@ -1118,5 +1118,74 @@
"wayToGetWahaSession": "От тази сесия WAHA изпраща известия до чат ID. Можете да го намерите в таблото за управление на WAHA.",
"telegramServerUrlDescription": "За премахване на API бот ограниченията за Telegram или за получаване на достъп в блокирани зони (Китай, Иран и др.). За повече информация щракнете върху {0}. По подразбиране: {1}",
"telegramServerUrl": "(По избор) URL адрес на сървъра",
"Font Twemoji by Twitter licensed under": "Шрифт Twemoji от Twitter, лицензиран под"
"Font Twemoji by Twitter licensed under": "Шрифт Twemoji от Twitter, лицензиран под",
"the smsplanet documentation": "документацията на smsplanet",
"Phone numbers": "Телефонни номера",
"Sender name": "Име на подател",
"smsplanetNeedToApproveName": "Трябва да бъде одобрен в клиентския панел",
"smsplanetApiToken": "Токен код за SMSPlanet API",
"smsplanetApiDocs": "Подробна информация, за получаване на API токен кодове, можете да намерите в {the_smsplanet_documentation}.",
"defaultFriendlyName": "Нов монитор",
"Use HTML for custom E-mail body": "Използвайте HTML за персонализирано тяло на имейл",
"smseagleGroupV2": "ID(та) на група от телефонния указател",
"smseagleContactV2": "ID(та) на контакти в телефонния указател",
"smseagleMsgTts": "Обаждане чрез Гласово синтезиран текст",
"smseagleTtsModel": "ID на модел за Гласово синтезиран текст",
"smseagleApiv2": "APIv2 (препоръчва се за нови интеграции)",
"SpugPush Template Code": "Код на шаблона",
"FlashDuty Push URL": "Push URL адрес",
"FlashDuty Push URL Placeholder": "Копирай от страницата за интегриране на предупреждения",
"pingCountLabel": "Максимален брой пакети",
"pingCountDescription": "Брой пакети за изпращане преди спиране",
"pingPerRequestTimeoutDescription": "Това е максималното време на изчакване (в секунди), преди да се приеме, че един пинг пакет е загубен",
"pingGlobalTimeoutDescription": "Общото време в секунди преди пинга да спре, независимо от изпратените пакети",
"pingIntervalAdjustedInfo": "Интервалът е коригиран въз основа на броя на пакетите, глобалното време за изчакване и времето за изчакване на пинг",
"smtpHelpText": "'SMTPS' тества дали SMTP/TLS работи; 'Игнорирай TLS' се свързва използвайки обикновен текст; 'STARTTLS' се свързва, като издава команда STARTTLS и проверява сертификата на сървъра. Нито един от тях не изпраща имейл.",
"smseagleMsgType": "Тип съобщение",
"smseagleMsgSms": "SMS съобщение (по подразбиране)",
"smseagleMsgRing": "Прозвъняване",
"smseagleMsgTtsAdvanced": "Разширено повикване чрез Гласово синтезиран текст",
"smseagleDuration": "Времетраене (в секунди)",
"smseagleApiType": "Версия на API",
"smseagleApiv1": "APIv1 (за съществуващи проекти и обратна съвместимост)",
"smseagleDocs": "Проверете документацията или наличността на APIv2: {0}",
"smseagleComma": "При няколко, трябва да бъдат разделени със запетая",
"pingNumericLabel": "Числен изход",
"pingNumericDescription": "Ако е отбелязано, ще се извеждат IP адреси вместо символни имена на хостове",
"pingGlobalTimeoutLabel": "Глобално време за изчакване",
"pingPerRequestTimeoutLabel": "Време за изчакване на пинг",
"Custom URL": "Персонализиран URL адрес",
"customUrlDescription": "Ще се използва като URL адрес, върху който може да се кликне, вместо този на монитора.",
"OneChatAccessToken": "Токен код за достъп до OneChat",
"OneChatUserIdOrGroupId": "OneChat ID на потребител или ID на група",
"OneChatBotId": "Бот ID на OneChat",
"Disable URL in Notification": "Деактивиране на URL адрес в известие",
"ntfyPriorityHelptextPriorityHigherThanDown": "Нормалният приоритет трябва да е по-висок от приоритета {0}. Приоритет {1} е по-висок от приоритета {2} на {0}",
"ntfyPriorityDown": "Приоритет за събития от тип Недостъпен",
"tagAlreadyOnMonitor": "Този етикет (име и стойност) вече е на монитора или чака добавяне.",
"tagNameExists": "Вече съществува системен етикет с това име. Изберете го от списъка или използвайте друго име.",
"Add Another Tag": "Добави друг етикет",
"Add Tags": "Добави етикети",
"tagAlreadyStaged": "Този етикет (име и стойност) вече е подготвен за тази група.",
"Staged Tags for Batch Add": "Подготвени етикети за групово добавяне",
"Clear Form": "Изчисти формата",
"pause": "Пауза",
"Happy Eyeballs algorithm": "Алгоритъм \"Happy Eyeballs\"",
"Ip Family": "IP Семейство",
"ipFamilyDescriptionAutoSelect": "Използва {happyEyeballs} за определяне на IP семейството.",
"Manual": "Ръковосдство",
"OAuth Audience": "OAuth аудитория",
"Optional: The audience to request the JWT for": "По желание: Аудиторията, за която да се поиска JWT",
"mqttWebSocketPath": "MQTT Уеб сокет път",
"mqttWebsocketPathInvalid": "Моля, използвайте валиден формат на пътя за Уеб сокет",
"Path": "Път",
"mqttWebsocketPathExplanation": "Уеб сокет път за MQTT през Уеб сокет връзки (напр. /mqtt)",
"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

@@ -400,8 +400,8 @@
"smseagleRecipient": "Příjemce(i) (více záznamů oddělte čárkou)",
"smseagleToken": "API přístupový token",
"smseagleUrl": "URL vašeho SMSEagle zařízení",
"smseagleEncoding": "Odeslat v Unicode",
"smseaglePriority": "Priorita zprávy (0-9, výchozí = 0)",
"smseagleEncoding": "Odeslat v Unicode (standardně=GSM-7)",
"smseaglePriority": "Priorita zprávy (0-9, nejvyšší priorita = 9)",
"stackfield": "Stackfield",
"Customize": "Přizpůsobit",
"Custom Footer": "Vlastní patička",
@@ -828,10 +828,10 @@
"showCertificateExpiry": "Zobrazit vypršení platnosti certifikátu",
"pushDeerServerDescription": "Chcete-li používat oficiální server, ponechte prázdné",
"noOrBadCertificate": "Žádný/Vadný certifikát",
"nostrRelays": "Relé Nostr",
"nostrRelays": "Nostr relay",
"FlashDuty Severity": "Závažnost",
"PushDeer Server": "Server PushDeer",
"wayToGetFlashDutyKey": "Můžete přejít na stránku \"Kanál -> (Vyberte kanál) -> Integrace -> Přidat novou integraci\", přidat \"Uptime Kuma\" a získat push adresu, zkopírovat integrační klíč v adrese. Další informace naleznete na adrese",
"wayToGetFlashDutyKey": "Pro integrování Uptime Kuma s Flashduty: přejděte do sekce Kanály > Vyberte kanál > Integrace > Přidat novou integraci\", vyberte možnost Uptime Kuma a zkopírujte Push adresu.",
"Request Timeout": "Časový limit požadavku",
"timeoutAfter": "Vypršení časového limitu po {0} sekundách",
"styleElapsedTime": "Čas uplynulý pod heartbeat ukazatelem",
@@ -1091,5 +1091,89 @@
"rabbitmqHelpText": "Abyste mohli používat tento monitor, musíte v nastavení RabbitMQ povolit modul pro správu. Další informace naleznete na adrese {rabitmq_documentation}.",
"SendGrid API Key": "SendGrid API klíč",
"Separate multiple email addresses with commas": "Více e-mailových adres oddělte čárkami",
"Clear": "Odstranění"
"Clear": "Odstranění",
"Ip Family": "Rodina IP protokolů",
"ipFamilyDescriptionAutoSelect": "Pro určení rodiny IP protokolů se využívá {happyEyeballs}.",
"Clear Form": "Vymazat formulář",
"Happy Eyeballs algorithm": "Happy Eyeballs algoritmus",
"pause": "Pauza",
"Manual": "Ručně",
"Plain Text": "Prostý text",
"pingGlobalTimeoutLabel": "Globální časový limit",
"pingGlobalTimeoutDescription": "Celková doba v sekundách před zastavením pingu, bez ohledu na počet odeslaných paketů",
"pingPerRequestTimeoutLabel": "Časový limit pingu",
"pingIntervalAdjustedInfo": "Interval upravený na základě počtu paketů, globálního časového limitu a časového limitu pro ping",
"Custom URL": "Vlastní URL",
"customUrlDescription": "Použije se jako hypertextový odkaz místo adresy monitoru.",
"OneChatAccessToken": "OneChat Přístupový token",
"OneChatUserIdOrGroupId": "OneChat ID uživatele nebo ID skupiny",
"OneChatBotId": "OneChat ID bota",
"wahaSession": "Relace",
"wahaChatId": "ID chatu (telefonní číslo / ID kontaktu / ID skupiny)",
"wayToGetWahaApiUrl": "URL vaší WAHA instance.",
"wayToGetWahaApiKey": "API klíč je hodnota proměnné prostředí WHATSAPP_API_KEY, kterou jste použili při spuštění WAHA.",
"Message Template": "Šablony zprávy",
"Template Format": "Formát zprávy",
"smsplanetApiDocs": "Detailní informace týkající se získání API tokenů naleznete v {the_smsplanet_documentation}.",
"the smsplanet documentation": "dokumentaci smsplanet",
"Phone numbers": "Telefonní čísla",
"Sender name": "Jméno odesílatele",
"smsplanetNeedToApproveName": "Je vyžadováno schválení v klientském portále",
"Disable URL in Notification": "Zakázat URL v oznámeních",
"Add Another Tag": "Přidat další štítek",
"Staged Tags for Batch Add": "Připravené štítky pro hromadné přidání",
"ntfyPriorityDown": "Priorita pro DOWN-události",
"pingNumericLabel": "Číselný výstup",
"Font Twemoji by Twitter licensed under": "Písmo Twemoji od Twitteru je pod licencí",
"smsplanetApiToken": "Token pro SMSPlanet API",
"tagAlreadyStaged": "Tento štítek (název a hodnota) je již pro tuto dávku připraven.",
"telegramUseTemplateDescription": "Po aktivování této možnosti bude při odeslání zprávy použita vlastní šablona.",
"telegramServerUrlDescription": "Pro zrušení omezení api botů Telegramu nebo získání přístupu v blokovaných oblastech (Čína, Írán, atp.). Pro více informací klikněte na {0}. Výchozí nastavení: {1}",
"Use HTML for custom E-mail body": "Použít HTML v těle vlastního e-mailu",
"ntfyPriorityHelptextPriorityHigherThanDown": "Pravidelná priorita by měla být vyšší než priorita {0}. Priorita {1} je vyšší než {0} s prioritou {2}",
"OAuth Audience": "OAuth Audience",
"Optional: The audience to request the JWT for": "Volitelné: Audience, pro které se má vyžádat JWT",
"pingCountDescription": "Počet paketů, které se před zastavením odešlou",
"pingNumericDescription": "Pokud je tato možnost aktivní, místo symbolických názvů hostitelů se zobrazí IP adresy",
"pingPerRequestTimeoutDescription": "Jedná se o maximální dobu čekání (v sekundách) před tím, než bude konkrétní ping paket považován za ztracený",
"smtpHelpText": "Pomocí možnosti 'SMTPS' se ověří funkčnost protokolu SMTP/TLS; výběrem Ignorovat TLS se naváže něšifrované spojení; po vybrání 'STARTTLS se odešle příkaz STARTTLS a dojde k ověření certifikátu serveru. Ani jeden z těchto režimů neinicializuje odeslání e-mailu.",
"wayToGetWahaSession": "Z této relace WAHA odesílá oznámení do ID chatu. Najdete ho v nástěnce WAHA.",
"wayToWriteWahaChatId": "Telefonní číslo s mezinárodní předvolbou, ale bez znaménka plus na začátku ({0}), ID kontaktu ({1}) nebo ID skupiny ({2}). Oznámení jsou z relace WAHA odesílána na toto ID chatu.",
"telegramServerUrl": "(Volitelné) Adresa serveru",
"YZJ Robot Token": "YZJ Robot token",
"YZJ Webhook URL": "YZJ URL webhooku",
"Add Tags": "Přidat štítky",
"tagAlreadyOnMonitor": "Dohled již má přiřazen tento štítek (název a hodnota) nebo se čeká na jeho přidání.",
"tagNameExists": "Systémový štítek s tímto názvem již existuje. Vyberte jej ze seznamu nebo použijte jiný název.",
"telegramUseTemplate": "Použít vlastní šablonu zprávy",
"telegramTemplateFormatDescription": "Telegram umožňuje ve zprávách používat různé značkovací jazyky, více informací naleznete v Telegram {0}.",
"smseagleDocs": "Zkontrolujte dokumentaci nebo dostupnost APIv2: {0}",
"smseagleComma": "Více záznamů oddělte čárkou",
"SpugPush Template Code": "Kód šablony",
"FlashDuty Push URL": "Push URL",
"FlashDuty Push URL Placeholder": "Zkopírovat ze stránky integrace upozornění",
"pingCountLabel": "Max. počet paketů",
"templateServiceName": "název služby",
"templateHostnameOrURL": "název hostitele nebo URL",
"templateStatus": "stav",
"defaultFriendlyName": "Nový dohled",
"smseagleContactV2": "ID kontaktu z telefonního seznamu",
"smseagleGroupV2": "ID skupin(y) telefonního seznamu",
"smseagleMsgType": "Typ zprávy",
"smseagleMsgSms": "SMS zprávy (výchozí)",
"smseagleMsgRing": "Vyzvánění",
"smseagleMsgTts": "Hovor s převodem textu na řeč",
"smseagleMsgTtsAdvanced": "Rozšířený hovor s převodem textu na řeč",
"smseagleDuration": "Doba (v sekundách)",
"smseagleTtsModel": "ID modelu převodu textu na řeč",
"smseagleApiType": "Verze API",
"smseagleApiv1": "APIv1 (pro stávající projekty a zpětnou kompatibilitu)",
"smseagleApiv2": "APIv2 (doporučeno pro nové integrace)",
"Path": "Cesta",
"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)",
"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

@@ -724,8 +724,8 @@
"smseagleToken": "API Zugriffstoken",
"smseagleTo": "Telefonnummer(n)",
"smseagleUrl": "Ihre SMSEagle Geräte URL",
"smseagleEncoding": "Als Unicode senden",
"smseaglePriority": "Nachrichtenpriorität (0-9, Standard = 0)",
"smseagleEncoding": "Als Unicode senden (Standard=GSM-7)",
"smseaglePriority": "Nachrichtenpriorität (0-9, höchste Priorität = 9)",
"smseagleContact": "Telefonbuch Kontaktname(n)",
"confirmDeleteTagMsg": "Möchtest du dieses Tag wirklich löschen? Monitore, die mit diesem Tag verknüpft sind, werden nicht gelöscht.",
"wayToGetKookBotToken": "Erstelle eine Anwendung und erhalte den Bot-Token unter {0}",
@@ -820,7 +820,7 @@
"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 'Uptime Kuma' hinzu, um eine Push-Adresse zu erhalten, und kopiere den Integrationsschlüssel in die Adresse. Für weitere Informationen besuche",
"wayToGetFlashDutyKey": "Um Uptime Kuma mit Flashduty zu integrieren: Gehe zu Channels > Wähle einen Channel > Integrationen > Füge eine neue Integration hinzu, wähle Uptime Kuma und kopiere die Push URL.",
"nostrRelays": "Nostr Relays",
"nostrRelaysHelp": "Eine Relay-URL pro Zeile",
"nostrRecipients": "Öffentliche Schlüssel des Empfängers (npub)",
@@ -1115,5 +1115,74 @@
"wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, ohne den anfänglichen Pluszeichen ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Die Benachrichtigungen werden an diese Chat-ID von der WAHA-Sitzung gesendet.",
"telegramServerUrl": "(Optional) Server URL",
"telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}",
"Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter"
"Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter",
"smsplanetApiToken": "Token für die SMSPlanet API",
"smsplanetApiDocs": "Ausführliche Informationen zum Erhalt von API-Tokens findest du in {the_smsplanet_documentation}.",
"the smsplanet documentation": "die smsplanet Dokumentation",
"Phone numbers": "Telefonnummern",
"Sender name": "Absendername",
"smsplanetNeedToApproveName": "Muss im Kundenpanel genehmigt werden",
"Use HTML for custom E-mail body": "HTML für benutzerdefinierten E-Mail-Text verwenden",
"smseagleApiv2": "APIv2 (empfohlen für neue Integrationen)",
"SpugPush Template Code": "Vorlage Code",
"FlashDuty Push URL": "Push-URL",
"FlashDuty Push URL Placeholder": "Kopie von der Seite für die Integration von Warnmeldungen",
"pingCountDescription": "Anzahl der zu sendenden Pakete vor dem Anhalten",
"pingNumericDescription": "Wenn diese Option aktiviert ist, werden IP-Adressen anstelle von symbolischen Hostnamen ausgegeben",
"pingPerRequestTimeoutDescription": "Dies ist die maximale Wartezeit (in Sekunden), bevor ein einzelnes Ping-Paket als verloren gilt",
"smtpHelpText": "'SMTPS' testet, ob SMTP/TLS funktioniert; 'Ignoriere TLS' stellt eine Verbindung über Klartext her; 'STARTTLS' stellt eine Verbindung her, gibt einen STARTTLS-Befehl aus und überprüft das Serverzertifikat. Keiner dieser Befehle sendet eine E-Mail.",
"defaultFriendlyName": "Neuer Monitor",
"smseagleGroupV2": "Telefonbuchgruppen-ID(s)",
"smseagleContactV2": "Telefonbuch-Kontakt-ID(s)",
"smseagleMsgType": "Nachrichtentyp",
"smseagleMsgSms": "SMS-Nachricht (Standard)",
"smseagleMsgRing": "Ringruf",
"smseagleMsgTts": "Text-zu-Sprache-Anruf",
"smseagleMsgTtsAdvanced": "Text-zu-Sprache Erweiterter Anruf",
"smseagleDuration": "Dauer (in Sekunden)",
"smseagleTtsModel": "Text-zu-Sprache-Modell-ID",
"smseagleApiType": "API-Version",
"smseagleApiv1": "APIv1 (für bestehende Projekte und Abwärtskompatibilität)",
"smseagleDocs": "Dokumentation oder APIv2-Verfügbarkeit prüfen: {0}",
"smseagleComma": "Mehrere müssen durch Komma getrennt werden",
"pingCountLabel": "Maximale Pakete",
"pingNumericLabel": "Numerische Ausgabe",
"pingGlobalTimeoutLabel": "Globale Zeitüberschreitung",
"pingGlobalTimeoutDescription": "Gesamtzeit in Sekunden bis zum Ende des Pings, unabhängig von den gesendeten Paketen",
"pingPerRequestTimeoutLabel": "Zeitüberschreitung pro Ping",
"pingIntervalAdjustedInfo": "Das Intervall wird anhand der Paketanzahl, des globalen Timeouts und des Timeouts pro Ping angepasst",
"Custom URL": "Benutzerdefinierte URL",
"customUrlDescription": "Wird als klickbare URL anstelle der des Monitors verwendet.",
"OneChatAccessToken": "OneChat Access Token",
"OneChatUserIdOrGroupId": "OneChat Benutzer-ID oder Gruppen-ID",
"OneChatBotId": "OneChat Bot-ID",
"Disable URL in Notification": "URL in der Benachrichtigung deaktivieren",
"Ip Family": "IP-Familie",
"ipFamilyDescriptionAutoSelect": "Verwendet die {happyEyeballs} zur Bestimmung der IP-Familie.",
"Happy Eyeballs algorithm": "Happy Eyeballs Algorithmus",
"Add Another Tag": "Weiteres Tag hinzufügen",
"Manual": "Manuell",
"ntfyPriorityHelptextPriorityHigherThanDown": "Die reguläre Priorität sollte höher sein als die Priorität {0}. Priorität {1} ist höher als {0} Priorität {2}",
"ntfyPriorityDown": "Priorität für DOWN-Ereignisse",
"Add Tags": "Tags hinzufügen",
"tagAlreadyOnMonitor": "Dieses Tag (Name und Wert) befindet sich bereits auf dem Monitor oder muss noch hinzugefügt werden.",
"tagAlreadyStaged": "Dieses Tag (Name und Wert) wurde für dieses Batch bereits bereitgestellt.",
"tagNameExists": "Ein System-Tag mit diesem Namen existiert bereits. Wähle es aus der Liste aus oder verwende einen anderen Namen.",
"Clear Form": "Formular leeren",
"pause": "Pause",
"Staged Tags for Batch Add": "Bereitgestellte Tags für Batch-Hinzufügen",
"OAuth Audience": "OAuth Zielgruppe",
"Optional: The audience to request the JWT for": "Optional: Die Zielgruppe, für die das JWT angefordert werden soll",
"Path": "Pfad",
"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}",
"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

@@ -695,8 +695,8 @@
"smseagleToken": "API-Zugriffstoken",
"smseagleUrl": "Ihre SMSEagle-Geräte-URL",
"Kook": "Kook",
"smseagleEncoding": "Als Unicode senden",
"smseaglePriority": "Nachrichtenpriorität (0-9, Standard = 0)",
"smseagleEncoding": "Als Unicode senden (Standard=GSM-7)",
"smseaglePriority": "Nachrichtenpriorität (0-9, höchste Priorität = 9)",
"Google Analytics ID": "Google Analytics ID",
"Edit Tag": "bearbeite Tag",
"Server Address": "Server Adresse",
@@ -830,7 +830,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 'Uptime Kuma' hinzu, um eine Push-Adresse zu erhalten, und kopiere den Integrationsschlüssel in die Adresse. Für weitere Informationen besuche",
"wayToGetFlashDutyKey": "Um Uptime Kuma mit Flashduty zu integrieren: Gehe zu Channels > Wähle einen Channel > Integrationen > Füge eine neue Integration hinzu, wähle Uptime Kuma und kopiere die Push URL.",
"timeoutAfter": "Zeitüberschreitung nach {0} Sekunden",
"styleElapsedTimeShowWithLine": "Anzeigen (mit Zeile)",
"styleElapsedTime": "Verstrichene Zeit unter der Prüfintervallleiste",
@@ -944,7 +944,7 @@
"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.",
"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",
@@ -1118,5 +1118,74 @@
"wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, ohne den anfänglichen Pluszeichen ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Die Benachrichtigungen werden an diese Chat-ID von der WAHA-Sitzung gesendet.",
"telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}",
"telegramServerUrl": "(Optional) Server URL",
"Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter"
"Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter",
"the smsplanet documentation": "die smsplanet Dokumentation",
"Phone numbers": "Telefonnummern",
"Sender name": "Absendername",
"smsplanetNeedToApproveName": "Muss im Kundenpanel genehmigt werden",
"smsplanetApiToken": "Token für die SMSPlanet API",
"smsplanetApiDocs": "Ausführliche Informationen zum Erhalt von API-Tokens findest du in {the_smsplanet_documentation}.",
"defaultFriendlyName": "Neuer Monitor",
"Use HTML for custom E-mail body": "HTML für benutzerdefinierten E-Mail-Text verwenden",
"smseagleApiv1": "APIv1 (für bestehende Projekte und Abwärtskompatibilität)",
"SpugPush Template Code": "Vorlage Code",
"FlashDuty Push URL": "Push-URL",
"pingCountLabel": "Maximale Pakete",
"pingNumericDescription": "Wenn diese Option aktiviert ist, werden IP-Adressen anstelle von symbolischen Hostnamen ausgegeben",
"pingPerRequestTimeoutDescription": "Dies ist die maximale Wartezeit (in Sekunden), bevor ein einzelnes Ping-Paket als verloren gilt",
"smtpHelpText": "'SMTPS' testet, ob SMTP/TLS funktioniert; 'Ignoriere TLS' stellt eine Verbindung über Klartext her; 'STARTTLS' stellt eine Verbindung her, gibt einen STARTTLS-Befehl aus und überprüft das Serverzertifikat. Keiner dieser Befehle sendet eine E-Mail.",
"OneChatUserIdOrGroupId": "OneChat Benutzer-ID oder Gruppen-ID",
"Disable URL in Notification": "URL in der Benachrichtigung deaktivieren",
"smseagleGroupV2": "Telefonbuchgruppen-ID(s)",
"smseagleContactV2": "Telefonbuch-Kontakt-ID(s)",
"smseagleMsgType": "Nachrichtentyp",
"smseagleMsgSms": "SMS-Nachricht (Standard)",
"smseagleMsgRing": "Ringruf",
"smseagleMsgTts": "Text-zu-Sprache-Anruf",
"smseagleMsgTtsAdvanced": "Text-zu-Sprache Erweiterter Anruf",
"smseagleDuration": "Dauer (in Sekunden)",
"smseagleTtsModel": "Text-zu-Sprache-Modell-ID",
"smseagleApiType": "API-Version",
"smseagleApiv2": "APIv2 (empfohlen für neue Integrationen)",
"smseagleDocs": "Dokumentation oder APIv2-Verfügbarkeit prüfen: {0}",
"smseagleComma": "Mehrere müssen durch Komma getrennt werden",
"FlashDuty Push URL Placeholder": "Kopie von der Seite für die Integration von Warnmeldungen",
"pingCountDescription": "Anzahl der zu sendenden Pakete vor dem Anhalten",
"pingNumericLabel": "Numerische Ausgabe",
"pingGlobalTimeoutLabel": "Globale Zeitüberschreitung",
"pingGlobalTimeoutDescription": "Gesamtzeit in Sekunden bis zum Ende des Pings, unabhängig von den gesendeten Paketen",
"pingPerRequestTimeoutLabel": "Zeitüberschreitung pro Ping",
"pingIntervalAdjustedInfo": "Das Intervall wird anhand der Paketanzahl, des globalen Timeouts und des Timeouts pro Ping angepasst",
"Custom URL": "Benutzerdefinierte URL",
"customUrlDescription": "Wird als klickbare URL anstelle der des Monitors verwendet.",
"OneChatAccessToken": "OneChat Access Token",
"OneChatBotId": "OneChat Bot-ID",
"Ip Family": "IP-Familie",
"Happy Eyeballs algorithm": "Happy Eyeballs Algorithmus",
"ipFamilyDescriptionAutoSelect": "Verwendet die {happyEyeballs} zur Bestimmung der IP-Familie.",
"Manual": "Manuell",
"ntfyPriorityHelptextPriorityHigherThanDown": "Die reguläre Priorität sollte höher sein als die Priorität {0}. Priorität {1} ist höher als {0} Priorität {2}",
"ntfyPriorityDown": "Priorität für DOWN-Ereignisse",
"Add Tags": "Tags hinzufügen",
"tagAlreadyOnMonitor": "Dieses Tag (Name und Wert) befindet sich bereits auf dem Monitor oder muss noch hinzugefügt werden.",
"tagAlreadyStaged": "Dieses Tag (Name und Wert) wurde für dieses Batch bereits bereitgestellt.",
"tagNameExists": "Ein System-Tag mit diesem Namen existiert bereits. Wähle es aus der Liste aus oder verwende einen anderen Namen.",
"Clear Form": "Formular leeren",
"Add Another Tag": "Weiteres Tag hinzufügen",
"Staged Tags for Batch Add": "Bereitgestellte Tags für Batch-Hinzufügen",
"pause": "Pause",
"OAuth Audience": "OAuth Zielgruppe",
"Optional: The audience to request the JWT for": "Optional: Die Zielgruppe, für die das JWT angefordert werden soll",
"mqttWebsocketPathInvalid": "Verwende ein gültiges WebSocket-Pfadformat",
"Path": "Pfad",
"mqttWebSocketPath": "MQTT WebSocket Pfad",
"mqttWebsocketPathExplanation": "WebSocket-Pfad für MQTT über WebSocket-Verbindungen (z. B. /mqtt)",
"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

@@ -71,6 +71,7 @@
"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",
"Path": "Path",
"Heartbeat Interval": "Heartbeat Interval",
"Request Timeout": "Request Timeout",
"timeoutAfter": "Timeout after {0} seconds",
@@ -188,9 +189,13 @@
"Show URI": "Show URI",
"Tags": "Tags",
"Add New Tag": "Add New Tag",
"Add Tags": "Add Tags",
"Add New below or Select...": "Add New below or Select…",
"Tag with this name already exist.": "Tag with this name already exists.",
"Tag with this value already exist.": "Tag with this value already exists.",
"tagAlreadyOnMonitor": "This tag (name and value) is already on the monitor or pending addition.",
"tagAlreadyStaged": "This tag (name and value) is already staged for this batch.",
"tagNameExists": "A system tag with this name already exists. Select it from the list or use a different name.",
"color": "Color",
"value (optional)": "value (optional)",
"Gray": "Gray",
@@ -262,6 +267,10 @@
"Current User": "Current User",
"topic": "Topic",
"topicExplanation": "MQTT topic to monitor",
"mqttWebSocketPath": "MQTT WebSocket Path",
"mqttWebsocketPathExplanation": "WebSocket path for MQTT over WebSocket connections (e.g., /mqtt)",
"mqttWebsocketPathInvalid": "Please use a valid WebSocket Path format",
"mqttHostnameTip": "Please use this format {hostnameFormat}",
"successKeyword": "Success Keyword",
"successKeywordExplanation": "MQTT Keyword that will be considered as success",
"recent": "Recent",
@@ -583,6 +592,11 @@
"rrtypeDescription": "Select the RR type you want to monitor",
"pauseMonitorMsg": "Are you sure want to pause?",
"enableDefaultNotificationDescription": "This notification will be enabled by default for new monitors. You can still disable the notification separately for each monitor.",
"Clear All Events": "Clear All Events",
"clearAllEventsMsg": "Are you sure want to delete all events?",
"Events cleared successfully": "Events cleared successfully.",
"No monitors found": "No monitors found.",
"Could not clear events": "Could not clear {failed}/{total} events",
"clearEventsMsg": "Are you sure want to delete all events for this monitor?",
"clearHeartbeatsMsg": "Are you sure want to delete all heartbeats for this monitor?",
"confirmClearStatisticsMsg": "Are you sure you want to delete ALL statistics?",
@@ -636,6 +650,8 @@
"pushyToken": "Device token",
"apprise": "Apprise (Support 50+ Notification services)",
"GoogleChat": "Google Chat (Google Workspace only)",
"Template plain text instead of using cards": "Template plain text instead of using cards",
"issueWithGoogleChatOnAndroidHelptext": "This also allows to get around bugs upstream like {issuetackerURL}",
"wayToGetKookBotToken": "Create application and get your bot token at {0}",
"wayToGetKookGuildID": "Switch on 'Developer Mode' in Kook setting, and right click the guild to get its ID",
"Guild ID": "Guild ID",
@@ -841,6 +857,8 @@
"ntfyAuthenticationMethod": "Authentication Method",
"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}",
"ntfyPriorityHelptextPriorityHigherThanDown": "Regular priority should be higher than {0} priority. Priority {1} is higher than {0} priority {2}",
"ntfyPriorityDown": "Priority for DOWN-events",
"ntfyUsernameAndPassword": "Username and Password",
"twilioAccountSID": "Account SID",
"twilioApiKey": "Api Key (optional)",
@@ -1016,6 +1034,8 @@
"Client ID": "Client ID",
"Client Secret": "Client Secret",
"OAuth Scope": "OAuth Scope",
"OAuth Audience": "OAuth Audience",
"Optional: The audience to request the JWT for": "Optional: The audience to request the JWT for",
"Optional: Space separated list of scopes": "Optional: Space separated list of scopes",
"Go back to home page.": "Go back to home page.",
"No tags found.": "No tags found.",
@@ -1109,5 +1129,13 @@
"Phone numbers": "Phone numbers",
"Sender name": "Sender name",
"smsplanetNeedToApproveName": "Needs to be approved in the client panel",
"Disable URL in Notification": "Disable URL in Notification"
"Disable URL in Notification": "Disable URL in Notification",
"Ip Family": "IP Family",
"ipFamilyDescriptionAutoSelect": "Uses the {happyEyeballs} for determining the IP family.",
"Happy Eyeballs algorithm": "Happy Eyeballs algorithm",
"Add Another Tag": "Add Another Tag",
"Staged Tags for Batch Add": "Staged Tags for Batch Add",
"Clear Form": "Clear Form",
"pause": "Pause",
"Manual": "Manual"
}

View File

@@ -503,8 +503,8 @@
"onebotMessageType": "Tipo de Mensaje OneBot",
"smseagleRecipientType": "Tipo de destinatario",
"smseagleRecipient": "Destinatario(s) (multiples deben separarse por comas)",
"smseagleEncoding": "Enviar como Unicode",
"smseaglePriority": "Prioridad del mensaje (0-9, predeterminado = 0)",
"smseagleEncoding": "Enviar como Unicode (por defecto=GSM-7)",
"smseaglePriority": "Prioridad del mensaje (0-9, mas alta prioridad = 9)",
"stackfield": "Stackfield",
"Leave blank to use a shared sender number.": "Dejar en blanco para usar un número de remitente compartido.",
"Octopush API Version": "Versión API Octopush",
@@ -829,7 +829,7 @@
"Badge value (For Testing only.)": "Valor de la insignia (Solo para pruebas.)",
"Enable Kafka Producer Auto Topic Creation": "Habilitar la Creación Automática de Temas del Productor de Kafka",
"noGroupMonitorMsg": "No disponible. Cree primero un monitor de grupo.",
"wayToGetFlashDutyKey": "Puedes ir a Canal -> (Seleccionar un Canal) -> Integraciones -> Agregar una nueva integración, agregar un 'Uptime Kuma' para obtener una dirección de envío, copiar la Clave de Integración en la dirección. Para más información, por favor visita",
"wayToGetFlashDutyKey": "Para integrar Uptime Kuma con Flashduty: Ir a Canal -> (Seleccionar un Canal) -> Integraciones -> Agregar una nueva integración, elegir 'Uptime Kuma' y copia la URL Push.",
"gamedigGuessPort": "Gamedig: Adivinar el puerto",
"gamedigGuessPortDescription": "El puerto utilizado por Valve Server Query Protocol puede ser diferente del puerto del cliente. Pruebe esto si el monitor no puede conectarse a su servidor.",
"twilioApiKey": "Clave de la API (opcional)",
@@ -1087,5 +1087,83 @@
"Custom sound to override default notification sound": "Sonidos personalizados prevalecen sobre los sonidos por defecto de las notificaciones",
"The phone number of the recipient in E.164 format.": "El número de teléfono del receptor en formato E.164.",
"Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Las notificaciones sensibles en el tiempo se enviarán inmediatamente, incluso si el dispositivo está en modo no molestar.",
"Arcade": "Arcade"
"Arcade": "Arcade",
"defaultFriendlyName": "Nuevo Monitor",
"telegramUseTemplate": "Usar una plantilla de mensaje personalizado",
"telegramUseTemplateDescription": "Si esta habilitado, el mensaje sera enviado usando una plantilla personalizada.",
"telegramServerUrlDescription": "Para aumentar las limitaciones de la API de bots de Telegram o ganar acceso en áreas bloqueadas (China, Irán, etc). Para mas información click {0}. Por defecto: {1}",
"smseagleApiType": "Versión de la API",
"telegramServerUrl": "(Opcional) URL del servidor",
"tagAlreadyOnMonitor": "Esta etiqueta (nombre y valor) ya están en el monitor o están pendientes de ser agregadas.",
"tagAlreadyStaged": "Esta etiqueta (nombre y valor) ya esta montada para este lote.",
"Add Tags": "Agregar etiquetas",
"tagNameExists": "Una etiqueta de sistema con este nombre ya existe. Seleccionala de la lista o usa un nombre diferente.",
"telegramTemplateFormatDescription": "Telegram permite usar diferentes lenguajes de marcado para los mensajes, ver telegram {0} para detalles específicos.",
"Use HTML for custom E-mail body": "Usar HTML para un cuerpo de E-mail personalizado",
"smseagleMsgType": "Tipo de mensaje",
"smseagleMsgSms": "Mensaje por SMS (por defecto)",
"smseagleMsgTts": "Llamada Voz-a-texto",
"smseagleDuration": "Duración (en segundos)",
"smseagleApiv1": "APIv1 (para proyectos existentes y retrocompatibilidad)",
"smseagleApiv2": "APIv2 (recomendada para nuevas integraciones)",
"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

@@ -683,7 +683,7 @@
"Affected Monitors": "Kaltetutako monitoreak",
"Pick Affected Monitors...": "Hautatu kaltetutako monitoreak…",
"deleteMaintenanceMsg": "Ziur zaude mantentze lan hau ezabatu nahi duzula?",
"smseagleEncoding": "Unicode gisa bidali",
"smseagleEncoding": "Unicode gisa bidali (default=GSM-7)",
"Add Another": "Gehitu beste bat",
"Google Analytics ID": "Google Analytics IDa",
"Edit Tag": "Editatu etiketa",
@@ -695,5 +695,56 @@
"lunaseaUserID": "Erabiltzaile IDa",
"pagertreeDoNothing": "Ez egin ezer",
"Separate multiple email addresses with commas": "Banatu email helbideak koma ikurrekin",
"settingUpDatabaseMSG": "Datubasea ezartzen. Denbora pixka bat iraun dezake, pazientzia eduki."
"settingUpDatabaseMSG": "Datubasea ezartzen. Denbora pixka bat iraun dezake, pazientzia eduki.",
"pause": "Gelditu",
"Ip Family": "IP familia",
"Clear Form": "Garbitu formularioa",
"Manual": "Eskuzkoa",
"templateMsg": "Jakinarazpenaren mezua",
"infiniteRetention": "Ezarri 0 atxikipen infinitua lortzeko.",
"strategyManual": "Aktibatu/desaktibatu eskuz",
"Home Assistant URL": "Home Assistant URLa",
"lastDay4": "Hilabeteko azken 4. eguna",
"smseagleApiType": "API bertsioa",
"defaultFriendlyName": "Monitorizazio berria",
"threemaRecipientTypeIdentityFormat": "8 karaktere",
"threemaRecipientTypePhone": "Telefono zenbakia",
"Group ID": "Talde IDa",
"Custom URL": "URL pertsonalizatua",
"Plain Text": "Testu laua",
"telegramServerUrl": "(Hautazkoa) Zerbitzari Url-a",
"Notify Channel": "Jakinarazpen kanala",
"Add Tags": "Gehitu etiketak",
"Search monitored sites": "Bilatu monitorizatutako guneak",
"lastDay2": "Hilabeteko azken 2. eguna",
"lastDay3": "Hilabeteko azken 3. eguna",
"Server Timezone": "Zerbitzari ordu zona",
"chromeExecutable": "Chrome/Chromium exekutagarria",
"Clone Monitor": "Klonatu monitorizazioa",
"Add a domain": "Gehitu domeinu bat",
"smseagleDuration": "Iraupena (segundotan)",
"smseagleMsgType": "Mezu mota",
"smseagleMsgSms": "Sms mezua (defektuzkoa)",
"ntfyAuthenticationMethod": "Autentifikazio metodoa",
"lunaseaDeviceID": "Gailu IDa",
"threemaRecipientTypeEmail": "Email helbidea",
"New Group": "Talde berria",
"Group Name": "Talde izena",
"OAuth2: Client Credentials": "OAuth2: bezero kredentzialak",
"Authentication Method": "Autentifikazio metodoa",
"Client ID": "Bezero IDa",
"Client Secret": "Bezero gakoa",
"Go back to home page.": "Itzuli hasiera ordura.",
"No tags found.": "Ez da etiketarik aurkitu.",
"Disable URL in Notification": "Desgaitu URLa jakunarazpenean",
"Sender name": "Bidaltzaile izena",
"Phone numbers": "Telefono zenbakiak",
"Message Template": "Mezu txantiloia",
"Template Format": "Txantiloi formatua",
"Add Another Tag": "Gehitu beste etiketa",
"templateServiceName": "Zerbitzu izena",
"templateStatus": "egoera",
"webhookBodyCustomOption": "Pertsonalizatutako mezu gorputza",
"telegramSendSilentlyDescription": "Bidali mezuak isilik. Erabiltzaileak soinurik gabeko jakinarazpena jasoko du.",
"setupDatabaseMariaDB": "Konektatu kanpo MariaDB datu base batekin. Datu base konexioaren informazioa ezarri behar da."
}

View File

@@ -236,7 +236,7 @@
"matrixDesc1": "با مراجعه به بخش پیشرفته تنظیمات اتاق در کلاینت Matrix خود می توانید آیدی داخلی اتاق را بیابید. باید شبیه \"!QMdRCpUIfLwsfjxye6:home.server\" باشد.",
"wayToGetPagerDutyKey": "با رفتن به Service -> Service Directory -> (Select a Service) -> Integrations -> Add integration می توانید این مورد را دریافت کنید. در اینجا می توانید \"Events API V2\" را جستجو کنید. اطلاعات بیشتر در {0}",
"smseagleRecipientType": "نوع گیرنده",
"smseagleEncoding": "ارسال به صورت یونیکد",
"smseagleEncoding": "ارسال به صورت یونیکد (پیشفرض=GSM-7)",
"Leave blank to use a shared sender number.": "برای استفاده از شماره فرستنده مشترک، آن را خالی بگذارید.",
"onebotSafetyTips": "برای امنیت، میبایستی توکن دسترسی اضافه کنید",
"Custom Monitor Type": "نوع مانیتور سفارشی",
@@ -603,7 +603,7 @@
"smseagleContact": "نام(های) تماس دفترچه تلفن",
"smseagleRecipient": "گیرنده(های) (چند مورد باید با کاما از هم جدا شوند)",
"smseagleUrl": "URL دستگاه SMSEagle شما",
"smseaglePriority": "اولویت پیام (0-9، پیش فرض = 0)",
"smseaglePriority": "اولویت پیام (9-0, بالاترین اولویت = 9)",
"Recipient Number": "شماره گیرنده",
"From Name/Number": "از نام/شماره",
"Octopush API Version": "نسخه Octopush API",
@@ -761,7 +761,7 @@
"Enter the list of brokers": "لیست بروکر هارا وارد کنید",
"Enable Kafka Producer Auto Topic Creation": "فعال سازی ایجاپ موضوع اتوماتیک تهیه کننده",
"Secret AccessKey": "کلید محرمانه AccessKey",
"wayToGetFlashDutyKey": "می توانید به کانال -> (انتخاب یک کانال) -> یکپارچه سازی -> یکپارچه سازی جدید بروید، یک \"Uptime Kuma\" را برای دریافت یک آدرس پوش اضافه کنید، کلید یکپارچه سازی را در آدرس کپی کنید. برای اطلاعات بیشتر لطفا مراجعه کنید به",
"wayToGetFlashDutyKey": "برای یکپارچه‌سازی Uptime Kuma با Flashduty: به بخش کانال‌ها بروید > یک کانال را انتخاب کنید > یکپارچهسازیها > افزودن یک یکپارچهسازی جدید، گزینه Uptime Kuma را انتخاب کنید و آدرس Push را کپی کنید.",
"showCertificateExpiry": "نمایش زمان به پایان رسیدن اعتبار سرتیفیکیت",
"gamedigGuessPortDescription": "پورت مورد استفاده توسط پروتکل Query Valve Server ممکن است با پورت مشتری متفاوت باشد. اگر مانیتور نمی تواند به سرور شما متصل شود، این را امتحان کنید.",
"invertKeywordDescription": "دنبال کلمات کلیدی ناموجود باشید تا آنهایی که موجود است.",
@@ -1037,13 +1037,13 @@
"Guitar": "گیتار",
"Pop": "پاپ",
"From": "از",
"telegramServerUrl": "(اختیاری) آدرس سرور",
"telegramServerUrl": "آدرس سرور (اختیاری)",
"telegramServerUrlDescription": "برای کاهش محدودیت‌های بات تلگرام یا دسترسی در مناطقی که تلگرام فیلتر شده است (مثل ایران یا چین و ...). برای اطلاعات بیشتر {0} را ببینید. مقدار پیشفرض: {1}",
"Alphanumerical string and hyphens only": "فقط حروف الفبا، اعداد و -",
"Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "اعلان‌های حساس به زمان در لحظه ارسال خواهند شد، حتی اگر دستگاه در حالت بدون مزاحمت قرار داشته باشد.",
"rabbitmqNodesRequired": "لطفا گره‌های این پایش‌گر را تنظیم کنید.",
"rabbitmqNodesRequired": "لطفا node های این مانیتور را تنظیم کنید.",
"RabbitMQ Password": "گذرواژه RabbitMQ",
"RabbitMQ Nodes": "گره‌های مدیریت RabbitMQ",
"RabbitMQ Nodes": "node های مدیریت RabbitMQ",
"rabbitmqHelpText": "برای پایش، لازم است افزونه مدیریت (Management) در RabbitMQ را فعال کنید. برای اطلاعات بیشتر به {rabitmq_documentation} مراجعه کنید.",
"wayToWriteWahaChatId": "شماره موبایل در قالب بین‌المللی و بدون علامت مثبت ابتدایی ({0})، شناسه مخاطب ({1}) یا شناسه گروه ({2}). اعلان‌ها از نشست WAHA به این شناسه گفتگو ارسال خواهند شد.",
"wahaSession": "نشست",
@@ -1055,7 +1055,7 @@
"Fail": "شکست",
"Custom sound to override default notification sound": "نوای دلخواه به جای نوای پیشفرض اعلان",
"Time Sensitive (iOS Only)": "حساس به زمان (فقط iOS)",
"Can be found on:": "در {0} یافت میشود",
"Can be found on:": "در {0} پیدا میشود",
"Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "شناسه ارسال کننده متنی و در صورتی که میخواهید پاسخ‌ها را دریافت کنید، شماره موبایل در قالب E.164.",
"rabbitmqNodesDescription": "آدرس گره‌های مدیریت RabbitMQ را به همراه پروتکل و شماره پورت وارد کنید. مثال: {0}",
"RabbitMQ Username": "نام کاربری RabbitMQ",
@@ -1068,5 +1068,70 @@
"templateStatus": "وضعیت",
"telegramUseTemplate": "استفاده از قالب پیام دلخواه",
"telegramUseTemplateDescription": "در صورت فعال‌سازی، پیام با قالب دلخواه ارسال خواهد شد.",
"telegramTemplateFormatDescription": "در تلگرام امکان استفاده از زبان‌های نشانه‌گذاری مختلفی وجود دارد، برای جزئیات بیشتر {0} را ببینید."
"telegramTemplateFormatDescription": "در تلگرام امکان استفاده از زبان‌های نشانه‌گذاری مختلفی وجود دارد، برای جزئیات بیشتر {0} را ببینید.",
"defaultFriendlyName": "مانیتور جدید",
"shrinkDatabaseDescriptionSqlite": "اجرای دستور {vacuum} برای پایگاه داده SQLite. گزینه {auto_vacuum} به‌صورت پیش‌فرض فعال است، اما مانند {vacuum} عمل یکپارچه‌سازی و بازآرایی صفحات پایگاه داده را انجام نمی‌دهد.",
"Use HTML for custom E-mail body": "استفاده از HTML برای محتوای سفارشی ایمیل",
"smseagleGroupV2": "شناسه(های) گروه دفترچه تلفن",
"smseagleTtsModel": "شناسه مدل تبدیل متن به گفتار",
"smseagleApiv2": "APIv2 (پیشنهاد شده برای یکپارچه‌سازی‌های جدید)",
"rabbitmqNodesInvalid": "لطفاً از یک آدرس URL کامل (که با 'http' شروع می‌شود) برای node های RabbitMQ استفاده کنید.",
"pingNumericDescription": "اگر فعال شود، آدرس‌های IP به‌جای نام‌های نمادین هاست نمایش داده خواهند شد",
"pingPerRequestTimeoutDescription": "این بیشترین زمان انتظار (بر حسب ثانیه) است پیش از آن‌که یک پکت پینگ به‌عنوان گم‌شده (packet lost) در نظر گرفته شود",
"smtpHelpText": "'SMTPS' بررسی می‌کند که SMTP/TLS به‌درستی کار می‌کند؛ 'Ignore TLS' اتصال را به‌صورت متن ساده (plaintext) برقرار می‌کند؛ 'STARTTLS' ابتدا اتصال برقرار کرده، سپس فرمان STARTTLS را ارسال می‌کند و سرتیفیکت سرور را بررسی می‌نماید. هیچ‌یک از این حالت‌ها ایمیلی ارسال نمی‌کنند.",
"smseagleContactV2": "شناسه(های) مخاطب دفترچه تلفن",
"smseagleMsgType": "نوع پیام",
"smseagleMsgSms": "پیامک (پیش‌فرض)",
"smseagleMsgRing": "شماره تماس",
"smseagleMsgTtsAdvanced": "تماس پیشرفته با تبدیل متن به گفتار",
"smseagleMsgTts": "تماس با تبدیل متن به گفتار",
"smseagleDuration": "مدت زمان (بر حسب ثانیه)",
"smseagleApiType": "نسخه API",
"smseagleApiv1": "APIv1 (برای پروژه‌های موجود و سازگاری با نسخه‌های قبلی)",
"smseagleDocs": "بررسی مستندات یا در دسترس بودن APIv2: {0}",
"smseagleComma": "چند مقدار باید با کاما (,) از هم جدا شوند",
"SpugPush Template Code": "کد قالب",
"FlashDuty Push URL": "آدرس Push",
"FlashDuty Push URL Placeholder": "از صفحه یکپارچه‌سازی هشدارها کپی کنید",
"Send rich messages": "ارسال rich messages",
"Arcade": "Arcade (آرکید)",
"Harp": "Harp (چنگ)",
"pingCountLabel": "حداکثر پکت ها",
"pingCountDescription": "تعداد پکت هایی که قبل از توقف باید ارسال شوند",
"pingNumericLabel": "خروجی عددی",
"pingGlobalTimeoutLabel": "تایم اوت کلی",
"pingGlobalTimeoutDescription": "زمان کلی به ثانیه قبل از توقف پینگ، صرف‌نظر از تعداد پکت های ارسال‌شده",
"pingPerRequestTimeoutLabel": "تایم اوت برای هر پینگ",
"pingIntervalAdjustedInfo": "فاصله زمانی بر اساس تعداد پکت ها، تایم اوت کلی و تایم اوت برای هر پینگ تنظیم می‌شود",
"Custom URL": "آدرس سفارشی",
"customUrlDescription": "به‌جای آدرس مانیتور، به‌عنوان لینک قابل کلیک استفاده خواهد شد.",
"OneChatAccessToken": "توکن دسترسی OneChat",
"OneChatUserIdOrGroupId": "شناسه کاربر یا شناسه گروه OneChat",
"OneChatBotId": "شناسه بات OneChat",
"YZJ Robot Token": "توکن ربات YZJ",
"Disable URL in Notification": "غیرفعال‌سازی URL در اعلان",
"Font Twemoji by Twitter licensed under": "فونت Twemoji ساخت Twitter تحت لایسنس زیر منتشر شده است",
"smsplanetApiDocs": "اطلاعات دقیق درباره دریافت توکن‌های API را می‌توانید در {the_smsplanet_documentation} بیابید.",
"the smsplanet documentation": "مستندات SMSPlanet",
"Phone numbers": "شماره های تماس",
"Sender name": "نام ارسال کننده",
"smsplanetNeedToApproveName": "نیاز به تأیید در پنل کاربری دارد",
"smsplanetApiToken": "توکن برای API سرویس SMSPlanet",
"wayToGetWahaApiKey": "کلید API همان مقدار environment variable WHATSAPP_API_KEY است که هنگام اجرای WAHA استفاده کرده‌اید.",
"wayToGetWahaApiUrl": "آدرس URL اینستنس WAHA شما.",
"SendGrid API Key": "کلید API سرویس SendGrid",
"Add Tags": "افزودن برچسب ها",
"tagAlreadyOnMonitor": "این برچسب (نام و مقدار) قبلاً روی مانیتور قرار دارد یا در حال اضافه شدن است.",
"tagNameExists": "یک برچسب سیستم با این نام قبلاً وجود دارد. آن را از فهرست انتخاب کنید یا از نام متفاوتی استفاده کنید.",
"Staged Tags for Batch Add": "برچسب‌های آماده برای افزودن به مجموعه",
"ntfyPriorityHelptextPriorityHigherThanDown": "اولویت عادی باید بالاتر از اولویت {0} باشد. اولویت {1} بالاتر از اولویت {0} اولویت {2} است",
"ntfyPriorityDown": "اولویت برای ایونت های DOWN",
"tagAlreadyStaged": "این برچسب (نام و مقدار) قبلاً برای این مجموعه آماده شده است.",
"Add Another Tag": "افزودن برچسب دیگر",
"Clear Form": "پاک کردن فرم",
"pause": "توقف",
"Happy Eyeballs algorithm": "الگوریتم Happy Eyeballs",
"Ip Family": "خانواده IP",
"ipFamilyDescriptionAutoSelect": "از {happyEyeballs} برای تعیین خانواده IP استفاده می‌کند.",
"Manual": "راهنما"
}

View File

@@ -605,8 +605,8 @@
"smseagleRecipient": "Vastaanottaja(t) (jos useita, ne on erotettava pilkulla)",
"smseagleToken": "API-käyttöoikeustunnus",
"smseagleUrl": "SMSEagle-laitteesi URL-osoite",
"smseagleEncoding": "Lähetä Unicodena",
"smseaglePriority": "Viestin prioriteetti (0-9, oletus = 0)",
"smseagleEncoding": "Lähetä Unicodena (normaalisti=GSM-7)",
"smseaglePriority": "Viestin prioriteetti (0-9, korkein oletus = 0)",
"stackfield": "Stackfield",
"Recipient Number": "Vastaanottajan numero",
"From Name/Number": "Nimestä/numerosta",
@@ -1104,7 +1104,7 @@
"wahaChatId": "Viesti ID (Puhelinnumero / Yhteystieto ID / Ryhmä ID)",
"Template Format": "Malli Muotoilu",
"wayToGetWahaApiUrl": "Sinun WAHA instanssin URL.",
"YZJ Webhook URL": "YZJ Webhook URL",
"YZJ Webhook URL": "YZJ Webhook URL-osoite",
"telegramServerUrl": "(Valinnainen) Palvelin Url",
"telegramServerUrlDescription": "Telegramin bot-api-rajoitusten poistamiseksi tai pääsyn saamiseksi estetyille alueille (Kiina, Iran jne.). Saat lisätietoja napsauttamalla {0}. Oletus: {1}",
"Message Template": "Viesti Malli",
@@ -1116,5 +1116,38 @@
"templateStatus": "tila",
"telegramUseTemplate": "Käytä mukautettua viesti mallia",
"telegramUseTemplateDescription": "Jos aktivoitu, viesti lähetetään käyttämällä mukautettua mallia.",
"telegramTemplateFormatDescription": "Telegram sallii erilaisten merkintäkielien käytön viesteissä, katso Telegram {0} tarkempia tietoja."
"telegramTemplateFormatDescription": "Telegram sallii erilaisten merkintäkielien käytön viesteissä, katso Telegram {0} tarkempia tietoja.",
"smsplanetApiToken": "SMSPlanet API:n tunnus",
"smsplanetApiDocs": "Yksityiskohtaiset tiedot API-tunnusten hankkimisesta löytyvät osoitteesta {the_smsplanet_documentation}.",
"the smsplanet documentation": "smsplanetin dokumentaatio",
"Phone numbers": "Puhelinnumerot",
"Sender name": "Lähettäjän nimi",
"smsplanetNeedToApproveName": "On hyväksyttävä asiakaspaneelissa",
"Use HTML for custom E-mail body": "Käytä HTML:llää mukautettuihin sähköposteihin.",
"smseagleDocs": "Tarkista dokumentaatio APIv2 saatavuudelle: {0}",
"defaultFriendlyName": "Uusi monitori",
"smseagleMsgType": "Viestin tyyppi",
"smseagleMsgSms": "SMS viesti (oletus)",
"smseagleMsgRing": "Ring puhelu",
"smseagleMsgTts": "Teksti puheeksi puhelu",
"smseagleMsgTtsAdvanced": "Teksti puheeksi edistynyt puhelu",
"smseagleDuration": "Aika (sekuntteina)",
"smseagleTtsModel": "Teksti puheeksi mallin tunniste ID",
"pingCountLabel": "Suurin määrä paketeille",
"Add Tags": "Lisää tageja",
"tagAlreadyOnMonitor": "Tämä tagi (nimi ja arvo) on jo monitorissa tai odottamassa lisäystä.",
"tagAlreadyStaged": "Tämä tagi (nimi ja arvo) on jo lavastettu tälle erälle.",
"tagNameExists": "Systeemin tagi tällä nimellä on jo olemassa. Valitse se listasta tai käytä eri nimeä.",
"smseagleGroupV2": "Puhelinluettelon ryhmän tunnukset",
"smseagleContactV2": "Puhelinluettelon yhteydenotto ID:t",
"smseagleApiType": "API versio",
"smseagleApiv1": "APIv1 (olemassa oleville projekteille ja taaksepäin yhteensopivuudelle)",
"smseagleApiv2": "APIv2 (suositeltu uusimmille lisäosille)",
"smseagleComma": "Useat on erotettava toisistaan pilkulla",
"SpugPush Template Code": "Mallipohjan koodi",
"ntfyPriorityHelptextPriorityHigherThanDown": "Normaalin prioriteetin tulisi olla korkeampi kuin {0} prioriteetti. Prioriteetti {1} on korkeampi kuin {0} prioriteetti {2}",
"ntfyPriorityDown": "DOWN-tapahtumien prioriteetti",
"FlashDuty Push URL": "Pushaamiseen URL-osoite",
"FlashDuty Push URL Placeholder": "Kopioi hälytysintegraatiosivulta",
"pingCountDescription": "Numeroina määrä paketteja, jotka lähetetään ennen lopettamista."
}

View File

@@ -397,8 +397,8 @@
"smseagleRecipient": "Destinataire(s) (les multiples doivent être séparés par une virgule)",
"smseagleToken": "Jeton d'accès à l'API",
"smseagleUrl": "L'URL de votre appareil SMSEagle",
"smseagleEncoding": "Envoyer en Unicode",
"smseaglePriority": "Priorité des messages (0-9, par défaut = 0)",
"smseagleEncoding": "Envoyer en Unicode (default=GSM-7)",
"smseaglePriority": "Priorité du message (0 à 9, la priorité la plus élevée = 9)",
"stackfield": "Stackfield",
"Customize": "Personnaliser",
"Custom Footer": "Pied de page personnalisé",
@@ -592,7 +592,7 @@
"Domain": "Domaine",
"Workstation": "Poste de travail",
"disableCloudflaredNoAuthMsg": "Vous êtes en mode No Auth, un mot de passe n'est pas nécessaire.",
"trustProxyDescription": "Faire confiance aux en-têtes 'X-Forwarded-*'. Si vous souhaitez obtenir la bonne adresse IP client et que votre Uptime Kuma se situe derrière un proxy (comme nginx ou Apache) vous devez l'activer.",
"trustProxyDescription": "Faire confiance aux en-têtes 'X-Forwarded-*'. Si vous souhaitez obtenir la bonne adresse IP client et que votre Uptime Kuma se situe derrière un proxy (comme nginx ou Apache), vous devez l'activer.",
"wayToGetLineNotifyToken": "Vous pouvez obtenir un jeton d'accès auprès de {0}",
"Examples": "Exemples",
"Home Assistant URL": "URL vers Home Assistant",
@@ -831,7 +831,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 « Uptime Kuma » pour obtenir une adresse push, copier la clé d'intégration dans l'adresse. Pour plus d'informations, veuillez visiter",
"wayToGetFlashDutyKey": "Pour intégrer Uptime Kuma avec Flashduty : allez dans Canaux > sélectionnez un canal > Intégrations > Ajouter une nouvelle intégration, choisissez Uptime Kuma, puis copiez lURL Push.",
"Request Timeout": "Délai d'expiration de la demande",
"timeoutAfter": "Délai dépassé après {0} secondes",
"gamedigGuessPort": "Gamedig : Devinez le port",
@@ -1118,5 +1118,74 @@
"wayToWriteWahaChatId": "Le numéro de téléphone avec le préfixe international, mais sans le signe plus ({0}), l'identifiant de contact ({1}) ni l'identifiant de groupe ({2}). Les notifications sont envoyées à cet identifiant de chat depuis la session WAHA.",
"telegramServerUrlDescription": "Pour lever les limitations de lAPI des bots Telegram ou accéder aux zones bloquées (Chine, Iran, etc.). Pour plus dinformations, cliquez sur {0}. Par défaut : {1}",
"telegramServerUrl": "(Facultatif) URL du serveur",
"Font Twemoji by Twitter licensed under": "La police Twemoji de Twitter est sous licence"
"Font Twemoji by Twitter licensed under": "La police Twemoji de Twitter est sous licence",
"the smsplanet documentation": "la documentation de smsplanet",
"Phone numbers": "Numéros de téléphone",
"Sender name": "Nom de l'expéditeur",
"smsplanetNeedToApproveName": "Doit être approuvé dans le panneau client",
"smsplanetApiToken": "Jeton pour l'API SMSPlanet",
"smsplanetApiDocs": "Des informations détaillées sur l'obtention de jetons API peuvent être trouvées dans {the_smsplanet_documentation}.",
"pingNumericDescription": "Si coché, les adresses IP seront affichées à la place des noms dhôtes symboliques",
"pingPerRequestTimeoutDescription": "Cest le temps dattente maximal (en secondes) avant de considérer un paquet ping comme perdu",
"smtpHelpText": "'SMTPS' teste que SMTP/TLS fonctionne ; 'Ignorer TLS' se connecte en clair ; 'STARTTLS' se connecte, envoie une commande STARTTLS et vérifie le certificat du serveur. Aucun de ces tests nenvoie de-mail.",
"Disable URL in Notification": "Désactiver lURL dans la notification",
"defaultFriendlyName": "Nouvelle sonde",
"Use HTML for custom E-mail body": "Utiliser du HTML pour le corps personnalisé de l'e-mail",
"smseagleGroupV2": "ID(s) de groupe du carnet dadresses",
"smseagleContactV2": "ID(s) de contact du carnet dadresses",
"smseagleMsgType": "Type de message",
"smseagleMsgSms": "Message SMS (par défaut)",
"smseagleMsgRing": "Appel sonore",
"smseagleMsgTts": "Appel avec synthèse vocale",
"smseagleMsgTtsAdvanced": "Appel texte vers parole (avancé)",
"smseagleDuration": "Durée (en secondes)",
"smseagleTtsModel": "ID du modèle de synthèse vocale",
"smseagleApiType": "Version de lAPI",
"smseagleApiv1": "API v1 (pour les projets existants et la compatibilité ascendante)",
"smseagleApiv2": "API v2 (recommandée pour les nouvelles intégrations)",
"smseagleDocs": "Vérifiez la documentation ou la disponibilité de lAPI v2 : {0}",
"smseagleComma": "Les multiples doivent être séparés par une virgule",
"SpugPush Template Code": "Code du modèle",
"FlashDuty Push URL": "URL de notification",
"FlashDuty Push URL Placeholder": "Copier depuis la page dintégration des alertes",
"pingCountLabel": "Nombre maximal de paquets",
"pingCountDescription": "Nombre de paquets à envoyer avant darrêter",
"pingNumericLabel": "Sortie numérique",
"pingGlobalTimeoutLabel": "Délai dattente global",
"pingGlobalTimeoutDescription": "Durée totale en secondes avant larrêt du ping, quel que soit le nombre de paquets envoyés",
"pingPerRequestTimeoutLabel": "Délai dattente par ping",
"pingIntervalAdjustedInfo": "Intervalle ajusté en fonction du nombre de paquets, du délai dattente global et du délai dattente par ping",
"Custom URL": "URL personnalisée",
"customUrlDescription": "Sera utilisée comme URL cliquable à la place de celle du moniteur.",
"OneChatAccessToken": "Jeton daccès OneChat",
"OneChatUserIdOrGroupId": "ID utilisateur ou ID de groupe OneChat",
"OneChatBotId": "ID du bot OneChat",
"ntfyPriorityHelptextPriorityHigherThanDown": "La priorité normale devrait être plus élevée que la priorité {0}. La priorité {1} est plus élevée que la priorité {0} {2}",
"ntfyPriorityDown": "Priorité pour les événements DOWN",
"Add Tags": "Ajouter des étiquettes",
"tagAlreadyOnMonitor": "Cette étiquette (nom et valeur) est déjà présente sur la sonde ou en attente d'ajout.",
"tagAlreadyStaged": "Cette étiquette (nom et valeur) est déjà préparée pour ce lot.",
"tagNameExists": "Une étiquette système portant ce nom existe déjà. Sélectionnez là dans la liste ou utilisez un autre nom.",
"Add Another Tag": "Ajouter une autre étiquette",
"Staged Tags for Batch Add": "Étiquettes préparées pour l'ajout en lot",
"Clear Form": "Réinitialiser le formulaire",
"pause": "Pause",
"Happy Eyeballs algorithm": "Algorithme Happy Eyeballs",
"Manual": "Manuel",
"Ip Family": "Famille d'adresses IP",
"ipFamilyDescriptionAutoSelect": "Utilise le {happyEyeballs} pour déterminer la famille d'adresses IP.",
"OAuth Audience": "Audience OAuth",
"Optional: The audience to request the JWT for": "Optionnel : Le public pour lequel demander le JWT",
"Path": "Chemin",
"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}",
"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

@@ -728,7 +728,7 @@
"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)",
"smseaglePriority": "Tosaíocht teachtaireachta (0-9, an tosaíocht is airde = 9)",
"Recipient Number": "Uimhir Faighteoir",
"From Name/Number": "Ó Ainm/Uimhir",
"Octopush API Version": "Leagan API Octopush",
@@ -859,7 +859,7 @@
"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",
"smseagleEncoding": "Seol mar Unicode (réamhshocrú=GSM-7)",
"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",
@@ -879,7 +879,7 @@
"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",
"wayToGetFlashDutyKey": "Chun Uptime Kuma a chomhtháthú le Flashduty: Téigh go Cainéil > Roghnaigh cainéal > Comhtháthúcháin > Cuir comhtháthú nua leis, roghnaigh Uptime Kuma, agus cóipeáil an URL Push.",
"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",
@@ -1053,5 +1053,82 @@
"Clear": "Glan",
"Elevator": "Ardaitheoir",
"Guitar": "Giotár",
"Scifi": "Ficsean eolaíochta"
"Scifi": "Ficsean eolaíochta",
"ipFamilyDescriptionAutoSelect": "Úsáideann sé {happyEyeballs} chun an teaghlach IP a chinneadh.",
"Happy Eyeballs algorithm": "Algartam Súile Sona",
"Ip Family": "Teaghlach IP",
"Manual": "Lámhleabhar",
"OAuth Audience": "Lucht Féachana OAuth",
"pingGlobalTimeoutLabel": "Am Teorann Domhanda",
"pingPerRequestTimeoutLabel": "Am Teorann In aghaidh an Phing",
"pingPerRequestTimeoutDescription": "Seo an t-am feithimh uasta (i soicindí) sula measfar go bhfuil paicéad ping amháin caillte",
"pingIntervalAdjustedInfo": "Eatramh coigeartaithe bunaithe ar chomhaireamh paicéad, am scoir domhanda agus am scoir in aghaidh an phing",
"Custom URL": "URL Saincheaptha",
"customUrlDescription": "Úsáidfear é mar an URL inchliceáilte in ionad URL an mhonatóra.",
"OneChatBotId": "Aitheantas Bot OneChat",
"Plain Text": "Téacs Gnáth",
"Disable URL in Notification": "Díchumasaigh URL san Fhógra",
"Add Another Tag": "Cuir Clib Eile leis",
"Staged Tags for Batch Add": "Clibeanna Céimnithe le haghaidh Cuir Baisc leis",
"Clear Form": "Foirm Glan",
"pause": "Sos",
"pingCountDescription": "Líon na bpacáistí le seoladh sula stopann tú",
"smsplanetApiDocs": "Is féidir faisnéis mhionsonraithe maidir le comharthaí API a fháil a fháil i {the_smsplanet_documentation}.",
"the smsplanet documentation": "an doiciméadú smsplanet",
"Phone numbers": "Uimhreacha gutháin",
"Sender name": "Ainm an tseoltóra",
"smsplanetApiToken": "Comhartha don SMSPlanet API",
"defaultFriendlyName": "Monatóir Nua",
"telegramUseTemplate": "Úsáid teimpléad teachtaireachta saincheaptha",
"telegramUseTemplateDescription": "Má tá sé cumasaithe, seolfar an teachtaireacht ag baint úsáide as teimpléad saincheaptha.",
"telegramServerUrlDescription": "Chun teorainneacha bot api Telegram a ardú nó rochtain a fháil i gceantair atá blocáilte (an tSín, an Iaráin, srl.). Le haghaidh tuilleadh eolais cliceáil {0}. Réamhshocrú: {1}",
"Use HTML for custom E-mail body": "Úsáid HTML le haghaidh corp saincheaptha ríomhphoist",
"smseagleGroupV2": "Aitheantóirí grúpa leabhar teileafóin",
"smseagleMsgType": "Cineál teachtaireachta",
"smseagleMsgTts": "Glao téacs-go-hurlabhra",
"smseagleApiv1": "APIv1 (do thionscadail atá ann cheana féin agus comhoiriúnacht siar)",
"Optional: The audience to request the JWT for": "Roghnach: An lucht féachana ar a n-iarrfar an JWT",
"pingCountLabel": "Uasmhéid Pacáistí",
"pingNumericDescription": "Más seiceáilte é, aschuirfear seoltaí IP in ionad ainmneacha óstach siombalacha",
"pingGlobalTimeoutDescription": "Am iomlán i soicindí sula stopann an ping, beag beann ar na paicéid a seoladh",
"smtpHelpText": "Déanann 'SMTPS' tástáil an bhfuil SMTP/TLS ag obair; ceanglaíonn 'Neamhaird a dhéanamh de TLS' thar théacs simplí; ceanglaíonn 'STARTTLS', eisíonn sé ordú STARTTLS agus fíoraíonn sé teastas an fhreastalaí. Ní sheolann aon cheann díobh seo ríomhphost.",
"OneChatAccessToken": "Comhartha Rochtana OneChat",
"OneChatUserIdOrGroupId": "Aitheantas Úsáideora OneChat nó Aitheantas Grúpa",
"wayToGetWahaSession": "Is é Eochair API luach athróg comhshaoil WHATSAPP_API_KEY a dúsáid tú chun WAHA a rith.",
"wayToWriteWahaChatId": "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 ID Grúpa ({2}). Seoltar fógraí chuig an ID Comhrá seo ó Sheisiún WAHA.",
"Font Twemoji by Twitter licensed under": "Cló Twemoji le Twitter ceadúnaithe faoi",
"smsplanetNeedToApproveName": "Ní mór é a cheadú sa phainéal cliant",
"wahaSession": "Seisiún",
"wahaChatId": "ID Comhrá (Uimhir Theileafóin / ID Teagmhála / ID Grúpa)",
"wayToGetWahaApiUrl": "URL dÁisnéis WAHA.",
"wayToGetWahaApiKey": "Is é Eochair API luach athróg comhshaoil WHATSAPP_API_KEY a d'úsáid tú chun WAHA a rith.",
"ntfyPriorityHelptextPriorityHigherThanDown": "Ba chóir go mbeadh an tosaíocht rialta níos airde ná tosaíocht {0}. Tá tosaíocht {1} níos airde ná tosaíocht {0} {2}",
"ntfyPriorityDown": "Tosaíocht do imeachtaí SÍOS",
"Message Template": "Teimpléad Teachtaireachta",
"Template Format": "Formáid Teimpléid",
"YZJ Robot Token": "Comhartha robot YZJ",
"YZJ Webhook URL": "YZJ Webhook URL",
"Add Tags": "Cuir Clibeanna leis",
"tagAlreadyOnMonitor": "Tá an clib seo (ainm agus luach) ar an monatóir cheana féin nó á cur leis ar feitheamh.",
"tagAlreadyStaged": "Tá an clib seo (ainm agus luach) curtha i láthair cheana féin don bhaisc seo.",
"tagNameExists": "Tá clib chórais leis an ainm seo ann cheana féin. Roghnaigh é ón liosta nó bain úsáid as ainm eile.",
"templateStatus": "stádas",
"telegramTemplateFormatDescription": "Ceadaíonn Telegram teangacha marcála éagsúla a úsáid le haghaidh teachtaireachtaí, féach Telegram {0} le haghaidh sonraí sonracha.",
"telegramServerUrl": "(Roghnach) URL an Fhreastalaí",
"smseagleContactV2": "Aitheantóirí teagmhála an leabhair teileafóin",
"smseagleMsgSms": "Teachtaireacht SMS (réamhshocraithe)",
"smseagleMsgRing": "Glaoigh glaoch",
"smseagleMsgTtsAdvanced": "Glao ardleibhéil téacs-go-hurlabhra",
"smseagleDuration": "Fad (i soicindí)",
"smseagleTtsModel": "Aitheantas samhail téacs-go-hurlabhra",
"smseagleApiType": "Leagan API",
"smseagleApiv2": "APIv2 (molta le haghaidh comhtháthúcháin nua)",
"smseagleDocs": "Seiceáil an doiciméadacht nó infhaighteacht APIv2: {0}",
"smseagleComma": "Ní mór ilchodanna a dheighilt le camóg",
"SpugPush Template Code": "Cód Teimpléid",
"FlashDuty Push URL": "Brúigh URL",
"FlashDuty Push URL Placeholder": "Cóipeáil ón leathanach comhtháthaithe foláirimh",
"pingNumericLabel": "Aschur Uimhriúil",
"templateServiceName": "ainm na seirbhíse",
"templateHostnameOrURL": "ainm óstach nó URL"
}

View File

@@ -704,8 +704,8 @@
"smseagleRecipientType": "Tip primatelja",
"smseagleToken": "Token za pristup API-ju",
"smseagleUrl": "URL Vašeg SMSEagle uređaja",
"smseagleEncoding": "Pošalji kao Unicode",
"smseaglePriority": "Prioritet poruke (0-9, zadana vrijednost je 0)",
"smseagleEncoding": "Pošalji kao Unicode (zadano=GSM-7)",
"smseaglePriority": "Prioritet poruke (0-9, gdje je 9 najveći prioritet)",
"Server URL should not contain the nfty topic": "URL poslužitelja ne smije sadržavati temu nfty",
"PushDeer Server": "PushDeer poslužitelj",
"Custom Monitor Type": "Prilagođeni tip Monitora",
@@ -773,7 +773,7 @@
"styleElapsedTimeShowWithLine": "Pokaži (s linijom)",
"recurringInterval": "Periodično",
"Recurring": "Ponavljajući",
"strategyManual": "Ručno aktivan/neaktivan",
"strategyManual": "Ručno aktivno/neaktivno",
"warningTimezone": "Koristi vremensku zonu poslužitelja",
"weekdayShortMon": "Pon",
"weekdayShortSun": "Ned",
@@ -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",
@@ -831,7 +831,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 'Uptime Kuma' da biste dobili push adresu. Zatim kopirajte integracijski ključ u adresu. Za više informacija posjetite",
"wayToGetFlashDutyKey": "Za integraciju Uptime Kume s Flashdutyjem: Idite na Channels > Select a channel > Integrations > Add a new integration, odaberite Uptime Kuma i kopirajte push adresu.",
"FlashDuty Severity": "Stupanj ozbiljnosti",
"nostrRelays": "Nostr releji",
"nostrRelaysHelp": "Jedan URL releja po liniji",
@@ -1111,5 +1111,70 @@
"wayToGetWahaSession": "Iz ove sjednice WAHA šalje obavijesti na identifikator razgovora. Može se pronaći na WAHA nadzornoj ploči.",
"wayToWriteWahaChatId": "Telefonski broj s međunarodnim prefiksom, ali bez znaka plus na početku ({0}), identifikator kontakta ({1}) ili identifikator grupe ({2}). Obavijesti se šalju na ovaj identifikator chata iz WAHA sesije.",
"telegramServerUrl": "(Neobvezno) URL Poslužitelja",
"telegramServerUrlDescription": "Za ukidanje ograničenja API-ja za botove Telegrama ili dobivanje pristupa u blokiranim područjima (Kina, Iran, itd.). Za više informacija kliknite {0}. Zadano: {1}"
"telegramServerUrlDescription": "Za ukidanje ograničenja API-ja za botove Telegrama ili dobivanje pristupa u blokiranim područjima (Kina, Iran, itd.). Za više informacija kliknite {0}. Zadano: {1}",
"Font Twemoji by Twitter licensed under": "Font Twemoji tvrtke X je pod licencom",
"the smsplanet documentation": "dokumentaciji usluge SMSPLANET",
"Phone numbers": "Brojevi telefona",
"Sender name": "Naziv pošiljatelja",
"smsplanetNeedToApproveName": "Potrebno je odobrenje u klijentskoj nadzornoj ploči",
"smsplanetApiToken": "Token za pristup SMSPLANET API-ju",
"smsplanetApiDocs": "Detaljne informacije o dobivanju tokena za API možete pronaći u {the_smsplanet_documentation}.",
"Happy Eyeballs algorithm": "algoritam Happy Eyeballs",
"Add Another Tag": "Dodaj novu oznaku",
"Staged Tags for Batch Add": "Pripremljene oznake za skupno dodavanje",
"pause": "Pauziraj",
"Use HTML for custom E-mail body": "Koristiti HTML za prilagođeno tijelo e-maila",
"smseagleGroupV2": "Identifikator(i) grupe telefonskog imenika",
"smseagleMsgType": "Tip poruke",
"smseagleMsgTtsAdvanced": "Napredni poziv s pretvaranjem teksta u govor",
"smseagleApiv1": "APIv1 (za postojeće projekte i povratnu kompatibilnost)",
"pingGlobalTimeoutDescription": "Ukupno vrijeme trajanja slanja (u sekundama), bez obzira na broj paketa",
"smtpHelpText": "'SMTPS' opcija provjerava radi li SMTP/TLS; 'Ignore TLS' dovodi do povezivanja koristeći običan tekst; 'STARTTLS' dovodi do izdavanja naredbe STARTTLS i provjere certifikata poslužitelja. Ništa od ovoga ne šalje e-poštu.",
"Ip Family": "IP verzija",
"ipFamilyDescriptionAutoSelect": "Koristi {happyEyeballs} za određivanje IP verzija.",
"Clear Form": "Očisti formu",
"defaultFriendlyName": "Novi Monitor",
"ntfyPriorityHelptextPriorityHigherThanDown": "Regularni prioritet treba biti veći od prioriteta {0}. Prioritet {1} je veći od prioriteta {0} {2}",
"ntfyPriorityDown": "Prioritet za incidente ispada",
"pingPerRequestTimeoutDescription": "Maksimalno vrijeme čekanja (u sekundama) prije nego što se pojedini paket smatra izgubljenim",
"Add Tags": "Dodaj oznake",
"tagAlreadyOnMonitor": "Ova oznaka (naziv i vrijednost) već je dodana na Monitor ili je njeno dodavanje na čekanju.",
"tagNameExists": "Već postoji sistemska oznaka s ovim nazivom. Odaberite ju iz popisa ili koristite drugi naziv.",
"tagAlreadyStaged": "Ova oznaka (naziv i vrijednost) već je pripremljena za ovaj skup Monitora.",
"smseagleContactV2": "Identifikator(i) kontakta telefonskog imenika",
"smseagleMsgSms": "SMS poruka (zadano)",
"smseagleMsgRing": "Poziv sa zvonom",
"smseagleMsgTts": "Poziv s pretvaranjem teksta u govor",
"smseagleDuration": "Trajanje (u sekundama)",
"smseagleTtsModel": "Identifikator modela za pretvaranje teksta u govor",
"smseagleApiType": "Inačica API-ja",
"smseagleApiv2": "APIv2 (preporučeno za nove integracije)",
"smseagleDocs": "Provjeriti dokumentaciju i dostupnost verzije APIv2: {0}",
"smseagleComma": "Višestruki izbori moraju se odvojiti zarezom",
"SpugPush Template Code": "Kôd predloška",
"FlashDuty Push URL": "Push adresa",
"FlashDuty Push URL Placeholder": "Kopirati sa stranice za integraciju",
"pingCountLabel": "Maks. paketa",
"pingCountDescription": "Ukupan broj paketa koji će se poslati",
"pingNumericLabel": "Brojčani ispis",
"pingNumericDescription": "Ako je odabrano, IP adrese bit će ispisane umjesto naziva domaćina",
"pingGlobalTimeoutLabel": "Globalno vremensko ograničenje",
"pingPerRequestTimeoutLabel": "Vremensko ograničenje jednog paketa",
"pingIntervalAdjustedInfo": "Interval koji se prilagođava broju paketa, globalnom vremenskom ograničenju i vremenskom ograničenju jednog paketa",
"Custom URL": "Prilagođena adresa",
"customUrlDescription": "Koristit će se kao adresa na koju monitor vodi, umjesto adrese Monitora.",
"OneChatAccessToken": "OneChat pristupni token",
"OneChatUserIdOrGroupId": "OneChat identifikator korisnika ili grupe",
"OneChatBotId": "OneChat identifikator bota",
"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",
"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

@@ -105,7 +105,7 @@
"disableauth.message2": "{intendThirdPartyAuth} prima di Uptime Kuma, come ad esempio Cloudflare Access.",
"where you intend to implement third-party authentication": "Questa opzione è per chi possiede un sistema di autenticazione gestito da terze parti",
"Please use this option carefully!": "Utilizzare con attenzione!",
"Logout": "Esci",
"Logout": "Disconnettiti",
"Leave": "Annulla",
"I understand, please disable": "Lo capisco, disabilitare l'autenticazione",
"Confirm": "Conferma",
@@ -153,7 +153,7 @@
"Setup 2FA": "Configura 2FA",
"Enable 2FA": "Abilita 2FA",
"Disable 2FA": "Disabilita 2FA",
"2FA Settings": "Gestisci l'autenticazione a due fattori",
"2FA Settings": "Gestisci 2FA",
"Two Factor Authentication": "Autenticazione a due fattori (2FA)",
"Active": "Attivata",
"Inactive": "Disattivata",
@@ -308,7 +308,7 @@
"clearDataOlderThan": "Mantieni lo storico per {0} giorni.",
"PasswordsDoNotMatch": "Le password non corrispondono.",
"records": "records",
"One record": "One record",
"One record": "Un record",
"steamApiKeyDescription": "Per monitorare un server di gioco Steam è necessaria una Web-API Key di Steam. È possibile registrarne una qui: ",
"Current User": "Utente corrente",
"recent": "Recenti",
@@ -450,7 +450,7 @@
"Domain Name Expiry Notification": "Notifica di scadenza del nome di dominio",
"Date Created": "Data di creazione",
"Slug": "Slug",
"Show Powered By": "Mostra Alimentato da",
"Show Powered By": "Mostra \"Poweerd By\"",
"Domain Names": "Nomi di dominio",
"signedInDispDisabled": "Autenticazione disabilitata.",
"RadiusSecret": "Radius Segreto",
@@ -742,5 +742,43 @@
"templateHostnameOrURL": "nome host o URL",
"templateStatus": "stato",
"templateServiceName": "nome del servizio",
"locally configured mail transfer agent": "agente mail configurato localmente"
"locally configured mail transfer agent": "agente mail configurato localmente",
"shrinkDatabaseDescriptionSqlite": "Un record",
"pushoversounds cashregister": "Registratore di cassa",
"Strategy": "Strategia",
"Add a domain": "Aggiungi un dominio",
"telegramServerUrl": "(Facoltativo) URL del Server",
"pushoversounds magic": "Magico",
"pushoversounds mechanical": "Meccanico",
"pushoversounds pianobar": "Piano Bar",
"pushoversounds siren": "Sirena",
"pushoversounds spacealarm": "Allarme spaziale",
"pushoversounds alien": "Allarme Alieno (lungo)",
"Remove domain": "Rimuovi il dominio '{0}'",
"Edit Tag": "Modifica il Tag",
"Server Address": "Indirizzo del Server",
"Expiry": "Scadenza",
"telegramUseTemplateDescription": "Se abilitato, il messaggio sarà spedito usando il template personalizzato.",
"high": "alto",
"jsonQueryDescription": "Analizza ed estrai dati specifici dalla risposta JSON del server utilizzando una query JSON oppure usa \"$\" per la risposta grezza, se non ti aspetti JSON. Il risultato viene quindi confrontato con il valore previsto, sotto forma di stringhe. Consulta {0} per la documentazione e usa {1} per sperimentare con le query.",
"Free Mobile User Identifier": "Identificatore utente mobile gratuito",
"telegramServerUrlDescription": "Per rimuovere le limitazioni dell'API bot di Telegram o ottenere l'accesso in aree bloccate (Cina, Iran, ecc.), clicca su {0} per maggiori informazioni. Predefinito: {1}",
"octopushLogin": "“Accedi” dalle credenziali API HTTP nel pannello di controllo",
"promosmsLogin": "Nome di accesso API",
"pushoversounds bike": "Bicicletta",
"pushoversounds bugle": "Bugle",
"pushoversounds classical": "Classico",
"pushoversounds cosmic": "Cosmico",
"pushoversounds incoming": "In arrivo",
"pushoversounds intermission": "Intervallo",
"pushoversounds tugboat": "Rimorchiatore",
"pushoversounds climb": "Salita (lunga)",
"pushoversounds persistent": "Persistente (lungo)",
"pushoversounds vibrate": "Solo vibrazione",
"wayToGetKookGuildID": "Attivare la “Modalità sviluppatore” nelle impostazioni di Kook e fare clic con il pulsante destro del mouse sulla gilda per ottenere il suo ID.",
"Guild ID": "Guild ID",
"Free Mobile API Key": "Chiave API mobile gratuita",
"telegramUseTemplate": "Utilizza un template di messaggio personalizzato",
"telegramTemplateFormatDescription": "Telegram permette l'utilizzo di diversi linguaggi di markup, vedi Telegram {0} per maggiori dettagli.",
"Add Tags": "Aggiungi Etichette"
}

View File

@@ -29,7 +29,7 @@
"Add New Monitor": "監視の追加",
"Quick Stats": "統計",
"Up": "正常",
"Down": "停止",
"Down": "異常",
"Pending": "待機中",
"Unknown": "不明",
"Pause": "一時停止",
@@ -749,7 +749,7 @@
"monitorToastMessagesDescription": "モニターのトースト通知は、指定された秒数後に消えます。-1に設定するとタイムアウトが無効になり、0に設定するとトースト通知が無効になります。",
"Pick a SASL Mechanism...": "SASLメカニズムを選択してください",
"noGroupMonitorMsg": "利用できません。先にグループモニターを作成してください。",
"wayToGetFlashDutyKey": "チャンネル -> (チャンネルを選択) -> 統合 -> 新しい統合を追加 のページに移動し、「Uptime Kuma」を追加してプッシュアドレスを取得し、アドレス内の統合キーをコピーしてください。詳細はこちら:",
"wayToGetFlashDutyKey": "UptimeKumaとFlashdutyを統合するには Channels > Select a channel > Integrations > Add a new integrationでUptime Kumaを選択し、Push URLをコピーしてください。",
"cacheBusterParamDescription": "キャッシュをスキップするためにランダム生成したパラメータ",
"gamedigGuessPortDescription": "Valve Server Query Protocolで使用されるポートはクライアントポートとは異なる場合があります。モニターがサーバーに接続できない場合は、この設定を試してください。",
"receiverInfoSevenIO": "受信側番号がドイツの番号ではない場合、番号の前に国コードを追加する必要がありますアメリカの国コード1の場合は、017612121212の代わりに117612121212を使用します。",
@@ -868,8 +868,8 @@
"smseagleRecipientType": "受信者タイプ",
"smseagleToken": "APIアクセストークン",
"smseagleUrl": "SMSEagleデバイスURL",
"smseagleEncoding": "Unicodeで送信",
"smseaglePriority": "メッセージ優先度 (0-9, default = 0)",
"smseagleEncoding": "Unicodeで送信 (default=GSM-7)",
"smseaglePriority": "メッセージ優先度 (0-9, 最大優先度 = 9)",
"smspartnerApiurl": "APIキーはダッシュボードから確認できます: {0}",
"smspartnerPhoneNumber": "電話番号",
"smspartnerSenderName": "SMS送信者名",
@@ -1085,5 +1085,62 @@
"telegramUseTemplate": "カスタムメッセージテンプレートを使用",
"telegramUseTemplateDescription": "有効にすると、メッセージはカスタムテンプレートを使って送信されます。",
"telegramTemplateFormatDescription": "Telegramではメッセージに異なるマークアップ言語を使用することができます。詳細はTelegram {0} を参照してください。",
"Font Twemoji by Twitter licensed under": "TwemojiフォントはTwitterライセンス下でライセンスされています"
"Font Twemoji by Twitter licensed under": "TwemojiフォントはTwitterライセンス下でライセンスされています",
"the smsplanet documentation": "smsplanetドキュメント",
"Phone numbers": "携帯電話番号",
"Sender name": "送信者名",
"smsplanetNeedToApproveName": "クライアントパネルでの承認が必要",
"smsplanetApiToken": "SMSPlanet APIのトークン",
"smsplanetApiDocs": "APIトークンの取得に関する詳細な情報は、{the_smsplanet_documentation}にあります。",
"Happy Eyeballs algorithm": "Happy Eyeballs アルゴリズム",
"Ip Family": "IPファミリー",
"ipFamilyDescriptionAutoSelect": "IPファミリーの決定に {happyEyeballs} を使用する。",
"Manual": "マニュアル",
"pingNumericLabel": "数値出力",
"pingGlobalTimeoutLabel": "グローバルタイムアウト",
"pingGlobalTimeoutDescription": "送信されたパケットに関係なく、pingが停止するまでの合計時間",
"pingPerRequestTimeoutLabel": "Pingごとのタイムアウト",
"pingIntervalAdjustedInfo": "パケット数、グローバルタイムアウト、Pingごとのタイムアウトに基づいて間隔を調整",
"OneChatUserIdOrGroupId": "OneChat ユーザーIDまたはグループID",
"OneChatBotId": "OneChat ボットID",
"Add Another Tag": "その他のタグを追加",
"Staged Tags for Batch Add": "一括追加用ステージタグ",
"Clear Form": "フォームをクリア",
"pause": "一時停止",
"tagNameExists": "この名前のシステムタグは既に存在します。リストから選択するか、別の名前を使用してください。",
"smseagleDocs": "ドキュメントまたはAPIv2の可用性をチェックする: {0}",
"OAuth Audience": "OAuth オーディエンス",
"Optional: The audience to request the JWT for": "オプション: JWTを要求するオーディエンス",
"pingCountDescription": "停止前に送信するパケット数",
"pingNumericDescription": "チェックした場合、シンボリックホスト名の代わりにIPアドレスが出力されます",
"pingPerRequestTimeoutDescription": "これは、1つのpingパケットが失われたとみなすまでの最大待機時間です",
"Disable URL in Notification": "通知のURLを無効にする",
"defaultFriendlyName": "新しいモニター",
"smseagleGroupV2": "電話帳グループID",
"smseagleContactV2": "電話帳連絡ID",
"ntfyPriorityHelptextPriorityHigherThanDown": "通常の優先度は {0} 優先度より高い必要があります。優先度 {1} は優先度 {0} 優先度 {2} よりも高い",
"ntfyPriorityDown": "ダウンイベントの優先順位",
"pingCountLabel": "最大パケット",
"Add Tags": "タグを追加",
"tagAlreadyOnMonitor": "このタグ(名前と値)はモニター上に既にあるか、追加待ちです。",
"tagAlreadyStaged": "このタグ(名前と値)は、このバッチに対して既にステージングされています。",
"Use HTML for custom E-mail body": "カスタムメール本文にHTMLを使用する",
"smseagleMsgType": "メッセージタイプ",
"smseagleMsgSms": "SMS メッセージ (デフォルト)",
"smseagleMsgRing": "呼び出し音",
"smseagleMsgTts": "音声合成通話",
"smseagleMsgTtsAdvanced": "音声合成高度通話",
"smseagleDuration": "継続時間(秒)",
"smseagleTtsModel": "音声合成モデルID",
"smseagleApiType": "API バージョン",
"smseagleApiv1": "APIv1 (既存プロジェクトおよび下位互換性用)",
"smseagleApiv2": "APIv2 (新規統合に推奨)",
"smseagleComma": "複数指定する場合はコンマで区切ってください",
"SpugPush Template Code": "テンプレートコード",
"FlashDuty Push URL": "Push URL",
"FlashDuty Push URL Placeholder": "アラート統合ページからコピー",
"smtpHelpText": "SMTPSは『SMTP/TLSが機能しているかテスト』Ignore TLSは『プレーンテキストで接続』STARTTLSは『接続し、STARTTLSコマンドを発行し、サーバー証明書を検証』いずれもメールを送信しない。",
"Custom URL": "カスタムURL",
"customUrlDescription": "モニターのURLの代わりにクリック可能なURLとして使用されます。",
"OneChatAccessToken": "OneChat アクセストークン"
}

View File

@@ -18,5 +18,26 @@
"Add": "დამატება",
"Add New Monitor": "ახალი მონიტორის დამატება",
"Down": "დაბლა",
"setupDatabaseChooseDatabase": "რომელი მონაცემთა ბაზის გამოყენება გსურთ?"
"setupDatabaseChooseDatabase": "რომელი მონაცემთა ბაზის გამოყენება გსურთ?",
"here": "აქ",
"Required": "აუცილებელი",
"high": "მაღალი",
"greater than": "მეტი",
"less than or equal to": "ნაკლები ან ტოლი",
"greater than or equal to": "მეტი ან ტოლი",
"record": "ჩანაწერი",
"Notification Channel": "შეტყობინებების არხი",
"Sound": "ხმა",
"less than": "ნაკლები",
"-hour": "-საათი",
"Friendly Name": "სახელი",
"hour": "საათი",
"-year": "-წელი",
"Response": "პასუხი",
"Ping": "პინგი",
"Monitor Type": "მონიტორის ტიპი",
"Keyword": "საკვანძო სიტყვა",
"Unknown": "უცნობი",
"dbName": "მონაცემთა ბაზის სახელი",
"Home": "მთავარი"
}

View File

@@ -1,26 +1,26 @@
{
"languageName": "한국어",
"checkEverySecond": "{0}초마다 확인해요",
"retryCheckEverySecond": "{0}초마다 다시 확인해요",
"retriesDescription": "서비스가 중단된 후 알림을 보내기 전 최대 재시도 횟수",
"ignoreTLSError": "HTTPS 웹사이트에서 TLS/SSL 오류 무시하기",
"upsideDownModeDescription": "서버 상태를 반대로 표시해요. 서버가 작동하면 오프라인으로 표시할 거예요.",
"maxRedirectDescription": "최대 리다이렉트 횟수예요. 0을 입력하면 리다이렉트를 꺼요.",
"checkEverySecond": "{0}초마다 확인",
"retryCheckEverySecond": "{0}초마다 재시도",
"retriesDescription": "서비스가 다운된 것으로 간주하고 알림을 보내기 전까지의 최대 재시도 횟수",
"ignoreTLSError": "HTTPS 웹사이트에서 TLS/SSL 오류 무시",
"upsideDownModeDescription": "상태를 반대로 표시합니다. 서비스에 연결 가능하면 '다운'으로 간주됩니다.",
"maxRedirectDescription": "최대 리디렉션 허용 횟수. 0으로 설정하면 리디렉션을 사용하지 않습니다.",
"acceptedStatusCodesDescription": "응답 성공으로 간주할 상태 코드를 정해요.",
"passwordNotMatchMsg": "비밀번호 재입력이 일치하지 않아요.",
"notificationDescription": "모니터알림을 설정할 수 있어요.",
"notificationDescription": "알림이 동작하려면 기존 모니터에 할당되어야 합니다.",
"keywordDescription": "HTML 이나 JSON에서 대소문자를 구분해 키워드를 검색해요.",
"pauseDashboardHome": "일시 정지",
"deleteMonitorMsg": "정말 이 모니터링을 삭제할까요?",
"deleteNotificationMsg": "정말 이 알림을 모든 모니터에서 삭제할까요?",
"pauseDashboardHome": "정지",
"deleteMonitorMsg": "이 모니터 삭제하시겠습니까?",
"deleteNotificationMsg": "이 알림을 모든 모니터에서 삭제하시겠습니까?",
"resolverserverDescription": "Cloudflare가 기본 서버예요, 원한다면 언제나 다른 Resolver 서버로 변경할 수 있어요.",
"rrtypeDescription": "모니터링할 RR-Type을 선택해요",
"pauseMonitorMsg": "정말 이 모니터링을 일시 정지할까요?",
"enableDefaultNotificationDescription": "새로 추가하는 모든 모니터에 이 알림을 기본적으로 활성화해요. 각 모니터에 대해 별도로 알림을 비활성화할 수 있어요.",
"clearEventsMsg": "정말 이 모니터링에 대한 모든 이벤트를 삭제할까요?",
"clearHeartbeatsMsg": "정말 이 모니터링에 대한 모든 하트비트를 삭제할까요?",
"rrtypeDescription": "모니터링할 RR Type을 선택하세요.",
"pauseMonitorMsg": "이 모니터 일시 정지하시겠습니까?",
"enableDefaultNotificationDescription": "새 모니터에 이 알림을 기본적으로 활성화합니다. 개별 모니터에 대해 알림을 비활성화할 수 있습니다.",
"clearEventsMsg": "이 모니터 모든 이벤트를 삭제하시겠습니까?",
"clearHeartbeatsMsg": "이 모니터 모든 하트비트를 삭제하시겠습니까?",
"confirmClearStatisticsMsg": "정말 모든 통계를 삭제할까요?",
"importHandleDescription": "이름이 같은 모든 모니터링이나 알림을 건너뛰려면 '기존 건너뛰기'를 선택해주세요. '덮어쓰기'는 기존의 모든 모니터링과 알림을 삭제해요.",
"importHandleDescription": "이름이 같은 모니터나 알림을 건너뛰려면 '기존 항목 건너뛰기'를 선택세요. '덮어쓰기'를 선택한 경우 존재하는 기존 모니터 알림을 모두 삭제합니다.",
"confirmImportMsg": "정말 백업을 가져올까요? 가져오기 옵션을 제대로 설정했는지 다시 확인해주세요.",
"twoFAVerifyLabel": "토큰을 입력해 2단계 인증이 작동하는지 확인해주세요",
"tokenValidSettingsMsg": "토큰이 유효해요! 이제 2단계 인증 설정을 저장할 수 있어요.",
@@ -28,17 +28,17 @@
"confirmDisableTwoFAMsg": "정말 2단계 인증을 비활성화할까요?",
"Settings": "설정",
"Dashboard": "대시보드",
"New Update": "새로운 업데이트",
"New Update": "새 업데이트",
"Language": "언어",
"Appearance": "디스플레이",
"Appearance": "모양",
"Theme": "테마",
"General": "일반",
"Version": "버전",
"Check Update On GitHub": "깃허브에서 업데이트 확인",
"Check Update On GitHub": "Github에서 업데이트 확인",
"List": "목록",
"Add": "추가",
"Add New Monitor": "새로운 모니터 추가하기",
"Quick Stats": "간단한 정보",
"Add New Monitor": "새 모니터 추가",
"Quick Stats": "요약",
"Up": "온라인",
"Down": "오프라인",
"Pending": "대기 중",
@@ -50,22 +50,22 @@
"Message": "메시지",
"No important events": "중요 이벤트 없음",
"Resume": "재개",
"Edit": "수정",
"Edit": "편집",
"Delete": "삭제",
"Current": "현재",
"Uptime": "업타임",
"Cert Exp.": "인증서 만료.",
"Cert Exp.": "인증서 만료",
"day": "일",
"-day": "-일",
"-day": "일",
"hour": "시간",
"-hour": "-시간",
"-hour": "시간",
"Response": "응답",
"Ping": "핑",
"Monitor Type": "모니터링 종류",
"Monitor Type": "모니터 타입",
"Keyword": "키워드",
"Friendly Name": "이름",
"Friendly Name": "별명",
"URL": "URL",
"Hostname": "호스트네임",
"Hostname": "호스트",
"Port": "포트",
"Heartbeat Interval": "하트비트 주기",
"Retries": "재시도",
@@ -73,46 +73,46 @@
"Advanced": "고급",
"Upside Down Mode": "상태 반전 모드",
"Max. Redirects": "최대 리다이렉트",
"Accepted Status Codes": "응답 성공 상태 코드",
"Accepted Status Codes": "허용된 상태 코드",
"Save": "저장",
"Notifications": "알림",
"Not available, please setup.": "존재하지 않아요. 새로운 거 하나 만드는 건 어때요?",
"Not available, please setup.": "아직 사용할 수 없습니다. 설정이 필요합니다.",
"Setup Notification": "알림 설정",
"Light": "이트",
"Light": "이트",
"Dark": "다크",
"Auto": "자동",
"Theme - Heartbeat Bar": "테마 - 하트비트 바",
"Normal": "기본값",
"Bottom": "가운데",
"Bottom": "하단",
"None": "없음",
"Timezone": "시간대",
"Search Engine Visibility": "검색 엔진 활성화",
"Search Engine Visibility": "검색 엔진 노출",
"Allow indexing": "인덱싱 허용",
"Discourage search engines from indexing site": "검색 엔진 인덱싱 거부",
"Discourage search engines from indexing site": "검색 엔진 인덱싱을 허용하지 않음",
"Change Password": "비밀번호 변경",
"Current Password": "기존 비밀번호",
"Current Password": "현재 비밀번호",
"New Password": "새 비밀번호",
"Repeat New Password": "새로운 비밀번호 재입력",
"Repeat New Password": "새 비밀번호 확인",
"Update Password": "비밀번호 변경",
"Disable Auth": "인증 비활성화",
"Enable Auth": "인증 활성화",
"disableauth.message1": "정말로 {disableAuth}?",
"disable authentication": "인증 기능을 끌까요",
"disableauth.message2": "이 기능은 {intendThirdPartyAuth}을 Uptime Kuma 앞에 둔 사용자를 위한 기능이에요.",
"where you intend to implement third-party authentication": "Cloudflare Access와 같은 서드파티 인증",
"disableauth.message1": "{disableAuth}하시겠습니까?",
"disable authentication": "인증을 비활성화",
"disableauth.message2": "이 기능은 Uptime Kuma 앞단에 Cloudflare Access, Authelia 등의 {intendThirdPartyAuth}을 위해 설계되었습니다.",
"where you intend to implement third-party authentication": "서드 파티 인증을 구현하는 상황",
"Please use this option carefully!": "신중하게 사용하세요!",
"Logout": "로그아웃",
"Leave": "나가기",
"I understand, please disable": "기능에 대해 이해했으니 꺼주세요.",
"Leave": "취소",
"I understand, please disable": "이해했습니다. 비활성화합니다.",
"Confirm": "확인",
"Yes": "확인",
"No": "취소",
"Username": "이름",
"Yes": "",
"No": "아니요",
"Username": "사용자명",
"Password": "비밀번호",
"Remember me": "비밀번호 기억하기",
"Remember me": "로그인 상태 유지",
"Login": "로그인",
"No Monitors, please": "모니터링이 현재 없어요,",
"add one": "한번 추가해보실래요?",
"No Monitors, please": "등록된 모니터가 없습니다.",
"add one": "추가하기",
"Notification Type": "알림 종류",
"Email": "이메일",
"Test": "테스트",
@@ -120,33 +120,33 @@
"Resolver Server": "Resolver 서버",
"Resource Record Type": "리소스 레코드 유형",
"Last Result": "최근 결과",
"Create your admin account": "관리자 계정 만들기",
"Repeat Password": "비밀번호 재입력",
"Create your admin account": "관리자 계정 생성",
"Repeat Password": "비밀번호 확인",
"Import Backup": "백업 가져오기",
"Export Backup": "백업 내보내기",
"Export": "내보내기",
"Import": "가져오기",
"respTime": "응답 시간 (ms)",
"notAvailableShort": "N/A",
"Default enabled": "기본 알림으로 설정",
"Apply on all existing monitors": "기존 모니터에 모두 적용하기",
"Create": "생성하기",
"Default enabled": "기본적으로 활성화",
"Apply on all existing monitors": "기존 모니터에 모두 적용",
"Create": "생성",
"Clear Data": "데이터 삭제",
"Events": "이벤트",
"Heartbeats": "하트비트",
"Auto Get": "자동 Get",
"backupDescription": "모든 모니터링과 알림을 JSON 파일 형식에 저장할 수 있어요.",
"Auto Get": "Auto Get",
"backupDescription": "모든 모니터 알림을 JSON 파일에 백업할 수 있습니다.",
"backupDescription2": "히스토리와 이벤트 데이터는 포함되어 있지 않아요.",
"backupDescription3": "알림 토큰과 같은 보안 데이터가 내보내기 파일에 포함되어 있으므로 관리에 주의해주세요.",
"alertNoFile": "가져오기를 하기 위해 파일을 선택해주세요.",
"alertWrongFileType": "JSON 파일을 선택해주세요.",
"Clear all statistics": "모든 통계 삭제",
"Skip existing": "기존 건너뛰기",
"alertNoFile": "가져 파일을 선택세요.",
"alertWrongFileType": "JSON 파일을 선택세요.",
"Clear all statistics": "모든 통계 삭제",
"Skip existing": "기존 항목 건너뛰기",
"Overwrite": "덮어쓰기",
"Options": "옵션",
"Keep both": "두개 모두 보존",
"Keep both": "모두 보존",
"Verify Token": "토큰 검증",
"Setup 2FA": "2단계 인증 설정하기",
"Setup 2FA": "2단계 인증 설정",
"Enable 2FA": "2단계 인증 활성화",
"Disable 2FA": "2단계 인증 비활성화",
"2FA Settings": "2단계 인증 설정",
@@ -154,34 +154,34 @@
"Active": "활성화",
"Inactive": "비활성화",
"Token": "토큰",
"Show URI": "URI 보기",
"Show URI": "URI 표시",
"Tags": "태그",
"Add New below or Select...": "아래 새롭게 추가 또는 선택…",
"Tag with this name already exist.": "같은 태그 이름이 이미 존재해요.",
"Tag with this value already exist.": "같은 값을 가진 태그가 이미 존재해요.",
"Add New below or Select...": "아래에서 선택하거나 추가…",
"Tag with this name already exist.": "동일한 이름의 태그가 이미 존재합니다.",
"Tag with this value already exist.": "동일한 값의 태그가 이미 존재합니다.",
"color": "색상",
"value (optional)": "값 (선택)",
"Gray": "회색",
"Red": "빨간색",
"Orange": "주황",
"Green": "초록",
"Blue": "파란색",
"Indigo": "남색",
"Purple": "보라",
"Pink": "핑크",
"Red": "빨",
"Orange": "주황",
"Green": "초록",
"Blue": "파",
"Indigo": "인디고",
"Purple": "보라",
"Pink": "핑크",
"Search...": "검색…",
"Avg. Ping": "평균 핑",
"Avg. Response": "평균 응답",
"Entry Page": "첫 페이지",
"statusPageNothing": "아무것도 없어요. 새로운 그룹 또는 모니터링을 추가해주세요.",
"statusPageNothing": "아무것도 없습니다. 새 그룹이나 모니터 추가세요.",
"No Services": "서비스 없음",
"All Systems Operational": "모든 시스템 정상",
"Partially Degraded Service": "일부 시스템 비정상",
"Degraded Service": "모든 시스템 비정상",
"All Systems Operational": "모든 시스템 작동 중",
"Partially Degraded Service": "일부 서비스 불안정",
"Degraded Service": "서비스 불안정",
"Add Group": "그룹 추가",
"Add a monitor": "모니터 추가",
"Edit Status Page": "상태 페이지 수정",
"Go to Dashboard": "대시보드로 가기",
"Add a monitor": "모니터 추가",
"Edit Status Page": "상태 페이지 편집",
"Go to Dashboard": "대시보드로",
"Status Page": "상태 페이지",
"Status Pages": "상태 페이지",
"defaultNotificationName": "내 {notification} 알림 ({number})",
@@ -198,8 +198,8 @@
"webhook": "Webhook",
"Post URL": "Post URL",
"Content Type": "Content Type",
"webhookJsonDesc": "{0}은 Express.js와 같은 최신 HTTP 서버에 적합해요",
"webhookFormDataDesc": "{multipart} PHP에 적합해요. {decodeFunction}를 기준으로 JSON을 디코딩하면 되어요",
"webhookJsonDesc": "{0}은(는) Express.js와 같은 모던 HTTP 서버에 적합합니다.",
"webhookFormDataDesc": "{multipart} PHP에 적합합니다. JSON은 {decodeFunction}을 사용해 파싱해야 합니다.",
"smtp": "Email (SMTP)",
"secureOptionNone": "없음 / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
@@ -215,26 +215,26 @@
"Prefix Custom Message": "접두사 메시지",
"Hello @everyone is...": "{'@'}everyone 서버 상태 알림이에요…",
"teams": "Microsoft Teams",
"Webhook URL": "웹훅 URL",
"Webhook URL": "Webhook URL",
"wayToGetTeamsURL": "{0}에서 Webhook을 어떻게 만드는지 알아보세요.",
"signal": "Signal",
"Number": "숫자",
"Recipients": "받는 사람",
"needSignalAPI": "REST API를 사용하는 Signal 클라이언트가 있어야 해요.",
"wayToCheckSignalURL": "밑에 URL을 확인해 URL 설정 방법을 볼 수 있어요:",
"signalImportant": "경고: 받는 사람의 그룹과 숫자는 섞을 수 없어요!",
"signalImportant": "중요: 수신자 그룹과 숫자는 섞을 수 없습니다!",
"gotify": "Gotify",
"Application Token": "애플리케이션 토큰",
"Server URL": "서버 URL",
"Priority": "우선 순위",
"slack": "Slack",
"Icon Emoji": "아이콘 이모지",
"Channel Name": "채널 이름",
"Channel Name": "채널",
"Uptime Kuma URL": "Uptime Kuma URL",
"aboutWebhooks": "Webhook에 대한 설명: {0}",
"aboutChannelName": "Webhook 채널을 무시하려면 {0} 채널 이름칸에 채널 이름을 입력해주세요. 예: #기타-채널",
"aboutKumaURL": "Uptime Kuma URL칸을 공백으로 두면 기본적으로 Github Project 페이지로 설정해요.",
"emojiCheatSheet": "이모지 목록 시트: {0}",
"aboutWebhooks": "Webhook에 대한 자세한 내용: {0}",
"aboutChannelName": "Webhook 채널을 바이패스하려면 {0}에 채널 이름을 입력세요. 예: #기타-채널",
"aboutKumaURL": "Uptime Kuma URL 필드를 공백으로 두면 기본적으로 Github Project 페이지로 설정합니다,",
"emojiCheatSheet": "이모지 목록: {0}",
"rocket.chat": "Rocket.chat",
"pushover": "Pushover",
"pushy": "Pushy",
@@ -263,9 +263,9 @@
"Example:": "예: {0}",
"Read more:": "더 보기: {0}",
"Status:": "상태: {0}",
"Read more": "더 보기",
"appriseInstalled": "Apprise가 설치되어있어요.",
"appriseNotInstalled": "Apprise가 설치되어있지 않아요. {0}",
"Read more": "더보기",
"appriseInstalled": "Apprise가 설치되어 있습니다.",
"appriseNotInstalled": "Apprise가 설치되지 않았습니다. {0}",
"Access Token": "액세스 토큰",
"Channel access token": "채널 액세스 토큰",
"Line Developers Console": "Line 개발자 콘솔",
@@ -284,10 +284,10 @@
"promosmsTypeSpeed": "SMS SPEED - 시스템에서 가장 높은 우선순위예요. 매우 빠르고 신뢰할 수 있지만 비용이 많이 들어요 (SMS 전체 가격의 약 두 배).",
"promosmsPhoneNumber": "전화 번호 (폴란드 수신자라면 지역번호를 적지 않아도 되어요.)",
"promosmsSMSSender": "SMS 보내는 사람 이름 : 미리 등록된 이름 혹은 기본값 중 하나예요: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Primary Base URL": "기본 URL",
"Primary Base URL": "주 베이스 URL",
"Push URL": "Push URL",
"needPushEvery": "이 URL을 {0} 초 마다 호출할 수 있어요.",
"pushOptionalParams": "선택적 파라미터: {0}",
"needPushEvery": "이 URL을 {0}초 마다 호출할 수 있습니다.",
"pushOptionalParams": "추가 파라미터: {0}",
"emailCustomSubject": "커스텀 주제",
"clicksendsms": "ClickSend SMS",
"checkPrice": "{0} 가격 확인:",
@@ -297,110 +297,110 @@
"matrixHomeserverURL": "Homeserver URL (http(s):// 와 함께 적어주세요. 그리고 포트 번호는 선택적 입니다.)",
"Internal Room Id": "내부 방 ID",
"matrixDesc1": "Matrix 클라이언트 방 설정의 고급 섹션에서 내부 방 ID를 찾을 수 있어요. 내부 방 ID는 이렇게 생겼답니다: !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "사용자의 모든 방에 대한 엑세스가 허용될 수 있어서 새로운 사용자를 만들고 원하는 방에만 초대한 후 엑세스 토큰을 사용하는 것이 좋아요. {0} 명령어를 통해 엑세스 토큰을 얻을 수 있어요",
"Method": "메서드",
"matrixDesc2": "개인 Matrix 사용자 계정의 액세스 토큰을 사용하는 것은 계정 전체와 참여 중인 모든 방에 완전한 접근 권한을 부여하게 되므로 권장되지 않습니다. 대신 새로운 사용자를 생성한 후 알림을 받을 방에만 초대하는 것을 권장합니다. 액세스 토큰은 {0} 명령어를 실행하여 얻을 수 있습니다.",
"Method": "Method",
"Body": "Body",
"Headers": "헤더",
"PushUrl": "Push URL",
"HeadersInvalidFormat": "요청 Headers의 JSON 형식이 올바르지 않아요: ",
"BodyInvalidFormat": "요청 Body의 JSON 형식이 올바르지 않아요: ",
"Monitor History": "모니터 기록",
"clearDataOlderThan": "모니터 기록을 {0}일 동안 저장해요.",
"PasswordsDoNotMatch": "비밀번호가 일치하지 않아요.",
"records": "records",
"HeadersInvalidFormat": "요청 헤더의 JSON 형식이 올바르지 않: ",
"BodyInvalidFormat": "요청 본문의 JSON 형식이 올바르지 않: ",
"Monitor History": "모니터 기록",
"clearDataOlderThan": "모니터 기록을 {0}일간 저장합니다.",
"PasswordsDoNotMatch": "비밀번호가 일치하지 않습니다.",
"records": "레코드",
"One record": "One record",
"steamApiKeyDescription": "스팀 게임 서버를 모니터링하려면 Steam Web API 키가 필요해요. API 키는 하단 웹사이트에서 등록할 수 있어요: ",
"steamApiKeyDescription": "Steam 게임 서버를 모니터링하려면 Steam Web-API 키가 필요합니다. 여기서 API 키를 등록하세요: ",
"Current User": "현재 사용자",
"recent": "최근",
"Done": "완료",
"Info": "정보",
"Security": "보안",
"Steam API Key": "스팀 API 키",
"Steam API Key": "Steam API 키",
"Shrink Database": "데이터베이스 축소",
"Pick a RR-Type...": "RR-Type을 골라주세요…",
"Pick Accepted Status Codes...": "상태 코드를 골라주세요…",
"Pick a RR-Type...": "RR-Type 선택…",
"Pick Accepted Status Codes...": "성공 상태 코드 선택…",
"Default": "기본",
"HTTP Options": "HTTP 옵션",
"Create Incident": "인시던트 만들기",
"Create Incident": "인시던트 생성",
"Title": "제목",
"Content": "내용",
"Style": "스타일",
"info": "정보",
"warning": "주의",
"danger": "경고",
"warning": "경고",
"danger": "위험",
"primary": "기본",
"light": "이트",
"light": "이트",
"dark": "다크",
"Post": "게시",
"Please input title and content": "제목 내용을 작성해주세요",
"Created": "생성 날짜",
"Last Updated": "마지막 업데이트",
"Please input title and content": "제목 내용을 입력하세요.",
"Created": "생성",
"Last Updated": "최근 수정",
"Unpin": "제거",
"Switch to Light Theme": "이트 테마로 전환",
"Switch to Light Theme": "이트 테마로 전환",
"Switch to Dark Theme": "다크 테마로 전환",
"Show Tags": "태그 보기",
"Show Tags": "태그 보기",
"Hide Tags": "태그 숨기기",
"Description": "설명",
"No monitors available.": "모니터링이 없어요.",
"No monitors available.": "사용 가능한 모니터가 없습니다.",
"Add one": "추가하기",
"No Monitors": "모니터 없음",
"Untitled Group": "이름없는 그룹",
"No Monitors": "모니터 없음",
"Untitled Group": "제목 없는 그룹",
"Services": "서비스",
"Discard": "취소",
"Cancel": "취소",
"Cancel": "닫기",
"Powered by": "Powered by",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Usename (webapi_ 접두사 포함)",
"serwersmsAPIUser": "API 사용자명 (webapi_ 접두사 포함)",
"serwersmsAPIPassword": "API 비밀번호",
"serwersmsPhoneNumber": "휴대전화 번호",
"serwersmsSenderName": "보내는 사람 이름 (customer portal를 통해 가입된 정보)",
"serwersmsPhoneNumber": "휴대 번호",
"serwersmsSenderName": "SMS 발신자명 (customer portal 가입된 정보)",
"stackfield": "Stackfield",
"dnsPortDescription": "DNS 서버 포트, 기본값은 53 이에요. 포트는 언제나 변경할 수 있어요.",
"PushByTechulus": "Push by Techulus",
"GoogleChat": "Google Chat (Google Workspace only)",
"topic": "Topic",
"topicExplanation": "모니터링할 MQTT Topic",
"topicExplanation": "모니터링할 MQTT 토픽",
"successMessage": "성공 메시지",
"successMessageExplanation": "성공으로 간주되는 MQTT 메시지",
"error": "오류",
"critical": "크리티컬",
"Customize": "커스터마이즈",
"Custom Footer": "커스텀 Footer",
"Custom CSS": "커스텀 CSS",
"critical": "중대",
"Customize": "사용자화",
"Custom Footer": "사용자 지정 푸터",
"Custom CSS": "사용자 지정 CSS",
"smtpDkimSettings": "DKIM 설정",
"smtpDkimDesc": "사용 방법은 DKIM {0} 참조하세요.",
"smtpDkimDesc": "사용 방법은 Nodemailer DKIM {0}을(를) 참조하세요.",
"documentation": "문서",
"smtpDkimDomain": "도메인 이름",
"smtpDkimKeySelector": "Key Selector",
"smtpDkimPrivateKey": "Private Key",
"smtpDkimPrivateKey": "비밀 키",
"smtpDkimHashAlgo": "해시 알고리즘 (선택)",
"smtpDkimheaderFieldNames": "서명할 헤더 키 (선택)",
"smtpDkimskipFields": "서명하지 않을 헤더 키 (선택)",
"wayToGetPagerDutyKey": "Service -> Service Directory -> (서비스 선택) -> Integrations -> Add integration. 에서 찾을 수 있어요. 자세히 알아보려면 {0}에서 \"Events API V2\"를 검색해봐요",
"wayToGetPagerDutyKey": "\"Events API V2\"는 Service -> Service Directory -> (서비스 선택) -> Integrations -> Add integration. 에서 찾을 수 있습니다. 자세한 내용 {0}",
"Integration Key": "Integration 키",
"Integration URL": "Integration URL",
"Auto resolve or acknowledged": "자동 해결 혹은 승인",
"Auto resolve or acknowledged": "자동 해결 또는 승인",
"do nothing": "아무것도 하지 않기",
"auto acknowledged": "자동 승인 (acknowledged)",
"auto resolve": "자동 해결 (resolve)",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "API Endpoint",
"alertaEnvironment": "환경변수",
"alertaApiEndpoint": "API 엔드포인트",
"alertaEnvironment": "환경",
"alertaApiKey": "API 키",
"alertaAlertState": "경고 상태",
"alertaRecoverState": "해결된 상태",
"deleteStatusPageMsg": "정말 이 상태 페이지를 삭제할까요?",
"alertaAlertState": "알림 상태",
"alertaRecoverState": "복구 상태",
"deleteStatusPageMsg": "이 상태 페이지를 삭제하시겠습니까?",
"Proxies": "프록시",
"default": "Default",
"default": "기본",
"enabled": "활성화",
"setAsDefault": "기본 프록시로 설정",
"deleteProxyMsg": "정말 이 프록시를 모든 모니터에서 삭제할까요?",
"proxyDescription": "프록시가 작동하려면 모니터에 할당되어야 해요.",
"enableProxyDescription": "이 프록시는 활성화될 때까지 영향을 미치지 않아요. 활성화 상태에 따라 모든 모니터에서 프록시를 일시정지할 수 있어요.",
"setAsDefaultProxyDescription": "새로 추가하는 모든 모니터에 이 프록시를 기본적으로 활성화해요. 각 모니터에 대해 별도로 프록시를 비활성화할 수 있어요.",
"setAsDefault": "기본로 설정",
"deleteProxyMsg": "이 프록시를 모든 모니터에서 삭제하시겠습니까?",
"proxyDescription": "프록시가 작동하려면 모니터에 할당되어야 합니다.",
"enableProxyDescription": "이 프록시는 활성화될 때까지 모니터의 요청에 미치지 않습니다. 활성화 상태를 통해 모든 모니터에서 프록시를 일시 정지할 수 있습니다.",
"setAsDefaultProxyDescription": "새 모니터에 이 프록시를 기본적으로 활성화합니다. 개별 모니터에 대해 프록시를 비활성화할 수 있습니다.",
"Certificate Chain": "인증서 체인",
"Valid": "유효",
"Valid": "유효",
"Invalid": "유효하지 않음",
"AccessKeyId": "AccessKey ID",
"SecretAccessKey": "AccessKey Secret",
@@ -425,17 +425,17 @@
"Proxy server has authentication": "프록시 서버에 인증 절차가 있음",
"User": "사용자",
"Installed": "설치됨",
"Not installed": "설치되어 있지 않음",
"Not installed": "설치되지 않음",
"Running": "작동 중",
"Not running": "작동하고 있지 않음",
"Remove Token": "토큰 제",
"Not running": "작동 중이 아님",
"Remove Token": "토큰 제",
"Start": "시작",
"Stop": "정지",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "새로운 상태 페이지 만들기",
"Slug": "주소",
"Add New Status Page": "새 상태 페이지 추가",
"Slug": "Slug",
"Accept characters:": "허용되는 문자열:",
"startOrEndWithOnly": "{0} 로 시작하거나 끝나야 해요",
"startOrEndWithOnly": "{0}로 시작하거나 끝나야 합니다.",
"No consecutive dashes": "연속되는 대시는 허용되지 않아요",
"Next": "다음",
"The slug is already taken. Please choose another slug.": "이미 존재하는 주소에요. 다른 주소를 사용해 주세요.",
@@ -469,7 +469,7 @@
"onebotGroupMessage": "그룹 메시지",
"onebotPrivateMessage": "개인 메시지",
"onebotUserOrGroupId": "그룹/사용자 ID",
"onebotSafetyTips": "안을 위해 Access 토큰을 설정하세요",
"onebotSafetyTips": "안을 위해 Access 토큰을 설정하세요.",
"PushDeer Key": "PushDeer 키",
"Footer Text": "Footer 문구",
"Show Powered By": "Powered By 문구 표시하기",
@@ -479,9 +479,9 @@
"Certificate Expiry Notification": "인증서 만료 알림",
"API Username": "API 사용자 이름",
"API Key": "API 키",
"Recipient Number": "받는 사람 번호",
"Recipient Number": "수신자 번호",
"From Name/Number": "발신자 이름/번호",
"Leave blank to use a shared sender number.": "공유 발신 번호를 사용하려면 공백으로 두세요.",
"Leave blank to use a shared sender number.": "공유 발신 번호를 사용하려면 공백으로 두세요.",
"Octopush API Version": "Octopush API 버전",
"Legacy Octopush-DM": "레거시 Octopush-DM",
"endpoint": "endpoint",
@@ -526,9 +526,9 @@
"Retype the address.": "주소 다시 입력하기.",
"Go back to the previous page.": "이전 페이지로 돌아가기.",
"Coming Soon": "Coming Soon",
"wayToGetClickSendSMSToken": "{0}에서 API 사용자 이름과 키를 얻을 수 있어요.",
"Custom Monitor Type": "커스텀 모니터",
"deleteDockerHostMsg": "정말 이 도커 호스트를 모든 모니터에서 삭제할까요?",
"wayToGetClickSendSMSToken": "{0}에서 API 사용자과 키를 얻을 수 있습니다.",
"Custom Monitor Type": "커스텀 모니터",
"deleteDockerHostMsg": "이 Docker 호스트를 모든 모니터에서 삭제하시겠습니까?",
"trustProxyDescription": "'X-Forwarded-*' 헤더를 신뢰해요. 올바른 클라이언트 IP를 얻어야하고Uptime Kuma가 Nginx나 Apache 같은 프록시 뒤에 있다면 이 기능을 활성화해야 해요.",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "프로필 이름(왼쪽 아래)을 클릭하고 아래로 스크롤한 다음 토큰 만들기를 클릭하여 장기 액세스 토큰을 만들 수 있어요. ",
"Then choose an action, for example switch the scene to where an RGB light is red.": "그런 다음 동작을 선택해요, 예를 들어 장면을 RGB 조명이 빨간색인 곳으로 전환해요.",
@@ -541,12 +541,12 @@
"You can divide numbers with": "다음과 같이 숫자를 구분할 수 있어요:",
"goAlertInfo": "GoAlert는 온콜 스케줄링, 자동 에스컬레이션 및 알림(SMS 또는 음성 통화와 같은)을 위한 오픈 소스 응용 프로그램이에요. 올바른 사람, 올바른 방법, 적절한 시간에 자동으로 참여하세요! {0}",
"smseagle": "SMSEagle",
"smseagleTo": "휴대전화 번호",
"smseagleRecipient": "받는 사람 (쉼표로 구분)",
"smseagleTo": "휴대 번호",
"smseagleRecipient": "수신자 (여러 명인 경우 쉼표로 구분)",
"Maintenance": "점검",
"statusMaintenance": "점검 중",
"resendEveryXTimes": "{0}번마다 다시 보내요",
"resendDisabled": "다시 보내지 않아요",
"resendEveryXTimes": "{0}번마다 재전송",
"resendDisabled": "재전송하지 않",
"loadingError": "데이터를 가져올 수 없어요, 나중에 다시 시도하세요.",
"plugin": "플러그인",
"install": "설치",
@@ -575,14 +575,14 @@
"Bark Group": "Bark 그룹",
"Bark Sound": "Bark 소리",
"promosmsAllowLongSMS": "긴 SMS 허용",
"smseagleGroup": "전화번호부 그룹 이름",
"smseagleContact": "전화번호부 연락처 이름",
"smseagleRecipientType": "받는 사람 종류",
"smseagleToken": "API 세스 토큰",
"smseagleGroup": "연락처 그룹명 목록",
"smseagleContact": "연락처 이름 목록",
"smseagleRecipientType": "수신자 종류",
"smseagleToken": "API 세스 토큰",
"smseagleUrl": "SMSEagle 기기 URL",
"smseagleEncoding": "유니코드로 보내기",
"smseagleEncoding": "유니코드로 전송 (기본값 = GSM-7)",
"smseaglePriority": "메시지 우선 순위 (0-9, 기본값= 0)",
"ntfy Topic": "ntfy 주제",
"ntfy Topic": "ntfy 토픽",
"HomeAssistant": "홈 어시스턴트",
"RadiusSecretDescription": "클라이언트와 서버 간의 비밀 키",
"RadiusSecret": "Radius 비밀 키",
@@ -594,7 +594,7 @@
"Request Timeout": "요청 타임아웃",
"Query": "쿼리",
"settingsCertificateExpiry": "TLS 인증서 만료",
"certificationExpiryDescription": "HTTPS 모니터링 TLS 인증서가 만료되면 알림을 활성화해요:",
"certificationExpiryDescription": "TLS 인증서가 설정된 기간 내에 만료될 경우, HTTPS 모니터가 알림을 전송합니다:",
"Setup Docker Host": "도커 호스트 설정",
"Docker Daemon": "도커 데몬",
"socket": "소켓",
@@ -623,7 +623,7 @@
"Event data:": "이벤트 데이터:",
"Frontend Version": "프론트엔드 버전",
"Frontend Version do not match backend version!": "프론트엔드 버전이 백엔드 버전과 일치하지 않아요!",
"confirmDeleteTagMsg": "정말 이 태그를 삭제할까요? 이 태그와 연결된 모니터링은 삭제되지 않아요.",
"confirmDeleteTagMsg": "이 태그를 삭제하시겠습니까? 이 태그와 연결된 모니터 삭제되지 않습니다.",
"infiniteRetention": "무한히 저장하려면 0으로 설정하세요.",
"backupRecommend": "대신 볼륨 또는 데이터 폴더 (./data/) 를 직접 백업하세요.",
"Optional": "선택",
@@ -670,64 +670,64 @@
"grpcMethodDescription": "메서드 이름은 sayHello, check와 같은 카멜 케이스로 변환되어요.",
"deleteMaintenanceMsg": "정말 이 점검을 삭제할까요?",
"recurringIntervalMessage": "매일 한 번 실행 | {0}일마다 한 번 실행",
"affectedMonitorsDescription": "현재 점검에 영향을 받는 모니터 선택하",
"affectedMonitorsDescription": "현재 유지보수에 영향을 받는 모니터 선택하세요.",
"affectedStatusPages": "점검 메시지를 표시할 상태 페이지 선택하기",
"Kook": "Kook",
"atLeastOneMonitor": "최소 1개의 모니터링을 선택하세요",
"atLeastOneMonitor": "적어도 1개 이상의 모니터 선택하세요.",
"wayToGetKookBotToken": "{0} 에서 애플리케이션을 만들고 봇 토큰을 얻어요",
"Help": "도움말",
"Game": "게임",
"General Monitor Type": "일반 모니터",
"Passive Monitor Type": "수동 모니터",
"Specific Monitor Type": "특정 모니터",
"General Monitor Type": "일반 모니터 유형",
"Passive Monitor Type": "수동 모니터 유형",
"Specific Monitor Type": "특정 모니터 유형",
"Monitor": "모니터",
"Resend Notification if Down X times consecutively": "X번 중단될 경우 알림 다시 보내기",
"Schedule maintenance": "점검 예약하기",
"Affected Monitors": "영향을 받는 모니터",
"Pick Affected Monitors...": "영향을 받는 모니터 선택하기…",
"Resend Notification if Down X times consecutively": "연속적인 다운으로 판단해 알림을 재전송할 기준 횟수",
"Schedule maintenance": "유지보수 예약",
"Affected Monitors": "영향을 받는 모니터",
"Pick Affected Monitors...": "영향을 받는 모니터 선택…",
"Start of maintenance": "점검 시작",
"All Status Pages": "모든 상태 페이지",
"Select status pages...": "상태 페이지 선택하기…",
"Custom": "커스텀",
"Select status pages...": "상태 페이지 선택…",
"Custom": "사용자 지정",
"webhookAdditionalHeadersTitle": "추가 헤더",
"webhookAdditionalHeadersDesc": "웹훅과 함께 전송 추가 헤더를 설정해요. 각각의 헤더는 JSON 키/값으로 구성되어야 해요.",
"webhookAdditionalHeadersDesc": "Webhook과 함께 전송되는 추가 헤더를 설정합니다. 각각의 헤더는 JSON 키/값으로 이루어져야 합니다.",
"HTTP Headers": "HTTP 헤더",
"Trust Proxy": "프록시 신뢰",
"API Keys": "API 키",
"markdownSupported": "Markdown 문법이 지원됨",
"markdownSupported": "마크다운 문법 사용 가능",
"telegramMessageThreadID": "(선택) 메시지 스레드 ID",
"Clone": "복제",
"cloneOf": "{0}의 복제본",
"Clone Monitor": "모니터 복제",
"Clone Monitor": "모니터 복제",
"telegramProtectContent": "포워딩/저장 보호",
"telegramProtectContentDescription": "활성화 할경우 텔레그램 봇 메시지는 포워딩 및 저장으로부터 보호됩니다.",
"telegramSendSilentlyDescription": "조용히 메시지를 보냅니다. 사용자들은 무음으로 알림을 받습니다.",
"telegramSendSilently": "무음 알림",
"Add New Tag": "태그 추가",
"Edit Tag": "태그 수정",
"Add New Tag": "태그 추가",
"Edit Tag": "태그 편집",
"Server Address": "서버 주소",
"Learn More": "자세히 알아보기",
"Continue": "계속",
"Key Added": "키 추가됨",
"No API Keys": "API 키 없음",
"disableAPIKeyMsg": "이 API키를 정말로 비활성화하시겠습니까?",
"deleteAPIKeyMsg": "이 API키를 정말로 삭제하시겠습니까?",
"disableAPIKeyMsg": "이 API 키를 비활성화하시겠습니까?",
"deleteAPIKeyMsg": "이 API 키를 삭제하시겠습니까?",
"Generate": "생성",
"Body Encoding": "Body 인코딩",
"Body Encoding": "본문(Body) 인코딩",
"Expiry": "만료",
"Expiry date": "만료 날짜",
"Expiry date": "만료",
"Don't expire": "만료되지 않음",
"notificationRegional": "지역별",
"Google Analytics ID": "Google Analytics ID",
"Google Analytics ID": "Google 애널리틱스 ID",
"Add API Key": "API 키 추가",
"apiKeyAddedMsg": "API 키가 추가되었습니다. 다시 표시되지 않을 것이므로 메모해 두세요.",
"apiKeyAddedMsg": "API 키가 추가되었습니다. 다시 표시되지 않므로 메모해 두세요.",
"pagertreeCritical": "긴급",
"apiKey-active": "사용 가능",
"apiKey-active": "활성",
"lunaseaUserID": "사용자 ID",
"apiKey-expired": "만료됨",
"Expires": "만료",
"Expires": "만료",
"twilioAuthToken": "인증 토큰 / API 키 시크릿",
"twilioFromNumber": "번호에서",
"twilioFromNumber": "발신 번호",
"twilioToNumber": "번호에서",
"twilioAccountSID": "계정 SID",
"pagertreeUrgency": "긴급",
@@ -739,75 +739,75 @@
"invalidCronExpression": "알수없는 Cron 값입니다: {0}",
"Add Another": "다른 항목 추가",
"apiKey-inactive": "비활성화",
"pagertreeIntegrationUrl": "Integration 링크",
"pagertreeIntegrationUrl": "Integration URL",
"pagertreeLow": "낮음",
"pagertreeMedium": "중간",
"pagertreeHigh": "높음",
"pagertreeResolve": "자동으로 해결하기",
"pagertreeResolve": "자동으로 해결",
"pagertreeDoNothing": "아무것도 하지 않음",
"wayToGetPagerTreeIntegrationURL": "PagerTree에서 Uptime Kuma 통합을 생성한 후 Endpoint를 복사합니다. 전체 세부 정보 보기 {0}",
"wayToGetPagerTreeIntegrationURL": "PagerTree에서 Uptime Kuma 통합을 생성한 후 엔드포인트를 복사합니다. 세부 정보 보기 {0}",
"lunaseaTarget": "대상",
"lunaseaDeviceID": "기기 ID",
"lunaseaDeviceID": "디바이스 ID",
"statusPageRefreshIn": "{0} 후 새로고침",
"telegramMessageThreadIDDescription": "포럼의 대상 메시지 쓰레드(주제)에 대한 선택적 고유 식별인, 포럼 관리자 그룹에만 해당",
"pagertreeSilent": "없음",
"setupDatabaseChooseDatabase": "어떤 데이터베이스를 사용하시겠습니까?",
"setupDatabaseEmbeddedMariaDB": "추가 설정 필요습니다. 이 도커 이미지에는 MariaDB가 내장되어 구성되어 있습니다. Uptime Kuma는 Unix Socket을 통해 데이터베이스에 연결합니다.",
"setupDatabaseEmbeddedMariaDB": "추가 설정 필요하지 않습니다. 이 도커 이미지에는 MariaDB가 자동으로 포함 및 구성되어 있으며, Uptime Kuma는 유닉스 소켓을 통해 데이터베이스에 연결합니다.",
"setupDatabaseMariaDB": "외부 MariaDB 데이터베이스에 연결합니다. 데이터베이스 연결 정보를 설정해야 합니다.",
"setupDatabaseSQLite": "소규모 배포에 권장되는 간단한 데이터베이스 파일입니다. v2.0.0 이전에는 Uptime Kuma가 SQLite를 기본 데이터베이스로 사용했습니다.",
"setupDatabaseSQLite": "소규모 배포에 권장되는 간단한 데이터베이스 파일입니다. Uptime Kuma는 v2.0.0 이전까지 SQLite를 기본 데이터베이스로 사용했습니다.",
"dbName": "데이터베이스 이름",
"filterActive": "활성",
"filterActivePaused": "일시지",
"filterActive": "활성",
"filterActivePaused": "일시지",
"Home": "홈",
"Cannot connect to the socket server": "소켓 서버에 연결 할 수 없습니다",
"Reconnecting...": " 연결중...",
"Cannot connect to the socket server": "소켓 서버에 연결할 수 없습니다.",
"Reconnecting...": "다시 연결하는 중...",
"Json Query": "JSON 쿼리",
"settingUpDatabaseMSG": "데이터베이스를 설정하는 중입니다. 시간이 걸릴 수 있으니 기다려 주세요.",
"settingUpDatabaseMSG": "데이터베이스를 설정하는 중입니다. 시간이 걸릴 수 있으니 잠시만 기다려 주세요.",
"enableNSCD": "모든 DNS 요청을 캐싱하기 위해 NSCD (Name Service Cache Daemon) 활성화",
"pushOthers": "기타",
"programmingLanguages": "프로그래밍 언어",
"Select": "선택",
"Edit Maintenance": "점검 수정하기",
"styleElapsedTime": "하트비트 바 밑의 지난 시간 표시",
"styleElapsedTimeShowNoLine": "보이기 (선 없음)",
"styleElapsedTimeShowWithLine": "보이기 (선 있음)",
"styleElapsedTime": "하트비트 바 아래 표시되는 경과 시간",
"styleElapsedTimeShowNoLine": "표시 (선 없음)",
"styleElapsedTimeShowWithLine": "표시 (선 있음)",
"chromeExecutable": "Chrome/Chromium 실행 파일",
"chromeExecutableAutoDetect": "자동 감지",
"Invert Keyword": "키워드 반전",
"Expected Value": "기값",
"Expected Value": "기값",
"Add a domain": "도메인 추가",
"Remove domain": "도메인 '{0}' 제거",
"Monitor Group": "모니터 그룹",
"Monitor Group": "모니터 그룹",
"Monitor Setting": "{0}의 모니터 설정",
"now": "지금",
"time ago": "{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": "연결하려는 서버의 호스트 이름을 입력하거나 {local_mta}를 사용하려는 경우 {localhost}를 입력합니다",
"-year": "-연도",
"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": "연결하려는 서버의 호스트 이름을 입력하거나, {local_mta}를 사용하려는 경우 {localhost}를 입력합니다.",
"-year": "",
"Json Query Expression": "Json 쿼리 표현식",
"Host URL": "호스트 URL",
"locally configured mail transfer agent": "로컬 구성된 메일 전송 에이전트",
"ignoreTLSErrorGeneral": "연결 TLS/SSL 오류 무시하기",
"locally configured mail transfer agent": "로컬 구성된 메일 전송 에이전트",
"ignoreTLSErrorGeneral": "연결 TLS/SSL 오류 무시",
"ignoredTLSError": "TLS/SSL 오류가 무시되었습니다",
"liquidIntroduction": "템플릿 생성은 Liquid 템플릿 언어를 통해 이루어집니다. 사용 지침은 {0}을 참조하세요. 사용 가능한 변수는 다음과 같습니다:",
"liquidIntroduction": "템플릿은 Liquid 템플릿 언어를 통해 생성됩니다. 사용은 {0}을 참조하세요. 사용 가능한 변수는 다음과 같습니다:",
"templateMsg": "알림 메시지",
"templateLimitedToUpDownCertNotifications": "업/다운/인증서 만료 알림에만 사용 가능",
"templateLimitedToUpDownNotifications": "UP/DOWN 알림에만 사용 가능",
"webhookBodyPresetOption": "프리셋 - {0}",
"templateLimitedToUpDownCertNotifications": "온라인/오프라인/인증서 만료 알림에만 사용 가능",
"templateLimitedToUpDownNotifications": "온라인/오프라인 알림에만 사용 가능",
"webhookBodyPresetOption": "사전 설정 - {0}",
"successKeyword": "성공 키워드",
"successKeywordExplanation": "성공으로 간주되는 MQTT 키워드",
"successKeywordExplanation": "성공으로 간주 MQTT 키워드",
"Reset Token": "토큰 초기화",
"Check/Uncheck": "체크/체크 해제",
"pushViewCode": "푸시 모니터는 어떻게 사용하나요? (코드 보기)",
"Search monitored sites": "모니터링중인 사이트 검색",
"templateHeartbeatJSON": "heartbeat를 설명하는 오브젝트",
"shrinkDatabaseDescriptionSqlite": "SQLite 데이터베이스에 {vacuum} 명령을 실행해요. {auto_vacuum}이 이미 활성화되어 있지만, {auto_vacuum}은 {vacuum}이 하는 것처럼 데이터베이스를 조각 모음 하거나 페이지를 다시 압축하지는 않아요.",
"pushViewCode": "푸시 모니터는 어떻게 사용하나요? (코드 보기)",
"Search monitored sites": "모니터링 중인 사이트 검색",
"templateHeartbeatJSON": "하트비트를 설명하는 오브젝트",
"shrinkDatabaseDescriptionSqlite": "SQLite 데이터베이스에 대해 {vacuum}을(를) 트리거합니다. {auto_vacuum}이 이미 활성화되어 있지만, 이는 데이터베이스를 조각 모음하거나 {vacuum} 명령어처럼 개별 데이터베이스 페이지를 다시 정리하지는 않습니다.",
"statusPageSpecialSlugDesc": "특별한 주소 {0}: 아무런 주소도 입력되지 않으면 이 페이지가 보여요",
"Add a new expiry notification day": "새 만료 알림 날짜 추가",
"Refresh Interval Description": "이 상태 페이지는 {0}초마다 완전 새로고침(F5) 돼요",
"telegramServerUrlDescription": "텔레그램 봇 API의 제한을 해제하거나, 차단된 지역(중국, 이란 등)에서 액세스하려면 {0}을 클릭하세요. 기본값: {1}",
"chromeExecutableDescription": "Docker 사용자의 경우, Chromium이 아직 설치되지 않았다면 이를 설치하고 테스트 결과를 표시하는 데 몇 분이 걸릴 수 있어요. 1GB의 디스크 공간을 사용해요.",
"templateMonitorJSON": "monitor를 설명하는 오브젝트",
"webhookBodyCustomOption": "커스텀 Body",
"templateMonitorJSON": "모니터를 설명하는 오브젝트",
"webhookBodyCustomOption": "사용자 지정 본문 (Body)",
"telegramServerUrl": "(선택) 서버 URL",
"and": "그리고",
"emailCustomisableContent": "사용자 지정 가능한 콘텐츠",
@@ -815,15 +815,15 @@
"leave blank for default subject": "기본값을 사용하려면 비워두세요",
"emailCustomBody": "커스텀 Body",
"leave blank for default body": "기본값을 사용하려면 비워두세요",
"templateServiceName": "서비스 이름",
"templateServiceName": "서비스",
"templateHostnameOrURL": "호스트명 또는 URL",
"templateStatus": "상태",
"selectedMonitorCount": "선택됨: {0}",
"Remove the expiry notification": "만료 알림 날짜 제거",
"Refresh Interval": "새로고침 주기",
"noDockerHostMsg": "사용할 수 없습니다. 먼저 도커 호스트를 설정하세요.",
"DockerHostRequired": "이 모니터링을 위한 도커 호스트를 설정해 주세요.",
"tailscalePingWarning": "Tailscale Ping 모니터링을 사용하려면 Docker 없이 Uptime Kuma를 설치하고 서버에 Tailscale 클라이언트도 설치해야 합니다.",
"DockerHostRequired": "이 모니터 위한 Docker 호스트를 설정해 주세요.",
"tailscalePingWarning": "Tailscale Ping 모니터 사용하려면 Docker를 사용하지 않고 Uptime Kuma를 설치해야 하며, 서버에 Tailscale 클라이언트도 설치해야 합니다.",
"telegramUseTemplate": "커스텀 메시지 템플릿 사용",
"telegramUseTemplateDescription": "활성화하면 메시지를 보낼 때 커스텀 템플릿을 사용해요.",
"telegramTemplateFormatDescription": "텔레그램은 메시지에 다양한 마크업 언어를 사용할 수 있어요. 자세한 내용은 텔레그램 {0}을 참조하세요.",
@@ -834,5 +834,62 @@
"Select message type": "메시지 유형 선택",
"Send to channel": "채널로 전송",
"Create new forum post": "새 포럼 게시물 만들기",
"Your User ID": "사용자 ID"
"Your User ID": "사용자 ID",
"emailTemplateMonitorJSON": "모니터를 설명하는 객체",
"postToExistingThread": "기존 스레드/포럼 게시물에 게시",
"forumPostName": "포럼 게시물 이름",
"threadForumPostID": "스레드 / 포럼 게시물 ID",
"e.g. {discordThreadID}": "예: {discordThreadID}",
"whatHappensAtForumPost": "새 포럼 게시물을 만드세요. 기존 게시물에는 메시지가 게시되지 않습니다. 기존 게시물에 게시하려면 \"{option}\"을 사용하세요",
"wayToGetDiscordThreadId": "스레드/포럼 게시물 ID를 얻는 것은 채널 ID를 얻는 것과 비슷합니다. ID를 얻는 방법에 대해 자세히 알아보세요. {0}",
"Channel access token (Long-lived)": "채널 액세스 토큰(장기)",
"invertKeywordDescription": "키워드가 존재하지 않는지 살펴보세요.",
"emailTemplateLimitedToUpDownNotification": "UP/DOWN 하트비트에만 사용 가능, 그렇지 않으면 null",
"tagAlreadyOnMonitor": "이 태그 (이름 및 값)은 이미 모니터에 있거나 추가 보류 중입니다.",
"tagNameExists": "이 이름을 가진 시스템 태그는 이미 존재합니다. 목록에서 선택하거나 다른 이름을 사용하세요.",
"Use HTML for custom E-mail body": "맞춤형 이메일 본문에 HTML을 사용하세요",
"jsonQueryDescription": "서버의 JSON 응답에서 JSON 쿼리를 사용하거나, JSON이 아닐 경우 원시 응답을 위해 \"$\"를 사용하여 특정 데이터를 파싱하고 추출합니다. 추출된 결과는 문자열로 기대값과 비교됩니다. 문서는 {0}을 참조하고, 쿼리 실험은 {1}을 사용하세요.",
"Don't mention people": "사람들을 멘션하지 마세요",
"Notify Channel": "알림 채널",
"aboutNotifyChannel": "채널 알림은 해당 채널의 모든 구성원에게 데스크톱 또는 모바일 알림을 전송하며, 이들은 상태가 활성으로 설정되어 있든 자리 비움으로 설정되어 있든 관계없이 알림을 받습니다.",
"smseagleMsgTtsAdvanced": "고급 텍스트 음성 변환 통화",
"smseagleApiv2": "APIv2 (새로운 연동에 권장됨)",
"smspartnerApiurl": "{0}에 있는 대시보드에서 API 키를 확인할 수 있습니다",
"Server URL should not contain the nfty topic": "서버 URL에 nfty 토픽을 포함해서는 안 됨",
"defaultFriendlyName": "새로운 모니터",
"smspartnerPhoneNumber": "전화번호(들)",
"Add Tags": "태그 추가",
"tagAlreadyStaged": "이 태그 (이름과 값)은 이미 이 배치에 대해 단계적으로 설정되어 있습니다.",
"emailTemplateHeartbeatJSON": "하트 비트를 설명하는 객체",
"pushoverMessageTtl": "메시지 TTL(초)",
"Bark API Version": "Bark API 버전",
"Mentioning": "멘토링",
"Mention group": "{group}을(를) 멘션",
"setup a new monitor group": "새 모니터 그룹 설정",
"openModalTo": "{0}을(를) 위한 모달 열기",
"aboutSlackUsername": "메시지 발신자의 표시 이름을 변경합니다. 누군가를 언급하려면, 친숙한 이름(friendly name)에 포함하세요.",
"smseagleGroupV2": "전화번호부 그룹 ID(들)",
"smseagleContactV2": "전화번호부 연락처 ID(들)",
"smseagleMsgType": "메시지 타입",
"smseagleMsgSms": "SMS 메시지 (기본값)",
"smseagleMsgRing": "통화 울리기",
"smseagleMsgTts": "텍스트 음성 변환 통화",
"smseagleDuration": "지속 시간 (초)",
"smseagleTtsModel": "텍스트 음성 변환 모델 ID",
"smseagleApiType": "API 버전",
"smseagleApiv1": "APIv1 (기존 프로젝트 및 하위 호환용)",
"smseagleDocs": "문서 또는 APIv2 사용 가능 여부를 확인하세요: {0}",
"smseagleComma": "여러 개를 입력할 경우 쉼표로 구분해야 합니다",
"smspartnerPhoneNumberHelptext": "번호는 국제 형식 {0}, {1}이어야 하며 여러 번호는 {2}로 구분해야 합니다",
"smspartnerSenderName": "SMS 발신자 이름",
"smspartnerSenderNameInfo": "3자 이상 11자 이하의 일반 문자여야 함",
"PushDeer Server": "PushDeer 서버",
"pushDeerServerDescription": "비워 두면 공식 서버를 사용함",
"SpugPush Template Code": "템플릿 코드",
"ntfyAuthenticationMethod": "인증 방법",
"ntfyPriorityHelptextAllEvents": "모든 이벤트는 최대 우선순위로 전송됨",
"twilioApiKey": "Api 키 (선택)",
"ntfyPriorityHelptextAllExceptDown": "우선 순위가 {1}인 {0}-이벤트를 제외한 모든 이벤트가 이 우선순위로 전송됩니다",
"ntfyUsernameAndPassword": "사용자명과 비밀번호",
"Show Clickable Link": "클릭 가능한 링크 표시"
}

View File

@@ -1108,5 +1108,18 @@
"templateStatus": "status",
"telegramUseTemplate": "Gebruik aangepaste bericht sjabloon",
"telegramTemplateFormatDescription": "Telegram staat het gebruik van verschillende opmaaktalen voor berichten toe, zie Telegram {0} voor specifieke details.",
"telegramUseTemplateDescription": "Indien ingeschakeld, wordt het bericht verzonden met een aangepaste sjabloon."
"telegramUseTemplateDescription": "Indien ingeschakeld, wordt het bericht verzonden met een aangepaste sjabloon.",
"Font Twemoji by Twitter licensed under": "Lettertype Twemoji van Twitter gelicentieerd onder",
"the smsplanet documentation": "de smsplanet documentatie",
"Phone numbers": "Telefoonnummers",
"Sender name": "Naam afzender",
"smsplanetNeedToApproveName": "Moet worden goedgekeurd in het clientpaneel",
"smsplanetApiToken": "Token voor de SMSPlanet API",
"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.",
"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

@@ -1117,5 +1117,12 @@
"templateStatus": "status",
"telegramUseTemplate": "Użyj niestandardowego szablonu wiadomości",
"telegramUseTemplateDescription": "Jeśli opcja ta jest włączona, wiadomość zostanie wysłana przy użyciu niestandardowego szablonu.",
"telegramTemplateFormatDescription": "Telegram pozwala na używanie różnych języków znaczników dla wiadomości, zobacz Telegram {0}, aby uzyskać szczegółowe informacje."
"telegramTemplateFormatDescription": "Telegram pozwala na używanie różnych języków znaczników dla wiadomości, zobacz Telegram {0}, aby uzyskać szczegółowe informacje.",
"Font Twemoji by Twitter licensed under": "Czcionka Twemoji autorstwa Twitter na licencji",
"smsplanetApiToken": "Token dla API SMSPlanet",
"smsplanetApiDocs": "Szczegółowe informacje na temat uzyskiwania tokenów API można znaleźć w {the_smsplanet_documentation}.",
"the smsplanet documentation": "dokumentacja smsplanet",
"Phone numbers": "Numery telefonów",
"Sender name": "Nazwa nadawcy",
"smsplanetNeedToApproveName": "Wymaga zatwierdzenia w panelu klienta"
}

View File

@@ -355,7 +355,7 @@
"smtpDkimskipFields": "Chaves Do Cabeçalho para não assinar (Opcional)",
"alertaEnvironment": "Ambiente",
"alertaRecoverState": "Estado De Recuperação",
"smseagleEncoding": "Enviar como Unicode",
"smseagleEncoding": "Enviar como Unicode (padrão=GSM-7)",
"onebotGroupMessage": "Grupo",
"onebotPrivateMessage": "Privado",
"onebotUserOrGroupId": "ID do Grupo/Usuário",
@@ -526,7 +526,7 @@
"promosmsAllowLongSMS": "Permitir SMS grandes",
"Huawei": "Huawei",
"smseagleTo": "Números Dos Telefones",
"smseaglePriority": "Prioridade da mensagem (0-9, padrão=0)",
"smseaglePriority": "Prioridade da mensagem (0-9, prioridade mais alta = 9)",
"dataRetentionTimeError": "O período de retenção tem que ser maior ou igual a 0",
"User Key": "Chave Do Usuário",
"Device": "Dispositivo",
@@ -820,7 +820,7 @@
"emailTemplateHeartbeatJSON": "objeto que descreve o batimento cardíaco",
"emailTemplateMsg": "mensagem da notificação",
"emailTemplateLimitedToUpDownNotification": "disponível apenas para pulsações UP/DOWN, caso contrário, nulo",
"wayToGetFlashDutyKey": "Você pode ir em Canal -> (Selecionar um Canal) -> Integrações -> Adicionar uma nova integração, adicione um 'Uptime Kuma' para obter um endereço de push, copie a Chave de Integração no endereço. Para mais informações, visite",
"wayToGetFlashDutyKey": "Para integrar o Uptime Kuma com o Flashduty: Acesse Canais > Selecionar um canal > Integrações > Adicionar uma nova integração, escolha Uptime Kuma e copie o URL de push.",
"FlashDuty Severity": "Gravidade",
"templateMsg": "mensagem da notificação",
"templateHeartbeatJSON": "objeto que descreve o batimento cardíaco",
@@ -978,7 +978,7 @@
"Add Remote Browser": "Adicionar Navegador Remoto",
"New Group": "Novo Grupo",
"Group Name": "Nome do Grupo",
"OAuth2: Client Credentials": "OAuth2: Client Credentials",
"OAuth2: Client Credentials": "OAuth2: Credenciais do Cliente",
"Authentication Method": "Método de Autenticação",
"Authorization Header": "Header de Autorização",
"ignoredTLSError": "Erros TLS/SSL foram ignorados",
@@ -1082,5 +1082,69 @@
"telegramServerUrl": "(Opcional) URL do Servidor",
"Message Template": "Modelo de Mensagem",
"Template Format": "Formato do Modelo",
"Font Twemoji by Twitter licensed under": "Fonte Twemoji do Twitter licenciada sob"
"Font Twemoji by Twitter licensed under": "Fonte Twemoji do Twitter licenciada sob",
"the smsplanet documentation": "a documentação do smsplanet",
"Phone numbers": "Números de telefone",
"Sender name": "Nome do remetente",
"smsplanetNeedToApproveName": "Precisa ser aprovado no painel do cliente",
"smsplanetApiToken": "Token para a API SMSPlanet",
"smsplanetApiDocs": "Informações detalhadas sobre a obtenção de tokens de API podem ser encontradas em {the_smsplanet_documentation}.",
"defaultFriendlyName": "Novo Monitor",
"Use HTML for custom E-mail body": "Use HTML para corpo de e-mail personalizado",
"smseagleGroupV2": "ID(s) do grupo da lista telefônica",
"smseagleTtsModel": "ID do modelo de conversão de texto em fala",
"smseagleDocs": "Verifique a documentação ou a disponibilidade da APIv2: {0}",
"pingCountDescription": "Número de pacotes a enviar antes de parar",
"pingGlobalTimeoutLabel": "Tempo limite global",
"pingGlobalTimeoutDescription": "Tempo total em segundos antes que o ping pare, independentemente dos pacotes enviados",
"pingIntervalAdjustedInfo": "Intervalo ajustado com base na contagem de pacotes, tempo limite global e tempo limite por ping",
"smtpHelpText": "'SMTPS' testa se o SMTP/TLS está funcionando; 'Ignorar TLS' conecta por texto simples; 'STARTTLS' conecta, emite um comando STARTTLS e verifica o certificado do servidor. Nenhum desses métodos envia um e-mail.",
"smseagleContactV2": "ID(s) de contato da lista telefônica",
"smseagleMsgType": "Tipo de mensagem",
"smseagleMsgSms": "Mensagem SMS (padrão)",
"smseagleMsgRing": "Chamada de toque",
"smseagleMsgTts": "Chamada de texto para fala",
"smseagleMsgTtsAdvanced": "Chamada avançada de conversão de texto em fala",
"smseagleDuration": "Duração (em segundos)",
"smseagleApiType": "Versão da API",
"smseagleApiv1": "APIv1 (para projetos existentes e compatibilidade com versões anteriores)",
"smseagleApiv2": "APIv2 (recomendado para novas integrações)",
"smseagleComma": "Múltiplos devem ser separados por vírgula",
"SpugPush Template Code": "Código do modelo",
"FlashDuty Push URL": "URL de envio",
"FlashDuty Push URL Placeholder": "Copiar da página de integração de alertas",
"pingCountLabel": "Máximo de Pacotes",
"pingNumericLabel": "Saída Numérica",
"pingNumericDescription": "Se marcado, os endereços IP serão emitidos em vez de nomes de host simbólicos",
"pingPerRequestTimeoutLabel": "Tempo limite por ping",
"pingPerRequestTimeoutDescription": "Este é o tempo máximo de espera (em segundos) antes de considerar um único pacote de ping perdido",
"Custom URL": "URL personalizada",
"customUrlDescription": "Será usado como URL clicável em vez do monitor.",
"OneChatAccessToken": "Token de acesso OneChat",
"OneChatUserIdOrGroupId": "ID de usuário ou ID de grupo do OneChat",
"OneChatBotId": "ID do bot OneChat",
"Disable URL in Notification": "Desativar URL na notificação",
"ntfyPriorityHelptextPriorityHigherThanDown": "A prioridade regular deve ser maior que {0} prioridade. Prioridade {1} é maior que {0} prioridade {2}",
"ntfyPriorityDown": "Prioridade para eventos DOWN",
"tagAlreadyOnMonitor": "Esta tag (nome e valor) já está no monitor ou na adição pendente.",
"tagNameExists": "Uma tag de sistema com este nome já existe. Selecione-o na lista ou use um nome diferente.",
"Add Tags": "Adicionar Tags",
"tagAlreadyStaged": "Esta tag (nome e valor) já está adicionada para este lote.",
"Add Another Tag": "Adicione Outra Tag",
"Staged Tags for Batch Add": "Tags preparadas para adição em lote",
"Clear Form": "Limpar formulário",
"pause": "Pausar",
"Happy Eyeballs algorithm": "Algoritmo Happy Eyeballs",
"Manual": "Manual",
"Ip Family": "Família IP",
"ipFamilyDescriptionAutoSelect": "Usa {happyEyeballs} para determinar a família IP.",
"Optional: The audience to request the JWT for": "Opcional: O público deve solicitar o JWT para",
"OAuth Audience": "Público OAuth",
"mqttWebSocketPath": "Caminho MQTT WebSocket",
"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}",
"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

@@ -192,8 +192,8 @@
"statusPageNothing": "Não tem nada aqui, adicione um grupo os monitor.",
"statusPageRefreshIn": "Atualize em: {0}",
"No Services": "Sem serviços",
"Partially Degraded Service": "Serviço parcialmente degradado",
"Degraded Service": "Serviços degradados",
"Partially Degraded Service": "Algumas funcionalidades estão indisponíveis",
"Degraded Service": "Serviço indisponível",
"Edit Status Page": "Editar página de status",
"Go to Dashboard": "Ir para o painel de controle",
"Status Page": "Status Page",
@@ -202,5 +202,20 @@
"Confirm": "Confirmar",
"pushOthers": "Outros",
"time ago": "{0} atrás",
"Dark": "Escuro"
"Dark": "Escuro",
"defaultFriendlyName": "Novo Monitor",
"Normal": "Normal",
"Allow indexing": "Permitir indexação",
"Discourage search engines from indexing site": "Desencorajar os mecanismos de busca de indexar o site",
"One record": "Um registro",
"topic": "Tópico",
"successKeyword": "Palavra-chave de sucesso",
"Timezone": "Fuso horário",
"PasswordsDoNotMatch": "As senhas não coincidem.",
"records": "registros",
"Current User": "Usuário Atual",
"recent": "Recente",
"Add New below or Select...": "Adicionar ou selecione um novo abaixo…",
"Bottom": "inferior",
"Default enabled": "Padrão ativado"
}

View File

@@ -1,10 +1,10 @@
{
"languageName": "Русский",
"languageName": "Английский",
"checkEverySecond": "Проверка каждые {0} секунд",
"retriesDescription": "Максимальное количество попыток перед пометкой сервиса, как недоступного, и отправкой уведомления",
"ignoreTLSError": "Игнорировать ошибки TLS/SSL для HTTPS сайтов",
"upsideDownModeDescription": "Инверсия статуса. Если сервис доступен, он будет отмечен как недоступный.",
"maxRedirectDescription": "Максимальное количество перенаправлений. Поставьте 0, чтобы отключить перенаправления.",
"retriesDescription": "Максимальное число попыток перед тем, как сервис будет помечен как неработающий и будет отправлено уведомление",
"ignoreTLSError": "Игнорировать ошибки TLS/SSL для сайтов с HTTPS",
"upsideDownModeDescription": "Инвертировать статус. Если сервис доступен — он считается НЕРАБОТАЮЩИМ.",
"maxRedirectDescription": "Максимальное число перенаправлений. Установите 0, чтобы отключить перенаправления.",
"acceptedStatusCodesDescription": "Выберите коды статусов для определения доступности сервиса.",
"passwordNotMatchMsg": "Введённые пароли не совпадают.",
"notificationDescription": "Необходимо привязать уведомления к монитору чтобы они функционировали.",
@@ -26,10 +26,10 @@
"Check Update On GitHub": "Проверить наличие обновления в GitHub",
"List": "Список",
"Add": "Добавить",
"Add New Monitor": "Добавить Новый Сенсор",
"Quick Stats": "Статистика",
"Add New Monitor": "Новый монитор",
"Quick Stats": "Сводка",
"Up": "Доступен",
"Down": "Не доступен",
"Down": "Недоступен",
"Pending": "В ожидании",
"Unknown": "Неизвестно",
"Pause": "Пауза",
@@ -43,7 +43,7 @@
"Delete": "Удалить",
"Current": "Текущий",
"Uptime": "Время безотказной работы",
"Cert Exp.": "Сертификат ист.",
"Cert Exp.": "Срок SSL",
"day": "день | дней",
"-day": "-дней",
"hour": "час",
@@ -56,7 +56,7 @@
"URL": "URL-ссылка",
"Hostname": "Имя хоста",
"Port": "Порт",
"Heartbeat Interval": "Частота опроса",
"Heartbeat Interval": "Интервал опроса",
"Retries": "Попыток",
"Advanced": "Дополнительно",
"Upside Down Mode": "Режим инверсии статуса",
@@ -208,10 +208,10 @@
"pushbullet": "Pushbullet",
"line": "Line Messenger",
"mattermost": "Mattermost",
"Primary Base URL": "Основной URL",
"Primary Base URL": "Основной URL, по которому доступен Uptime Kuma",
"Push URL": "URL-ссылка push уведомлений",
"needPushEvery": "К этому URL необходимо обращаться каждые {0} секунд.",
"pushOptionalParams": "Опциональные параметры: {0}",
"pushOptionalParams": "Необязательные параметры: {0}",
"defaultNotificationName": "Уведомления {notification} ({number})",
"here": "здесь",
"Required": "Обязательно",
@@ -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,15 +681,15 @@
"smseagleRecipient": "Получатель(и) (если множество, должны быть разделены запятой)",
"smseagleToken": "Токен доступа API",
"smseagleUrl": "URL вашего SMSEagle устройства",
"smseagleEncoding": "Отправить в юникоде",
"smseaglePriority": "Приоритет сообщения (0-9, по умолчанию = 0)",
"smseagleEncoding": "Отправить в юникоде (по умолчанию=GSM-7)",
"smseaglePriority": "Приоритет сообщения (0-9, высший приоритет = 9)",
"Server Address": "Адрес сервера",
"Learn More": "Узнать больше",
"topicExplanation": "MQTT топик для мониторинга",
"Guild ID": "Идентификатор гильдии",
"Kook": "Kook",
"wayToGetKookBotToken": "Создайте приложение и получите токен бота по адресу {0}",
"Resend Notification if Down X times consecutively": "Повторная отправка уведомления при неудачном запросе X раз",
"Resend Notification if Down X times consecutively": "Повторно отправлять уведомление, если сбой произошёл X раз подряд",
"telegramProtectContent": "Запретить пересылку/сохранение",
"telegramProtectContentDescription": "Если включено, сообщения бота в Telegram будут запрещены для пересылки и сохранения.",
"telegramSendSilently": "Отправить без звука",
@@ -699,7 +699,7 @@
"Clone": "Клонировать",
"cloneOf": "Копия {0}",
"notificationRegional": "Региональный",
"Add New Tag": "Добавить тег",
"Add New Tag": "Добавить новый тег",
"Body Encoding": "Тип содержимого запроса.(JSON or XML)",
"Strategy": "Стратегия",
"Free Mobile User Identifier": "Бесплатный мобильный идентификатор пользователя",
@@ -786,7 +786,7 @@
"Badge Label Suffix": "Суффикс надписи для значка",
"Edit Maintenance": "Редактировать техобслуживание",
"Reconnecting...": "Переподключение...",
"Cannot connect to the socket server": "Невозможно подключиться к серверу",
"Cannot connect to the socket server": "Не удаётся подключиться к сокет-серверу",
"Badge Warn Color": "Цвет значка для предупреждения",
"Badge Warn Days": "Значок для \"дней предупреждения\"",
"Badge Down Days": "Значок для \"дней недоступности\"",
@@ -829,7 +829,7 @@
"PushDeer Server": "Сервер PushDeer",
"pushDeerServerDescription": "Оставьте пустым для использования официального сервера",
"showCertificateExpiry": "Показывать истекающий сертификат",
"Request Timeout": "Тайм-Аут запроса",
"Request Timeout": "Таймаут ожидания",
"timeoutAfter": "Тайм-Аут через {0} секунд",
"Select": "Выбрать",
"selectedMonitorCount": "Выбрано: {0}",
@@ -850,12 +850,12 @@
"nostrRelaysHelp": "Один URL-адрес ретрансляции в каждой строке",
"enableNSCD": "Включить NSCD (Name Service Cache Daemon) для кэширования всех DNS-запросов",
"Saved.": "Сохранено.",
"setupDatabaseChooseDatabase": "Какую базу данных Вы бы хотели использовать?",
"setupDatabaseEmbeddedMariaDB": "Вам не нужно ничего настраивать. В этот докер-образ автоматически встроена и настроена MariaDB. Uptime Kuma будет подключаться к этой базе данных через unix-сокет.",
"setupDatabaseSQLite": "Простой файл базы данных, рекомендуемый для небольших развертываний. До версии 2.0.0 Uptime Kuma использовал SQLite в качестве базы данных по умолчанию.",
"setupDatabaseMariaDB": "Подключитесь к внешней базе данных MariaDB. Необходимо задать информацию о подключении к базе данных.",
"setupDatabaseChooseDatabase": "Какую базу данных вы хотите использовать?",
"setupDatabaseEmbeddedMariaDB": "Ничего настраивать не нужно. Этот образ Docker уже содержит встроенную и настроенную MariaDB. Uptime Kuma будет подключаться к базе данных через Unix-сокет.",
"setupDatabaseSQLite": "Простой файл базы данных, рекомендуется для небольших установок. До версии 2.0.0 Uptime Kuma использовал SQLite в качестве базы данных по умолчанию.",
"setupDatabaseMariaDB": "Подключение к внешней базе данных MariaDB. Необходимо указать информацию для подключения.",
"dbName": "Имя базы данных",
"pushViewCode": "Как использовать монитор Push? (Посмотреть код)",
"pushViewCode": "Как настроить Push-монитор? (Показать код)",
"programmingLanguages": "Языки программирования",
"Bark API Version": "Версия Bark API",
"monitorToastMessagesDescription": "Уведомления для мониторов исчезают через заданное время в секундах. Значение -1 отключает тайм-аут. Значение 0 отключает уведомления.",
@@ -907,14 +907,14 @@
"successKeyword": "Ключевое слово успеха",
"statusPageSpecialSlugDesc": "Специальный ярлык {0}: эта страница будет отображаться, если ярлык не указан",
"ntfyPriorityHelptextAllExceptDown": "Все события отправляются с этим приоритетом, кроме {0}-событий, которые имеют приоритет {1}",
"self-hosted container": "контейнер, который хоститься самостоятельно",
"self-hosted container": "контейнер, который хостится самостоятельно",
"remoteBrowserToggle": "По умолчанию Chromium работает внутри контейнера Uptime Kuma. Вы можете использовать удаленный браузер, переключив этот переключатель.",
"Remote Browsers": "Удаленные браузеры",
"Remote Browser": "Удаленный браузер",
"Add a Remote Browser": "Добавить удаленный браузер",
"Remote Browser not found!": "Удаленный браузер не найден!",
"remoteBrowsersDescription": "Удаленные браузеры — альтернатива локальному запуску Chromium. Установите такой сервис, как browserless.io, или подключитесь к своему собственному",
"settingUpDatabaseMSG": "Настраиваем базу данных. Это может занять некоторое время, пожалуйста подождите.",
"settingUpDatabaseMSG": "Настройка базы данных. Это может занять некоторое время, пожалуйста, подождите.",
"setup a new monitor group": "настроить новую группу мониторов",
"openModalTo": "открыть модальное окно {0}",
"Add a domain": "Добавить домен",
@@ -929,8 +929,8 @@
"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}",
"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": "Укажите имя хоста сервера, к которому хотите подключиться, или {localhost}, если планируете использовать {local_mta}",
"wayToGetHeiiOnCallDetails": "Как получить ID триггера и ключи API , рассказывается в {documentation}",
"gtxMessagingApiKeyHint": "Вы можете найти свой ключ API на странице: Мои учетные записи маршрутизации > Показать информацию об учетной записи > Учетные данные API > REST API (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Номер телефона / Адрес источника пути передачи (АИПП)",
@@ -978,7 +978,7 @@
"Refresh Interval Description": "Страница статуса будет полностью обновлена каждые {0} секунд",
"and": "и",
"e.g. {discordThreadID}": "например {discordThreadID}",
"ignoredTLSError": "Ошибки TLS/SSL проигнорированы",
"ignoredTLSError": "TLS/SSL ошибки не учитываются",
"Debug": "Отладка",
"Copy": "Скопировать",
"CopyToClipboardError": "Не удалось скопировать: {error}",
@@ -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",
@@ -1110,20 +1110,52 @@
"templateServiceName": "имя сервиса",
"templateHostnameOrURL": "hostname или URL",
"templateStatus": "статус",
"telegramServerUrlDescription": "Чтобы поднять ограничения API API Telegram или получить доступ к заблокированным районам (Китай, Иран и т.д.). Для получения дополнительной информации нажмите {0}. По умолчанию: {1}",
"wayToGetWahaApiKey": "Ключ API - это значение переменной среды WHATSAPP_API_KEY, которое вы использовали для запуска WAHA.",
"telegramServerUrlDescription": "Чтобы обойти ограничения API бота Telegram или получить доступ в заблокированных регионах (например, в Китае или Иране), нажмите {0} для получения подробной информации. Значение по умолчанию: {1}",
"wayToGetWahaApiKey": "Ключ API это значение переменной окружения WHATSAPP_API_KEY, которое вы использовали для запуска WAHA.",
"wayToGetWahaSession": "Из этой сессии WAHA отправляет уведомления на удостоверение личности чата. Вы можете найти его на приборной панели Waha.",
"wayToWriteWahaChatId": "Номер телефона с международным префиксом, но без знака плюс в начале ({0}), идентификатор контакта ({1}) или идентификатора группы ({2}). Уведомления отправляются на этот идентификатор чата от сеанса Waha.",
"wahaSession": "Сессия",
"wahaChatId": "Идентификатор чата (номер телефона / идентификатор контакта / идентификатор группы)",
"wayToGetWahaApiUrl": "Ваш экземпляр WAHA URL.",
"YZJ Webhook URL": "YZJ Вебхук URL",
"YZJ Webhook URL": "URL вебхука YZJ",
"YZJ Robot Token": "YZJ Токен Робота",
"telegramServerUrl": "(Необязательно) URL Сервера",
"telegramUseTemplate": "Используйте пользовательский шаблон сообщения",
"telegramUseTemplateDescription": "Если включено, сообщение будет отправлено с помощью пользовательского шаблона.",
"telegramTemplateFormatDescription": "Telegram позволяет использовать различные языки разметки для сообщений, см. Telegram {0} для конкретных деталей.",
"telegramTemplateFormatDescription": "Telegram позволяет использовать различные языки разметки в сообщениях. Подробности смотрите в документации Telegram {0}.",
"Plain Text": "Простой текст",
"Message Template": "Шаблон сообщения",
"Template Format": "Формат шаблона"
"Template Format": "Формат шаблона",
"Font Twemoji by Twitter licensed under": "Шрифт Twemoji от Twitter лицензирован на условиях",
"smsplanetApiToken": "Токен для API SMSPlanet",
"smsplanetApiDocs": "Подробную информацию о получении API-токенов можно найти в {the_smsplanet_documentation}.",
"the smsplanet documentation": "документация SMSPlanet",
"Phone numbers": "Номера телефонов",
"Sender name": "Имя отправителя",
"smsplanetNeedToApproveName": "Требуется одобрение в панели клиента",
"Add Tags": "Добавить тег",
"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

@@ -582,5 +582,171 @@
"Json Query Expression": "Výraz dotazu JSON",
"ignoredTLSError": "Chyby TLS/SSL boli ignorované",
"Add a new expiry notification day": "Pridať nové oznámenie o vypršaní platnosti",
"chromeExecutable": "Spustitelný súbor Chrome/Chromium"
"chromeExecutable": "Spustitelný súbor Chrome/Chromium",
"templateHostnameOrURL": "názov hostiteľa alebo URL",
"templateStatus": "stav",
"templateServiceName": "názov služby",
"telegramTemplateFormatDescription": "Telegram umožňuje používať rôzne značkovacie jazyky pre správy, podrobnosti nájdete v článku Telegram {0}.",
"recurringIntervalMessage": "Spustiť raz denne | Spustiť raz každých {0} dní",
"affectedMonitorsDescription": "Vyberte monitoringy, ktorých sa týka aktuálna údržba",
"keywordDescription": "Vyhľadajte kľúčové slovo v obyčajnej HTML alebo JSON odpovedi. Vyhľadávanie rozlišuje veľké a malé písmená.",
"backupDescription": "Všetky monitory a upozornenia si môžete zálohovať do súboru JSON.",
"backupDescription2": "Poznámka: história a údaje o udalostiach nie sú zahrnuté.",
"pushoversounds climb": "Stúpanie (dlhé)",
"pushoversounds persistent": "Trvalé (dlhé)",
"pushoversounds echo": "Pushover Echo (dlhé)",
"pushoversounds updown": "Hore dole (dlhé)",
"pushoversounds vibrate": "Iba vibrovanie",
"pushoversounds none": "Žiadne (tiché)",
"pushoversounds alien": "Mimozemský alarm (dlhý)",
"Apprise URL": "URL adresa oznámenia",
"Example:": "Príklad: {0}",
"Read more:": "Čítajte viac: {0}",
"LunaSea Device ID": "LunaSea ID zariadenia",
"Proxy Protocol": "Proxy protokol",
"Setup Proxy": "Nastavenie proxy servera",
"telegramUseTemplate": "Použiť vlastnú šablónu správy",
"telegramUseTemplateDescription": "Ak je povolená, správa sa odošle pomocou vlastnej šablóny.",
"Use HTML for custom E-mail body": "Použitie HTML v tele e-mailu",
"twoFAVerifyLabel": "Zadajte svoj token na overenie 2FA:",
"confirmEnableTwoFAMsg": "Naozaj chcete povoliť 2FA?",
"confirmDisableTwoFAMsg": "Naozaj chcete vypnúť 2FA?",
"affectedStatusPages": "Zobraziť túto správu o údržbe na vybraných stavových stránkach",
"notificationDescription": "Aby upozornenia fungovali, musia byť priradené k monitoringu.",
"invertKeywordDescription": "Hľadajte, či kľúčové slovo chýba, skôr ako to, že je prítomné.",
"backupDescription3": "Citlivé údaje, ako napríklad tokeny oznámení, sú zahrnuté v exportovanom súbore; export si, prosím, bezpečne uložte.",
"pushyAPIKey": "Tajný kľúč API",
"wayToGetKookBotToken": "Vytvorte si aplikáciu a získajte token bota na adrese {0}",
"wayToGetKookGuildID": "V nastavení Kook zapnite „Režim vývojára“ a kliknite pravým tlačidlom myši na guild, čím získate jeho ID",
"pushoverDesc1": "Priorita núdze (2) má predvolený 30-sekundový časový limit medzi opakovanými pokusmi a jeho platnosť vyprší po 1 hodine.",
"octopushLegacyHint": "Používate staršiu verziu Octopush (2011 2020) alebo novú verziu?",
"octopushSMSSender": "Meno odosielateľa SMS: 3 11 alfanumerických znakov a medzera (a z, A Z, 0 9)",
"You can divide numbers with": "Čísla môžete oddeliť pomocou",
"goAlertInfo": "GoAlert je aplikácia s otvoreným zdrojovým kódom na plánovanie pohotovostí, automatizované eskalácie a upozornenia (ako sú SMS alebo hlasové hovory). Automaticky oslovte správnu osobu správnym spôsobom a v správnom čase! {0}",
"For safety, must use secret key": "Z bezpečnostných dôvodov je potrebné použiť tajný kľúč",
"promosmsTypeFlash": "SMS FLASH Správa sa automaticky zobrazí na zariadení príjemcu. Obmedzené len na poľských príjemcov.",
"promosmsPhoneNumber": "Telefónne číslo (pre poľského príjemcu, môžete vynechať smerové čísla)",
"matrixDesc1": "Interné ID miestnosti nájdete v rozšírenej sekcii nastavení miestnosti vo vašom klientovi Matrix. Malo by vyzerať takto: !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Dôrazne sa odporúča vytvoriť nového používateľa a nepoužívať vlastný prístupový token používateľa Matrix, pretože vám to umožní plný prístup k vášmu účtu a všetkým miestnostiam, ku ktorým ste sa pripojili. Namiesto toho vytvorte nového používateľa a pozvite ho iba do miestnosti, v ktorej chcete dostávať upozornenia. Prístupový token získate spustením príkazu {0}",
"aboutKumaURL": "Ak necháte pole URL adresy Uptime Kuma prázdne, predvolene sa zobrazí stránka projektu GitHub.",
"PhoneNumbers": "Telefónne čísla",
"telegramServerUrl": "(Voliteľné) URL adresa servera",
"telegramServerUrlDescription": "Ak chcete zrušiť obmedzenia rozhrania API botov Telegramu alebo získať prístup v blokovaných oblastiach (Čína, Irán atď.), kliknite na {0}. Predvolené: {1}",
"Device": "Zariadenie",
"aboutSlackUsername": "Zmení zobrazované meno odosielateľa správy. Ak chcete niekoho spomenúť, uveďte ho v poli obecný názov.",
"smtpDkimSettings": "Nastavenia DKIM",
"defaultFriendlyName": "Nový Monitor",
"promosmsPassword": "Heslo API",
"WebHookUrl": "URL webhooku",
"Add Tags": "Pridať značky",
"tagAlreadyStaged": "Táto značka (názov a hodnota) je už pripravená pre tento batch.",
"tagAlreadyOnMonitor": "Táto značka (názov a hodota) je už použitá na inom monitoringu alebo čaká na pridanie.",
"tagNameExists": "Systémová značka s týmto názvom už existuje. Vyberte ju zo zoznamu alebo použite iný názov.",
"octopushAPIKey": "„Kľúč API“ z prihlasovacích údajov HTTP API v ovládacom paneli",
"octopushLogin": "„Prihlásenie“ z prihlasovacích údajov HTTP API v ovládacom paneli",
"pushoversounds pushover": "Pushover (predvolené)",
"pushoversounds bike": "Bicykel",
"pushoversounds bugle": "Trúbka",
"pushoversounds cashregister": "Pokladňa",
"pushoversounds classical": "Klasická",
"pushoversounds cosmic": "Kozmický",
"pushoversounds falling": "Padajúce",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "Prichádzajúce",
"pushoversounds intermission": "Prestávka",
"pushoversounds magic": "Kúzlo",
"pushoversounds mechanical": "Mechanické",
"pushoversounds pianobar": "Klávesa klavíra",
"pushoversounds siren": "Siréna",
"pushoversounds spacealarm": "Vesmírny alarm",
"pushoversounds tugboat": "Remorkér",
"pushyToken": "Token zariadenia",
"apprise": "Apprise (Podpora viac ako 50 notifikačných služieb)",
"GoogleChat": "Google Chat (iba Google Workspace)",
"Guild ID": "Guild ID",
"User Key": "Používateľský kľúč",
"Message Title": "Názov správy",
"Notification Sound": "Zvuk upozornenia",
"More info on:": "Viac informácií o: {0}",
"pushoverMessageTtl": "Správa TTL (sekundy)",
"pushoverDesc2": "Ak chcete posielať upozornenia na rôzne zariadenia, vyplňte pole Zariadenia.",
"SMS Type": "Typ SMS",
"octopushTypeLowCost": "Nízka cena (Pomalé - niekedy blokované operátorom)",
"octopushTypePremium": "Prémiový (Rýchle odporúča sa pre upozornenia)",
"checkPrice": "Skontrolujte ceny {0}:",
"apiCredentials": "Prihlasovacie údaje API",
"Check octopush prices": "Skontrolujte ceny Octopush {0}.",
"octopushPhoneNumber": "Telefónne číslo (medzinárodný formát, napr.: +33612345678) ",
"Status:": "Stav: {0}",
"Strategy": "Stratégia",
"Free Mobile User Identifier": "Bezplatný identifikátor mobilného používateľa",
"Free Mobile API Key": "Bezplatný kľúč mobilného API",
"Enable TLS": "Povoliť TLS",
"Proto Service Name": "Proto názov služby",
"Proto Method": "Proto metóda",
"Proto Content": "Proto obsah",
"Economy": "Úsporná",
"Lowcost": "Nízkonákladový",
"high": "vysoká",
"SendKey": "Kľúč k odoslaniu",
"SMSManager API Docs": "Dokumentácia k rozhraniu SMSManager API ",
"Gateway Type": "Typ brány",
"Base URL": "Základná URL adresa",
"goAlertIntegrationKeyInfo": "Získajte generický integračný kľúč API pre službu v tomto formáte „aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee“, zvyčajne hodnota parametra tokenu skopírovanej URL adresy.",
"AccessKeyId": "ID prístupového kľúča",
"SecretAccessKey": "Tajný prístupový kľúč",
"TemplateCode": "Kód šablóny",
"SignName": "Názov podpisu",
"Sms template must contain parameters: ": "Šablóna SMS musí obsahovať parametre: ",
"Bark API Version": "Verzia Bark API",
"Bark Endpoint": "Bark Endpoint",
"Bark Group": "Bark skupina",
"Bark Sound": "Bark zvuk",
"SecretKey": "Tajný Kľúč",
"Mentioning": "Zmienky",
"Don't mention people": "Nespomínajte ľudí",
"Mention group": "Spomeňte {skupinu}",
"Device Token": "Token zariadenia",
"Platform": "Platforma",
"Huawei": "Huawei",
"High": "Vysoký",
"Retry": "Opakovať",
"Topic": "Téma",
"WeCom Bot Key": "Kľúč WeCom Bota",
"Proxy Server": "Proxy server",
"Proxy server has authentication": "Proxy server má overenie",
"promosmsTypeEco": "SMS ECO lacné, ale pomalé a často preťažené. Obmedzené len na poľských príjemcov.",
"promosmsTypeFull": "SMS PLNÁ Prémiová úroveň SMS, môžete použiť meno odosielateľa (najprv si musíte meno zaregistrovať). Spoľahlivé pre upozornenia.",
"promosmsTypeSpeed": "RÝCHLA SMS - Najvyššia priorita v systéme. Veľmi rýchle a spoľahlivé, ale drahé (približne dvojnásobok ceny PLNEJ SMS).",
"promosmsSMSSender": "Meno odosielateľa SMS: Predregistrované meno alebo jedno z predvolených: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"promosmsAllowLongSMS": "Povoliť dlhé SMS",
"Feishu WebHookUrl": "URL adresa webhooku Feishu",
"matrixHomeserverURL": "URL adresa domáceho servera (s http(s://) a voliteľným portom)",
"Internal Room Id": "Vnútorné ID miestnosti",
"Channel Name": "Názov kanála",
"Notify Channel": "Upozorniť kanál",
"aboutNotifyChannel": "Upozornenie kanála spustí upozornenie na ploche alebo mobilnom zariadení pre všetkých členov kanála, bez ohľadu na to, či sú aktívni alebo neprítomní.",
"Uptime Kuma URL": "URL adresa Uptime Kuma",
"setup a new monitor group": "nastaviť novú skupinu pre monitoring",
"openModalTo": "otvoriť modálne okno do {0}",
"Add a domain": "Pridať doménu",
"Remove domain": "Odstrániť doménu „{0}“",
"Icon Emoji": "Ikona emotikonu",
"signalImportant": "DÔLEŽITÉ: V zozname príjemcov nemôžete kombinovať skupiny a čísla!",
"aboutWebhooks": "Viac informácií o webhookoch na: {0}",
"aboutChannelName": "Ak chcete obísť kanál Webhook, zadajte názov kanála do poľa Názov kanála {0}. Napr.: #iny-kanal",
"smtpDkimDesc": "Použitie nájdete v dokumentácii Nodemailer DKIM {0}.",
"documentation": "dokumentácia",
"smtpDkimDomain": "Názov domény",
"smtpDkimKeySelector": "Výber kľúča",
"smtpDkimPrivateKey": "Súkromný kľúč",
"smtpDkimHashAlgo": "Hašovací algoritmus (voliteľné)",
"importHandleDescription": "Ak chcete preskočiť všetky monitory alebo upozornenia s rovnakým názvom, vyberte možnosť „Preskočiť existujúce“. Možnosť „Prepísať“ vymaže všetky existujúce monitory a upozornenia.",
"confirmImportMsg": "Naozaj chcete importovať zálohu? Skontrolujte, či ste vybrali správnu možnosť importu.",
"atLeastOneMonitor": "Vyberte aspoň jeden monitor, ktorého sa to týka",
"passwordNotMatchMsg": "Opakované heslo sa nezhoduje.",
"jsonQueryDescription": "Analyzujte a extrahujte konkrétne údaje z JSON odpovede servera pomocou JSON dotazu alebo použite „$“ pre surovú odpoveď, ak sa neočakáva JSON. Výsledok sa potom porovná s očakávanou hodnotou ako reťazec. Dokumentáciu nájdete v {0} na experimentovanie s dotazmi {1}.",
"promosmsLogin": "Prihlasovacie meno API",
"tokenValidSettingsMsg": "Token je platný! Teraz môžete uložiť nastavenia 2FA.",
"endpoint": "koncový bod (endpoint)"
}

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

@@ -28,20 +28,20 @@
"confirmDisableTwoFAMsg": "คุณแน่ใจหรือไม่ที่จะปิดใช้งาน 2FA?",
"Settings": "การตั้งค่า",
"Dashboard": "แผงควบคุม",
"New Update": "อัเดใหม่",
"New Update": "อัเดใหม่",
"Language": "ภาษา",
"Appearance": "หน้าตา",
"Appearance": "ลักษณะการแสดงผล",
"Theme": "ธีม",
"General": "ทั่วไป",
"Primary Base URL": "URL หลัก",
"Version": "เวอร์ชัน",
"Version": "เวอร์ชัน",
"Check Update On GitHub": "ตรวจสอบการอัปเดตบน GitHub",
"List": "รายการ",
"Add": "เพิ่ม",
"Add New Monitor": "เพิ่มมอนิเตอร์ใหม่",
"Quick Stats": "สถิติอย่างย่อ",
"Up": "ใช้งานได้",
"Down": "ไม่สามารถใช้งานได้",
"Quick Stats": "สรุปสถานะ",
"Up": "ทำงานปกติ",
"Down": "ทำงานล้มเหลว",
"Pending": "รอดำเนินการ",
"Unknown": "ไม่ทราบ",
"Pause": "หยุดชั่วคราว",
@@ -98,12 +98,12 @@
"Current Password": "รหัสผ่านปัจจุบัน",
"New Password": "รหัสผ่านใหม่",
"Repeat New Password": "ยืนยันรหัสผ่านใหม่",
"Update Password": "อัเดรหัสผ่าน",
"Update Password": "อัเดรหัสผ่าน",
"Disable Auth": "ปิดใช้งานการตรวจสอบสิทธิ์",
"Enable Auth": "เปิดใช้งานการตรวจสอบสิทธิ์",
"disableauth.message1": "คุณต้องการที่จะ {disableAuth}?",
"disable authentication": "ปิดใช้งานระบบรับรองความถูกต้องใช่หรือไม่",
"disableauth.message2": "ระบบนี้ถูกออกแบบมาเพื่อการใช้งานกับระบบรับรองความถูกต้องของบุคคลที่สามเช่น Cloudflare Access, Authelia หรือวิธีการอื่นๆ",
"disableauth.message2": "ถูกออกแบบมาสำหรับกรณีที่มี {intendThirdPartyAuth} อยู่หน้าระบบ Uptime Kuma เช่น Cloudflare Access, Authelia หรือกลไกการตรวจสอบสิทธิ์อื่น ๆ",
"Please use this option carefully!": "โปรดใช้ความระมัดระวังในการเลือกใช้งานระบบนี้ !",
"Logout": "ออกจากระบบ",
"Leave": "ออก",
@@ -174,7 +174,7 @@
"Purple": "ม่วง",
"Pink": "ชมพู",
"Search...": "ค้นหา…",
"Avg. Ping": "ค่า Ping เฉลี่ย",
"Avg. Ping": "ค่าปิงเฉลี่ย",
"Avg. Response": "ค่า Response เฉลี่ย",
"Entry Page": "หน้าต้อนรับ",
"statusPageNothing": "ไม่มีอะไรตรงนี้ !, กรุณาเพิ่มกลุ่มหรือมอนิเตอร์",
@@ -300,7 +300,7 @@
"Internal Room Id": "รหัสห้องภายใน",
"matrixDesc1": "คุณค้นหารหัสห้องภายในได้โดยดูในส่วนขั้นสูงของการตั้งค่าห้องในไคลเอ็นต์ Matrix มันควรจะมีลักษณะเช่น !PMdRCpsIfLwsfjIye6:kiznick.server.",
"matrixDesc2": "ขอแนะนำเป็นอย่างยิ่งให้คุณสร้างผู้ใช้ใหม่และอย่าใช้โทเค็นการเข้าถึงของผู้ใช้ Matrix ของคุณเอง เนื่องจากจะทำให้สามารถเข้าถึงบัญชีของคุณและห้องทั้งหมดที่คุณเข้าร่วม ให้สร้างผู้ใช้ใหม่และเชิญเฉพาะห้องที่คุณต้องการรับการแจ้งเตือนแทน คุณสามารถรับโทเค็นเพื่อการเข้าถึงได้โดยเรียกใช้ {0}",
"Method": "วิธี",
"Method": "เมทอด",
"Body": "เนื้อหา",
"Headers": "ส่วนหัว",
"PushUrl": "Push URL",
@@ -340,7 +340,7 @@
"Post": "โพสต์",
"Please input title and content": "กรุณาใส่ชื่อและเนื้อหา",
"Created": "สร้าง",
"Last Updated": "อัเดล่าสุด",
"Last Updated": "อัเดล่าสุด",
"Unpin": "เลิกตรึง",
"Switch to Light Theme": "เปลี่ยนเป็นแบบสว่าง",
"Switch to Dark Theme": "เปลี่ยนเป็นแบบมืด",
@@ -380,7 +380,7 @@
"alertaApiKey": "กุญแจ API",
"alertaAlertState": "แจ้งเตือนสถานะ",
"alertaRecoverState": "กู้คืนสถานะ",
"deleteStatusPageMsg": "คุณแน่ใจหรือไม่ว่าต้องการลบหน้าสถานะนี้",
"deleteStatusPageMsg": "คุณแน่ใจหรือไม่ว่าต้องการลบหน้าสถานะนี้?",
"Proxies": "พร็อกซี",
"default": "ค่าเริ่มต้น",
"enabled": "เปิดใช้งานแล้ว",
@@ -462,12 +462,12 @@
"PushDeer Key": "กุญแจ PushDeer",
"Footer Text": "ข้อความส่วนท้าย",
"Show Powered By": "แสดงข้อความ \"ขับเคลื่อนโดย\"",
"Domain Names": "Domain Names",
"Domain Names": "ชื่อโดเมน",
"signedInDisp": "เข้าใช้งานในฐานะ {0}",
"signedInDispDisabled": "ปิดการยืนยันตัวตน",
"Certificate Expiry Notification": "แจ้งเตือนใบรับรองหมดอายุ",
"API Username": "API Username",
"API Key": "API Key",
"API Username": "ชื่อผู้ใช้ของ API",
"API Key": "API คีย์",
"Recipient Number": "หมายเลขผู้รับ",
"From Name/Number": "จาก ชื่อ / หมายเลข",
"Leave blank to use a shared sender number.": "ไม่ต้องกรอกเพื่อใช้ชื่อผู้ส่งร่วมกัน",
@@ -477,32 +477,32 @@
"octopushAPIKey": "\"API key\" จากข้อมูลยืนยันตัวตน HTTP API ในแผงควบคุม",
"octopushLogin": "\"Login\" จากข้อมูลยืนยันตัวตน HTTP API ในแผงควบคุม",
"promosmsLogin": "API Login Name",
"promosmsPassword": "API Password",
"promosmsPassword": "รหัสผ่าน API",
"pushoversounds pushover": "Pushover (default)",
"pushoversounds bike": "Bike",
"pushoversounds bugle": "Bugle",
"pushoversounds cashregister": "Cash Register",
"pushoversounds bike": "จักรยาน",
"pushoversounds bugle": "บักเกิล",
"pushoversounds cashregister": "เครื่องคิดเงิน",
"pushoversounds classical": "Classical",
"pushoversounds cosmic": "Cosmic",
"pushoversounds falling": "Falling",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "Incoming",
"pushoversounds intermission": "Intermission",
"pushoversounds magic": "Magic",
"pushoversounds mechanical": "Mechanical",
"pushoversounds pianobar": "Piano Bar",
"pushoversounds siren": "Siren",
"pushoversounds spacealarm": "Space Alarm",
"pushoversounds tugboat": "Tug Boat",
"pushoversounds alien": "Alien Alarm (long)",
"pushoversounds climb": "Climb (long)",
"pushoversounds cosmic": "คอสมิก",
"pushoversounds falling": "ตก",
"pushoversounds gamelan": "ระนาด",
"pushoversounds incoming": "กำลังมา",
"pushoversounds intermission": "ช่วงพัก",
"pushoversounds magic": "แมจิก",
"pushoversounds mechanical": "เครื่องกล",
"pushoversounds pianobar": "เปียโนบาร์",
"pushoversounds siren": "ไซเรน",
"pushoversounds spacealarm": "สัญญาณเตือนอวกาศ",
"pushoversounds tugboat": "เรือโยง",
"pushoversounds alien": "แจ้งเตือน เอเลี่ยน (ยาว)",
"pushoversounds climb": "ไต่เขา (ยาว)",
"pushoversounds persistent": "Persistent (long)",
"pushoversounds echo": "Pushover Echo (long)",
"pushoversounds updown": "Up Down (long)",
"pushoversounds vibrate": "Vibrate Only",
"pushoversounds none": "None (silent)",
"pushoversounds updown": "ขึ้นลง (ยาว)",
"pushoversounds vibrate": "สั่นอย่างเดียว",
"pushoversounds none": "ไม่มี (เงียบ)",
"pushyAPIKey": "Secret API Key",
"pushyToken": "Device token",
"pushyToken": "โทเคน ของอุปกรณ์",
"Show update if available": "แสดงการอัปเดตถ้ามี",
"Also check beta release": "ตรวจสอบรุ่นเบต้า",
"Using a Reverse Proxy?": "ใช้ Reverse Proxy อยู่ใช่มั้ย?",
@@ -534,7 +534,7 @@
"Bark Sound": "เสียงประกาศ",
"Authentication": "การตรวจสอบสิทธิ์",
"HTTP Headers": "HTTP Headers",
"Trust Proxy": "Trust Proxy",
"Trust Proxy": "เชื่อถือพร็อกซี",
"HomeAssistant": "Home Assistant",
"RadiusSecret": "Radius Secret",
"RadiusSecretDescription": "แบ่งปันคีย์ลับระหว่างผู้ใช้งานและเซิร์ฟเวอร์",
@@ -553,9 +553,9 @@
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Docker Container",
"Container Name / ID": "Container Name / ID",
"Docker Host": "Docker Host",
"Docker Hosts": "Docker Hosts",
"Container Name / ID": "ชื่อ / ไอดี ของคอนเทนเนอร์",
"Docker Host": "โฮสต์ของ Docker",
"Docker Hosts": "โฮสต์ของ Docker",
"ntfy Topic": "หัวข้อ ntfy",
"Domain": "โดเมน",
"Workstation": "Workstation",
@@ -576,7 +576,7 @@
"Frontend Version": "เวอร์ชั่น Frontend",
"Frontend Version do not match backend version!": "เวอร์ชั่น Frontend ไม่ตรงกับ Backend !",
"webhookAdditionalHeadersTitle": "Header เพิ่มเติม",
"webhookAdditionalHeadersDesc": "กำหนด Header ที่จะส่งไปหร้อมกับ Webhook",
"webhookAdditionalHeadersDesc": "กำหนด Header ที่จะส่งไปหร้อมกับ Webhook โดยแต่ละ header ควรระบุในรูปแบบ key/value แบบ JSON",
"Start of maintenance": "เริ่มการซ่อมบำรุง",
"All Status Pages": "หน้าสถานะทั้งหมด",
"Custom": "กำหนดเอง",
@@ -592,8 +592,8 @@
"Pick Affected Monitors...": "เลือกมอนิเตอร์ที่ได้รับผลกระทบ…",
"Packet Size": "ขนาดของ Packet",
"ZohoCliq": "ZohoCliq",
"backupOutdatedWarning": "ไม่ได้รับการพัฒนาแล้ว : ไม่สามารถสร้างหรือกูข้อมูลสำรองได้สมบูรณ์ เนื่องจากมีฟีเจอร์ใหม่เพิ่มขึ้นมากและการแบ็อัไม่ได้ถูกพัฒนา",
"backupRecommend": "กรุณาแบ็อัข้อมูลทั้งหมดหรือโฟลเดอร์ Data (./data/) โดยตรงแทน",
"backupOutdatedWarning": "ไม่ได้รับการพัฒนาแล้ว : ไม่สามารถสร้างหรือกูข้อมูลสำรองได้สมบูรณ์ เนื่องจากมีฟีเจอร์ใหม่เพิ่มขึ้นมากและการแบ็อัไม่ได้ถูกพัฒนา",
"backupRecommend": "กรุณาแบ็อัข้อมูลทั้งหมดหรือโฟลเดอร์ Data (./data/) โดยตรงแทน",
"Optional": "ไม่จำเป็น",
"squadcast": "Squadcast",
"or": "หรือ",
@@ -638,7 +638,7 @@
"lastDay3": "วันที่ 3 สุดท้ายของเดือน",
"lastDay4": "วันที่ 4 สุดท้ายของเดือน",
"No Maintenance": "ไม่มีการบำรุงรักษา",
"pauseMaintenanceMsg": "แน่ใจไหมว่าต้องการหยุดชั่วคราว",
"pauseMaintenanceMsg": "แน่ใจไหมว่าต้องการหยุดชั่วคราว?",
"Display Timezone": "แสดงเขตเวลา",
"statusPageMaintenanceEndDate": "จบ",
"Server Timezone": "เขตเวลาเซิร์ฟเวอร์",
@@ -647,7 +647,7 @@
"telegramProtectContentDescription": "หากเปิดใช้งาน ข้อความบอทใน Telegram จะได้รับการปกป้องจากการส่งต่อและการบันทึก",
"dnsCacheDescription": "อาจจะทำงานไม่ได้กับ IPv6, ปิดใช้งานถ้าเจอปัญหา",
"IconUrl": "URL ไอคอน",
"Enable DNS Cache": "เปิดใช้งาน DNS Cache",
"Enable DNS Cache": "(เลิกใช้แล้ว) เปิดใช้งานแคช DNS สำหรับตัวตรวจสอบ HTTP(s)",
"Enable": "เปิดใช้งาน",
"Disable": "ปิดใช้งาน",
"Single Maintenance Window": "หน้าการปรับปรุงเดี่ยว",
@@ -676,12 +676,12 @@
"timeoutAfter": "หมดเวลาหลังจาก {0} วินาที",
"Select": "เลือก",
"Expected Value": "ค่าที่คาดหวัง",
"setupDatabaseChooseDatabase": "ฐานข้อมูลไหนที่ต้องการใช้าน?",
"setupDatabaseChooseDatabase": "คุณต้องการใช้านข้อมูลใด?",
"setupDatabaseEmbeddedMariaDB": "คุณไม่จำเป็นต้องทำอะไร Docker image จะสร้างและตั่งค่า MariaDB ให้โดยอัตโนมัติ Uptime Kuma จะเชื่อมต่อกับฐานข้อมูลนี้ด้วย unix socket",
"setupDatabaseMariaDB": "เชื่อมต่อไปยัง MariaDB ภายนอก คุณจำเป็นจะต้องตั่งค่าการเชื่อมต่อฐานข้อมูล",
"setupDatabaseSQLite": "ไฟล์ฐานข้อมูลอย่างง่าย แนะนำสำหรับการปรับใช้ขนาดเล็ก ก่อนเวอร์ชัน 2.0.0 Uptime Kuma ใช้ SQLite เป็นฐานข้อมูลเริ่มต้น",
"dbName": "ชื่อฐานข้อมูล",
"Passive Monitor Type": "ชนิดมอนิเตอร์แบบพาสซีฟ",
"Passive Monitor Type": "ประเภทมอนิเตอร์แบบพาสซีฟ",
"documentationOf": "{0} คู่มือ",
"successDeleted": "ลบสำเร็จ.",
"Command": "คำสั่ง",
@@ -703,12 +703,293 @@
"ignoreTLSErrorGeneral": "ละเว้นข้อผิดพลาด TLS/SSL สำหรับการเชื่อมต่อ",
"programmingLanguages": "ภาษาโปรแกรมมิ่ง",
"Invert Keyword": "คำสำคัญ",
"settingUpDatabaseMSG": "กำลังตั้งค่าฐานข้อมูลอาจใช้เวลาสักครู่ โปรดอดทนรอ",
"settingUpDatabaseMSG": "การตั้งค่าฐานข้อมูล อาจต้องใช้เวลาสักระยะหนึ่ง โปรดอดใจรอ",
"time ago": "{0} ที่ผ่านมา",
"-year": "-ปี",
"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}",
"Request Timeout": "หมดเวลาการเชื่อมต่อ",
"ignoredTLSError": "ข้อผิดพลาด TLS/SSL ถูกละเว้น",
"pushOthers": "อื่น ๆ",
"pushViewCode": "วิธีใช้งาน Push monitor (ดูโค้ด)"
"pushViewCode": "วิธีใช้งาน Push monitor (ดูโค้ด)",
"templateServiceName": "ชื่อบริการ",
"templateHostnameOrURL": "ชื่อโฮสต์หรือ URL",
"templateStatus": "สถานะ",
"webhookBodyCustomOption": "เนื้อหากำหนดเอง",
"Reset Token": "รีเซ็ตโทเคน",
"apiKeyAddedMsg": "คีย์ API ของคุณถูกเพิ่มเรียบร้อยแล้ว โปรดจดบันทึกไว้ เนื่องจากจะไม่แสดงอีกครั้ง",
"wayToGetSevenIOApiKey": "ไปที่แดชบอร์ดที่ app.seven.io > develope > api key > ปุ่มเพิ่มสีเขียว",
"filterActivePaused": "หยุดชั่วคราว",
"Search monitored sites": "ค้นหาเว็บไซต์ที่ตรวจสอบ",
"liquidIntroduction": "การใช้เทมเพลตสามารถทำได้ผ่านภาษาการสร้างเทมเพลต Liquid โปรดดูที่ {0} สำหรับคำแนะนำในการใช้งาน ตัวแปรที่ใช้ได้มีดังนี้:",
"templateLimitedToUpDownCertNotifications": "ใช้ได้เฉพาะสำหรับการแจ้งเตือนสถานะ UP/DOWN/การหมดอายุของใบรับรอง",
"selectedMonitorCount": "ที่เลือกไว้: {0}",
"statusPageSpecialSlugDesc": "Slug พิเศษ {0}: หน้านี้จะแสดงเมื่อไม่มีการระบุ slug",
"Add a new expiry notification day": "เพิ่มวันแจ้งเตือนการหมดอายุใหม่",
"templateMonitorJSON": "ออบเจ็กต์ที่อธิบายเกี่ยวกับตัวตรวจสอบ",
"templateLimitedToUpDownNotifications": "ใช้ได้เฉพาะสำหรับการแจ้งเตือนสถานะ UP/DOWN",
"webhookBodyPresetOption": "ค่าที่ตั้งไว้ล่วงหน้า - {0}",
"Check/Uncheck": "เลือก/ไม่เลือก",
"Learn More": "เรียนรู้เพิ่มเติม",
"Add API Key": "เพิ่มคีย์ API",
"templateMsg": "ข้อความการแจ้งเตือน",
"Json Query Expression": "นิพจน์สำหรับดึงข้อมูล JSON",
"locally configured mail transfer agent": "ตัวส่งอีเมลในเครื่อง",
"filterActive": "กำลังทำงาน",
"successKeyword": "คำสำเร็จ (Success Keyword)",
"smseagleContact": "ชื่อผู้ติดต่อในสมุดโทรศัพท์",
"smspartnerApiurl": "คุณสามารถหาคีย์ API ของคุณได้ในแดชบอร์ดที่ {0}",
"smspartnerPhoneNumber": "หมายเลขโทรศัพท์",
"smspartnerSenderName": "ชื่อผู้ส่ง SMS",
"Remove the expiry notification": "ลบวันแจ้งเตือนการหมดอายุ",
"Refresh Interval": "ช่วงเวลารีเฟรช",
"Refresh Interval Description": "หน้าสถานะจะทำการรีเฟรชเว็บไซต์ทั้งหมดทุก ๆ {0} วินาที",
"noDockerHostMsg": "ไม่พร้อมใช้งาน กรุณาตั้งค่า Docker Host ก่อน",
"tailscalePingWarning": "เพื่อที่จะใช้ตัวตรวจสอบ Tailscale Ping คุณต้องติดตั้ง Uptime Kuma โดยไม่ใช้ Docker และติดตั้ง Tailscale client บนเซิร์ฟเวอร์ของคุณด้วย",
"telegramUseTemplate": "ใช้เทมเพลต ข้อความที่กำหนดเอง",
"telegramUseTemplateDescription": "หากเปิดใช้งาน ข้อความจะถูกส่งโดยใช้เทมเพลตที่กำหนดเอง",
"telegramTemplateFormatDescription": "Telegram อนุญาตให้ใช้ภาษามาร์กอัปต่าง ๆ กับข้อความ ดูรายละเอียดเพิ่มเติมได้ที่ Telegram {0}",
"telegramServerUrl": "(ไม่บังคับ) URL ของเซิร์ฟเวอร์",
"telegramServerUrlDescription": "เพื่อยกระดับข้อจำกัดของ API ของ Telegram หรือให้เข้าถึงพื้นที่ที่ถูกบล็อก (จีน, อิหร่าน, เป็นต้น) สำหรับข้อมูลเพิ่มเติมคลิก {0}. ค่าเริ่มต้น: {1}",
"enableNSCD": "เปิดใช้งาน NSCD (Name Service Cache Daemon) สำหรับการแคชคำขอ DNS ทั้งหมด",
"emailCustomisableContent": "เนื้อหาที่ปรับแต่งได้",
"smtpLiquidIntroduction": "สองฟิลด์ต่อไปนี้สามารถใช้เทมเพลตผ่านภาษาการสร้างเทมเพลต Liquid โปรดดูที่ {0} สำหรับคำแนะนำในการใช้งาน ตัวแปรที่ใช้ได้มีดังนี้:",
"emailTemplateMsg": "ข้อความของการแจ้งเตือน",
"postToExistingThread": "โพสต์ไปยังเธรด / โพสต์ฟอรัมที่มีอยู่แล้ว",
"whatHappensAtForumPost": "สร้างโพสต์ในฟอรัมใหม่ จะไม่โพสต์ข้อความในโพสต์เดิม หากต้องการโพสต์ในโพสต์เดิมให้ใช้ “{option}”",
"wayToGetDiscordThreadId": "การรับค่า ID ของเธรดหรือโพสต์ในฟอรัมจะคล้ายกับการรับ Channel ID อ่านเพิ่มเติมเกี่ยวกับวิธีการรับ ID ได้ที่ {0}",
"infiniteRetention": "ตั้งค่าเป็น 0 เพื่อการเก็บข้อมูลตลอดไป",
"confirmDeleteTagMsg": "คุณแน่ใจหรือว่าต้องการลบแท็กนี้? มอนิเตอร์ที่ใช้กับแท็กนี้จะไม่ได้ถูกลบ",
"affectedMonitorsDescription": "เลือกมอนิเตอร์ที่ได้รับผลกระทบจากการซ่อมบำรุงปัจจุบัน",
"affectedStatusPages": "แสดงข้อความการซ่อมบำรุงนี้บนหน้าสถานะที่เลือก",
"wayToGetKookBotToken": "สร้างแอปพลิเคชันและรับโทเค็นบอตของคุณที่ {0}",
"wayToGetKookGuildID": "เปิดโหมด Developer ในการตั้งค่าของ Kook แล้วคลิกขวาที่กิลด์เพื่อรับ ID ของมัน",
"Strategy": "กลยุทธ์",
"Economy": "เศรษฐกิจ",
"You can divide numbers with": "คุณสามารถหารตัวเลขได้ด้วย",
"Notify Channel": "ช่องทางการแจ้งเตือน",
"setup a new monitor group": "ตั้งค่ากลุ่มการมอนิเตอร์หม่",
"smseagleGroup": "ชื่อกลุ่มสมุดโทรศัพท์",
"smseagleEncoding": "ส่งเป็น Unicode",
"smseaglePriority": "ลำดับความสำคัญของข้อความ (0-9, ค่าเริ่มต้น = 0)",
"smspartnerPhoneNumberHelptext": "หมายเลขต้องอยู่ในรูปแบบสากล {0}, {1} และหากมีหลายหมายเลขต้องคั่นด้วย {2}",
"smspartnerSenderNameInfo": "ต้องอยู่ระหว่าง 3 ถึง 11 ตัวอักษรปกติ",
"Custom Monitor Type": "ประเภทการมอนิเตอร์ แบบกำหนดเอง",
"Add Another": "เพิ่มอีกหนึ่ง",
"Expires": "หมดอายุ",
"disableAPIKeyMsg": "คุณแน่ใจหรือไม่ว่าจะปิดการใช้งาน API คีย์นี้?",
"ntfyAuthenticationMethod": "วิธีการยืนยันตัวตน",
"ntfyPriorityHelptextAllEvents": "ทุกกิจกรรมจะถูกส่งด้วยลำดับความสำคัญสูงสุด",
"ntfyPriorityHelptextAllExceptDown": "เหตุการณ์ทั้งหมดจะถูกส่งด้วยลำดับความสำคัญนี้ ยกเว้นเหตุการณ์ {0} ซึ่งมีลำดับความสำคัญ {1}",
"Show Clickable Link Description": "หากทำเครื่องหมายไว้ ทุกคนที่มีสิทธิ์เข้าถึงหน้าสถานะนี้จะสามารถเข้าถึง URL ของมอนิเตอร์ได้",
"monitorToastMessagesDescription": "การแจ้งเตือนแบบ Toast สำหรับการตรวจสอบจะหายไปหลังจากเวลาที่กำหนด (เป็นวินาที) หากตั้งค่าเป็น -1 ระบบจะไม่จำกัดเวลาแสดงผล หากตั้งค่าเป็น 0 จะปิดการแสดงการแจ้งเตือนแบบ Toast ทั้งหมด",
"wayToGetFlashDutyKey": "คุณสามารถไปที่ Channel -> (เลือก Channel) -> Integrations -> Add a new integration' page, add 'Uptime Kuma' to get push address, copy the Integration Key in the address. สำหรับข้อมูลเพิ่มเติม โปรดไปที่",
"cacheBusterParamDescription": "พารามิเตอร์ที่สร้างขึ้นแบบสุ่มเพื่อหลีกเลี่ยงการใช้แคช",
"gamedigGuessPortDescription": "พอร์ตที่ใช้โดย Valve Server Query Protocol อาจแตกต่างจากพอร์ตไคลเอนต์ ลองใช้วิธีนี้หากมอนิเตอร์ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ของคุณได้",
"bitrix24SupportUserID": "กรอกรหัสผู้ใช้ของคุณลงใน Bitrix24 คุณสามารถค้นหารหัสได้จากลิงก์โดยไปที่โปรไฟล์ของผู้ใช้",
"successBackupRestored": "กู้คืนข้อมูลสำรองสำเร็จแล้ว",
"Remote Browser not found!": "ไม่พบ Remote Browse!",
"remoteBrowsersDescription": "Remote Browsers เป็นทางเลือกหนึ่งแทนการเรียกใช้ Chromium บนเครื่องของคุณโดยตรง โดยสามารถตั้งค่าใช้งานร่วมกับบริการ เช่น browserless.io หรือเชื่อมต่อกับ",
"deleteRemoteBrowserMessage": "คุณแน่ใจหรือไม่ว่าต้องการลบ Remote Browser นี้สำหรับมอนิเตอร์ทั้งหมด?",
"mongodbCommandDescription": "รันคำสั่ง MongoDB กับฐานข้อมูล สำหรับข้อมูลเกี่ยวกับคำสั่งที่มีอยู่ โปรดดูที่ {documentation}",
"goAlertInfo": "GoAlert is a An open source application for on-call scheduling, automated escalations and notifications (like SMS or voice calls). Automatically engage the right person, the right way, and at the right time! {0}",
"aboutNotifyChannel": "การแจ้งเตือนไปยังช่องทางจะทำให้เกิดการแจ้งเตือนบนเดสก์ท็อปหรือมือถือของสมาชิกทุกคนในช่องนั้น ไม่ว่าสถานะของพวกเขาจะเป็น “ใช้งาน” หรือ “ไม่อยู่” ก็ตาม",
"DockerHostRequired": "กรุณาตั้งค่า Docker Host สำหรับมอนิเตอร์นี้",
"Select message type": "เลือกประเภทข้อความ",
"dataRetentionTimeError": "ระยะเวลาเก็บข้อมูลต้องเป็น 0 หรือมากกว่า",
"promosmsAllowLongSMS": "อนุญาตให้ส่ง SMS ยาว",
"apiKey-active": "ใช้งานอยู่",
"and": "และ",
"chromeExecutable": "ไฟล์ที่ใช้รัน Chrome/Chromium",
"Maintenance Time Window of a Day": "ช่วงเวลาการซ่อมบำรุงของวัน",
"Effective Date Range": "ช่วงวันที่มีผล (ไม่บังคับ)",
"leave blank for default subject": "เว้นว่างไว้สำหรับหัวข้อเริ่มต้น",
"emailCustomBody": "เนื้อหากำหนดเอง",
"leave blank for default body": "เว้นว่างไว้สำหรับเนื้อหาพื้นฐาน",
"emailTemplateMonitorJSON": "อ็อบเจ็กต์ที่อธิบายเกี่ยวกับมอนิเตอร์",
"Send to channel": "ส่งไปยังช่องทาง",
"Create new forum post": "สร้างโพสต์ฟอรัมใหม่",
"forumPostName": "ชื่อโพสต์ในฟอรัม",
"threadForumPostID": "รหัสเธรด / โพสต์ในฟอรัม",
"e.g. {discordThreadID}": "เช่น {discordThreadID}",
"Channel access token (Long-lived)": "Channel access token (Long-lived)",
"Your User ID": "ไอดีผู้ใช้ของคุณ",
"deleteMaintenanceMsg": "คุณแน่ใจหรือว่าต้องการลบการซ่อมบำรุงนี้?",
"atLeastOneMonitor": "เลือกมอนิเตอร์ที่ได้รับผลกระทบอย่างน้อยหนึ่งมอนิเตอร์",
"invertKeywordDescription": "ค้นหาคำสำคัญที่ไม่มีอยู่ แทนที่จะมีอยู่",
"Guild ID": "กิลด์ ID",
"Proto Service Name": "ชื่อบริการ Proto",
"Proto Method": "Proto เมทอด",
"Proto Content": "เนื้อหา Proto",
"Lowcost": "ต้นทุนต่ำ",
"high": "สูง",
"SMSManager API Docs": "เอกสาร API ของ SMSManager ",
"Gateway Type": "ประเภทเกตเวย์",
"Base URL": "URL หลัก",
"pushoverMessageTtl": "ข้อความ TTL (วินาที)",
"Free Mobile User Identifier": "Free Mobile User Identifier",
"Free Mobile API Key": "Free Mobile API Key",
"SendKey": "SendKey",
"goAlertIntegrationKeyInfo": "Get generic API integration key for the service in this format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" usually the value of token parameter of copied URL.",
"Mentioning": "การกล่าวถึง",
"Don't mention people": "อย่ากล่าวถึงบุคคล",
"Mention group": "กล่าวถึง {group}",
"Bark API Version": "เวอร์ชัน Bark API",
"openModalTo": "เปิดโมดัลไปยัง {0}",
"Add a domain": "เพิ่มโดเมน",
"Remove domain": "ลบโดเมน {0}",
"smseagleTo": "หมายเลขโทรศัพท์",
"smseagleRecipientType": "ประเภทผู้รับ",
"smseagleRecipient": "ผู้รับ (หากมีหลายคนให้แยกด้วยเครื่องหมายจุลภาค)",
"smseagleUrl": "URL ของอุปกรณ์ SMSEagle ของคุณ",
"Server URL should not contain the nfty topic": "URL ของเซิร์ฟเวอร์ไม่ควรมีหัวข้อ “nfty”",
"smseagleToken": "API Access token",
"pushDeerServerDescription": "เว้นว่างไว้เพื่อใช้เซิร์ฟเวอร์อย่างเป็นทางการ",
"Edit Tag": "แก้ไขแท็ก",
"Server Address": "ที่อยู่เซิร์ฟเวอร์",
"Expiry": "หมดอายุ",
"Expiry date": "วันที่หมดอายุ",
"Don't expire": "ไม่หมดอายุ",
"Continue": "ดำเนินการต่อ",
"Key Added": "เพิ่มคีย์แล้ว",
"No API Keys": "ไม่มี API คีย์",
"apiKey-expired": "หมดอายุแล้ว",
"apiKey-inactive": "ไม่ได้ใช้งาน",
"deleteAPIKeyMsg": "คุณแน่ใจหรือไม่ว่าต้องการลบ API คีย์นี้?",
"Generate": "สร้าง",
"pagertreeUrgency": "ด่วน",
"pagertreeLow": "ต่ำ",
"pagertreeMedium": "ปานกลาง",
"pagertreeHigh": "สูง",
"lunaseaTarget": "เป้าหมาย",
"lunaseaDeviceID": "ไอดี ของอุปกรณ์",
"lunaseaUserID": "ไอดี ของผู้ใช้",
"ntfyUsernameAndPassword": "ชื่อผู้ใช้ และ รหัสผ่าน",
"twilioAccountSID": "บัญชี SID",
"twilioApiKey": "API คีย์ (ไม่บังคับ)",
"twilioFromNumber": "จากหมายเลข",
"twilioToNumber": "ถึงหมายเลข",
"Monitor Setting": "การตั้งค่ามอนิเตอร์ของ {0}",
"PushDeer Server": "เซิร์ฟเวอร์ PushDeer",
"Google Analytics ID": "ไอดี Google Analytics",
"API Keys": "API คีย์",
"pagertreeIntegrationUrl": "URL สำหรับการเชื่อมต่อระบบ (Integration URL)",
"twilioAuthToken": "Auth Token / Api Key Secret",
"Group": "กลุ่ม",
"Monitor Group": "กลุ่มมอนิเตอร์",
"monitorToastMessagesLabel": "การแจ้งเตือนมอนิเตอร์แบบ Toast",
"Press Enter to add broker": "กด Enter เพื่อเพิ่มโบรกเกอร์",
"Mechanism": "กลไก",
"Pick a SASL Mechanism...": "เลือกกลไก SASL…",
"noGroupMonitorMsg": "ไม่พร้อมใช้งาน โปรดสร้างกลุ่มมอนิเตอร์ก่อน",
"Close": "ปิด",
"FlashDuty Severity": "ความรุนแรง",
"Show Clickable Link": "แสดงลิงก์ที่คลิกได้",
"Open Badge Generator": "เปิดเครื่องมือสร้าง Badge",
"Badge Generator": "เครื่องมือสร้าง Badge ของ {0}",
"Badge Type": "ประเภท Badge",
"Badge Duration (in hours)": "ระยะเวลา Badge (เป็นชั่วโมง)",
"Badge Label": "ป้ายกำกับ Badge",
"nostrRelays": "รีเลย์ Nostr",
"nostrRelaysHelp": "URL รีเลย์หนึ่งรายการต่อบรรทัด",
"cacheBusterParam": "เพิ่มพารามิเตอร์ {0}",
"gamedigGuessPort": "Gamedig: เดาพอร์ต",
"Message format": "รูปแบบข้อความ",
"wayToGetBitrix24Webhook": "คุณสามารถสร้างเว็บฮุกได้โดยทำตามขั้นตอนที่ {0}",
"authIncorrectCreds": "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง",
"2faAlreadyEnabled": "2FA ได้รับการเปิดใช้งานแล้ว",
"2faEnabled": "เปิดใช้งาน 2FA แล้ว",
"2faDisabled": "2FA ถูกปิดการใช้งาน",
"successAdded": "เพิ่มเรียบร้อยแล้ว",
"successResumed": "ดำเนินการต่อสำเร็จแล้ว",
"successPaused": "หยุดชั่วคราวสำเร็จแล้ว",
"successEnabled": "เปิดใช้งานสำเร็จแล้ว",
"tagNotFound": "ไม่พบแท็ก",
"foundChromiumVersion": "พบ Chromium/Chrome เวอร์ชัน: {0}",
"Add a Remote Browser": "เพิ่ม Remote Browser",
"self-hosted container": "คอนเทนเนอร์ที่โฮสต์เอง (self-hosted container)",
"remoteBrowserToggle": "โดยปกติแล้ว Chromium จะทำงานภายในคอนเทนเนอร์ของ Uptime Kuma คุณสามารถใช้ remote browser ได้โดยเปิดสวิตช์นี้",
"useRemoteBrowser": "ใช้ Remote Browser",
"aboutSlackUsername": "เปลี่ยนชื่อที่แสดงของผู้ส่งข้อความ หากคุณต้องการกล่าวถึงใคร ให้รวมไว้ในชื่อที่เป็นมิตรแทน",
"grpcMethodDescription": "ชื่อเมธอดจะถูกแปลงเป็นรูปแบบ camelCase เช่น sayHello, check, เป็นต้น",
"Enable TLS": "เปิดใช้งาน TLS",
"pagertreeSilent": "เงียบ",
"enableGRPCTls": "อนุญาตให้ส่งคำขอแบบ gRPC ด้วยการเชื่อมต่อ TLS",
"Sender name": "ชื่อผู้ส่ง",
"smsplanetNeedToApproveName": "ต้องได้รับการอนุมัติในแผงควบคุมของไคลเอนต์",
"Phone numbers": "หมายเลขโทรศัพท์",
"Badge Prefix": "คำนำหน้าค่าของ Badge",
"Badge Suffix": "คำตามหลังค่าของ Badge",
"Badge Label Color": "สีของป้ายข้อความ (Label) บน Badge",
"Badge Color": "สีของ Badge",
"Badge Preview": "ตัวอย่างการแสดง Badge (Preview)",
"Badge Label Suffix": "คำต่อท้ายข้อความ (Label) บน Badge",
"Badge Label Prefix": "คำนำหน้าข้อความ (Label) บน Badge",
"Badge Up Color": "สีของ Badge เมื่อสถานะเป็นปกติ (Up)",
"Badge Down Color": "สีของ Badge เมื่อสถานะเป็นออฟไลน์ (Down)",
"Badge Pending Color": "สีของ Badge ขณะรอการประมวลผล",
"Badge Maintenance Color": "สีของ Badge ในระหว่างการบำรุงรักษา",
"Badge Warn Color": "สีของ Badge เมื่อสถานะเตือน",
"Badge Warn Days": "จำนวนวันที่ Badge แสดงสถานะเตือน",
"Badge Down Days": "จำนวนวันที่ Badge แสดงสถานะออฟไลน์",
"Badge Style": "สไตล์ของ Badge",
"Badge value (For Testing only.)": "ค่าของ Badge (สำหรับการทดสอบเท่านั้น)",
"Badge URL": "URL ของ Badge",
"rabbitmqNodesRequired": "โปรดตั้งค่าโหนดสำหรับมอนิเตอร์นี้",
"Font Twemoji by Twitter licensed under": "ฟอนต์ Twemoji โดย Twitter ที่มีลิขสิทธิ์ภายใต้",
"the smsplanet documentation": "เอกสารของ smsplanet",
"smsplanetApiToken": "โทเค็นสำหรับ API ของ SMSPlanet",
"smsplanetApiDocs": "ข้อมูลรายละเอียดเกี่ยวกับการขอ API tokens สามารถดูได้ใน {the_smsplanet_documentation}",
"Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "การแจ้งเตือนที่มีความสำคัญตามเวลา จะถูกส่งทันที แม้ว่าจะอยู่ในโหมดไม่รบกวน (Do Not Disturb) ก็ตาม",
"Clear": "กระจ่าง",
"equals": "เท่ากับ",
"Go back to home page.": "กลับไปหน้าหลัก",
"conditionValuePlaceholder": "ค่า",
"not starts with": "ไม่ได้เริ่มต้นด้วย",
"Notification Channel": "ช่องทางการรับแจ้งเตือน",
"Alphanumerical string and hyphens only": "ใช้ได้เฉพาะตัวอักษรและตัวเลข (a-z, A-Z, 0-9) และขีดกลาง (-) เท่านั้น",
"Message Template": "ข้อความของเทมเพลต",
"Plain Text": "ข้อความธรรมดา",
"wayToWriteWahaChatId": "หมายเลขโทรศัพท์ที่มีรหัสประเทศ แต่ไม่มีเครื่องหมายบวกที่เริ่มต้น ({0}), หมายเลขติดต่อ ({1}) หรือ หมายเลขกลุ่ม ({2}) การแจ้งเตือนจะถูกส่งไปยัง Chat ID นี้จาก WAHA Session",
"not equals": "ไม่เท่ากับ",
"No tags found.": "ไม่พบแท็ก",
"Conditions": "เงื่อนไข",
"conditionAdd": "เพิ่มเงื่อนไข",
"conditionDelete": "ลบเงื่อนไข",
"conditionAddGroup": "เพิ่มกลุ่ม",
"conditionDeleteGroup": "ลบกลุ่ม",
"contains": "ประกอบด้วย",
"not contains": "ไม่มี",
"Template Format": "รูปแบบของเทมเพลต",
"Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "ระบุรหัสผู้ส่งข้อความแบบข้อความหรือลำดับหมายเลขโทรศัพท์ในรูปแบบ E.164 หากคุณต้องการรับการตอบกลับ",
"The phone number of the recipient in E.164 format.": "หมายเลขโทรศัพท์ของผู้รับในรูปแบบ E.164",
"Can be found on:": "สามารถดูได้ที่: {0}",
"From": "จาก",
"Time Sensitive (iOS Only)": "การแจ้งเตือนที่มีความสำคัญตามเวลา (เฉพาะ iOS)",
"Custom sound to override default notification sound": "เสียงที่กำหนดเองเพื่อแทนที่เสียงการแจ้งเตือนเริ่มต้น",
"Arcade": "อาร์เคด",
"Correct": "ถูกต้อง",
"Fail": "ล้มเหลว",
"Harp": "พิณ",
"Reveal": "เปิดเผย",
"Bubble": "ฟอง",
"Flute": "ขลุ่ย",
"Scifi": "ไซไฟ",
"Sound": "เสียง",
"starts with": "เริ่มต้นด้วย",
"ends with": "ลงท้ายด้วย",
"not ends with": "ไม่ลงท้ายด้วย",
"greater than or equal to": "มากกว่าหรือเท่ากับ",
"record": "บันทึก",
"less than": "น้อยกว่า",
"greater than": "มากกว่า",
"less than or equal to": "น้อยกว่าหรือเท่ากับ",
"Pop": "พอป",
"Elevator": "ลิฟต์",
"Doorbell": "ออด",
"Money": "เงิน",
"Guitar": "กีตาร์",
"successKeywordExplanation": "คีย์เวิร์ด MQTT ที่จะถูกพิจารณาว่าสำเร็จ",
"defaultFriendlyName": "มอนิเตอร์ใหม่",
"tagAlreadyOnMonitor": "แท็กที่ระบุ (ชื่อและค่า) มีอยู่ในระบบแล้ว หรืออยู่ในระหว่างรอการเพิ่ม",
"Add Tags": "เพิ่มแท็ก"
}

View File

@@ -41,7 +41,7 @@
"Check Update On GitHub": "GitHub'da Güncellemeyi Kontrol Edin",
"List": "Liste",
"Add": "Ekle",
"Add New Monitor": "Yeni Servis Ekle",
"Add New Monitor": "Yeni Monitör Ekle",
"Quick Stats": "Servis istatistikleri",
"Up": "Normal",
"Down": "Hatalı",
@@ -96,15 +96,15 @@
"Timezone": "Zaman Dilimi",
"Search Engine Visibility": "Arama Motoru Görünürlüğü",
"Allow indexing": "İndekslemeye izin ver",
"Discourage search engines from indexing site": "İndekslemeyi reddet",
"Discourage search engines from indexing site": "Arama motorlarının siteyi indekslemesini engelleyin",
"Change Password": "Şifre Değiştir",
"Current Password": "Şuan ki Şifre",
"Current Password": "Mevcut Şifre",
"New Password": "Yeni Şifre",
"Repeat New Password": "Yeni Şifreyi Tekrar Girin",
"Update Password": "Şifreyi Değiştir",
"Disable Auth": "Şifreli girişi iptal et",
"Enable Auth": "Şifreli girişi aktif et",
"disableauth.message1": "{disableAuth}emin misiniz?",
"disableauth.message1": "{disableAuth} emin misiniz?",
"disable authentication": "Şifreli girişi devre dışı bırakmak istediğinizden",
"disableauth.message2": "Bu, Uptime Kuma'nın önünde Cloudflare Access gibi {intendThirdPartyAuth} kişiler içindir.",
"where you intend to implement third-party authentication": "üçüncü taraf yetkilendirmesi olan",
@@ -293,7 +293,7 @@
"matrixHomeserverURL": "Homeserver URL (http(s):// ve isteğe bağlı olarak bağlantı noktası ile)",
"Internal Room Id": "Internal Room ID",
"matrixDesc1": "Internal Room ID'sini, Matrix istemcinizdeki oda ayarlarının gelişmiş bölümüne bakarak bulabilirsiniz. !QMdRCpUIfLwsfjxye6:home.server gibi görünmelidir.",
"matrixDesc2": "Hesabınıza ve katıldığınız tüm odalara tam erişime izin vereceğinden, yeni bir kullanıcı oluşturmanız ve kendi Matrix kullanıcınızın erişim belirtecini kullanmamanız şiddetle tavsiye edilir. Bunun yerine, yeni bir kullanıcı oluşturun ve onu yalnızca bildirimi almak istediğiniz odaya davet edin. {0} komutunu çalıştırarak erişim tokenini alabilirsiniz.",
"matrixDesc2": "Hesabınıza ve katıldığınız tüm odalara tam erişime izin vereceğinden, yeni bir kullanıcı oluşturmanız ve kendi Matrix kullanıcınızın erişim belirtecini kullanmamanız şiddetle tavsiye edilir. Bunun yerine, yeni bir kullanıcı oluşturun ve onu yalnızca bildirimi almak istediğiniz odaya davet edin. {0} komutunu çalıştırarak erişim tokenini alabilirsiniz",
"Method": "Yöntem",
"Body": "Gövde",
"Headers": "Başlıklar",
@@ -401,8 +401,8 @@
"TemplateCode": "TemplateCode",
"SignName": "SignName",
"Sms template must contain parameters: ": "Sms şablonu parametreleri içermelidir: ",
"Bark Endpoint": "Bark Endpoint",
"Bark Group": "Bark Group",
"Bark Endpoint": "Bark Uç Noktası",
"Bark Group": "Bark Grubu",
"Bark Sound": "Havlama Sesi",
"WebHookUrl": "WebHookUrl",
"SecretKey": "SecretKey",
@@ -448,7 +448,7 @@
"Don't know how to get the token? Please read the guide:": "Tokeni nasıl alacağınızı bilmiyor musunuz? Lütfen kılavuzu okuyun:",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Halihazırda Cloudflare Tüneli üzerinden bağlanıyorsanız mevcut bağlantı kesilebilir. Durdurmak istediğinden emin misin? Onaylamak için mevcut şifrenizi yazın.",
"HTTP Headers": "HTTP Başlıkları",
"Trust Proxy": "Trust Proxy",
"Trust Proxy": "Vekil Sunucuya Güven",
"Other Software": "Diğer Yazılımlar",
"For example: nginx, Apache and Traefik.": "Örneğin: nginx, Apache ve Traefik.",
"Please read": "Lütfen oku",
@@ -602,8 +602,8 @@
"smseagleRecipient": "Alıcı(lar) (birden çok olanlar virgülle ayrılmalıdır)",
"smseagleToken": "API Erişim Tokenı",
"smseagleUrl": "SMSEagle cihaz URL\"niz",
"smseagleEncoding": "Unicode olarak gönder",
"smseaglePriority": "Mesaj önceliği (0-9, varsayılan = 0)",
"smseagleEncoding": "Unicode olarak gönder (varsayılan=GSM-7)",
"smseaglePriority": "Mesaj önceliği (0-9, en yüksek öncelik = 9)",
"Optional": "İsteğe bağlı",
"squadcast": "Squadcast",
"SendKey": "SendKey",
@@ -656,7 +656,7 @@
"Free Mobile API Key": "Ücretsiz Mobil API Anahtarı",
"Enable TLS": "TLS'yi Etkinleştir",
"Proto Service Name": "Proto Service İsmi",
"Proto Method": "Proto Method",
"Proto Method": "Proto Yöntemi",
"Proto Content": "Proto İçeriği",
"Economy": "Ekonomik",
"Lowcost": "Düşük maliyetli",
@@ -828,7 +828,7 @@
"noOrBadCertificate": "Sertifika Yok/Geçersiz",
"Select": "Seç",
"PushDeer Server": "PushDeer Sunucusu",
"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",
"wayToGetFlashDutyKey": "Uptime Kuma'yı Flashduty ile entegre etmek için: Kanallar > Bir kanal seçin > Entegrasyonlar > Yeni bir entegrasyon ekleyin bölümüne gidin, Uptime Kuma'yı seçin ve Push URL'sini kopyalayın.",
"selectedMonitorCount": "Seçildi: {0}",
"Check/Uncheck": "İşaretle/İşareti Kaldır",
"pushDeerServerDescription": "Resmi sunucuyu kullanmak için boş bırakın",
@@ -1117,5 +1117,63 @@
"Template Format": "Şablon Biçimi",
"YZJ Webhook URL": "YZJ Webhook URL'si",
"YZJ Robot Token": "YZJ Robot tokeni",
"telegramServerUrl": "(İsteğe bağlı) Sunucu URL'si"
"telegramServerUrl": "(İsteğe bağlı) Sunucu URL'si",
"defaultFriendlyName": "Yeni Monitör",
"smtpHelpText": "'SMTPS' SMTP/TLS'nin çalıştığını test eder; 'TLS'i reddet' düz metin üzerinden bağlanır; 'STARTTLS' bağlanır, bir STARTTLS komutu verir ve sunucu sertifikasını doğrular. Bunların hiçbiri e-posta göndermez.",
"OneChatAccessToken": "OneChat Erişim Tokeni",
"OneChatUserIdOrGroupId": "OneChat Kullanıcı ID veya Grup ID",
"Font Twemoji by Twitter licensed under": "Twemoji yazı tipi Twitter tarafından lisanslı",
"smsplanetApiToken": "SMSPlanet API için Token",
"smsplanetApiDocs": "API belirteçlerinin elde edilmesiyle ilgili ayrıntılı bilgi {the_smsplanet_documentation} bölümünde bulunabilir.",
"Use HTML for custom E-mail body": "Özel E-posta gövdesi için HTML kullanın",
"smseagleGroupV2": "Telefon defteri grup kimliği(ID)",
"smseagleContactV2": "Telefon defteri kişi kimlikleri(ID)",
"smseagleMsgType": "Mesaj tipi",
"smseagleMsgSms": "Sms mesajı (varsayılan)",
"smseagleMsgRing": "Telefon araması",
"smseagleMsgTts": "Metinden sese çağrı",
"smseagleMsgTtsAdvanced": "Metinden sese Gelişmiş çağrı",
"smseagleDuration": "Süre (saniye cinsinden)",
"smseagleTtsModel": "Metinden sese model kimliği(ID)",
"smseagleApiType": "API versiyonu",
"smseagleApiv1": "APIv1 (mevcut projeler ve geriye dönük uyumluluk için)",
"smseagleApiv2": "APIv2 (yeni entegrasyonlar için önerilir)",
"smseagleDocs": "Belgeleri veya APIv2 kullanılabilirliğini kontrol edin: {0}",
"smseagleComma": "Birden fazla virgül ile ayrılmalıdır",
"SpugPush Template Code": "Şablon Kodu",
"FlashDuty Push URL": "Bildirim URL",
"FlashDuty Push URL Placeholder": "Uyarı entegrasyonu sayfasından kopyalama",
"pingCountLabel": "Maksimum Paketler",
"pingCountDescription": "Durmadan önce gönderilecek paket sayısı",
"pingNumericLabel": "Sayısal Çıktı",
"pingNumericDescription": "İşaretlenirse, sembolik ana bilgisayar adları yerine IP adresleri çıktılanacaktır",
"pingGlobalTimeoutLabel": "Küresel Zaman Aşımı",
"pingGlobalTimeoutDescription": "Gönderilen paketlerden bağımsız olarak ping durmadan önce saniye cinsinden toplam süre",
"pingPerRequestTimeoutLabel": "Ping Başına Zaman Aşımı",
"pingPerRequestTimeoutDescription": "Bu, tek bir ping paketinin kayıp olarak değerlendirilmesinden önceki maksimum bekleme süresidir (saniye cinsinden)",
"pingIntervalAdjustedInfo": "Paket sayısına, genel zaman aşımına ve ping başına zaman aşımına göre ayarlanan aralık",
"Custom URL": "Özel URL",
"customUrlDescription": "Tıklanabilir URL olarak monitörünki yerine kullanılacaktır.",
"OneChatBotId": "OneChat Bot ID",
"the smsplanet documentation": "smsplanet dokümantasyonu",
"Phone numbers": "Telefon numaraları",
"Sender name": "Gönderen adı",
"smsplanetNeedToApproveName": "Müşteri panelinde onaylanması gerekir",
"Disable URL in Notification": "Bildirimdeki URL'yi Devre Dışı Bırak",
"Ip Family": "IP Ailesi",
"ipFamilyDescriptionAutoSelect": "IP ailesini belirlemek için {happyEyeballs} kullanır.",
"Happy Eyeballs algorithm": "Happy Eyeball algoritması",
"Add Another Tag": "Başka Etiket Ekle",
"Staged Tags for Batch Add": "Toplu Ekleme için Aşamalı Etiketler",
"pause": "Durakla",
"Manual": "Manuel",
"ntfyPriorityHelptextPriorityHigherThanDown": "Normal öncelik, {0} önceliğinden yüksek olmalıdır. {1} önceliği, {0} önceliği olan {2}den daha yüksektir",
"ntfyPriorityDown": "DOWN-olayları için öncelik seviyesi",
"Add Tags": "Etiket Ekle",
"tagAlreadyOnMonitor": "Bu etiket (isim ve değer) zaten monitörde veya eklenmeyi bekliyor.",
"tagAlreadyStaged": "Bu etiket (isim ve değer) bu grup için zaten hazırlandı.",
"tagNameExists": "Bu isimde bir sistem etiketi zaten var. Listeden seçin veya farklı bir isim kullanın.",
"Clear Form": "Formu Temizle",
"Optional: The audience to request the JWT for": "İsteğe bağlı: JWT'nin talep edileceği kitle",
"OAuth Audience": "OAuth Kitlesi"
}

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