Compare commits

...

280 Commits

Author SHA1 Message Date
Louis Lam
fecee1e649 [empty commit] pull request for <YOUR TASK NAME> 2023-02-09 17:32:08 +08:00
Louis Lam
e241728419 Merge pull request #2729 from chakflying/patch-1
Fix [MySQL monitor]: Fix error when connection failed
2023-02-07 16:41:38 +08:00
Nelson Chan
e1f956879d Fix: Use .destroy() instead of .end() 2023-02-07 05:01:53 +08:00
Louis Lam
0197778af1 Fix change language issue in the setup page 2023-02-06 22:35:56 +08:00
Louis Lam
271cca0d23 Add Romanian in the dropdown 2023-02-06 15:21:45 +08:00
Louis Lam
b6d7af988d Merge pull request #2718 from cyril59310/master
Add keys for translation
2023-02-05 12:04:55 +08:00
cyril59310
5fff63cd59 add keys for translation 2023-02-05 01:07:20 +01:00
Louis Lam
06dc61b343 Merge pull request #2567 from clcninja/feature-google-analytics
Feature - Added Optional Google Analytics tag for Status Page.
2023-02-04 17:58:18 +08:00
Louis Lam
afadfe32d5 Trim 2023-02-04 17:03:00 +08:00
Louis Lam
5f2affb38c Relocate and fix jsesc issue 2023-02-04 16:58:39 +08:00
Louis Lam
10c6f3b688 Merge remote-tracking branch 'origin/master' into feature-google-analytics 2023-02-04 15:40:13 +08:00
c
a823ed8ccc Feature - Google Analytics - Removed unused import. 2023-02-03 11:49:25 +00:00
Louis Lam
121ab82cc3 Merge pull request #2714 from Saibamen/auto_test_ignore_markdown
Do not run auto-test for markdown-only commits. Update versions
2023-02-03 17:41:17 +08:00
Adam Stachowicz
e0f0178644 Do not run auto-test for markdown-only commits. Update versions 2023-02-03 07:10:10 +01:00
Louis Lam
ec78d2a39b Update README.md 2023-02-03 13:39:45 +08:00
Louis Lam
ff09276de2 Update README.md 2023-02-03 13:38:14 +08:00
Louis Lam
e631db89b8 Update to 1.20.0-beta.0 2023-02-03 13:21:19 +08:00
Louis Lam
d39508a007 Change nightly version format 2023-02-03 13:19:51 +08:00
Louis Lam
b0673ba9ce Merge pull request #2570 from Computroniks/feature/#2365-allow-markdown-in-status-page-footer
Add support for markdown on status page
2023-02-03 12:36:50 +08:00
Joseph
2a6d98ff01 Feat: Expand and Simplify Badge Functionality (#2211)
* [expanding badges] added new configs

* [expanding badges] recieve ping in getPreviousHeartbeat()

* [expanding badges] re-added original new badges

* [expanding badges] recreate parity between old and new badges

* [expanding badges] fix linting
2023-02-03 12:33:48 +08:00
Louis Lam
f153082184 Drop en.js 2023-02-02 21:52:45 +00:00
c
913bb611d5 Feature - Google Analytics - Removed regex to validate a Google Analytics tag. 2023-02-02 21:52:45 +00:00
c
3afe8013ca Feature - Google Analytics - Change TEXT type to VARCHAR. 2023-02-02 21:52:45 +00:00
c
5a94a3fe3c Google Analytics - Moved string to updated file. 2023-02-02 21:52:44 +00:00
c
c08d8a5eaf Google Analytics - Simplified retrieving Tag ID from Status Page. 2023-02-02 21:51:03 +00:00
c
3ff0cbe311 Feature - Google Analytics - Simplified Module & Escaped the Script to prevent XXS. 2023-02-02 21:51:03 +00:00
c
fb2999706c Feature - Google Analytics - Added JSDoc to Google Analytics functions. 2023-02-02 21:51:03 +00:00
c
2b3a3895b3 Feature - Google Analytics - Use Regex to validate UA as per https://support.google.com/analytics/answer/9310895 2023-02-02 21:51:03 +00:00
c
99c0b8cb71 Feature - Google Analytics - Addressing PR Comments. 2023-02-02 21:51:03 +00:00
c
29e24e0de9 Feature - Added Optional Google Analytics tag for Status Page. 2023-02-02 21:51:03 +00:00
Matthew Nickson
3819266fa8 Fixed style of links in markdown
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-02-02 17:55:40 +00:00
Louis Lam
d0ac3fc207 Merge pull request #2676 from UptimeKumaBot/weblate-uptime-kuma-uptime-kuma
Translations update from Uptime Kuma Weblate
2023-02-03 00:09:56 +08:00
오로라
2b1cb66ff7 Translated using Weblate (Korean)
Currently translated at 100.0% (692 of 692 strings)

Co-authored-by: 오로라 <dhfhfk1203@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:50 +00:00
mrkbaji
99d4b8ba50 Translated using Weblate (Hungarian)
Currently translated at 58.8% (407 of 692 strings)

Co-authored-by: mrkbaji <mrkbaji13@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:50 +00:00
Dim
e1021ba38a Translated using Weblate (French)
Currently translated at 100.0% (692 of 692 strings)

Co-authored-by: Dim <DimitriDR@users.noreply.weblate.kuma.pet>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:50 +00:00
rubesaca
c2ca60aaa2 Translated using Weblate (Spanish)
Currently translated at 94.6% (655 of 692 strings)

Translated using Weblate (Spanish)

Currently translated at 57.8% (400 of 692 strings)

Translated using Weblate (Spanish)

Currently translated at 56.6% (392 of 692 strings)

Translated using Weblate (Spanish)

Currently translated at 49.2% (341 of 692 strings)

Co-authored-by: rubesaca <rubesaca@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:50 +00:00
Ömer Faruk Genç
30fb5f0b7b Translated using Weblate (Turkish)
Currently translated at 100.0% (692 of 692 strings)

Co-authored-by: Ömer Faruk Genç <omer@farukgenc.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:50 +00:00
Louis Lam
a8af763f23 Translated using Weblate (Yue)
Currently translated at 14.3% (99 of 692 strings)

Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/yue/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:50 +00:00
Michal
47dd7ef432 Translated using Weblate (Czech)
Currently translated at 100.0% (692 of 692 strings)

Translated using Weblate (Czech)

Currently translated at 99.8% (691 of 692 strings)

Co-authored-by: Michal <black23@gmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:50 +00:00
MrEddX
3bc9c19e7f Translated using Weblate (Bulgarian)
Currently translated at 100.0% (692 of 692 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (692 of 692 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
2023-02-02 16:04:50 +00:00
Nelson Chan
c1461fd01f Translated using Weblate (Chinese (Traditional, Hong Kong))
Currently translated at 82.8% (573 of 692 strings)

Translated using Weblate (Yue)

Currently translated at 2.6% (18 of 692 strings)

Translated using Weblate (Yue)

Currently translated at 2.1% (15 of 692 strings)

Co-authored-by: Nelson Chan <chakflying@hotmail.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/yue/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:49 +00:00
Cyril59310
1aaf251840 Translated using Weblate (French)
Currently translated at 98.6% (683 of 692 strings)

Translated using Weblate (French)

Currently translated at 98.6% (682 of 691 strings)

Co-authored-by: Cyril59310 <contact@cyril59310.fr>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:49 +00:00
401Unauthorized
3208d98738 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (692 of 692 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (692 of 692 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (691 of 691 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 98.5% (681 of 691 strings)

Co-authored-by: 401Unauthorized <yehowahliu@4o1.to>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:49 +00:00
Adam Stachowicz
fef09d3abd Translated using Weblate (Polish)
Currently translated at 100.0% (691 of 691 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (684 of 684 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
2023-02-02 16:04:49 +00:00
Louis Lam
1a601c9377 Translated using Weblate (Chinese (Traditional))
Currently translated at 97.2% (673 of 692 strings)

Translated using Weblate (English)

Currently translated at 100.0% (684 of 684 strings)

Translated using Weblate (Chinese (Traditional, Hong Kong))

Currently translated at 62.7% (429 of 684 strings)

Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:49 +00:00
Anonymous
15ec8db48c Translated using Weblate (English)
Currently translated at 100.0% (692 of 692 strings)

Translated using Weblate (Turkish)

Currently translated at 97.9% (670 of 684 strings)

Translated using Weblate (Chinese (Traditional, Hong Kong))

Currently translated at 58.6% (401 of 684 strings)

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Ömer Faruk Genç <omer@farukgenc.com>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/
Translation: Uptime Kuma/Uptime Kuma
2023-02-02 16:04:49 +00:00
Louis Lam
89465e6768 Update CONTRIBUTING.md 2023-02-01 22:39:09 +08:00
Louis Lam
683f446cf5 Add support for .env 2023-02-01 20:07:08 +08:00
Louis Lam
a8f0f1d872 Merge manually and remove to devDependencies 2023-02-01 15:51:33 +08:00
Louis Lam
f82d7b4007 Merge remote-tracking branch 'origin/master' into feature/#2365-allow-markdown-in-status-page-footer
# Conflicts:
#	package-lock.json
#	package.json
#	src/languages/en.js
2023-02-01 15:38:33 +08:00
Louis Lam
806eb799c1 Merge pull request #2647 from chakflying/fix/ip-regex
Fix: [Regex] Do not allow white space around IP
2023-02-01 15:24:03 +08:00
Louis Lam
c699868bb9 Merge pull request #2709 from chakflying/fix/use-constants
Chore: Use constants instead of int
2023-02-01 13:11:21 +08:00
Nelson Chan
95c934e08b Fix: Do not allow white space around IP
Feat: Trim input on submit

Test: Add test for whitespace regex match
2023-02-01 08:25:16 +08:00
Nelson Chan
348d0170fa Chore: Use constants instead of int 2023-02-01 05:33:36 +08:00
Louis Lam
ce82ad1c12 Merge pull request #2083 from DevKyleS/patch-1
Bugfix: Fix healthcheck port value in healthcheck.js for Kubernetes support
2023-01-30 21:48:39 +08:00
Louis Lam
4fb43034cd Handle k8s in healthcheck.go 2023-01-30 21:46:27 +08:00
Louis Lam
18ae6fa6c1 Merge remote-tracking branch 'origin/master' into patch-1_k8s 2023-01-30 21:34:45 +08:00
Louis Lam
664da4a317 Merge pull request #2684 from gitstart/UPTM-3
Save button can't be found while edit and add in Mobile version
2023-01-30 21:20:39 +08:00
Louis Lam
fca0198d35 Merge pull request #2525 from chakflying/fix/maintenance-badge
Fix: Add support for pending & maintenance in badges
2023-01-30 15:32:28 +08:00
Louis Lam
6828d337ae Disable HTTP(s) - Browser Engine
Reason: Unfortunately, after some test, I found that Playwright requires a lot of libraries to be installed on the Linux host in order to start Chrome or Firefox. It will be hard to install, so I hide this feature for now.
2023-01-30 00:00:41 +08:00
Louis Lam
ddce8f0cb0 Fix plugin installation 2023-01-28 19:00:13 +08:00
Louis Lam
1dc2546a39 Lint 2023-01-28 13:39:23 +08:00
Louis Lam
98f5bc51a8 Change golang version 2023-01-28 12:38:39 +08:00
Louis Lam
82f875beca Update README.md 2023-01-27 23:45:10 +08:00
Louis Lam
50573e6c89 Merge pull request #2635 from Computroniks/bug/2628-uptime-over-100
Perform sanity check on uptime for status page
2023-01-27 18:33:37 +08:00
Louis Lam
e5ca67d062 HTTPS Monitor using Real Browsers + Limited plugin support (#1787) 2023-01-27 18:25:57 +08:00
gitstart
54e63f3e25 Save button can't be found while edit and add in Mobile version 2023-01-26 12:47:33 +00:00
Louis Lam
d99d37898e Fix 2023-01-26 00:59:38 +08:00
UptimeKumaBot
dcda520d59 Translations update from Uptime Kuma Weblate (#2670)
* Update translation files

Updated by "Squash Git commits" hook in Weblate.

Translated using Weblate (Estonian)

Currently translated at 29.9% (205 of 685 strings)

Translated using Weblate (Spanish)

Currently translated at 29.7% (204 of 685 strings)

Translated using Weblate (Greek)

Currently translated at 84.6% (580 of 685 strings)

Translated using Weblate (German)

Currently translated at 94.1% (645 of 685 strings)

Translated using Weblate (German)

Currently translated at 94.2% (645 of 684 strings)

Translated using Weblate (German)

Currently translated at 94.2% (645 of 684 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 92.2% (632 of 685 strings)

Translated using Weblate (German (Switzerland))

Currently translated at 92.3% (632 of 684 strings)

Translated using Weblate (Danish)

Currently translated at 50.6% (347 of 685 strings)

Translated using Weblate (Danish)

Currently translated at 50.7% (347 of 684 strings)

Translated using Weblate (Czech)

Currently translated at 98.8% (677 of 685 strings)

Translated using Weblate (Arabic (ar_SY))

Currently translated at 96.3% (660 of 685 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (685 of 685 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (684 of 684 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (684 of 684 strings)

Translated using Weblate (Persian)

Currently translated at 29.7% (204 of 685 strings)

Translated using Weblate (Basque)

Currently translated at 77.9% (534 of 685 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 42.0% (288 of 685 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 42.1% (288 of 684 strings)

Translated using Weblate (Polish)

Currently translated at 99.8% (684 of 685 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (684 of 684 strings)

Translated using Weblate (Dutch)

Currently translated at 76.3% (523 of 685 strings)

Translated using Weblate (Dutch)

Currently translated at 76.4% (523 of 684 strings)

Translated using Weblate (Korean)

Currently translated at 76.4% (524 of 685 strings)

Translated using Weblate (Japanese)

Currently translated at 28.6% (196 of 685 strings)

Translated using Weblate (Italian)

Currently translated at 52.5% (360 of 685 strings)

Translated using Weblate (Italian)

Currently translated at 52.6% (360 of 684 strings)

Translated using Weblate (Indonesian)

Currently translated at 84.3% (578 of 685 strings)

Translated using Weblate (Hungarian)

Currently translated at 53.8% (369 of 685 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 98.8% (677 of 685 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 98.8% (677 of 685 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 40.8% (280 of 685 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 40.9% (280 of 684 strings)

Translated using Weblate (Croatian)

Currently translated at 83.5% (572 of 685 strings)

Translated using Weblate (Hebrew (Israel))

Currently translated at 96.7% (663 of 685 strings)

Translated using Weblate (Yue)

Currently translated at 57.9% (397 of 685 strings)

Translated using Weblate (Yue)

Currently translated at 57.9% (397 of 685 strings)

Translated using Weblate (Yue)

Currently translated at 9.4% (65 of 685 strings)

Translated using Weblate (Yue)

Currently translated at 9.4% (65 of 685 strings)

Translated using Weblate (Yue)

Currently translated at 2.0% (14 of 684 strings)

Translated using Weblate (Chinese (Traditional))

Currently translated at 96.9% (664 of 685 strings)

Translated using Weblate (Chinese (Traditional, Hong Kong))

Currently translated at 57.9% (397 of 685 strings)

Translated using Weblate (Vietnamese)

Currently translated at 67.4% (462 of 685 strings)

Translated using Weblate (Vietnamese)

Currently translated at 67.5% (462 of 684 strings)

Translated using Weblate (Ukrainian)

Currently translated at 74.8% (513 of 685 strings)

Translated using Weblate (Turkish)

Currently translated at 98.6% (676 of 685 strings)

Translated using Weblate (Thai)

Currently translated at 83.5% (572 of 685 strings)

Translated using Weblate (Swedish)

Currently translated at 15.7% (108 of 685 strings)

Translated using Weblate (Serbian)

Currently translated at 29.0% (199 of 685 strings)

Translated using Weblate (Serbian (latin))

Currently translated at 29.0% (199 of 685 strings)

Translated using Weblate (Serbian (latin))

Currently translated at 29.0% (199 of 685 strings)

Translated using Weblate (Slovenian)

Currently translated at 51.0% (350 of 685 strings)

Translated using Weblate (Russian)

Currently translated at 85.1% (583 of 685 strings)

Translated using Weblate (Portuguese (Portugal))

Currently translated at 29.0% (199 of 685 strings)

Translated using Weblate (French)

Currently translated at 98.9% (678 of 685 strings)

Co-authored-by: 401Unauthorized <yehowahliu@4o1.to>
Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Cyril59310 <contact@cyril59310.fr>
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Co-authored-by: MrEddX <mreddx@chatrix.one>
Co-authored-by: Victor Monteiro <victor@bbhost.com.br>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: cetteup <cetteup@dasemail.de>
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ar_SY/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/da/
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/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/el/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/es/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/et/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/eu/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fa/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/he_IL/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/id/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nb_NO/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_PT/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sl/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sr/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sr_Latn/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/sv/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/vi/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/yue/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/
Translation: Uptime Kuma/Uptime Kuma

* Revert autofill mistake

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: 401Unauthorized <yehowahliu@4o1.to>
Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
Co-authored-by: Cyril59310 <contact@cyril59310.fr>
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Co-authored-by: MrEddX <mreddx@chatrix.one>
Co-authored-by: Victor Monteiro <victor@bbhost.com.br>
Co-authored-by: cetteup <cetteup@dasemail.de>
2023-01-26 00:55:59 +08:00
Louis Lam
8816be24d8 Merge pull request #1892 from Computroniks/feature/#1891-set-ping-packet-size
Added #1891: Set ping packet size
2023-01-25 16:16:43 +08:00
Louis Lam
e3828f09a3 Merge en.js to en.json 2023-01-25 16:13:09 +08:00
Louis Lam
5050ebc249 Merge remote-tracking branch 'origin/master' into feature/#1891-set-ping-packet-size
# Conflicts:
#	server/util-server.js
#	src/languages/en.js
2023-01-25 16:12:33 +08:00
UptimeKumaBot
82f33f4445 Translations update from Uptime Kuma Weblate (#2663)
* Translated using Weblate (Chinese (Simplified))

Currently translated at 99.2% (677 of 682 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/

* Translated using Weblate (Chinese (Traditional, Hong Kong))

Currently translated at 56.4% (385 of 682 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (682 of 682 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (682 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/

* Translated using Weblate (Chinese (Traditional, Hong Kong))

Currently translated at 56.5% (386 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/

* Translated using Weblate (Czech)

Currently translated at 100.0% (683 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/

* Translated using Weblate (Czech)

Currently translated at 100.0% (683 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (683 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (683 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/

* Translated using Weblate (Chinese (Traditional))

Currently translated at 98.2% (671 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/

* Translated using Weblate (Chinese (Traditional, Hong Kong))

Currently translated at 56.8% (388 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/

* Translated using Weblate (Czech)

Currently translated at 100.0% (683 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/

* Translated using Weblate (French)

Currently translated at 100.0% (683 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/

* Translated using Weblate (Russian)

Currently translated at 86.2% (589 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (683 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (683 of 683 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/

* Added translation using Weblate (Aramaic)

* Added translation using Weblate (Yue)

* Translated using Weblate (Czech)

Currently translated at 100.0% (684 of 684 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/cs/

* Translated using Weblate (French)

Currently translated at 100.0% (684 of 684 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (684 of 684 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/

* Translated using Weblate (Chinese (Traditional, Hong Kong))

Currently translated at 57.6% (394 of 684 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/

* Translated using Weblate (Yue)

Currently translated at 0.1% (1 of 684 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/yue/

* Translated using Weblate (Chinese (Traditional, Hong Kong))

Currently translated at 58.6% (401 of 684 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant_HK/

* Translated using Weblate (English)

Currently translated at 100.0% (684 of 684 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/en/

* Translated using Weblate (Yue)

Currently translated at 2.0% (14 of 684 strings)

Translation: Uptime Kuma/Uptime Kuma
Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/yue/

Co-authored-by: 401Unauthorized <yehowahliu@4o1.to>
Co-authored-by: Louis Lam <louislam@users.noreply.github.com>
Co-authored-by: test <tori@weblate2.louislam.net>
Co-authored-by: Buchtič <martin.buchta@gmail.com>
Co-authored-by: Michal <black23@gmail.com>
Co-authored-by: deluxghost <deluxghost@gmail.com>
Co-authored-by: Cyril59310 <archas.cyril@hotmail.fr>
Co-authored-by: sovushik <evgeniy@grachev.biz>
Co-authored-by: Ömer Faruk Genç <omer@farukgenc.com>
2023-01-25 02:00:56 +08:00
Louis Lam
a9b7bbcd9e Add 繁體中文 (廣東話 / 粵語) 2023-01-25 01:58:31 +08:00
Louis Lam
edd5592dca Update CONTRIBUTING.md 2023-01-25 01:37:19 +08:00
Louis Lam
e3246a2705 Update README.md 2023-01-25 01:30:58 +08:00
Louis Lam
e1e6227245 Update README.md 2023-01-25 01:29:29 +08:00
Louis Lam
b0e1bb4057 Create README.md 2023-01-25 01:28:10 +08:00
Louis Lam
2a86b43d69 Move notification related language keys to the bottom. 2023-01-25 01:10:25 +08:00
Louis Lam
1dabbd6442 Merge pull request #2666 from chakflying/fix/log-call
Fix: Fix incorrect log call format in docker monitor
2023-01-25 00:22:51 +08:00
Louis Lam
9cc3bd0de4 Avoid the multiple queries for Gamedig monitor 2023-01-25 00:19:54 +08:00
Nelson Chan
c4c720027c Fix: Use correct log call format 2023-01-24 23:47:33 +08:00
Louis Lam
3eab6e8238 Merge pull request #2566 from WhyKickAmooCow/master
Add GameDig monitor
2023-01-24 23:15:29 +08:00
Louis Lam
e637fa4e40 Add language key 2023-01-24 23:09:24 +08:00
Louis Lam
83e0401dd8 Show game list for GameDig monitor 2023-01-24 23:03:01 +08:00
Louis Lam
aab04f6644 Merge remote-tracking branch 'origin/master' into WhyKickAmooCow_master 2023-01-24 19:44:21 +08:00
Louis Lam
2408b1bffa Update README.md 2023-01-24 19:20:35 +08:00
Louis Lam
417efd9711 Update README.md 2023-01-24 18:13:31 +08:00
Louis Lam
bf5ac3fc19 Update CONTRIBUTING.md 2023-01-24 16:55:16 +08:00
Louis Lam
434bff6714 Add Help language key 2023-01-24 16:52:36 +08:00
Louis Lam
1d64b0c11b Merge pull request #2662 from YehowahLiu/weblate
Follow-up work of migrating to weblate
2023-01-24 16:36:15 +08:00
401Unauthorized
f125534829 remove WIP 2023-01-24 16:02:43 +08:00
401Unauthorized
ea83af3404 clean up codes 2023-01-24 16:00:51 +08:00
Louis Lam
b05c620ec2 Merge pull request #2611 from YehowahLiu/weblate
Prepare for using Weblate
2023-01-24 15:25:46 +08:00
401Unauthorized
9c4b03aee2 sync language changes from upstream 2023-01-24 15:18:30 +08:00
401Unauthorized
912686a299 Merge from upstream 2023-01-24 15:16:59 +08:00
Cyril59310
ae0ef79060 Update french translation (#2634) 2023-01-24 15:16:18 +08:00
Louis Lam
a2045b59bb Merge pull request #2638 from amworx/master
Arabic language support is now in action ✌️
2023-01-24 14:25:55 +08:00
Louis Lam
8ade7120ff Update src/i18n.js
Co-authored-by: 401Unauthorized <redme@live.cn>
2023-01-24 13:24:42 +08:00
Matthew Nickson
e9044ae956 Removed repetitiion of %
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-23 18:10:45 +00:00
Louis Lam
0c86a4d4e7 Merge pull request #2659 from Buchtic/master
Update cs-CZ.js
2023-01-24 00:13:17 +08:00
401Unauthorized
5683896910 docs: prepare for weblate 2023-01-23 21:06:58 +08:00
Buchtič
b288d71535 Update cs-CZ.js 2023-01-23 10:20:22 +01:00
Abdulrahman Mustafa
861ddc6117 Merge branch 'master' of https://github.com/amworx/uptime-kuma 2023-01-22 21:31:22 +00:00
Abdulrahman Mustafa
1197f881a1 Checked with eslint, with no errors 2023-01-22 21:31:02 +00:00
Abdulrahman Mustafa
211cbd4687 Merge branch 'louislam:master' into master 2023-01-22 23:28:24 +03:00
Louis Lam
dd6a76c4cc Merge pull request #2652 from Metatropics/main
Removed superflous 'Message' prefix from Pushover
2023-01-21 22:16:17 +08:00
alejandrohernandezrosales
fa23e7ad19 Removed superflous Message prefix 2023-01-20 23:59:11 -06:00
Louis Lam
6ccf741bc4 Merge pull request #2632 from chakflying/fix/docker-timeout
Fix: Use default timeout & CachebleDnsHttpsAgent for docker monitor
2023-01-19 19:26:40 +08:00
Louis Lam
0a58069742 Merge pull request #2641 from louislam/1.19.X
Merge 1.19.6 to 1.20.X
2023-01-19 14:27:45 +08:00
Abdulrahman Mustafa
316599210d Arabic language support is now in action ✌️ 2023-01-18 19:03:04 +00:00
Louis Lam
2b57b3e863 Update to 1.19.6 2023-01-19 02:17:17 +08:00
Louis Lam
6cd6a2edf0 Fix ping issue on Windows #2636 2023-01-19 02:16:07 +08:00
Matthew Nickson
86bcb85e9b Perform sanity check on uptime for status page
Fixes #2628
A sanity check is performed when calculating the uptime of a monitor on
status page. If it is greater than 100%, we just show 100%. This hasn't
been implemented on the dashboard at the request of @louislam due to
concerns it would make debugging more difficult in future if changes
were made to the uptime calculation.

Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-18 16:38:55 +00:00
Nelson Chan
6961b1bdd2 Fix: Use default timeout & CachebleDnsHttpsAgent 2023-01-18 09:53:04 +08:00
Louis Lam
54d4c4d3f7 Merge package-lock.json 2023-01-17 21:18:13 +08:00
Louis Lam
c47b6c5995 Merge remote-tracking branch 'origin/1.19.X'
# Conflicts:
#	package-lock.json
#	package.json
#	src/util-frontend.js
2023-01-17 21:17:04 +08:00
Louis Lam
7ef404ccc1 Update to 1.19.5 2023-01-17 20:32:44 +08:00
Louis Lam
a5ff27da7a Drop the property monitor.maintenance, use lastHeartBeat.status to check status instead 2023-01-17 17:34:47 +08:00
Louis Lam
7bb12a7e00 Fix #2608 2023-01-17 17:25:35 +08:00
Louis Lam
27585d0812 Fix #2618 2023-01-17 01:21:01 +08:00
Louis Lam
e675316635 Merge pull request #2586 from PopcornPanda/fix-2544
Fix: Allow long sms in PromoSMS
2023-01-16 13:21:56 +08:00
Louis Lam
b073ec2287 Add Help button which links to wiki 2023-01-16 12:39:24 +08:00
Louis Lam
31f45dcfc9 Merge pull request #2540 from twiggotronix/add-mqtt-schemes
Add mqtt, mqtts, ws and wss protocols to the mqtt monitor
2023-01-15 20:14:11 +08:00
Louis Lam
49ac71e25c Merge pull request #2549 from Computroniks/docs/update-jsdoc-2023-01-05
Added missing JSDoc comments
2023-01-15 13:10:17 +08:00
401Unauthorized
8128c8081b sync language file changes 2023-01-15 10:50:52 +08:00
401Unauthorized
e99652c5a2 sync language file changes 2023-01-15 10:46:29 +08:00
401Unauthorized
ceb7d48118 add convert script 2023-01-15 10:46:29 +08:00
401Unauthorized
bfa32f6b07 comment not allowed in json file 2023-01-15 10:46:29 +08:00
401Unauthorized
ae3a543b3b convert language files to json format 2023-01-15 10:46:29 +08:00
Louis Lam
1a9b013fc2 Merge pull request #2328 from rmarops/mongodb-ping
added MongoDB ping monitor
2023-01-15 01:43:43 +08:00
Louis Lam
1326761a8a Update mongodb and simplify the logic of mongodbPing 2023-01-15 01:36:49 +08:00
Louis Lam
e48a987b9c Merge remote-tracking branch 'origin/master' into mongodb-ping
# Conflicts:
#	server/model/monitor.js
#	server/util-server.js
#	src/pages/EditMonitor.vue
2023-01-15 01:13:11 +08:00
Louis Lam
712a3c29d4 Fix Postgres monitor do not handle some error cases correctly 2023-01-14 21:06:10 +08:00
Louis Lam
e9497ac1ab Fix knex.js issue 2023-01-14 20:49:34 +08:00
Louis Lam
6437ef198f Merge pull request #2541 from long2ice/master
feat: support redis monitor
2023-01-14 20:16:53 +08:00
Louis Lam
973d5692d0 Merge pull request #2604 from black23/patch-1
Update cs-CZ.js
2023-01-14 13:04:41 +08:00
Louis Lam
468cb004d6 Merge pull request #1690 from chakflying/feat/tags-manager
Feat: Tags Manager
2023-01-13 23:29:01 +08:00
Louis Lam
f7d41a30fa Update src/components/TagEditDialog.vue
Co-authored-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-13 23:15:41 +08:00
black23
0ef686ac2f Update cs-CZ.js
new string
2023-01-13 14:52:03 +01:00
long2ice
3b5893ea60 fix: add preserve line in redisPingAsync 2023-01-13 21:30:10 +08:00
long2ice
21cd4d64c3 fix: redisPingAsync 2023-01-13 19:10:07 +08:00
long2ice
db757123ba refactor: reuse databaseConnectionString 2023-01-13 16:32:49 +08:00
Louis Lam
4dcf31621e Update README.md 2023-01-13 15:34:48 +08:00
Nelson Chan
9c1ba97e7d Chore: Fix typo 2023-01-12 21:25:33 +08:00
Nelson Chan
e9564619f1 Feat: Implement tags manager in settings
Fix: Remove unused color options

Chore: Fix typo
2023-01-12 21:25:33 +08:00
Łukasz Szczepański
8433bceb32 Trim message to maximum allowed length 2023-01-12 08:14:31 +01:00
Louis Lam
98d001b38b Merge pull request #2575 from Joseph-Irving/victorops_notifications
Add Splunk Notification Provider
2023-01-12 14:15:36 +08:00
Nelson Chan
0ed3dd5e4f Fix: Add support for pending in badges 2023-01-12 04:14:46 +08:00
Louis Lam
d9f12a6376 Fallback to /bin/ping if ping is not found 2023-01-12 01:05:16 +08:00
Łukasz Szczepański
56ba133a1f Missing semicolon 2023-01-11 14:36:33 +01:00
Łukasz Szczepański
ec30147a7f Add option for allowing long sms in PromoSMS 2023-01-11 14:32:57 +01:00
David Twigger
2bc165379a Add unit test for hostNameRegexPattern 2023-01-11 13:28:30 +01:00
Luke
2172112144 Setting for allowing long sms 2023-01-11 12:13:47 +01:00
Luke
ecd661c801 Allow long sms in PromoSMS 2023-01-11 12:06:09 +01:00
twiggotronix
8fab7112a1 Merge branch 'louislam:master' into add-mqtt-schemes 2023-01-11 10:34:24 +01:00
Louis Lam
cc4ed308b0 Merge pull request #2581 from twiggotronix/add-frontend-unit-tests
Add frontend unit tests
2023-01-11 13:36:20 +08:00
Louis Lam
362280af14 Merge pull request #2578 from DimitriDR/master
Updating French localization
2023-01-10 22:48:20 +08:00
Nelson Chan
21b418230c Chore: reorder cases
Co-authored-by: Frank Elsinga <frank@elsinga.de>
2023-01-10 19:25:31 +08:00
David Twigger
636fc8fcfc Fix workflow 2023-01-10 08:43:39 +01:00
David Twigger
1c05ba09dc Add cypress unit tests to workflow 2023-01-10 08:24:15 +01:00
David Twigger
1565da87cf Implement cypress unit testing 2023-01-10 08:18:48 +01:00
DimitriDR
890e3abf58 Updating French localization
Signed-off-by: DimitriDR <dimitridroeck@gmail.com>
2023-01-09 21:09:57 +01:00
Matthew Nickson
6e50784b6b Merge branch 'master' into feature/#2365-allow-markdown-in-status-page-footer 2023-01-09 20:03:11 +00:00
Joseph Irving
33355c51b7 Add Splunk Notifications 2023-01-09 13:33:10 +00:00
Louis Lam
5f5c2d7c46 Update to 1.19.4 2023-01-09 21:02:57 +08:00
Louis Lam
71f4ab0aa6 Improve dockerfile 2023-01-09 21:01:45 +08:00
Louis Lam
24d1dd4c34 [auto-test] Drop Node.js 17, add 19 2023-01-09 20:24:20 +08:00
Louis Lam
c00abac834 Separate golang build layer 2023-01-09 13:43:08 +08:00
Louis Lam
439f963749 Merge pull request #2569 from Computroniks/bug/2565-negative-retention-value
Fixed negative retention time values
2023-01-09 13:08:35 +08:00
Louis Lam
f15c6470af Merge pull request #2543 from SlothCroissant/master
Removed redundant title in Pushover notification
2023-01-09 12:50:55 +08:00
Matthew Nickson
80f2d6e2a7 Added markdown support for maintenance
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-08 20:54:16 +00:00
Matthew Nickson
852a088529 Added mardown support for incident
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-08 20:46:18 +00:00
Matthew Nickson
6bc0bd84af Allowed markdown in footer of status page
Markdown support has been added using the marked module. To secure
against XSS attacks, DOMPurify is used to sanitize the generated HTML
before it is loaded on the page.

Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-08 20:39:27 +00:00
Matthew Nickson
32f7a0084a Fixed negative retention time values
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-08 19:09:06 +00:00
SlothCroissant
f8658d6160 Removed redundant title in Pushover notification 2023-01-08 10:32:16 -06:00
Nelson Chan
dd82f36da3 Fix: Improve syntax & fix weird label logic 2023-01-09 00:16:18 +08:00
Adam Spurgeon
774d754b21 Add GameDig monitor 2023-01-08 21:43:30 +13:00
Louis Lam
d596f8f7eb Merge pull request #2560 from DimitriDR/master
Adding translations for Kook & ZohoCliq
2023-01-08 14:03:35 +08:00
Louis Lam
23a525e36a Update CONTRIBUTING.md 2023-01-08 00:42:15 +08:00
Louis Lam
221d1d40f5 Update CONTRIBUTING.md 2023-01-08 00:32:13 +08:00
Louis Lam
60ec87941e Merge pull request #2552 from MrEddX/bulgarian
Update bg-BG.js
2023-01-08 00:10:18 +08:00
DimitriDR
e8e4361e09 Adding translations for Kook & ZohoCliq 2023-01-07 13:10:25 +01:00
Matthew Nickson
d6c91869af Reverted changes to en.js
Some changes were carried over in the merge

Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-06 20:15:16 +00:00
Matthew Nickson
5d6770c0db Removed excess space around function
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-06 20:12:21 +00:00
Matthew Nickson
7a13b959a3 Updated to match changes in #2223
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-06 20:09:40 +00:00
Matthew Nickson
675806829c Changed wording for safeDelete function JSDoc 2023-01-06 17:17:37 +00:00
Louis Lam
21c1921867 Update server/uptime-kuma-server.js
Co-authored-by: 琚致远 / Zhiyuan Ju <juzhiyuan@apache.org>
2023-01-06 23:04:02 +08:00
David Twigger
e490ec6d29 move hostname regex pattern function to frontend-utils 2023-01-06 11:00:20 +01:00
MrEddX
7ad4392529 Update bg-BG.js
Translation Updated
2023-01-06 09:00:45 +02:00
Louis Lam
f3d3e064f8 Merge pull request #2538 from deluxghost/master
Updated zh-CN.js
2023-01-06 10:46:37 +08:00
Louis Lam
80c91b8234 Merge pull request #2546 from Computroniks/bug/#2419-padding-around-clear-data-dropdown
Fixed #2419 Styling of clear data dropdown
2023-01-06 10:34:55 +08:00
Matthew Nickson
dc8289df12 Added JSDoc for src/
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-05 22:55:51 +00:00
Matthew Nickson
caff9ca736 Added JSDoc for server/
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-05 22:19:05 +00:00
Matthew Nickson
c7eb72e73b JSDoc for extra/
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-05 19:57:28 +00:00
Matthew Nickson
fc5ec5f492 Fixed styling of clear data dropdown
Fixed #2419

Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-05 19:24:29 +00:00
long2ice
40ebc2df79 feat: support redis monitor 2023-01-05 23:02:56 +08:00
David Twigger
abf5e435fe move to utility function 2023-01-05 14:48:12 +01:00
David Twigger
8a372201f1 clean up 2023-01-05 14:23:05 +01:00
twiggotronix
8ec240fe19 Merge branch 'louislam:master' into add-mqtt-schemes 2023-01-05 14:08:05 +01:00
David Twigger
5362aab0e5 specify scheme for mqtt monitor type only 2023-01-05 14:06:13 +01:00
Louis Lam
bc7271b99c Merge pull request #2372 from SirMorfield/docker-compose
Fix spelling in README
2023-01-05 21:04:01 +08:00
Louis Lam
4ebf5a5f07 Update README.md 2023-01-05 21:03:28 +08:00
Louis Lam
fbceefec36 Merge pull request #2223 from Computroniks/feature/remove-hardcoded-ping-path
feat: Change ping module to danielzzz/node-ping
2023-01-05 20:40:41 +08:00
Louis Lam
0b959514f8 Fix timeout 2023-01-05 20:38:37 +08:00
Louis Lam
4c5e2ea237 Update CONTRIBUTING.md 2023-01-05 20:03:28 +08:00
Louis Lam
7d92351568 Match previous settings 2023-01-05 19:30:55 +08:00
Louis Lam
494c53971c Convert to UTF8 on Windows only 2023-01-05 19:22:15 +08:00
David Twigger
fc1914bccd Fix lint 2023-01-05 11:42:19 +01:00
Louis Lam
4239cf4255 Pin dependency of ping 2023-01-05 17:11:37 +08:00
David Twigger
c196c34840 Add mqtt, mqtts, ws and wss protocols to the mqtt monitor 2023-01-05 08:57:48 +01:00
DX
554402b484 Updated zh-CN.js 2023-01-05 15:38:51 +08:00
Louis Lam
b049e4e1b4 Merge pull request #2534 from furkanipek/tr-lang-update
Update tr-TR.js
2023-01-05 14:21:30 +08:00
Matthew Nickson
90a2668272 Restructured condition + ensure data is UTF-8
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-04 17:32:27 +00:00
Louis Lam
49b5de7d40 Update Apprise to 1.2.1 2023-01-05 00:48:49 +08:00
Matthew Nickson
69e1880cd3 Added not active condition to prevent false error
Added a check to see if the host is alive. This prevents failiures when
the user specifies a hostname of `unknown`.

Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2023-01-04 16:46:36 +00:00
Furkan İpek
610b6248aa Update tr-TR.js 2023-01-04 16:41:00 +03:00
Furkan İpek
e591647b60 Update tr-TR.js 2023-01-04 16:35:48 +03:00
Louis Lam
da99833d4c Merge pull request #2528 from chakflying/fix/tag-validation
Fix: Fix incorrect add tag form validation
2023-01-04 16:11:05 +08:00
Louis Lam
4bf23fdd1a Update jsonwebtoken from ~8 to ~9 2023-01-04 15:55:36 +08:00
Louis Lam
f99a64da67 Run npm update 2023-01-04 15:48:09 +08:00
Louis Lam
2e022789f6 Merge pull request #2527 from chakflying/fix/docker-down
Fix: Fix incorrect handling for container down
2023-01-04 15:33:59 +08:00
Matthew Nickson
73835f3328 Changed from ping-lite to ping module
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>

#Fixes 2126
2023-01-03 20:03:36 +00:00
Matthew Nickson
4819112e25 Merge remote-tracking branch 'origin/master' into feature/remove-hardcoded-ping-path 2023-01-03 19:10:17 +00:00
Joppe Koers
2d3fd738e4 Fix small spelling mistake 2023-01-03 15:37:32 +01:00
Nelson Chan
edd8fe2e22 Fix: Fix incorrect tag form validation 2023-01-03 22:18:45 +08:00
Nelson Chan
204792dd2d Fix: Fix incorrect handling for container down 2023-01-03 22:07:14 +08:00
Nelson Chan
942b55ca03 Fix: Add support for maintenance in badges 2023-01-03 21:45:55 +08:00
Louis Lam
b8e8c1b9db Update to 1.19.3 2023-01-03 18:05:19 +08:00
Louis Lam
0cead83705 Fix #2516 2023-01-03 14:50:41 +08:00
Louis Lam
7b0093b8b3 Merge pull request #2514 from lionep/patch-1
Improve french translation
2023-01-03 13:14:25 +08:00
lionep
cd7e362b81 Improve french translation
Set "Not available, please setup" translation more accurate, because it's in use in notifications and proxies page.
2023-01-02 08:46:42 +01:00
Arniwatt Chonkiattipoom
a8af2a418e Slack notification block not working (#1958)
* [empty commit] pull request for slack notification

* Add attachments block for slack notification

* chore: update action button in new attachment block

* chore: loop in attachments to push blocks

* chore: missing semicolon

Co-authored-by: pruekanw <arniwatt.c@linecorp.com>
2023-01-02 15:01:50 +08:00
Louis Lam
39ac9b887e Fix #2504 2023-01-01 22:27:14 +08:00
Louis Lam
28c3291020 Merge pull request #2513 from louislam/revert-2433-mathias/Auth-case-insensitive-login
Revert "Auth: Case insensitive login check on username"
2023-01-01 22:19:27 +08:00
Louis Lam
50711391d1 Revert "Auth: Case insensitive login check on username" 2023-01-01 22:19:00 +08:00
Louis Lam
e88e10cc8e Fix #2494 2023-01-01 21:43:54 +08:00
Louis Lam
27146ffeef Merge pull request #2433 from mathiash98/mathias/Auth-case-insensitive-login
Auth: Case insensitive login check on username
2023-01-01 14:16:59 +08:00
Louis Lam
41a9f2ff8a Merge pull request #2495 from minhhoangvn/fix/update-service-name-grpc
Bug fix: gRPC check throws errors when response data size > 50 chars
2023-01-01 13:57:10 +08:00
Louis Lam
cd7a6e4019 Merge pull request #2478 from YehowahLiu/master
Add Kook notification provider
2023-01-01 02:53:03 +08:00
Louis Lam
8bb064c6fa Merge pull request #2157 from Mikkel-T/fix-discord-embed
Improve the URL field in Discord embeds
2022-12-31 22:41:40 +08:00
Louis Lam
1006fbd873 A possible fix for #2447 2022-12-30 13:46:53 +08:00
Louis Lam
5554432b31 Merge pull request #2377 (Zoho Cliq Notification Provider)
Zoho Cliq Notification Provider
2022-12-29 19:00:50 +08:00
minhhoang
d111db0321 fix: add accurate error message when user input invalid service name or method name 2022-12-29 08:10:58 +07:00
minhhoang
4147a4c404 fix: #2480 2022-12-28 22:31:33 +07:00
Louis Lam
8c684e9293 Update SECURITY.md 2022-12-28 19:59:33 +08:00
Louis Lam
f025de6eaf Merge pull request #2490 from 5idereal/patch-1
update zh-TW.js
2022-12-28 18:17:10 +08:00
5idereal
7f394d0630 update zh-TW.js 2022-12-28 17:29:46 +08:00
Louis Lam
9fe9e235ca Merge pull request #2236 from mishankov/fix/stats-30-days
Simple fix for Uptime component
2022-12-28 15:37:46 +08:00
401Unauthorized
50b84f5f45 fix code style: add missing semicolon 2022-12-27 14:12:22 +08:00
401Unauthorized
c60b741406 Add kook notification provider 2022-12-27 14:12:22 +08:00
thefourCraft
f6ea1fe9a5 he-IL (#2460) 2022-12-27 14:04:53 +08:00
Louis Lam
b7e3ec2372 Merge pull request #2476 from DimitriDR/master
Huge improvement for French localization.
2022-12-27 14:02:25 +08:00
DimitriDR
625fd7c2aa Huge improvement for French localization. 2022-12-27 01:02:43 +01:00
Mathias Haugsbø
b3ac7c3d43 Username case insensitive, patch db instead of using LIKE 2022-12-19 12:18:33 +01:00
Mathias Haugsbø
c79b2913a2 Auth: Case insensitive login check on username
Allows users to add users with capital letters and then login with just lowercase letters.

We accidentally capitalized the first letter of our username so the other people using it frequently thinks they wrote the wrong password.
2022-12-18 17:16:19 +01:00
Joppe Koers
3ea6711053 Remove docker compose again 2022-12-15 23:03:06 +01:00
panos
9da28fbbc7 zoho cliq code style 2022-12-08 13:56:02 +02:00
panos
851a04b082 zoho cliq code style 2022-12-08 13:53:02 +02:00
panos
68bc7ac421 zoho cliq code style 2022-12-08 13:41:05 +02:00
panos
73bfdb9ef9 zoho cliq notification provider 2022-12-08 13:32:10 +02:00
Joppe Koers
f8c7da7995 Add docker-compose to README 2022-12-06 18:44:16 +01:00
Joppe Koers
f3660a0cec Fix spelling in README 2022-12-06 18:43:28 +01:00
rmarops
0e30843a75 fixed lint check missing semicolon 2022-11-16 22:27:18 -05:00
rmarops
2103edb604 moved client close out of finally block and fixed linting errors 2022-11-16 22:21:15 -05:00
rmarops
b059a36e66 added MongoDB ping monitor 2022-11-16 20:50:34 -05:00
Matthew Nickson
4339ca7eb5 Merge branch 'master' into feature/#1891-set-ping-packet-size 2022-10-22 16:22:28 +01:00
Denis Mishankov
7313aa6563 fix spaces 2022-10-17 20:36:52 +03:00
Denis Mishankov
c7871427c3 compute title value 2022-10-17 20:20:51 +03:00
Matthew Nickson
6b47ad07ca [empty commit] pull request for #2126 remove hardcoded ping 2022-10-12 22:03:05 +01:00
Mikkel-T
a42f7416b5 Improve the URL field in Discord embeds
Instead of having two different ways of showing the URL field in Discord embeds, always show the raw address.
2022-10-02 19:29:33 +02:00
Kyle
7aa3f6c559 Corrected default hostname port for healthcheck 2022-09-14 15:04:21 -06:00
Kyle
db4b2cd984 Re-add support for UPTIME_KUMA_HOST and _PORT in healthcheck.js 2022-09-14 14:25:56 -06:00
Kyle
b4f0f8bca5 Replace healthcheck hostname env variable name 2022-09-13 22:18:00 -06:00
Kyle
b382064384 Replace port env var in healthcheck.js 2022-09-13 21:52:32 -06:00
Matthew Nickson
742b1337be Merge branch 'master' into feature/#1891-set-ping-packet-size 2022-09-10 21:20:03 +01:00
Matthew Nickson
c3d655afb4 Merge branch 'master' into feature/#1891-set-ping-packet-size 2022-08-13 21:15:16 +02:00
Matthew Nickson
b5f04573f2 Added formatting to ping options
Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
2022-07-14 09:19:40 +01:00
Matthew Nickson
a54e58b4d6 Added Ping packet size #1891
This should fully implement #1891 by adding an extra field to the edit
monitor page and an extra column to the database. The user can now
set the size of the packet to send, it defaults to 56. A maximum limit
of 65500 was chosen to ensure that the total size of the packet does
not exceed the IPv4 maximum packet size and to comply with the limit
imposed by Windows.

Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2022-07-14 08:32:51 +01:00
Matthew Nickson
219b00f660 [empty commit] pull request for #1891 set ping size 2022-07-13 23:08:35 +01:00
180 changed files with 25970 additions and 17261 deletions

View File

@@ -16,7 +16,6 @@ Please delete any options that are not relevant.
- User interface (UI)
- New feature (non-breaking change which adds functionality)
- Breaking change (fix or feature that would cause existing functionality to not work as expected)
- Translation update
- Other
- This change requires a documentation update

View File

@@ -6,8 +6,12 @@ name: Auto Test
on:
push:
branches: [ master ]
paths-ignore:
- '*.md'
pull_request:
branches: [ master ]
paths-ignore:
- '*.md'
jobs:
auto-test:
@@ -18,7 +22,7 @@ jobs:
strategy:
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
node: [ 14, 16, 17, 18 ]
node: [ 14, 16, 18, 19 ]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
@@ -36,6 +40,7 @@ jobs:
env:
HEADLESS_TEST: 1
JUST_FOR_TEST: ${{ secrets.JUST_FOR_TEST }}
check-linters:
runs-on: ubuntu-latest
@@ -66,3 +71,19 @@ jobs:
- run: npm install
- run: npm run build
- run: npm run cy:test
frontend-unit-tests:
needs: [ check-linters ]
runs-on: ubuntu-latest
steps:
- run: git config --global core.autocrlf false # Mainly for Windows
- uses: actions/checkout@v3
- name: Use Node.js 14
uses: actions/setup-node@v3
with:
node-version: 14
cache: 'npm'
- run: npm install
- run: npm run build
- run: npm run cy:run:unit

View File

@@ -1,4 +1,3 @@
name: Close Incorrect Issue
on:
@@ -12,13 +11,13 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest]
node-version: [16.x]
node-version: [16]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'

View File

@@ -3,13 +3,13 @@ on:
workflow_dispatch:
schedule:
- cron: '0 */6 * * *'
#Run every 6 hours
#Run every 6 hours
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v5
- uses: actions/stale@v7
with:
stale-issue-message: 'We are clearing up our old issues and your ticket has been open for 3 months with no activity. Remove stale label or comment or this will be closed in 2 days.'
close-issue-message: 'This issue was closed because it has been stalled for 2 days with no activity.'

View File

@@ -1,6 +1,6 @@
# Project Info
First of all, thank you everyone who made pull requests for Uptime Kuma, I never thought GitHub Community can be that nice! And also because of this, I also never thought other people actually read my code and edit my code. It is not structured and commented so well, lol. Sorry about that.
First of all, I want to thank everyone who made pull requests for Uptime Kuma. I never thought the GitHub Community would be so nice! Because of this, I also never thought that other people would actually read and edit my code. It is not very well structured or commented, sorry about that.
The project was created with vite.js (vue3). Then I created a subdirectory called "server" for server part. Both frontend and backend share the same package.json.
@@ -17,8 +17,11 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
## Directories
- config (dev config files)
- data (App data)
- db (Base database and migration scripts)
- dist (Frontend build)
- docker (Dockerfiles)
- extra (Extra useful scripts)
- public (Frontend resources for dev only)
- server (Server source code)
@@ -27,20 +30,23 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
## Can I create a pull request for Uptime Kuma?
Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create an empty draft pull request or open an issue, so we can discuss first**. Especially for a large pull request or you don't know it will be merged or not.
Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create an empty draft pull request or open an issue, so we can have a discussion first**. Especially for a large pull request or you don't know it will be merged or not.
Here are some references:
✅ Usually Accept:
- Bug/Security fix
- Translations
- Bug fix
- Security fix
- Adding notification providers
- Adding new language files (You should go to https://weblate.kuma.pet for existing languages)
- Adding new language keys: `$t("...")`
⚠️ Discussion First
- Large pull requests
- New features
❌ Won't Merge
- A dedicated pr for translating existing languages (You can now translate on https://weblate.kuma.pet)
- Do not pass auto test
- Any breaking changes
- Duplicated pull request
@@ -48,8 +54,13 @@ Here are some references:
- UI/UX is not close to Uptime Kuma
- Existing logic is completely modified or deleted for no reason
- A function that is completely out of scope
- Convert existing code into other programming languages
- Unnecessary large code changes (Hard to review, causes code conflicts to other pull requests)
The above cases cannot cover all situations.
I (@louislam) have the final say. If your pull request does not meet my expectations, I will reject it, no matter how much time you spend on it. Therefore, it is essential to have a discussion beforehand.
I will mark your pull request in the [milestones](https://github.com/louislam/uptime-kuma/milestones), if I am plan to review and merge it.
Also, please don't rush or ask for ETA, because I have to understand the pull request, make sure it is no breaking changes and stick to my vision of this project, especially for large pull requests.
@@ -72,13 +83,13 @@ Before deep into coding, discussion first is preferred. Creating an empty pull r
## Project Styles
I personally do not like something need to learn so much and need to config so much before you can finally start the app.
I personally do not like something that requires so many configurations before you can finally start the app. I hope Uptime Kuma installation could be as easy as like installing a mobile app.
- Easy to install for non-Docker users, no native build dependency is needed (at least for x86_64), no extra config, no extra effort to get it run
- Easy to install for non-Docker users, no native build dependency is needed (for x86_64/armv7/arm64), no extra config, no extra effort required to get it running
- Single container for Docker users, no very complex docker-compose file. Just map the volume and expose the port, then good to go
- Settings should be configurable in the frontend. Environment variable is not encouraged, unless it is related to startup such as `DATA_DIR`.
- Settings should be configurable in the frontend. Environment variable is not encouraged, unless it is related to startup such as `DATA_DIR`
- Easy to use
- The web UI styling should be consistent and nice.
- The web UI styling should be consistent and nice
## Coding Styles
@@ -87,7 +98,7 @@ I personally do not like something need to learn so much and need to config so m
- Follow ESLint
- Methods and functions should be documented with JSDoc
## Name convention
## Name Conventions
- Javascript/Typescript: camelCaseType
- SQLite: snake_case (Underscore)
@@ -101,7 +112,7 @@ I personally do not like something need to learn so much and need to config so m
- IDE that supports ESLint and EditorConfig (I am using IntelliJ IDEA)
- A SQLite GUI tool (SQLite Expert Personal is suggested)
## Install dependencies
## Install Dependencies for Development
```bash
npm ci
@@ -119,6 +130,12 @@ Port `3000` and port `3001` will be used.
npm run dev
```
But sometimes, you would like to keep restart the server, but not the frontend, you can run these command in two terminals:
```
npm run start-frontend-dev
npm run start-server-dev
```
## Backend Server
It binds to `0.0.0.0:3001` by default.
@@ -134,12 +151,15 @@ express.js is used for:
### Structure in /server/
- jobs/ (Jobs that are running in another process)
- model/ (Object model, auto mapping to the database table name)
- modules/ (Modified 3rd-party modules)
- monitor_types (Monitor Types)
- notification-providers/ (individual notification logic)
- routers/ (Express Routers)
- socket-handler (Socket.io Handlers)
- server.js (Server entry point and main logic)
- server.js (Server entry point)
- uptime-kuma-server.js (UptimeKumaServer class, main logic should be here, but some still in `server.js`)
## Frontend Dev Server
@@ -172,15 +192,11 @@ The data and socket logic are in `src/mixins/socket.js`.
## Unit Test
It is an end-to-end testing. It is using Jest and Puppeteer.
```bash
npm run build
npm test
```
By default, the Chromium window will be shown up during the test. Specifying `HEADLESS_TEST=1` for terminal environments.
## Dependencies
Both frontend and backend share the same package.json. However, the frontend dependencies are eventually not used in the production environment, because it is usually also baked into dist files. So:
@@ -194,18 +210,12 @@ Both frontend and backend share the same package.json. However, the frontend dep
### Update Dependencies
Install `ncu`
https://github.com/raineorshine/npm-check-updates
```bash
ncu -u -t patch
npm install
```
Since previously updating Vite 2.5.10 to 2.6.0 broke the application completely, from now on, it should update patch release version only.
Patch release = the third digit ([Semantic Versioning](https://semver.org/))
If for maybe security reasons, a library must be updated. Then you must need to check if there are any breaking changes.
## Translations
Please read: https://github.com/louislam/uptime-kuma/tree/master/src/languages

View File

@@ -1,38 +1,39 @@
# Uptime Kuma
<a target="_blank" href="https://github.com/louislam/uptime-kuma"><img src="https://img.shields.io/github/stars/louislam/uptime-kuma" /></a> <a target="_blank" href="https://hub.docker.com/r/louislam/uptime-kuma"><img src="https://img.shields.io/docker/pulls/louislam/uptime-kuma" /></a> <a target="_blank" href="https://hub.docker.com/r/louislam/uptime-kuma"><img src="https://img.shields.io/docker/v/louislam/uptime-kuma/latest?label=docker%20image%20ver." /></a> <a target="_blank" href="https://github.com/louislam/uptime-kuma"><img src="https://img.shields.io/github/last-commit/louislam/uptime-kuma" /></a> <a target="_blank" href="https://opencollective.com/uptime-kuma"><img src="https://opencollective.com/uptime-kuma/total/badge.svg?label=Open%20Collective%20Backers&color=brightgreen" /></a>
[![GitHub Sponsors](https://img.shields.io/github/sponsors/louislam?label=GitHub%20Sponsors)](https://github.com/sponsors/louislam)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/louislam?label=GitHub%20Sponsors)](https://github.com/sponsors/louislam) <a href="https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/">
<img src="https://weblate.kuma.pet/widgets/uptime-kuma/-/svg-badge.svg" alt="Translation status" />
</a>
<div align="center" width="100%">
<img src="./public/icon.svg" width="128" alt="" />
</div>
It is a self-hosted monitoring tool like "Uptime Robot".
Uptime Kuma is an easy-to-use self-hosted monitoring tool.
<img src="https://uptime.kuma.pet/img/dark.jpg" width="700" alt="" />
<img src="https://user-images.githubusercontent.com/1336778/212262296-e6205815-ad62-488c-83ec-a5b0d0689f7c.jpg" width="700" alt="" />
## 🥔 Live Demo
Try it!
- Tokyo Demo Server: https://demo.uptime.kuma.pet (Sponsored by [Uptime Kuma Sponsors](https://github.com/louislam/uptime-kuma#%EF%B8%8F-sponsors))
- Europe Demo Server: https://demo.uptime-kuma.karimi.dev:27000 (Provided by [@mhkarimi1383](https://github.com/mhkarimi1383))
It is a temporary live demo, all data will be deleted after 10 minutes. Use the one that is closer to you, but I suggest that you should install and try it out for the best demo experience.
## ⭐ Features
* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / Ping / DNS Record / Push / Steam Game Server / Docker Containers.
* Fancy, Reactive, Fast UI/UX.
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications).
* 20 second intervals.
* [Multi Languages](https://github.com/louislam/uptime-kuma/tree/master/src/languages)
* Multiple Status Pages
* Map Status Page to Domain
* Ping Chart
* Certificate Info
* Proxy Support
* 2FA available
* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / Ping / DNS Record / Push / Steam Game Server / Docker Containers
* Fancy, Reactive, Fast UI/UX
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications)
* 20 second intervals
* [Multi Languages](https://github.com/louislam/uptime-kuma/tree/master/src/lang)
* Multiple status pages
* Map status pages to specific domains
* Ping chart
* Certificate info
* Proxy support
* 2FA support
## 🔧 How to Install
@@ -44,14 +45,14 @@ docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name upti
⚠️ Please use a **local volume** only. Other types such as NFS are not supported.
Browse to http://localhost:3001 after starting.
Uptime Kuma is now running on http://localhost:3001
### 💪🏻 Non-Docker
Required Tools:
- [Node.js](https://nodejs.org/en/download/) >= 14
- [Git](https://git-scm.com/downloads)
- [pm2](https://pm2.keymetrics.io/) - For run in background
- [pm2](https://pm2.keymetrics.io/) - For running Uptime Kuma in the background
```bash
# Update your npm to the latest version
@@ -73,7 +74,7 @@ pm2 start server/server.js --name uptime-kuma
```
Browse to http://localhost:3001 after starting.
Uptime Kuma is now running on http://localhost:3001
More useful PM2 Commands
@@ -171,7 +172,7 @@ Check out the latest beta release here: https://github.com/louislam/uptime-kuma/
If you want to report a bug or request a new feature, feel free to open a [new issue](https://github.com/louislam/uptime-kuma/issues).
### Translations
If you want to translate Uptime Kuma into your language, please read: https://github.com/louislam/uptime-kuma/tree/master/src/languages
If you want to translate Uptime Kuma into your language, please visit [Weblate Readme](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md).
Feel free to correct my grammar in this README, source code, or wiki, as my mother language is not English and my grammar is not that great.

View File

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

View File

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

View File

@@ -0,0 +1,5 @@
BEGIN TRANSACTION;
ALTER TABLE monitor
ADD game VARCHAR(255);
COMMIT

View File

@@ -0,0 +1,4 @@
-- You should not modify if this have pushed to Github, unless it does serious wrong with the db.
BEGIN TRANSACTION;
ALTER TABLE status_page ADD google_analytics_tag_id VARCHAR;
COMMIT;

View File

@@ -0,0 +1,5 @@
-- You should not modify if this have pushed to Github, unless it does serious wrong with the db.
BEGIN TRANSACTION;
ALTER TABLE monitor
ADD packet_size INTEGER DEFAULT 56 NOT NULL;
COMMIT;

View File

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

View File

@@ -0,0 +1,16 @@
############################################
# Build in Golang
# Run npm run build-healthcheck-armv7 in the host first, another it will be super slow where it is building the armv7 healthcheck
############################################
FROM golang:1.19-buster
WORKDIR /app
ARG TARGETPLATFORM
COPY ./extra/ ./extra/
# Compile healthcheck.go
RUN apt update && \
apt --yes --no-install-recommends install curl && \
curl -sL https://deb.nodesource.com/setup_18.x | bash && \
apt --yes --no-install-recommends install nodejs && \
node ./extra/build-healthcheck.js $TARGETPLATFORM && \
apt --yes remove nodejs

View File

@@ -10,8 +10,8 @@ WORKDIR /app
# Stupid python3 and python3-pip actually install a lot of useless things into Debian, specify --no-install-recommends to skip them, make the base even smaller than alpine!
RUN apt update && \
apt --yes --no-install-recommends install python3 python3-pip python3-cryptography python3-six python3-yaml python3-click python3-markdown python3-requests python3-requests-oauthlib \
sqlite3 iputils-ping util-linux dumb-init && \
pip3 --no-cache-dir install apprise==1.2.0 && \
sqlite3 iputils-ping util-linux dumb-init git && \
pip3 --no-cache-dir install apprise==1.2.1 && \
rm -rf /var/lib/apt/lists/* && \
apt --yes autoremove

View File

@@ -1,19 +1,9 @@
############################################
# Build in Golang
# Run npm run build-healthcheck-armv7 in the host first, another it will be super slow where it is building the armv7 healthcheck
# Check file: builder-go.dockerfile
############################################
FROM golang:1.19.4-buster AS build_healthcheck
WORKDIR /app
ARG TARGETPLATFORM
COPY ./extra/ ./extra/
# Compile healthcheck.go
RUN apt update
RUN apt --yes --no-install-recommends install curl
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash
RUN apt --yes --no-install-recommends install nodejs
RUN node -v
RUN node ./extra/build-healthcheck.js $TARGETPLATFORM
FROM louislam/uptime-kuma:builder-go AS build_healthcheck
############################################
# Build in Node.js
@@ -22,10 +12,13 @@ FROM louislam/uptime-kuma:base-debian AS build
WORKDIR /app
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
COPY .npmrc .npmrc
COPY package.json package.json
COPY package-lock.json package-lock.json
RUN npm ci --omit=dev
COPY . .
COPY --from=build_healthcheck /app/extra/healthcheck /app/extra/healthcheck
RUN npm ci --production && \
chmod +x /app/extra/entrypoint.sh
RUN chmod +x /app/extra/entrypoint.sh
############################################
# ⭐ Main Image

View File

@@ -3,10 +3,12 @@ WORKDIR /app
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
COPY .npmrc .npmrc
COPY package.json package.json
COPY package-lock.json package-lock.json
RUN npm ci --omit=dev
COPY . .
RUN npm ci --production && \
chmod +x /app/extra/entrypoint.sh
RUN chmod +x /app/extra/entrypoint.sh
FROM louislam/uptime-kuma:base-alpine AS release
WORKDIR /app

View File

@@ -32,6 +32,10 @@ if (! exists) {
process.exit(1);
}
/**
* Commit updated files
* @param {string} version Version to update to
*/
function commit(version) {
let msg = "Update to " + version;
@@ -47,6 +51,10 @@ function commit(version) {
console.log(res.stdout.toString().trim());
}
/**
* Create a tag with the specified version
* @param {string} version Tag to create
*/
function tag(version) {
let res = childProcess.spawnSync("git", [ "tag", version ]);
console.log(res.stdout.toString().trim());
@@ -55,6 +63,11 @@ function tag(version) {
console.log(res.stdout.toString().trim());
}
/**
* Check if a tag exists for the specified version
* @param {string} version Version to check
* @returns {boolean} Does the tag already exist
*/
function tagExists(version) {
if (! version) {
throw new Error("invalid version");

View File

@@ -25,6 +25,10 @@ if (platform === "linux/amd64") {
const file = fs.createWriteStream("cloudflared.deb");
get("https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-" + arch + ".deb");
/**
* Download specified file
* @param {string} url URL to request
*/
function get(url) {
http.get(url, function (res) {
if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {

View File

@@ -1,3 +1,7 @@
/*
* If changed, have to run `npm run build-docker-builder-go`.
* This script should be run after a period of time (180s), because the server may need some time to prepare.
*/
package main
import (
@@ -7,12 +11,17 @@ import (
"net/http"
"os"
"runtime"
"strings"
"time"
)
func main() {
isFreeBSD := runtime.GOOS == "freebsd"
// Is K8S + uptime-kuma as the container name
// See #2083
isK8s := strings.HasPrefix(os.Getenv("UPTIME_KUMA_PORT"), "tcp://")
// process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{
InsecureSkipVerify: true,
@@ -40,7 +49,11 @@ func main() {
hostname = "127.0.0.1"
}
port := os.Getenv("UPTIME_KUMA_PORT")
port := ""
// UPTIME_KUMA_PORT is override by K8S unexpectedly,
if !isK8s {
port = os.Getenv("UPTIME_KUMA_PORT")
}
if len(port) == 0 {
port = os.Getenv("PORT")
}

View File

@@ -19,17 +19,17 @@ if (sslKey && sslCert) {
// If host is omitted, the server will accept connections on the unspecified IPv6 address (::) when IPv6 is available and the unspecified IPv4 address (0.0.0.0) otherwise.
// Dual-stack support for (::)
let hostname = process.env.UPTIME_KUMA_HOST;
let hostname = process.env.UPTIME_KUMA_SERVICE_HOST || process.env.UPTIME_KUMA_HOST || "::";
// Also read HOST if not *BSD, as HOST is a system environment variable in FreeBSD
if (!hostname && !FBSD) {
hostname = process.env.HOST;
}
const port = parseInt(process.env.UPTIME_KUMA_PORT || process.env.PORT || 3001);
const port = parseInt(process.env.UPTIME_KUMA_SERVICE_PORT || process.env.UPTIME_KUMA_PORT || process.env.PORT || 3001);
let options = {
host: hostname || "127.0.0.1",
host: hostname,
port: port,
timeout: 28 * 1000,
};

View File

@@ -1,11 +1,12 @@
const pkg = require("../package.json");
const fs = require("fs");
const util = require("../src/util");
const dayjs = require("dayjs");
util.polyfill();
const oldVersion = pkg.version;
const newVersion = oldVersion + "-nightly-" + util.genSecret(8);
const newVersion = oldVersion + "-nightly-" + dayjs().format("YYYYMMDDHHmmss");
console.log("Old Version: " + oldVersion);
console.log("New Version: " + newVersion);

View File

@@ -43,6 +43,11 @@ const main = async () => {
console.log("Finished.");
};
/**
* Ask question of user
* @param {string} question Question to ask
* @returns {Promise<string>} Users response
*/
function question(question) {
return new Promise((resolve) => {
rl.question(question, (answer) => {

View File

@@ -53,6 +53,11 @@ const main = async () => {
console.log("Finished.");
};
/**
* Ask question of user
* @param {string} question Question to ask
* @returns {Promise<string>} Users response
*/
function question(question) {
return new Promise((resolve) => {
rl.question(question, (answer) => {

View File

@@ -135,6 +135,11 @@ server.listen({
udp: 5300
});
/**
* Get human readable request type from request code
* @param {number} code Request code to translate
* @returns {string} Human readable request type
*/
function type(code) {
for (let name in Packet.TYPE) {
if (Packet.TYPE[name] === code) {

View File

@@ -11,6 +11,7 @@ class SimpleMqttServer {
this.port = port;
}
/** Start the MQTT server */
start() {
this.server.listen(this.port, () => {
console.log("server started and listening on port ", this.port);

View File

@@ -36,10 +36,8 @@ if (! exists) {
}
/**
* Updates the version number in package.json and commits it to git.
* @param {string} version - The new version number
*
* Generated by Trelent
* Commit updated files
* @param {string} version Version to update to
*/
function commit(version) {
let msg = "Update to " + version;
@@ -53,16 +51,19 @@ function commit(version) {
}
}
/**
* Create a tag with the specified version
* @param {string} version Tag to create
*/
function tag(version) {
let res = childProcess.spawnSync("git", [ "tag", version ]);
console.log(res.stdout.toString().trim());
}
/**
* Checks if a given version is already tagged in the git repository.
* @param {string} version - The version to check for.
*
* Generated by Trelent
* Check if a tag exists for the specified version
* @param {string} version Version to check
* @returns {boolean} Does the tag already exist
*/
function tagExists(version) {
if (! version) {

View File

@@ -10,6 +10,10 @@ if (!newVersion) {
updateWiki(newVersion);
/**
* Update the wiki with new version number
* @param {string} newVersion Version to update to
*/
function updateWiki(newVersion) {
const wikiDir = "./tmp/wiki";
const howToUpdateFilename = "./tmp/wiki/🆙-How-to-Update.md";
@@ -39,6 +43,10 @@ function updateWiki(newVersion) {
safeDelete(wikiDir);
}
/**
* Check if a directory exists and then delete it
* @param {string} dir Directory to delete
*/
function safeDelete(dir) {
if (fs.existsSync(dir)) {
fs.rm(dir, {

5625
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "uptime-kuma",
"version": "1.19.2",
"version": "1.20.0-beta.0",
"license": "MIT",
"repository": {
"type": "git",
@@ -31,6 +31,7 @@
"build-docker": "npm run build && npm run build-docker-debian && npm run build-docker-alpine",
"build-docker-alpine-base": "docker buildx build -f docker/alpine-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-alpine . --push",
"build-docker-debian-base": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-debian . --push",
"build-docker-builder-go": "docker buildx build -f docker/builder-go.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:builder-go . --push",
"build-docker-alpine": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:$VERSION-alpine --target release . --push",
"build-docker-debian": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:$VERSION -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:$VERSION-debian --target release . --push",
"build-docker-nightly": "npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push",
@@ -38,7 +39,7 @@
"build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain",
"build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push",
"upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain",
"setup": "git checkout 1.19.2 && npm ci --production && npm run download-dist",
"setup": "git checkout 1.19.6 && npm ci --production && npm run download-dist",
"download-dist": "node extra/download-dist.js",
"mark-as-nightly": "node extra/mark-as-nightly.js",
"reset-password": "node extra/reset-password.js",
@@ -60,11 +61,13 @@
"start-pr-test": "node extra/checkout-pr.js && npm install && npm run dev",
"cy:test": "node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/ --e2e",
"cy:run": "npx cypress run --browser chrome --headless --config-file ./config/cypress.config.js",
"cy:run:unit": "npx cypress run --browser chrome --headless --config-file ./config/cypress.frontend.config.js",
"cypress-open": "concurrently -k -r \"node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/\" \"cypress open --config-file ./config/cypress.config.js\"",
"build-healthcheck-armv7": "cross-env GOOS=linux GOARCH=arm GOARM=7 go build -x -o ./extra/healthcheck-armv7 ./extra/healthcheck.go"
},
"dependencies": {
"@grpc/grpc-js": "~1.7.3",
"@louislam/ping": "~0.4.2-mod.1",
"@louislam/sqlite3": "15.1.2",
"args-parser": "~1.3.0",
"axios": "~0.27.0",
@@ -81,18 +84,21 @@
"compare-versions": "~3.6.0",
"compression": "~1.7.4",
"dayjs": "~1.11.5",
"dotenv": "~16.0.3",
"express": "~4.17.3",
"express-basic-auth": "~1.2.1",
"express-static-gzip": "~2.1.7",
"form-data": "~4.0.0",
"gamedig": "^4.0.5",
"http-graceful-shutdown": "~3.1.7",
"http-proxy-agent": "~5.0.0",
"https-proxy-agent": "~5.0.1",
"iconv-lite": "~0.6.3",
"jsesc": "~3.0.2",
"jsonwebtoken": "~8.5.1",
"jsonwebtoken": "~9.0.0",
"jwt-decode": "~3.1.2",
"limiter": "~2.1.0",
"mongodb": "~4.13.0",
"mqtt": "~4.3.7",
"mssql": "~8.1.4",
"mysql2": "~2.3.3",
@@ -106,7 +112,8 @@
"prom-client": "~13.2.0",
"prometheus-api-metrics": "~3.2.1",
"protobufjs": "~7.1.1",
"redbean-node": "0.1.4",
"redbean-node": "~0.2.0",
"redis": "~4.5.1",
"socket.io": "~4.5.3",
"socket.io-client": "~4.5.3",
"socks-proxy-agent": "6.1.1",
@@ -139,9 +146,11 @@
"cypress": "^10.1.0",
"delay": "^5.0.0",
"dns2": "~2.0.1",
"dompurify": "~2.4.3",
"eslint": "~8.14.0",
"eslint-plugin-vue": "~8.7.1",
"favico.js": "~0.3.10",
"marked": "~4.2.5",
"jest": "~27.2.5",
"postcss-html": "~1.5.0",
"postcss-rtlcss": "~3.7.2",

View File

@@ -63,6 +63,12 @@ function myAuthorizer(username, password, callback) {
});
}
/**
* Use basic auth if auth is not disabled
* @param {express.Request} req Express request object
* @param {express.Response} res Express response object
* @param {express.NextFunction} next
*/
exports.basicAuth = async function (req, res, next) {
const middleware = basicAuth({
authorizer: myAuthorizer,

View File

@@ -37,6 +37,10 @@ class CacheableDnsHttpAgent {
this.enable = isEnable;
}
/**
* Attach cacheable to HTTP agent
* @param {http.Agent} agent Agent to install
*/
static install(agent) {
this.cacheable.install(agent);
}

View File

@@ -4,13 +4,21 @@ const demoMode = args["demo"] || false;
const badgeConstants = {
naColor: "#999",
defaultUpColor: "#66c20a",
defaultWarnColor: "#eed202",
defaultDownColor: "#c2290a",
defaultPendingColor: "#f8a306",
defaultMaintenanceColor: "#1747f5",
defaultPingColor: "blue", // as defined by badge-maker / shields.io
defaultStyle: "flat",
defaultPingValueSuffix: "ms",
defaultPingLabelSuffix: "h",
defaultUptimeValueSuffix: "%",
defaultUptimeLabelSuffix: "h",
defaultCertExpValueSuffix: " days",
defaultCertExpLabelSuffix: "h",
// Values Come From Default Notification Times
defaultCertExpireWarnDays: "14",
defaultCertExpireDownDays: "7"
};
module.exports = {

View File

@@ -4,6 +4,7 @@ const { setSetting, setting } = require("./util-server");
const { log, sleep } = require("../src/util");
const dayjs = require("dayjs");
const knex = require("knex");
const { PluginsManager } = require("./plugins-manager");
/**
* Database & App Data Folder
@@ -65,7 +66,10 @@ class Database {
"patch-grpc-monitor.sql": true,
"patch-add-radius-monitor.sql": true,
"patch-monitor-add-resend-interval.sql": true,
"patch-ping-packet-size.sql": true,
"patch-maintenance-table2.sql": true,
"patch-add-gamedig-monitor.sql": true,
"patch-add-google-analytics-status-page-tag.sql": true,
};
/**
@@ -83,6 +87,13 @@ class Database {
static init(args) {
// Data Directory (must be end with "/")
Database.dataDir = process.env.DATA_DIR || args["data-dir"] || "./data/";
// Plugin feature is working only if the dataDir = "./data";
if (Database.dataDir !== "./data/") {
log.warn("PLUGIN", "Warning: In order to enable plugin feature, you need to use the default data directory: ./data/");
PluginsManager.disable = true;
}
Database.path = Database.dataDir + "kuma.db";
if (! fs.existsSync(Database.dataDir)) {
fs.mkdirSync(Database.dataDir, { recursive: true });

24
server/git.js Normal file
View File

@@ -0,0 +1,24 @@
const childProcess = require("child_process");
class Git {
static clone(repoURL, cwd, targetDir = ".") {
let result = childProcess.spawnSync("git", [
"clone",
repoURL,
targetDir,
], {
cwd: cwd,
});
if (result.status !== 0) {
throw new Error(result.stderr.toString("utf-8"));
} else {
return result.stdout.toString("utf-8") + result.stderr.toString("utf-8");
}
}
}
module.exports = {
Git,
};

View File

@@ -0,0 +1,24 @@
const jsesc = require("jsesc");
/**
* Returns a string that represents the javascript that is required to insert the Google Analytics scripts
* into a webpage.
* @param tagId Google UA/G/AW/DC Property ID to use with the Google Analytics script.
* @returns {string}
*/
function getGoogleAnalyticsScript(tagId) {
let escapedTagId = jsesc(tagId, { isScriptContext: true });
if (escapedTagId) {
escapedTagId = escapedTagId.trim();
}
return `
<script async src="https://www.googletagmanager.com/gtag/js?id=${escapedTagId}"></script>
<script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date());gtag('config', '${escapedTagId}'); </script>
`;
}
module.exports = {
getGoogleAnalyticsScript,
};

View File

@@ -32,6 +32,7 @@ const initBackgroundJobs = function (args) {
return bree;
};
/** Stop all background jobs if running */
const stopBackgroundJobs = function () {
if (bree) {
bree.stop();

View File

@@ -25,15 +25,20 @@ const DEFAULT_KEEP_PERIOD = 180;
parsedPeriod = DEFAULT_KEEP_PERIOD;
}
log(`Clearing Data older than ${parsedPeriod} days...`);
if (parsedPeriod < 1) {
log(`Data deletion has been disabled as period is less than 1. Period is ${parsedPeriod} days.`);
} else {
try {
await R.exec(
"DELETE FROM heartbeat WHERE time < DATETIME('now', '-' || ? || ' days') ",
[ parsedPeriod ]
);
} catch (e) {
log(`Failed to clear old data: ${e.message}`);
log(`Clearing Data older than ${parsedPeriod} days...`);
try {
await R.exec(
"DELETE FROM heartbeat WHERE time < DATETIME('now', '-' || ? || ' days') ",
[ parsedPeriod ]
);
} catch (e) {
log(`Failed to clear old data: ${e.message}`);
}
}
exit();

View File

@@ -112,6 +112,11 @@ class Maintenance extends BeanModel {
return this.toPublicJSON(timezone);
}
/**
* Get a list of weekdays that the maintenance is active for
* Monday=1, Tuesday=2 etc.
* @returns {number[]} Array of active weekdays
*/
getDayOfWeekList() {
log.debug("timeslot", "List: " + this.weekdays);
return JSON.parse(this.weekdays).sort(function (a, b) {
@@ -119,12 +124,20 @@ class Maintenance extends BeanModel {
});
}
/**
* Get a list of days in month that maintenance is active for
* @returns {number[]} Array of active days in month
*/
getDayOfMonthList() {
return JSON.parse(this.days_of_month).sort(function (a, b) {
return a - b;
});
}
/**
* Get the start date and time for maintenance
* @returns {dayjs.Dayjs} Start date and time
*/
getStartDateTime() {
let startOfTheDay = dayjs.utc(this.start_date).format("HH:mm");
log.debug("timeslot", "startOfTheDay: " + startOfTheDay);
@@ -137,6 +150,10 @@ class Maintenance extends BeanModel {
return dayjs.utc(this.start_date).add(startTimeSecond, "second");
}
/**
* Get the duraction of maintenance in seconds
* @returns {number} Duration of maintenance
*/
getDuration() {
let duration = dayjs.utc(this.end_time, "HH:mm").diff(dayjs.utc(this.start_time, "HH:mm"), "second");
// Add 24hours if it is across day
@@ -146,6 +163,12 @@ class Maintenance extends BeanModel {
return duration;
}
/**
* Convert data from socket to bean
* @param {Bean} bean Bean to fill in
* @param {Object} obj Data to fill bean with
* @returns {Bean} Filled bean
*/
static jsonToBean(bean, obj) {
if (obj.id) {
bean.id = obj.id;

View File

@@ -6,6 +6,11 @@ const { UptimeKumaServer } = require("../uptime-kuma-server");
class MaintenanceTimeslot extends BeanModel {
/**
* Return an object that ready to parse to JSON for public
* Only show necessary data to public
* @returns {Object}
*/
async toPublicJSON() {
const serverTimezoneOffset = UptimeKumaServer.getInstance().getTimezoneOffset();
@@ -21,6 +26,10 @@ class MaintenanceTimeslot extends BeanModel {
return obj;
}
/**
* Return an object that ready to parse to JSON
* @returns {Object}
*/
async toJSON() {
return await this.toPublicJSON();
}

View File

@@ -3,7 +3,9 @@ const dayjs = require("dayjs");
const axios = require("axios");
const { Prometheus } = require("../prometheus");
const { log, UP, DOWN, PENDING, MAINTENANCE, flipStatus, TimeLogger, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND } = require("../../src/util");
const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, mqttAsync, setSetting, httpNtlm, radius, grpcQuery } = require("../util-server");
const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, mqttAsync, setSetting, httpNtlm, radius, grpcQuery,
redisPingAsync, mongodbPing,
} = require("../util-server");
const { R } = require("redbean-node");
const { BeanModel } = require("redbean-node/dist/bean-model");
const { Notification } = require("../notification");
@@ -16,6 +18,7 @@ const { CacheableDnsHttpAgent } = require("../cacheable-dns-http-agent");
const { DockerHost } = require("../docker");
const Maintenance = require("./maintenance");
const { UptimeCacheList } = require("../uptime-cache-list");
const Gamedig = require("gamedig");
/**
* status:
@@ -36,7 +39,6 @@ class Monitor extends BeanModel {
id: this.id,
name: this.name,
sendUrl: this.sendUrl,
maintenance: await Monitor.isUnderMaintenance(this.id),
};
if (this.sendUrl) {
@@ -85,6 +87,7 @@ class Monitor extends BeanModel {
expiryNotification: this.isEnabledExpiryNotification(),
ignoreTls: this.getIgnoreTls(),
upsideDown: this.isUpsideDown(),
packetSize: this.packetSize,
maxredirects: this.maxredirects,
accepted_statuscodes: this.getAcceptedStatuscodes(),
dns_resolve_type: this.dns_resolve_type,
@@ -107,6 +110,7 @@ class Monitor extends BeanModel {
grpcEnableTls: this.getGrpcEnableTls(),
radiusCalledStationId: this.radiusCalledStationId,
radiusCallingStationId: this.radiusCallingStationId,
game: this.game,
};
if (includeSensitiveData) {
@@ -372,7 +376,7 @@ class Monitor extends BeanModel {
bean.status = UP;
} else if (this.type === "ping") {
bean.ping = await ping(this.hostname);
bean.ping = await ping(this.hostname, this.packetSize);
bean.msg = "";
bean.status = UP;
} else if (this.type === "dns") {
@@ -482,25 +486,44 @@ class Monitor extends BeanModel {
bean.msg = res.data.response.servers[0].name;
try {
bean.ping = await ping(this.hostname);
bean.ping = await ping(this.hostname, this.packetSize);
} catch (_) { }
} else {
throw new Error("Server not found on Steam");
}
} else if (this.type === "gamedig") {
try {
const state = await Gamedig.query({
type: this.game,
host: this.hostname,
port: this.port,
givenPortOnly: true,
});
bean.msg = state.name;
bean.status = UP;
bean.ping = state.ping;
} catch (e) {
throw new Error(e.message);
}
} else if (this.type === "docker") {
log.debug(`[${this.name}] Prepare Options for Axios`);
log.debug("monitor", `[${this.name}] Prepare Options for Axios`);
const dockerHost = await R.load("docker_host", this.docker_host);
const options = {
url: `/containers/${this.docker_container}/json`,
timeout: this.interval * 1000 * 0.8,
headers: {
"Accept": "*/*",
"User-Agent": "Uptime-Kuma/" + version,
},
httpsAgent: new https.Agent({
httpsAgent: CacheableDnsHttpAgent.getHttpsAgent({
maxCachedSessions: 0, // Use Custom agent to disable session reuse (https://github.com/nodejs/node/issues/3940)
rejectUnauthorized: ! this.getIgnoreTls(),
rejectUnauthorized: !this.getIgnoreTls(),
}),
httpAgent: CacheableDnsHttpAgent.getHttpAgent({
maxCachedSessions: 0,
}),
};
@@ -510,11 +533,13 @@ class Monitor extends BeanModel {
options.baseURL = DockerHost.patchDockerURL(dockerHost._dockerDaemon);
}
log.debug(`[${this.name}] Axios Request`);
log.debug("monitor", `[${this.name}] Axios Request`);
let res = await axios.request(options);
if (res.data.State.Running) {
bean.status = UP;
bean.msg = "";
bean.msg = res.data.State.Status;
} else {
throw Error("Container State is " + res.data.State.Status);
}
} else if (this.type === "mqtt") {
bean.msg = await mqttAsync(this.hostname, this.mqttTopic, this.mqttSuccessMessage, {
@@ -548,7 +573,7 @@ class Monitor extends BeanModel {
log.debug("monitor:", `gRPC response: ${JSON.stringify(response)}`);
let responseData = response.data;
if (responseData.length > 50) {
responseData = response.substring(0, 47) + "...";
responseData = responseData.toString().substring(0, 47) + "...";
}
if (response.code !== 1) {
bean.status = DOWN;
@@ -579,6 +604,15 @@ class Monitor extends BeanModel {
bean.msg = "";
bean.status = UP;
bean.ping = dayjs().valueOf() - startTime;
} else if (this.type === "mongodb") {
let startTime = dayjs().valueOf();
await mongodbPing(this.databaseConnectionString);
bean.msg = "";
bean.status = UP;
bean.ping = dayjs().valueOf() - startTime;
} else if (this.type === "radius") {
let startTime = dayjs().valueOf();
@@ -615,9 +649,23 @@ class Monitor extends BeanModel {
}
}
bean.ping = dayjs().valueOf() - startTime;
} else if (this.type === "redis") {
let startTime = dayjs().valueOf();
bean.msg = await redisPingAsync(this.databaseConnectionString);
bean.status = UP;
bean.ping = dayjs().valueOf() - startTime;
} else if (this.type in UptimeKumaServer.monitorTypeList) {
let startTime = dayjs().valueOf();
const monitorType = UptimeKumaServer.monitorTypeList[this.type];
await monitorType.check(this, bean);
if (!bean.ping) {
bean.ping = dayjs().valueOf() - startTime;
}
} else {
bean.msg = "Unknown Monitor Type";
bean.status = PENDING;
throw new Error("Unknown Monitor Type");
}
if (this.isUpsideDown()) {
@@ -746,6 +794,13 @@ class Monitor extends BeanModel {
}
}
/**
* Make a request using axios
* @param {Object} options Options for Axios
* @param {boolean} finalCall Should this be the final call i.e
* don't retry on faliure
* @returns {Object} Axios response
*/
async makeAxiosRequest(options, finalCall = false) {
try {
let res;
@@ -1090,7 +1145,7 @@ class Monitor extends BeanModel {
// Prevent if the msg is undefined, notifications such as Discord cannot send out.
const heartbeatJSON = bean.toJSON();
if (!heartbeatJSON["msg"]) {
heartbeatJSON["msg"] = "";
heartbeatJSON["msg"] = "N/A";
}
await Notification.send(JSON.parse(notification.config), msg, await monitor.toJSON(false), heartbeatJSON);
@@ -1200,7 +1255,7 @@ class Monitor extends BeanModel {
*/
static async getPreviousHeartbeat(monitorID) {
return await R.getRow(`
SELECT status, time FROM heartbeat
SELECT ping, status, time FROM heartbeat
WHERE id = (select MAX(id) from heartbeat where monitor_id = ?)
`, [
monitorID
@@ -1227,6 +1282,7 @@ class Monitor extends BeanModel {
return maintenance.count !== 0;
}
/** Make sure monitor interval is between bounds */
validate() {
if (this.interval > MAX_INTERVAL_SECOND) {
throw new Error(`Interval cannot be more than ${MAX_INTERVAL_SECOND} seconds`);

View File

@@ -4,6 +4,7 @@ const cheerio = require("cheerio");
const { UptimeKumaServer } = require("../uptime-kuma-server");
const jsesc = require("jsesc");
const Maintenance = require("./maintenance");
const googleAnalytics = require("../google-analytics");
class StatusPage extends BeanModel {
@@ -53,6 +54,11 @@ class StatusPage extends BeanModel {
const head = $("head");
if (statusPage.googleAnalyticsTagId) {
let escapedGoogleAnalyticsScript = googleAnalytics.getGoogleAnalyticsScript(statusPage.googleAnalyticsTagId);
head.append($(escapedGoogleAnalyticsScript));
}
// OG Meta Tags
head.append(`<meta property="og:title" content="${statusPage.title}" />`);
head.append(`<meta property="og:description" content="${description155}" />`);
@@ -225,6 +231,7 @@ class StatusPage extends BeanModel {
customCSS: this.custom_css,
footerText: this.footer_text,
showPoweredBy: !!this.show_powered_by,
googleAnalyticsId: this.google_analytics_tag_id,
};
}
@@ -245,6 +252,7 @@ class StatusPage extends BeanModel {
customCSS: this.custom_css,
footerText: this.footer_text,
showPoweredBy: !!this.show_powered_by,
googleAnalyticsId: this.google_analytics_tag_id,
};
}
@@ -281,7 +289,7 @@ class StatusPage extends BeanModel {
let activeCondition = Maintenance.getActiveMaintenanceSQLCondition();
let maintenanceBeanList = R.convertToBeans("maintenance", await R.getAll(`
SELECT maintenance.*
SELECT DISTINCT maintenance.*
FROM maintenance
JOIN maintenance_status_page
ON maintenance_status_page.maintenance_id = maintenance.id

View File

@@ -0,0 +1,19 @@
class MonitorType {
name = undefined;
/**
*
* @param {Monitor} monitor
* @param {Heartbeat} heartbeat
* @returns {Promise<void>}
*/
async check(monitor, heartbeat) {
throw new Error("You need to override check()");
}
}
module.exports = {
MonitorType,
};

View File

@@ -8,7 +8,6 @@ class ClickSendSMS extends NotificationProvider {
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully.";
try {
console.log({ notification });
let config = {
headers: {
"Content-Type": "application/json",

View File

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

View File

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

View File

@@ -8,6 +8,14 @@ class PromoSMS extends NotificationProvider {
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully.";
if (notification.promosmsAllowLongSMS === undefined) {
notification.promosmsAllowLongSMS = false;
}
//TODO: Add option for enabling special characters. It will decrese message max length from 160 to 70 chars.
//Lets remove non ascii char
let cleanMsg = msg.replace(/[^\x00-\x7F]/g, "");
try {
let config = {
headers: {
@@ -18,8 +26,9 @@ class PromoSMS extends NotificationProvider {
};
let data = {
"recipients": [ notification.promosmsPhoneNumber ],
//Lets remove non ascii char
"text": msg.replace(/[^\x00-\x7F]/g, ""),
//Trim message to maximum length of 1 SMS or 4 if we allowed long messages
"text": notification.promosmsAllowLongSMS ? cleanMsg.substring(0, 639) : cleanMsg.substring(0, 159),
"long-sms": notification.promosmsAllowLongSMS,
"type": Number(notification.promosmsSMSType),
"sender": notification.promosmsSenderName
};

View File

@@ -10,7 +10,7 @@ class Pushover extends NotificationProvider {
let pushoverlink = "https://api.pushover.net/1/messages.json";
let data = {
"message": "<b>Uptime Kuma Alert</b>\n\n<b>Message</b>:" + msg,
"message": msg,
"user": notification.pushoveruserkey,
"token": notification.pushoverapptoken,
"sound": notification.pushoversounds,

View File

@@ -21,6 +21,12 @@ class ServerChan extends NotificationProvider {
}
}
/**
* Get the formatted title for message
* @param {?Object} monitorJSON Monitor details (For Up/Down only)
* @param {?Object} heartbeatJSON Heartbeat details (For Up/Down only)
* @returns {string} Formatted title
*/
checkStatus(heartbeatJSON, monitorJSON) {
let title = "UptimeKuma Message";
if (heartbeatJSON != null && heartbeatJSON["status"] === UP) {

View File

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

View File

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

View File

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

View File

@@ -14,6 +14,7 @@ const GoogleChat = require("./notification-providers/google-chat");
const Gorush = require("./notification-providers/gorush");
const Gotify = require("./notification-providers/gotify");
const HomeAssistant = require("./notification-providers/home-assistant");
const Kook = require("./notification-providers/kook");
const Line = require("./notification-providers/line");
const LineNotify = require("./notification-providers/linenotify");
const LunaSea = require("./notification-providers/lunasea");
@@ -39,11 +40,13 @@ const Stackfield = require("./notification-providers/stackfield");
const Teams = require("./notification-providers/teams");
const TechulusPush = require("./notification-providers/techulus-push");
const Telegram = require("./notification-providers/telegram");
const Splunk = require("./notification-providers/splunk");
const Webhook = require("./notification-providers/webhook");
const WeCom = require("./notification-providers/wecom");
const GoAlert = require("./notification-providers/goalert");
const SMSManager = require("./notification-providers/smsmanager");
const ServerChan = require("./notification-providers/serverchan");
const ZohoCliq = require("./notification-providers/zoho-cliq");
class Notification {
@@ -70,6 +73,7 @@ class Notification {
new Gorush(),
new Gotify(),
new HomeAssistant(),
new Kook(),
new Line(),
new LineNotify(),
new LunaSea(),
@@ -97,9 +101,11 @@ class Notification {
new Teams(),
new TechulusPush(),
new Telegram(),
new Splunk(),
new Webhook(),
new WeCom(),
new GoAlert(),
new ZohoCliq()
];
for (let item of list) {

View File

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

13
server/plugin.js Normal file
View File

@@ -0,0 +1,13 @@
class Plugin {
async load() {
}
async unload() {
}
}
module.exports = {
Plugin,
};

256
server/plugins-manager.js Normal file
View File

@@ -0,0 +1,256 @@
const fs = require("fs");
const { log } = require("../src/util");
const path = require("path");
const axios = require("axios");
const { Git } = require("./git");
const childProcess = require("child_process");
class PluginsManager {
static disable = false;
/**
* Plugin List
* @type {PluginWrapper[]}
*/
pluginList = [];
/**
* Plugins Dir
*/
pluginsDir;
server;
/**
*
* @param {UptimeKumaServer} server
*/
constructor(server) {
this.server = server;
if (!PluginsManager.disable) {
this.pluginsDir = "./data/plugins/";
if (! fs.existsSync(this.pluginsDir)) {
fs.mkdirSync(this.pluginsDir, { recursive: true });
}
log.debug("plugin", "Scanning plugin directory");
let list = fs.readdirSync(this.pluginsDir);
this.pluginList = [];
for (let item of list) {
this.loadPlugin(item);
}
} else {
log.warn("PLUGIN", "Skip scanning plugin directory");
}
}
/**
* Install a Plugin
*/
async loadPlugin(name) {
log.info("plugin", "Load " + name);
let plugin = new PluginWrapper(this.server, this.pluginsDir + name);
try {
await plugin.load();
this.pluginList.push(plugin);
} catch (e) {
log.error("plugin", "Failed to load plugin: " + this.pluginsDir + name);
log.error("plugin", "Reason: " + e.message);
}
}
/**
* Download a Plugin
* @param {string} repoURL Git repo url
* @param {string} name Directory name, also known as plugin unique name
*/
downloadPlugin(repoURL, name) {
if (fs.existsSync(this.pluginsDir + name)) {
log.info("plugin", "Plugin folder already exists? Removing...");
fs.rmSync(this.pluginsDir + name, {
recursive: true
});
}
log.info("plugin", "Installing plugin: " + name + " " + repoURL);
let result = Git.clone(repoURL, this.pluginsDir, name);
log.info("plugin", "Install result: " + result);
}
/**
* Remove a plugin
* @param {string} name
*/
async removePlugin(name) {
log.info("plugin", "Removing plugin: " + name);
for (let plugin of this.pluginList) {
if (plugin.info.name === name) {
await plugin.unload();
// Delete the plugin directory
fs.rmSync(this.pluginsDir + name, {
recursive: true
});
this.pluginList.splice(this.pluginList.indexOf(plugin), 1);
return;
}
}
log.warn("plugin", "Plugin not found: " + name);
throw new Error("Plugin not found: " + name);
}
/**
* TODO: Update a plugin
* Only available for plugins which were downloaded from the official list
* @param pluginID
*/
updatePlugin(pluginID) {
}
/**
* Get the plugin list from server + local installed plugin list
* Item will be merged if the `name` is the same.
* @returns {Promise<[]>}
*/
async fetchPluginList() {
let remotePluginList;
try {
const res = await axios.get("https://uptime.kuma.pet/c/plugins.json");
remotePluginList = res.data.pluginList;
} catch (e) {
log.error("plugin", "Failed to fetch plugin list: " + e.message);
remotePluginList = [];
}
for (let plugin of this.pluginList) {
let find = false;
// Try to merge
for (let remotePlugin of remotePluginList) {
if (remotePlugin.name === plugin.info.name) {
find = true;
remotePlugin.installed = true;
remotePlugin.name = plugin.info.name;
remotePlugin.fullName = plugin.info.fullName;
remotePlugin.description = plugin.info.description;
remotePlugin.version = plugin.info.version;
break;
}
}
// Local plugin
if (!find) {
plugin.info.local = true;
remotePluginList.push(plugin.info);
}
}
// Sort Installed first, then sort by name
return remotePluginList.sort((a, b) => {
if (a.installed === b.installed) {
if (a.fullName < b.fullName) {
return -1;
}
if (a.fullName > b.fullName) {
return 1;
}
return 0;
} else if (a.installed) {
return -1;
} else {
return 1;
}
});
}
}
class PluginWrapper {
server = undefined;
pluginDir = undefined;
/**
* Must be an `new-able` class.
* @type {function}
*/
pluginClass = undefined;
/**
*
* @type {Plugin}
*/
object = undefined;
info = {};
/**
*
* @param {UptimeKumaServer} server
* @param {string} pluginDir
*/
constructor(server, pluginDir) {
this.server = server;
this.pluginDir = pluginDir;
}
async load() {
let indexFile = this.pluginDir + "/index.js";
let packageJSON = this.pluginDir + "/package.json";
log.info("plugin", "Installing dependencies");
if (fs.existsSync(indexFile)) {
// Install dependencies
let result = childProcess.spawnSync("npm", [ "install" ], {
cwd: this.pluginDir,
env: {
...process.env,
PLAYWRIGHT_BROWSERS_PATH: "../../browsers", // Special handling for read-browser-monitor
}
});
if (result.stdout) {
log.info("plugin", "Install dependencies result: " + result.stdout.toString("utf-8"));
} else {
log.warn("plugin", "Install dependencies result: no output");
}
this.pluginClass = require(path.join(process.cwd(), indexFile));
let pluginClassType = typeof this.pluginClass;
if (pluginClassType === "function") {
this.object = new this.pluginClass(this.server);
await this.object.load();
} else {
throw new Error("Invalid plugin, it does not export a class");
}
if (fs.existsSync(packageJSON)) {
this.info = require(path.join(process.cwd(), packageJSON));
} else {
this.info.fullName = this.pluginDir;
this.info.name = "[unknown]";
this.info.version = "[unknown-version]";
}
this.info.installed = true;
log.info("plugin", `${this.info.fullName} v${this.info.version} loaded`);
}
}
async unload() {
await this.object.unload();
}
}
module.exports = {
PluginsManager,
PluginWrapper
};

View File

@@ -99,6 +99,7 @@ class Prometheus {
}
}
/** Remove monitor from prometheus */
remove() {
try {
monitorCertDaysRemaining.remove(this.monitorLabelValues);

View File

@@ -4,7 +4,7 @@ const { R } = require("redbean-node");
const apicache = require("../modules/apicache");
const Monitor = require("../model/monitor");
const dayjs = require("dayjs");
const { UP, MAINTENANCE, DOWN, flipStatus, log } = require("../../src/util");
const { UP, MAINTENANCE, DOWN, PENDING, flipStatus, log } = require("../../src/util");
const StatusPage = require("../model/status_page");
const { UptimeKumaServer } = require("../uptime-kuma-server");
const { makeBadge } = require("badge-maker");
@@ -111,8 +111,12 @@ router.get("/api/badge/:id/status", cache("5 minutes"), async (request, response
label,
upLabel = "Up",
downLabel = "Down",
pendingLabel = "Pending",
maintenanceLabel = "Maintenance",
upColor = badgeConstants.defaultUpColor,
downColor = badgeConstants.defaultDownColor,
pendingColor = badgeConstants.defaultPendingColor,
maintenanceColor = badgeConstants.defaultMaintenanceColor,
style = badgeConstants.defaultStyle,
value, // for demo purpose only
} = request.query;
@@ -139,11 +143,30 @@ router.get("/api/badge/:id/status", cache("5 minutes"), async (request, response
badgeValues.color = badgeConstants.naColor;
} else {
const heartbeat = await Monitor.getPreviousHeartbeat(requestedMonitorId);
const state = overrideValue !== undefined ? overrideValue : heartbeat.status === 1;
const state = overrideValue !== undefined ? overrideValue : heartbeat.status;
badgeValues.label = label ? label : "";
badgeValues.color = state ? upColor : downColor;
badgeValues.message = label ?? state ? upLabel : downLabel;
badgeValues.label = label ?? "Status";
switch (state) {
case DOWN:
badgeValues.color = downColor;
badgeValues.message = downLabel;
break;
case UP:
badgeValues.color = upColor;
badgeValues.message = upLabel;
break;
case PENDING:
badgeValues.color = pendingColor;
badgeValues.message = pendingLabel;
break;
case MAINTENANCE:
badgeValues.color = maintenanceColor;
badgeValues.message = maintenanceLabel;
break;
default:
badgeValues.color = badgeConstants.naColor;
badgeValues.message = "N/A";
}
}
// build the svg based on given values
@@ -189,7 +212,7 @@ router.get("/api/badge/:id/uptime/:duration?", cache("5 minutes"), async (reques
const badgeValues = { style };
if (!publicMonitor) {
// return a "N/A" badge in naColor (grey), if monitor is not public / not available / non exsitant
// return a "N/A" badge in naColor (grey), if monitor is not public / not available / non existent
badgeValues.message = "N/A";
badgeValues.color = badgeConstants.naColor;
} else {
@@ -205,8 +228,11 @@ router.get("/api/badge/:id/uptime/:duration?", cache("5 minutes"), async (reques
badgeValues.color = color ?? percentageToColor(uptime);
// use a given, custom labelColor or use the default badge label color (defined by badge-maker)
badgeValues.labelColor = labelColor ?? "";
// build a lable string. If a custom label is given, override the default one (requestedDuration)
badgeValues.label = filterAndJoin([ labelPrefix, label ?? requestedDuration, labelSuffix ]);
// build a label string. If a custom label is given, override the default one (requestedDuration)
badgeValues.label = filterAndJoin([
labelPrefix,
label ?? `Uptime (${requestedDuration}${labelSuffix})`,
]);
badgeValues.message = filterAndJoin([ prefix, `${cleanUptime * 100}`, suffix ]);
}
@@ -267,7 +293,7 @@ router.get("/api/badge/:id/ping/:duration?", cache("5 minutes"), async (request,
// use a given, custom labelColor or use the default badge label color (defined by badge-maker)
badgeValues.labelColor = labelColor ?? "";
// build a lable string. If a custom label is given, override the default one (requestedDuration)
badgeValues.label = filterAndJoin([ labelPrefix, label ?? requestedDuration, labelSuffix ]);
badgeValues.label = filterAndJoin([ labelPrefix, label ?? `Avg. Ping (${requestedDuration}${labelSuffix})` ]);
badgeValues.message = filterAndJoin([ prefix, avgPing, suffix ]);
}
@@ -281,4 +307,237 @@ router.get("/api/badge/:id/ping/:duration?", cache("5 minutes"), async (request,
}
});
router.get("/api/badge/:id/avg-response/:duration?", cache("5 minutes"), async (request, response) => {
allowAllOrigin(response);
const {
label,
labelPrefix,
labelSuffix,
prefix,
suffix = badgeConstants.defaultPingValueSuffix,
color = badgeConstants.defaultPingColor,
labelColor,
style = badgeConstants.defaultStyle,
value, // for demo purpose only
} = request.query;
try {
const requestedMonitorId = parseInt(request.params.id, 10);
// Default duration is 24 (h) if not defined in queryParam, limited to 720h (30d)
const requestedDuration = Math.min(
request.params.duration
? parseInt(request.params.duration, 10)
: 24,
720
);
const overrideValue = value && parseFloat(value);
const publicAvgPing = parseInt(await R.getCell(`
SELECT AVG(ping) FROM monitor_group, \`group\`, heartbeat
WHERE monitor_group.group_id = \`group\`.id
AND heartbeat.time > DATETIME('now', ? || ' hours')
AND heartbeat.ping IS NOT NULL
AND public = 1
AND heartbeat.monitor_id = ?
`,
[ -requestedDuration, requestedMonitorId ]
));
const badgeValues = { style };
if (!publicAvgPing) {
// return a "N/A" badge in naColor (grey), if monitor is not public / not available / non existent
badgeValues.message = "N/A";
badgeValues.color = badgeConstants.naColor;
} else {
const avgPing = parseInt(overrideValue ?? publicAvgPing);
badgeValues.color = color;
// use a given, custom labelColor or use the default badge label color (defined by badge-maker)
badgeValues.labelColor = labelColor ?? "";
// build a label string. If a custom label is given, override the default one (requestedDuration)
badgeValues.label = filterAndJoin([
labelPrefix,
label ?? `Avg. Response (${requestedDuration}h)`,
labelSuffix,
]);
badgeValues.message = filterAndJoin([ prefix, avgPing, suffix ]);
}
// build the SVG based on given values
const svg = makeBadge(badgeValues);
response.type("image/svg+xml");
response.send(svg);
} catch (error) {
send403(response, error.message);
}
});
router.get("/api/badge/:id/cert-exp", cache("5 minutes"), async (request, response) => {
allowAllOrigin(response);
const date = request.query.date;
const {
label,
labelPrefix,
labelSuffix,
prefix,
suffix = date ? "" : badgeConstants.defaultCertExpValueSuffix,
upColor = badgeConstants.defaultUpColor,
warnColor = badgeConstants.defaultWarnColor,
downColor = badgeConstants.defaultDownColor,
warnDays = badgeConstants.defaultCertExpireWarnDays,
downDays = badgeConstants.defaultCertExpireDownDays,
labelColor,
style = badgeConstants.defaultStyle,
value, // for demo purpose only
} = request.query;
try {
const requestedMonitorId = parseInt(request.params.id, 10);
const overrideValue = value && parseFloat(value);
let publicMonitor = await R.getRow(`
SELECT monitor_group.monitor_id FROM monitor_group, \`group\`
WHERE monitor_group.group_id = \`group\`.id
AND monitor_group.monitor_id = ?
AND public = 1
`,
[ requestedMonitorId ]
);
const badgeValues = { style };
if (!publicMonitor) {
// return a "N/A" badge in naColor (grey), if monitor is not public / not available / non existent
badgeValues.message = "N/A";
badgeValues.color = badgeConstants.naColor;
} else {
const tlsInfoBean = await R.findOne("monitor_tls_info", "monitor_id = ?", [
requestedMonitorId,
]);
if (!tlsInfoBean) {
// return a "No/Bad Cert" badge in naColor (grey), if no cert saved (does not save bad certs?)
badgeValues.message = "No/Bad Cert";
badgeValues.color = badgeConstants.naColor;
} else {
const tlsInfo = JSON.parse(tlsInfoBean.info_json);
if (!tlsInfo.valid) {
// return a "Bad Cert" badge in naColor (grey), when cert is not valid
badgeValues.message = "Bad Cert";
badgeValues.color = badgeConstants.downColor;
} else {
const daysRemaining = parseInt(overrideValue ?? tlsInfo.certInfo.daysRemaining);
if (daysRemaining > warnDays) {
badgeValues.color = upColor;
} else if (daysRemaining > downDays) {
badgeValues.color = warnColor;
} else {
badgeValues.color = downColor;
}
// use a given, custom labelColor or use the default badge label color (defined by badge-maker)
badgeValues.labelColor = labelColor ?? "";
// build a label string. If a custom label is given, override the default one
badgeValues.label = filterAndJoin([
labelPrefix,
label ?? "Cert Exp.",
labelSuffix,
]);
badgeValues.message = filterAndJoin([ prefix, date ? tlsInfo.certInfo.validTo : daysRemaining, suffix ]);
}
}
}
// build the SVG based on given values
const svg = makeBadge(badgeValues);
response.type("image/svg+xml");
response.send(svg);
} catch (error) {
send403(response, error.message);
}
});
router.get("/api/badge/:id/response", cache("5 minutes"), async (request, response) => {
allowAllOrigin(response);
const {
label,
labelPrefix,
labelSuffix,
prefix,
suffix = badgeConstants.defaultPingValueSuffix,
color = badgeConstants.defaultPingColor,
labelColor,
style = badgeConstants.defaultStyle,
value, // for demo purpose only
} = request.query;
try {
const requestedMonitorId = parseInt(request.params.id, 10);
const overrideValue = value && parseFloat(value);
let publicMonitor = await R.getRow(`
SELECT monitor_group.monitor_id FROM monitor_group, \`group\`
WHERE monitor_group.group_id = \`group\`.id
AND monitor_group.monitor_id = ?
AND public = 1
`,
[ requestedMonitorId ]
);
const badgeValues = { style };
if (!publicMonitor) {
// return a "N/A" badge in naColor (grey), if monitor is not public / not available / non existent
badgeValues.message = "N/A";
badgeValues.color = badgeConstants.naColor;
} else {
const heartbeat = await Monitor.getPreviousHeartbeat(
requestedMonitorId
);
if (!heartbeat.ping) {
// return a "N/A" badge in naColor (grey), if previous heartbeat has no ping
badgeValues.message = "N/A";
badgeValues.color = badgeConstants.naColor;
} else {
const ping = parseInt(overrideValue ?? heartbeat.ping);
badgeValues.color = color;
// use a given, custom labelColor or use the default badge label color (defined by badge-maker)
badgeValues.labelColor = labelColor ?? "";
// build a label string. If a custom label is given, override the default one
badgeValues.label = filterAndJoin([
labelPrefix,
label ?? "Response",
labelSuffix,
]);
badgeValues.message = filterAndJoin([ prefix, ping, suffix ]);
}
}
// build the SVG based on given values
const svg = makeBadge(badgeValues);
response.type("image/svg+xml");
response.send(svg);
} catch (error) {
send403(response, error.message);
}
});
module.exports = router;

View File

@@ -11,6 +11,9 @@ dayjs.extend(require("dayjs/plugin/utc"));
dayjs.extend(require("./modules/dayjs/plugin/timezone"));
dayjs.extend(require("dayjs/plugin/customParseFormat"));
// Load environment variables from `.env`
require("dotenv").config();
// Check Node.js Version
const nodeVersion = parseInt(process.versions.node.split(".")[0]);
const requiredVersion = 14;
@@ -138,6 +141,7 @@ const { maintenanceSocketHandler } = require("./socket-handlers/maintenance-sock
const { generalSocketHandler } = require("./socket-handlers/general-socket-handler");
const { Settings } = require("./settings");
const { CacheableDnsHttpAgent } = require("./cacheable-dns-http-agent");
const { pluginsHandler } = require("./socket-handlers/plugins-handler");
app.use(express.json());
@@ -166,7 +170,7 @@ let needSetup = false;
Database.init(args);
await initDatabase(testMode);
await server.initAfterDatabaseReady();
server.loadPlugins();
server.entryPage = await Settings.get("entryPage");
await StatusPage.loadDomainMappingList();
@@ -574,7 +578,6 @@ let needSetup = false;
});
}
} catch (error) {
console.log(error);
callback({
ok: false,
msg: error.message,
@@ -689,12 +692,14 @@ let needSetup = false;
bean.retryInterval = monitor.retryInterval;
bean.resendInterval = monitor.resendInterval;
bean.hostname = monitor.hostname;
bean.game = monitor.game;
bean.maxretries = monitor.maxretries;
bean.port = parseInt(monitor.port);
bean.keyword = monitor.keyword;
bean.ignoreTls = monitor.ignoreTls;
bean.expiryNotification = monitor.expiryNotification;
bean.upsideDown = monitor.upsideDown;
bean.packetSize = monitor.packetSize;
bean.maxredirects = monitor.maxredirects;
bean.accepted_statuscodes_json = JSON.stringify(monitor.accepted_statuscodes);
bean.dns_resolve_type = monitor.dns_resolve_type;
@@ -714,6 +719,7 @@ let needSetup = false;
bean.authDomain = monitor.authDomain;
bean.grpcUrl = monitor.grpcUrl;
bean.grpcProtobuf = monitor.grpcProtobuf;
bean.grpcServiceName = monitor.grpcServiceName;
bean.grpcMethod = monitor.grpcMethod;
bean.grpcBody = monitor.grpcBody;
bean.grpcMetadata = monitor.grpcMetadata;
@@ -940,13 +946,21 @@ let needSetup = false;
try {
checkLogin(socket);
let bean = await R.findOne("monitor", " id = ? ", [ tag.id ]);
let bean = await R.findOne("tag", " id = ? ", [ tag.id ]);
if (bean == null) {
callback({
ok: false,
msg: "Tag not found",
});
return;
}
bean.name = tag.name;
bean.color = tag.color;
await R.store(bean);
callback({
ok: true,
msg: "Saved",
tag: await bean.toJSON(),
});
@@ -1490,6 +1504,7 @@ let needSetup = false;
dockerSocketHandler(socket);
maintenanceSocketHandler(socket);
generalSocketHandler(socket, server);
pluginsHandler(socket, server);
log.debug("server", "added all socket handlers");

View File

@@ -2,6 +2,30 @@ const { log } = require("../../src/util");
const { Settings } = require("../settings");
const { sendInfo } = require("../client");
const { checkLogin } = require("../util-server");
const GameResolver = require("gamedig/lib/GameResolver");
let gameResolver = new GameResolver();
let gameList = null;
/**
* Get a game list via GameDig
* @returns {any[]}
*/
function getGameList() {
if (!gameList) {
gameList = gameResolver._readGames().games.sort((a, b) => {
if ( a.pretty < b.pretty ) {
return -1;
}
if ( a.pretty > b.pretty ) {
return 1;
}
return 0;
});
} else {
return gameList;
}
}
module.exports.generalSocketHandler = (socket, server) => {
@@ -17,4 +41,11 @@ module.exports.generalSocketHandler = (socket, server) => {
}
});
socket.on("getGameList", async (callback) => {
callback({
ok: true,
gameList: getGameList(),
});
});
};

View File

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

View File

@@ -0,0 +1,69 @@
const { checkLogin } = require("../util-server");
const { PluginsManager } = require("../plugins-manager");
const { log } = require("../../src/util.js");
/**
* Handlers for plugins
* @param {Socket} socket Socket.io instance
* @param {UptimeKumaServer} server
*/
module.exports.pluginsHandler = (socket, server) => {
const pluginManager = server.getPluginManager();
// Get Plugin List
socket.on("getPluginList", async (callback) => {
try {
checkLogin(socket);
log.debug("plugin", "PluginManager.disable: " + PluginsManager.disable);
if (PluginsManager.disable) {
throw new Error("Plugin Disabled: In order to enable plugin feature, you need to use the default data directory: ./data/");
}
let pluginList = await pluginManager.fetchPluginList();
callback({
ok: true,
pluginList,
});
} catch (error) {
log.warn("plugin", "Error: " + error.message);
callback({
ok: false,
msg: error.message,
});
}
});
socket.on("installPlugin", async (repoURL, name, callback) => {
try {
checkLogin(socket);
pluginManager.downloadPlugin(repoURL, name);
await pluginManager.loadPlugin(name);
callback({
ok: true,
});
} catch (error) {
callback({
ok: false,
msg: error.message,
});
}
});
socket.on("uninstallPlugin", async (name, callback) => {
try {
checkLogin(socket);
await pluginManager.removePlugin(name);
callback({
ok: true,
});
} catch (error) {
callback({
ok: false,
msg: error.message,
});
}
});
};

View File

@@ -163,6 +163,7 @@ module.exports.statusPageSocketHandler = (socket) => {
statusPage.custom_css = config.customCSS;
statusPage.show_powered_by = config.showPoweredBy;
statusPage.modified_date = R.isoDateTime();
statusPage.google_analytics_tag_id = config.googleAnalyticsId;
await R.store(statusPage);

View File

@@ -6,10 +6,10 @@ class UptimeCacheList {
static list = {};
/**
*
* @param monitorID
* @param duration
* @return number
* Get the uptime for a specific period
* @param {number} monitorID
* @param {number} duration
* @return {number}
*/
static getUptime(monitorID, duration) {
if (UptimeCacheList.list[monitorID] && UptimeCacheList.list[monitorID][duration]) {
@@ -20,6 +20,12 @@ class UptimeCacheList {
}
}
/**
* Add uptime for specified monitor
* @param {number} monitorID
* @param {number} duration
* @param {number} uptime Uptime to add
*/
static addUptime(monitorID, duration, uptime) {
log.debug("UptimeCacheList", "addUptime: " + monitorID + " " + duration);
if (!UptimeCacheList.list[monitorID]) {
@@ -28,6 +34,10 @@ class UptimeCacheList {
UptimeCacheList.list[monitorID][duration] = uptime;
}
/**
* Clear cache for specified monitor
* @param {number} monitorID
*/
static clearCache(monitorID) {
log.debug("UptimeCacheList", "clearCache: " + monitorID);
delete UptimeCacheList.list[monitorID];

View File

@@ -10,6 +10,7 @@ const util = require("util");
const { CacheableDnsHttpAgent } = require("./cacheable-dns-http-agent");
const { Settings } = require("./settings");
const dayjs = require("dayjs");
const { PluginsManager } = require("./plugins-manager");
// DO NOT IMPORT HERE IF THE MODULES USED `UptimeKumaServer.getInstance()`
/**
@@ -48,6 +49,20 @@ class UptimeKumaServer {
generateMaintenanceTimeslotsInterval = undefined;
/**
* Plugins Manager
* @type {PluginsManager}
*/
pluginsManager = null;
/**
*
* @type {{}}
*/
static monitorTypeList = {
};
static getInstance(args) {
if (UptimeKumaServer.instance == null) {
UptimeKumaServer.instance = new UptimeKumaServer(args);
@@ -86,6 +101,7 @@ class UptimeKumaServer {
this.io = new Server(this.httpServer);
}
/** Initialise app after the database has been set up */
async initAfterDatabaseReady() {
await CacheableDnsHttpAgent.update();
@@ -98,6 +114,11 @@ class UptimeKumaServer {
this.generateMaintenanceTimeslotsInterval = setInterval(this.generateMaintenanceTimeslots, 60 * 1000);
}
/**
* Send list of monitors to client
* @param {Socket} socket
* @returns {Object} List of monitors
*/
async sendMonitorList(socket) {
let list = await this.getMonitorJSONList(socket.userID);
this.io.to(socket.userID).emit("monitorList", list);
@@ -134,6 +155,11 @@ class UptimeKumaServer {
return await this.sendMaintenanceListByUserID(socket.userID);
}
/**
* Send list of maintenances to user
* @param {number} userID
* @returns {Object}
*/
async sendMaintenanceListByUserID(userID) {
let list = await this.getMaintenanceJSONList(userID);
this.io.to(userID).emit("maintenanceList", list);
@@ -185,6 +211,11 @@ class UptimeKumaServer {
errorLogStream.end();
}
/**
* Get the IP of the client connected to the socket
* @param {Socket} socket
* @returns {string}
*/
async getClientIP(socket) {
let clientIP = socket.client.conn.remoteAddress;
@@ -203,6 +234,12 @@ class UptimeKumaServer {
}
}
/**
* Attempt to get the current server timezone
* If this fails, fall back to environment variables and then make a
* guess.
* @returns {string}
*/
async getTimezone() {
let timezone = await Settings.get("serverTimezone");
if (timezone) {
@@ -214,16 +251,25 @@ class UptimeKumaServer {
}
}
/**
* Get the current offset
* @returns {string}
*/
getTimezoneOffset() {
return dayjs().format("Z");
}
/**
* Set the current server timezone and environment variables
* @param {string} timezone
*/
async setTimezone(timezone) {
await Settings.set("serverTimezone", timezone, "general");
process.env.TZ = timezone;
dayjs.tz.setDefault(timezone);
}
/** Load the timeslots for maintenance */
async generateMaintenanceTimeslots() {
let list = await R.find("maintenance_timeslot", " generated_next = 0 AND start_date <= DATETIME('now') ");
@@ -237,9 +283,50 @@ class UptimeKumaServer {
}
/** Stop the server */
async stop() {
clearTimeout(this.generateMaintenanceTimeslotsInterval);
}
loadPlugins() {
this.pluginsManager = new PluginsManager(this);
}
/**
*
* @returns {PluginsManager}
*/
getPluginManager() {
return this.pluginsManager;
}
/**
*
* @param {MonitorType} monitorType
*/
addMonitorType(monitorType) {
if (monitorType instanceof MonitorType && monitorType.name) {
if (monitorType.name in UptimeKumaServer.monitorTypeList) {
log.error("", "Conflict Monitor Type name");
}
UptimeKumaServer.monitorTypeList[monitorType.name] = monitorType;
} else {
log.error("", "Invalid Monitor Type: " + monitorType.name);
}
}
/**
*
* @param {MonitorType} monitorType
*/
removeMonitorType(monitorType) {
if (UptimeKumaServer.monitorTypeList[monitorType.name] === monitorType) {
delete UptimeKumaServer.monitorTypeList[monitorType.name];
} else {
log.error("", "Remove MonitorType failed: " + monitorType.name);
}
}
}
module.exports = {
@@ -248,3 +335,4 @@ module.exports = {
// Must be at the end
const MaintenanceTimeslot = require("./model/maintenance_timeslot");
const { MonitorType } = require("./monitor-types/monitor-type");

View File

@@ -1,5 +1,5 @@
const tcpp = require("tcp-ping");
const Ping = require("./ping-lite");
const ping = require("@louislam/ping");
const { R } = require("redbean-node");
const { log, genSecret } = require("../src/util");
const passwordHash = require("./password-hash");
@@ -14,11 +14,13 @@ const mssql = require("mssql");
const { Client } = require("pg");
const postgresConParse = require("pg-connection-string").parse;
const mysql = require("mysql2");
const { MongoClient } = require("mongodb");
const { NtlmClient } = require("axios-ntlm");
const { Settings } = require("./settings");
const grpc = require("@grpc/grpc-js");
const protojs = require("protobufjs");
const radiusClient = require("node-radius-client");
const redis = require("redis");
const {
dictionaries: {
rfc2865: { file, attributes },
@@ -26,12 +28,7 @@ const {
} = require("node-radius-utils");
const dayjs = require("dayjs");
// From ping-lite
exports.WIN = /^win/.test(process.platform);
exports.LIN = /^linux/.test(process.platform);
exports.MAC = /^darwin/.test(process.platform);
exports.FBSD = /^freebsd/.test(process.platform);
exports.BSD = /bsd$/.test(process.platform);
const isWindows = process.platform === /^win/.test(process.platform);
/**
* Init or reset JWT secret
@@ -82,15 +79,16 @@ exports.tcping = function (hostname, port) {
/**
* Ping the specified machine
* @param {string} hostname Hostname / address of machine
* @param {number} [size=56] Size of packet to send
* @returns {Promise<number>} Time for ping in ms rounded to nearest integer
*/
exports.ping = async (hostname) => {
exports.ping = async (hostname, size = 56) => {
try {
return await exports.pingAsync(hostname);
return await exports.pingAsync(hostname, false, size);
} catch (e) {
// If the host cannot be resolved, try again with ipv6
if (e.message.includes("service not known")) {
return await exports.pingAsync(hostname, true);
return await exports.pingAsync(hostname, true, size);
} else {
throw e;
}
@@ -101,22 +99,29 @@ exports.ping = async (hostname) => {
* Ping the specified machine
* @param {string} hostname Hostname / address of machine to ping
* @param {boolean} ipv6 Should IPv6 be used?
* @param {number} [size = 56] Size of ping packet to send
* @returns {Promise<number>} Time for ping in ms rounded to nearest integer
*/
exports.pingAsync = function (hostname, ipv6 = false) {
exports.pingAsync = function (hostname, ipv6 = false, size = 56) {
return new Promise((resolve, reject) => {
const ping = new Ping(hostname, {
ipv6
});
ping.send(function (err, ms, stdout) {
if (err) {
reject(err);
} else if (ms === null) {
reject(new Error(stdout));
ping.promise.probe(hostname, {
v6: ipv6,
min_reply: 1,
deadline: 10,
packetSize: size,
}).then((res) => {
// If ping failed, it will set field to unknown
if (res.alive) {
resolve(res.time);
} else {
resolve(Math.round(ms));
if (isWindows) {
reject(new Error(exports.convertToUTF8(res.output)));
} else {
reject(new Error(res.output));
}
}
}).catch((err) => {
reject(err);
});
});
};
@@ -135,7 +140,7 @@ exports.mqttAsync = function (hostname, topic, okMessage, options = {}) {
const { port, username, password, interval = 20 } = options;
// Adds MQTT protocol to the hostname if not already present
if (!/^(?:http|mqtt)s?:\/\//.test(hostname)) {
if (!/^(?:http|mqtt|ws)s?:\/\//.test(hostname)) {
hostname = "mqtt://" + hostname;
}
@@ -145,10 +150,11 @@ exports.mqttAsync = function (hostname, topic, okMessage, options = {}) {
reject(new Error("Timeout"));
}, interval * 1000 * 0.8);
log.debug("mqtt", "MQTT connecting");
const mqttUrl = `${hostname}:${port}`;
let client = mqtt.connect(hostname, {
port,
log.debug("mqtt", `MQTT connecting to ${mqttUrl}`);
let client = mqtt.connect(mqttUrl, {
username,
password
});
@@ -248,19 +254,19 @@ exports.dnsResolve = function (hostname, resolverServer, resolverPort, rrtype) {
* @param {string} query The query to validate the database with
* @returns {Promise<(string[]|Object[]|Object)>}
*/
exports.mssqlQuery = function (connectionString, query) {
return new Promise((resolve, reject) => {
mssql.connect(connectionString).then(pool => {
return pool.request()
.query(query);
}).then(result => {
resolve(result);
}).catch(err => {
reject(err);
}).finally(() => {
mssql.close();
});
});
exports.mssqlQuery = async function (connectionString, query) {
let pool;
try {
pool = new mssql.ConnectionPool(connectionString);
await pool.connect();
await pool.request().query(query);
pool.close();
} catch (e) {
if (pool) {
pool.close();
}
throw e;
}
};
/**
@@ -280,18 +286,23 @@ exports.postgresQuery = function (connectionString, query) {
const client = new Client({ connectionString });
client.connect();
return client.query(query)
.then(res => {
resolve(res);
})
.catch(err => {
client.connect((err) => {
if (err) {
reject(err);
})
.finally(() => {
client.end();
});
} else {
// Connected here
client.query(query, (err, res) => {
if (err) {
reject(err);
} else {
resolve(res);
}
client.end();
});
}
});
});
};
@@ -312,11 +323,28 @@ exports.mysqlQuery = function (connectionString, query) {
reject(err);
})
.finally(() => {
connection.end();
connection.destroy();
});
});
};
/**
* Connect to and Ping a MongoDB database
* @param {string} connectionString The database connection string
* @returns {Promise<(string[]|Object[]|Object)>}
*/
exports.mongodbPing = async function (connectionString) {
let client = await MongoClient.connect(connectionString);
let dbPing = await client.db().command({ ping: 1 });
await client.close();
if (dbPing["ok"] === 1) {
return "UP";
} else {
throw Error("failed");
}
};
/**
* Query radius server
* @param {string} hostname Hostname of radius server
@@ -354,6 +382,30 @@ exports.radius = function (
});
};
/**
* Redis server ping
* @param {string} dsn The redis connection string
*/
exports.redisPingAsync = function (dsn) {
return new Promise((resolve, reject) => {
const client = redis.createClient({
url: dsn,
});
client.on("error", (err) => {
reject(err);
});
client.connect().then(() => {
client.ping().then((res, err) => {
if (err) {
reject(err);
} else {
resolve(res);
}
});
});
});
};
/**
* Retrieve value of setting based on key
* @param {string} key Key of setting to retrieve
@@ -778,22 +830,31 @@ module.exports.grpcQuery = async (options) => {
cb);
}, false, false);
return new Promise((resolve, _) => {
return grpcService[`${grpcMethod}`](JSON.parse(grpcBody), function (err, response) {
const responseData = JSON.stringify(response);
if (err) {
return resolve({
code: err.code,
errorMessage: err.details,
data: ""
});
} else {
log.debug("monitor:", `gRPC response: ${response}`);
return resolve({
code: 1,
errorMessage: "",
data: responseData
});
}
});
try {
return grpcService[`${grpcMethod}`](JSON.parse(grpcBody), function (err, response) {
const responseData = JSON.stringify(response);
if (err) {
return resolve({
code: err.code,
errorMessage: err.details,
data: ""
});
} else {
log.debug("monitor:", `gRPC response: ${JSON.stringify(response)}`);
return resolve({
code: 1,
errorMessage: "",
data: responseData
});
}
});
} catch (err) {
return resolve({
code: -1,
errorMessage: `Error ${err}. Please review your gRPC configuration option. The service name must not include package name value, and the method name must follow camelCase format`,
data: ""
});
}
});
};

View File

@@ -35,6 +35,11 @@ textarea.form-control {
color: $maintenance !important;
}
.incident a,
.bg-maintenance a {
color: inherit;
}
.list-group {
border-radius: 0.75rem;
@@ -248,6 +253,11 @@ optgroup {
}
}
.incident a,
.bg-maintenance a {
color: inherit;
}
.form-control,
.form-control:focus,
.form-select,

View File

@@ -2,4 +2,8 @@ html[lang='fa'] {
#app {
font-family: 'IRANSans', 'Iranian Sans','B Nazanin', 'Tahoma', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji;
}
}
}
ul.multiselect__content {
padding-left: 0 !important;
}

View File

@@ -73,7 +73,7 @@ export default {
emits: [ "added" ],
data() {
return {
model: null,
modal: null,
processing: false,
id: null,
connectionTypes: [ "socket", "tcp" ],
@@ -91,11 +91,16 @@ export default {
},
methods: {
/** Confirm deletion of docker host */
deleteConfirm() {
this.modal.hide();
this.$refs.confirmDelete.show();
},
/**
* Show specified docker host
* @param {number} dockerHostID
*/
show(dockerHostID) {
if (dockerHostID) {
let found = false;
@@ -126,6 +131,7 @@ export default {
this.modal.show();
},
/** Add docker host */
submit() {
this.processing = true;
this.$root.getSocket().emit("addDockerHost", this.dockerHost, this.id, (res) => {
@@ -144,6 +150,7 @@ export default {
});
},
/** Test the docker host */
test() {
this.processing = true;
this.$root.getSocket().emit("testDockerHost", this.dockerHost, (res) => {
@@ -152,6 +159,7 @@ export default {
});
},
/** Delete this docker host */
deleteDockerHost() {
this.processing = true;
this.$root.getSocket().emit("deleteDockerHost", this.id, (res) => {

View File

@@ -0,0 +1,102 @@
<template>
<div v-if="! (!plugin.installed && plugin.local)" class="plugin-item pt-4 pb-2">
<div class="info">
<h5>{{ plugin.fullName }}</h5>
<p class="description">
{{ plugin.description }}
</p>
<span class="version">{{ $t("Version") }}: {{ plugin.version }} <a v-if="plugin.repo" :href="plugin.repo" target="_blank">Repo</a></span>
</div>
<div class="buttons">
<button v-if="status === 'installing'" class="btn btn-primary" disabled>{{ $t("installing") }}</button>
<button v-else-if="status === 'uninstalling'" class="btn btn-danger" disabled>{{ $t("uninstalling") }}</button>
<button v-else-if="plugin.installed || status === 'installed'" class="btn btn-danger" @click="deleteConfirm">{{ $t("uninstall") }}</button>
<button v-else class="btn btn-primary" @click="install">{{ $t("install") }}</button>
</div>
<Confirm ref="confirmDelete" btn-style="btn-danger" :yes-text="$t('Yes')" :no-text="$t('No')" @yes="uninstall">
{{ $t("confirmUninstallPlugin") }}
</Confirm>
</div>
</template>
<script>
import Confirm from "./Confirm.vue";
export default {
components: {
Confirm,
},
props: {
plugin: {
type: Object,
required: true,
},
},
data() {
return {
status: "",
};
},
methods: {
/**
* Show confirmation for deleting a tag
*/
deleteConfirm() {
this.$refs.confirmDelete.show();
},
install() {
this.status = "installing";
this.$root.getSocket().emit("installPlugin", this.plugin.repo, this.plugin.name, (res) => {
if (res.ok) {
this.status = "";
// eslint-disable-next-line vue/no-mutating-props
this.plugin.installed = true;
} else {
this.$root.toastRes(res);
}
});
},
uninstall() {
this.status = "uninstalling";
this.$root.getSocket().emit("uninstallPlugin", this.plugin.name, (res) => {
if (res.ok) {
this.status = "";
// eslint-disable-next-line vue/no-mutating-props
this.plugin.installed = false;
} else {
this.$root.toastRes(res);
}
});
}
}
};
</script>
<style lang="scss" scoped>
@import "../assets/vars.scss";
.plugin-item {
display: flex;
justify-content: space-between;
align-content: center;
align-items: center;
.info {
margin-right: 10px;
}
.description {
font-size: 13px;
margin-bottom: 0;
}
.version {
font-size: 13px;
}
}
</style>

View File

@@ -41,7 +41,7 @@ export default {
},
computed: {
displayText() {
if (this.item.value === "") {
if (this.item.value === "" || this.item.value === undefined) {
return this.item.name;
} else {
return `${this.item.name}: ${this.item.value}`;

View File

@@ -0,0 +1,376 @@
<template>
<form @submit.prevent="submit">
<div ref="modal" class="modal fade" tabindex="-1" data-bs-backdrop="static">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 id="exampleModalLabel" class="modal-title">
{{ $t("Edit Tag") }}
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" />
</div>
<div class="modal-body">
<div class="mb-3">
<label for="tag-name" class="form-label">{{ $t("Name") }}</label>
<input id="tag-name" v-model="tag.name" type="text" class="form-control" required>
</div>
<div class="mb-3">
<label for="tag-color" class="form-label">{{ $t("color") }}</label>
<div class="d-flex">
<div class="col-8 pe-1">
<vue-multiselect
v-model="selectedColor"
:options="colorOptions"
:multiple="false"
:searchable="true"
:placeholder="$t('color')"
track-by="color"
label="name"
select-label=""
deselect-label=""
>
<template #option="{ option }">
<div
class="mx-2 py-1 px-3 rounded d-inline-flex"
style="height: 24px; color: white;"
:style="{ backgroundColor: option.color + ' !important' }"
>
<span>{{ option.name }}</span>
</div>
</template>
<template #singleLabel="{ option }">
<div
class="py-1 px-3 rounded d-inline-flex"
style="height: 24px; color: white;"
:style="{ backgroundColor: option.color + ' !important' }"
>
<span>{{ option.name }}</span>
</div>
</template>
</vue-multiselect>
</div>
<div class="col-4 ps-1">
<input id="tag-color-hex" v-model="tag.color" type="text" class="form-control">
</div>
</div>
</div>
<div class="mb-3">
<label for="tag-monitors" class="form-label">{{ $tc("Monitor", selectedMonitors.length) }}</label>
<div class="tag-monitors-list">
<router-link v-for="monitor in selectedMonitors" :key="monitor.id" class="d-flex align-items-center justify-content-between text-decoration-none tag-monitors-list-row py-2 px-3" :to="monitorURL(monitor.id)" @click="modal.hide()">
<span>{{ monitor.name }}</span>
<button type="button" class="btn-rm-monitor btn btn-outline-danger ms-2 py-1" @click.stop.prevent="removeMonitor(monitor.id)">
<font-awesome-icon class="" icon="times" />
</button>
</router-link>
</div>
<div v-if="allMonitorList.length > 0" class="pt-3 px-3">
<label class="form-label">{{ $t("Add a monitor") }}:</label>
<select v-model="selectedAddMonitor" class="form-control">
<option v-for="monitor in allMonitorList" :key="monitor.id" :value="monitor">{{ monitor.name }}</option>
</select>
</div>
</div>
</div>
<div class="modal-footer">
<button v-if="tag" type="button" class="btn btn-danger" :disabled="processing" @click="deleteConfirm">
{{ $t("Delete") }}
</button>
<button type="submit" class="btn btn-primary" :disabled="processing">
<div v-if="processing" class="spinner-border spinner-border-sm me-1"></div>
{{ $t("Save") }}
</button>
</div>
</div>
</div>
</div>
</form>
<Confirm ref="confirmDelete" btn-style="btn-danger" :yes-text="$t('Yes')" :no-text="$t('No')" @yes="deleteTag">
{{ $t("confirmDeleteTagMsg") }}
</Confirm>
</template>
<script>
import { Modal } from "bootstrap";
import Confirm from "./Confirm.vue";
import VueMultiselect from "vue-multiselect";
import { colorOptions } from "../util-frontend";
import { useToast } from "vue-toastification";
import { getMonitorRelativeURL } from "../util.ts";
const toast = useToast();
export default {
components: {
VueMultiselect,
Confirm,
},
props: {
updated: {
type: Function,
default: () => {},
}
},
data() {
return {
modal: null,
processing: false,
selectedColor: {
name: null,
color: null,
},
tag: {
id: null,
name: "",
color: "",
// Do not set default value here, please scroll to show()
},
monitors: [],
removingMonitor: [],
addingMonitor: [],
selectedAddMonitor: null,
};
},
computed: {
colorOptions() {
if (!colorOptions(this).find(option => option.color === this.tag.color)) {
return colorOptions(this).concat(
{
name: "custom",
color: this.tag.color
});
} else {
return colorOptions(this);
}
},
selectedMonitors() {
return this.monitors
.concat(Object.values(this.$root.monitorList).filter(monitor => this.addingMonitor.includes(monitor.id)))
.filter(monitor => !this.removingMonitor.includes(monitor.id));
},
allMonitorList() {
return Object.values(this.$root.monitorList).filter(monitor => !this.selectedMonitors.includes(monitor));
},
},
watch: {
// Set color option to "Custom" when a unknown color is entered
"tag.color"(to, from) {
if (colorOptions(this).find(x => x.color === to) == null) {
this.selectedColor.name = this.$t("Custom");
this.selectedColor.color = to;
}
},
selectedColor(to, from) {
if (to != null) {
this.tag.color = to.color;
}
},
/**
* Selected a monitor and add to the list.
*/
selectedAddMonitor(monitor) {
if (monitor) {
if (this.removingMonitor.includes(monitor.id)) {
this.removingMonitor = this.removingMonitor.filter(id => id !== monitor.id);
} else {
this.addingMonitor.push(monitor.id);
}
this.selectedAddMonitor = null;
}
},
},
mounted() {
this.modal = new Modal(this.$refs.modal);
},
methods: {
/**
* Show confirmation for deleting a tag
*/
deleteConfirm() {
this.$refs.confirmDelete.show();
},
/**
* Load tag information for display in the edit dialog
* @param {Object} tag tag object to edit
* @returns {void}
*/
show(tag) {
if (tag) {
this.selectedColor = this.colorOptions.find(x => x.color === tag.color) ?? {
name: this.$t("Custom"),
color: tag.color
};
this.tag.id = tag.id;
this.tag.name = tag.name;
this.tag.color = tag.color;
this.monitors = this.monitorsByTag(tag.id);
this.removingMonitor = [];
this.addingMonitor = [];
this.selectedAddMonitor = null;
}
this.modal.show();
},
/**
* Submit tag and monitorTag changes to server
* @returns {void}
*/
async submit() {
this.processing = true;
let editResult = true;
for (let addId of this.addingMonitor) {
await this.addMonitorTagAsync(this.tag.id, addId, "").then((res) => {
if (!res.ok) {
toast.error(res.msg);
editResult = false;
}
});
}
for (let removeId of this.removingMonitor) {
this.monitors.find(monitor => monitor.id === removeId)?.tags.forEach(async (monitorTag) => {
await this.deleteMonitorTagAsync(this.tag.id, removeId, monitorTag.value).then((res) => {
if (!res.ok) {
toast.error(res.msg);
editResult = false;
}
});
});
}
this.$root.getSocket().emit("editTag", this.tag, (res) => {
this.$root.toastRes(res);
this.processing = false;
if (res.ok && editResult) {
this.updated();
this.modal.hide();
}
});
},
/**
* Delete the editing tag from server
* @returns {void}
*/
deleteTag() {
this.processing = true;
this.$root.getSocket().emit("deleteTag", this.tag.id, (res) => {
this.$root.toastRes(res);
this.processing = false;
if (res.ok) {
this.updated();
this.modal.hide();
}
});
},
/**
* Remove a monitor from the monitors list locally
* @param {number} id id of the tag to remove
* @returns {void}
*/
removeMonitor(id) {
if (this.addingMonitor.includes(id)) {
this.addingMonitor = this.addingMonitor.filter(x => x !== id);
} else {
this.removingMonitor.push(id);
}
},
/**
* Get monitors which has a specific tag locally
* @param {number} tagId id of the tag to filter
* @returns {Object[]} list of monitors which has a specific tag
*/
monitorsByTag(tagId) {
return Object.values(this.$root.monitorList).filter((monitor) => {
return monitor.tags.find(monitorTag => monitorTag.tag_id === tagId);
});
},
/**
* Get URL of monitor
* @param {number} id ID of monitor
* @returns {string} Relative URL of monitor
*/
monitorURL(id) {
return getMonitorRelativeURL(id);
},
/**
* Add a tag to a monitor asynchronously
* @param {number} tagId ID of tag to add
* @param {number} monitorId ID of monitor to add tag to
* @param {string} value Value of tag
* @returns {Promise<void>}
*/
addMonitorTagAsync(tagId, monitorId, value) {
return new Promise((resolve) => {
this.$root.getSocket().emit("addMonitorTag", tagId, monitorId, value, resolve);
});
},
/**
* Delete a tag from a monitor asynchronously
* @param {number} tagId ID of tag to remove
* @param {number} monitorId ID of monitor to remove tag from
* @param {string} value Value of tag
* @returns {Promise<void>}
*/
deleteMonitorTagAsync(tagId, monitorId, value) {
return new Promise((resolve) => {
this.$root.getSocket().emit("deleteMonitorTag", tagId, monitorId, value, resolve);
});
},
},
};
</script>
<style lang="scss" scoped>
@import "../assets/vars.scss";
.dark {
.modal-dialog .form-text, .modal-dialog p {
color: $dark-font-color;
}
}
.btn-rm-monitor {
padding-left: 11px;
padding-right: 11px;
}
.tag-monitors-list {
max-height: 40vh;
overflow-y: scroll;
}
.tag-monitors-list .tag-monitors-list-row {
cursor: pointer;
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
.dark & {
border-bottom: 1px solid $dark-border-color;
}
&:hover {
background-color: $highlight-white;
}
.dark &:hover {
background-color: $dark-bg2;
}
}
</style>

View File

@@ -130,6 +130,7 @@
import { Modal } from "bootstrap";
import VueMultiselect from "vue-multiselect";
import { useToast } from "vue-toastification";
import { colorOptions } from "../util-frontend";
import Tag from "../components/Tag.vue";
const toast = useToast();
@@ -176,24 +177,7 @@ export default {
return this.preSelectedTags.concat(this.newTags).filter(tag => !this.deleteTags.find(monitorTag => monitorTag.id === tag.id));
},
colorOptions() {
return [
{ name: this.$t("Gray"),
color: "#4B5563" },
{ name: this.$t("Red"),
color: "#DC2626" },
{ name: this.$t("Orange"),
color: "#D97706" },
{ name: this.$t("Green"),
color: "#059669" },
{ name: this.$t("Blue"),
color: "#2563EB" },
{ name: this.$t("Indigo"),
color: "#4F46E5" },
{ name: this.$t("Purple"),
color: "#7C3AED" },
{ name: this.$t("Pink"),
color: "#DB2777" },
];
return colorOptions(this);
},
validateDraftTag() {
let nameInvalid = false;
@@ -204,7 +188,7 @@ export default {
nameInvalid = false;
valueInvalid = false;
invalid = false;
} else if (this.existingTags.filter(tag => tag.name === this.newDraftTag.name).length > 0) {
} else if (this.existingTags.filter(tag => tag.name === this.newDraftTag.name).length > 0 && this.newDraftTag.select == null) {
// Try to create new tag with existing name
nameInvalid = true;
invalid = true;

View File

@@ -1,8 +1,10 @@
<template>
<span :class="className" :title="24 + $t('-hour')">{{ uptime }}</span>
<span :class="className" :title="title">{{ uptime }}</span>
</template>
<script>
import { DOWN, MAINTENANCE, PENDING, UP } from "../util.ts";
export default {
props: {
/** Monitor this represents */
@@ -24,7 +26,6 @@ export default {
computed: {
uptime() {
if (this.type === "maintenance") {
return this.$t("statusMaintenance");
}
@@ -32,26 +33,32 @@ export default {
let key = this.monitor.id + "_" + this.type;
if (this.$root.uptimeList[key] !== undefined) {
return Math.round(this.$root.uptimeList[key] * 10000) / 100 + "%";
let result = Math.round(this.$root.uptimeList[key] * 10000) / 100;
// Only perform sanity check on status page. See louislam/uptime-kuma#2628
if (this.$route.path.startsWith("/status") && result > 100) {
return "100%";
} else {
return result + "%";
}
}
return this.$t("notAvailableShort");
},
color() {
if (this.type === "maintenance" || this.monitor.maintenance) {
if (this.lastHeartBeat.status === MAINTENANCE) {
return "maintenance";
}
if (this.lastHeartBeat.status === 0) {
if (this.lastHeartBeat.status === DOWN) {
return "danger";
}
if (this.lastHeartBeat.status === 1) {
if (this.lastHeartBeat.status === UP) {
return "primary";
}
if (this.lastHeartBeat.status === 2) {
if (this.lastHeartBeat.status === PENDING) {
return "warning";
}
@@ -75,6 +82,14 @@ export default {
return "";
},
title() {
if (this.type === "720") {
return `30${this.$t("-day")}`;
}
return `24${this.$t("-hour")}`;
}
},
};
</script>

View File

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

View File

@@ -26,6 +26,10 @@
<label for="promosms-sender-name" class="form-label">{{ $t("promosmsSMSSender") }}</label>
<input id="promosms-sender-name" v-model="$parent.notification.promosmsSenderName" type="text" minlength="3" maxlength="11" class="form-control">
</div>
<div class="form-check form-switch">
<input id="promosms-allow-long" v-model="$parent.notification.promosmsAllowLongSMS" type="checkbox" class="form-check-input">
<label for="promosms-allow-long" class="form-label">{{ $t("promosmsAllowLongSMS") }}</label>
</div>
</template>
<script>

View File

@@ -0,0 +1,32 @@
<template>
<div class="mb-3">
<label for="splunk-rest-url" class="form-label">{{ $t("Splunk Rest URL") }}</label>
<HiddenInput id="splunk-rest-url" v-model="$parent.notification.splunkRestURL" :required="true" autocomplete="false"></HiddenInput>
</div>
<div class="mb-3">
<label for="splunk-severity" class="form-label">{{ $t("Severity") }}</label>
<select id="splunk-severity" v-model="$parent.notification.splunkSeverity" class="form-select">
<option value="INFO">{{ $t("info") }}</option>
<option value="WARNING">{{ $t("warning") }}</option>
<option value="CRITICAL" selected="selected">{{ $t("critical") }}</option>
</select>
</div>
<div class="mb-3">
<label for="splunk-resolve" class="form-label">{{ $t("Auto resolve or acknowledged") }}</label>
<select id="splunk-resolve" v-model="$parent.notification.splunkAutoResolve" class="form-select">
<option value="0" selected="selected">{{ $t("do nothing") }}</option>
<option value="ACKNOWLEDGEMENT">{{ $t("auto acknowledged") }}</option>
<option value="RECOVERY">{{ $t("auto resolve") }}</option>
</select>
</div>
</template>
<script>
import HiddenInput from "../HiddenInput.vue";
export default {
components: {
HiddenInput,
},
};
</script>

View File

@@ -42,6 +42,11 @@ export default {
HiddenInput,
},
methods: {
/**
* Get the URL for telegram updates
* @param {string} [mode=masked] Should the token be masked?
* @returns {string} formatted URL
*/
telegramGetUpdatesURL(mode = "masked") {
let token = `<${this.$t("YOUR BOT TOKEN HERE")}>`;
@@ -55,6 +60,8 @@ export default {
return `https://api.telegram.org/bot${token}/getUpdates`;
},
/** Get the telegram chat ID */
async autoGetTelegramChatID() {
try {
let res = await axios.get(this.telegramGetUpdatesURL("withToken"));

View File

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

View File

@@ -12,6 +12,7 @@ import GoogleChat from "./GoogleChat.vue";
import Gorush from "./Gorush.vue";
import Gotify from "./Gotify.vue";
import HomeAssistant from "./HomeAssistant.vue";
import Kook from "./Kook.vue";
import Line from "./Line.vue";
import LineNotify from "./LineNotify.vue";
import LunaSea from "./LunaSea.vue";
@@ -42,6 +43,8 @@ import Telegram from "./Telegram.vue";
import Webhook from "./Webhook.vue";
import WeCom from "./WeCom.vue";
import GoAlert from "./GoAlert.vue";
import ZohoCliq from "./ZohoCliq.vue";
import Splunk from "./Splunk.vue";
/**
* Manage all notification form.
@@ -63,6 +66,7 @@ const NotificationFormList = {
"gorush": Gorush,
"gotify": Gotify,
"HomeAssistant": HomeAssistant,
"Kook": Kook,
"line": Line,
"LineNotify": LineNotify,
"lunasea": LunaSea,
@@ -89,10 +93,12 @@ const NotificationFormList = {
"stackfield": Stackfield,
"teams": Teams,
"telegram": Telegram,
"Splunk": Splunk,
"webhook": Webhook,
"WeCom": WeCom,
"GoAlert": GoAlert,
"ServerChan": ServerChan,
"ZohoCliq": ZohoCliq
};
export default NotificationFormList;

View File

@@ -7,6 +7,7 @@
settings.keepDataPeriodDays,
])
}}
{{ $t("infiniteRetention") }}
</label>
<input
id="keepDataPeriodDays"
@@ -14,9 +15,12 @@
type="number"
class="form-control"
required
min="1"
min="0"
step="1"
/>
<div v-if="settings.keepDataPeriodDays < 0" class="form-text">
{{ $t("dataRetentionTimeError") }}
</div>
</div>
<div class="my-4">
<button class="btn btn-primary" type="button" @click="saveSettings()">

View File

@@ -0,0 +1,57 @@
<template>
<div>
<div class="mt-3">{{ remotePluginListMsg }}</div>
<PluginItem v-for="plugin in remotePluginList" :key="plugin.id" :plugin="plugin" />
</div>
</template>
<script>
import PluginItem from "../PluginItem.vue";
export default {
components: {
PluginItem
},
data() {
return {
remotePluginList: [],
remotePluginListMsg: "",
};
},
computed: {
pluginList() {
return this.$parent.$parent.$parent.pluginList;
},
settings() {
return this.$parent.$parent.$parent.settings;
},
saveSettings() {
return this.$parent.$parent.$parent.saveSettings;
},
settingsLoaded() {
return this.$parent.$parent.$parent.settingsLoaded;
},
},
async mounted() {
this.loadList();
},
methods: {
loadList() {
this.remotePluginListMsg = this.$t("Loading") + "...";
this.$root.getSocket().emit("getPluginList", (res) => {
if (res.ok) {
this.remotePluginList = res.pluginList;
this.remotePluginListMsg = "";
} else {
this.remotePluginListMsg = this.$t("loadingError") + " " + res.msg;
}
});
}
},
};
</script>

View File

@@ -191,6 +191,7 @@ export default {
location.reload();
},
/** Show confirmation dialog for disable auth */
confirmDisableAuth() {
this.$refs.confirmDisableAuth.show();
},

View File

@@ -0,0 +1,171 @@
<template>
<div>
<div class="tags-list my-3">
<div v-for="(tag, index) in tagsList" :key="tag.id" class="d-flex align-items-center mx-4 py-1 tags-list-row" :disabled="processing" @click="editTag(index)">
<div class="col-5 ps-1">
<Tag :item="tag" />
</div>
<div class="col-5 px-1">
<div>{{ monitorsByTag(tag.id).length }} {{ $tc("Monitor", monitorsByTag(tag.id).length) }}</div>
</div>
<div class="col-2 pe-3 d-flex justify-content-end">
<button type="button" class="btn ms-2 py-1">
<font-awesome-icon class="" icon="edit" />
</button>
<button type="button" class="btn-rm-tag btn btn-outline-danger ms-2 py-1" :disabled="processing" @click.stop="deleteConfirm(index)">
<font-awesome-icon class="" icon="trash" />
</button>
</div>
</div>
</div>
<TagEditDialog ref="tagEditDialog" :updated="tagsUpdated" />
<Confirm ref="confirmDelete" btn-style="btn-danger" :yes-text="$t('Yes')" :no-text="$t('No')" @yes="deleteTag">
{{ $t("confirmDeleteTagMsg") }}
</Confirm>
</div>
</template>
<script>
import { useToast } from "vue-toastification";
import TagEditDialog from "../../components/TagEditDialog.vue";
import Tag from "../Tag.vue";
import Confirm from "../Confirm.vue";
const toast = useToast();
export default {
components: {
Confirm,
TagEditDialog,
Tag,
},
data() {
return {
processing: false,
tagsList: null,
deletingTag: null,
};
},
computed: {
settings() {
return this.$parent.$parent.$parent.settings;
},
saveSettings() {
return this.$parent.$parent.$parent.saveSettings;
},
settingsLoaded() {
return this.$parent.$parent.$parent.settingsLoaded;
},
},
mounted() {
this.getExistingTags();
},
methods: {
/**
* Reflect tag changes in the UI by fetching data. Callback for the edit tag dialog.
* @returns {void}
*/
tagsUpdated() {
this.getExistingTags();
this.$root.getMonitorList();
},
/**
* Get list of tags from server
* @returns {void}
*/
getExistingTags() {
this.processing = true;
this.$root.getSocket().emit("getTags", (res) => {
this.processing = false;
if (res.ok) {
this.tagsList = res.tags;
} else {
toast.error(res.msg);
}
});
},
/**
* Show confirmation for deleting a tag
* @param {number} index index of the tag to delete in the local tagsList
* @returns {void}
*/
deleteConfirm(index) {
this.deletingTag = this.tagsList[index];
this.$refs.confirmDelete.show();
},
/**
* Show dialog for editing a tag
* @param {number} index index of the tag to edit in the local tagsList
* @returns {void}
*/
editTag(index) {
this.$refs.tagEditDialog.show(this.tagsList[index]);
},
/**
* Delete the tag "deletingTag" from server
* @returns {void}
*/
deleteTag() {
this.processing = true;
this.$root.getSocket().emit("deleteTag", this.deletingTag.id, (res) => {
this.$root.toastRes(res);
this.processing = false;
if (res.ok) {
this.tagsUpdated();
}
});
},
/**
* Get monitors which has a specific tag locally
* @param {number} tagId id of the tag to filter
* @returns {Object[]} list of monitors which has a specific tag
*/
monitorsByTag(tagId) {
return Object.values(this.$root.monitorList).filter((monitor) => {
return monitor.tags.find(monitorTag => monitorTag.tag_id === tagId);
});
},
},
};
</script>
<style lang="scss" scoped>
@import "../../assets/vars.scss";
.btn-rm-tag {
padding-left: 11px;
padding-right: 11px;
}
.tags-list .tags-list-row {
cursor: pointer;
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
.dark & {
border-bottom: 1px solid $dark-border-color;
}
&:hover {
background-color: $highlight-white;
}
.dark &:hover {
background-color: $dark-bg2;
}
}
.tags-list .tags-list-row:last-child {
border: none;
}
</style>

View File

@@ -1,7 +1,8 @@
import { createI18n } from "vue-i18n/dist/vue-i18n.esm-browser.prod.js";
import en from "./languages/en";
import en from "./lang/en.json";
const languageList = {
"ar-SY": "العربية",
"cs-CZ": "Čeština",
"zh-HK": "繁體中文 (香港)",
"bg-BG": "Български",
@@ -36,6 +37,8 @@ const languageList = {
"uk-UA": "Український",
"th-TH": "ไทย",
"el-GR": "Ελληνικά",
"yue": "繁體中文 (廣東話 / 粵語)",
"ro": "Limba română",
};
let messages = {
@@ -48,7 +51,7 @@ for (let lang in languageList) {
};
}
const rtlLangs = [ "fa" ];
const rtlLangs = [ "fa", "ar-SY" ];
export const currentLocale = () => localStorage.locale
|| languageList[navigator.language] && navigator.language

View File

@@ -44,6 +44,7 @@ import {
faWrench,
faHeartbeat,
faFilter,
faInfoCircle,
} from "@fortawesome/free-solid-svg-icons";
library.add(
@@ -88,6 +89,7 @@ library.add(
faWrench,
faHeartbeat,
faFilter,
faInfoCircle,
);
export { FontAwesomeIcon };

18
src/lang/README.md Normal file
View File

@@ -0,0 +1,18 @@
# How to translate
(2023-01-24 Updated)
1. Go to [https://weblate.kuma.pet](https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/)
2. Register an account on Weblate
3. Make sure your GitHub email is matched with Weblate's account, so that it could show you as a contributor on GitHub
4. Choose your language on Weblate and start translating.
# How to add a new language in the dropdown
1. Add your language at https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/
2. Find the language code (You can find it at the end of the URL)
3. Go to https://github.com/louislam/uptime-kuma/blob/master/src/i18n.js and click `Edit` icon
4. Add your language at the end of `languageList`, format: `"zh-TW": "繁體中文 (台灣)",`
5. Commit and make a pull request for me to approve
If you do not have programming skills, let me know in [the issues section](https://github.com/louislam/uptime-kuma/issues). I will assist you. 😏

684
src/lang/ar-SY.json Normal file
View File

@@ -0,0 +1,684 @@
{
"languageName": "العربية",
"checkEverySecond": "تحقق من كل {0} ثانية",
"retryCheckEverySecond": "أعد محاولة كل {0} ثانية",
"resendEveryXTimes": "إعادة تقديم كل {0} مرات",
"resendDisabled": "إعادة الالتزام بالتعطيل",
"retriesDescription": "الحد الأقصى لإعادة المحاولة قبل تمييز الخدمة على أنها لأسفل وإرسال إشعار",
"ignoreTLSError": "تجاهل خطأ TLS/SSL لمواقع HTTPS",
"upsideDownModeDescription": "اقلب الحالة رأسًا على عقب. إذا كانت الخدمة قابلة للوصول إلى أسفل.",
"maxRedirectDescription": "الحد الأقصى لعدد إعادة التوجيه لمتابعة. ضبط على 0 لتعطيل إعادة التوجيه.",
"enableGRPCTls": "السماح لإرسال طلب GRPC مع اتصال TLS",
"grpcMethodDescription": "يتم تحويل اسم الطريقة إلى تنسيق Cammelcase مثل Sayhello Check وما إلى ذلك.",
"acceptedStatusCodesDescription": "حدد رموز الحالة التي تعتبر استجابة ناجحة.",
"Maintenance": "صيانة",
"statusMaintenance": "صيانة",
"Schedule maintenance": "جدولة الصيانة",
"Affected Monitors": "الشاشات المتأثرة",
"Pick Affected Monitors...": "اختيار الشاشات المتأثرة ...",
"Start of maintenance": "بداية الصيانة",
"All Status Pages": "جميع صفحات الحالة",
"Select status pages...": "حدد صفحات الحالة ...",
"recurringIntervalMessage": "ركض مرة واحدة كل يوم | قم بالتشغيل مرة واحدة كل يوم {0}",
"affectedMonitorsDescription": "حدد المراقبين المتأثرة بالصيانة الحالية",
"affectedStatusPages": "إظهار رسالة الصيانة هذه على صفحات الحالة المحددة",
"atLeastOneMonitor": "حدد شاشة واحدة على الأقل من المتأثرين",
"passwordNotMatchMsg": "كلمة المرور المتكررة لا تتطابق.",
"notificationDescription": "يجب تعيين الإخطارات إلى شاشة للعمل.",
"keywordDescription": "ابحث في الكلمة الرئيسية في استجابة HTML العادية أو JSON. البحث حساس للحالة.",
"pauseDashboardHome": "وقفة",
"deleteMonitorMsg": "هل أنت متأكد من حذف هذا الشاشة؟",
"deleteMaintenanceMsg": "هل أنت متأكد من حذف هذه الصيانة؟",
"deleteNotificationMsg": "هل أنت متأكد من حذف هذا الإشعار لجميع الشاشات؟",
"dnsPortDescription": "منفذ خادم DNS. الافتراضيات إلى 53. يمكنك تغيير المنفذ في أي وقت.",
"resolverserverDescription": "CloudFlare هو الخادم الافتراضي. يمكنك تغيير خادم المحوّل في أي وقت.",
"rrtypeDescription": "حدد نوع RR الذي تريد مراقبته",
"pauseMonitorMsg": "هل أنت متأكد من أن تتوقف مؤقتًا؟",
"enableDefaultNotificationDescription": "سيتم تمكين هذا الإشعار افتراضيًا للشاشات الجديدة. لا يزال بإمكانك تعطيل الإخطار بشكل منفصل لكل شاشة.",
"clearEventsMsg": "هل أنت متأكد من حذف جميع الأحداث لهذا الشاشة؟",
"clearHeartbeatsMsg": "هل أنت متأكد من حذف جميع دقات القلب لهذا الشاشة؟",
"confirmClearStatisticsMsg": "هل أنت متأكد من أنك تريد حذف جميع الإحصائيات؟",
"importHandleDescription": "اختر 'تخطي موجود' إذا كنت تريد تخطي كل شاشة أو إشعار بنفس الاسم. 'الكتابة فوق' سوف يحذف كل شاشة وإخطار موجود.",
"confirmImportMsg": "هل أنت متأكد من أنك تريد استيراد النسخ الاحتياطي؟ يرجى التحقق من أنك حددت خيار الاستيراد الصحيح.",
"twoFAVerifyLabel": "الرجاء إدخال الرمز المميز الخاص بك للتحقق من 2FA",
"tokenValidSettingsMsg": "الرمز المميز صالح! يمكنك الآن حفظ إعدادات 2FA.",
"confirmEnableTwoFAMsg": "هل أنت متأكد من أنك تريد تمكين 2FA؟",
"confirmDisableTwoFAMsg": "هل أنت متأكد من أنك تريد تعطيل 2FA؟",
"Settings": "إعدادات",
"Dashboard": "لوحة التحكم",
"New Update": "تحديث جديد",
"Language": "لغة",
"Appearance": "مظهر",
"Theme": "سمة",
"General": "عام",
"Primary Base URL": "عنوان URL الأساسي",
"Version": "الإصدار",
"Check Update On GitHub": "تحقق من التحديث على GitHub",
"List": "قائمة",
"Add": "يضيف",
"Add New Monitor": "أضف شاشة جديدة",
"Quick Stats": "إحصائيات سريعة",
"Up": "فوق",
"Down": "أسفل",
"Pending": "قيد الانتظار",
"Unknown": "غير معرّف",
"Pause": "إيقاف مؤقت",
"Name": "الاسم",
"Status": "الحالة",
"DateTime": "الوقت والتاريخ",
"Message": "الرسالة",
"No important events": "لا توجد أحداث مهمة",
"Resume": "استمرار",
"Edit": "تعديل",
"Delete": "حذف",
"Current": "حالي",
"Uptime": "مدة التشغيل",
"Cert Exp.": "تصدير الشهادة",
"Monitor": "مراقب | مراقبات",
"day": "يوم | أيام",
"-day": "-يوم",
"hour": "ساعة",
"-hour": "-ساعة",
"Response": "استجاية",
"Ping": "بينغ",
"Monitor Type": "نوع المراقب",
"Keyword": "كلمة مفتاحية",
"Friendly Name": "اسم معروف",
"URL": "عنوان URL",
"Hostname": "اسم المضيف",
"Port": "المنفذ",
"Heartbeat Interval": "فاصل نبضات القلب",
"Retries": "يحاول مجدداً",
"Heartbeat Retry Interval": "الفاصل الزمني لإعادة محاكمة نبضات القلب",
"Resend Notification if Down X times consequently": "إعادة تقديم الإخطار إذا انخفض x مرات بالتالي",
"Advanced": "متقدم",
"Upside Down Mode": "وضع أسفل أسفل",
"Max. Redirects": "الأعلى. إعادة التوجيه",
"Accepted Status Codes": "رموز الحالة المقبولة",
"Push URL": "دفع عنوان URL",
"needPushEvery": "يجب عليك استدعاء عنوان URL هذا كل ثانية.",
"pushOptionalParams": "المعلمات الاختيارية",
"Save": "يحفظ",
"Notifications": "إشعارات",
"Not available, please setup.": "غير متوفر من فضلك الإعداد.",
"Setup Notification": "إشعار الإعداد",
"Light": "نور",
"Dark": "داكن",
"Auto": "آلي",
"Theme - Heartbeat Bar": "موضوع - بار نبضات",
"Normal": "طبيعي",
"Bottom": "الأسفل",
"None": "لا أحد",
"Timezone": "وحدة زمنية",
"Search Engine Visibility": "محرك بحث الرؤية",
"Allow indexing": "السماح الفهرسة",
"Discourage search engines from indexing site": "تثبيط محركات البحث من موقع الفهرسة",
"Change Password": "غير كلمة السر",
"Current Password": "كلمة المرور الحالي",
"New Password": "كلمة سر جديدة",
"Repeat New Password": "كرر كلمة المرور الجديدة",
"Update Password": "تطوير كلمة السر",
"Disable Auth": "تعطيل المصادقة",
"Enable Auth": "تمكين المصادقة",
"disableauth.message1": "هل أنت متأكد من أن <strong> تعطيل المصادقة </strong>؟",
"disableauth.message2": "تم تصميمه للسيناريوهات <strong> حيث تنوي تنفيذ مصادقة الطرف الثالث </strong> أمام كوما في وقت التشغيل مثل CloudFlare Access Authelia أو آليات المصادقة الأخرى.",
"Please use this option carefully!": "الرجاء استخدام هذا الخيار بعناية!",
"Logout": "تسجيل خروج",
"Leave": "غادر",
"I understand, please disable": "أنا أفهم من فضلك تعطيل",
"Confirm": "يتأكد",
"Yes": "نعم",
"No": "رقم",
"Username": "اسم المستخدم",
"Password": "كلمة المرور",
"Remember me": "تذكرنى",
"Login": "تسجيل الدخول",
"No Monitors, please": "لا شاشات من فضلك",
"add one": "أضف واحدا",
"Notification Type": "نوع إعلام",
"Email": "بريد إلكتروني",
"Test": "امتحان",
"Certificate Info": "معلومات الشهادة",
"Resolver Server": "خادم Resolver",
"Resource Record Type": "نوع سجل الموارد",
"Last Result": "اخر نتيجة",
"Create your admin account": "إنشاء حساب المسؤول الخاص بك",
"Repeat Password": "اعد كلمة السر",
"Import Backup": "استيراد النسخ الاحتياطي",
"Export Backup": "النسخ الاحتياطي تصدير",
"Export": "يصدّر",
"Import": "يستورد",
"respTime": "resp. الوقت (MS)",
"notAvailableShort": "ن/أ",
"Default enabled": "التمكين الافتراضي",
"Apply on all existing monitors": "تنطبق على جميع الشاشات الحالية",
"Create": "خلق",
"Clear Data": "امسح البيانات",
"Events": "الأحداث",
"Heartbeats": "نبضات القلب",
"Auto Get": "الحصول على السيارات",
"backupDescription": "يمكنك النسخ الاحتياطي لجميع الشاشات والإشعارات في ملف JSON.",
"backupDescription2": "ملحوظة",
"backupDescription3": "يتم تضمين البيانات الحساسة مثل الرموز الإخطار في ملف التصدير ؛ يرجى تخزين التصدير بشكل آمن.",
"alertNoFile": "الرجاء تحديد ملف للاستيراد.",
"alertWrongFileType": "الرجاء تحديد ملف JSON.",
"Clear all statistics": "مسح جميع الإحصاءات",
"Skip existing": "تخطي الموجود",
"Overwrite": "الكتابة فوق",
"Options": "خيارات",
"Keep both": "احتفظ بكليهما",
"Verify Token": "تحقق من الرمز المميز",
"Setup 2FA": "الإعداد 2FA",
"Enable 2FA": "تمكين 2FA",
"Disable 2FA": "تعطيل 2FA",
"2FA Settings": "2FA إعدادات",
"Two Factor Authentication": "توثيق ذو عاملين",
"Active": "نشيط",
"Inactive": "غير نشط",
"Token": "رمز",
"Show URI": "أظهر URI",
"Tags": "العلامات",
"Add New below or Select...": "أضف جديدًا أدناه أو حدد ...",
"Tag with this name already exist.": "علامة مع هذا الاسم موجود بالفعل.",
"Tag with this value already exist.": "علامة مع هذه القيمة موجودة بالفعل.",
"color": "اللون",
"value (optional)": "القيمة (اختياري)",
"Gray": "رمادي",
"Red": "أحمر",
"Orange": "البرتقالي",
"Green": "لون أخضر",
"Blue": "أزرق",
"Indigo": "النيلي",
"Purple": "نفسجي",
"Pink": "لون القرنفل",
"Custom": "العادة",
"Search...": "يبحث...",
"Avg. Ping": "متوسط. بينغ",
"Avg. Response": "متوسط. إجابة",
"Entry Page": "صفحة الدخول",
"statusPageNothing": "لا شيء هنا الرجاء إضافة مجموعة أو شاشة.",
"No Services": "لا توجد خدمات",
"All Systems Operational": "جميع الأنظمة التشغيلية",
"Partially Degraded Service": "الخدمة المتدهورة جزئيا",
"Degraded Service": "خدمة متدهورة",
"Add Group": "أضف مجموعة",
"Add a monitor": "إضافة شاشة",
"Edit Status Page": "تحرير صفحة الحالة",
"Go to Dashboard": "الذهاب إلى لوحة القيادة",
"Status Page": "صفحة الحالة",
"Status Pages": "صفحات الحالة",
"defaultNotificationName": "تنبيه {الإخطار} ({number})",
"here": "هنا",
"Required": "مطلوب",
"telegram": "برقية",
"ZohoCliq": "Zohocliq",
"Bot Token": "رمز الروبوت",
"wayToGetTelegramToken": "يمكنك الحصول على رمز من {0}.",
"Chat ID": "معرف الدردشة",
"supportTelegramChatID": "دعم الدردشة المباشرة / معرف الدردشة للقناة",
"wayToGetTelegramChatID": "يمكنك الحصول على معرف الدردشة الخاص بك عن طريق إرسال رسالة إلى الروبوت والانتقال إلى عنوان URL هذا لعرض Chat_id",
"YOUR BOT TOKEN HERE": "رمز الروبوت الخاص بك هنا",
"chatIDNotFound": "لم يتم العثور على معرف الدردشة ؛ الرجاء إرسال رسالة إلى هذا الروبوت أولاً",
"webhook": "webhook",
"Post URL": "بعد عنوان URL",
"Content Type": "نوع المحتوى",
"webhookJsonDesc": "{0} مفيد لأي خوادم HTTP الحديثة مثل Express.js",
"webhookFormDataDesc": "{multipart} مفيد لـ PHP. سيحتاج JSON إلى تحليل {decodefunction}",
"webhookAdditionalHeadersTitle": "رؤوس إضافية",
"webhookAdditionalHeadersDesc": "يحدد رؤوس إضافية مرسلة مع webhook.",
"smtp": "البريد الإلكتروني (SMTP)",
"secureOptionNone": "لا شيء / startTls (25 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "تجاهل خطأ TLS",
"From Email": "من البريد الإلكترونى",
"emailCustomSubject": "موضوع مخصص",
"To Email": "للبريد الإلكتروني",
"smtpCC": "نسخة",
"smtpBCC": "BCC",
"discord": "خلاف",
"Discord Webhook URL": "Discord Webhook URL",
"wayToGetDiscordURL": "يمكنك الحصول على هذا عن طريق الانتقال إلى إعدادات الخادم -> التكامل -> إنشاء WebHook",
"Bot Display Name": "اسم عرض الروبوت",
"Prefix Custom Message": "بادئة رسالة مخصصة",
"Hello @everyone is...": "مرحبًا {'@'} الجميع ...",
"teams": "فرق Microsoft",
"Webhook URL": "Webhook URL",
"wayToGetTeamsURL": "يمكنك معرفة كيفية إنشاء عنوان URL webhook {0}.",
"wayToGetZohoCliqURL": "يمكنك معرفة كيفية إنشاء عنوان URL webhook {0}.",
"signal": "الإشارة",
"Number": "رقم",
"Recipients": "المستلمين",
"needSignalAPI": "تحتاج إلى وجود عميل إشارة مع REST API.",
"wayToCheckSignalURL": "يمكنك التحقق من عنوان URL هذا لعرض كيفية إعداد واحد",
"signalImportant": "مهم",
"gotify": "gotify",
"Application Token": "رمز التطبيق",
"Server URL": "عنوان URL الخادم",
"Priority": "أولوية",
"slack": "تثاقل",
"Icon Emoji": "أيقونة الرموز التعبيرية",
"Channel Name": "اسم القناة",
"Uptime Kuma URL": "UPTIME KUMA URL",
"aboutWebhooks": "مزيد من المعلومات حول Webhooks ON",
"aboutChannelName": "أدخل اسم القناة في حقل اسم القناة {0} إذا كنت تريد تجاوز قناة WebHook. السابق",
"aboutKumaURL": "إذا تركت حقل URL في وقت التشغيل KUMA فارغًا ، فسيتم افتراضيًا إلى صفحة GitHub Project.",
"emojiCheatSheet": "ورقة الغش في الرموز التعبيرية",
"rocket.chat": "صاروخ",
"pushover": "مهمة سهلة",
"pushy": "انتهازي",
"PushByTechulus": "دفع بواسطة Techulus",
"octopush": "أوكتوبوش",
"promosms": "الترويجيات",
"clicksendsms": "نقرات SMS",
"lunasea": "لوناسيا",
"apprise": "إبلاغ (دعم 50+ خدمات الإخطار)",
"GoogleChat": "دردشة Google",
"pushbullet": "حماس",
"Kook": "كووك",
"wayToGetKookBotToken": "قم بإنشاء تطبيق واحصل على رمز الروبوت الخاص بك على {0}",
"wayToGetKookGuildID": "قم بتشغيل 'وضع المطور' في إعداد Kook وانقر بزر الماوس الأيمن على النقابة للحصول على معرفه",
"Guild ID": "معرف النقابة",
"line": "خط",
"mattermost": "المادة",
"User Key": "مفتاح المستخدم",
"Device": "جهاز",
"Message Title": "عنوان الرسالة",
"Notification Sound": "صوت الإشعار",
"More info on": "مزيد من المعلومات حول",
"pushoverDesc1": "أولوية الطوارئ (2) لها مهلة افتراضية 30 ثانية بين إعادة المحاولة وستنتهي صلاحيتها بعد ساعة واحدة.",
"pushoverDesc2": "إذا كنت ترغب في إرسال إشعارات إلى أجهزة مختلفة ، قم بملء حقل الجهاز.",
"SMS Type": "نوع الرسائل القصيرة",
"octopushTypePremium": "قسط (سريع - موصى به للتنبيه)",
"octopushTypeLowCost": "التكلفة المنخفضة (بطيئة - تم حظرها أحيانًا بواسطة المشغل)",
"checkPrice": "تحقق من الأسعار {0}",
"apiCredentials": "بيانات اعتماد API",
"octopushLegacyHint": "هل تستخدم الإصدار القديم من Octopush (2011-2020) أو الإصدار الجديد؟",
"Check octopush prices": "تحقق من أسعار Octopush {0}.",
"octopushPhoneNumber": "رقم الهاتف (تنسيق intl على سبيل المثال",
"octopushSMSSender": "اسم مرسل الرسائل القصيرة",
"LunaSea Device ID": "معرف جهاز Lunasea",
"Apprise URL": "إبلاغ عنوان URL",
"Example": "مثال",
"Read more:": "{0} :قراءة المزيد",
"Status:": "{0} :حالة",
"Read more": "قراءة المزيد",
"appriseInstalled": "تم تثبيت Prosise.",
"appriseNotInstalled": "الإبرام غير مثبت. {0}",
"Access Token": "رمز وصول",
"Channel access token": "قناة الوصول إلى الرمز",
"Line Developers Console": "تحكم المطورين",
"lineDevConsoleTo": "وحدة المطورين Line Console - {0}",
"Basic Settings": "الإعدادات الأساسية",
"User ID": "معرف المستخدم",
"Messaging API": "واجهة برمجة تطبيقات المراسلة",
"wayToGetLineChannelToken": "قم أولاً بالوصول إلى {0} إنشاء مزود وقناة (واجهة برمجة تطبيقات المراسلة) ، ثم يمكنك الحصول على رمز الوصول إلى القناة ومعرف المستخدم من عناصر القائمة المذكورة أعلاه.",
"Icon URL": "url url icon",
"aboutIconURL": "يمكنك توفير رابط لصورة في \"Icon URL\" لتجاوز صورة الملف الشخصي الافتراضي. لن يتم استخدامه إذا تم تعيين رمز رمز رمز.",
"aboutMattermostChannelName": "يمكنك تجاوز القناة الافتراضية التي تنشرها WebHook من خلال إدخال اسم القناة في \"Channel Name\" الحقل. يجب تمكين هذا في إعدادات Webhook Mattern. السابق",
"matrix": "مصفوفة",
"promosmsTypeEco": "SMS Eco - رخيصة ولكن بطيئة وغالبًا ما تكون محملة. يقتصر فقط على المستفيدين البولنديين.",
"promosmsTypeFlash": "SMS Flash - سيتم عرض الرسالة تلقائيًا على جهاز المستلم. يقتصر فقط على المستفيدين البولنديين.",
"promosmsTypeFull": "SMS Full - Tier Premium SMS يمكنك استخدام اسم المرسل الخاص بك (تحتاج إلى تسجيل الاسم أولاً). موثوقة للتنبيهات.",
"promosmsTypeSpeed": "سرعة الرسائل القصيرة - أولوية قصوى في النظام. سريع وموثوق للغاية ولكنه مكلف (حوالي مرتين من الرسائل القصيرة السعر الكامل).",
"promosmsPhoneNumber": "رقم الهاتف (للمستلم البولندي ، يمكنك تخطي رموز المنطقة)",
"promosmsSMSSender": "اسم مرسل الرسائل القصيرة",
"promosmsAllowLongSMS": "السماح الرسائل القصيرة الطويلة",
"Feishu WebHookUrl": "Feishu Webhookurl",
"matrixHomeserverURL": "عنوان URL HomeServer (مع HTTP (S)",
"Internal Room Id": "معرف الغرفة الداخلية",
"matrixDesc1": "يمكنك العثور على معرف الغرفة الداخلي من خلال البحث في القسم المتقدم من إعدادات الغرفة في عميل Matrix الخاص بك. يجب أن تبدو مثل! QMDRCPUIFLWSFJXYE6",
"matrixDesc2": "يوصى بشدة بإنشاء مستخدم جديد ولا تستخدم رمز الوصول إلى مستخدم Matrix الخاص بك لأنه سيتيح الوصول الكامل إلى حسابك وجميع الغرف التي انضمت إليها. بدلاً من ذلك ، قم بإنشاء مستخدم جديد ودعوته فقط إلى الغرفة التي تريد تلقيها الإشعار فيها. يمكنك الحصول على رمز الوصول عن طريق تشغيل {0}",
"Method": "طريقة",
"Body": "الجسم",
"Headers": "الرؤوس",
"PushUrl": "دفع عنوان URL",
"HeadersInvalidFormat": "رؤوس الطلبات غير صالحة JSON",
"BodyInvalidFormat": "هيئة الطلب غير صالحة JSON",
"Monitor History": "مراقبة التاريخ",
"clearDataOlderThan": "الحفاظ على بيانات سجل المراقبة للأيام {0}.",
"PasswordsDoNotMatch": "كلمة المرور غير مطابقة.",
"records": "السجلات",
"One record": "سجل واحد",
"steamApiKeyDescription": "لمراقبة خادم لعبة Steam ، تحتاج إلى مفتاح Steam Web-API. يمكنك تسجيل مفتاح API الخاص بك هنا",
"Current User": "المستخدم الحالي",
"topic": "عنوان",
"topicExplanation": "موضوع MQTT لرصد",
"successMessage": "نجاح رسالة",
"successMessageExplanation": "رسالة MQTT التي ستعتبر نجاحًا",
"recent": "الأخيرة",
"Done": "فعله",
"Info": "معلومات",
"Security": "حماية",
"Steam API Key": "مفتاح API Steam",
"Shrink Database": "تقلص قاعدة البيانات",
"Pick a RR-Type...": "اختر نوع RR ...",
"Pick Accepted Status Codes...": "اختيار رموز الحالة المقبولة ...",
"Default": "تقصير",
"HTTP Options": "خيارات HTTP",
"Create Incident": "إنشاء حادث",
"Title": "لقب",
"Content": "المحتوى",
"Style": "أسلوب",
"info": "معلومات",
"warning": "تحذير",
"danger": "خطر",
"error": "خطأ",
"critical": "شديد الأهمية",
"primary": "الأولية",
"light": "نور",
"dark": "ظلام",
"Post": "بريد",
"Please input title and content": "الرجاء إدخال العنوان والمحتوى",
"Created": "مخلوق",
"Last Updated": "التحديث الاخير",
"Unpin": "إلغاء",
"Switch to Light Theme": "التبديل إلى موضوع الضوء",
"Switch to Dark Theme": "التبديل إلى موضوع الظلام",
"Show Tags": "أضهر العلامات",
"Hide Tags": "إخفاء العلامات",
"Description": "وصف",
"No monitors available.": "لا شاشات المتاحة.",
"Add one": "أضف واحدا",
"No Monitors": "لا شاشات",
"Untitled Group": "مجموعة بلا عنوان",
"Services": "خدمات",
"Discard": "تجاهل",
"Cancel": "يلغي",
"Powered by": "مشغل بواسطة",
"shrinkDatabaseDescription": "تشغيل فراغ قاعدة البيانات لـ SQLite. إذا تم إنشاء قاعدة البيانات الخاصة بك بعد تمكين 1.10.0 AUTO_VACUUM بالفعل ولا يلزم هذا الإجراء.",
"serwersms": "Serwersms.pl",
"serwersmsAPIUser": "اسم مستخدم API (بما في ذلك بادئة WebAPI_)",
"serwersmsAPIPassword": "كلمة مرور API",
"serwersmsPhoneNumber": "رقم الهاتف",
"serwersmsSenderName": "اسم مرسل الرسائل القصيرة (مسجل عبر بوابة العملاء)",
"smseagle": "smseagle",
"smseagleTo": "أرقام الهواتف)",
"smseagleGroup": "اسم مجموعة كتب الهاتف (S)",
"smseagleContact": "كتاب الاتصال اسم (S)",
"smseagleRecipientType": "نوع المستلم",
"smseagleRecipient": "المتلقي (المتلقيين) (يجب فصل المتعددة مع فاصلة)",
"smseagleToken": "API وصول الرمز المميز",
"smseagleUrl": "عنوان URL لجهاز SMSEGLE الخاص بك",
"smseagleEncoding": "إرسال Unicode",
"smseaglePriority": "أولوية الرسالة (0-9 افتراضي = 0)",
"stackfield": "Stackfield",
"Customize": "يعدل أو يكيف",
"Custom Footer": "تذييل مخصص",
"Custom CSS": "لغة تنسيق ويب حسب الطلب",
"smtpDkimSettings": "إعدادات DKIM",
"smtpDkimDesc": "يرجى الرجوع إلى Nodemailer dkim {0} للاستخدام.",
"documentation": "توثيق",
"smtpDkimDomain": "اسم النطاق",
"smtpDkimKeySelector": "المحدد الرئيسي",
"smtpDkimPrivateKey": "مفتاح سري",
"smtpDkimHashAlgo": "خوارزمية التجزئة (اختياري)",
"smtpDkimheaderFieldNames": "مفاتيح الرأس للتوقيع (اختياري)",
"smtpDkimskipFields": "مفاتيح الرأس لا توقيع (اختياري)",
"wayToGetPagerDutyKey": "يمكنك الحصول على هذا عن طريق الانتقال إلى الخدمة -> دليل الخدمة -> (حدد خدمة) -> تكامل -> إضافة التكامل. هنا يمكنك البحث عن \"Events API V2\". مزيد من المعلومات {0}",
"Integration Key": "مفتاح التكامل",
"Integration URL": "URL تكامل",
"Auto resolve or acknowledged": "حل السيارات أو الاعتراف به",
"do nothing": "لا تفعل شيئا",
"auto acknowledged": "اعترف السيارات",
"auto resolve": "عزم السيارات",
"gorush": "جورش",
"alerta": "أليتا",
"alertaApiEndpoint": "نقطة نهاية API",
"alertaEnvironment": "بيئة",
"alertaApiKey": "مفتاح API",
"alertaAlertState": "حالة التنبيه",
"alertaRecoverState": "استعادة الدولة",
"deleteStatusPageMsg": "هل أنت متأكد من حذف صفحة الحالة هذه؟",
"Proxies": "وكلاء",
"default": "تقصير",
"enabled": "تمكين",
"setAsDefault": "تعيين كافتراضي",
"deleteProxyMsg": "هل أنت متأكد من حذف هذا الوكيل لجميع الشاشات؟",
"proxyDescription": "يجب تعيين الوكلاء إلى شاشة للعمل.",
"enableProxyDescription": "لن يؤثر هذا الوكيل على طلبات الشاشة حتى يتم تنشيطه. يمكنك التحكم مؤقتًا في تعطيل الوكيل من جميع الشاشات حسب حالة التنشيط.",
"setAsDefaultProxyDescription": "سيتم تمكين هذا الوكيل افتراضيًا للشاشات الجديدة. لا يزال بإمكانك تعطيل الوكيل بشكل منفصل لكل شاشة.",
"Certificate Chain": "سلسلة الشهادة",
"Valid": "صالح",
"Invalid": "غير صالح",
"AccessKeyId": "معرف AccessKey",
"SecretAccessKey": "Accesskey Secret",
"PhoneNumbers": "أرقام الهواتف",
"TemplateCode": "TemplateCode",
"SignName": "اسم تسجيل الدخول",
"Sms template must contain parameters: ": "يجب أن يحتوي قالب الرسائل القصيرة على معلمات:",
"Bark Endpoint": "نقطة نهاية اللحاء",
"Bark Group": "مجموعة اللحاء",
"Bark Sound": "صوت اللحاء",
"WebHookUrl": "webhookurl",
"SecretKey": "Secretkey",
"For safety, must use secret key": "للسلامة يجب استخدام المفتاح السري",
"Device Token": "رمز الجهاز",
"Platform": "منصة",
"iOS": "iOS",
"Android": "ذكري المظهر",
"Huawei": "هواوي",
"High": "عالٍ",
"Retry": "إعادة المحاولة",
"Topic": "عنوان",
"WeCom Bot Key": "WECOM BOT KEY",
"Setup Proxy": "وكيل الإعداد",
"Proxy Protocol": "بروتوكول الوكيل",
"Proxy Server": "مخدم بروكسي",
"Proxy server has authentication": "خادم الوكيل لديه مصادقة",
"User": "المستعمل",
"Installed": "المثبتة",
"Not installed": "غير مثبت",
"Running": "جري",
"Not running": "لا يعمل",
"Remove Token": "إزالة الرمز المميز",
"Start": "بداية",
"Stop": "قف",
"Uptime Kuma": "وقت التشغيل كوما",
"Add New Status Page": "أضف صفحة حالة جديدة",
"Slug": "سبيكة",
"Accept characters": "قبول الشخصيات",
"startOrEndWithOnly": "ابدأ أو ينتهي بـ {0} فقط",
"No consecutive dashes": "لا شرطات متتالية",
"Next": "التالي",
"The slug is already taken. Please choose another slug.": "تم أخذ سبيكة بالفعل. الرجاء اختيار سبيكة أخرى.",
"No Proxy": "لا الوكيل",
"Authentication": "المصادقة",
"HTTP Basic Auth": "HTTP الأساسي Auth",
"New Status Page": "صفحة حالة جديدة",
"Page Not Found": "الصفحة غير موجودة",
"Reverse Proxy": "وكيل عكسي",
"Backup": "دعم",
"About": "عن",
"wayToGetCloudflaredURL": "(قم بتنزيل CloudFlared من {0})",
"cloudflareWebsite": "موقع CloudFlare",
"Message:": ":رسالة",
"Don't know how to get the token? Please read the guide": "لا أعرف كيف تحصل على الرمز المميز؟ يرجى قراءة الدليل",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "قد يضيع الاتصال الحالي إذا كنت تتصل حاليًا عبر نفق CloudFlare. هل أنت متأكد تريد إيقافها؟ اكتب كلمة المرور الحالية لتأكيدها.",
"HTTP Headers": "رؤوس HTTP",
"Trust Proxy": "الوكيل الثقة",
"Other Software": "برامج أخرى",
"For example: nginx, Apache and Traefik.": "على سبيل المثال: nginx و Apache و Traefik.",
"Please read": "يرجى القراءة",
"Subject": "موضوع",
"Valid To": "صالحة ل",
"Days Remaining": "الأيام المتبقية",
"Issuer": "المصدر",
"Fingerprint": "بصمة",
"No status pages": "لا صفحات الحالة",
"Domain Name Expiry Notification": "اسم النطاق إشعار انتهاء الصلاحية",
"Proxy": "الوكيل",
"Date Created": "تاريخ الإنشاء",
"HomeAssistant": "مساعد المنزل",
"onebotHttpAddress": "OneBot HTTP عنوان",
"onebotMessageType": "نوع رسالة OneBot",
"onebotGroupMessage": "مجموعة",
"onebotPrivateMessage": "خاص",
"onebotUserOrGroupId": "معرف المجموعة/المستخدم",
"onebotSafetyTips": "للسلامة يجب ضبط الرمز المميز للوصول",
"PushDeer Key": "مفتاح PushDeer",
"Footer Text": "نص تذييل",
"Show Powered By": "عرض مدعوم من قبل",
"Domain Names": "أسماء المجال",
"signedInDisp": "وقعت في {0}",
"signedInDispDisabled": "معاق المصادقة.",
"RadiusSecret": "سر نصف القطر",
"RadiusSecretDescription": "السر المشترك بين العميل والخادم",
"RadiusCalledStationId": "يسمى معرف المحطة",
"RadiusCalledStationIdDescription": "معرف الجهاز المتصل",
"RadiusCallingStationId": "معرف محطة الاتصال",
"RadiusCallingStationIdDescription": "معرف جهاز الاتصال",
"Certificate Expiry Notification": "إشعار انتهاء الصلاحية",
"API Username": "اسم المستخدم API",
"API Key": "مفتاح API",
"Recipient Number": "رقم المستلم",
"From Name/Number": "من الاسم/الرقم",
"Leave blank to use a shared sender number.": "اترك فارغًا لاستخدام رقم المرسل المشترك.",
"Octopush API Version": "إصدار Octopush API",
"Legacy Octopush-DM": "Legacy Octopush-DM",
"endpoint": "نقطة النهاية",
"octopushAPIKey": "\"API key\" from HTTP API بيانات اعتماد في لوحة التحكم",
"octopushLogin": "\"Login\" من بيانات اعتماد API HTTP في لوحة التحكم",
"promosmsLogin": "اسم تسجيل الدخول API",
"promosmsPassword": "كلمة مرور API",
"pushoversounds pushover": "سداد (افتراضي)",
"pushoversounds bike": "دراجة هوائية",
"pushoversounds bugle": "بوق",
"pushoversounds cashregister": "ماكينة تسجيل المدفوعات النقدية",
"pushoversounds classical": "كلاسيكي",
"pushoversounds cosmic": "كونية",
"pushoversounds falling": "هبوط",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "واردة",
"pushoversounds intermission": "استراحة",
"pushoversounds magic": "سحر",
"pushoversounds mechanical": "ميكانيكي",
"pushoversounds pianobar": "شريط البيانو",
"pushoversounds siren": "صفارة إنذار",
"pushoversounds spacealarm": "إنذار الفضاء",
"pushoversounds tugboat": "قارب السحب",
"pushoversounds alien": "إنذار أجنبي (طويل)",
"pushoversounds climb": "تسلق (طويل)",
"pushoversounds persistent": "مستمر (طويل)",
"pushoversounds echo": "صدى مهووس (طويل)",
"pushoversounds updown": "صعودا (طويلة)",
"pushoversounds vibrate": "يهتز فقط",
"pushoversounds none": "لا شيء (صامت)",
"pushyAPIKey": "مفتاح API السري",
"pushyToken": "رمز الجهاز",
"Show update if available": "عرض التحديث إذا كان ذلك متاحًا",
"Also check beta release": "تحقق أيضًا من الإصدار التجريبي",
"Using a Reverse Proxy?": "باستخدام وكيل عكسي؟",
"Check how to config it for WebSocket": "تحقق من كيفية تكوينه لـ WebSocket",
"Steam Game Server": "خادم لعبة البخار",
"Most likely causes": "الأسباب المرجحة",
"The resource is no longer available.": "لم يعد المورد متاحًا.",
"There might be a typing error in the address.": "قد يكون هناك خطأ مطبعي في العنوان.",
"What you can try": "ماذا تستطيع أن تجرب",
"Retype the address.": "اعد كتابة العنوان.",
"Go back to the previous page.": "عد للصفحة السابقة.",
"Coming Soon": "قريبا",
"wayToGetClickSendSMSToken": "يمكنك الحصول على اسم مستخدم API ومفتاح API من {0}.",
"Connection String": "سلسلة الاتصال",
"Query": "استفسار",
"settingsCertificateExpiry": "شهادة TLS انتهاء الصلاحية",
"certificationExpiryDescription": "شاشات HTTPS تضيء عندما تنتهي شهادة TLS في",
"Setup Docker Host": "إعداد مضيف Docker",
"Connection Type": "نوع الاتصال",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "هل أنت متأكد من حذف مضيف Docker لجميع الشاشات؟",
"socket": "قابس كهرباء",
"tcp": "TCP / HTTP",
"Docker Container": "حاوية Docker",
"Container Name / ID": "اسم الحاوية / معرف",
"Docker Host": "مضيف Docker",
"Docker Hosts": "مضيفي Docker",
"ntfy Topic": "موضوع ntfy",
"Domain": "اِختِصاص",
"Workstation": "محطة العمل",
"disableCloudflaredNoAuthMsg": "أنت في وضع مصادقة لا توجد كلمة مرور غير مطلوبة.",
"trustProxyDescription": "الثقة 'x-forward-*'. إذا كنت ترغب في الحصول على IP العميل الصحيح وكوما في الوقت المناسب مثل Nginx أو Apache ، فيجب عليك تمكين ذلك.",
"wayToGetLineNotifyToken": "يمكنك الحصول على رمز الوصول من {0}",
"Examples": "أمثلة",
"Home Assistant URL": "Home Assistant URL",
"Long-Lived Access Token": "الرمز المميز للوصول منذ فترة طويلة",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "يمكن إنشاء رمز الوصول منذ فترة طويلة عن طريق النقر على اسم ملف التعريف الخاص بك (أسفل اليسار) والتمرير إلى الأسفل ثم انقر فوق إنشاء الرمز المميز.",
"Notification Service": "خدمة الإخطار",
"default: notify all devices": "الافتراضي: إخطار جميع الأجهزة",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "يمكن العثور على قائمة بخدمات الإخطار في المساعد المنزلي ضمن \"Developer Tools > Services\" ابحث عن \"notification\" للعثور على اسم جهازك/هاتفك.",
"Automations can optionally be triggered in Home Assistant": "يمكن أن يتم تشغيل الأتمتة اختياريًا في مساعد المنزل",
"Trigger type": "نوع الزناد",
"Event type": "نوع الحدث",
"Event data": "بيانات الحدث",
"Then choose an action, for example switch the scene to where an RGB light is red.": "ثم اختر إجراءً على سبيل المثال قم بتبديل المشهد إلى حيث يكون ضوء RGB أحمر.",
"Frontend Version": "إصدار الواجهة الأمامية",
"Frontend Version do not match backend version!": "إصدار Frontend لا يتطابق مع الإصدار الخلفي!",
"Base URL": "عنوان URL الأساسي",
"goAlertInfo": "الهدف هو تطبيق مفتوح المصدر لجدولة الجدولة التلقائية والإشعارات (مثل الرسائل القصيرة أو المكالمات الصوتية). إشراك الشخص المناسب تلقائيًا بالطريقة الصحيحة وفي الوقت المناسب! {0}",
"goAlertIntegrationKeyInfo": "احصل على مفتاح تكامل API العام للخدمة في هذا التنسيق \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" عادةً قيمة المعلمة الرمزية لعنوان url المنسق.",
"goAlert": "المرمى",
"backupOutdatedWarning": "إهمال",
"backupRecommend": "يرجى النسخ الاحتياطي لحجم الصوت أو مجلد البيانات (./data/) مباشرة بدلاً من ذلك.",
"Optional": "اختياري",
"squadcast": "القاء فريقي",
"SendKey": "Sendkey",
"SMSManager API Docs": "مستندات SMSManager API",
"Gateway Type": "نوع البوابة",
"SMSManager": "smsmanager",
"You can divide numbers with": "يمكنك تقسيم الأرقام مع",
"or": "أو",
"recurringInterval": "فترة",
"Recurring": "يتكرر",
"strategyManual": "نشط/غير نشط يدويًا",
"warningTimezone": "إنه يستخدم المنطقة الزمنية للخادم",
"weekdayShortMon": "الاثنين",
"weekdayShortTue": "الثلاثاء",
"weekdayShortWed": "تزوج",
"weekdayShortThu": "الخميس",
"weekdayShortFri": "الجمعة",
"weekdayShortSat": "جلس",
"weekdayShortSun": "شمس",
"dayOfWeek": "يوم من الأسبوع",
"dayOfMonth": "يوم من الشهر",
"lastDay": "بالأمس",
"lastDay1": "آخر يوم من الشهر",
"lastDay2": "الثاني في اليوم الأخير من الشهر",
"lastDay3": "الثالث في اليوم الأخير من الشهر",
"lastDay4": "الرابع في اليوم الأخير من الشهر",
"No Maintenance": "لا صيانة",
"pauseMaintenanceMsg": "هل أنت متأكد من أن تتوقف مؤقتًا؟",
"maintenanceStatus-under-maintenance": "تحت الصيانة",
"maintenanceStatus-inactive": "غير نشط",
"maintenanceStatus-scheduled": "المقرر",
"maintenanceStatus-ended": "انتهى",
"maintenanceStatus-unknown": "مجهول",
"Display Timezone": "عرض المنطقة الزمنية",
"Server Timezone": "المنطقة الزمنية الخادم",
"statusPageMaintenanceEndDate": "نهاية",
"IconUrl": "url url icon",
"Enable DNS Cache": "تمكين ذاكرة التخزين المؤقت DNS",
"Enable": "يُمكَِن",
"Disable": "إبطال",
"dnsCacheDescription": "قد لا يعمل في بعض بيئات IPv6 تعطيله إذا واجهت أي مشكلات.",
"Single Maintenance Window": "نافذة صيانة واحدة",
"Maintenance Time Window of a Day": "نافذة وقت الصيانة لليوم",
"Effective Date Range": "نطاق التاريخ السريع",
"Schedule Maintenance": "جدولة الصيانة",
"Date and Time": "التاريخ و الوقت",
"DateTime Range": "نطاق DateTime",
"Strategy": "إستراتيجية",
"Free Mobile User Identifier": "معرف مستخدم الهاتف المحمول المجاني",
"Free Mobile API Key": "مفتاح واجهة برمجة تطبيقات مجانية للهاتف المحمول",
"Enable TLS": "تمكين TLS",
"Proto Service Name": "اسم خدمة البروتو",
"Proto Method": "طريقة البروتو",
"Proto Content": "محتوى proto",
"Economy": "اقتصاد",
"Lowcost": "تكلفة منخفضة",
"high": "عالي",
"General Monitor Type": "نوع الشاشة العامة",
"Passive Monitor Type": "نوع الشاشة السلبي",
"Specific Monitor Type": "نوع شاشة محدد",
"dataRetentionTimeError": "يجب أن تكون فترة الاستبقاء 0 أو أكبر",
"infiniteRetention": "ضبط على 0 للاحتفاظ لا نهائي.",
"confirmDeleteTagMsg": "هل أنت متأكد من أنك تريد حذف هذه العلامة؟ لن يتم حذف الشاشات المرتبطة بهذه العلامة."
}

695
src/lang/bg-BG.json Normal file
View File

@@ -0,0 +1,695 @@
{
"languageName": "Български",
"checkEverySecond": "Ще се извършва на всеки {0} секунди",
"retryCheckEverySecond": "Ще се извършва на всеки {0} секунди",
"retriesDescription": "Максимален брой опити преди маркиране на услугата като недостъпна и изпращане на известие",
"ignoreTLSError": "Игнорирай TLS/SSL грешки за HTTPS уеб сайтове",
"upsideDownModeDescription": "Обръща статуса от достъпен на недостъпен. Ако услугата е достъпна, ще се вижда като НЕДОСТЪПНА.",
"maxRedirectDescription": "Максимален брой пренасочвания, които да бъдат следвани. Въведете 0 за да изключите пренасочване.",
"acceptedStatusCodesDescription": "Изберете статус кодове, които да се считат за успешен отговор.",
"passwordNotMatchMsg": "Повторената парола не съвпада.",
"notificationDescription": "Моля, задайте известието към монитор(и), за да функционира.",
"keywordDescription": "Търси ключова дума в чист HTML или JSON отговор - чувствителна е към регистъра.",
"pauseDashboardHome": "Пауза",
"deleteMonitorMsg": "Наистина ли желаете да изтриете този монитор?",
"deleteNotificationMsg": "Наистина ли желаете да изтриете това известие за всички монитори?",
"resolverserverDescription": "Cloudflare е сървърът по подразбиране, но можете да го промените по всяко време.",
"rrtypeDescription": "Изберете ресурсния запис, който желаете да наблюдавате",
"pauseMonitorMsg": "Наистина ли желаете да поставите в режим пауза?",
"enableDefaultNotificationDescription": "За всеки нов монитор това известие ще бъде активирано по подразбиране. Можете да го изключите за всеки отделен монитор.",
"clearEventsMsg": "Наистина ли желаете да изтриете всички събития за този монитор?",
"clearHeartbeatsMsg": "Наистина ли желаете да изтриете всички записи за честотни проверки на този монитор?",
"confirmClearStatisticsMsg": "Наистина ли желаете да изтриете всички статистически данни?",
"importHandleDescription": "Изберете 'Пропусни съществуващите', ако желаете да пропуснете всеки монитор или известие със същото име. 'Презапис' ще изтрие всеки съществуващ монитор и известие.",
"confirmImportMsg": "Сигурни ли сте, че желаете импортирането на архива? Моля, уверете се, че сте избрали правилната опция за импортиране.",
"twoFAVerifyLabel": "Моля, въведете вашия токен код, за да проверите дали 2FA работи:",
"tokenValidSettingsMsg": "Токен кодът е валиден! Вече можете да запазите настройките за 2FA.",
"confirmEnableTwoFAMsg": "Сигурни ли сте, че желаете да активирате 2FA?",
"confirmDisableTwoFAMsg": "Сигурни ли сте, че желаете да изключите 2FA?",
"Settings": "Настройки",
"Dashboard": "Табло",
"New Update": "Налична е актуализация",
"Language": "Език",
"Appearance": "Изглед",
"Theme": "Тема",
"General": "Общи",
"Version": "Версия",
"Check Update On GitHub": "Проверка за актуализация в GitHub",
"List": "Списък",
"Add": "Добави",
"Add New Monitor": "Добави монитор",
"Quick Stats": "Кратка статистика",
"Up": "Достъпен",
"Down": "Недостъпен",
"Pending": "Изчаква",
"Unknown": "Неизвестен",
"Pause": "Пауза",
"Name": "Име",
"Status": "Статус",
"DateTime": "Дата и час",
"Message": "Отговор",
"No important events": "Все още няма събития",
"Resume": "Възобнови",
"Edit": "Редактирай",
"Delete": "Изтрий",
"Current": "Текущ",
"Uptime": "Достъпност",
"Cert Exp.": "Вал. сертификат",
"day": "ден | дни",
"-day": "-дни",
"hour": "час",
"-hour": "-часa",
"Response": "Отговор",
"Ping": "Пинг",
"Monitor Type": "Монитор тип",
"Keyword": "Ключова дума",
"Friendly Name": "Псевдоним",
"URL": "URL Адрес",
"Hostname": "Име на хост",
"Port": "Порт",
"Heartbeat Interval": "Честота на проверка",
"Retries": "Повторни опити",
"Heartbeat Retry Interval": "Честота на повторните опити",
"Advanced": "Разширени",
"Upside Down Mode": "Обърнат режим",
"Max. Redirects": "Макс. брой пренасочвания",
"Accepted Status Codes": "Допустими статус кодове",
"Save": "Запази",
"Notifications": "Известия",
"Not available, please setup.": "Не са налични. Моля, настройте.",
"Setup Notification": "Настрой известие",
"Light": "Светла",
"Dark": "Тъмна",
"Auto": "Автоматично",
"Theme - Heartbeat Bar": "Тема - поле проверки",
"Normal": "Нормално",
"Bottom": "Долу",
"None": "Без",
"Timezone": "Часова зона",
"Search Engine Visibility": "Видимост за търсачки",
"Allow indexing": "Разреши индексиране",
"Discourage search engines from indexing site": "Не позволявай на търсачките да индексират този сайт",
"Change Password": "Промяна на парола",
"Current Password": "Текуща парола",
"New Password": "Нова парола",
"Repeat New Password": "Повторете новата парола",
"Update Password": "Актуализирай паролата",
"Disable Auth": "Изключи удостоверяване",
"Enable Auth": "Активирай удостоверяване",
"disableauth.message1": "Сигурни ли сте, че желаете да <strong>изключите удостоверяването</strong>?",
"disableauth.message2": "Използва се в случаите, когато <strong>има настроен алтернативен метод за удостоверяване</strong> преди Uptime Kuma, например Cloudflare Access, Authelia или друг механизъм за удостоверяване.",
"Please use this option carefully!": "Моля, използвайте с повишено внимание!",
"Logout": "Изход от профила",
"Leave": "Отказ",
"I understand, please disable": "Разбирам. Моля, изключи",
"Confirm": "Потвърдете",
"Yes": "Да",
"No": "Не",
"Username": "Потребител",
"Password": "Парола",
"Remember me": "Запомни ме",
"Login": "Вход",
"No Monitors, please": "Все още няма монитори. Моля,",
"add one": "добавете един.",
"Notification Type": "Тип известие",
"Email": "Имейл",
"Test": "Тест",
"Certificate Info": "Информация за сертификат",
"Resolver Server": "Преобразуващ (DNS) сървър",
"Resource Record Type": "Тип запис",
"Last Result": "Последен резултат",
"Create your admin account": "Създаване на администриращ акаунт",
"Repeat Password": "Повторете паролата",
"Import Backup": "Импорт на архив",
"Export Backup": "Експорт на архив",
"Export": "Експорт",
"Import": "Импорт",
"respTime": "Време за отговор (ms)",
"notAvailableShort": "Няма",
"Default enabled": "Активирано по подразбиране",
"Apply on all existing monitors": "Приложи върху всички съществуващи монитори",
"Create": "Създай",
"Clear Data": "Изтрий данни",
"Events": "Събития",
"Heartbeats": "Проверки",
"Auto Get": "Авт. попълване",
"backupDescription": "Можете да архивирате всички монитори и всички известия в JSON файл.",
"backupDescription2": "PS: Имайте предвид, че данните за история и събития няма да бъдат включени.",
"backupDescription3": "Чувствителни данни, като токен кодове за известия, се съдържат в експортирания файл. Моля, бъдете внимателни с неговото съхранение.",
"alertNoFile": "Моля, изберете файл за импортиране.",
"alertWrongFileType": "Моля, изберете JSON файл.",
"Clear all statistics": "Изтрий цялата статистика",
"Skip existing": "Пропусни съществуващите",
"Overwrite": "Презапиши",
"Options": "Опции",
"Keep both": "Запази двете",
"Verify Token": "Провери токен код",
"Setup 2FA": "Настройка 2FA",
"Enable 2FA": "Активирай 2FA",
"Disable 2FA": "Деактивирай 2FA",
"2FA Settings": "Настройка за 2FA",
"Two Factor Authentication": "Двуфакторно удостоверяване",
"Active": "Активно",
"Inactive": "Неактивно",
"Token": "Токен код",
"Show URI": "Покажи URI",
"Tags": "Етикети",
"Add New below or Select...": "Добавете нов по-долу или изберете…",
"Tag with this name already exist.": "Етикет с това име вече съществува.",
"Tag with this value already exist.": "Етикет с тази стойност вече съществува.",
"color": "цвят",
"value (optional)": "стойност (по желание)",
"Gray": "Сиво",
"Red": "Червено",
"Orange": "Оранжево",
"Green": "Зелено",
"Blue": "Синьо",
"Indigo": "Индиго",
"Purple": "Лилаво",
"Pink": "Розово",
"Search...": "Търси…",
"Avg. Ping": "Ср. пинг",
"Avg. Response": "Ср. отговор",
"Entry Page": "Основна страница",
"statusPageNothing": "Все още няма нищо тук. Моля, добавете група или монитор.",
"No Services": "Няма Услуги",
"All Systems Operational": "Всички услуги са достъпни",
"Partially Degraded Service": "Част от услугите са недостъпни",
"Degraded Service": "Всички услуги са недостъпни",
"Add Group": "Добави група",
"Add a monitor": "Добави монитор",
"Edit Status Page": "Редактиране Статус страница",
"Go to Dashboard": "Към Таблото",
"telegram": "Telegram",
"webhook": "Уеб кука",
"smtp": "Имейл (SMTP)",
"discord": "Discord",
"teams": "Microsoft Teams",
"signal": "Signal",
"gotify": "Gotify",
"slack": "Slack",
"rocket.chat": "Rocket.chat",
"pushover": "Pushover",
"pushy": "Pushy",
"octopush": "Octopush",
"promosms": "PromoSMS",
"lunasea": "LunaSea",
"apprise": "Apprise (Поддържа 50+ услуги за известяване)",
"pushbullet": "Pushbullet",
"line": "Line Messenger",
"mattermost": "Mattermost",
"Status Page": "Статус страница",
"Status Pages": "Статус страници",
"Primary Base URL": "Основен базов URL адрес",
"Push URL": "Генериран Push URL адрес",
"needPushEvery": "Необходимо е да извършвате заявка към този URL адрес на всеки {0} секунди.",
"pushOptionalParams": "Допълнителни, но не задължителни параметри: {0}",
"defaultNotificationName": "Моето {notification} известие ({number})",
"here": "тук",
"Required": "Задължително поле",
"Bot Token": "Бот токен",
"wayToGetTelegramToken": "Можете да получите токен от {0}.",
"Chat ID": "Чат ID",
"supportTelegramChatID": "Поддържа Direct Chat / Group / Channel's Chat ID",
"wayToGetTelegramChatID": "Можете да получите вашето чат ID, като изпратите съобщение на бота, след което е нужно да посетите този URL адрес за да го видите:",
"YOUR BOT TOKEN HERE": "ВАШИЯТ БОТ ТОКЕН ТУК",
"chatIDNotFound": "Чат ID не е намерено. Моля, първо изпратете съобщение до този бот",
"Post URL": "Post URL адрес",
"Content Type": "Тип съдържание",
"webhookJsonDesc": "{0} е подходящ за всички съвременни http сървъри, като например express.js",
"webhookFormDataDesc": "{multipart} е подходящ за PHP, нужно е да анализирате json чрез {decodeFunction}",
"secureOptionNone": "Няма (25) / STARTTLS (587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Игнорирай TLS грешките",
"From Email": "От имейл адрес",
"emailCustomSubject": "Модифициране на тема",
"To Email": "Получател имейл адрес",
"smtpCC": "Явно копие до имейл адрес:",
"smtpBCC": "Скрито копие до имейл адрес:",
"Discord Webhook URL": "Discord URL адрес на уеб кука",
"wayToGetDiscordURL": "Може да създадете, от меню \"Настройки на сървъра\" -> \"Интеграции\" -> \"Уеб куки\" -> \"Нова уеб кука\"",
"Bot Display Name": "Име на бота, което да се показва",
"Prefix Custom Message": "Модифицирано обръщение",
"Hello @everyone is...": "Здравейте, {'@'}everyone е…",
"Webhook URL": "Уеб кука URL адрес",
"wayToGetTeamsURL": "Можете да научите как се създава URL адрес за уеб кука {0}.",
"Number": "Номер",
"Recipients": "Получатели",
"needSignalAPI": "Необходимо е да разполагате със Signal клиент с REST API.",
"wayToCheckSignalURL": "Може да посетите този URL адрес, ако се нуждаете от помощ при настройването:",
"signalImportant": "ВАЖНО: Не може да смесвате \"Групи\" и \"Номера\" в поле \"Получатели\"!",
"Application Token": "Токен код за приложението",
"Server URL": "URL адрес на сървъра",
"Priority": "Приоритет",
"Icon Emoji": "Иконка Емотикон",
"Channel Name": "Канал име",
"Uptime Kuma URL": "Uptime Kuma URL адрес",
"aboutWebhooks": "Повече информация относно уеб куки на: {0}",
"aboutChannelName": "Въведете името на канала в поле {0} \"Канал име\", ако желаете да заобиколите канала от уеб куката. Например: #other-channel",
"aboutKumaURL": "Ако оставите празно полето \"Uptime Kuma URL адрес\", по подразбиране ще се използва GitHub страницата на проекта.",
"emojiCheatSheet": "Подсказки за емотикони: {0}",
"User Key": "Потребителски ключ",
"Device": "Устройство",
"Message Title": "Заглавие на съобщението",
"Notification Sound": "Звуков сигнал",
"More info on:": "Повече информация на: {0}",
"pushoverDesc1": "Приоритет Спешно (2) по подразбиране изчаква 30 секунди между повторните опити и изтича след 1 час.",
"pushoverDesc2": "Ако желаете да изпратите известия до различни устройства, попълнете полето Устройство.",
"SMS Type": "SMS тип",
"octopushTypePremium": "Премиум (Бърз - препоръчителен в случай на тревога)",
"octopushTypeLowCost": "Евтин (Бавен - понякога бива блокиран от оператора)",
"checkPrice": "Тарифни планове на {0}:",
"octopushLegacyHint": "Дали използвате съвместима версия на Octopush (2011-2020) или нова версия?",
"Check octopush prices": "Тарифни планове на octopush {0}.",
"octopushPhoneNumber": "Телефонен номер (в международен формат, например: +33612345678) ",
"octopushSMSSender": "SMS подател Име: 3-11 знака - букви, цифри и интервал (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea ID на устройство",
"Apprise URL": "Apprise URL адрес",
"Example:": "Пример: {0}",
"Read more:": "Научете повече: {0}",
"Status:": "Статус: {0}",
"Read more": "Научете повече",
"appriseInstalled": "Apprise е инсталиран.",
"appriseNotInstalled": "Apprise не е инсталиран. {0}",
"Access Token": "Токен код за достъп",
"Channel access token": "Канал токен код",
"Line Developers Console": "Line - Конзола за разработчици",
"lineDevConsoleTo": "Line - Конзола за разработчици - {0}",
"Basic Settings": "Основни настройки",
"User ID": "Потребител ID",
"Messaging API": "API за съобщаване",
"wayToGetLineChannelToken": "Необходимо е първо да посетите {0}, за да създадете (Messaging API) за доставчик и канал, след което може да вземете токен кода за канал и потребителско ID от споменатите по-горе елементи на менюто.",
"Icon URL": "URL адрес за иконка",
"aboutIconURL": "Може да предоставите линк към картинка в поле \"URL Адрес за иконка\" за да отмените картинката на профила по подразбиране. Няма да се използва, ако вече сте настроили емотикон.",
"aboutMattermostChannelName": "Може да замените канала по подразбиране, към който публикува уеб куката, като въведете името на канала в полето \"Канал име\". Трябва да бъде активирано в настройките за уеб кука на Mattermost. Например: #other-channel",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO - евтин, но бавен. Често е претоварен. Само за получатели от Полша.",
"promosmsTypeFlash": "SMS FLASH - Съобщението автоматично се показва на устройството на получателя. Само за получатели от Полша.",
"promosmsTypeFull": "SMS FULL - Високо ниво на SMS услуга. Може да използвате Вашето име като подател (Необходимо е първо да регистрирате името). Надежден метод за съобщения тип тревога.",
"promosmsTypeSpeed": "SMS SPEED - Най-висок приоритет в системата. Много бърза и надеждна, но същевременно скъпа услуга. (Около два пъти по-висока цена в сравнение с SMS FULL).",
"promosmsPhoneNumber": "Телефонен номер (за получатели от Полша, може да пропуснете въвеждането на код за населено място)",
"promosmsSMSSender": "SMS Подател име: Предварително регистрирано име или някое от имената по подразбиране: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu URL адрес за уеб кука",
"matrixHomeserverURL": "Сървър URL адрес (започва с http(s):// и порт по желание)",
"Internal Room Id": "ID на вътрешна стая",
"matrixDesc1": "Може да намерите \"ID на вътрешна стая\" в разширените настройки на стаята във вашия Matrix клиент. Примерен изглед: !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Силно препоръчваме да създадете НОВ потребител и да НЕ използвате токен кодът на вашия личен Matrix потребител, т.к. той позволява пълен достъп до вашия акаунт и всички стаи към които сте се присъединили. Вместо това създайте нов потребител и го поканете само в стаята, където желаете да получавате известията. Токен код за достъп ще получите изпълнявайки {0}",
"Method": "Метод",
"Body": "Съобщение",
"Headers": "Хедъри",
"PushUrl": "Push URL адрес",
"HeadersInvalidFormat": "Заявените хедъри не са валидни JSON: ",
"BodyInvalidFormat": "Заявеното съобщение не е валиден JSON: ",
"Monitor History": "История на мониторите",
"clearDataOlderThan": "Ще се съхранява за {0} дни.",
"records": "записа",
"One record": "Един запис",
"steamApiKeyDescription": "За да мониторирате Steam Gameserver се нуждаете от Steam Web-API ключ. Може да регистрирате Вашия API ключ тук: ",
"clicksendsms": "ClickSend SMS",
"apiCredentials": "API удостоверяване",
"PasswordsDoNotMatch": "Паролите не съвпадат.",
"Current User": "Текущ потребител",
"recent": "Скорошни",
"shrinkDatabaseDescription": "Инициира \"VACUUM\" за \"SQLite\" база данни. Ако Вашата база данни е създадена след версия 1.10.0, \"AUTO_VACUUM\" функцията е активна и това действие не е нужно.",
"Done": "Готово",
"Info": "Информация",
"Security": "Сигурност",
"Steam API Key": "Steam API ключ",
"Shrink Database": "Редуцирай базата данни",
"Pick a RR-Type...": "Изберете вида на ресурсния запис за мониториране…",
"Pick Accepted Status Codes...": "Изберете статус кодове, които да се считат за успешен отговор…",
"Default": "По подразбиране",
"HTTP Options": "HTTP Опции",
"Create Incident": "Създаване на инцидент",
"Title": "Заглавие",
"Content": "Съдържание",
"Style": "Стил",
"info": "информация",
"warning": "предупреждение",
"danger": "опасност",
"primary": "основен",
"light": "светъл",
"dark": "тъмен",
"Post": "Публикувай",
"Please input title and content": "Моля, въведете заглавие и съдържание",
"Created": "Създаден",
"Last Updated": "Последно обновен",
"Unpin": "Откачи",
"Switch to Light Theme": "Превключи към светла тема",
"Switch to Dark Theme": "Превключи към тъмна тема",
"Show Tags": "Покажи етикети",
"Hide Tags": "Скрий етикети",
"Description": "Описание",
"No monitors available.": "Няма налични монитори.",
"Add one": "Добави един",
"No Monitors": "Няма монитори",
"Untitled Group": "Група без заглавие",
"Services": "Услуги",
"Discard": "Отмени",
"Cancel": "Отмени",
"Powered by": "Създадено чрез",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Потребителско име (вкл. webapi_ prefix)",
"serwersmsAPIPassword": "API Парола",
"serwersmsPhoneNumber": "Телефон номер",
"serwersmsSenderName": "SMS Подател име (регистриран през клиентския портал)",
"stackfield": "Stackfield",
"smtpDkimSettings": "DKIM Настройки",
"smtpDkimDesc": "Моля, вижте {0} на Nodemailer DKIM за инструкции.",
"documentation": "документацията",
"smtpDkimDomain": "Домейн",
"smtpDkimKeySelector": "Селектор на ключ",
"smtpDkimPrivateKey": "Частен ключ",
"smtpDkimHashAlgo": "Хеш алгоритъм (по желание)",
"smtpDkimheaderFieldNames": "Хедър ключове за подписване (по желание)",
"smtpDkimskipFields": "Хедър ключове, които да не се подписват (по желание)",
"PushByTechulus": "Push от Techulus",
"GoogleChat": "Google Chat (Само за работното пространство на Google)",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "Крайна точка на API",
"alertaEnvironment": "Среда",
"alertaApiKey": "API Ключ",
"alertaAlertState": "Състояние на тревога",
"alertaRecoverState": "Състояние на възстановяване",
"deleteStatusPageMsg": "Сигурни ли сте, че желаете да изтриете тази статус страница?",
"Proxies": "Прокси",
"default": "По подразбиране",
"enabled": "Активирано",
"setAsDefault": "Зададен по подразбиране",
"deleteProxyMsg": "Сигурни ли сте, че желаете да изтриете това прокси за всички монитори?",
"proxyDescription": "За да функционират трябва да бъдат зададени към монитор.",
"enableProxyDescription": "Това прокси няма да има ефект върху заявките за мониторинг, докато не бъде активирано. Може да контролирате временното деактивиране на проксито от всички монитори чрез статуса на активиране.",
"setAsDefaultProxyDescription": "Това прокси ще бъде активно по подразбиране за новите монитори. Може да го изключите по отделно за всеки един монитор.",
"Certificate Chain": "Верига на сертификата",
"Valid": "Валиден",
"Invalid": "Невалиден",
"AccessKeyId": "ID на ключ за достъп",
"SecretAccessKey": "Тайна на ключа за достъп",
"PhoneNumbers": "Телефонни номера",
"TemplateCode": "Шаблон Код",
"SignName": "Знак име",
"Sms template must contain parameters: ": "SMS шаблонът трябва да съдържа следните параметри: ",
"Bark Endpoint": "Bark крайна точка",
"WebHookUrl": "URL адрес на уеб кука",
"SecretKey": "Таен ключ",
"For safety, must use secret key": "За сигурност, трябва да се използва таен ключ",
"Device Token": "Токен за устройство",
"Platform": "Платформа",
"iOS": "iOS",
"Android": "Android",
"Huawei": "Huawei",
"High": "Висок",
"Retry": "Повтори",
"Topic": "Тема",
"WeCom Bot Key": "WeCom бот ключ",
"Setup Proxy": "Настрой прокси",
"Proxy Protocol": "Прокси протокол",
"Proxy Server": "Прокси сървър",
"Proxy server has authentication": "Прокси сървърът е с удостоверяване",
"User": "Потребител",
"Installed": "Инсталиран",
"Not installed": "Не е инсталиран",
"Running": "Работи",
"Not running": "Не работи",
"Remove Token": "Премахни токен",
"Start": "Стартирай",
"Stop": "Спри",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "Добави нова статус страница",
"Slug": "Слъг",
"Accept characters:": "Приеми символи:",
"startOrEndWithOnly": "Започва или завършва само с {0}",
"No consecutive dashes": "Без последователни тирета",
"Next": "Следващ",
"The slug is already taken. Please choose another slug.": "Този слъг вече се използва. Моля изберете друг.",
"No Proxy": "Без прокси",
"Authentication": "Удостоверяване",
"HTTP Basic Auth": "HTTP основно удостоверяване",
"New Status Page": "Нова статус страница",
"Page Not Found": "Страницата не е открита",
"Reverse Proxy": "Ревърс прокси",
"Backup": "Архивиране",
"About": "Относно",
"wayToGetCloudflaredURL": "(Свалете \"cloudflared\" от {0})",
"cloudflareWebsite": "Cloudflare уеб сайт",
"Message:": "Съобщение:",
"Don't know how to get the token? Please read the guide:": "Не знаете как да вземете токен? Моля, прочетете ръководството:",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Текущата връзка може да прекъсне ако в момента сте свързани чрез \"Cloudflare Tunnel\". Сигурни ли сте, че желаете да го спрете? Въведете Вашата текуща парола за да потвърдите.",
"Other Software": "Друг софтуер",
"For example: nginx, Apache and Traefik.": "Например: Nginx, Apache и Traefik.",
"Please read": "Моля, прочетете",
"Subject:": "Тема:",
"Valid To:": "Валиден до:",
"Days Remaining:": "Оставащи дни:",
"Issuer:": "Издател:",
"Fingerprint:": "Пръстов отпечатък:",
"No status pages": "Няма статус страници",
"topic": "Тема",
"topicExplanation": "MQTT тема за мониториране",
"successMessage": "Съобщение при успех",
"successMessageExplanation": "MQTT съобщение, което ще бъде считано за успех",
"Customize": "Персонализирай",
"Custom Footer": "Персонализиран долен колонтитул",
"Custom CSS": "Потребителски CSS",
"Domain Name Expiry Notification": "Известие при изтичащ домейн",
"Proxy": "Прокси",
"Date Created": "Дата на създаване",
"onebotHttpAddress": "OneBot HTTP адрес",
"onebotMessageType": "OneBot тип съобщение",
"onebotGroupMessage": "Група",
"onebotPrivateMessage": "Лично",
"onebotUserOrGroupId": "Група/Потребител ID",
"onebotSafetyTips": "С цел безопасност трябва да зададете токен код за достъп",
"PushDeer Key": "PushDeer ключ",
"Footer Text": "Текст долен колонтитул",
"Show Powered By": "Покажи \"Създадено чрез\"",
"Domain Names": "Домейни",
"signedInDisp": "Вписан като {0}",
"signedInDispDisabled": "Удостоверяването е изключено.",
"Certificate Expiry Notification": "Известие за изтичане валидността на сертификата",
"API Username": "API Потребител",
"API Key": "API Ключ",
"Recipient Number": "Номер на получателя",
"From Name/Number": "От Име/Номер",
"Leave blank to use a shared sender number.": "Оставете празно, за да използвате споделен номер на подател.",
"Octopush API Version": "Octopush API версия",
"Legacy Octopush-DM": "Octopush-DM старa версия",
"endpoint": "крайна точка",
"octopushAPIKey": "\"API ключ\" от HTTP API удостоверяване в контролния панел",
"octopushLogin": "\"Вписване\" от HTTP API удостоверяване в контролния панел",
"promosmsLogin": "API Потребителско име",
"promosmsPassword": "API Парола",
"pushoversounds pushover": "Pushover (по подразбиране)",
"pushoversounds bike": "Велосипед",
"pushoversounds bugle": "Тромпет",
"pushoversounds cashregister": "Касов апарат",
"pushoversounds classical": "Класическа музика",
"pushoversounds cosmic": "Космически",
"pushoversounds falling": "Падащ",
"pushoversounds gamelan": "Игра в мрежа",
"pushoversounds incoming": "Входящ",
"pushoversounds intermission": "Прекъсване",
"pushoversounds magic": "Магия",
"pushoversounds mechanical": "Механичен",
"pushoversounds pianobar": "Пиано бар",
"pushoversounds siren": "Сирена",
"pushoversounds spacealarm": "Космическа аларма",
"pushoversounds tugboat": "Буксир",
"pushoversounds alien": "Извънземна аларма (дълъг)",
"pushoversounds climb": "Изкачване (дълъг)",
"pushoversounds persistent": "Постоянен (дълъг)",
"pushoversounds echo": "Pushover ехо (дълъг)",
"pushoversounds updown": "Горе долу (дълъг)",
"pushoversounds vibrate": "Само вибрация",
"pushoversounds none": "Без (тих)",
"pushyAPIKey": "Таен API ключ",
"pushyToken": "Токен на устройство",
"Show update if available": "Покажи актуализация, ако е налична",
"Also check beta release": "Проверявай и за бета версии",
"Using a Reverse Proxy?": "Използвате ревърс прокси?",
"Check how to config it for WebSocket": "Проверете как да го конфигурирате за WebSocket",
"Steam Game Server": "Steam Game сървър",
"Most likely causes:": "Най-вероятни причини:",
"The resource is no longer available.": "Ресурсът вече не е наличен.",
"There might be a typing error in the address.": "Възможно е да е допусната грешка при изписването на адреса.",
"What you can try:": "Може да опитате:",
"Retype the address.": "Повторно въвеждане на адреса.",
"Go back to the previous page.": "Да се върнете към предишната страница.",
"Coming Soon": "Очаквайте скоро",
"wayToGetClickSendSMSToken": "Може да получите API потребителско име и API ключ от {0} .",
"dnsPortDescription": "DNS порт на сървъра. По подразбиране е 53, но може да бъде променен по всяко време.",
"error": "грешка",
"critical": "критично",
"wayToGetPagerDutyKey": "Може да го получите като посетите Service -> Service Directory -> (Select a service) -> Integrations -> Add integration. Тук трябва да потърсите \"Events API V2\". Повече информация {0}",
"Integration Key": "Ключ за интегриране",
"Integration URL": "URL адрес за интеграция",
"Auto resolve or acknowledged": "Автоматично разрешаване или потвърждаване",
"do nothing": "не прави нищо",
"auto acknowledged": "автоматично потвърждаване",
"auto resolve": "автоматично разрешаване",
"Connection String": "Стринг за връзка",
"Query": "Заявка",
"settingsCertificateExpiry": "Изтичане валидността на TLS сертификата",
"certificationExpiryDescription": "HTTPS мониторите ще задействат известие, ако е наличен изтичащ TLS сертификат, през следващите:",
"ntfy Topic": "ntfy Тема",
"Domain": "Домейн",
"Workstation": "Работна станция",
"disableCloudflaredNoAuthMsg": "Тъй като сте в режим \"No Auth mode\", парола не се изисква.",
"wayToGetLineNotifyToken": "Може да получите токен код за достъп от {0}",
"resendEveryXTimes": "Изпращай повторно на всеки {0} пъти",
"resendDisabled": "Повторното изпращане е изключено",
"Resend Notification if Down X times consequently": "Повторно изпращане на известие, ако е недостъпен X пъти последователно",
"Bark Group": "Bark група",
"Bark Sound": "Bark звук",
"HTTP Headers": "HTTP хедъри",
"Trust Proxy": "Доверено Proxy",
"HomeAssistant": "Home Assistant",
"RadiusSecret": "Radius таен код",
"RadiusSecretDescription": "Споделен таен код между клиент и сървър",
"RadiusCalledStationId": "Повиквана станция ID",
"RadiusCalledStationIdDescription": "Идентификатор на повикваното устройство",
"RadiusCallingStationId": "Повикваща станция ID",
"RadiusCallingStationIdDescription": "Идентификатор на повикващото устройство",
"Setup Docker Host": "Настройка на Docker хост",
"Connection Type": "Тип свързване",
"Docker Daemon": "Docker демон",
"deleteDockerHostMsg": "Сигурни ли сте, че желаете да изтриете този Docker хост за всички монитори?",
"socket": "Сокет",
"tcp": "TCP / HTTP",
"Docker Container": "Docker контейнер",
"Container Name / ID": "Име на контейнер / ID",
"Docker Host": "Docker хост",
"Docker Hosts": "Docker хостове",
"trustProxyDescription": "Доверяване на 'X-Forwarded-*' хедърите. В случай, че желаете да получавате реалния IP адрес на клиента и Uptime Kuma е зад системи като Nginx или Apache, трябва да разрешите тази опция.",
"Examples": "Примери",
"Home Assistant URL": "Home Assistant URL адрес",
"Long-Lived Access Token": "Long-Lived токен за достъп",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token можете да създадете, като кликнете върху името на профила си (долу ляво) и превъртите до най-долу, след това кликнете върху Създаване на токен. ",
"Notification Service": "Услуга за известяване",
"default: notify all devices": "по подразбиране: извести всички устройства",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Списък с услугите за известяване може да бъде намерен в Home Assistant под \"Developer Tools > Services\", там потърсете \"notification\", за да намерите името на вашето устройство/телефон.",
"Automations can optionally be triggered in Home Assistant:": "Автоматизациите могат да се задействат при нужда в Home Assistant:",
"Trigger type:": "Задействане тип:",
"Event type:": "Събитие тип:",
"Event data:": "Събитие данни:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "След което изберете действие, например да превключите сцената, където RGB светлината е червена.",
"Frontend Version": "Фронтенд версия",
"Frontend Version do not match backend version!": "Фронтенд версията не съвпада с Бекенд версията!",
"Base URL": "Базов URL адрес",
"goAlertInfo": "GoAlert е приложение с отворен код за планиране на повиквания, автоматизирани ескалации и известия (като SMS или гласови повиквания). Автоматично ангажирайте точния човек, по точния начин и в точното време! {0}",
"goAlertIntegrationKeyInfo": "Вземете общ API интеграционен ключ за услугата във формат \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" обикновено стойността на параметъра token на копирания URL адрес.",
"goAlert": "GoAlert",
"backupOutdatedWarning": "Отпаднала: Тъй като са добавени много функции, тази опция за архивиране не е достатъчно поддържана и не може да генерира или възстанови пълен архив.",
"backupRecommend": "Вместо това моля, архивирайте директно дяла или папката (./data/).",
"Maintenance": "Поддръжка",
"statusMaintenance": "Поддръжка",
"Schedule maintenance": "Планиране на поддръжка",
"Affected Monitors": "Засегнати монитори",
"Pick Affected Monitors...": "Изберете засегнатите монитори…",
"Start of maintenance": "Стартирай поддръжка",
"All Status Pages": "Всички статус страници",
"Select status pages...": "Изберете статус страници…",
"recurringIntervalMessage": "Изпълнявай ежедневно | Изпълнявай всеки {0} дни",
"affectedMonitorsDescription": "Изберете монитори, засегнати от текущата поддръжка",
"affectedStatusPages": "Покажи това съобщение за поддръжка на избрани статус страници",
"atLeastOneMonitor": "Изберете поне един засегнат монитор",
"deleteMaintenanceMsg": "Сигурни ли сте, че желаете да изтриете тази поддръжка?",
"Optional": "По желание",
"squadcast": "Squadcast",
"SendKey": "SendKey",
"SMSManager API Docs": "SMSManager API Документация ",
"Gateway Type": "Тип на шлюза",
"SMSManager": "SMSManager",
"You can divide numbers with": "Може да разделяте числата с",
"or": "или",
"recurringInterval": "Интервал",
"Recurring": "Повтаряне",
"strategyManual": "Активен/Неактивен ръчно",
"warningTimezone": "Използва се часовата зона на сървъра",
"weekdayShortMon": "Пон",
"weekdayShortTue": "Вт",
"weekdayShortWed": "Ср",
"weekdayShortThu": "Чет",
"weekdayShortFri": "Пет",
"weekdayShortSat": "Съб",
"weekdayShortSun": "Нед",
"dayOfWeek": "Ден",
"dayOfMonth": "Дата",
"lastDay": "Последен ден",
"lastDay1": "Последен ден от месеца",
"lastDay2": "2-ри последен ден на месеца",
"lastDay3": "3-ти последен ден на месеца",
"lastDay4": "4-ти последен ден на месеца",
"No Maintenance": "Няма поддръжка",
"pauseMaintenanceMsg": "Сигурни ли сте, че желаете да направите пауза?",
"maintenanceStatus-under-maintenance": "В режим поддръжка",
"maintenanceStatus-inactive": "Неактивна",
"maintenanceStatus-scheduled": "Планирана",
"maintenanceStatus-ended": "Приключена",
"maintenanceStatus-unknown": "Неизвестна",
"Display Timezone": "Покажи часова зона",
"Server Timezone": "Часова зона на сървъра",
"statusPageMaintenanceEndDate": "Край",
"enableGRPCTls": "Разреши изпращане на gRPC заявка с TLS връзка",
"grpcMethodDescription": "Името на метода се форматира в \"cammelCase\", например sayHello, check, и т.н.",
"smseagle": "SMSEagle",
"smseagleTo": "Тел. номер(а)",
"smseagleGroup": "Име на група/и от тел. указател",
"smseagleContact": "Име(на) от тел. указател",
"smseagleRecipientType": "Получател тип",
"smseagleRecipient": "Получател(и) (при повече от един разделете със запетая)",
"smseagleToken": "API токен за достъп",
"smseagleUrl": "Вашият SMSEagle URL на устройството",
"smseagleEncoding": "Изпрати като Unicode",
"smseaglePriority": "Приоритет на съобщението (0-9, по подразбиране = 0)",
"IconUrl": "Икона URL адрес",
"webhookAdditionalHeadersTitle": "Допълнителни хедъри",
"webhookAdditionalHeadersDesc": "Задава допълнителни хедъри, изпратени с уеб куката.",
"Enable DNS Cache": "Активирай DNS кеширане",
"Enable": "Активирай",
"Disable": "Деактивирай",
"dnsCacheDescription": "Възможно е да не работи в IPv6 среда - деактивирайте, ако срещнете проблеми.",
"Single Maintenance Window": "Единичен времеви интервал за поддръжка",
"Maintenance Time Window of a Day": "Времеви интервал от деня за поддръжка",
"Effective Date Range": "Интервал от дни на влизане в сила",
"Schedule Maintenance": "Планирай поддръжка",
"Date and Time": "Дата и час",
"DateTime Range": "Изтрий времеви интервал",
"Strategy": "Стратегия",
"Free Mobile User Identifier": "Free Mobile потребителски идентификатор",
"Free Mobile API Key": "Free Mobile API ключ",
"Enable TLS": "Активирай TLS",
"Proto Service Name": "Proto име на услугата",
"Proto Method": "Proto метод",
"Proto Content": "Proto съдържание",
"Economy": "Икономичен",
"Lowcost": "Евтин",
"high": "висок",
"General Monitor Type": "Общ тип монитор",
"Passive Monitor Type": "Пасивет тип монитор",
"Specific Monitor Type": "Специфичен тип монитор",
"ZohoCliq": "ZohoCliq",
"wayToGetZohoCliqURL": "Можете да научите как се създава URL адрес за уеб кука {0}.",
"Kook": "Kook",
"wayToGetKookBotToken": "Създайте приложение и вземете вашия бот токен на {0}",
"wayToGetKookGuildID": "Превключете в 'Developer Mode' в 'Kook' настройките, след което десен клик върху 'guild' за да вземете неговото 'ID'",
"Guild ID": "Guild ID",
"Help": "Помощ",
"Game": "игрови",
"Custom": "Потребителски",
"infiniteRetention": "Задайте стойност 0 за безкрайно съхранение.",
"Monitor": "Монитор | Монитори",
"dataRetentionTimeError": "Периодът на съхранение трябва да е 0 или по-голям",
"confirmDeleteTagMsg": "Сигурни ли сте, че желаете да изтриете този таг? Мониторите, свързани с него, няма да бъдат изтрити.",
"promosmsAllowLongSMS": "Позволи дълъг SMS",
"Packet Size": "Размер на пакет",
"Custom Monitor Type": "Потребителски тип монитор",
"loadingError": "Данните не могат да бъдат изтеглени. Моля, опитайте отново по-късно.",
"plugin": "Плъгин | Плъгини",
"install": "Инсталирай",
"installing": "Инсталиране",
"uninstall": "Деинсталирай",
"uninstalling": "Деинсталиране",
"confirmUninstallPlugin": "Сигурни ли сте, че желаете да деинсталирате този плъгин?"
}

695
src/lang/cs-CZ.json Normal file
View File

@@ -0,0 +1,695 @@
{
"languageName": "Czech",
"checkEverySecond": "Kontrolovat každých {0} sekund",
"retryCheckEverySecond": "Opakovat každých {0} sekund",
"resendEveryXTimes": "Znovu zaslat {0}krát",
"resendDisabled": "Opakované zasílání je vypnuté",
"retriesDescription": "Maximální počet pokusů před označením služby jako nedostupné a odesláním oznámení",
"ignoreTLSError": "Ignorovat TLS/SSL chyby na HTTPS stránkách",
"upsideDownModeDescription": "Pomocí této možnosti změníte způsob vyhodnocování stavu. Pokud je služba dosažitelná, je NEDOSTUPNÁ.",
"maxRedirectDescription": "Maximální počet přesměrování, která se mají následovat. Nastavením hodnoty 0 zakážete přesměrování.",
"enableGRPCTls": "Umožnit odeslání gRPC žádosti během TLS spojení",
"grpcMethodDescription": "Název metody se převede do cammelCase formátu jako je sayHello, check, aj.",
"acceptedStatusCodesDescription": "Vyberte stavové kódy, které jsou považovány za úspěšnou odpověď.",
"Maintenance": "Údržba",
"statusMaintenance": "Údržba",
"Schedule maintenance": "Naplánovat údržbu",
"Affected Monitors": "Dotčené dohledy",
"Pick Affected Monitors...": "Vyberte dotčené dohledy…",
"Start of maintenance": "Zahájit údržbu",
"All Status Pages": "Všechny stavové stránky",
"Select status pages...": "Vyberte stavovou stránku…",
"recurringIntervalMessage": "Spustit jednou každý den | Spustit jednou každých {0} dní",
"affectedMonitorsDescription": "Vyberte dohledy, které budou ovlivněny touto údržbou",
"affectedStatusPages": "Zobrazit tuto zprávu o údržbě na vybraných stavových stránkách",
"atLeastOneMonitor": "Vyberte alespoň jeden dotčený dohled",
"passwordNotMatchMsg": "Hesla se neshodují.",
"notificationDescription": "Pro zajištění funkčnosti oznámení je nutné jej přiřadit dohledu.",
"keywordDescription": "Vyhledat klíčové slovo v prosté odpovědi HTML nebo JSON. Při hledání se rozlišuje velikost písmen.",
"pauseDashboardHome": "Pozastaveno",
"deleteMonitorMsg": "Opravdu chcete odstranit tento dohled?",
"deleteMaintenanceMsg": "Opravdu chcete odstranit tuto údržbu?",
"deleteNotificationMsg": "Opravdu chcete odstranit toto oznámení pro všechny dohledy?",
"dnsPortDescription": "Port DNS serveru. Standardně běží na portu 53. V případě potřeby jej můžete kdykoli změnit.",
"resolverserverDescription": "Cloudflare je výchozí server. V případě potřeby můžete Resolver server kdykoli změnit.",
"rrtypeDescription": "Vyberte typ záznamu o prostředku, který chcete monitorovat",
"pauseMonitorMsg": "Opravdu chcete dohled pozastavit?",
"enableDefaultNotificationDescription": "Toto oznámení bude standardně aktivní pro nové dohledy. V případě potřeby můžete oznámení stále zakázat na úrovni jednotlivých dohledů.",
"clearEventsMsg": "Opravdu chcete odstranit všechny události pro tento dohled?",
"clearHeartbeatsMsg": "Opravdu chcete odstranit všechny heartbeaty pro tento dohled?",
"confirmClearStatisticsMsg": "Opravdu chcete smazat VŠECHNY statistiky?",
"importHandleDescription": "Možnost 'Přeskočit existující' vyberte v případě, že chcete přeskočit všechny dohledy nebo oznámení se stejným názvem. Vybráním možnosti 'Přepsat' dojde k odstranění všech existujících dohledů a oznámení.",
"confirmImportMsg": "Opravdu chcete importovat zálohu? Prosím ověřte, zda jste vybrali správnou možnost importu.",
"twoFAVerifyLabel": "Prosím, zadejte svůj token pro ověření 2FA:",
"tokenValidSettingsMsg": "Token je platný! Nyní můžete uložit nastavení 2FA.",
"confirmEnableTwoFAMsg": "Opravdu chcete zapnout 2FA?",
"confirmDisableTwoFAMsg": "Opravdu chcete deaktivovat 2FA?",
"Settings": "Nastavení",
"Dashboard": "Nástěnka",
"New Update": "Nová aktualizace",
"Language": "Jazyk",
"Appearance": "Vzhled",
"Theme": "Motiv",
"General": "Obecné",
"Primary Base URL": "Primární URL adresa",
"Version": "Verze",
"Check Update On GitHub": "Zkontrolovat aktualizace na GitHubu",
"List": "Seznam",
"Add": "Přidat",
"Add New Monitor": "Přidat nový dohled",
"Quick Stats": "Rychlý přehled",
"Up": "Běží",
"Down": "Nedostupný",
"Pending": "Čekám",
"Unknown": "Neznámý",
"Pause": "Pauza",
"Name": "Název",
"Status": "Stav",
"DateTime": "Časové razítko",
"Message": "Zpráva",
"No important events": "Žádné důležité události",
"Resume": "Pokračovat",
"Edit": "Změnit",
"Delete": "Vymazat",
"Current": "Aktuální",
"Uptime": "Doba provozu",
"Cert Exp.": "Platnost certifikátu",
"Monitor": "Dohled | Dohledy",
"day": "den | dny/í",
"-day": "-dní",
"hour": "hodina",
"-hour": "-hodin",
"Response": "Odpověď",
"Ping": "Ping",
"Monitor Type": "Typ dohledu",
"Keyword": "Klíčové slovo",
"Friendly Name": "Obecný název",
"URL": "URL",
"Hostname": "Adresa serveru",
"Port": "Port",
"Heartbeat Interval": "Heartbeat interval",
"Retries": "Počet pokusů",
"Heartbeat Retry Interval": "Interval opakování heartbeatu",
"Resend Notification if Down X times consequently": "Znovu zaslat oznámení, pokud je služba nedostupná Xkrát za sebou",
"Advanced": "Rozšířené",
"Upside Down Mode": "Inverzní režim",
"Max. Redirects": "Max. přesměrování",
"Accepted Status Codes": "Akceptované stavové kódy",
"Push URL": "Push URL",
"needPushEvery": "Tuto URL adresu byste měli volat každých {0} sekund.",
"pushOptionalParams": "Volitelné parametry: {0}",
"Save": "Uložit",
"Notifications": "Oznámení",
"Not available, please setup.": "Není k dispozici, prosím nastavte.",
"Setup Notification": "Nastavení oznámení",
"Light": "Světlý",
"Dark": "Tmavý",
"Auto": "Automaticky",
"Theme - Heartbeat Bar": "Motiv Heartbeat panel",
"Normal": "Normální",
"Bottom": "Dole",
"None": "Žádné",
"Timezone": "Časové pásmo",
"Search Engine Visibility": "Viditelnost pro vyhledávače",
"Allow indexing": "Povolit indexování",
"Discourage search engines from indexing site": "Zabránit vyhledávačům v indexování stránky",
"Change Password": "Změnit heslo",
"Current Password": "Aktuální heslo",
"New Password": "Nové heslo",
"Repeat New Password": "Znovu zadat nové heslo",
"Update Password": "Aktualizovat heslo",
"Disable Auth": "Deaktivovat ověřování",
"Enable Auth": "Povolit ověřování",
"disableauth.message1": "Opravdu chcete <strong>deaktivovat autentifikaci</strong>?",
"disableauth.message2": "Tato možnost je určena pro případy, kdy <strong>máte autentifikaci zajištěnou třetí stranou</strong> ještě před přístupem do Uptime Kuma, například prostřednictvím Cloudflare Access.",
"Please use this option carefully!": "Používejte ji prosím s rozmyslem!",
"Logout": "Odhlásit",
"Leave": "Odejít",
"I understand, please disable": "Rozumím, chci ji deaktivovat",
"Confirm": "Potvrzení",
"Yes": "Ano",
"No": "Ne",
"Username": "Uživatelské jméno",
"Password": "Heslo",
"Remember me": "Zapamatovat si mě",
"Login": "Přihlášení",
"No Monitors, please": "Žádné dohledy, prosím",
"add one": "přidat jeden",
"Notification Type": "Typ oznámení",
"Email": "E-mail",
"Test": "Test",
"Certificate Info": "Informace o certifikátu",
"Resolver Server": "Server Resolveru",
"Resource Record Type": "Typ záznamu o prostředku",
"Last Result": "Poslední výsledek",
"Create your admin account": "Vytvořit účet administrátora",
"Repeat Password": "Znovu zadat heslo",
"Import Backup": "Importovat zálohu",
"Export Backup": "Exportovat zálohu",
"Export": "Exportovat",
"Import": "Importovat",
"respTime": "Doba odezvy (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Standardně povoleno",
"Apply on all existing monitors": "Použít pro všechny existující dohledy",
"Create": "Vytvořit",
"Clear Data": "Vymazat data",
"Events": "Události",
"Heartbeats": "Heartbeaty",
"Auto Get": "Získat automaticky",
"backupDescription": "Všechny dohledy a oznámení můžete zálohovat do souboru ve formátu JSON.",
"backupDescription2": "Poznámka: Nezahrnuje historii a data událostí.",
"backupDescription3": "Součástí exportovaného souboru jsou citlivá data jako tokeny oznámení; export si prosím bezpečně uložte.",
"alertNoFile": "Vyberte soubor, který chcete importovat.",
"alertWrongFileType": "Vyberte soubor ve formátu JSON.",
"Clear all statistics": "Vymazat všechny statistiky",
"Skip existing": "Přeskočit existující",
"Overwrite": "Přepsat",
"Options": "Možnosti",
"Keep both": "Ponechat obojí",
"Verify Token": "Ověřit token",
"Setup 2FA": "Nastavení 2FA",
"Enable 2FA": "Povolit 2FA",
"Disable 2FA": "Deaktivovat 2FA",
"2FA Settings": "Nastavení 2FA",
"Two Factor Authentication": "Dvoufaktorová autentifikace",
"Active": "Zapnuto",
"Inactive": "Neaktivní",
"Token": "Token",
"Show URI": "Zobrazit URI",
"Tags": "Štítky",
"Add New below or Select...": "Níže přidejte nový nebo vyberte existující…",
"Tag with this name already exist.": "Štítek s tímto názvem již existuje.",
"Tag with this value already exist.": "Štítek touto hodnotou již existuje.",
"color": "barva",
"value (optional)": "hodnota (volitelné)",
"Gray": "Šedá",
"Red": "Červená",
"Orange": "Oranžová",
"Green": "Zelená",
"Blue": "Modrá",
"Indigo": "Indigo",
"Purple": "Purpurová",
"Pink": "Růžová",
"Custom": "Vlastní",
"Search...": "Hledat…",
"Avg. Ping": "Průměr Ping",
"Avg. Response": "Průměr Odpověď",
"Entry Page": "Vstupní stránka",
"statusPageNothing": "Nic tady není, přidejte prosím skupinu nebo dohled.",
"No Services": "Žádné služby",
"All Systems Operational": "Všechny systémy běží",
"Partially Degraded Service": "Částečně zhoršená služba",
"Degraded Service": "Zhoršená služba",
"Add Group": "Přidat skupinu",
"Add a monitor": "Přidání dohledu",
"Edit Status Page": "Upravit stavovou stránku",
"Go to Dashboard": "Přejít na nástěnku",
"Status Page": "Stavová stránka",
"Status Pages": "Stavová stránka",
"defaultNotificationName": "Moje {notification} upozornění ({číslo})",
"here": "sem",
"Required": "Vyžadováno",
"telegram": "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Token robota",
"wayToGetTelegramToken": "Token můžete získat od {0}.",
"Chat ID": "ID chatu",
"supportTelegramChatID": "Podpora přímého chatu / skupiny / ID chatu kanálu",
"wayToGetTelegramChatID": "ID chatu můžete získat tak, že robotovi zašlete zprávu a přejdete na tuto adresu URL, kde zobrazíte chat_id:",
"YOUR BOT TOKEN HERE": "SEM ZADEJTE TOKEN VAŠEHO CHATBOTA",
"chatIDNotFound": "ID chatu nebylo nalezeno; nejprve tomuto robotovi zašlete zprávu",
"webhook": "Webhook",
"Post URL": "URL adresa příspěvku",
"Content Type": "Typ obsahu",
"webhookJsonDesc": "{0} je vhodný pro všechny moderní servery HTTP, jako je Express.js",
"webhookFormDataDesc": "{multipart} je vhodné pro PHP. JSON bude nutné analyzovat prostřednictvím {decodeFunction}",
"webhookAdditionalHeadersTitle": "Dodatečné hlavičky",
"webhookAdditionalHeadersDesc": "Nastavte dodatečné hlavičky, které se odešlou společně s webhookem.",
"smtp": "E-mail (SMTP)",
"secureOptionNone": "Žádné / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Ignorovat chybu TLS",
"From Email": "Odesílatel",
"emailCustomSubject": "Vlastní předmět",
"To Email": "Příjemce",
"smtpCC": "Kopie",
"smtpBCC": "Skrytá kopie",
"discord": "Discord",
"Discord Webhook URL": "URL Webhooku Discord",
"wayToGetDiscordURL": "Získáte tak, že přejdete do Nastavení serveru - > Integrace - > Vytvořit Webhook",
"Bot Display Name": "Zobrazované jméno robota",
"Prefix Custom Message": "Předpona vlastní zprávy",
"Hello @everyone is...": "Dobrý den, {'@'}všichni jsou…",
"teams": "Microsoft Teams",
"Webhook URL": "URL adresa webhooku",
"wayToGetTeamsURL": "Informace o tom, jak vytvořit URL adresu webhooku naleznete na {0}.",
"wayToGetZohoCliqURL": "Informace o tom, jak vytvořit URL adresu webhooku naleznete na {0}.",
"signal": "Signal",
"Number": "Číslo",
"Recipients": "Příjemci",
"needSignalAPI": "Musíte mít Signal klienta s REST API.",
"wayToCheckSignalURL": "Pro zobrazení instrukcí, jak službu nastavit, přejděte na následující adresu:",
"signalImportant": "Důležité: v seznamu příjemců není možné současně použít skupiny a čísla!",
"gotify": "Gotify",
"Application Token": "Token aplikace",
"Server URL": "URL adresa serveru",
"Priority": "Priorita",
"slack": "Slack",
"Icon Emoji": "Ikona smajlíka",
"Channel Name": "Název kanálu",
"Uptime Kuma URL": "Uptime Kuma URL",
"aboutWebhooks": "Více informací o Webhoocích naleznete na adrese: {0}",
"aboutChannelName": "Pro vynechání Webhook kanálu zadejte jeho název do pole Název kanálu {0}. Příklad: #jiny-kanal",
"aboutKumaURL": "Pokud ponecháte pole URL adresa Uptime Kuma prázdné, použije se domovská stránka GitHub projektu.",
"emojiCheatSheet": "Tahák smajlíků: {0}",
"rocket.chat": "Rocket.Chat",
"pushover": "Pushover",
"pushy": "Pushy",
"PushByTechulus": "Push od Techulus",
"octopush": "Octopush",
"promosms": "PromoSMS",
"clicksendsms": "ClickSend SMS",
"lunasea": "LunaSea",
"apprise": "Apprise (podpora více než 50 oznamovacích služeb)",
"GoogleChat": "Google Chat (pouze Google Workspace)",
"pushbullet": "Pushbullet",
"Kook": "Kook",
"wayToGetKookBotToken": "Aplikaci vytvoříte a token bota získáte na {0}",
"wayToGetKookGuildID": "V nastavení Kook aktivujte 'Vývojářský režim' a kliknutím pravým tlačítkem na guild získejte jeho ID",
"Guild ID": "Guild ID",
"line": "Line Messenger",
"mattermost": "Mattermost",
"User Key": "Klíč uživatele",
"Device": "Zařízení",
"Message Title": "Nadpis zprávy",
"Notification Sound": "Zvuk oznámení",
"More info on:": "Více informací naleznete na adrese: {0}",
"pushoverDesc1": "Výchozí časový limit pro emergency prioritu (2) je 30 sekund mezi opakovanými pokusy a vyprší po 1 hodině.",
"pushoverDesc2": "Pokud chcete odesílat oznámení do různých zařízení, vyplňte pole Zařízení.",
"SMS Type": "Typ SMS",
"octopushTypePremium": "Premium (rychlé doporučeno pro upozornění)",
"octopushTypeLowCost": "Nízké náklady (pomalé někdy blokované operátorem)",
"checkPrice": "Ceny {0} zjistíte na adrese:",
"apiCredentials": "API přihlašovací údaje",
"octopushLegacyHint": "Používáte starší verzi Octopush (2011-2020) nebo novou verzi?",
"Check octopush prices": "Ceny octopush naleznete na adrese {0}.",
"octopushPhoneNumber": "Telefonní číslo (v mezinárodním formátu, např: +42012345678) ",
"octopushSMSSender": "Odesílatel SMS: 3-11 alfanumerických znaků a mezera (a-zA-Z0-9)",
"LunaSea Device ID": "ID zařízení LunaSea",
"Apprise URL": "Apprise URL",
"Example:": "Příklad: {0}",
"Read more:": "Více informací: {0}",
"Status:": "Stav: {0}",
"Read more": "Více informací",
"appriseInstalled": "Apprise je nainstalován.",
"appriseNotInstalled": "Apprise není nainstalován. {0}",
"Access Token": "Přístupový token",
"Channel access token": "Přístupový token ke kanálu",
"Line Developers Console": "Konzole Line Developers",
"lineDevConsoleTo": "Konzole Line Developers - {0}",
"Basic Settings": "Obecné nastavení",
"User ID": "ID uživatele",
"Messaging API": "Messaging API",
"wayToGetLineChannelToken": "Nejprve otevřete {0}, vytvořte poskytovatele a kanál (Messaging API). Poté můžete získat přístupový token ke kanálu a ID uživatele, v sekci uvedené výše.",
"Icon URL": "URL adresa ikony",
"aboutIconURL": "Pro přepsání výchozího profilového obrázku můžete do pole \"URL adresa ikony\" zadat odkaz na obrázek. Nebude použito, pokud je nastavena ikona smajlíka.",
"aboutMattermostChannelName": "Výchozí kanál, do kterého jsou zasílány Webhook příspěvky, můžete přepsat zadáním názvu kanálu do pole \"Název kanálu\". Tato možnost musí být povolena v nastavení Mattermost Webhooku. Příklad: #jiny-kanal",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO levné, ale pomalé a často přetížené. Omezeno pouze na polské příjemce.",
"promosmsTypeFlash": "SMS FLASH zpráva se automaticky zobrazí na zařízení příjemce. Omezeno pouze na polské příjemce.",
"promosmsTypeFull": "SMS FULL prémiová úroveň SMS. Můžete definovat odesílatele (vyžadována registrace jména). Spolehlivý pro výstrahy.",
"promosmsTypeSpeed": "SMS SPEED nejvyšší priorita v systému. Velmi rychlé a spolehlivé, ale nákladné (přibližně dvojnásobek ceny SMS FULL).",
"promosmsPhoneNumber": "Telefonní číslo (polští příjemci mohou vynechat telefonní předvolbu)",
"promosmsSMSSender": "Odesílatel SMS: Předem zaregistrovaný název nebo jeden z výchozích: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"promosmsAllowLongSMS": "Povolit dlouhé SMS",
"Feishu WebHookUrl": "URL Webhooku Feishu",
"matrixHomeserverURL": "URL adresa domácího serveru (s http(s):// a volitelně portem)",
"Internal Room Id": "ID interní místnosti",
"matrixDesc1": "ID interní místnosti naleznete v Matrix klientovi v rozšířeném nastavení místnosti. Mělo by být ve tvaru !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Důrazně doporučujeme vytvořit nového uživatele a nepoužívat váš vlastní přístupový token uživatele Matrix. Pomocí něj je možné získat přístup k vašemu účtu a všem místnostem, ke kterým jste se připojili. Místo toho vytvořte nového uživatele a pozvěte jej pouze do místnosti, do které chcete oznámení dostávat. Přístupový token můžete získat spuštěním {0}",
"Method": "Metoda",
"Body": "Tělo",
"Headers": "Hlavičky",
"PushUrl": "Push URL",
"HeadersInvalidFormat": "Hlaviča žádosti není platný JSON: ",
"BodyInvalidFormat": "Text žádosti není platný JSON: ",
"Monitor History": "Historie dohledu",
"clearDataOlderThan": "Historie dohledu bude uchovávána po dobu {0} dní.",
"PasswordsDoNotMatch": "Hesla se neshodují.",
"records": "záznamů",
"One record": "Jeden záznam",
"steamApiKeyDescription": "Pro monitorování Steam Game Serveru je nutné zadat Steam Web-API klíč. Svůj API klíč získáte na následující stránce: ",
"Current User": "Aktuálně přihlášený uživatel",
"topic": "Téma",
"topicExplanation": "MQTT téma, které chcete sledovat",
"successMessage": "Zpráva o úspěchu",
"successMessageExplanation": "MQTT zpráva považovaná za úspěšnou",
"recent": "Poslední",
"Done": "Hotovo",
"Info": "Informace",
"Security": "Bezpečnost",
"Steam API Key": "API klíč služby Steam",
"Shrink Database": "Zmenšit databázi",
"Pick a RR-Type...": "Vyberte typ RR záznamu…",
"Pick Accepted Status Codes...": "Vyberte stavové kódy, které chcete akceptovat…",
"Default": "Výchozí",
"HTTP Options": "Možnosti protokolu HTTP",
"Create Incident": "Vytvořit incident",
"Title": "Předmět",
"Content": "Obsah",
"Style": "Styl",
"info": "informace",
"warning": "upozornění",
"danger": "riziko",
"error": "chyba",
"critical": "kritické",
"primary": "primární",
"light": "světlý",
"dark": "tmavý",
"Post": "Publikovat",
"Please input title and content": "Zadejte prosím název a obsah",
"Created": "Vytvořen",
"Last Updated": "Poslední aktualizace",
"Unpin": "Odepnout",
"Switch to Light Theme": "Přepnout na světlý motiv",
"Switch to Dark Theme": "Přepnout na tmavý motiv",
"Show Tags": "Zobrazit štítky",
"Hide Tags": "Skrýt štítky",
"Description": "Popis",
"No monitors available.": "Není dostupný žádný dohled.",
"Add one": "Přidat jeden",
"No Monitors": "Žádný dohled",
"Untitled Group": "Skupina bez názvu",
"Services": "Služby",
"Discard": "Zahodit",
"Cancel": "Zrušit",
"Powered by": "Poskytuje",
"shrinkDatabaseDescription": "Pomocí této možnosti provedete příkaz VACUUM nad SQLite databází. Pokud byla databáze vytvořena po vydání verze 1.10.0, AUTO_VACUUM je již povolena a tato akce není vyžadována.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API uživatelské jméno (včetně předpony webapi_)",
"serwersmsAPIPassword": "API heslo",
"serwersmsPhoneNumber": "Telefonní číslo",
"serwersmsSenderName": "Odesílatel SMS (registrováno prostřednictvím zákaznického portálu)",
"smseagle": "SMSEagle",
"smseagleTo": "Telefonní číslo(a)",
"smseagleGroup": "Název skupiny v adresáři",
"smseagleContact": "Název kontaktu v adresáři",
"smseagleRecipientType": "Typ příjemce",
"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)",
"stackfield": "Stackfield",
"Customize": "Přizpůsobit",
"Custom Footer": "Vlastní patička",
"Custom CSS": "Vlastní CSS",
"smtpDkimSettings": "Nastavení DKIM",
"smtpDkimDesc": "Informace o použití naleznete v {0} Nodemailer DKIM.",
"documentation": "dokumentaci",
"smtpDkimDomain": "Název domény",
"smtpDkimKeySelector": "Selektor klíče",
"smtpDkimPrivateKey": "Privátní klíč",
"smtpDkimHashAlgo": "Hashovací algoritmus (volitelné)",
"smtpDkimheaderFieldNames": "Podepisovat tyto hlavičky (volitelné)",
"smtpDkimskipFields": "Nepodepisovat tyto hlavičky (volitelné)",
"wayToGetPagerDutyKey": "Získat jej můžete v sekci Service -> Service Directory -> (vyberte službu) -> Integrations -> Add integration. Následně vyhledejte \"Events API V2\". Více informace naleznete na adrese {0}",
"Integration Key": "Integrační klíč",
"Integration URL": "Integrační URL",
"Auto resolve or acknowledged": "Automatické řešení nebo potvrzení",
"do nothing": "nedělat nic",
"auto acknowledged": "automaticky uznáno",
"auto resolve": "automatické řešení",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "API Endpoint",
"alertaEnvironment": "Prostředí",
"alertaApiKey": "API klíč",
"alertaAlertState": "Stav upozornění",
"alertaRecoverState": "Stav obnovení",
"deleteStatusPageMsg": "Opravdu chcete odstranit tuto stavovou stránku?",
"Proxies": "Proxy",
"default": "Výchozí",
"enabled": "Zapnuto",
"setAsDefault": "Nastavit jako výchozí",
"deleteProxyMsg": "Opravdu chcete odstranit tuto proxy ze všech dohledů?",
"proxyDescription": "Pro zajištění funkčnosti musí být proxy přiřazena dohledům.",
"enableProxyDescription": "Tato proxy neovlivní žádosti dohledu do doby, než ji aktivujete. Změnou tohoto nastavení dočasně zakážete použití proxy ve všech dohledech.",
"setAsDefaultProxyDescription": "Tato proxy se použije pro všechny nové dohledy. V případě potřeby můžete její využívání zakázat v konkrétním dohledu.",
"Certificate Chain": "Řetězec certifikátu",
"Valid": "Platný",
"Invalid": "Neplatný",
"AccessKeyId": "ID přístupového klíče",
"SecretAccessKey": "Tajemství přístupového klíče",
"PhoneNumbers": "Telefonní čísla",
"TemplateCode": "TemplateCode",
"SignName": "SignName",
"Sms template must contain parameters: ": "Šablona SMS musí obsahovat parametry: ",
"Bark Endpoint": "Bark Endpoint",
"Bark Group": "Skupina Bark",
"Bark Sound": "Bark zvuk",
"WebHookUrl": "WebHookUrl",
"SecretKey": "Tajný klíč",
"For safety, must use secret key": "Z důvodu bezpečnosti použijte secret key",
"Device Token": "Token zařízení",
"Platform": "Platforma",
"iOS": "iOS",
"Android": "Android",
"Huawei": "Huawei",
"High": "Vysoký",
"Retry": "Opakovat",
"Topic": "Téma",
"WeCom Bot Key": "Klíč WeCom Bota",
"Setup Proxy": "Nastavit proxy",
"Proxy Protocol": "Protokol proxy",
"Proxy Server": "Proxy Server",
"Proxy server has authentication": "Proxy server vyžaduje ověření",
"User": "Uživatel",
"Installed": "Nainstalováno",
"Not installed": "Nenainstalováno",
"Running": "Běží",
"Not running": "Neběží",
"Remove Token": "Odstranit token",
"Start": "Spustit",
"Stop": "Zastavit",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "Přidat novou stavovou stránku",
"Slug": "Slug",
"Accept characters:": "Přípustné znaky:",
"startOrEndWithOnly": "Počáteční a koncový znak může být pouze {0}",
"No consecutive dashes": "Nesmí se opakovat pomlčky",
"Next": "Další",
"The slug is already taken. Please choose another slug.": "Slug s tímto názvem již existuje. Prosím, zadejte jiný název.",
"No Proxy": "Žádná proxy",
"Authentication": "Ověření",
"HTTP Basic Auth": "HTTP Basic ověření",
"New Status Page": "Nová stavová stránka",
"Page Not Found": "Stránka nenalezena",
"Reverse Proxy": "Reverzní proxy",
"Backup": "Záloha",
"About": "O programu",
"wayToGetCloudflaredURL": "(Stáhnout cloudflared z {0})",
"cloudflareWebsite": "Webová stránka Cloudflare",
"Message:": "Zpráva:",
"Don't know how to get the token? Please read the guide:": "Nevíte jak získat? Prosím, přečtěte si tuto příručku:",
"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.": "Stávající připojení mohlo být ztraceno, pokud jste připojeni prostřednictvím Cloudflare tunelu. Opravdu jej chcete zastavit? Pro potvrzení zadejte své současné heslo.",
"HTTP Headers": "HTTP hlavičky",
"Trust Proxy": "Důvěryhodná proxy",
"Other Software": "Jiný software",
"For example: nginx, Apache and Traefik.": "Například nginx, Apache nebo Traefik.",
"Please read": "Prosím, přečtěte si informace na adrese",
"Subject:": "Předmět:",
"Valid To:": "Platnost do:",
"Days Remaining:": "Počet zbývajících dní:",
"Issuer:": "Vydavatel:",
"Fingerprint:": "Otisk:",
"No status pages": "Žádná stavová stránka",
"Domain Name Expiry Notification": "Oznámení na blížící se konec platnosti doménového jména",
"Proxy": "Proxy",
"Date Created": "Datum vytvoření",
"HomeAssistant": "Home Assistant",
"onebotHttpAddress": "OneBot HTTP adresa",
"onebotMessageType": "Typ OneBot zprávy",
"onebotGroupMessage": "Skupinová",
"onebotPrivateMessage": "Soukromá",
"onebotUserOrGroupId": "ID skupiny/uživatele",
"onebotSafetyTips": "Z důvodu bezpečnosti je nutné zadat přístupový token",
"PushDeer Key": "PushDeer klíč",
"Footer Text": "Text v patičce",
"Show Powered By": "Zobrazit \"Poskytuje\"",
"Domain Names": "Názvy domén",
"signedInDisp": "Přihlášen jako {0}",
"signedInDispDisabled": "Ověření je vypnuté.",
"RadiusSecret": "Tajemství Radius",
"RadiusSecretDescription": "Sdílený tajný klíč mezi klientem a serverem",
"RadiusCalledStationId": "ID volaného zařízení",
"RadiusCalledStationIdDescription": "Identifikátor volaného zařízení",
"RadiusCallingStationId": "ID volajícího zařízení",
"RadiusCallingStationIdDescription": "Identifikátor volajícího zařízení",
"Certificate Expiry Notification": "Oznámení na blížící se konec platnosti certifikátu",
"API Username": "Uživatelské jména API",
"API Key": "API klíč",
"Recipient Number": "Číslo příjemce",
"From Name/Number": "Jméno/číslo odesílatele",
"Leave blank to use a shared sender number.": "Ponechte prázdné, pokud chcete použít číslo sdíleného příjemce.",
"Octopush API Version": "Octopush API verze",
"Legacy Octopush-DM": "Legacy Octopush-DM",
"endpoint": "endpoint",
"octopushAPIKey": "\"API key\" ze sekce HTTP API credentials na nástěnce",
"octopushLogin": "\"Login\" ze sekce HTTP API credentials na nástěnce",
"promosmsLogin": "API Login Name",
"promosmsPassword": "API Password",
"pushoversounds pushover": "Pushover (výchozí)",
"pushoversounds bike": "Kolo",
"pushoversounds bugle": "Bugle",
"pushoversounds cashregister": "Pokladna",
"pushoversounds classical": "Classical",
"pushoversounds cosmic": "Kosmický",
"pushoversounds falling": "Falling",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "Příchozí",
"pushoversounds intermission": "Přestávka",
"pushoversounds magic": "Kouzlo",
"pushoversounds mechanical": "Mechanika",
"pushoversounds pianobar": "Barové piano",
"pushoversounds siren": "Siréna",
"pushoversounds spacealarm": "Space Alarm",
"pushoversounds tugboat": "Tug Boat",
"pushoversounds alien": "Alien Alarm (dlouhý)",
"pushoversounds climb": "Climb (dlouhý)",
"pushoversounds persistent": "Persistent (dlouhý)",
"pushoversounds echo": "Pushover Echo (dlouhý)",
"pushoversounds updown": "Up Down (dlouhý)",
"pushoversounds vibrate": "Pouze vibrace",
"pushoversounds none": "Žádný (ticho)",
"pushyAPIKey": "Tajný API klíč",
"pushyToken": "Token zařízení",
"Show update if available": "Upozornit na aktualizace, pokud jsou k dispozici",
"Also check beta release": "Kontrolovat také dostupnost beta verzí",
"Using a Reverse Proxy?": "Používáte reverzní proxy?",
"Check how to config it for WebSocket": "Zjistěte, jak ji nakonfigurovat pro WebSockety",
"Steam Game Server": "Steam Game Server",
"Most likely causes:": "Nejčastější důvody:",
"The resource is no longer available.": "Zdroj již není k dispozici.",
"There might be a typing error in the address.": "Při zadávání adresy jste udělali chybu.",
"What you can try:": "Co můžete vyzkoušet:",
"Retype the address.": "Znovu zadat adresu.",
"Go back to the previous page.": "Vrátit se na předchozí stránku.",
"Coming Soon": "Připravujeme",
"wayToGetClickSendSMSToken": "API Username a API Key získáte na adrese {0} .",
"Connection String": "Připojovací řetězec",
"Query": "Dotaz",
"settingsCertificateExpiry": "Platnost TLS certifikátu",
"certificationExpiryDescription": "Aktivovat oznámení nad HTTPS dohledy, pokud platnost TLS certifikátu vyprší za:",
"Setup Docker Host": "Nastavit Docker hostitele",
"Connection Type": "Typ připojení",
"Docker Daemon": "Démon Dockeru",
"deleteDockerHostMsg": "Opravdu chcete odstranit tohoto docker hostitele ze všech dohledů?",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Docker kontejner",
"Container Name / ID": "ID / název kontejneru",
"Docker Host": "Docker hostitel",
"Docker Hosts": "Docker hostitelé",
"ntfy Topic": "ntfy Téma",
"Domain": "Doména",
"Workstation": "Pracovní stanice",
"disableCloudflaredNoAuthMsg": "Používáte režim bez ověření, heslo není vyžadováno.",
"trustProxyDescription": "Důvěřovat 'X-Forwarded-*' hlavičkám. Pokud chcete získat správnou IP adresu klientů a vaše instance Uptime Kuma je za Nginx nebo Apache, měli byste tuto možnost zapnout.",
"wayToGetLineNotifyToken": "Přístupový token můžete získat na adrese {0}",
"Examples": "Příklady",
"Home Assistant URL": "Home Assistant URL",
"Long-Lived Access Token": "Dlouhodobý přístupový token",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Pro vytvoření dlouhodobého přístupový tokenu klikněte na název svého profilu (v levém dolním rohu) a následně v dolní části stránky klikněte na tlačítko Create Token. ",
"Notification Service": "Oznamovací služba",
"default: notify all devices": "výchozí: upozornit všechny zařízení",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Seznam dostupných oznamovacích služeb naleznete v Home Assistant v sekci \"Developer Tools > Services\", kde vyhledejte \"notification\" pro zjištění názvu zařízení.",
"Automations can optionally be triggered in Home Assistant:": "Automatizaci můžete volitelně aktivovat prostřednictvím Home Assistant:",
"Trigger type:": "Typ podmínky spuštění:",
"Event type:": "Typ události:",
"Event data:": "Data události:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Následně vyberte akci, například přepnutí scény z RGB světla na červenou.",
"Frontend Version": "Verze frontendu",
"Frontend Version do not match backend version!": "Verze frontendu neodpovídá verzi backendu!",
"Base URL": "Primární URL adresa",
"goAlertInfo": "GoAlert je aplikace s otevřeným zdrojovým kódem pro plánování hovorů, automatické eskalace a upozornění (jako jsou SMS nebo hlasové hovory). Automaticky zapojte správnou osobu, správným způsobem a ve správný čas! {0}",
"goAlertIntegrationKeyInfo": "Obecný API integrační klíč pro danou službu ve formátu \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" se obvykle nachází ve zkopírované URL jako hodnota parametru token.",
"goAlert": "GoAlert",
"backupOutdatedWarning": "Zastaralé: Vzhledem k tomu, že bylo přidáno mnoho funkcí a tato funkce zálohování je poněkud neudržovaná, nemůže vytvářet nebo obnovit kompletní zálohu.",
"backupRecommend": "Prosím, zálohujte si ručně celý svazek nebo datovou složku (./data/).",
"Optional": "Volitelný",
"squadcast": "Squadcast",
"SendKey": "SendKey",
"SMSManager API Docs": "Dokumentace SMSManager API ",
"Gateway Type": "Typ brány",
"SMSManager": "SMSManager",
"You can divide numbers with": "Čísla můžete oddělit pomocí",
"or": "nebo",
"recurringInterval": "Interval",
"Recurring": "Opakující se",
"strategyManual": "Ruční spuštění/vypnutí",
"warningTimezone": "Používá se časové pásmo serveru",
"weekdayShortMon": "Po",
"weekdayShortTue": "Út",
"weekdayShortWed": "St",
"weekdayShortThu": "Čt",
"weekdayShortFri": "Pá",
"weekdayShortSat": "So",
"weekdayShortSun": "Ne",
"dayOfWeek": "Den v týdnu",
"dayOfMonth": "Den v měsíci",
"lastDay": "Poslední den",
"lastDay1": "1. poslední den v měsíci",
"lastDay2": "2. poslední den v měsíci",
"lastDay3": "3. poslední den v měsíci",
"lastDay4": "4. poslední den v měsíci",
"No Maintenance": "Žádná údržba",
"pauseMaintenanceMsg": "Opravdu chcete údržbu pozastavit?",
"maintenanceStatus-under-maintenance": "Údržba",
"maintenanceStatus-inactive": "Neaktivní",
"maintenanceStatus-scheduled": "Naplánováno",
"maintenanceStatus-ended": "Ukončeno",
"maintenanceStatus-unknown": "Neznámý",
"Display Timezone": "Zobrazit časové pásmo",
"Server Timezone": "Časové pásmo serveru",
"statusPageMaintenanceEndDate": "Konec",
"IconUrl": "Adresa URL ikony",
"Enable DNS Cache": "Povolit DNS Cache",
"Enable": "Povolit",
"Disable": "Zakázat",
"dnsCacheDescription": "V některých IPv6 prostředích nemusí fungovat. Pokud narazíte na nějaké problémy, vypněte jej.",
"Single Maintenance Window": "Konkrétní časové okno pro údržbu",
"Maintenance Time Window of a Day": "Časové okno pro údržbu v daný den",
"Effective Date Range": "Časové období",
"Schedule Maintenance": "Naplánovat údržbu",
"Date and Time": "Datum a čas",
"DateTime Range": "Rozsah data a času",
"Strategy": "Strategie",
"Free Mobile User Identifier": "Identifikátor uživatele Free Mobile",
"Free Mobile API Key": "API klíč Free Mobile",
"Enable TLS": "Povolit TLS",
"Proto Service Name": "Proto Service Name",
"Proto Method": "Proto metoda",
"Proto Content": "Proto obsah",
"Economy": "Úsporná",
"Lowcost": "Nízkonákladová",
"high": "high",
"General Monitor Type": "Obecný typ dohledu",
"Passive Monitor Type": "Pasivní typ dohledu",
"Specific Monitor Type": "Konkrétní typ dohledu",
"dataRetentionTimeError": "Doba pro uchování musí být větší nebo rovna 0",
"infiniteRetention": "Pro nekonečný záznam zadejte 0.",
"confirmDeleteTagMsg": "Opravdu chcete odstranit tento štítek? Provedením této akce nedojde k odstranění dohledů, které jej mají přiřazeny.",
"Help": "Nápověda",
"Game": "Hra",
"Custom Monitor Type": "Vlastní typ dohledu",
"loadingError": "Nelze načíst data, zkuste to prosím později.",
"confirmUninstallPlugin": "Opravdu chcete tento zásuvný modul odinstalovat?",
"plugin": "Zásuvné moduly | Zásuvné moduly",
"install": "Instalace",
"installing": "Instaluji",
"uninstall": "Odinstalace",
"uninstalling": "Odinstalování",
"Packet Size": "Velikost paketu"
}

354
src/lang/da-DK.json Normal file
View File

@@ -0,0 +1,354 @@
{
"languageName": "Danish (Danmark)",
"Settings": "Indstillinger",
"Dashboard": "Betjeningspanel",
"New Update": "Opdatering tilgængelig",
"Language": "Sprog",
"Appearance": "Udseende",
"Theme": "Tema",
"General": "Generelt",
"Version": "Version",
"Check Update On GitHub": "Tjek efter opdateringer på Github",
"List": "Liste",
"Add": "Tilføj",
"Add New Monitor": "Tilføj ny Overvåger",
"Quick Stats": "Oversigt",
"Up": "Aktiv",
"Down": "Inaktiv",
"Pending": "Afventer",
"Unknown": "Ukendt",
"Pause": "Stands",
"pauseDashboardHome": "Standset",
"Name": "Navn",
"Status": "Status",
"DateTime": "Dato / Tid",
"Message": "Beskeder",
"No important events": "Inden vigtige begivenheder",
"Resume": "Fortsæt",
"Edit": "Rediger",
"Delete": "Slet",
"Current": "Aktuelt",
"Uptime": "Oppetid",
"Cert Exp.": "Certifikatets udløb",
"day": "Dag | Dage",
"-day": "-Dage",
"hour": "Timer",
"-hour": "-Timer",
"checkEverySecond": "Tjek hvert {0} sekund",
"Response": "Respons",
"Ping": "Ping",
"Monitor Type": "Overvåger Type",
"Keyword": "Nøgleord",
"Friendly Name": "Visningsnavn",
"URL": "URL",
"Hostname": "Hostname",
"Port": "Port",
"Heartbeat Interval": "Taktinterval",
"Retries": "Gentagelser",
"retriesDescription": "Maksimalt antal gentagelser, før tjenesten markeres som inaktiv og sender en meddelelse.",
"Advanced": "Avanceret",
"ignoreTLSError": "Ignorere TLS/SSL web fejl",
"Upside Down Mode": "Omvendt tilstand",
"upsideDownModeDescription": "Håndter tilstanden omvendt. Hvis tjenesten er tilgængelig, vises den som inaktiv.",
"Max. Redirects": "Maks. Omdirigeringer",
"maxRedirectDescription": "Maksimalt antal omdirigeringer, der skal følges. Indstil til 0 for at deaktivere omdirigeringer.",
"Accepted Status Codes": "Tilladte HTTP-Statuskoder",
"acceptedStatusCodesDescription": "Vælg de statuskoder, der stadig skal vurderes som vellykkede.",
"Save": "Gem",
"Notifications": "Underretninger",
"Not available, please setup.": "Ikke tilgængelige, opsæt venligst.",
"Setup Notification": "Opsæt underretninger",
"Light": "Lys",
"Dark": "Mørk",
"Auto": "Auto",
"Theme - Heartbeat Bar": "Tema - Tidslinje",
"Normal": "Normal",
"Bottom": "Bunden",
"None": "Ingen",
"Timezone": "Tidszone",
"Search Engine Visibility": "Søgemaskine synlighed",
"Allow indexing": "Tillad indeksering",
"Discourage search engines from indexing site": "Frabed søgemaskiner at indeksere webstedet",
"Change Password": "Ændre adgangskode",
"Current Password": "Nuværende adgangskode",
"New Password": "Ny adgangskode",
"Repeat New Password": "Gentag den nye adgangskode",
"passwordNotMatchMsg": "Adgangskoderne er ikke ens.",
"Update Password": "Opdater adgangskode",
"Disable Auth": "Deaktiver autentificering",
"Enable Auth": "Aktiver autentificering",
"Logout": "Log ud",
"notificationDescription": "Tildel underretninger til Overvåger(e), så denne funktion træder i kraft.",
"Leave": "Verlassen",
"I understand, please disable": "Jeg er indforstået, deaktiver venligst",
"Confirm": "Bekræft",
"Yes": "Ja",
"No": "Nej",
"Username": "Brugernavn",
"Password": "Adgangskode",
"Remember me": "Husk mig",
"Login": "Log ind",
"No Monitors, please": "Ingen Overvågere",
"add one": "tilføj en",
"Notification Type": "Underretningstype",
"Email": "E-Mail",
"Test": "Test",
"Certificate Info": "Certifikatoplysninger",
"keywordDescription": "Søg efter et søgeord i almindelig HTML- eller JSON -output. Bemærk, at der skelnes mellem store og små bogstaver.",
"deleteMonitorMsg": "Er du sikker på, at du vil slette overvågeren?",
"deleteNotificationMsg": "Er du sikker på, at du vil slette denne underretning for alle overvågere?",
"resolverserverDescription": "Cloudflare er standardserveren, den kan til enhver tid ændres.",
"Resolver Server": "Navne-server",
"rrtypeDescription": "Vælg den type RR, du vil overvåge.",
"Last Result": "Seneste resultat",
"pauseMonitorMsg": "Er du sikker på, at du vil standse Overvågeren?",
"Create your admin account": "Opret din administratorkonto",
"Repeat Password": "Gentag adgangskoden",
"Resource Record Type": "Resource Record Type",
"respTime": "Resp. Tid (ms)",
"notAvailableShort": "N/A",
"Create": "Opret",
"clearEventsMsg": "Er du sikker på vil slette alle events for denne Overvåger?",
"clearHeartbeatsMsg": "Er du sikker på vil slette alle hjerteslag for denne Overvåger?",
"confirmClearStatisticsMsg": "Vil du helt sikkert slette ALLE statistikker?",
"Clear Data": "Ryd Data",
"Events": "Events",
"Heartbeats": "Hjerteslag",
"Auto Get": "Auto-hent",
"enableDefaultNotificationDescription": "For hver ny overvåger aktiveres denne underretning som standard. Du kan stadig deaktivere underretningen separat for hver skærm.",
"Default enabled": "Standard aktiveret",
"Also apply to existing monitors": "Anvend også på eksisterende overvågere",
"Export": "Eksport",
"Import": "Import",
"backupDescription": "Du kan sikkerhedskopiere alle Overvågere og alle underretninger til en JSON-fil.",
"backupDescription2": "PS: Historik og hændelsesdata er ikke inkluderet.",
"backupDescription3": "Følsom data, f.eks. underretnings-tokener, er inkluderet i eksportfilen. Gem den sikkert.",
"alertNoFile": "Vælg en fil der skal importeres.",
"alertWrongFileType": "Vælg venligst en JSON-fil.",
"twoFAVerifyLabel": "Indtast venligst dit token for at bekræfte, at 2FA fungerer",
"tokenValidSettingsMsg": "Token er gyldigt! Du kan nu gemme 2FA -indstillingerne.",
"confirmEnableTwoFAMsg": "Er du sikker på at du vil aktivere 2FA?",
"confirmDisableTwoFAMsg": "Er du sikker på at du vil deaktivere 2FA?",
"Apply on all existing monitors": "Anvend på alle eksisterende overvågere",
"Verify Token": "Verificere Token",
"Setup 2FA": "Opsæt 2FA",
"Enable 2FA": "Aktiver 2FA",
"Disable 2FA": "Deaktiver 2FA",
"2FA Settings": "2FA Indstillinger",
"Two Factor Authentication": "To-Faktor Autentificering",
"Active": "Aktive",
"Inactive": "Inaktive",
"Token": "Token",
"Show URI": "Vis URI",
"Clear all statistics": "Ryd alle Statistikker",
"retryCheckEverySecond": "Prøv igen hvert {0} sekund.",
"importHandleDescription": "Vælg 'Spring over eksisterende', hvis du vil springe over hver overvåger eller underretning med samme navn. 'Overskriv' sletter alle eksisterende overvågere og underretninger.",
"confirmImportMsg": "Er du sikker på at importere sikkerhedskopien? Sørg for, at du har valgt den rigtige importindstilling.",
"Heartbeat Retry Interval": "Hjerteslag Gentagelsesinterval",
"Import Backup": "Importer Backup",
"Export Backup": "Eksporter Backup",
"Skip existing": "Spring over eksisterende",
"Overwrite": "Overskriv",
"Options": "Valgmuligheder",
"Keep both": "Behold begge",
"Tags": "Etiketter",
"Add New below or Select...": "Tilføj Nyt nedenfor eller Vælg ...",
"Tag with this name already exist.": "Et Tag med dette navn findes allerede.",
"Tag with this value already exist.": "Et Tag med denne værdi findes allerede.",
"color": "farve",
"value (optional)": "værdi (valgfri)",
"Gray": "Grå",
"Red": "Rød",
"Orange": "Orange",
"Green": "Grøn",
"Blue": "Blå",
"Indigo": "Indigo",
"Purple": "Lilla",
"Pink": "Pink",
"Search...": "Søg...",
"Avg. Ping": "Gns. Ping",
"Avg. Response": "Gns. Respons",
"Entry Page": "Entry Side",
"statusPageNothing": "Intet her, tilføj venligst en Gruppe eller en Overvåger.",
"No Services": "Ingen Tjenester",
"All Systems Operational": "Alle Systemer i Drift",
"Partially Degraded Service": "Delvist Forringet Service",
"Degraded Service": "Forringet Service",
"Add Group": "Tilføj Gruppe",
"Add a monitor": "Tilføj en Overvåger",
"Edit Status Page": "Rediger Statusside",
"Go to Dashboard": "Gå til Betjeningspanel",
"Status Page": "Statusside",
"Status Pages": "Statusside",
"telegram": "Telegram",
"webhook": "Webhook",
"smtp": "Email (SMTP)",
"discord": "Discord",
"teams": "Microsoft Teams",
"signal": "Signal",
"gotify": "Gotify",
"slack": "Slack",
"rocket.chat": "Rocket.chat",
"pushover": "Pushover",
"pushy": "Pushy",
"octopush": "Octopush",
"promosms": "PromoSMS",
"lunasea": "LunaSea",
"apprise": "Apprise (Understøtter 50+ Notifikationstjenester)",
"pushbullet": "Pushbullet",
"line": "Line Messenger",
"mattermost": "Mattermost",
"Primary Base URL": "Primær Basis-URL",
"Push URL": "Push URL",
"needPushEvery": "Du bør kalde denne webadresse hvert {0} sekund.",
"pushOptionalParams": "Valgfrie parametre: {0}",
"defaultNotificationName": "Min {notification} Advarsel ({number})",
"here": "her",
"Required": "Påkrævet",
"Bot Token": "Bot Token",
"wayToGetTelegramToken": "Du kan få et token fra {0}.",
"Chat ID": "Chat ID",
"supportTelegramChatID": "Support Direct Chat / Group / Channel's Chat ID",
"wayToGetTelegramChatID": "Du kan få dit chat-ID ved at sende en besked til bot'en og gå til denne URL for at se chat_id'et:",
"YOUR BOT TOKEN HERE": "DIT BOT TOKEN HER",
"chatIDNotFound": "Chat-ID blev ikke fundet; send venligst en besked til denne bot først ",
"Post URL": "Post URL",
"Content Type": "Indholdstype",
"webhookJsonDesc": "{0} er god til alle moderne HTTP-servere som f.eks Express.js",
"webhookFormDataDesc": "{multipart} er god til PHP. JSON'en skal parses med {decodeFunction}",
"secureOptionNone": "Ingen / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Ignorer TLS-fejl",
"From Email": "Afsender Email",
"emailCustomSubject": "Brugerdefineret Emne",
"To Email": "Modtager Email",
"smtpCC": "CC",
"smtpBCC": "BCC",
"Discord Webhook URL": "Discord Webhook URL",
"wayToGetDiscordURL": "Du kan få dette ved at gå til Serverindstillinger -> Integrationer -> Opret webhook ",
"Bot Display Name": "Bot Visningsnavn",
"Prefix Custom Message": "Præfiks Brugerdefineret Besked",
"Hello @everyone is...": "Hello {'@'}everyone is...",
"Webhook URL": "Webhook URL",
"wayToGetTeamsURL": "Du kan lære, hvordan du laver en webhook URL {0}.",
"Number": "Nummer",
"Recipients": "Modtagere",
"needSignalAPI": "Du skal have en Signal-klient med REST API.",
"wayToCheckSignalURL": "Du kan tjekke denne URL for at se, hvordan du konfigurerer en:",
"signalImportant": "VIGTIGT: Du kan ikke blande grupper og numre i modtagere!",
"Application Token": "Program Token",
"Server URL": "Server URL",
"Priority": "Prioritet",
"Icon Emoji": "Icon Emoji",
"Channel Name": "Kanalnavn",
"Uptime Kuma URL": "Uptime Kuma URL",
"aboutWebhooks": "Mere info om Webhooks på: {0}",
"aboutChannelName": "Indtast kanalnavnet i {0} Kanalnavn feltet, hvis du vil omgå Webhook-kanalen. Eks: #anden-kanal",
"aboutKumaURL": "Hvis du efterlader Uptime Kuma URL-feltet tomt, vil det som standard gå til projektets GitHub-siden.",
"emojiCheatSheet": "Emoji cheat sheet: {0}",
"clicksendsms": "ClickSend SMS",
"User Key": "Bruger-Nøgle",
"Device": "Enhed",
"Message Title": "Besked Titel",
"Notification Sound": "Notifikationslyd",
"More info on:": "Mere info på: {0}",
"pushoverDesc1": "Nødprioritet (2) har som standard 30 sekunders timeout mellem genforsøg og udløber efter 1 time.",
"pushoverDesc2": "Hvis du vil sende meddelelser til forskellige enheder, skal du udfylde feltet Enhed.",
"SMS Type": "SMS Type",
"octopushTypePremium": "Premium (Hurtig - anbefales til advarsel)",
"octopushTypeLowCost": "Lavpris (Langsom - nogle gange blokeret af operatøren)",
"checkPrice": "Tjek {0} priser:",
"apiCredentials": "API legitimationsoplysninger",
"octopushLegacyHint": "Bruger du den ældre version af Octopush (2011-2020) eller den nye version?",
"Check octopush prices": "Tjek octopush priser {0}.",
"octopushPhoneNumber": "Telefonnummer (intl format, f.eks : +4512345678) ",
"octopushSMSSender": "SMS Afsender Navn : 3-11 alfanumeriske tegn og mellemrum (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea Enhed-ID",
"Apprise URL": "Apprise URL",
"Example:": "Eksempel: {0}",
"Read more:": "Læs mere: {0}",
"Status:": "Status: {0}",
"Read more": "Læs mere",
"appriseInstalled": "Apprise er installeret.",
"appriseNotInstalled": "Apprise er ikke installeret. {0}",
"Access Token": "Access Token",
"Channel access token": "kanaladgangstoken",
"Line Developers Console": "Line Udviklerkonsol",
"lineDevConsoleTo": "Line Udviklerkonsol - {0}",
"Basic Settings": "Basisindstillinger",
"User ID": "Bruger-ID",
"Messaging API": "Messaging API",
"wayToGetLineChannelToken": "Tilgå først {0}, opret en udbyder og kanal (Messaging API), så kan du få kanaladgangstoken'et og bruger-ID'et fra de ovennævnte menupunkter.",
"Icon URL": "Ikon URL",
"aboutIconURL": "Du kan angive et link til et billede i \"Ikon URL\" for at tilsidesætte standardprofilbilledet. Vil ikke blive brugt, hvis Ikon Emoji er angivet.",
"aboutMattermostChannelName": "Du kan tilsidesætte standardkanalen, som Webhoo'en sender til ved at indtaste kanalnavnet i feltet \"Kanalnavn\". Dette skal aktiveres i Mattermost Webhook-indstillingerne. Eks: #anden-kanal",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO - billig, men langsom og ofte overbelastet. Begrænset kun til polske modtagere.",
"promosmsTypeFlash": "SMS FLASH - Beskeden vises automatisk på modtagerenheden. Begrænset kun til polske modtagere.",
"promosmsTypeFull": "SMS FULL - Premium-niveau af SMS, Du kan bruge dit \"Sender Name\" (Du skal først registrere navn). Pålidelig til advarsler.",
"promosmsTypeSpeed": "SMS SPEED - Højeste prioritet i systemet. Meget hurtig og pålidelig, men dyr (ca. to gange af SMS FULL pris).",
"promosmsPhoneNumber": "Telefonnummer (polske numre behøver ikke angive områdenumre)",
"promosmsSMSSender": "SMS Sender Name : Forudregistreret navn eller en af standarderne: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
"matrixHomeserverURL": "Hjemmeserver-URL (med http(s):// og eventuel port)",
"Internal Room Id": "Intern Rum-ID",
"matrixDesc1": "Du kan finde det interne rum-ID ved at se i det avancerede afsnit af rumindstillingerne i din Matrix-klient. Det skulle ligne !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Det anbefales stærkt, at du opretter en ny bruger og ikke bruger din egen Matrix-brugers adgangstoken, da det giver fuld adgang til din konto og alle de rum, du har tilsluttet dig. I stedet skal du oprette en ny bruger og kun invitere den til det rum, du vil modtage meddelelsen i. Du kan få adgangstokenet ved at køre {0}",
"Method": "Metode",
"Body": "Body",
"Headers": "Headers",
"PushUrl": "Push URL",
"HeadersInvalidFormat": "\"request headers\"-erne er ikke gyldige JSON: ",
"BodyInvalidFormat": "\"request body\"-en er ikke gyldige JSON: ",
"Monitor History": "Overvåger Historik",
"clearDataOlderThan": "Gem overvågningshistorikdata i {0} dage.",
"PasswordsDoNotMatch": "Adgangskoderne stemmer ikke overens.",
"records": "forekomster",
"One record": "Én forekomst",
"steamApiKeyDescription": "For at overvåge en Steam Game Server skal du bruge en Steam Web-API nøgle. Du kan registrere din API-nøgle her: ",
"Current User": "Nuværende Bruger",
"recent": "Seneste",
"Done": "Færdig",
"Info": "Info",
"Security": "Sikkerhed",
"Steam API Key": "Steam API-nøgle",
"Shrink Database": "Krymp Database",
"Pick a RR-Type...": "Vælg en RR-Type...",
"Pick Accepted Status Codes...": "Vælg Accepterede Statuskoder...",
"Default": "Standard",
"HTTP Options": "HTTP Valgmuligheder",
"Create Incident": "Opret Annoncering",
"Title": "Titel",
"Content": "Indhold",
"Style": "Type",
"info": "info",
"warning": "advarsel",
"danger": "fare",
"primary": "primær",
"light": "lys",
"dark": "mørk",
"Post": "Udgiv",
"Please input title and content": "Indtast venligst titel og indhold",
"Created": "Oprettet",
"Last Updated": "Sidst Opdateret",
"Unpin": "Frigør",
"Switch to Light Theme": "Skift til Lys Tema",
"Switch to Dark Theme": "Skift til Mørkt Tema",
"Show Tags": "Vis Etiketter",
"Hide Tags": "Skjul Etiketter",
"Description": "Beskrivelse",
"No monitors available.": "No monitors available.",
"Add one": "Tilføj en",
"No Monitors": "Ingen Overvågere",
"Untitled Group": "Unavngivet Gruppe",
"Services": "Tjenester",
"Discard": "Kassér",
"Cancel": "Annullér",
"Powered by": "Drevet af",
"shrinkDatabaseDescription": "Udfør database VACUUM for SQLite. Hvis din database er oprettet efter 1.10.0, er AUTO_VACUUM allerede aktiveret, og denne handling er ikke nødvendig.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Brugernavn (inkl. webapi_ prefix)",
"serwersmsAPIPassword": "API Adgangskode",
"serwersmsPhoneNumber": "Telefonnummer",
"serwersmsSenderName": "SMS Afsender Navn (registreret via kundeportal)"
}

633
src/lang/de-CH.json Normal file
View File

@@ -0,0 +1,633 @@
{
"languageName": "Deutsch (Schweiz)",
"Settings": "Einstellungen",
"Dashboard": "Dashboard",
"New Update": "Update verfügbar",
"Language": "Sprache",
"Appearance": "Erscheinungsbild",
"Theme": "Erscheinungsbild",
"General": "Allgemein",
"Version": "Version",
"Check Update On GitHub": "Auf GitHub nach Updates suchen",
"List": "Liste",
"Add": "Hinzufügen",
"Add New Monitor": "Neuen Monitor hinzufügen",
"Quick Stats": "Übersicht",
"Up": "Aktiv",
"Down": "Inaktiv",
"Pending": "Ausstehend",
"Unknown": "Unbekannt",
"Pause": "Pausieren",
"pauseDashboardHome": "Pausiert",
"Name": "Name",
"Status": "Status",
"DateTime": "Datum / Uhrzeit",
"Message": "Nachricht",
"No important events": "Keine wichtigen Ereignisse",
"Resume": "Fortsetzen",
"Edit": "Bearbeiten",
"Delete": "Löschen",
"Current": "Aktuell",
"Uptime": "Verfügbarkeit",
"Cert Exp.": "Zertifikatsablauf",
"day": "Tag | Tage",
"-day": "-Tage",
"hour": "Stunde",
"-hour": "-Stunden",
"checkEverySecond": "Überprüfe alle {0} Sekunden",
"Response": "Antwortzeit",
"Ping": "Ping",
"Monitor Type": "Monitor-Typ",
"Keyword": "Suchwort",
"Friendly Name": "Anzeigename",
"URL": "URL",
"Hostname": "Hostname",
"Port": "Port",
"Heartbeat Interval": "Prüfintervall",
"Retries": "Wiederholungen",
"retriesDescription": "Maximale Anzahl von Wiederholungen, bevor der Dienst als inaktiv markiert und eine Benachrichtigung gesendet wird.",
"Advanced": "Erweitert",
"ignoreTLSError": "Ignoriere TLS-/SSL-Fehler von Webseiten",
"Upside Down Mode": "Umgekehrter Modus",
"upsideDownModeDescription": "Im umgekehrten Modus wird der Dienst als inaktiv angezeigt, wenn er erreichbar ist.",
"Max. Redirects": "Max. Weiterleitungen",
"maxRedirectDescription": "Maximale Anzahl von Weiterleitungen, denen gefolgt werden soll. Auf 0 setzen, um Weiterleitungen zu deaktivieren.",
"Accepted Status Codes": "Erlaubte HTTP-Statuscodes",
"acceptedStatusCodesDescription": "Statuscodes auswählen, die als erfolgreiche Verbindung gelten sollen.",
"Save": "Speichern",
"Notifications": "Benachrichtigungen",
"Not available, please setup.": "Nicht verfügbar, bitte einrichten.",
"Setup Notification": "Benachrichtigung einrichten",
"Light": "Hell",
"Dark": "Dunkel",
"Auto": "Auto",
"Theme - Heartbeat Bar": "Erscheinungsbild - Zeitleiste",
"Normal": "Normal",
"Bottom": "Unten",
"None": "Keine",
"Timezone": "Zeitzone",
"Search Engine Visibility": "Sichtbarkeit für Suchmaschinen",
"Allow indexing": "Indizierung zulassen",
"Discourage search engines from indexing site": "Suchmaschinen darum bitten, die Seite nicht zu indizieren",
"Change Password": "Passwort ändern",
"Current Password": "Aktuelles Passwort",
"New Password": "Neues Passwort",
"Repeat New Password": "Neues Passwort wiederholen",
"passwordNotMatchMsg": "Passwörter stimmen nicht überein.",
"Update Password": "Passwort aktualisieren",
"Disable Auth": "Authentifizierung deaktivieren",
"Enable Auth": "Authentifizierung aktivieren",
"disableauth.message1": "Bist du sicher das du die <strong>Authentifizierung deaktivieren</strong> möchtest?",
"disableauth.message2": "Dies ist für Szenarien gedacht, <strong>in denen man eine externe Authentifizierung</strong> vor Uptime Kuma geschaltet hat, wie z.B. Cloudflare Access, Authelia oder andere Authentifizierungsmechanismen.",
"Please use this option carefully!": "Bitte mit Vorsicht nutzen!",
"Logout": "Ausloggen",
"notificationDescription": "Benachrichtigungen müssen einem Monitor zugewiesen werden, damit diese funktionieren.",
"Leave": "Verlassen",
"I understand, please disable": "Ich verstehe, bitte deaktivieren",
"Confirm": "Bestätigen",
"Yes": "Ja",
"No": "Nein",
"Username": "Benutzername",
"Password": "Passwort",
"Remember me": "Angemeldet bleiben",
"Login": "Einloggen",
"No Monitors, please": "Keine Monitore, bitte",
"add one": "hinzufügen",
"Notification Type": "Benachrichtigungsdienst",
"Email": "E-Mail",
"Test": "Test",
"Certificate Info": "Zertifikatsinformation",
"keywordDescription": "Ein Suchwort in der HTML- oder JSON-Ausgabe finden. Bitte beachte: es wird zwischen Gross-/Kleinschreibung unterschieden.",
"deleteMonitorMsg": "Bist du sicher, dass du den Monitor löschen möchtest?",
"deleteNotificationMsg": "Möchtest du diese Benachrichtigung wirklich für alle Monitore löschen?",
"resolverserverDescription": "Cloudflare ist als der Standardserver festgelegt. Dieser kann jederzeit geändert werden.",
"Resolver Server": "Auflösungsserver",
"rrtypeDescription": "Wähle den RR-Typ aus, welchen du überwachen möchtest.",
"Last Result": "Letztes Ergebnis",
"pauseMonitorMsg": "Bist du sicher, dass du den Monitor pausieren möchtest?",
"clearEventsMsg": "Bist du sicher, dass du alle Ereignisse für diesen Monitor löschen möchtest?",
"clearHeartbeatsMsg": "Bist du sicher, dass du alle Statistiken für diesen Monitor löschen möchtest?",
"Clear Data": "Lösche Daten",
"Events": "Ereignisse",
"Heartbeats": "Statistiken",
"confirmClearStatisticsMsg": "Bist du dir sicher, dass du ALLE Statistiken löschen möchtest?",
"Create your admin account": "Erstelle dein Admin-Konto",
"Repeat Password": "Passwort erneut eingeben",
"Resource Record Type": "Ressourcen Record Typ",
"Export": "Export",
"Import": "Import",
"respTime": "Antw.-Zeit (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Standardmässig aktiviert",
"Apply on all existing monitors": "Auf alle existierenden Monitore anwenden",
"enableDefaultNotificationDescription": "Für jeden neuen Monitor wird diese Benachrichtigung standardmässig aktiviert. Die Benachrichtigung kann weiterhin für jeden Monitor separat deaktiviert werden.",
"Create": "Erstellen",
"Auto Get": "Auto Get",
"backupDescription": "Es können alle Monitore und Benachrichtigungen in einer JSON-Datei gesichert werden.",
"backupDescription2": "PS: Verlaufs- und Ereignisdaten sind nicht enthalten.",
"backupDescription3": "Sensible Daten wie Benachrichtigungs-Token sind in der Exportdatei enthalten, bitte bewahre sie sorgfältig auf.",
"alertNoFile": "Bitte wähle eine Datei zum Importieren aus.",
"alertWrongFileType": "Bitte wähle eine JSON-Datei aus.",
"Clear all statistics": "Lösche alle Statistiken",
"importHandleDescription": "Wähle 'Vorhandene überspringen' aus, wenn jeder Monitor oder jede Benachrichtigung mit demselben Namen übersprungen werden soll. 'Überschreiben' löscht jeden vorhandenen Monitor sowie Benachrichtigungen.",
"Skip existing": "Vorhandene überspringen",
"Overwrite": "Überschreiben",
"Options": "Optionen",
"confirmImportMsg": "Möchtest du das Backup wirklich importieren? Bitte stelle sicher, dass die richtige Import-Option ausgewählt ist.",
"Keep both": "Beide behalten",
"twoFAVerifyLabel": "Bitte trage deinen Token ein, um zu verifizieren, dass 2FA funktioniert",
"Verify Token": "Token verifizieren",
"Setup 2FA": "2FA einrichten",
"Enable 2FA": "2FA aktivieren",
"Disable 2FA": "2FA deaktivieren",
"2FA Settings": "2FA-Einstellungen",
"confirmEnableTwoFAMsg": "Bist du sicher, dass du 2FA aktivieren möchtest?",
"confirmDisableTwoFAMsg": "Bist du sicher, dass du 2FA deaktivieren möchtest?",
"tokenValidSettingsMsg": "Token gültig! Du kannst jetzt die 2FA-Einstellungen speichern.",
"Two Factor Authentication": "Zwei-Faktor-Authentifizierung",
"Active": "Aktiv",
"Inactive": "Inaktiv",
"Token": "Token",
"Show URI": "URI anzeigen",
"Tags": "Tags",
"Add New below or Select...": "Einen bestehenden Tag auswählen oder neuen hinzufügen…",
"Tag with this name already exist.": "Ein Tag mit diesem Namen existiert bereits.",
"Tag with this value already exist.": "Ein Tag mit diesem Wert existiert bereits.",
"color": "Farbe",
"value (optional)": "Wert (optional)",
"Gray": "Grau",
"Red": "Rot",
"Orange": "Orange",
"Green": "Grün",
"Blue": "Blau",
"Indigo": "Indigo",
"Purple": "Lila",
"Pink": "Pink",
"Search...": "Suchen…",
"Heartbeat Retry Interval": "Überprüfungsintervall",
"Resend Notification if Down X times consequently": "Benachrichtigung erneut senden, wenn Inaktiv X mal hintereinander",
"retryCheckEverySecond": "Alle {0} Sekunden neu versuchen",
"resendEveryXTimes": "Erneut versenden alle {0} mal",
"resendDisabled": "Erneut versenden deaktiviert",
"Import Backup": "Backup importieren",
"Export Backup": "Backup exportieren",
"Avg. Ping": "Ping ø",
"Avg. Response": "Antwortzeit ø",
"Entry Page": "Einstiegsseite",
"statusPageNothing": "Noch ist hier nichts. Bitte füge eine Gruppe oder einen Monitor hinzu.",
"No Services": "Keine Dienste",
"All Systems Operational": "Alle Systeme betriebsbereit",
"Partially Degraded Service": "Teilweise beeinträchtigter Dienst",
"Degraded Service": "Eingeschränkter Dienst",
"Add Group": "Gruppe hinzufügen",
"Add a monitor": "Monitor hinzufügen",
"Edit Status Page": "Bearbeite Status-Seite",
"Go to Dashboard": "Gehe zum Dashboard",
"Status Page": "Status-Seite",
"Status Pages": "Status-Seiten",
"telegram": "Telegram",
"webhook": "Webhook",
"smtp": "E-Mail (SMTP)",
"discord": "Discord",
"teams": "Microsoft Teams",
"signal": "Signal",
"gotify": "Gotify",
"slack": "Slack",
"rocket.chat": "Rocket.chat",
"pushover": "Pushover",
"pushy": "Pushy",
"octopush": "Octopush",
"promosms": "PromoSMS",
"lunasea": "LunaSea",
"apprise": "Apprise (Unterstützung für 50+ Benachrichtigungsdienste)",
"GoogleChat": "Google Chat (nur Google Workspace)",
"pushbullet": "Pushbullet",
"line": "Line Messenger",
"mattermost": "Mattermost",
"Primary Base URL": "Primär URL",
"Push URL": "Push URL",
"needPushEvery": "Du solltest diese URL alle {0} Sekunden aufrufen",
"pushOptionalParams": "Optionale Parameter: {0}",
"defaultNotificationName": "Mein {notification} Alarm ({number})",
"here": "hier",
"Required": "Erforderlich",
"Bot Token": "Bot Token",
"wayToGetTelegramToken": "Hier kannst du einen Token erhalten {0}.",
"Chat ID": "Chat ID",
"supportTelegramChatID": "Unterstützt Direkt Chat / Gruppe / Kanal Chat-ID's",
"wayToGetTelegramChatID": "Du kannst die Chat-ID erhalten, indem du eine Nachricht an den Bot sendest und zu dieser URL gehst, um die chat_id: zu sehen.",
"YOUR BOT TOKEN HERE": "HIER DEIN BOT TOKEN",
"chatIDNotFound": "Chat-ID wurde nicht gefunden: bitte sende zuerst eine Nachricht an diesen Bot",
"Post URL": "Post URL",
"Content Type": "Content Type",
"webhookJsonDesc": "{0} ist gut für alle modernen HTTP-Server, wie z.B. Express.js, geeignet",
"webhookFormDataDesc": "{multipart} ist gut für PHP. Das JSON muss mit {decodeFunction} verarbeitet werden",
"secureOptionNone": "Keine / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "TLS-Fehler ignorieren",
"From Email": "Absender E-Mail",
"emailCustomSubject": "Benutzerdefinierter Betreff",
"To Email": "Empfänger E-Mail",
"smtpCC": "CC",
"smtpBCC": "BCC",
"Discord Webhook URL": "Discord Webhook URL",
"wayToGetDiscordURL": "Du kannst diese erhalten, indem du zu den Servereinstellungen gehst -> Integrationen -> Neuer Webhook",
"Bot Display Name": "Bot-Anzeigename",
"Prefix Custom Message": "Benutzerdefinierter Nachrichten Präfix",
"Hello @everyone is...": "Hallo {'@'}everyone ist…",
"Webhook URL": "Webhook URL",
"wayToGetTeamsURL": "Wie eine Webhook-URL erstellt werden kann, erfährst du {0}.",
"Number": "Nummer",
"Recipients": "Empfänger",
"needSignalAPI": "Es wird ein Signal Client mit REST-API benötigt.",
"wayToCheckSignalURL": "Du kannst diese URL aufrufen, um zu sehen, wie du eine einrichtest:",
"signalImportant": "WICHTIG: Gruppen und Nummern können in Empfängern nicht gemischt werden!",
"Application Token": "Anwendungstoken",
"Server URL": "Server URL",
"Priority": "Priorität",
"Icon Emoji": "Icon Emoji",
"Channel Name": "Kanalname",
"Uptime Kuma URL": "Uptime Kuma URL",
"aboutWebhooks": "Weitere Informationen zu Webhooks auf: {0}",
"aboutChannelName": "Gebe den Kanalnamen ein in {0} Feld Kanalname, falls du den Webhook-Kanal umgehen möchtest. Ex: #other-channel",
"aboutKumaURL": "Wenn das Feld für die Uptime Kuma URL leer gelassen wird, wird standardmässig die GitHub Projekt Seite verwendet.",
"emojiCheatSheet": "Emoji Cheat Sheet: {0}",
"User Key": "Benutzerschlüssel",
"Device": "Gerät",
"Message Title": "Nachrichtentitel",
"Notification Sound": "Benachrichtigungston",
"More info on:": "Mehr Infos auf: {0}",
"pushoverDesc1": "Notfallpriorität (2) hat standardmässig 30 Sekunden Auszeit zwischen den Versuchen und läuft nach 1 Stunde ab.",
"pushoverDesc2": "Fülle das Geräte Feld aus, wenn du Benachrichtigungen an verschiedene Geräte senden möchtest.",
"SMS Type": "SMS Typ",
"octopushTypePremium": "Premium (Schnell - zur Benachrichtigung empfohlen)",
"octopushTypeLowCost": "Kostengünstig (Langsam - manchmal vom Betreiber gesperrt)",
"checkPrice": "Prüfe {0} Preise:",
"octopushLegacyHint": "Verwendest du die Legacy-Version von Octopush (2011-2020) oder die neue Version?",
"Check octopush prices": "Vergleiche die Oktopush Preise {0}.",
"octopushPhoneNumber": "Telefonnummer (Internationales Format, z.B : +49612345678) ",
"octopushSMSSender": "Name des SMS-Absenders : 3-11 alphanumerische Zeichen und Leerzeichen (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea Geräte ID",
"Apprise URL": "Apprise URL",
"Example:": "Beispiel: {0}",
"Read more:": "Weiterlesen: {0}",
"Status:": "Status: {0}",
"Read more": "Weiterlesen",
"appriseInstalled": "Apprise ist installiert.",
"appriseNotInstalled": "Apprise ist nicht installiert. {0}",
"Access Token": "Access Token",
"Channel access token": "Channel access token",
"Line Developers Console": "Line Developers Console",
"lineDevConsoleTo": "Line Developers Console - {0}",
"Basic Settings": "Basic Settings",
"User ID": "User ID",
"Messaging API": "Messaging API",
"wayToGetLineChannelToken": "Rufe zuerst {0} auf, erstelle dann einen Provider und Channel (Messaging API). Als nächstes kannst du den Channel access token und die User ID aus den oben genannten Menüpunkten abrufen.",
"Icon URL": "Icon URL",
"aboutIconURL": "Du kannst einen Link zu einem Bild in 'Icon URL' übergeben um das Standardprofilbild zu überschreiben. Wird nicht verwendet, wenn ein Icon Emoji gesetzt ist.",
"aboutMattermostChannelName": "Du kannst den Standardkanal, auf dem der Webhook gesendet wird überschreiben, indem der Kanalnamen in das Feld 'Channel Name' eingeben wird. Dies muss in den Mattermost Webhook-Einstellungen aktiviert werden. Ex: #other-channel",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO - billig, aber langsam und oft überladen. Auf polnische Empfänger beschränkt.",
"promosmsTypeFlash": "SMS FLASH - Die Nachricht wird automatisch auf dem Empfängergerät angezeigt. Auf polnische Empfänger beschränkt.",
"promosmsTypeFull": "SMS FULL - Premium Stufe von SMS, es kann der Absendernamen verwendet werden (Der Name musst zuerst registriert werden). Zuverlässig für Warnungen.",
"promosmsTypeSpeed": "SMS SPEED - Höchste Priorität im System. Sehr schnell und zuverlässig, aber teuer (Ungefähr das doppelte von SMS FULL).",
"promosmsPhoneNumber": "Telefonnummer (für polnische Empfänger können die Vorwahlen übersprungen werden)",
"promosmsSMSSender": "Name des SMS-Absenders : vorregistrierter Name oder einer der Standardwerte: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu Webhook URL",
"matrixHomeserverURL": "Heimserver URL (mit http(s):// und optionalen Ports)",
"Internal Room Id": "Interne Raum-ID",
"matrixDesc1": "Die interne Raum-ID findest du im erweiterten Bereich der Raumeinstellungen im Matrix-Client. Es sollte aussehen wie z.B. !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Es wird dringend empfohlen einen neuen Benutzer anzulegen und nicht den Zugriffstoken deines eigenen Matrix-Benutzers zu verwenden. Anderenfalls ermöglicht es vollen Zugriff auf dein Konto und alle Räume, denen du beigetreten bist. Erstelle stattdessen einen neuen Benutzer und lade ihn nur in den Raum ein, in dem du die Benachrichtigung erhalten möchtest. Du kannst den Zugriffstoken erhalten, indem du Folgendes ausführst {0}",
"Method": "Method",
"Body": "Body",
"Headers": "Headers",
"PushUrl": "Push URL",
"HeadersInvalidFormat": "Der Header ist kein gültiges JSON: ",
"BodyInvalidFormat": "Der Body ist kein gültiges JSON: ",
"Monitor History": "Monitor Verlauf",
"clearDataOlderThan": "Bewahre die Aufzeichnungsdaten für {0} Tage auf.",
"PasswordsDoNotMatch": "Passwörter stimmen nicht überein.",
"records": "Einträge",
"One record": "Ein Eintrag",
"steamApiKeyDescription": "Um einen Steam Game Server zu überwachen, wird ein Steam Web-API-Schlüssel benötigt. Dieser kann hier registriert werden: ",
"Current User": "Aktueller Benutzer",
"recent": "Letzte",
"Done": "Fertig",
"Info": "Info",
"Security": "Sicherheit",
"Steam API Key": "Steam API Key",
"Shrink Database": "Datenbank verkleinern",
"Pick a RR-Type...": "Wähle ein RR-Typ aus…",
"Pick Accepted Status Codes...": "Wähle akzeptierte Statuscodes aus…",
"Default": "Standard",
"HTTP Options": "HTTP Optionen",
"Create Incident": "Vorfall erstellen",
"Title": "Titel",
"Content": "Inhalt",
"Style": "Stil",
"info": "info",
"warning": "warnung",
"danger": "gefahr",
"primary": "primär",
"light": "hell",
"dark": "dunkel",
"Post": "Eintrag",
"Please input title and content": "Bitte Titel und Inhalt eingeben",
"Created": "Erstellt",
"Last Updated": "Zuletzt aktualisiert",
"Unpin": "Loslösen",
"Switch to Light Theme": "Zu hellem Thema wechseln",
"Switch to Dark Theme": "Zum dunklen Thema wechseln",
"Show Tags": "Tags anzeigen",
"Hide Tags": "Tags ausblenden",
"Description": "Beschreibung",
"No monitors available.": "Keine Monitore verfügbar.",
"Add one": "Hinzufügen",
"No Monitors": "Keine Monitore",
"Untitled Group": "Gruppe ohne Titel",
"Services": "Dienste",
"Discard": "Verwerfen",
"Cancel": "Abbrechen",
"Powered by": "Powered by",
"shrinkDatabaseDescription": "Löse VACUUM für die SQLite Datenbank aus. Wenn die Datenbank nach 1.10.0 erstellt wurde, ist AUTO_VACUUM bereits aktiviert und diese Aktion ist nicht erforderlich.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Benutzername (inkl. webapi_ prefix)",
"serwersmsAPIPassword": "API Passwort",
"serwersmsPhoneNumber": "Telefonnummer",
"serwersmsSenderName": "Name des SMS-Absenders (über Kundenportal registriert)",
"stackfield": "Stackfield",
"clicksendsms": "ClickSend SMS",
"apiCredentials": "API Zugangsdaten",
"smtpDkimSettings": "DKIM Einstellungen",
"smtpDkimDesc": "Details zur Konfiguration sind in der Nodemailer DKIM {0} zu finden.",
"documentation": "Dokumentation",
"smtpDkimDomain": "Domain Name",
"smtpDkimKeySelector": "Schlüssel Auswahl",
"smtpDkimPrivateKey": "Privater Schlüssel",
"smtpDkimHashAlgo": "Hash-Algorithmus (Optional)",
"smtpDkimheaderFieldNames": "Zu validierende Header-Schlüssel (optional)",
"smtpDkimskipFields": "Zu ignorierende Header Schlüssel (optional)",
"PushByTechulus": "Push by Techulus",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "API Endpunkt",
"alertaEnvironment": "Umgebung",
"alertaApiKey": "API Schlüssel",
"alertaAlertState": "Alarmstatus",
"alertaRecoverState": "Wiederherstellungsstatus",
"deleteStatusPageMsg": "Bist du sicher, dass du diese Status-Seite löschen willst?",
"Proxies": "Proxies",
"default": "Standard",
"enabled": "Aktiviert",
"setAsDefault": "Als Standard setzen",
"deleteProxyMsg": "Bist du sicher, dass du diesen Proxy für alle Monitore löschen willst?",
"proxyDescription": "Proxies müssen einem Monitor zugewiesen werden, um zu funktionieren.",
"enableProxyDescription": "Dieser Proxy wird keinen Effekt auf Monitor-Anfragen haben, bis er aktiviert ist. Du kannst ihn temporär von allen Monitoren nach Aktivierungsstatus deaktivieren.",
"setAsDefaultProxyDescription": "Dieser Proxy wird standardmässig für alle neuen Monitore aktiviert sein. Du kannst den Proxy immer noch für jeden Monitor einzeln deaktivieren.",
"Certificate Chain": "Zertifikatskette",
"Valid": "Gültig",
"Invalid": "Ungültig",
"AccessKeyId": "AccessKey ID",
"SecretAccessKey": "AccessKey Secret",
"PhoneNumbers": "Telefonnummern",
"TemplateCode": "Vorlagencode",
"SignName": "Signaturname",
"Sms template must contain parameters: ": "SMS Vorlage muss folgende Parameter enthalten: ",
"Bark Endpoint": "Bark Endpunkt",
"WebHookUrl": "Webhook URL",
"SecretKey": "Geheimer Schlüssel",
"For safety, must use secret key": "Zur Sicherheit muss ein geheimer Schlüssel verwendet werden",
"Device Token": "Gerätetoken",
"Platform": "Platform",
"iOS": "iOS",
"Android": "Android",
"Huawei": "Huawei",
"High": "Hoch",
"Retry": "Wiederholungen",
"Topic": "Thema",
"WeCom Bot Key": "WeCom Bot Schlüssel",
"Setup Proxy": "Proxy einrichten",
"Proxy Protocol": "Proxy Protokoll",
"Proxy Server": "Proxy-Server",
"Proxy server has authentication": "Proxy-Server hat Authentifizierung",
"User": "Benutzer",
"Installed": "Installiert",
"Not installed": "Nicht installiert",
"Running": "Läuft",
"Not running": "Gestoppt",
"Remove Token": "Token entfernen",
"Start": "Start",
"Stop": "Stop",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "Neue Status-Seite hinzufügen",
"Slug": "Slug",
"Accept characters:": "Akzeptierte Zeichen:",
"startOrEndWithOnly": "Nur mit {0} anfangen und enden",
"No consecutive dashes": "Keine aufeinanderfolgenden Bindestriche",
"Next": "Weiter",
"The slug is already taken. Please choose another slug.": "Der Slug ist bereits in Verwendung. Bitte wähle einen anderen.",
"No Proxy": "Kein Proxy",
"Authentication": "Authentifizierung",
"HTTP Basic Auth": "HTTP Basisauthentifizierung",
"New Status Page": "Neue Status-Seite",
"Page Not Found": "Seite nicht gefunden",
"Reverse Proxy": "Reverse Proxy",
"Backup": "Sicherung",
"About": "Über",
"wayToGetCloudflaredURL": "(Lade Cloudflare von {0} herunter)",
"cloudflareWebsite": "Cloudflare Website",
"Message:": "Nachricht:",
"Don't know how to get the token? Please read the guide:": "Du weisst nicht, wie man den Token bekommt? Lies die Anleitung dazu:",
"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.": "Die aktuelle Verbindung kann unterbrochen werden, wenn du aktuell über Cloudflare Tunnel verbunden bist. Bist du sicher, dass du es stoppen willst? Gib zur Bestätigung dein aktuelles Passwort ein.",
"Other Software": "Andere Software",
"For example: nginx, Apache and Traefik.": "Zum Beispiel: nginx, Apache und Traefik.",
"Please read": "Bitte lesen",
"Subject:": "Betreff:",
"Valid To:": "Gültig bis:",
"Days Remaining:": "Tage verbleibend:",
"Issuer:": "Aussteller:",
"Fingerprint:": "Fingerabdruck:",
"No status pages": "Keine Status-Seiten",
"Domain Name Expiry Notification": "Benachrichtigung bei Ablauf des Domainnamens",
"Customize": "Anpassen",
"Custom Footer": "Eigener Footer",
"Custom CSS": "Eigenes CSS",
"Footer Text": "Fusszeile",
"Show Powered By": "Zeige 'Powered By'",
"Date Created": "Erstellt am",
"Domain Names": "Domainnamen",
"signedInDisp": "Angemeldet als {0}",
"signedInDispDisabled": "Authentifizierung deaktiviert.",
"dnsPortDescription": "DNS server port. Standard ist 53. Der Port kann jederzeit geändert werden.",
"topic": "Thema",
"topicExplanation": "MQTT Thema für den monitor",
"successMessage": "Erfolgsnachricht",
"successMessageExplanation": "MQTT Nachricht, die als Erfolg angesehen wird",
"error": "Fehler",
"critical": "kritisch",
"wayToGetPagerDutyKey": "Dieser kann unter Service -> Service Directory -> (Select a service) -> Integrations -> Add integration gefunden werden. Hier muss nach \"Events API V2\" gesucht werden. Mehr informationen {0}",
"Integration Key": "Schlüssel der Integration",
"Integration URL": "URL der Integration",
"Auto resolve or acknowledged": "Automatisch lösen oder bestätigen",
"do nothing": "nichts tun",
"auto acknowledged": "automatisch bestätigen",
"auto resolve": "automatisch lösen",
"Bark Group": "Bark Gruppe",
"Bark Sound": "Bark Klang",
"HTTP Headers": "HTTP Kopfzeilen",
"Trust Proxy": "Vertrauenswürdiger Proxy",
"Proxy": "Proxy",
"HomeAssistant": "Home Assistant",
"onebotHttpAddress": "OneBot HTTP Adresse",
"onebotMessageType": "OneBot Nachrichtentyp",
"onebotGroupMessage": "Gruppe",
"onebotPrivateMessage": "Privat",
"onebotUserOrGroupId": "Gruppe/Nutzer ID",
"onebotSafetyTips": "Zur Sicherheit ein access token setzen",
"PushDeer Key": "PushDeer Schlüssel",
"RadiusSecret": "Radius Geheimnis",
"RadiusSecretDescription": "Geteiltes Geheimnis zwischen Client und Server",
"RadiusCalledStationId": "ID der angesprochenen Station",
"RadiusCalledStationIdDescription": "Identifikation des angesprochenen Geräts",
"RadiusCallingStationId": "ID der ansprechenden Station",
"RadiusCallingStationIdDescription": "Identifikation des ansprechenden Geräts",
"Certificate Expiry Notification": "Benachrichtigung ablaufendes Zertifikat",
"API Username": "API Nutzername",
"API Key": "API Schlüssel",
"Recipient Number": "Empfängernummer",
"From Name/Number": "Von Name/Nummer",
"Leave blank to use a shared sender number.": "Leer lassen um eine geteilte Absendernummer zu nutzen.",
"Octopush API Version": "Octopush API Version",
"Legacy Octopush-DM": "Legacy Octopush-DM",
"endpoint": "Endpunkt",
"octopushAPIKey": "\"API Schlüssel\" der HTTP API Zugangsdaten im control panel",
"octopushLogin": "\"Login\" der HTTP API Zugangsdaten im control panel",
"promosmsLogin": "API Login Name",
"promosmsPassword": "API Password",
"pushoversounds pushover": "Pushover (Standard)",
"pushoversounds bike": "Fahrrad",
"pushoversounds bugle": "Signalhorn",
"pushoversounds cashregister": "Kasse",
"pushoversounds classical": "Klassisch",
"pushoversounds cosmic": "Kosmisch",
"pushoversounds falling": "Abfallend",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "Eingang",
"pushoversounds intermission": "Pause",
"pushoversounds magic": "Magisch",
"pushoversounds mechanical": "Mechanisch",
"pushoversounds pianobar": "Piano Bar",
"pushoversounds siren": "Sirene",
"pushoversounds spacealarm": "Space Alarm",
"pushoversounds tugboat": "Schlepper Horn",
"pushoversounds alien": "Ausserirdisch (lang)",
"pushoversounds climb": "Ansteigende (lang)",
"pushoversounds persistent": "Hartnäckig (lang)",
"pushoversounds echo": "Pushover Echo (lang)",
"pushoversounds updown": "Auf und Ab (lang)",
"pushoversounds vibrate": "Nur vibrieren",
"pushoversounds none": "Nichts (Stille)",
"pushyAPIKey": "Geheimer API Schlüssel",
"pushyToken": "Gerätetoken",
"Show update if available": "Verfügbare Updates anzeigen",
"Also check beta release": "Auch nach beta Versionen schauen",
"Using a Reverse Proxy?": "Wird ein Reverse Proxy genutzt?",
"Check how to config it for WebSocket": "Prüfen, wie er für die Nutzung mit WebSocket konfiguriert wird",
"Steam Game Server": "Steam Game Server",
"Most likely causes:": "Wahrscheinliche Ursachen:",
"The resource is no longer available.": "Die Quelle ist nicht mehr verfügbar.",
"There might be a typing error in the address.": "Es gibt einen Tippfehler in der Adresse.",
"What you can try:": "Was du versuchen kannst:",
"Retype the address.": "Schreibe die Adresse erneut.",
"Go back to the previous page.": "Gehe zur vorigen Seite.",
"Coming Soon": "Kommt bald",
"wayToGetClickSendSMSToken": "Du kannst einen API Nutzernamen und Schlüssel unter {0} erhalten.",
"Connection String": "Verbindungstext",
"Query": "Abfrage",
"settingsCertificateExpiry": "TLS Zertifikatsablauf",
"certificationExpiryDescription": "HTTPS Monitore senden eine Benachrichtigung, wenn das Zertifikat abläuft in:",
"Setup Docker Host": "Docker Host einrichten",
"Connection Type": "Verbindungstyp",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "Bist du sicher diesen docker host für alle Monitore zu löschen?",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Docker Container",
"Container Name / ID": "Container Name / ID",
"Docker Host": "Docker Host",
"Docker Hosts": "Docker Hosts",
"ntfy Topic": "ntfy Thema",
"Domain": "Domain",
"Workstation": "Workstation",
"disableCloudflaredNoAuthMsg": "Du bist im nicht-authentifizieren Modus, ein Passwort wird nicht benötigt.",
"trustProxyDescription": "Vertraue 'X-Forwarded-*' headern. Wenn man die richtige client IP haben möchte und Uptime Kuma hinter einem Proxy wie Nginx or Apache läuft, wollte dies aktiviert werden.",
"wayToGetLineNotifyToken": "Du kannst hier ein Token erhalten: {0}",
"Examples": "Beispiele",
"Home Assistant URL": "Home Assistant URL",
"Long-Lived Access Token": "Lange gültiges Access Token",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Lange gültige Access Token können durch klicken auf den Profilnamen (unten links) und dann einen Klick auf Create Token am Ende erstellt werden. ",
"Notification Service": "Benachrichtigungsdienst",
"default: notify all devices": "standard: Alle Geräte benachrichtigen",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Eine Liste der Benachrichtigungsdienste kann im Home Assistant unter \"Developer Tools > Services\" gefunden werden, wnen man nach \"notification\" sucht um den Geräte-/Telefonnamen zu finden.",
"Automations can optionally be triggered in Home Assistant:": "Automatisierungen können optional im Home Assistant ausgelöst werden:",
"Trigger type:": "Auslöser:",
"Event type:": "Ereignistyp:",
"Event data:": "Ereignis daten:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Dann eine Aktion wählen, zum Beispiel eine Scene wählen in der ein RGB Licht rot ist.",
"Frontend Version": "Frontend Version",
"Frontend Version do not match backend version!": "Die Frontend Version stimmt nicht mit der backend version überein!",
"Maintenance": "Wartung",
"statusMaintenance": "Wartung",
"Schedule maintenance": "Geplante Wartung",
"Affected Monitors": "Betroffene Monitore",
"Pick Affected Monitors...": "Wähle betroffene Monitore…",
"Start of maintenance": "Beginn der Wartung",
"All Status Pages": "Alle Status Seiten",
"Select status pages...": "Wähle Status Seiten…",
"recurringIntervalMessage": "einmal pro Tag ausgeführt | Wird alle {0} Tage ausgführt",
"affectedMonitorsDescription": "Wähle alle Monitore die von der Wartung betroffen sind",
"affectedStatusPages": "Zeige diese Nachricht auf ausgewählten Status Seiten",
"atLeastOneMonitor": "Wähle mindestens einen Monitor",
"deleteMaintenanceMsg": "Möchtest du diese Wartung löschen?",
"Base URL": "Basis URL",
"goAlertInfo": "GoAlert ist eine Open-Source Applikation für Rufbereitschaftsplanung, automatische Eskalation und Benachrichtigung (z.B. SMS oder Telefonanrufe). Beauftragen Sie automatisch die richtige Person, auf die richtige Art und Weise und zum richtigen Zeitpunkt. {0}",
"goAlertIntegrationKeyInfo": "Bekommt einen generischen API Schlüssel in folgenden Format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\". Normalerweise entspricht dies dem Wert des Token aus der URL.",
"goAlert": "GoAlert",
"backupOutdatedWarning": "Veraltet: Eine menge Neuerungen sind eingeflossen und diese Funktion wurde etwas vernachlässigt worden. Es kann kein vollständiges Backup erstellt oder eingespielt werden.",
"backupRecommend": "Bitte Backup das Volume oder den Ordner (./ data /) selbst.",
"Optional": "Optional",
"squadcast": "Squadcast",
"SendKey": "SendKey",
"SMSManager API Docs": "SMSManager API Dokumente",
"Gateway Type": "Gateway Type",
"SMSManager": "SMSManager",
"You can divide numbers with": "Du kannst Zahlen teilen mit",
"or": "oder",
"recurringInterval": "Intervall",
"Recurring": "Wiederkehrend",
"strategyManual": "Active/Inactive Manually",
"warningTimezone": "Es wird die Zeitzone des Servers genutzt",
"weekdayShortMon": "Mo",
"weekdayShortTue": "Di",
"weekdayShortWed": "Mi",
"weekdayShortThu": "Do",
"weekdayShortFri": "Fr",
"weekdayShortSat": "Sa",
"weekdayShortSun": "So",
"dayOfWeek": "Tag der Woche",
"dayOfMonth": "Tag im Monat",
"lastDay": "Letzter Tag",
"lastDay1": "Letzter Tag im Monat",
"lastDay2": "Vorletzer Tag im Monat",
"lastDay3": "3. letzter Tag im Monat",
"lastDay4": "4. letzter Tag im Monat",
"No Maintenance": "Keine Wartung",
"pauseMaintenanceMsg": "Möchtest du wirklich pausieren?",
"maintenanceStatus-under-maintenance": "Unter Wartung",
"maintenanceStatus-inactive": "Inaktiv",
"maintenanceStatus-scheduled": "Geplant",
"maintenanceStatus-ended": "Ende",
"maintenanceStatus-unknown": "Unbekannt",
"Display Timezone": "Zeitzone anzeigen",
"Server Timezone": "Server Zeitzone"
}

647
src/lang/de-DE.json Normal file
View File

@@ -0,0 +1,647 @@
{
"languageName": "Deutsch (Deutschland)",
"Settings": "Einstellungen",
"Dashboard": "Dashboard",
"New Update": "Update verfügbar",
"Language": "Sprache",
"Appearance": "Erscheinungsbild",
"Theme": "Erscheinungsbild",
"General": "Allgemein",
"Version": "Version",
"Check Update On GitHub": "Auf GitHub nach Updates suchen",
"List": "Liste",
"Add": "Hinzufügen",
"Add New Monitor": "Neuen Monitor hinzufügen",
"Quick Stats": "Übersicht",
"Up": "Aktiv",
"Down": "Inaktiv",
"Pending": "Ausstehend",
"Unknown": "Unbekannt",
"Pause": "Pausieren",
"pauseDashboardHome": "Pausiert",
"Name": "Name",
"Status": "Status",
"DateTime": "Datum / Uhrzeit",
"Message": "Nachricht",
"No important events": "Keine wichtigen Ereignisse",
"Resume": "Fortsetzen",
"Edit": "Bearbeiten",
"Delete": "Löschen",
"Current": "Aktuell",
"Uptime": "Verfügbarkeit",
"Cert Exp.": "Zertifikatsablauf",
"day": "Tag | Tage",
"-day": "-Tage",
"hour": "Stunde",
"-hour": "-Stunden",
"checkEverySecond": "Überprüfe alle {0} Sekunden",
"Response": "Antwortzeit",
"Ping": "Ping",
"Monitor Type": "Monitor-Typ",
"Keyword": "Suchwort",
"Friendly Name": "Anzeigename",
"URL": "URL",
"Hostname": "Hostname",
"Port": "Port",
"Heartbeat Interval": "Prüfintervall",
"Retries": "Wiederholungen",
"retriesDescription": "Maximale Anzahl von Wiederholungen, bevor der Dienst als inaktiv markiert und eine Benachrichtigung gesendet wird.",
"Advanced": "Erweitert",
"ignoreTLSError": "Ignoriere TLS-/SSL-Fehler von Webseiten",
"Upside Down Mode": "Umgekehrter Modus",
"upsideDownModeDescription": "Im umgekehrten Modus wird der Dienst als inaktiv angezeigt, wenn er erreichbar ist.",
"Max. Redirects": "Max. Weiterleitungen",
"maxRedirectDescription": "Maximale Anzahl von Weiterleitungen, denen gefolgt werden soll. Auf 0 setzen, um Weiterleitungen zu deaktivieren.",
"Accepted Status Codes": "Erlaubte HTTP-Statuscodes",
"acceptedStatusCodesDescription": "Statuscodes auswählen, die als erfolgreiche Verbindung gelten sollen.",
"Save": "Speichern",
"Notifications": "Benachrichtigungen",
"Not available, please setup.": "Nicht verfügbar, bitte einrichten.",
"Setup Notification": "Benachrichtigung einrichten",
"Light": "Hell",
"Dark": "Dunkel",
"Auto": "Auto",
"Theme - Heartbeat Bar": "Erscheinungsbild - Zeitleiste",
"Normal": "Normal",
"Bottom": "Unten",
"None": "Keine",
"Timezone": "Zeitzone",
"Search Engine Visibility": "Sichtbarkeit für Suchmaschinen",
"Allow indexing": "Indizierung zulassen",
"Discourage search engines from indexing site": "Suchmaschinen darum bitten, die Seite nicht zu indizieren",
"Change Password": "Passwort ändern",
"Current Password": "Aktuelles Passwort",
"New Password": "Neues Passwort",
"Repeat New Password": "Neues Passwort wiederholen",
"passwordNotMatchMsg": "Passwörter stimmen nicht überein.",
"Update Password": "Passwort aktualisieren",
"Disable Auth": "Authentifizierung deaktivieren",
"Enable Auth": "Authentifizierung aktivieren",
"disableauth.message1": "Bist du sicher das du die <strong>Authentifizierung deaktivieren</strong> möchtest?",
"disableauth.message2": "Dies ist für Szenarien gedacht, <strong>in denen man eine externe Authentifizierung</strong> vor Uptime Kuma geschaltet hat, wie z.B. Cloudflare Access, Authelia oder andere Authentifizierungsmechanismen.",
"Please use this option carefully!": "Bitte mit Vorsicht nutzen!",
"Logout": "Ausloggen",
"notificationDescription": "Benachrichtigungen müssen einem Monitor zugewiesen werden, damit diese funktionieren.",
"Leave": "Verlassen",
"I understand, please disable": "Ich verstehe, bitte deaktivieren",
"Confirm": "Bestätigen",
"Yes": "Ja",
"No": "Nein",
"Username": "Benutzername",
"Password": "Passwort",
"Remember me": "Angemeldet bleiben",
"Login": "Einloggen",
"No Monitors, please": "Keine Monitore, bitte",
"add one": "hinzufügen",
"Notification Type": "Benachrichtigungsdienst",
"Email": "E-Mail",
"Test": "Test",
"Certificate Info": "Zertifikatsinformation",
"keywordDescription": "Ein Suchwort in der HTML- oder JSON-Ausgabe finden. Bitte beachte: es wird zwischen Groß-/Kleinschreibung unterschieden.",
"deleteMonitorMsg": "Bist du sicher, dass du den Monitor löschen möchtest?",
"deleteNotificationMsg": "Möchtest du diese Benachrichtigung wirklich für alle Monitore löschen?",
"resolverserverDescription": "Cloudflare ist als der Standardserver festgelegt. Dieser kann jederzeit geändert werden.",
"Resolver Server": "Auflösungsserver",
"rrtypeDescription": "Wähle den RR-Typ aus, welchen du überwachen möchtest.",
"Last Result": "Letztes Ergebnis",
"pauseMonitorMsg": "Bist du sicher, dass du den Monitor pausieren möchtest?",
"clearEventsMsg": "Bist du sicher, dass du alle Ereignisse für diesen Monitor löschen möchtest?",
"clearHeartbeatsMsg": "Bist du sicher, dass du alle Statistiken für diesen Monitor löschen möchtest?",
"Clear Data": "Lösche Daten",
"Events": "Ereignisse",
"Heartbeats": "Statistiken",
"confirmClearStatisticsMsg": "Bist du dir sicher, dass du ALLE Statistiken löschen möchtest?",
"Create your admin account": "Erstelle dein Admin-Konto",
"Repeat Password": "Passwort erneut eingeben",
"Resource Record Type": "Ressourcen Record Typ",
"Export": "Export",
"Import": "Import",
"respTime": "Antw.-Zeit (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Standardmäßig aktiviert",
"Apply on all existing monitors": "Auf alle existierenden Monitore anwenden",
"enableDefaultNotificationDescription": "Für jeden neuen Monitor wird diese Benachrichtigung standardmäßig aktiviert. Die Benachrichtigung kann weiterhin für jeden Monitor separat deaktiviert werden.",
"Create": "Erstellen",
"Auto Get": "Auto Get",
"backupDescription": "Es können alle Monitore und Benachrichtigungen in einer JSON-Datei gesichert werden.",
"backupDescription2": "PS: Verlaufs- und Ereignisdaten sind nicht enthalten.",
"backupDescription3": "Sensible Daten wie Benachrichtigungstoken sind in der Exportdatei enthalten, bitte bewahre sie sorgfältig auf.",
"alertNoFile": "Bitte wähle eine Datei zum Importieren aus.",
"alertWrongFileType": "Bitte wähle eine JSON-Datei aus.",
"Clear all statistics": "Lösche alle Statistiken",
"importHandleDescription": "Wähle 'Vorhandene überspringen' aus, wenn jeder Monitor oder jede Benachrichtigung mit demselben Namen übersprungen werden soll. 'Überschreiben' löscht jeden vorhandenen Monitor sowie Benachrichtigungen.",
"Skip existing": "Vorhandene überspringen",
"Overwrite": "Überschreiben",
"Options": "Optionen",
"confirmImportMsg": "Möchtest du das Backup wirklich importieren? Bitte stelle sicher, dass die richtige Import-Option ausgewählt ist.",
"Keep both": "Beide behalten",
"twoFAVerifyLabel": "Bitte trage deinen Token ein, um zu verifizieren, dass 2FA funktioniert",
"Verify Token": "Token verifizieren",
"Setup 2FA": "2FA einrichten",
"Enable 2FA": "2FA aktivieren",
"Disable 2FA": "2FA deaktivieren",
"2FA Settings": "2FA-Einstellungen",
"confirmEnableTwoFAMsg": "Bist du sicher, dass du 2FA aktivieren möchtest?",
"confirmDisableTwoFAMsg": "Bist du sicher, dass du 2FA deaktivieren möchtest?",
"tokenValidSettingsMsg": "Token gültig! Du kannst jetzt die 2FA-Einstellungen speichern.",
"Two Factor Authentication": "Zwei-Faktor-Authentifizierung",
"Active": "Aktiv",
"Inactive": "Inaktiv",
"Token": "Token",
"Show URI": "URI anzeigen",
"Tags": "Tags",
"Add New below or Select...": "Einen bestehenden Tag auswählen oder neuen hinzufügen…",
"Tag with this name already exist.": "Ein Tag mit diesem Namen existiert bereits.",
"Tag with this value already exist.": "Ein Tag mit diesem Wert existiert bereits.",
"color": "Farbe",
"value (optional)": "Wert (optional)",
"Gray": "Grau",
"Red": "Rot",
"Orange": "Orange",
"Green": "Grün",
"Blue": "Blau",
"Indigo": "Indigo",
"Purple": "Lila",
"Pink": "Pink",
"Search...": "Suchen…",
"Heartbeat Retry Interval": "Überprüfungsintervall",
"Resend Notification if Down X times consequently": "Benachrichtigung erneut senden, wenn Inaktiv X mal hintereinander",
"retryCheckEverySecond": "Alle {0} Sekunden neu versuchen",
"resendEveryXTimes": "Erneut versenden alle {0} mal",
"resendDisabled": "Erneut versenden deaktiviert",
"Import Backup": "Backup importieren",
"Export Backup": "Backup exportieren",
"Avg. Ping": "Durchschn. Ping",
"Avg. Response": "Durchschn. Antwort",
"Entry Page": "Einstiegsseite",
"statusPageNothing": "Noch ist hier nichts. Bitte füge eine Gruppe oder einen Monitor hinzu.",
"No Services": "Keine Dienste",
"All Systems Operational": "Alle Systeme betriebsbereit",
"Partially Degraded Service": "Teilweise beeinträchtigter Dienst",
"Degraded Service": "Eingeschränkter Dienst",
"Add Group": "Gruppe hinzufügen",
"Add a monitor": "Monitor hinzufügen",
"Edit Status Page": "Statusseite bearbeiten",
"Go to Dashboard": "Gehe zum Dashboard",
"Status Page": "Status-Seite",
"Status Pages": "Status-Seiten",
"telegram": "Telegram",
"webhook": "Webhook",
"smtp": "E-Mail (SMTP)",
"discord": "Discord",
"teams": "Microsoft Teams",
"signal": "Signal",
"gotify": "Gotify",
"slack": "Slack",
"rocket.chat": "Rocket.chat",
"pushover": "Pushover",
"pushy": "Pushy",
"octopush": "Octopush",
"promosms": "PromoSMS",
"lunasea": "LunaSea",
"apprise": "Apprise (Unterstützung für 50+ Benachrichtigungsdienste)",
"GoogleChat": "Google Chat (nur Google Workspace)",
"pushbullet": "Pushbullet",
"line": "Line Messenger",
"mattermost": "Mattermost",
"Primary Base URL": "Primäre Basis-URL",
"Push URL": "Push URL",
"needPushEvery": "Du solltest diese URL alle {0} Sekunden aufrufen",
"pushOptionalParams": "Optionale Parameter: {0}",
"defaultNotificationName": "Mein {notification} Alarm ({number})",
"here": "hier",
"Required": "Erforderlich",
"Bot Token": "Bot Token",
"wayToGetTelegramToken": "Hier kannst du einen Token erhalten {0}.",
"Chat ID": "Chat ID",
"supportTelegramChatID": "Unterstützt Direkt Chat / Gruppe / Kanal Chat-ID's",
"wayToGetTelegramChatID": "Du kannst die Chat-ID erhalten, indem du eine Nachricht an den Bot sendest und zu dieser URL gehst, um die chat_id: zu sehen.",
"YOUR BOT TOKEN HERE": "HIER DEIN BOT TOKEN",
"chatIDNotFound": "Chat-ID wurde nicht gefunden: bitte sende zuerst eine Nachricht an diesen Bot",
"Post URL": "Post URL",
"Content Type": "Content Type",
"webhookJsonDesc": "{0} ist gut für alle modernen HTTP-Server, wie z.B. Express.js, geeignet",
"webhookFormDataDesc": "{multipart} ist gut für PHP. Das JSON muss mit {decodeFunction} verarbeitet werden",
"secureOptionNone": "Keine / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "TLS-Fehler ignorieren",
"From Email": "Absender E-Mail",
"emailCustomSubject": "Benutzerdefinierter Betreff",
"To Email": "Empfänger E-Mail",
"smtpCC": "CC",
"smtpBCC": "BCC",
"Discord Webhook URL": "Discord Webhook URL",
"wayToGetDiscordURL": "Du kannst diese erhalten, indem du zu den Servereinstellungen gehst -> Integrationen -> Neuer Webhook",
"Bot Display Name": "Bot-Anzeigename",
"Prefix Custom Message": "Benutzerdefinierter Nachrichten Präfix",
"Hello @everyone is...": "Hallo {'@'}everyone ist…",
"Webhook URL": "Webhook URL",
"wayToGetTeamsURL": "Wie eine Webhook-URL erstellt werden kann, erfährst du {0}.",
"Number": "Nummer",
"Recipients": "Empfänger",
"needSignalAPI": "Es wird ein Signal Client mit REST-API benötigt.",
"wayToCheckSignalURL": "Du kannst diese URL aufrufen, um zu sehen, wie du eine einrichtest:",
"signalImportant": "WICHTIG: Gruppen und Nummern können in Empfängern nicht gemischt werden!",
"Application Token": "Anwendungs Token",
"Server URL": "Server URL",
"Priority": "Priorität",
"Icon Emoji": "Icon Emoji",
"Channel Name": "Kanalname",
"Uptime Kuma URL": "Uptime Kuma URL",
"aboutWebhooks": "Weitere Informationen zu Webhooks auf: {0}",
"aboutChannelName": "Gebe den Kanalnamen ein in {0} Feld Kanalname, falls du den Webhook-Kanal umgehen möchtest. Ex: #other-channel",
"aboutKumaURL": "Wenn das Feld für die Uptime Kuma URL leer gelassen wird, wird standardmäßig die GitHub Projekt Seite verwendet.",
"emojiCheatSheet": "Emoji Cheat Sheet: {0}",
"User Key": "Benutzerschlüssel",
"Device": "Gerät",
"Message Title": "Nachrichtentitel",
"Notification Sound": "Benachrichtigungston",
"More info on:": "Mehr Infos auf: {0}",
"pushoverDesc1": "Notfallpriorität (2) hat standardmäßig 30 Sekunden Auszeit zwischen den Versuchen und läuft nach 1 Stunde ab.",
"pushoverDesc2": "Fülle das Geräte Feld aus, wenn du Benachrichtigungen an verschiedene Geräte senden möchtest.",
"SMS Type": "SMS Typ",
"octopushTypePremium": "Premium (Schnell - zur Benachrichtigung empfohlen)",
"octopushTypeLowCost": "Kostengünstig (Langsam - manchmal vom Betreiber gesperrt)",
"checkPrice": "Prüfe {0} Preise:",
"octopushLegacyHint": "Verwendest du die Legacy-Version von Octopush (2011-2020) oder die neue Version?",
"Check octopush prices": "Vergleiche die Oktopush Preise {0}.",
"octopushPhoneNumber": "Telefonnummer (Internationales Format, z.B : +49612345678) ",
"octopushSMSSender": "Name des SMS-Absenders : 3-11 alphanumerische Zeichen und Leerzeichen (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea Geräte ID",
"Apprise URL": "Apprise URL",
"Example:": "Beispiel: {0}",
"Read more:": "Weiterlesen: {0}",
"Status:": "Status: {0}",
"Read more": "Weiterlesen",
"appriseInstalled": "Apprise ist installiert.",
"appriseNotInstalled": "Apprise ist nicht installiert. {0}",
"Access Token": "Access Token",
"Channel access token": "Channel access token",
"Line Developers Console": "Line Developers Console",
"lineDevConsoleTo": "Line Developers Console - {0}",
"Basic Settings": "Basic Settings",
"User ID": "User ID",
"Messaging API": "Messaging API",
"wayToGetLineChannelToken": "Rufe zuerst {0} auf, erstelle dann einen Provider und Channel (Messaging API). Als nächstes kannst du den Channel access token und die User ID aus den oben genannten Menüpunkten abrufen.",
"Icon URL": "Icon URL",
"aboutIconURL": "Du kannst einen Link zu einem Bild in 'Icon URL' übergeben um das Standardprofilbild zu überschreiben. Wird nicht verwendet, wenn ein Icon Emoji gesetzt ist.",
"aboutMattermostChannelName": "Du kannst den Standardkanal, auf dem der Webhook gesendet wird überschreiben, indem der Kanalnamen in das Feld 'Channel Name' eingeben wird. Dies muss in den Mattermost Webhook-Einstellungen aktiviert werden. Ex: #other-channel",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO - billig, aber langsam und oft überladen. Auf polnische Empfänger beschränkt.",
"promosmsTypeFlash": "SMS FLASH - Die Nachricht wird automatisch auf dem Empfängergerät angezeigt. Auf polnische Empfänger beschränkt.",
"promosmsTypeFull": "SMS FULL - Premium Stufe von SMS, es kann der Absendernamen verwendet werden (Der Name musst zuerst registriert werden). Zuverlässig für Warnungen.",
"promosmsTypeSpeed": "SMS SPEED - Höchste Priorität im System. Sehr schnell und zuverlässig, aber teuer (Ungefähr das doppelte von SMS FULL).",
"promosmsPhoneNumber": "Telefonnummer (für polnische Empfänger können die Vorwahlen übersprungen werden)",
"promosmsSMSSender": "Name des SMS-Absenders : vorregistrierter Name oder einer der Standardwerte: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu Webhook URL",
"matrixHomeserverURL": "Heimserver URL (mit http(s):// und optionalen Ports)",
"Internal Room Id": "Interne Raum-ID",
"matrixDesc1": "Die interne Raum-ID findest du im erweiterten Bereich der Raumeinstellungen im Matrix-Client. Es sollte aussehen wie z.B. !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Es wird dringend empfohlen einen neuen Benutzer anzulegen und nicht den Zugriffstoken deines eigenen Matrix-Benutzers zu verwenden. Anderenfalls ermöglicht es vollen Zugriff auf dein Konto und alle Räume, denen du beigetreten bist. Erstelle stattdessen einen neuen Benutzer und lade ihn nur in den Raum ein, in dem du die Benachrichtigung erhalten möchtest. Du kannst den Zugriffstoken erhalten, indem du Folgendes ausführst {0}",
"Method": "Method",
"Body": "Body",
"Headers": "Headers",
"PushUrl": "Push URL",
"HeadersInvalidFormat": "Der Header ist kein gültiges JSON: ",
"BodyInvalidFormat": "Der Body ist kein gültiges JSON: ",
"Monitor History": "Monitor Verlauf",
"clearDataOlderThan": "Bewahre die Monitor-Verlaufsdaten für {0} Tage auf.",
"PasswordsDoNotMatch": "Passwörter stimmen nicht überein.",
"records": "Einträge",
"One record": "Ein Eintrag",
"steamApiKeyDescription": "Um einen Steam Game Server zu überwachen, wird ein Steam Web-API-Schlüssel benötigt. Dieser kann hier registriert werden: ",
"Current User": "Aktueller Benutzer",
"recent": "Letzte",
"Done": "Fertig",
"Info": "Info",
"Security": "Sicherheit",
"Steam API Key": "Steam API Key",
"Shrink Database": "Datenbank verkleinern",
"Pick a RR-Type...": "Wähle ein RR-Typ aus…",
"Pick Accepted Status Codes...": "Wähle akzeptierte Statuscodes aus…",
"Default": "Standard",
"HTTP Options": "HTTP Optionen",
"Create Incident": "Vorfall erstellen",
"Title": "Titel",
"Content": "Inhalt",
"Style": "Stil",
"info": "info",
"warning": "warnung",
"danger": "gefahr",
"primary": "primär",
"light": "hell",
"dark": "dunkel",
"Post": "Eintrag",
"Please input title and content": "Bitte Titel und Inhalt eingeben",
"Created": "Erstellt",
"Last Updated": "Zuletzt aktualisiert",
"Unpin": "Loslösen",
"Switch to Light Theme": "Zu hellem Thema wechseln",
"Switch to Dark Theme": "Zum dunklen Thema wechseln",
"Show Tags": "Tags anzeigen",
"Hide Tags": "Tags ausblenden",
"Description": "Beschreibung",
"No monitors available.": "Keine Monitore verfügbar.",
"Add one": "Hinzufügen",
"No Monitors": "Keine Monitore",
"Untitled Group": "Gruppe ohne Titel",
"Services": "Dienste",
"Discard": "Verwerfen",
"Cancel": "Abbrechen",
"Powered by": "Powered by",
"shrinkDatabaseDescription": "Löse VACUUM für die SQLite Datenbank aus. Wenn die Datenbank nach 1.10.0 erstellt wurde, ist AUTO_VACUUM bereits aktiviert und diese Aktion ist nicht erforderlich.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Benutzername (inkl. webapi_ prefix)",
"serwersmsAPIPassword": "API Passwort",
"serwersmsPhoneNumber": "Telefonnummer",
"serwersmsSenderName": "Name des SMS-Absenders (über Kundenportal registriert)",
"stackfield": "Stackfield",
"clicksendsms": "ClickSend SMS",
"apiCredentials": "API Zugangsdaten",
"smtpDkimSettings": "DKIM Einstellungen",
"smtpDkimDesc": "Details zur Konfiguration sind in der Nodemailer DKIM {0} zu finden.",
"documentation": "Dokumentation",
"smtpDkimDomain": "Domain Name",
"smtpDkimKeySelector": "Schlüssel Auswahl",
"smtpDkimPrivateKey": "Privater Schlüssel",
"smtpDkimHashAlgo": "Hash-Algorithmus (Optional)",
"smtpDkimheaderFieldNames": "Zu validierende Header-Schlüssel (optional)",
"smtpDkimskipFields": "Zu ignorierende Header Schlüssel (optional)",
"PushByTechulus": "Push by Techulus",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "API Endpunkt",
"alertaEnvironment": "Umgebung",
"alertaApiKey": "API Schlüssel",
"alertaAlertState": "Alarmstatus",
"alertaRecoverState": "Wiederherstellungsstatus",
"deleteStatusPageMsg": "Bist du sicher, dass du diese Status-Seite löschen willst?",
"Proxies": "Proxies",
"default": "Standard",
"enabled": "Aktiviert",
"setAsDefault": "Als Standard setzen",
"deleteProxyMsg": "Bist du sicher, dass du diesen Proxy für alle Monitore löschen willst?",
"proxyDescription": "Proxies müssen einem Monitor zugewiesen werden, um zu funktionieren.",
"enableProxyDescription": "Dieser Proxy wird keinen Effekt auf Monitor-Anfragen haben, bis er aktiviert ist. Du kannst ihn temporär von allen Monitoren nach Aktivierungsstatus deaktivieren.",
"setAsDefaultProxyDescription": "Dieser Proxy wird standardmäßig für alle neuen Monitore aktiviert sein. Du kannst den Proxy immer noch für jeden Monitor einzeln deaktivieren.",
"Certificate Chain": "Zertifikatskette",
"Valid": "Gültig",
"Invalid": "Ungültig",
"AccessKeyId": "AccessKey ID",
"SecretAccessKey": "AccessKey Secret",
"PhoneNumbers": "Telefonnummern",
"TemplateCode": "Vorlagencode",
"SignName": "Signaturname",
"Sms template must contain parameters: ": "SMS Vorlage muss folgende Parameter enthalten: ",
"Bark Endpoint": "Bark Endpunkt",
"WebHookUrl": "Webhook URL",
"SecretKey": "Geheimer Schlüssel",
"For safety, must use secret key": "Zur Sicherheit muss ein geheimer Schlüssel verwendet werden",
"Device Token": "Gerätetoken",
"Platform": "Platform",
"iOS": "iOS",
"Android": "Android",
"Huawei": "Huawei",
"High": "Hoch",
"Retry": "Wiederholungen",
"Topic": "Thema",
"WeCom Bot Key": "WeCom Bot Schlüssel",
"Setup Proxy": "Proxy einrichten",
"Proxy Protocol": "Proxy Protokoll",
"Proxy Server": "Proxy-Server",
"Proxy server has authentication": "Proxy-Server hat Authentifizierung",
"User": "Benutzer",
"Installed": "Installiert",
"Not installed": "Nicht installiert",
"Running": "Läuft",
"Not running": "Gestoppt",
"Remove Token": "Token entfernen",
"Start": "Start",
"Stop": "Stop",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "Neue Status-Seite hinzufügen",
"Slug": "Slug",
"Accept characters:": "Akzeptierte Zeichen:",
"startOrEndWithOnly": "Nur mit {0} anfangen und enden",
"No consecutive dashes": "Keine aufeinanderfolgenden Bindestriche",
"Next": "Weiter",
"The slug is already taken. Please choose another slug.": "Der Slug ist bereits in Verwendung. Bitte wähle einen anderen.",
"No Proxy": "Kein Proxy",
"Authentication": "Authentifizierung",
"HTTP Basic Auth": "HTTP Basisauthentifizierung",
"New Status Page": "Neue Status-Seite",
"Page Not Found": "Seite nicht gefunden",
"Reverse Proxy": "Reverse Proxy",
"Backup": "Sicherung",
"About": "Über",
"wayToGetCloudflaredURL": "(Lade cloudflared von {0} herunter)",
"cloudflareWebsite": "Cloudflare Website",
"Message:": "Nachricht:",
"Don't know how to get the token? Please read the guide:": "Du weißt nicht, wie man den Token bekommt? Lies die Anleitung dazu:",
"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.": "Die aktuelle Verbindung kann unterbrochen werden, wenn du aktuell über Cloudflare Tunnel verbunden bist. Bist du sicher, dass du es stoppen willst? Gib zur Bestätigung dein aktuelles Passwort ein.",
"Other Software": "Andere Software",
"For example: nginx, Apache and Traefik.": "Zum Beispiel: nginx, Apache und Traefik.",
"Please read": "Bitte lesen",
"Subject:": "Betreff:",
"Valid To:": "Gültig bis:",
"Days Remaining:": "Tage verbleibend:",
"Issuer:": "Aussteller:",
"Fingerprint:": "Fingerabdruck:",
"No status pages": "Keine Status-Seiten",
"Domain Name Expiry Notification": "Benachrichtigung bei Ablauf des Domainnamens",
"Customize": "Anpassen",
"Custom Footer": "Eigener Footer",
"Custom CSS": "Eigenes CSS",
"Footer Text": "Fußzeile",
"Show Powered By": "Zeige 'Powered By'",
"Date Created": "Erstellt am",
"Domain Names": "Domainnamen",
"signedInDisp": "Angemeldet als {0}",
"signedInDispDisabled": "Authentifizierung deaktiviert.",
"dnsPortDescription": "DNS server port. Standard ist 53. Der Port kann jederzeit geändert werden.",
"topic": "Thema",
"topicExplanation": "MQTT Thema für den monitor",
"successMessage": "Erfolgsnachricht",
"successMessageExplanation": "MQTT Nachricht, die als Erfolg angesehen wird",
"error": "Fehler",
"critical": "kritisch",
"wayToGetPagerDutyKey": "Dieser kann unter Service -> Service Directory -> (Select a service) -> Integrations -> Add integration gefunden werden. Hier muss nach \"Events API V2\" gesucht werden. Mehr informationen {0}",
"Integration Key": "Schlüssel der Integration",
"Integration URL": "URL der Integration",
"Auto resolve or acknowledged": "Automatisch lösen oder bestätigen",
"do nothing": "nichts tun",
"auto acknowledged": "automatisch bestätigen",
"auto resolve": "automatisch lösen",
"Bark Group": "Bark Gruppe",
"Bark Sound": "Bark Klang",
"HTTP Headers": "HTTP Kopfzeilen",
"Trust Proxy": "Vertrauenswürdiger Proxy",
"Proxy": "Proxy",
"HomeAssistant": "Home Assistant",
"onebotHttpAddress": "OneBot HTTP Adresse",
"onebotMessageType": "OneBot Nachrichtentyp",
"onebotGroupMessage": "Gruppe",
"onebotPrivateMessage": "Privat",
"onebotUserOrGroupId": "Gruppe/Nutzer ID",
"onebotSafetyTips": "Zur Sicherheit ein access token setzen",
"PushDeer Key": "PushDeer Schlüssel",
"RadiusSecret": "Radius Geheimnis",
"RadiusSecretDescription": "Geteiltes Geheimnis zwischen Client und Server",
"RadiusCalledStationId": "ID der angesprochenen Station",
"RadiusCalledStationIdDescription": "Identifikation des angesprochenen Geräts",
"RadiusCallingStationId": "ID der ansprechenden Station",
"RadiusCallingStationIdDescription": "Identifikation des ansprechenden Geräts",
"Certificate Expiry Notification": "Benachrichtigung ablaufendes Zertifikat",
"API Username": "API Nutzername",
"API Key": "API Schlüssel",
"Recipient Number": "Empfängernummer",
"From Name/Number": "Von Name/Nummer",
"Leave blank to use a shared sender number.": "Leer lassen um eine geteilte Absendernummer zu nutzen.",
"Octopush API Version": "Octopush API Version",
"Legacy Octopush-DM": "Legacy Octopush-DM",
"endpoint": "Endpunkt",
"octopushAPIKey": "\"API Schlüssel\" der HTTP API Zugangsdaten im control panel",
"octopushLogin": "\"Login\" der HTTP API Zugangsdaten im control panel",
"promosmsLogin": "API Login Name",
"promosmsPassword": "API Password",
"pushoversounds pushover": "Pushover (Standard)",
"pushoversounds bike": "Fahrrad",
"pushoversounds bugle": "Signalhorn",
"pushoversounds cashregister": "Kasse",
"pushoversounds classical": "Klassisch",
"pushoversounds cosmic": "Kosmisch",
"pushoversounds falling": "Abfallend",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "Eingang",
"pushoversounds intermission": "Pause",
"pushoversounds magic": "Magisch",
"pushoversounds mechanical": "Mechanisch",
"pushoversounds pianobar": "Piano Bar",
"pushoversounds siren": "Sirene",
"pushoversounds spacealarm": "Space Alarm",
"pushoversounds tugboat": "Schlepper Horn",
"pushoversounds alien": "Außerirdisch (lang)",
"pushoversounds climb": "Ansteigende (lang)",
"pushoversounds persistent": "Hartnäckig (lang)",
"pushoversounds echo": "Pushover Echo (lang)",
"pushoversounds updown": "Auf und Ab (lang)",
"pushoversounds vibrate": "Nur vibrieren",
"pushoversounds none": "Nichts (Stille)",
"pushyAPIKey": "Geheimer API Schlüssel",
"pushyToken": "Gerätetoken",
"Show update if available": "Verfügbare Updates anzeigen",
"Also check beta release": "Auch nach Beta Versionen schauen",
"Using a Reverse Proxy?": "Wird ein Reverse Proxy genutzt?",
"Check how to config it for WebSocket": "Prüfen, wie er für die Nutzung mit WebSocket konfiguriert wird",
"Steam Game Server": "Steam Game Server",
"Most likely causes:": "Wahrscheinliche Ursachen:",
"The resource is no longer available.": "Die Quelle ist nicht mehr verfügbar.",
"There might be a typing error in the address.": "Es gibt einen Tippfehler in der Adresse.",
"What you can try:": "Was du versuchen kannst:",
"Retype the address.": "Schreibe die Adresse erneut.",
"Go back to the previous page.": "Gehe zur vorigen Seite.",
"Coming Soon": "Kommt bald",
"wayToGetClickSendSMSToken": "Du kannst einen API Nutzernamen und Schlüssel unter {0} erhalten.",
"Connection String": "Verbindungstext",
"Query": "Abfrage",
"settingsCertificateExpiry": "TLS Zertifikatsablauf",
"certificationExpiryDescription": "HTTPS Monitore senden eine Benachrichtigung, wenn das Zertifikat abläuft in:",
"Setup Docker Host": "Docker Host einrichten",
"Connection Type": "Verbindungstyp",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "Bist du sicher diesen docker host für alle Monitore zu löschen?",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Docker Container",
"Container Name / ID": "Container Name / ID",
"Docker Host": "Docker Host",
"Docker Hosts": "Docker Hosts",
"ntfy Topic": "ntfy Thema",
"Domain": "Domain",
"Workstation": "Workstation",
"disableCloudflaredNoAuthMsg": "Du bist im nicht-authentifizieren Modus, ein Passwort wird nicht benötigt.",
"trustProxyDescription": "Vertraue 'X-Forwarded-*' headern. Wenn man die richtige client IP haben möchte und Uptime Kuma hinter einem Proxy wie Nginx or Apache läuft, wollte dies aktiviert werden.",
"wayToGetLineNotifyToken": "Du kannst hier ein Token erhalten: {0}",
"Examples": "Beispiele",
"Home Assistant URL": "Home Assistant URL",
"Long-Lived Access Token": "Lange gültiges Access Token",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Lange gültige Access Token können durch klicken auf den Profilnamen (unten links) und dann einen Klick auf Create Token am Ende erstellt werden. ",
"Notification Service": "Benachrichtigungsdienst",
"default: notify all devices": "standard: Alle Geräte benachrichtigen",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Eine Liste der Benachrichtigungsdienste kann im Home Assistant unter \"Developer Tools > Services\" gefunden werden, wnen man nach \"notification\" sucht um den Geräte-/Telefonnamen zu finden.",
"Automations can optionally be triggered in Home Assistant:": "Automatisierungen können optional im Home Assistant ausgelöst werden:",
"Trigger type:": "Auslöser:",
"Event type:": "Ereignistyp:",
"Event data:": "Ereignis daten:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Dann eine Aktion wählen, zum Beispiel eine Scene wählen in der ein RGB Licht rot ist.",
"Frontend Version": "Frontend Version",
"Frontend Version do not match backend version!": "Die Frontend Version stimmt nicht mit der backend version überein!",
"Maintenance": "Wartung",
"statusMaintenance": "Wartung",
"Schedule maintenance": "Geplante Wartung",
"Affected Monitors": "Betroffene Monitore",
"Pick Affected Monitors...": "Wähle betroffene Monitore…",
"Start of maintenance": "Beginn der Wartung",
"All Status Pages": "Alle Status Seiten",
"Select status pages...": "Statusseiten auswählen…",
"recurringIntervalMessage": "Einmal pro Tag ausgeführt | Wird alle {0} Tage ausgführt",
"affectedMonitorsDescription": "Wähle Monitore aus, die von der aktuellen Wartung betroffen sind",
"affectedStatusPages": "Diese Wartungsmeldung auf ausgewählten Statusseiten anzeigen",
"atLeastOneMonitor": "Wähle mindestens einen Monitor",
"deleteMaintenanceMsg": "Möchtest du diese Wartung löschen?",
"Base URL": "Basis URL",
"goAlertInfo": "GoAlert ist eine Open-Source Applikation für Rufbereitschaftsplanung, automatische Eskalation und Benachrichtigung (z.B. SMS oder Telefonanrufe). Beauftragen Sie automatisch die richtige Person, auf die richtige Art und Weise und zum richtigen Zeitpunkt. {0}",
"goAlertIntegrationKeyInfo": "Bekommt einen generischen API Schlüssel in folgenden Format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\". Normalerweise entspricht dies dem Wert des Token aus der URL.",
"goAlert": "GoAlert",
"backupOutdatedWarning": "Veraltet: Da viele Funktionen hinzugefügt wurden und diese Sicherungsfunktion nicht mehr gepflegt wird, kann sie keine vollständige Sicherung erstellen oder wiederherstellen.",
"backupRecommend": "Bitte sichere stattdessen das Volume oder den Datenordner (./data/) direkt.",
"Optional": "Optional",
"squadcast": "Squadcast",
"SendKey": "SendKey",
"SMSManager API Docs": "SMSManager API Dokumente",
"Gateway Type": "Gateway Type",
"SMSManager": "SMSManager",
"You can divide numbers with": "Du kannst Zahlen teilen mit",
"or": "oder",
"recurringInterval": "Intervall",
"Recurring": "Wiederkehrend",
"Single Maintenance Window": "Einzigartiges Wartungsfenster",
"Maintenance Time Window of a Day": "Zeitfenster für die Wartung",
"Effective Date Range": "Bereich der Wirksamkeitsdaten",
"strategyManual": "Aktiv/Inaktiv Manuell",
"warningTimezone": "Es wird die Zeitzone des Servers verwendet",
"weekdayShortMon": "Mo",
"weekdayShortTue": "Di",
"weekdayShortWed": "Mi",
"weekdayShortThu": "Do",
"weekdayShortFri": "Fr",
"weekdayShortSat": "Sa",
"weekdayShortSun": "So",
"dayOfWeek": "Tag der Woche",
"dayOfMonth": "Tag im Monat",
"lastDay": "Letzter Tag",
"lastDay1": "Letzter Tag im Monat",
"lastDay2": "Vorletzer Tag im Monat",
"lastDay3": "3. letzter Tag im Monat",
"lastDay4": "4. letzter Tag im Monat",
"No Maintenance": "Keine Wartung",
"Schedule Maintenance": "Wartung planen",
"pauseMaintenanceMsg": "Möchtest du wirklich pausieren?",
"maintenanceStatus-under-maintenance": "Unter Wartung",
"maintenanceStatus-inactive": "Inaktiv",
"maintenanceStatus-scheduled": "Geplant",
"maintenanceStatus-ended": "Ende",
"maintenanceStatus-unknown": "Unbekannt",
"Display Timezone": "Zeitzone anzeigen",
"Server Timezone": "Server Zeitzone",
"Date and Time": "Datum und Zeit",
"DateTime Range": "Datums- und Zeitbereich",
"Strategy": "Strategie",
"statusPageMaintenanceEndDate": "Ende",
"Help": "Hilfe",
"Game": "Spiel",
"Custom": "Benutzerdefiniert",
"Enable DNS Cache": "DNS Cache aktivieren",
"Enable": "Aktivieren",
"Disable": "Deaktivieren"
}

587
src/lang/el-GR.json Normal file
View File

@@ -0,0 +1,587 @@
{
"languageName": "Ελληνικά",
"checkEverySecond": "Έλεγχος κάθε {0} δευτερόλεπτα",
"retryCheckEverySecond": "Επανάληψη κάθε {0} δευτερόλεπτα",
"resendEveryXTimes": "Επανάληψη αποστολής ειδοποίησης κάθε {0} φορές",
"resendDisabled": "Η επανάληψη αποστολής ειδοποίησης είναι απενεργοποιημένη",
"retriesDescription": "Μέγιστες επαναλήψεις προτού η υπηρεσία επισημανθεί ως κατω και σταλεί μια ειδοποίηση",
"ignoreTLSError": "Παράβλεψη σφάλματος TLS/SSL για ιστότοπους HTTPS",
"upsideDownModeDescription": "Αναποδογυρίστε την κατάσταση. Εάν η υπηρεσία είναι προσβάσιμη, είναι ΚΑΤΩ.",
"maxRedirectDescription": "Μέγιστος αριθμός redirect που θα ακολουθήσουν. Ρυθμίστε το 0 για να απενεργοποιήσετε τα redirect.",
"acceptedStatusCodesDescription": "Επιλέξτε κωδικούς κατάστασης που θεωρούνται επιτυχή.",
"passwordNotMatchMsg": "Ο κωδικός δεν ταιριάζει.",
"notificationDescription": "Οι ειδοποιήσεις πρέπει να εκχωρηθούν σε μια παρακολούθηση για να λειτουργήσουν.",
"keywordDescription": "Αναζήτηση λέξης-κλειδιού σε απλή απόκριση HTML ή JSON. Η αναζήτηση είναι διάκριση πεζών-κεφαλαίων.",
"pauseDashboardHome": "Παύση",
"deleteMonitorMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την παρακολούθηση;",
"deleteNotificationMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την ειδοποίηση για όλες τις παρακολούθησης?",
"dnsPortDescription": "Θύρα διακομιστή DNS. Προεπιλογή σε 53. Μπορείτε να αλλάξετε τη θύρα ανά πάσα στιγμή.",
"resolverserverDescription": "Το Cloudflare είναι ο προεπιλεγμένος διακομιστής. Μπορείτε να αλλάξετε τον διακομιστή επίλυσης ανά πάσα στιγμήhe default server. You can change the resolver server anytime.",
"rrtypeDescription": "Επιλέξτε τον τύπο RR που θέλετε να παρακολουθήσετε",
"pauseMonitorMsg": "Είστε βέβαιοι ότι θέλετε να κάνετε παύση;",
"enableDefaultNotificationDescription": "Αυτή η ειδοποίηση θα είναι ενεργοποιημένη από προεπιλογή για νέες παρακολούθησης. Μπορείτε ακόμα να απενεργοποιήσετε την ειδοποίηση ξεχωριστά για κάθε παρακολούθηση.",
"clearEventsMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα συμβάντα για αυτήν την παρακολούθηση;",
"clearHeartbeatsMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε όλους τους καρδιακούς παλμούς για αυτήν την παρακολούθηση;",
"confirmClearStatisticsMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε ΟΛΑ τα στατιστικά στοιχεία;?",
"importHandleDescription": "Επιλέξτε «Παράλειψη υπάρχοντος» εάν θέλετε να παραλείψετε κάθε παρακολούθηση ή ειδοποίηση με το ίδιο όνομα. Το 'Overwrite' θα διαγράψει κάθε υπάρχουσα παρακολούθηση και ειδοποίηση.",
"confirmImportMsg": "Είστε βέβαιοι ότι θέλετε να εισαγάγετε το αντίγραφο ασφαλείας; Επαληθεύστε ότι έχετε επιλέξει τη σωστή επιλογή.",
"twoFAVerifyLabel": "Εισαγάγετε το 2FA κωδικό για να επαληθεύσετε: ",
"tokenValidSettingsMsg": "Ο κωδικός 2FA είναι έγκυρο! Τώρα μπορείτε να αποθηκεύσετε τις ρυθμίσεις 2FA",
"confirmEnableTwoFAMsg": "Είστε βέβαιοι ότι θέλετε να ενεργοποιήσετε το 2FA;",
"confirmDisableTwoFAMsg": "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε το 2FA;",
"Settings": "Ρυθμίσεις",
"Dashboard": "Πίνακας",
"New Update": "Νέα αναβάθμιση",
"Language": "Γλώσσα",
"Appearance": "Εμφάνιση",
"Theme": "Θέμα",
"General": "Γενικά",
"Primary Base URL": "Κύρια βασική διεύθυνση URL",
"Version": "Εκδοχή",
"Check Update On GitHub": "Ελέγξτε για Ενημέρωση στο GitHub",
"List": "Λίστα",
"Add": "Προσθήκη",
"Add New Monitor": "Προσθήκη νέας παρακολούθησης",
"Quick Stats": "Γρήγορα στατιστικά",
"Up": "Πάνω",
"Down": "Κάτω",
"Pending": "Εκκρεμεί",
"Unknown": "Άγνωστο",
"Pause": "Παύση",
"Name": "Ονομα",
"Status": "Κατάσταση",
"DateTime": "ΗμερομηνίαΏρα",
"Message": "Μήνυμα",
"No important events": "Δεν υπάρχουν σημαντικά γεγονότα",
"Resume": "Συνέχιση",
"Edit": "Επεξεργασία",
"Delete": "Διαγράφη",
"Current": "Current",
"Uptime": "Χρόνος λειτουργίας",
"Cert Exp.": "Cert Exp.",
"day": "ημέρα | ημέρες",
"-day": "-ημέρα",
"hour": "ώρα",
"-hour": "-ώρα",
"Response": "Απάντηση",
"Ping": "Ping",
"Monitor Type": "Τύπος παρακολούθησης",
"Keyword": "Λέξη-κλειδί",
"Friendly Name": "Φιλικό όνομα",
"URL": "URL",
"Hostname": "Hostname",
"Port": "Port",
"Heartbeat Interval": "Διάστημα καρδιακών παλμών",
"Retries": "Επαναλήψεις",
"Heartbeat Retry Interval": "Διάστημα επανάληψης παλμών καρδιάς",
"Resend Notification if Down X times consequently": "Αποστολή νέας ειδοποίησης εάν κατω X φορές κατά συνέχεια",
"Advanced": "Προχωρημένα",
"Upside Down Mode": "Ανάποδη λειτουργία",
"Max. Redirects": "Μέγιστη. Ανακατευθύνσεις",
"Accepted Status Codes": "Αποδεκτοί Κωδικοί Κατάστασης",
"Push URL": "Push URL",
"needPushEvery": "Θα πρέπει να καλείτε αυτήν τη διεύθυνση URL κάθε {0} δευτερόλεπτα.",
"pushOptionalParams": "Προαιρετικές παράμετροι: {0}",
"Save": "Αποθηκεύση",
"Notifications": "Ειδοποιήσεις",
"Not available, please setup.": "Μη διαθέσιμο, παρακαλώ ρυθμίστε.",
"Setup Notification": "Δημιουργία ειδοποίησης",
"Light": "Φωτεινό",
"Dark": "Σκοτεινό",
"Auto": "Αυτόματο",
"Theme - Heartbeat Bar": "Θέμα - Μπάρα καρδιακών παλμών",
"Normal": "Κανονικό",
"Bottom": "Κάτω μέρος",
"None": "Τίποτα",
"Timezone": "Ζώνη ώρας",
"Search Engine Visibility": "Ορατότητα μηχανών αναζήτησης",
"Allow indexing": "Να επιτρέπεται η ευρετηρίαση",
"Discourage search engines from indexing site": "Αποθαρρύνετε τις μηχανές αναζήτησης από την ευρετηρίαση ιστότοπου",
"Change Password": "Αλλαγή κωδικού πρόσβασης",
"Current Password": "Τρέχων κωδικός πρόσβασης",
"New Password": "Νέος κωδικός πρόσβασης",
"Repeat New Password": "Επαναλάβετε τον νέο κωδικό πρόσβασης",
"Update Password": "Ενημέρωση κωδικού πρόσβασης",
"Disable Auth": "Απενεργοποίηση ελέγχου ταυτότητας",
"Enable Auth": "Ενεργοποίηση ελέγχου ταυτότητας",
"disableauth.message1": "Είστε βέβαιοι ότι θέλετε να <strong>απενεργοποιήσετε τον έλεγχο ταυτότητας</strong>;",
"disableauth.message2": "Έχει σχεδιαστεί για σενάρια <strong>όπου σκοπεύετε να εφαρμόσετε έλεγχο ταυτότητας τρίτου μέρους</strong> μπροστά από το Uptime Kuma, όπως το Cloudflare Access, Authelia ή άλλους μηχανισμούς ελέγχου ταυτότητας.",
"Please use this option carefully!": "Χρησιμοποιήστε αυτή την επιλογή προσεκτικά!",
"Logout": "Αποσύνδεση",
"Leave": "Φύγετε",
"I understand, please disable": "Καταλαβαίνω, απενεργοποιήστε",
"Confirm": "Επιβεβαίωση",
"Yes": "Ναί",
"No": "Οχι",
"Username": "Όνομα χρήστη",
"Password": "Κωδικός πρόσβασης",
"Remember me": "Θυμήσου με",
"Login": "Σύνδεση",
"No Monitors, please": "Δεν υπάρχουν παρακολούθησης παρακαλώ",
"add one": "προσθέστε ένα",
"Notification Type": "Είδος ειδοποίησης",
"Email": "Email",
"Test": "Δοκιμή",
"Certificate Info": "Πληροφορίες πιστοποιητικού",
"Resolver Server": "Διακομιστής επίλυσης",
"Resource Record Type": "Τύπος εγγραφής πόρων",
"Last Result": "Τελευταίο Αποτέλεσμα",
"Create your admin account": "Δημιουργήστε τον λογαριασμό διαχειριστή σας",
"Repeat Password": "Επαναλάβετε τον κωδικό πρόσβασης",
"Import Backup": "Εισαγωγή αντιγράφων ασφαλείας",
"Export Backup": "Εξαγωγή αντιγράφων ασφαλείας",
"Export": "Εξαγωγή",
"Import": "Εισαγωγή",
"respTime": "Χρόν. Aπό (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Προεπιλογή ενεργοποιημένη",
"Apply on all existing monitors": "Εφαρμόστε σε όλες τις υπάρχουσες παρακολούθησης",
"Create": "Δημιουργία",
"Clear Data": "Καθαρισμός δεδομένων",
"Events": "Γεγονότα",
"Heartbeats": "Παλμοι καρδιας",
"Auto Get": "Αυτόματη λήψη",
"backupDescription": "Μπορείτε να δημιουργήσετε αντίγραφα ασφαλείας γία ολλες της παρακολούθησης και ειδοποιήσης σε ένα αρχείο JSON.",
"backupDescription2": "Σημείωση: δεν περιλαμβάνονται δεδομένα ιστορικού και συμβάντων.",
"backupDescription3": "Στο αρχείο εξαγωγής περιλαμβάνονται ευαίσθητα δεδομένα, όπως token ειδοποιήσεων. Aποθηκεύστε την εξαγωγή με ασφάλεια.",
"alertNoFile": "Επιλέξτε ένα αρχείο για εισαγωγή.",
"alertWrongFileType": "Επιλέξτε ένα αρχείο JSON.",
"Clear all statistics": "Εκκαθάριση όλων των στατιστικών",
"Skip existing": "Παράβλεψη υπάρχοντος",
"Overwrite": "Αντικατάσταση",
"Options": "Επιλογές",
"Keep both": "Κράτα και τα δύο",
"Verify Token": "Επαλήθευση Token",
"Setup 2FA": "Ρύθμιση 2FA",
"Enable 2FA": "Ενεργοποίηση 2FA",
"Disable 2FA": "Απενεργοποίηση 2FA",
"2FA Settings": "Ρυθμίσεις 2FA",
"Two Factor Authentication": "Έλεγχος ταυτότητας δύο παραγόντων",
"Active": "Ενεργός",
"Inactive": "Ανενεργό",
"Token": "Token",
"Show URI": "Εμφάνιση URI",
"Tags": "Ετικέτες",
"Add New below or Select...": "Προσθήκη νέου παρακάτω ή Επιλέξτε...",
"Tag with this name already exist.": "Υπάρχει ήδη η ετικέτα με αυτό το όνομα.",
"Tag with this value already exist.": "Υπάρχει ήδη ετικέτα με αυτό το value.",
"color": "χρώμα",
"value (optional)": "value (optional)",
"Gray": "Γκρί",
"Red": "Κόκκινο",
"Orange": "Πορτοκάλι",
"Green": "Πράσινο",
"Blue": "Μπλε",
"Indigo": "Indigo",
"Purple": "Μωβ",
"Pink": "Ροζ",
"Search...": "Αναζήτηση...",
"Avg. Ping": "Μέσo.Ping",
"Avg. Response": "Μέσo. Aπάντηση",
"Entry Page": "Σελίδα εισαγωγής",
"statusPageNothing": "Δεν υπάρχει τίποτα εδώ, προσθέστε μια ομάδα ή μια παρακολούθηση.",
"No Services": "Δεν υπάρχουν υπηρεσίες",
"All Systems Operational": "Όλα τα συστήματα λειτουργούν",
"Partially Degraded Service": "Μερικώς υποβαθμισμένη υπηρεσία",
"Degraded Service": "Υποβαθμισμένη υπηρεσία",
"Add Group": "Προσθήκη γρουπ",
"Add a monitor": "Προσθήκη παρακολούθησης",
"Edit Status Page": "Επεξεργασία σελίδας κατάστασης",
"Go to Dashboard": "Μεταβείτε στον Πίνακα ελέγχου",
"Status Page": "Σελίδα κατάστασης",
"Status Pages": "Σελίδες κατάστασης",
"defaultNotificationName": "Η ειδοποίηση μου {notification} ({number})",
"here": "εδώ",
"Required": "Απαιτείται",
"telegram": "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Διακριτικό Bot",
"wayToGetTelegramToken": "Μπορείτε να πάρετε ένα διακριτικό από {0}.",
"Chat ID": "Chat ID",
"supportTelegramChatID": "Support Direct Chat / Group / Channel's Chat ID",
"wayToGetTelegramChatID": "Μπορείτε να λάβετε το αναγνωριστικό συνομιλίας σας στέλνοντας ένα μήνυμα στο bot και μεταβαίνοντας σε αυτήν τη διεύθυνση URL για να προβάλετε το chat_id:",
"YOUR BOT TOKEN HERE": "ΤΟ BOT ΣΑΣ ΔΙΑΚΡΙΤΙΚΌ ΕΔΩ",
"chatIDNotFound": "Το Chat ID δεν βρέθηκε. Στείλτε πρώτα ένα μήνυμα σε αυτό το bot",
"webhook": "Webhook",
"Post URL": "Post URL",
"Content Type": "Τύπος περιεχομένου",
"webhookJsonDesc": "{0} είναι καλό για οποιονδήποτε σύγχρονο διακομιστή HTTP όπως το Express.js",
"webhookFormDataDesc": "{multipart} είναι καλό για την PHP. Το JSON θα πρέπει να αναλυθεί με {decodeFunction}",
"smtp": "Email (SMTP)",
"secureOptionNone": "None / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Παράβλεψη σφάλματος TLS",
"From Email": "Από Email",
"emailCustomSubject": "Προσαρμοσμένο θέμα",
"To Email": "Προς Email",
"smtpCC": "CC",
"smtpBCC": "BCC",
"discord": "Discord",
"Discord Webhook URL": "Discord Webhook URL",
"wayToGetDiscordURL": "Μπορείτε να το αποκτήσετε μεταβαίνοντας στις Ρυθμίσεις διακομιστή -> Ενσωματώσεις -> Δημιουργία Webhook",
"Bot Display Name": "Εμφανιζόμενο όνομα bot",
"Prefix Custom Message": "Προσαρμοσμένο μήνυμα",
"Hello @everyone is...": "Γεια {'@'}everyone ειναι...",
"teams": "Microsoft Teams",
"Webhook URL": "Webhook URL",
"wayToGetTeamsURL": "Μπορείτε να μάθετε πώς να δημιουργείτε μια διεύθυνση URL webhook {0}.",
"wayToGetZohoCliqURL": "Μπορείτε να μάθετε πώς να δημιουργείτε μια διεύθυνση URL webhook {0}.",
"signal": "Signal",
"Number": "Αριθμός",
"Recipients": "Αποδέκτες",
"needSignalAPI": "Πρέπει να έχετε ένα signal client με REST API..",
"wayToCheckSignalURL": "Μπορείτε να ελέγξετε αυτό το URL για να δείτε πώς να ρυθμίσετε ένα:",
"signalImportant": "ΣΗΜΑΝΤΙΚΟ: Δεν μπορείτε να συνδυάσετε ομάδες και αριθμούς στους παραλήπτες!",
"gotify": "Gotify",
"Application Token": "Token εφαρμογής",
"Server URL": "URL διακομιστή",
"Priority": "Προτεραιότητα",
"slack": "Slack",
"Icon Emoji": "Εικονίδιο Emoji",
"Channel Name": "Όνομα καναλιού",
"Uptime Kuma URL": "Uptime Kuma URL",
"aboutWebhooks": "Περισσότερες πληροφορίες σχετικά με τα Webhooks στο: {0}",
"aboutChannelName": "Εισαγάγετε το όνομα του καναλιού στο {0} Όνομα καναλιού εάν θέλετε να παρακάμψετε το κανάλι Webhook. Π.χ.: #other-channel",
"aboutKumaURL": "Εάν αφήσετε κενό το πεδίο URL Uptime Kuma, θα είναι προεπιλεγμένο στη σελίδα Project GitHub..",
"emojiCheatSheet": "Φύλλο εξαπάτησης emoji: {0}",
"rocket.chat": "Rocket.Chat",
"pushover": "Pushover",
"pushy": "Pushy",
"PushByTechulus": "Push by Techulus",
"octopush": "Octopush",
"promosms": "PromoSMS",
"clicksendsms": "ClickSend SMS",
"lunasea": "LunaSea",
"apprise": "Apprise (Support 50+ Notification services)",
"GoogleChat": "Google Chat (Google Workspace only)",
"pushbullet": "Pushbullet",
"line": "Line Messenger",
"mattermost": "Mattermost",
"User Key": "Κλειδί χρήστη",
"Device": "Συσκευή",
"Message Title": "Τίτλος μηνύματος",
"Notification Sound": "Ήχος ειδοποίησης",
"More info on:": "Περισσότερες πληροφορίες στο: {0}",
"pushoverDesc1": "Η προτεραιότητα έκτακτης ανάγκης (2) έχει προεπιλεγμένο χρονικό όριο 30 δευτερολέπτων μεταξύ των επαναλήψεων και θα λήξει μετά από 1 ώρα.",
"pushoverDesc2": "Εάν θέλετε να στέλνετε ειδοποιήσεις σε διαφορετικές συσκευές, συμπληρώστε το πεδίο Συσκευή.",
"SMS Type": "Τύπος SMS",
"octopushTypePremium": "Premium (Γρήγορη - συνιστάται για ειδοποίηση)",
"octopushTypeLowCost": "Χαμηλό κόστος (Αργό - μερικές φορές μπλοκάρεται από τον χειριστή)",
"checkPrice": "Ελέγξτε τις τιμές {0}:",
"apiCredentials": "API credentials",
"octopushLegacyHint": "Χρησιμοποιείτε την παλαιού τύπου έκδοση του Octopush (2011-2020) ή τη νέα έκδοση;",
"Check octopush prices": "Ελέγξτε τις τιμές OctoPush {0}.",
"octopushPhoneNumber": "Αριθμός τηλεφώνου (διεθνής μορφή, π.χ.: +30694345678)",
"octopushSMSSender": "Όνομα αποστολέα SMS: 3-11 αλφαριθμητικοί χαρακτήρες και διάστημα (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea Device ID",
"Apprise URL": "Apprise URL",
"Example:": "Παράδειγμα: {0}",
"Read more:": "Διαβάστε περισσότερα: {0}",
"Status:": "Κατάσταση: {0}",
"Read more": "Διαβάστε περισσότερα",
"appriseInstalled": "Το Apprise έχει εγκατασταθεί.",
"appriseNotInstalled": "Το Apprise δεν έχει εγκατασταθεί. {0}",
"Access Token": "Access Token",
"Channel access token": "Channel Access Token",
"Line Developers Console": "Line Developers Console",
"lineDevConsoleTo": "Line Developers Console - {0}",
"Basic Settings": "Βασικές ρυθμίσεις",
"User ID": "User ID",
"Messaging API": "Messaging API",
"wayToGetLineChannelToken": "Πρώτα αποκτήστε πρόσβαση στο {0}, δημιουργήστε έναν πάροχο και ένα κανάλι (Messanging API) και, στη συνέχεια, μπορείτε να λάβετε το channel access token και το user ID από τα παραπάνω στοιχεία μενού.",
"Icon URL": "Διεύθυνση URL εικονιδίου",
"aboutIconURL": "Μπορείτε να παρέχετε έναν σύνδεσμο προς μια εικόνα στο \"Icon URL\" για να παρακάμψετε την προεπιλεγμένη εικόνα προφίλ. Δεν θα χρησιμοποιηθεί εάν έχει οριστεί το εικονίδιο Emoji.",
"aboutMattermostChannelName": "Μπορείτε να παρακάμψετε το προεπιλεγμένο κανάλι στο οποίο δημοσιεύει το Webhook εισάγοντας το όνομα του καναλιού στο πεδίο \"Όνομα καναλιού\". Αυτό πρέπει να ενεργοποιηθεί στις ρυθμίσεις του Mattermost Webhook. Π.χ.: #other-channel",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO - φθηνό αλλά αργό και συχνά υπερφορτωμένο. Περιορίζεται μόνο σε Πολωνούς παραλήπτες.",
"promosmsTypeFlash": "SMS FLASH - Το μήνυμα θα εμφανίζεται αυτόματα στη συσκευή του παραλήπτη. Περιορίζεται μόνο σε Πολωνούς παραλήπτες.",
"promosmsTypeFull": "SMS FULL - Premium επίπεδο SMS, Μπορείτε να χρησιμοποιήσετε το Όνομα Αποστολέα σας (Πρέπει πρώτα να καταχωρήσετε το όνομα). Αξιόπιστο για ειδοποιήσεις.",
"promosmsTypeSpeed": "SMS SPEED - Υψηλότερη προτεραιότητα στο σύστημα. Πολύ γρήγορο και αξιόπιστο αλλά ακριβό (περίπου διπλάσια τιμή SMS FULL).",
"promosmsPhoneNumber": "Αριθμός τηλεφώνου (για πολωνούς παραλήπτες Μπορείτε να παραλείψετε τους κωδικούς περιοχής)",
"promosmsSMSSender": "Όνομα αποστολέα SMS: Προεγγεγραμμένο όνομα ή ένα από τα προεπιλεγμένα: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
"matrixHomeserverURL": "Homeserver URL (με http(s):// και προαιρετικά θύρα)",
"Internal Room Id": "Internal Room ID",
"matrixDesc1": "Μπορείτε να βρείτε το internal room ID ανατρέχοντας στην ενότητα για προχωρημένους των ρυθμίσεων δωματίου στο πρόγραμμα-πελάτη Matrix. Θα πρέπει να μοιάζει με !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Συνιστάται ανεπιφύλακτα να δημιουργήσετε έναν νέο χρήστη και να μην χρησιμοποιήσετε το διακριτικό πρόσβασης του χρήστη Matrix, καθώς θα επιτρέψει την πλήρη πρόσβαση στον λογαριασμό σας και σε όλα τα δωμάτια στα οποία συμμετέχετε. Αντίθετα, δημιουργήστε έναν νέο χρήστη και προσκαλέστε τον μόνο στο δωμάτιο στο οποίο θέλετε να λαμβάνετε την ειδοποίηση. Μπορείτε να λάβετε το access token εκτελώντας {0}",
"Method": "Μέθοδος",
"Body": "Σώμα",
"Headers": "Headers",
"PushUrl": "Push URL",
"HeadersInvalidFormat": "The request headers are not valid JSON: ",
"BodyInvalidFormat": "The request body is not valid JSON: ",
"Monitor History": "Ιστορικο Παρακολούθησης",
"clearDataOlderThan": "Διατηρήστε τα δεδομένα ιστορικού παρακολούθησης για {0} ημέρες.",
"PasswordsDoNotMatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.",
"records": "εγγραφές",
"One record": "Μία εγγραφή",
"steamApiKeyDescription": "Για την παρακολούθηση ενός διακομιστή παιχνιδιών Steam χρειάζεστε ένα κλειδί Steam Web-API. Μπορείτε να καταχωρήσετε το κλειδί API σας εδώ: ",
"Current User": "Τρέχων χρήστης",
"topic": "Θέμα",
"topicExplanation": "Θέμα MQTT προς παρακολούθηση",
"successMessage": "Μήνυμα επιτυχίας",
"successMessageExplanation": "Μήνυμα MQTT που θα θεωρηθεί επιτυχές",
"recent": "Πρόσφατος",
"Done": "Ολοκληρώθηκε",
"Info": "Πληροφορίες",
"Security": "Ασφάλεια",
"Steam API Key": "Steam API Key",
"Shrink Database": "Συρρίκνωση βάσης δεδομένων",
"Pick a RR-Type...": "Επιλέξτε έναν τύπο RR...",
"Pick Accepted Status Codes...": "Επιλέξτε Αποδεκτούς κωδικούς κατάστασης...",
"Default": "Προκαθορισμένο",
"HTTP Options": "Επιλογές HTTP",
"Create Incident": "Δημιουργία περιστατικού",
"Title": "Τίτλος",
"Content": "Περιεχόμενο",
"Style": "Στυλ",
"info": "πληροφορίες",
"warning": "προειδοποίηση",
"danger": "κίνδυνος",
"error": "σφάλμα",
"critical": "κριτικό",
"primary": "primary",
"light": "light",
"dark": "dark",
"Post": "Δημοσίευση",
"Please input title and content": "Παρακαλούμε εισαγάγετε τίτλο και περιεχόμενο",
"Created": "Δημιουργήθηκε",
"Last Updated": "Τελευταία ενημέρωση",
"Unpin": "Ξεκαρφιτσώστε",
"Switch to Light Theme": "Μετάβαση σε Ανιχτό θέμα",
"Switch to Dark Theme": "Μετάβαση σε Σκούρο θέμα",
"Show Tags": "Εμφάνιση ετικετών",
"Hide Tags": "Απόκρυψη ετικετών",
"Description": "Περιγραφή",
"No monitors available.": "Δεν υπάρχουν διαθέσιμες παρακολουθήσεις.",
"Add one": "Προσθέστε ένα",
"No Monitors": "Χωρίς παρακολουθήσεις",
"Untitled Group": "Ομάδα χωρίς τίτλο",
"Services": "Υπηρεσίες",
"Discard": "Απορρίψει",
"Cancel": "Ακυρο",
"Powered by": "Με την υποστήριξη του",
"shrinkDatabaseDescription": "Ενεργοποίηση βάσης δεδομένων VACUUM για SQLite. Εάν η βάση δεδομένων σας έχει δημιουργηθεί μετά την έκδοση 1.10.0, το AUTO_VACUUM είναι ήδη ενεργοποιημένο και αυτή η ενέργεια δεν χρειάζεται.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Username (incl. webapi_ prefix)",
"serwersmsAPIPassword": "API κωδικός πρόσβασης",
"serwersmsPhoneNumber": "Αριθμός τηλεφώνου",
"serwersmsSenderName": "Όνομα αποστολέα SMS (καταχωρήθηκε μέσω της πύλης πελατών)",
"stackfield": "Stackfield",
"Customize": "Προσαρμογή",
"Custom Footer": "Προσαρμογή Footer",
"Custom CSS": "Προσαρμογή CSS",
"smtpDkimSettings": "Ρυθμίσεις DKIM",
"smtpDkimDesc": "Ανατρέξτε στο Nodemailer DKIM {0} για χρήση.",
"documentation": "documentation",
"smtpDkimDomain": "Domain Name",
"smtpDkimKeySelector": "Key Selector",
"smtpDkimPrivateKey": "Private Key",
"smtpDkimHashAlgo": "Hash Algorithm (Optional)",
"smtpDkimheaderFieldNames": "Header Keys to sign (Optional)",
"smtpDkimskipFields": "Header Keys not to sign (Optional)",
"wayToGetPagerDutyKey": "Μπορείτε να το λάβετε μεταβαίνοντας στο Service -> Service Directory -> (Επιλέξτε μια υπηρεσία) -> Integrations -> Add integration. Εδώ μπορείτε να κάνετε αναζήτηση για \"Events API V2\". Περισσότερες πληροφορίες {0}",
"Integration Key": "Integration Key",
"Integration URL": "Integration URL",
"Auto resolve or acknowledged": "Αυτόματη επίλυση ή αναγνώριση",
"do nothing": "μην κάνεις τίποτα",
"auto acknowledged": "αυτόματη αναγνώριση",
"auto resolve": "αυτόματη επίλυση",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "API Endpoint",
"alertaEnvironment": "Environment",
"alertaApiKey": "API Key",
"alertaAlertState": "Alert State",
"alertaRecoverState": "Recover State",
"deleteStatusPageMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν τη σελίδα κατάστασης?",
"Proxies": "Proxies",
"default": "Προκαθορισμένο",
"enabled": "Ενεργοποιημένο",
"setAsDefault": "Ορίσετε ως προεπιλογή",
"deleteProxyMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το proxy για όλες τις παρακολουθήσεις;",
"proxyDescription": "Πρέπει να εκχωρηθούν proxies σε μια οθπαρακολουθή για να λειτουργήσουν..",
"enableProxyDescription": "Το proxy δεν θα επηρεάσει τα αιτήματα της παρακολουθήσεις μέχρι να ενεργοποιηθεί. Μπορείτε να ελέγξετε την προσωρινή απενεργοποίηση του proxy από όλες τις παρακολουθήσεις βάσει κατάστασης ενεργοποίησης.",
"setAsDefaultProxyDescription": "Αυτός το proxy θα είναι ενεργοποιημένο από προεπιλογή για νέες παρακολουθήσεις. Μπορείτε ακόμα να απενεργοποιήσετε το proxy ξεχωριστά για κάθε οθόνη.",
"Certificate Chain": "Certificate Chain",
"Valid": "Εγκυρο",
"Invalid": "Μη έγκυρο",
"AccessKeyId": "AccessKey ID",
"SecretAccessKey": "AccessKey Secret",
"PhoneNumbers": "PhoneNumbers",
"TemplateCode": "TemplateCode",
"SignName": "SignName",
"Sms template must contain parameters: ": "Το πρότυπο SMS πρέπει να περιέχει παραμέτρους: ",
"Bark Endpoint": "Bark Endpoint",
"Bark Group": "Bark Ομάδα",
"Bark Sound": "Bark Ήχος",
"WebHookUrl": "WebHookUrl",
"SecretKey": "SecretKey",
"For safety, must use secret key": "Για ασφάλεια, πρέπει να χρησιμοποιήσετε secret key",
"Device Token": "Device Token",
"Platform": "Platform",
"iOS": "iOS",
"Android": "Android",
"Huawei": "Huawei",
"High": "High",
"Retry": "Ξαναδοκιμάσετε",
"Topic": "Θέμα",
"WeCom Bot Key": "WeCom Bot Key",
"Setup Proxy": "Ρύθμιση Proxy",
"Proxy Protocol": "Πρωτόκολλο Proxy",
"Proxy Server": "Proxy Server",
"Proxy server has authentication": "Το Proxy διαθέτει έλεγχο ταυτότητας",
"User": "Χρήστης",
"Installed": "Εγκατεστημένο",
"Not installed": "Μη εγκατεστημενο",
"Running": "Τρέχη",
"Not running": "Δεν τρεχη",
"Remove Token": "Κατάργηση Token",
"Start": "Αρχή",
"Stop": "Στάση",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "Προσθήκη νέας σελίδας κατάστασης",
"Slug": "Slug",
"Accept characters:": "Αποδοχή χαρακτήρων:",
"startOrEndWithOnly": "Ξεκινήστε ή τελειώστε μόνο με {0}",
"No consecutive dashes": "Χωρίς διαδοχικές παύλες",
"Next": "Επόμενο",
"The slug is already taken. Please choose another slug.": "Ο slug έχει ήδη πιαστεί. Επιλέξτε άλλο slug.",
"No Proxy": "Οχι Proxy",
"Authentication": "Authentication",
"HTTP Basic Auth": "HTTP Basic Auth",
"New Status Page": "Νέας Σελίδα κατάστασης",
"Page Not Found": "Η σελίδα δεν βρέθηκε",
"Reverse Proxy": "Αντίστροφο Proxy",
"Backup": "Αντιγράφων ασφαλείας",
"About": "Σχετικά με το Uptime Kuma",
"wayToGetCloudflaredURL": "(Λήψη cloudflared από {0})",
"cloudflareWebsite": "Ιστοσελίδα Cloudflare",
"Message:": "Μήνυμα:",
"Don't know how to get the token? Please read the guide:": "Δεν ξέρετε πώς να αποκτήσετε το token; Διαβάστε τον οδηγό:",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Η τρέχουσα σύνδεση μπορεί να χαθεί εάν αυτή τη στιγμή συνδέεστε μέσω του Cloudflare Tunnel. Θέλετε σίγουρα να το σταματήσετε; Πληκτρολογήστε τον τρέχοντα κωδικό πρόσβασής σας για να τον επιβεβαιώσετε.",
"HTTP Headers": "HTTP Headers",
"Trust Proxy": "Εμπιστοσύνη του Proxy",
"Other Software": "Other Software",
"For example: nginx, Apache and Traefik.": "Για παράδειγμα: nginx, Apache και Traefik.",
"Please read": "Παρακαλώ διαβάστε",
"Subject:": "Θέμα:",
"Valid To:": "Εγκυρο για:",
"Days Remaining:": "Ημέρες που απομένουν:",
"Issuer:": "Εκδότης:",
"Fingerprint:": "Δακτυλικό αποτύπωμα:",
"No status pages": "Δεν υπάρχουν σελίδες κατάστασης",
"Domain Name Expiry Notification": "Ειδοποίηση λήξης ονόματος τομέα",
"Proxy": "Proxy",
"Date Created": "Ημερομηνία Δημιουργίας",
"HomeAssistant": "Home Assistant",
"onebotHttpAddress": "OneBot HTTP Address",
"onebotMessageType": "OneBot Message Type",
"onebotGroupMessage": "Group",
"onebotPrivateMessage": "Private",
"onebotUserOrGroupId": "Group/User ID",
"onebotSafetyTips": "Για ασφάλεια, πρέπει να ορίσετε το acess token",
"PushDeer Key": "PushDeer Key",
"Footer Text": "Κείμενο υποσέλιδου",
"Show Powered By": "Εμφάνιση Powered By",
"Domain Names": "Ονόματα Τομέα",
"signedInDisp": "Συνδεθήκατε ως {0}",
"signedInDispDisabled": "Εξουσιοδότηση είναι απενεργοποιημένη.",
"RadiusSecret": "Radius Secret",
"RadiusSecretDescription": "Shared Secret μεταξύ client και το server",
"RadiusCalledStationId": "Called Station Id",
"RadiusCalledStationIdDescription": "Identifier της καλούμενης συσκευής",
"RadiusCallingStationId": "Calling Station Id",
"RadiusCallingStationIdDescription": "Identifier oτης συσκευής κλήσης",
"Certificate Expiry Notification": "Ειδοποίηση Λήξης Πιστοποιητικού",
"API Username": "API Username",
"API Key": "API Key",
"Recipient Number": "Αριθμός Παραλήπτη",
"From Name/Number": "Από Όνομα/Αριθμός",
"Leave blank to use a shared sender number.": "Αφήστε το κενό για να χρησιμοποιήσετε έναν κοινόχρηστο αριθμό αποστολέα.",
"Octopush API Version": "Octopush API Version",
"Legacy Octopush-DM": "Legacy Octopush-DM",
"endpoint": "endpoint",
"octopushAPIKey": "\"API key\" από το HTTP API credentials στον πίνακα ελέγχου",
"octopushLogin": "\"Login\" από το HTTP API credentials στον πίνακα ελέγχου",
"promosmsLogin": "API Login Name",
"promosmsPassword": "API Password",
"pushoversounds pushover": "Pushover (default)",
"pushoversounds bike": "Bike",
"pushoversounds bugle": "Bugle",
"pushoversounds cashregister": "Cash Register",
"pushoversounds classical": "Classical",
"pushoversounds cosmic": "Cosmic",
"pushoversounds falling": "Falling",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "Incoming",
"pushoversounds intermission": "Intermission",
"pushoversounds magic": "Magic",
"pushoversounds mechanical": "Mechanical",
"pushoversounds pianobar": "Piano Bar",
"pushoversounds siren": "Siren",
"pushoversounds spacealarm": "Space Alarm",
"pushoversounds tugboat": "Tug Boat",
"pushoversounds alien": "Alien Alarm (long)",
"pushoversounds climb": "Climb (long)",
"pushoversounds persistent": "Persistent (long)",
"pushoversounds echo": "Pushover Echo (long)",
"pushoversounds updown": "Up Down (long)",
"pushoversounds vibrate": "Vibrate Only",
"pushoversounds none": "None (silent)",
"pushyAPIKey": "Μυστικό API Key",
"pushyToken": "Τoken Συσκευής",
"Show update if available": "Εμφάνιση ενημέρωσης εάν είναι διαθέσιμη",
"Also check beta release": "Ελέγξτε επίσης την έκδοση beta",
"Using a Reverse Proxy?": "Χρησιμοποιείτε reverse proxy;",
"Check how to config it for WebSocket": "Ελέγξτε πώς να το ρυθμίσετε για το WebSocket",
"Steam Game Server": "Διακομιστής παιχνιδιών Steam",
"Most likely causes:": "Πιο πιθανές αιτίες:",
"The resource is no longer available.": "Ο πόρος δεν είναι πλέον διαθέσιμος.",
"There might be a typing error in the address.": "Μπορεί να υπάρχει σφάλμα πληκτρολόγησης στη διεύθυνση.",
"What you can try:": "Τι μπορείτε να δοκιμάσετε:",
"Retype the address.": "Πληκτρολογήστε ξανά τη διεύθυνση.",
"Go back to the previous page.": "Επιστρέψτε στην προηγούμενη σελίδα.",
"Coming Soon": "Ερχεται σύντομα",
"wayToGetClickSendSMSToken": "Μπορείτε να πάρετε το API Username και API Key απο {0} .",
"Connection String": "Connection String",
"Query": "Query",
"settingsCertificateExpiry": "Λήξη πιστοποιητικού TLS",
"certificationExpiryDescription": "Οι παρακολουθήσεις HTTPS ενεργοποιούν ειδοποίηση όταν λήξει το πιστοποιητικό TLS σε:",
"Setup Docker Host": "Ρύθμιση Docker Host",
"Connection Type": "Τύπος σύνδεσης",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον κεντρικό υπολογιστή βάσης για όλες τις παρακολουθήσεις;",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Docker Container",
"Container Name / ID": "Container Name / ID",
"Docker Host": "Docker Host",
"Docker Hosts": "Docker Hosts",
"ntfy Topic": "ntfy Topic",
"Domain": "Domain",
"Workstation": "Workstation",
"disableCloudflaredNoAuthMsg": "Βρίσκεστε σε λειτουργία No Auth, δεν απαιτείται κωδικός πρόσβασης.",
"trustProxyDescription": "Εμπιστευτείτε τις κεφαλίδες 'X-Forwarded-*'. Εάν θέλετε να λάβετε τη σωστή IP πελάτη και το Uptime Kuma σας βρίσκεται πίσω το Nginx ή το Apache, θα πρέπει να το ενεργοποιήσετε.",
"wayToGetLineNotifyToken": "Μπορείτε να λάβετε ένα access token από το {0}",
"Examples": "Παραδείγματα",
"Home Assistant URL": "Home Assistant URL",
"Long-Lived Access Token": "Long-Lived Access Token",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token μπορεί να δημιουργηθεί κάνοντας κλικ στο όνομα του προφίλ σας (κάτω αριστερά) και κάνοντας κύλιση προς τα κάτω και, στη συνέχεια, κάντε κλικ στο Create Token. ",
"Notification Service": "Υπηρεσία ειδοποιήσεων",
"default: notify all devices": "προεπιλογή: ειδοποίηση όλων των συσκευών",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Μπορείτε να βρείτε μια λίστα με τις Υπηρεσίες ειδοποιήσεων στον Home assistant στην περιοχή \"Developer Tools > Services\" αναζήτηση για \"notification\" για να βρείτε το όνομα της συσκευής/τηλεφώνου σας.",
"Automations can optionally be triggered in Home Assistant:": "Οι αυτοματισμοί μπορούν προαιρετικά να ενεργοποιηθούν στο Home Assistant:",
"Trigger type:": "Τύπος ενεργοποίησης:",
"Event type:": "Τύπος συμβάντος:",
"Event data:": "Δεδομένα συμβάντος:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Στη συνέχεια, επιλέξτε μια ενέργεια, για παράδειγμα αλλάξτε τη σκηνή στο σημείο όπου ένα φως RGB είναι κόκκινο.",
"Frontend Version": "Έκδοση Frontend",
"Frontend Version do not match backend version!": "Η Frontend έκδοση δεν ταιριάζει με την έκδοση backend!",
"Base URL": "Βασική διεύθυνση URL",
"goAlertInfo": "Το GoAlert είναι μια εφαρμογή ανοιχτού κώδικα για προγραμματισμό κλήσεων, αυτοματοποιημένες κλιμακώσεις και ειδοποιήσεις (όπως SMS ή φωνητικές κλήσεις). Αλληλεπιδράστε αυτόματα με το σωστό άτομο, με τον σωστό τρόπο και τη σωστή στιγμή! {0}",
"goAlertIntegrationKeyInfo": "Λάβετε το generic API integration key για την υπηρεσία σε αυτήν τη μορφή \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" συνήθως την τιμή της παραμέτρου διακριτικού της αντιγραμμένης διεύθυνσης URL.",
"goAlert": "GoAlert",
"backupOutdatedWarning": "Καταργήθηκε: Επειδή προστέθηκαν πολλές δυνατότητες και αυτή η δυνατότητα δημιουργίας αντιγράφων ασφαλείας δεν διατηρείται πολη, δεν μπορεί να δημιουργήσει ή να επαναφέρει ένα πλήρες αντίγραφο ασφαλείας.",
"backupRecommend": "Παρακαλούμε δημιουργήστε αντίγραφα ασφαλείας του volume ή του φακέλου δεδομένων (./data/) απευθείας."
}

699
src/lang/en.json Normal file
View File

@@ -0,0 +1,699 @@
{
"languageName": "English",
"Settings": "Settings",
"Dashboard": "Dashboard",
"Help": "Help",
"New Update": "New Update",
"Language": "Language",
"Appearance": "Appearance",
"Theme": "Theme",
"General": "General",
"Game": "Game",
"Primary Base URL": "Primary Base URL",
"Version": "Version",
"Check Update On GitHub": "Check Update On GitHub",
"List": "List",
"Add": "Add",
"Add New Monitor": "Add New Monitor",
"Quick Stats": "Quick Stats",
"Up": "Up",
"Down": "Down",
"Pending": "Pending",
"statusMaintenance": "Maintenance",
"Maintenance": "Maintenance",
"Unknown": "Unknown",
"General Monitor Type": "General Monitor Type",
"Passive Monitor Type": "Passive Monitor Type",
"Specific Monitor Type": "Specific Monitor Type",
"markdownSupported": "Markdown syntax supported",
"pauseDashboardHome": "Pause",
"Pause": "Pause",
"Name": "Name",
"Status": "Status",
"DateTime": "DateTime",
"Message": "Message",
"No important events": "No important events",
"Resume": "Resume",
"Edit": "Edit",
"Delete": "Delete",
"Current": "Current",
"Uptime": "Uptime",
"Cert Exp.": "Cert Exp.",
"Monitor": "Monitor | Monitors",
"day": "day | days",
"-day": "-day",
"hour": "hour",
"-hour": "-hour",
"Response": "Response",
"Ping": "Ping",
"Monitor Type": "Monitor Type",
"Keyword": "Keyword",
"Friendly Name": "Friendly Name",
"URL": "URL",
"Hostname": "Hostname",
"Port": "Port",
"Heartbeat Interval": "Heartbeat Interval",
"Retries": "Retries",
"Heartbeat Retry Interval": "Heartbeat Retry Interval",
"Resend Notification if Down X times consequently": "Resend Notification if Down X times consequently",
"Advanced": "Advanced",
"checkEverySecond": "Check every {0} seconds",
"retryCheckEverySecond": "Retry every {0} seconds",
"resendEveryXTimes": "Resend every {0} times",
"resendDisabled": "Resend disabled",
"retriesDescription": "Maximum retries before the service is marked as down and a notification is sent",
"ignoreTLSError": "Ignore TLS/SSL error for HTTPS websites",
"upsideDownModeDescription": "Flip the status upside down. If the service is reachable, it is DOWN.",
"maxRedirectDescription": "Maximum number of redirects to follow. Set to 0 to disable redirects.",
"Upside Down Mode": "Upside Down Mode",
"Max. Redirects": "Max. Redirects",
"Accepted Status Codes": "Accepted Status Codes",
"Push URL": "Push URL",
"needPushEvery": "You should call this URL every {0} seconds.",
"pushOptionalParams": "Optional parameters: {0}",
"Save": "Save",
"Notifications": "Notifications",
"Not available, please setup.": "Not available, please setup.",
"Setup Notification": "Setup Notification",
"Light": "Light",
"Dark": "Dark",
"Auto": "Auto",
"Theme - Heartbeat Bar": "Theme - Heartbeat Bar",
"Normal": "Normal",
"Bottom": "Bottom",
"None": "None",
"Timezone": "Timezone",
"Search Engine Visibility": "Search Engine Visibility",
"Allow indexing": "Allow indexing",
"Discourage search engines from indexing site": "Discourage search engines from indexing site",
"Change Password": "Change Password",
"Current Password": "Current Password",
"New Password": "New Password",
"Repeat New Password": "Repeat New Password",
"Update Password": "Update Password",
"Disable Auth": "Disable Auth",
"Enable Auth": "Enable Auth",
"disableauth.message1": "Are you sure want to <strong>disable authentication</strong>?",
"disableauth.message2": "It is designed for scenarios <strong>where you intend to implement third-party authentication</strong> in front of Uptime Kuma such as Cloudflare Access, Authelia or other authentication mechanisms.",
"Please use this option carefully!": "Please use this option carefully!",
"Logout": "Logout",
"Leave": "Leave",
"I understand, please disable": "I understand, please disable",
"Confirm": "Confirm",
"Yes": "Yes",
"No": "No",
"Username": "Username",
"Password": "Password",
"Remember me": "Remember me",
"Login": "Login",
"No Monitors, please": "No Monitors, please",
"add one": "add one",
"Notification Type": "Notification Type",
"Email": "Email",
"Test": "Test",
"Certificate Info": "Certificate Info",
"Resolver Server": "Resolver Server",
"Resource Record Type": "Resource Record Type",
"Last Result": "Last Result",
"Create your admin account": "Create your admin account",
"Repeat Password": "Repeat Password",
"Import Backup": "Import Backup",
"Export Backup": "Export Backup",
"Export": "Export",
"Import": "Import",
"respTime": "Resp. Time (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Default enabled",
"Apply on all existing monitors": "Apply on all existing monitors",
"Create": "Create",
"Clear Data": "Clear Data",
"Events": "Events",
"Heartbeats": "Heartbeats",
"Auto Get": "Auto Get",
"Schedule maintenance": "Schedule maintenance",
"Affected Monitors": "Affected Monitors",
"Pick Affected Monitors...": "Pick Affected Monitors…",
"Start of maintenance": "Start of maintenance",
"All Status Pages": "All Status Pages",
"Select status pages...": "Select status pages…",
"alertNoFile": "Please select a file to import.",
"alertWrongFileType": "Please select a JSON file.",
"Clear all statistics": "Clear all Statistics",
"Skip existing": "Skip existing",
"Overwrite": "Overwrite",
"Options": "Options",
"Keep both": "Keep both",
"Verify Token": "Verify Token",
"Setup 2FA": "Setup 2FA",
"Enable 2FA": "Enable 2FA",
"Disable 2FA": "Disable 2FA",
"2FA Settings": "2FA Settings",
"Two Factor Authentication": "Two Factor Authentication",
"Active": "Active",
"Inactive": "Inactive",
"Token": "Token",
"Show URI": "Show URI",
"Tags": "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.",
"color": "Color",
"value (optional)": "value (optional)",
"Gray": "Gray",
"Red": "Red",
"Orange": "Orange",
"Green": "Green",
"Blue": "Blue",
"Indigo": "Indigo",
"Purple": "Purple",
"Pink": "Pink",
"Custom": "Custom",
"Search...": "Search…",
"Avg. Ping": "Avg. Ping",
"Avg. Response": "Avg. Response",
"Entry Page": "Entry Page",
"statusPageNothing": "Nothing here, please add a group or a monitor.",
"No Services": "No Services",
"All Systems Operational": "All Systems Operational",
"Partially Degraded Service": "Partially Degraded Service",
"Degraded Service": "Degraded Service",
"Add Group": "Add Group",
"Add a monitor": "Add a monitor",
"Edit Status Page": "Edit Status Page",
"Go to Dashboard": "Go to Dashboard",
"Status Page": "Status Page",
"Status Pages": "Status Pages",
"defaultNotificationName": "My {notification} Alert ({number})",
"here": "here",
"Required": "Required",
"webhook": "Webhook",
"Post URL": "Post URL",
"Content Type": "Content Type",
"webhookJsonDesc": "{0} is good for any modern HTTP servers such as Express.js",
"webhookFormDataDesc": "{multipart} is good for PHP. The JSON will need to be parsed with {decodeFunction}",
"webhookAdditionalHeadersTitle": "Additional Headers",
"webhookAdditionalHeadersDesc": "Sets additional headers sent with the webhook.",
"Webhook URL": "Webhook URL",
"Application Token": "Application Token",
"Server URL": "Server URL",
"Priority": "Priority",
"emojiCheatSheet": "Emoji cheat sheet: {0}",
"Read more": "Read more",
"appriseInstalled": "Apprise is installed.",
"appriseNotInstalled": "Apprise is not installed. {0}",
"Method": "Method",
"Body": "Body",
"Headers": "Headers",
"PushUrl": "Push URL",
"HeadersInvalidFormat": "The request headers are not valid JSON: ",
"BodyInvalidFormat": "The request body is not valid JSON: ",
"Monitor History": "Monitor History",
"clearDataOlderThan": "Keep monitor history data for {0} days.",
"PasswordsDoNotMatch": "Passwords do not match.",
"records": "records",
"One record": "One record",
"steamApiKeyDescription": "For monitoring a Steam Game Server you need a Steam Web-API key. You can register your API key here: ",
"Current User": "Current User",
"topic": "Topic",
"topicExplanation": "MQTT topic to monitor",
"successMessage": "Success Message",
"successMessageExplanation": "MQTT message that will be considered as success",
"recent": "Recent",
"Done": "Done",
"Info": "Info",
"Security": "Security",
"Steam API Key": "Steam API Key",
"Shrink Database": "Shrink Database",
"Pick a RR-Type...": "Pick a RR-Type…",
"Pick Accepted Status Codes...": "Pick Accepted Status Codes…",
"Default": "Default",
"HTTP Options": "HTTP Options",
"Create Incident": "Create Incident",
"Title": "Title",
"Content": "Content",
"Style": "Style",
"info": "info",
"warning": "warning",
"danger": "danger",
"error": "error",
"critical": "critical",
"primary": "primary",
"light": "light",
"dark": "dark",
"Post": "Post",
"Please input title and content": "Please input title and content",
"Created": "Created",
"Last Updated": "Last Updated",
"Unpin": "Unpin",
"Switch to Light Theme": "Switch to Light Theme",
"Switch to Dark Theme": "Switch to Dark Theme",
"Show Tags": "Show Tags",
"Hide Tags": "Hide Tags",
"Description": "Description",
"No monitors available.": "No monitors available.",
"Add one": "Add one",
"No Monitors": "No Monitors",
"Untitled Group": "Untitled Group",
"Services": "Services",
"Discard": "Discard",
"Cancel": "Cancel",
"Powered by": "Powered by",
"shrinkDatabaseDescription": "Trigger database VACUUM for SQLite. If your database is created after 1.10.0, AUTO_VACUUM is already enabled and this action is not needed.",
"Customize": "Customize",
"Custom Footer": "Custom Footer",
"Custom CSS": "Custom CSS",
"deleteStatusPageMsg": "Are you sure want to delete this status page?",
"Proxies": "Proxies",
"default": "Default",
"enabled": "Enabled",
"setAsDefault": "Set As Default",
"deleteProxyMsg": "Are you sure want to delete this proxy for all monitors?",
"proxyDescription": "Proxies must be assigned to a monitor to function.",
"enableProxyDescription": "This proxy will not effect on monitor requests until it is activated. You can control temporarily disable the proxy from all monitors by activation status.",
"setAsDefaultProxyDescription": "This proxy will be enabled by default for new monitors. You can still disable the proxy separately for each monitor.",
"Certificate Chain": "Certificate Chain",
"Valid": "Valid",
"Invalid": "Invalid",
"User": "User",
"Installed": "Installed",
"Not installed": "Not installed",
"Running": "Running",
"Not running": "Not running",
"Remove Token": "Remove Token",
"Start": "Start",
"Stop": "Stop",
"Add New Status Page": "Add New Status Page",
"Slug": "Slug",
"Accept characters:": "Accept characters:",
"startOrEndWithOnly": "Start or end with {0} only",
"No consecutive dashes": "No consecutive dashes",
"Next": "Next",
"The slug is already taken. Please choose another slug.": "The slug is already taken. Please choose another slug.",
"No Proxy": "No Proxy",
"Authentication": "Authentication",
"HTTP Basic Auth": "HTTP Basic Auth",
"New Status Page": "New Status Page",
"Page Not Found": "Page Not Found",
"Reverse Proxy": "Reverse Proxy",
"Backup": "Backup",
"About": "About",
"wayToGetCloudflaredURL": "(Download cloudflared from {0})",
"cloudflareWebsite": "Cloudflare Website",
"Message:": "Message:",
"Don't know how to get the token? Please read the guide:": "Don't know how to get the token? Please read the guide:",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "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.",
"HTTP Headers": "HTTP Headers",
"Trust Proxy": "Trust Proxy",
"Other Software": "Other Software",
"For example: nginx, Apache and Traefik.": "For example: nginx, Apache and Traefik.",
"Please read": "Please read",
"Subject:": "Subject:",
"Valid To:": "Valid To:",
"Days Remaining:": "Days Remaining:",
"Issuer:": "Issuer:",
"Fingerprint:": "Fingerprint:",
"No status pages": "No status pages",
"Domain Name Expiry Notification": "Domain Name Expiry Notification",
"Proxy": "Proxy",
"Date Created": "Date Created",
"Footer Text": "Footer Text",
"Show Powered By": "Show Powered By",
"Domain Names": "Domain Names",
"signedInDisp": "Signed in as {0}",
"signedInDispDisabled": "Auth Disabled.",
"RadiusSecret": "Radius Secret",
"RadiusSecretDescription": "Shared Secret between client and server",
"RadiusCalledStationId": "Called Station Id",
"RadiusCalledStationIdDescription": "Identifier of the called device",
"RadiusCallingStationId": "Calling Station Id",
"RadiusCallingStationIdDescription": "Identifier of the calling device",
"Certificate Expiry Notification": "Certificate Expiry Notification",
"API Username": "API Username",
"API Key": "API Key",
"Show update if available": "Show update if available",
"Also check beta release": "Also check beta release",
"Using a Reverse Proxy?": "Using a Reverse Proxy?",
"Check how to config it for WebSocket": "Check how to config it for WebSocket",
"Steam Game Server": "Steam Game Server",
"Most likely causes:": "Most likely causes:",
"The resource is no longer available.": "The resource is no longer available.",
"There might be a typing error in the address.": "There might be a typing error in the address.",
"What you can try:": "What you can try:",
"Retype the address.": "Retype the address.",
"Go back to the previous page.": "Go back to the previous page.",
"Coming Soon": "Coming Soon",
"Connection String": "Connection String",
"Query": "Query",
"settingsCertificateExpiry": "TLS Certificate Expiry",
"certificationExpiryDescription": "HTTPS Monitors trigger notification when TLS certificate expires in:",
"Setup Docker Host": "Setup Docker Host",
"Connection Type": "Connection Type",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "Are you sure want to delete this docker host for all monitors?",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Docker Container",
"Container Name / ID": "Container Name / ID",
"Docker Host": "Docker Host",
"Docker Hosts": "Docker Hosts",
"Domain": "Domain",
"Workstation": "Workstation",
"Packet Size": "Packet Size",
"telegram": "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Bot Token",
"wayToGetTelegramToken": "You can get a token from {0}.",
"Chat ID": "Chat ID",
"supportTelegramChatID": "Support Direct Chat / Group / Channel's Chat ID",
"wayToGetTelegramChatID": "You can get your chat ID by sending a message to the bot and going to this URL to view the chat_id:",
"YOUR BOT TOKEN HERE": "YOUR BOT TOKEN HERE",
"chatIDNotFound": "Chat ID is not found; please send a message to this bot first",
"disableCloudflaredNoAuthMsg": "You are in No Auth mode, a password is not required.",
"trustProxyDescription": "Trust 'X-Forwarded-*' headers. If you want to get the correct client IP and your Uptime Kuma is behind a proxy such as Nginx or Apache, you should enable this.",
"wayToGetLineNotifyToken": "You can get an access token from {0}",
"Examples": "Examples",
"Home Assistant URL": "Home Assistant URL",
"Long-Lived Access Token": "Long-Lived Access Token",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ",
"Notification Service": "Notification Service",
"default: notify all devices": "default: notify all devices",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.",
"Automations can optionally be triggered in Home Assistant:": "Automations can optionally be triggered in Home Assistant:",
"Trigger type:": "Trigger type:",
"Event type:": "Event type:",
"Event data:": "Event data:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Then choose an action, for example switch the scene to where an RGB light is red.",
"Frontend Version": "Frontend Version",
"Frontend Version do not match backend version!": "Frontend Version do not match backend version!",
"backupOutdatedWarning": "Deprecated: Since a lot of features were added and this backup feature is a bit unmaintained, it cannot generate or restore a complete backup.",
"backupRecommend": "Please backup the volume or the data folder (./data/) directly instead.",
"Optional": "Optional",
"squadcast": "Squadcast",
"or": "or",
"recurringInterval": "Interval",
"Recurring": "Recurring",
"strategyManual": "Active/Inactive Manually",
"warningTimezone": "It is using the server's timezone",
"weekdayShortMon": "Mon",
"weekdayShortTue": "Tue",
"weekdayShortWed": "Wed",
"weekdayShortThu": "Thu",
"weekdayShortFri": "Fri",
"weekdayShortSat": "Sat",
"weekdayShortSun": "Sun",
"dayOfWeek": "Day of Week",
"dayOfMonth": "Day of Month",
"lastDay": "Last Day",
"lastDay1": "Last Day of Month",
"lastDay2": "2nd Last Day of Month",
"lastDay3": "3rd Last Day of Month",
"lastDay4": "4th Last Day of Month",
"No Maintenance": "No Maintenance",
"pauseMaintenanceMsg": "Are you sure want to pause?",
"maintenanceStatus-under-maintenance": "Under Maintenance",
"maintenanceStatus-inactive": "Inactive",
"maintenanceStatus-scheduled": "Scheduled",
"maintenanceStatus-ended": "Ended",
"maintenanceStatus-unknown": "Unknown",
"Display Timezone": "Display Timezone",
"Server Timezone": "Server Timezone",
"statusPageMaintenanceEndDate": "End",
"IconUrl": "Icon URL",
"Enable DNS Cache": "Enable DNS Cache",
"Enable": "Enable",
"Disable": "Disable",
"dnsCacheDescription": "It may be not working in some IPv6 environments, disable it if you encounter any issues.",
"Single Maintenance Window": "Single Maintenance Window",
"Maintenance Time Window of a Day": "Maintenance Time Window of a Day",
"Effective Date Range": "Effective Date Range",
"Schedule Maintenance": "Schedule Maintenance",
"Date and Time": "Date and Time",
"DateTime Range": "DateTime Range",
"loadingError": "Cannot fetch the data, please try again later.",
"plugin": "Plugin | Plugins",
"install": "Install",
"installing": "Installing",
"uninstall": "Uninstall",
"uninstalling": "Uninstalling",
"confirmUninstallPlugin": "Are you sure want to uninstall this plugin?",
"smtp": "Email (SMTP)",
"secureOptionNone": "None / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Ignore TLS Error",
"From Email": "From Email",
"emailCustomSubject": "Custom Subject",
"To Email": "To Email",
"smtpCC": "CC",
"smtpBCC": "BCC",
"Discord Webhook URL": "Discord Webhook URL",
"wayToGetDiscordURL": "You can get this by going to Server Settings -> Integrations -> Create Webhook",
"Bot Display Name": "Bot Display Name",
"Prefix Custom Message": "Prefix Custom Message",
"Hello @everyone is...": "Hello {'@'}everyone is…",
"wayToGetTeamsURL": "You can learn how to create a webhook URL {0}.",
"wayToGetZohoCliqURL": "You can learn how to create a webhook URL {0}.",
"needSignalAPI": "You need to have a signal client with REST API.",
"wayToCheckSignalURL": "You can check this URL to view how to set one up:",
"Number": "Number",
"Recipients": "Recipients",
"Access Token": "Access Token",
"Channel access token": "Channel access token",
"Line Developers Console": "Line Developers Console",
"lineDevConsoleTo": "Line Developers Console - {0}",
"Basic Settings": "Basic Settings",
"User ID": "User ID",
"Messaging API": "Messaging API",
"wayToGetLineChannelToken": "First access the {0}, create a provider and channel (Messaging API), then you can get the channel access token and user ID from the above mentioned menu items.",
"Icon URL": "Icon URL",
"aboutIconURL": "You can provide a link to a picture in \"Icon URL\" to override the default profile picture. Will not be used if Icon Emoji is set.",
"aboutMattermostChannelName": "You can override the default channel that the Webhook posts to by entering the channel name into \"Channel Name\" field. This needs to be enabled in the Mattermost Webhook settings. Ex: #other-channel",
"dataRetentionTimeError": "Retention period must be 0 or greater",
"infiniteRetention": "Set to 0 for infinite retention.",
"confirmDeleteTagMsg": "Are you sure you want to delete this tag? Monitors associated with this tag will not be deleted.",
"enableGRPCTls": "Allow to send gRPC request with TLS connection",
"grpcMethodDescription": "Method name is convert to cammelCase format such as sayHello, check, etc.",
"acceptedStatusCodesDescription": "Select status codes which are considered as a successful response.",
"deleteMonitorMsg": "Are you sure want to delete this monitor?",
"deleteMaintenanceMsg": "Are you sure want to delete this maintenance?",
"deleteNotificationMsg": "Are you sure want to delete this notification for all monitors?",
"dnsPortDescription": "DNS server port. Defaults to 53. You can change the port at any time.",
"resolverserverDescription": "Cloudflare is the default server. You can change the resolver server anytime.",
"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.",
"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?",
"importHandleDescription": "Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
"confirmImportMsg": "Are you sure you want to import the backup? Please verify you've selected the correct import option.",
"twoFAVerifyLabel": "Please enter your token to verify 2FA:",
"tokenValidSettingsMsg": "Token is valid! You can now save the 2FA settings.",
"confirmEnableTwoFAMsg": "Are you sure you want to enable 2FA?",
"confirmDisableTwoFAMsg": "Are you sure you want to disable 2FA?",
"recurringIntervalMessage": "Run once every day | Run once every {0} days",
"affectedMonitorsDescription": "Select monitors that are affected by current maintenance",
"affectedStatusPages": "Show this maintenance message on selected status pages",
"atLeastOneMonitor": "Select at least one affected monitor",
"passwordNotMatchMsg": "The repeat password does not match.",
"notificationDescription": "Notifications must be assigned to a monitor to function.",
"keywordDescription": "Search keyword in plain HTML or JSON response. The search is case-sensitive.",
"backupDescription": "You can backup all monitors and notifications into a JSON file.",
"backupDescription2": "Note: history and event data is not included.",
"backupDescription3": "Sensitive data such as notification tokens are included in the export file; please store export securely.",
"endpoint": "endpoint",
"octopushAPIKey": "\"API key\" from HTTP API credentials in control panel",
"octopushLogin": "\"Login\" from HTTP API credentials in control panel",
"promosmsLogin": "API Login Name",
"promosmsPassword": "API Password",
"pushoversounds pushover": "Pushover (default)",
"pushoversounds bike": "Bike",
"pushoversounds bugle": "Bugle",
"pushoversounds cashregister": "Cash Register",
"pushoversounds classical": "Classical",
"pushoversounds cosmic": "Cosmic",
"pushoversounds falling": "Falling",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "Incoming",
"pushoversounds intermission": "Intermission",
"pushoversounds magic": "Magic",
"pushoversounds mechanical": "Mechanical",
"pushoversounds pianobar": "Piano Bar",
"pushoversounds siren": "Siren",
"pushoversounds spacealarm": "Space Alarm",
"pushoversounds tugboat": "Tug Boat",
"pushoversounds alien": "Alien Alarm (long)",
"pushoversounds climb": "Climb (long)",
"pushoversounds persistent": "Persistent (long)",
"pushoversounds echo": "Pushover Echo (long)",
"pushoversounds updown": "Up Down (long)",
"pushoversounds vibrate": "Vibrate Only",
"pushoversounds none": "None (silent)",
"pushyAPIKey": "Secret API Key",
"pushyToken": "Device token",
"discord": "Discord",
"teams": "Microsoft Teams",
"signal": "Signal",
"gotify": "Gotify",
"slack": "Slack",
"rocket.chat": "Rocket.Chat",
"pushover": "Pushover",
"pushy": "Pushy",
"PushByTechulus": "Push by Techulus",
"octopush": "Octopush",
"promosms": "PromoSMS",
"clicksendsms": "ClickSend SMS",
"lunasea": "LunaSea",
"apprise": "Apprise (Support 50+ Notification services)",
"GoogleChat": "Google Chat (Google Workspace only)",
"pushbullet": "Pushbullet",
"Kook": "Kook",
"wayToGetKookBotToken": "Create application and get your bot token at {0}",
"wayToGetKookGuildID": "Switch on 'Developer Mode' in Kook setting, and right click the guild to get its ID",
"Guild ID": "Guild ID",
"line": "Line Messenger",
"mattermost": "Mattermost",
"User Key": "User Key",
"Device": "Device",
"Message Title": "Message Title",
"Notification Sound": "Notification Sound",
"More info on:": "More info on: {0}",
"pushoverDesc1": "Emergency priority (2) has default 30 second timeout between retries and will expire after 1 hour.",
"pushoverDesc2": "If you want to send notifications to different devices, fill out Device field.",
"SMS Type": "SMS Type",
"octopushTypePremium": "Premium (Fast - recommended for alerting)",
"octopushTypeLowCost": "Low Cost (Slow - sometimes blocked by operator)",
"checkPrice": "Check {0} prices:",
"apiCredentials": "API credentials",
"octopushLegacyHint": "Do you use the legacy version of Octopush (2011-2020) or the new version?",
"Check octopush prices": "Check octopush prices {0}.",
"octopushPhoneNumber": "Phone number (intl format, eg : +33612345678) ",
"octopushSMSSender": "SMS Sender Name : 3-11 alphanumeric characters and space (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea Device ID",
"Apprise URL": "Apprise URL",
"Example:": "Example: {0}",
"Read more:": "Read more: {0}",
"Status:": "Status: {0}",
"Strategy": "Strategy",
"Free Mobile User Identifier": "Free Mobile User Identifier",
"Free Mobile API Key": "Free Mobile API Key",
"Enable TLS": "Enable TLS",
"Proto Service Name": "Proto Service Name",
"Proto Method": "Proto Method",
"Proto Content": "Proto Content",
"Economy": "Economy",
"Lowcost": "Lowcost",
"high": "high",
"SendKey": "SendKey",
"SMSManager API Docs": "SMSManager API Docs ",
"Gateway Type": "Gateway Type",
"SMSManager": "SMSManager",
"You can divide numbers with": "You can divide numbers with",
"Base URL": "Base URL",
"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}",
"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.",
"goAlert": "GoAlert",
"AccessKeyId": "AccessKey ID",
"SecretAccessKey": "AccessKey Secret",
"PhoneNumbers": "PhoneNumbers",
"TemplateCode": "TemplateCode",
"SignName": "SignName",
"Sms template must contain parameters: ": "Sms template must contain parameters: ",
"Bark Endpoint": "Bark Endpoint",
"Bark Group": "Bark Group",
"Bark Sound": "Bark Sound",
"WebHookUrl": "WebHookUrl",
"SecretKey": "SecretKey",
"For safety, must use secret key": "For safety, must use secret key",
"Device Token": "Device Token",
"Platform": "Platform",
"iOS": "iOS",
"Android": "Android",
"Huawei": "Huawei",
"High": "High",
"Retry": "Retry",
"Topic": "Topic",
"WeCom Bot Key": "WeCom Bot Key",
"Setup Proxy": "Setup Proxy",
"Proxy Protocol": "Proxy Protocol",
"Proxy Server": "Proxy Server",
"Proxy server has authentication": "Proxy server has authentication",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO - cheap but slow and often overloaded. Limited only to Polish recipients.",
"promosmsTypeFlash": "SMS FLASH - Message will automatically show on recipient device. Limited only to Polish recipients.",
"promosmsTypeFull": "SMS FULL - Premium tier of SMS, You can use your Sender Name (You need to register name first). Reliable for alerts.",
"promosmsTypeSpeed": "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).",
"promosmsPhoneNumber": "Phone number (for Polish recipient You can skip area codes)",
"promosmsSMSSender": "SMS Sender Name : Pre-registred name or one of defaults: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"promosmsAllowLongSMS": "Allow long SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
"matrixHomeserverURL": "Homeserver URL (with http(s):// and optionally port)",
"Internal Room Id": "Internal Room ID",
"matrixDesc1": "You can find the internal room ID by looking in the advanced section of the room settings in your Matrix client. It should look like !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "It is highly recommended you create a new user and do not use your own Matrix user's access token as it will allow full access to your account and all the rooms you joined. Instead, create a new user and only invite it to the room that you want to receive the notification in. You can get the access token by running {0}",
"Channel Name": "Channel Name",
"Uptime Kuma URL": "Uptime Kuma URL",
"Icon Emoji": "Icon Emoji",
"signalImportant": "IMPORTANT: You cannot mix groups and numbers in recipients!",
"aboutWebhooks": "More info about Webhooks on: {0}",
"aboutChannelName": "Enter the channel name on {0} Channel Name field if you want to bypass the Webhook channel. Ex: #other-channel",
"aboutKumaURL": "If you leave the Uptime Kuma URL field blank, it will default to the Project GitHub page.",
"smtpDkimSettings": "DKIM Settings",
"smtpDkimDesc": "Please refer to the Nodemailer DKIM {0} for usage.",
"documentation": "documentation",
"smtpDkimDomain": "Domain Name",
"smtpDkimKeySelector": "Key Selector",
"smtpDkimPrivateKey": "Private Key",
"smtpDkimHashAlgo": "Hash Algorithm (Optional)",
"smtpDkimheaderFieldNames": "Header Keys to sign (Optional)",
"smtpDkimskipFields": "Header Keys not to sign (Optional)",
"wayToGetPagerDutyKey": "You can get this by going to Service -> Service Directory -> (Select a service) -> Integrations -> Add integration. Here you can search for \"Events API V2\". More info {0}",
"Integration Key": "Integration Key",
"Integration URL": "Integration URL",
"Auto resolve or acknowledged": "Auto resolve or acknowledged",
"do nothing": "do nothing",
"auto acknowledged": "auto acknowledged",
"auto resolve": "auto resolve",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "API Endpoint",
"alertaEnvironment": "Environment",
"alertaApiKey": "API Key",
"alertaAlertState": "Alert State",
"alertaRecoverState": "Recover State",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Username (incl. webapi_ prefix)",
"serwersmsAPIPassword": "API Password",
"serwersmsPhoneNumber": "Phone number",
"serwersmsSenderName": "SMS Sender Name (registered via customer portal)",
"smseagle": "SMSEagle",
"smseagleTo": "Phone number(s)",
"smseagleGroup": "Phonebook group name(s)",
"smseagleContact": "Phonebook contact name(s)",
"smseagleRecipientType": "Recipient type",
"smseagleRecipient": "Recipient(s) (multiple must be separated with comma)",
"smseagleToken": "API Access token",
"smseagleUrl": "Your SMSEagle device URL",
"smseagleEncoding": "Send as Unicode",
"smseaglePriority": "Message priority (0-9, default = 0)",
"stackfield": "Stackfield",
"Recipient Number": "Recipient Number",
"From Name/Number": "From Name/Number",
"Leave blank to use a shared sender number.": "Leave blank to use a shared sender number.",
"Octopush API Version": "Octopush API Version",
"Legacy Octopush-DM": "Legacy Octopush-DM",
"ntfy Topic": "ntfy Topic",
"HomeAssistant": "Home Assistant",
"onebotHttpAddress": "OneBot HTTP Address",
"onebotMessageType": "OneBot Message Type",
"onebotGroupMessage": "Group",
"onebotPrivateMessage": "Private",
"onebotUserOrGroupId": "Group/User ID",
"onebotSafetyTips": "For safety, must set access token",
"PushDeer Key": "PushDeer Key",
"wayToGetClickSendSMSToken": "You can get API Username and API Key from {0} .",
"Custom Monitor Type": "Custom Monitor Type",
"Google Analytics ID": "Google Analytics ID",
"Edit Tag": "Edit Tag",
"Server Address": "Server Address",
"Learn More": "Learn More"
}

659
src/lang/es-ES.json Normal file
View File

@@ -0,0 +1,659 @@
{
"languageName": "Español",
"checkEverySecond": "Comprobar cada {0} segundos",
"retriesDescription": "Número máximo de intentos antes de que el servicio se marque como CAÍDO y una notificación sea enviada",
"ignoreTLSError": "Ignorar error TLS/SSL para sitios web HTTPS",
"upsideDownModeDescription": "Invertir el estado. Si el servicio es alcanzable, está CAÍDO.",
"maxRedirectDescription": "Número máximo de direcciones a seguir. Establecer a 0 para deshabilitar.",
"acceptedStatusCodesDescription": "Seleccionar los códigos de estado que se consideran como respuesta exitosa.",
"passwordNotMatchMsg": "La contraseña repetida no coincide.",
"notificationDescription": "Por favor asigna una notificación a el/los monitor(es) para hacerlos funcional(es).",
"keywordDescription": "Buscar palabra clave en HTML plano o respuesta JSON. La búsqueda es sensible a mayúsculas.",
"pauseDashboardHome": "Pausado",
"deleteMonitorMsg": "¿Seguro que quieres eliminar este monitor?",
"deleteNotificationMsg": "¿Seguro que quieres eliminar esta notificación para todos los monitores?",
"resolverserverDescription": "Cloudflare es el servidor por defecto, puedes cambiar el servidor de resolución en cualquier momento.",
"rrtypeDescription": "Selecciona el tipo de registro que quieres monitorizar",
"pauseMonitorMsg": "¿Seguro que quieres pausar?",
"Settings": "Ajustes",
"Dashboard": "Panel",
"New Update": "Nueva actualización",
"Language": "Idioma",
"Appearance": "Apariencia",
"Theme": "Tema",
"General": "General",
"Version": "Versión",
"Check Update On GitHub": "Comprobar actualizaciones en GitHub",
"List": "Lista",
"Add": "Añadir",
"Add New Monitor": "Añadir nuevo monitor",
"Quick Stats": "Estadísticas rápidas",
"Up": "Funcional",
"Down": "Caído",
"Pending": "Pendiente",
"Unknown": "Desconocido",
"Pause": "Pausar",
"Name": "Nombre",
"Status": "Estado",
"DateTime": "Fecha y hora",
"Message": "Mensaje",
"No important events": "No hay eventos importantes",
"Resume": "Reanudar",
"Edit": "Editar",
"Delete": "Eliminar",
"Current": "Actual",
"Uptime": "Tiempo activo",
"Cert Exp.": "Caducidad cert.",
"day": "día | días",
"-day": "-día",
"hour": "hora",
"-hour": "-hora",
"Response": "Respuesta",
"Ping": "Ping",
"Monitor Type": "Tipo de monitor",
"Keyword": "Palabra clave",
"Friendly Name": "Nombre sencillo",
"URL": "URL",
"Hostname": "Nombre del host",
"Port": "Puerto",
"Heartbeat Interval": "Intervalo de latido",
"Retries": "Reintentos",
"Advanced": "Avanzado",
"Upside Down Mode": "Modo invertido",
"Max. Redirects": "Redirecciones máximas",
"Accepted Status Codes": "Códigos de estado aceptados",
"Save": "Guardar",
"Notifications": "Notificaciones",
"Not available, please setup.": "No disponible, por favor configúralo.",
"Setup Notification": "Configurar notificación",
"Light": "Claro",
"Dark": "Oscuro",
"Auto": "Auto",
"Theme - Heartbeat Bar": "Tema - Barra de intervalo de latido",
"Normal": "Normal",
"Bottom": "Abajo",
"None": "Ninguno",
"Timezone": "Zona horaria",
"Search Engine Visibility": "Visibilidad motor de búsqueda",
"Allow indexing": "Permitir indexación",
"Discourage search engines from indexing site": "Disuadir a los motores de búsqueda de indexar el sitio",
"Change Password": "Cambiar contraseña",
"Current Password": "Contraseña actual",
"New Password": "Nueva contraseña",
"Repeat New Password": "Repetir nueva contraseña",
"Update Password": "Actualizar contraseña",
"Disable Auth": "Deshabilitar autenticación",
"Enable Auth": "Habilitar autenticación",
"disableauth.message1": "Seguro que deseas <strong>deshabilitar la autenticación</strong>?",
"disableauth.message2": "Es para <strong>quien implementa autenticación de terceros</strong> ante Uptime Kuma como por ejemplo Cloudflare Access.",
"Please use this option carefully!": "¡Utilice esta opción con cuidado!",
"Logout": "Cerrar sesión",
"Leave": "Salir",
"I understand, please disable": "Entiendo, por favor deshabilitar",
"Confirm": "Confirmar",
"Yes": "Sí",
"No": "No",
"Username": "Usuario",
"Password": "Contraseña",
"Remember me": "Recordarme",
"Login": "Acceso",
"No Monitors, please": "Sin monitores, por favor",
"add one": "añade uno",
"Notification Type": "Tipo de notificación",
"Email": "Email",
"Test": "Test",
"Certificate Info": "Información del certificado",
"Resolver Server": "Servidor de resolución",
"Resource Record Type": "Tipo de registro",
"Last Result": "Último resultado",
"Create your admin account": "Crea tu cuenta de administrador",
"Repeat Password": "Repetir contraseña",
"respTime": "Tiempo de resp. (ms)",
"notAvailableShort": "N/A",
"Create": "Crear",
"clearEventsMsg": "¿Estás seguro de que deseas eliminar todos los eventos de este monitor?",
"clearHeartbeatsMsg": "¿Estás seguro de que deseas eliminar todos los latidos de este monitor?",
"confirmClearStatisticsMsg": "¿Estás seguro de que deseas eliminar TODAS las estadísticas?",
"Clear Data": "Borrar datos",
"Events": "Eventos",
"Heartbeats": "Latidos",
"Auto Get": "Obtener automáticamente",
"enableDefaultNotificationDescription": "Para cada nuevo monitor, esta notificación estará habilitada de forma predeterminada. Aún puedes deshabilitar la notificación por separado para cada monitor.",
"Default enabled": "Habilitado por defecto",
"Also apply to existing monitors": "También se aplica a monitores existentes",
"Export": "Exportar",
"Import": "Importar",
"backupDescription": "Puedes hacer una copia de seguridad de todos los monitores y todas las notificaciones en un archivo JSON.",
"backupDescription2": "PD: el historial y los datos de eventos no están incluidos.",
"backupDescription3": "Los datos confidenciales, como los tokens de notificación, se incluyen en el archivo de exportación. Guárdalo con cuidado.",
"alertNoFile": "Selecciona un archivo para importar.",
"alertWrongFileType": "Selecciona un archivo JSON.",
"twoFAVerifyLabel": "Ingresa tu token para verificar que 2FA está funcionando:",
"tokenValidSettingsMsg": "¡El token es válido! Ahora puedes guardar la configuración de 2FA.",
"confirmEnableTwoFAMsg": "¿Estás seguro de que quieres habilitar 2FA?",
"confirmDisableTwoFAMsg": "¿Estás seguro de que quieres desactivar 2FA?",
"Apply on all existing monitors": "Aplicar en todos los monitores existentes",
"Verify Token": "Verificar token",
"Setup 2FA": "Configurar 2FA",
"Enable 2FA": "Habilitar 2FA",
"Disable 2FA": "Desactivar 2FA",
"2FA Settings": "Ajustes 2FA",
"Two Factor Authentication": "Autenticación de dos factores",
"Active": "Activo",
"Inactive": "Inactivo",
"Token": "Token",
"Show URI": "Mostrar URI",
"Clear all statistics": "Borrar todas las estadísticas",
"retryCheckEverySecond": "Reintentar cada {0} segundos",
"importHandleDescription": "Elige 'Omitir existente' si deseas omitir todos los monitores o notificaciones con el mismo nombre. 'Sobrescribir' eliminará todos los monitores y notificaciones existentes.",
"confirmImportMsg": "¿Estás seguro de importar la copia de seguridad? Asegúrate de haber seleccionado la opción de importación correcta.",
"Heartbeat Retry Interval": "Intervalo de reintento de latido",
"Import Backup": "Importar copia de seguridad",
"Export Backup": "Exportar copia de seguridad",
"Skip existing": "Omitir existente",
"Overwrite": "Sobrescribir",
"Options": "Opciones",
"Keep both": "Manténer ambos",
"Tags": "Etiquetas",
"Add New below or Select...": "Agregar nuevo a continuación o seleccionar…",
"Tag with this name already exist.": "Una etiqueta con este nombre ya existe.",
"Tag with this value already exist.": "Una etiqueta con este valor ya existe.",
"color": "color",
"value (optional)": "valor (opcional)",
"Gray": "Gris",
"Red": "Rojo",
"Orange": "Naranja",
"Green": "Verde",
"Blue": "Azul",
"Indigo": "Índigo",
"Purple": "Morado",
"Pink": "Rosa",
"Search...": "Buscar…",
"Avg. Ping": "Ping promedio",
"Avg. Response": "Respuesta promedio",
"Entry Page": "Página de entrada",
"statusPageNothing": "No hay nada aquí, agrega un grupo o un monitor.",
"No Services": "Sin servicio",
"All Systems Operational": "Todos los sistemas están operativos",
"Partially Degraded Service": "Servicio parcialmente degradado",
"Degraded Service": "Servicio degradado",
"Add Group": "Agregar grupo",
"Add a monitor": "Agregar un monitor",
"Edit Status Page": "Editar página de estado",
"Go to Dashboard": "Ir al panel de control",
"Status Page": "Página de estado",
"Status Pages": "Páginas de estado",
"telegram": "Telegram",
"webhook": "Webhook",
"smtp": "Email (SMTP)",
"discord": "Discord",
"teams": "Microsoft Teams",
"signal": "Señal",
"gotify": "Gotify",
"slack": "Slack",
"rocket.chat": "Rocket.chat",
"pushover": "Pushover",
"pushy": "Pushy",
"octopush": "Octopush",
"promosms": "PromoSMS",
"lunasea": "LunaSea",
"apprise": "Apprise (Admite más de 50 servicios de notificación)",
"pushbullet": "Pushbullet",
"line": "Line Messenger",
"mattermost": "Mattermost",
"Monitor History": "Historial de monitor",
"clearDataOlderThan": "Mantener los datos del historial del monitor durante {0} días.",
"records": "registros",
"One record": "Un registro",
"steamApiKeyDescription": "Para monitorear un servidor de juegos de Steam, necesitas una clave Steam Web-API. Puedes registrar tu clave API aquí: ",
"Custom Monitor Type": "Monitor Tipo Personalizado",
"Primary Base URL": "URL Base Primaria",
"Passive Monitor Type": "Monitor Tipo Pasivo",
"pushOptionalParams": "Parámetros opcionales: {0}",
"Schedule maintenance": "Programar mantenimiento",
"Pick Affected Monitors...": "Seleccionar Monitores Afectados…",
"Start of maintenance": "Inicio del mantenimiento",
"All Status Pages": "Todas las Páginas de Estado",
"Select status pages...": "Seleccionar páginas de estado…",
"Style": "Estilo",
"info": "información",
"warning": "advertencia",
"danger": "peligro",
"critical": "crítico",
"primary": "primario",
"Content": "Contenido",
"recent": "Reciente",
"Done": "Terminado",
"Create Incident": "Crear Incidente",
"Title": "Título",
"Info": "Información",
"Security": "Seguridad",
"Current User": "Usuario Actual",
"topic": "Asunto",
"Shrink Database": "Reducir Base de Datos",
"dark": "oscuro",
"light": "claro",
"Last Updated": "Última Actualización",
"Show Tags": "Mostrar Etiquetas",
"Switch to Light Theme": "Cambiar a Tema Claro",
"Add one": "Añadir uno",
"Description": "Descripción",
"Cancel": "Cancelar",
"No Monitors": "Sin Monitores",
"Untitled Group": "Grupo sin título",
"Services": "Servicios",
"Discard": "Descartar",
"Add New Status Page": "Añadir Nueva Página de Estado",
"Start": "Iniciar",
"Stop": "Parar",
"Remove Token": "Eliminar Token",
"Powered by": "Potenciado por",
"Customize": "Personalizar",
"Custom Footer": "Pie Personalizado",
"Custom CSS": "CSS Personalizado",
"Backup": "Respaldo",
"Go back to the previous page.": "Volver a la página anterior.",
"Query": "Consulta",
"Examples": "Ejemplos",
"weekdayShortMon": "Lun",
"weekdayShortWed": "Mie",
"weekdayShortSat": "Sab",
"Ignore TLS Error": "Ignorar Error TLS",
"secureOptionNone": "Ninguno / STARTTLS (25, 587)",
"Schedule Maintenance": "Programar Mantenimiento",
"Date and Time": "Fecha y Hora",
"Enable": "Habilitar",
"Disable": "Deshabilitar",
"maintenanceStatus-inactive": "Inactivo",
"maintenanceStatus-scheduled": "Programado",
"maintenanceStatus-unknown": "Desconocido",
"Display Timezone": "Mostrar Zona Horaria",
"Server Timezone": "Servidor de Zona Horaria",
"statusPageMaintenanceEndDate": "Finaliza",
"Enable DNS Cache": "Habilitar Cache DNS",
"No Maintenance": "Sin Mantenimiento",
"weekdayShortSun": "Dom",
"dayOfWeek": "Día de la Semana",
"dayOfMonth": "Día del Mes",
"lastDay": "Último día",
"lastDay1": "Último Día del Mes",
"pauseMaintenanceMsg": "¿Seguro que quiere pausar?",
"maintenanceStatus-under-maintenance": "En Mantenimiento",
"DateTime Range": "Rango de Fecha y Hora",
"infiniteRetention": "Poner a 0 para retención infinita.",
"confirmDeleteTagMsg": "¿Estas seguro que quieres eliminar esta etiqueta? Los monitores asociados a esta etiqueta no serán eliminados.",
"Example:": "Ejemplo: {0}",
"Strategy": "Estrategia",
"Read more:": "Leer más: {0}",
"onebotGroupMessage": "Grupo",
"Affected Monitors": "Monitores Afectados",
"Custom": "Personalizado",
"Headers": "Encabezados",
"PhoneNumbers": "Números de Teléfono",
"No monitors available.": "Sin monitores disponibles.",
"error": "error",
"deleteProxyMsg": "¿Seguro que quieres eliminar este proxy para todos los monitores?",
"Hide Tags": "Ocultar Etiquetas",
"Created": "Creado",
"Switch to Dark Theme": "Cambiar a Tema Oscuro",
"More info on:": "Más información en: {0}",
"weekdayShortTue": "Mar",
"PasswordsDoNotMatch": "Las contraseñas no coinciden.",
"statusMaintenance": "Mantenimiento",
"Maintenance": "Mantenimiento",
"General Monitor Type": "Monitor Tipo General",
"Specific Monitor Type": "Monitor Tipo Específico",
"Monitor": "Monitores",
"Resend Notification if Down X times consequently": "Reenviar Notificación si Caído X veces consecutivas",
"resendEveryXTimes": "Reenviar cada {0} veces",
"resendDisabled": "Reenvío deshabilitado",
"needPushEvery": "Debe llamar a esta URL cada {0} segundos.",
"here": "aquí",
"Content Type": "Tipo de Contenido",
"Required": "Requerido",
"defaultNotificationName": "Mi {notification} Alerta ({number})",
"Server URL": "URL del servidor",
"Priority": "Prioridad",
"Read more": "Leer más",
"Body": "Cuerpo",
"webhookAdditionalHeadersTitle": "Encabezados Adicionales",
"Method": "Método",
"Default": "Predeterminado",
"uninstalling": "Desinstalando",
"install": "Instalar",
"installing": "Instalando",
"uninstall": "Desinstalar",
"confirmUninstallPlugin": "¿Estas seguro que quieres desinstalar este complemento?",
"Recipients": "Destinatarios",
"User ID": "ID de Usuario",
"deleteMaintenanceMsg": "¿Seguro que quieres eliminar este mantenimiento?",
"promosmsLogin": "Nombre de inicio de sesión de la API",
"SMS Type": "Tipo de SMS",
"Device": "Dispositivo",
"Message Title": "Título del Mensaje",
"Notification Sound": "Sonido de Notificación",
"documentation": "documentación",
"onebotUserOrGroupId": "Grupo/ID de Usuario",
"Game": "Juego",
"or": "ó",
"Status:": "Estado: {0}",
"Help": "Ayuda",
"HTTP Options": "Opciones HTTP",
"weekdayShortThu": "Jue",
"weekdayShortFri": "Vie",
"maintenanceStatus-ended": "Finalizado",
"BodyInvalidFormat": "El cuerpo de la solicitud no es JSON válido: ",
"topicExplanation": "Tema MQTT para monitorear",
"successMessageExplanation": "Mensaje MQTT que será considerado como éxito",
"Steam API Key": "API Key de Steam",
"Please input title and content": "Por favor introduzca título y contenido",
"Footer Text": "Texto del Pié",
"Show Powered By": "Mostrar Potenciado Por",
"Domain Names": "Nombres de Dominio",
"signedInDisp": "Iniciada sesión como {0}",
"RadiusSecretDescription": "Secreto Compartido entre cliente y servidor",
"RadiusCalledStationId": "Id de la Estación Llamada",
"RadiusCalledStationIdDescription": "Identificador del dispositivo llamado",
"RadiusCallingStationId": "Id de Estación Llamante",
"Certificate Expiry Notification": "Notificación de Caducidad del Certificado",
"API Username": "Nombre Usuario API",
"API Key": "Clave API",
"Show update if available": "Mostrar actualización si está disponible",
"Also check beta release": "Comprobar también lanzamientos beta",
"Steam Game Server": "Servidor de Juegos de Steam",
"Most likely causes:": "Las causas más probables:",
"There might be a typing error in the address.": "Debe haber un error de escritura en la dirección.",
"What you can try:": "Lo que puedes intentar:",
"Retype the address.": "Reescriba la dirección.",
"Coming Soon": "Próximamente",
"Connection String": "Cadena de Conexión",
"settingsCertificateExpiry": "Caducidad del certificado TLS",
"certificationExpiryDescription": "Los monitores HTTPS activan una notificación cuando el certificado TLS caduca en:",
"Setup Docker Host": "Configurar Host de Docker",
"Connection Type": "Tipo de Conexión",
"Docker Daemon": "Demonio Docker",
"deleteDockerHostMsg": "¿Estas seguro que quieres eliminar este host de docker para todos los monitores?",
"Date Created": "Fecha de Creación",
"signedInDispDisabled": "Autenticación Deshabilitada.",
"RadiusCallingStationIdDescription": "Identificador del dispositivo llamante",
"Using a Reverse Proxy?": "¿Usando un Proxy Inverso?",
"Check how to config it for WebSocket": "Compruebe cómo configurarlo para WebSocket",
"The resource is no longer available.": "El recurso ya no está disponible.",
"Push URL": "URL Push",
"Webhook URL": "URL Webhook",
"Application Token": "Token de Aplicación",
"appriseNotInstalled": "Apprise no está instalado. {0}",
"PushUrl": "URL Push",
"HeadersInvalidFormat": "Los encabezados de solicitud no son JSON válido: ",
"Post URL": "URL Post",
"emojiCheatSheet": "Hoja de trucos Emoji: {0}",
"webhookJsonDesc": "{0} es bueno para cualquier servidor HTTP moderno como Express.js",
"webhookFormDataDesc": "{multipart} es bueno para PHP. El JSON deberá analizarse con {decodeFunction}",
"webhookAdditionalHeadersDesc": "Establece encabezados adicionales enviados con el webhook.",
"appriseInstalled": "Apprise está instalado.",
"successMessage": "Mensaje de éxito",
"Pick Accepted Status Codes...": "Elija códigos de estado aceptados…",
"Post": "Post",
"shrinkDatabaseDescription": "Activar ASPIRADORA para SQLite. Si tu base de datos fue creada después 1.10.0, AUTO_ASPIRADORA ya está habilitada y esta acción no es necesaria.",
"deleteStatusPageMsg": "¿Estas seguro que quieres eliminar esta página de estado?",
"default": "Predeterminado",
"enabled": "Habilitado",
"setAsDefault": "Establecer Por Defecto",
"proxyDescription": "Proxies deben ser asignados a un monitor para que funcionen.",
"warningTimezone": "Está usando la zona horaria del servidor",
"trustProxyDescription": "Confiar en los encabezados 'X-Forwarded-*'. Si desea obtener la IP de cliente correcta y su Uptime Kuma está detrás de un proxy como Nginx o Apache, debe habilitar esto.",
"enableProxyDescription": "Este proxy no afectará las solicitudes de monitoreo hasta que se active. Puede controlar deshabilitar temporalmente el proxy de todos los monitores por estado de activación.",
"setAsDefaultProxyDescription": "Este proxy estará habilitado de forma predeterminada para los nuevos monitores. Todavía puede deshabilitar el proxy por separado para cada monitor.",
"Certificate Chain": "Cadena de certificado",
"Valid": "Válido",
"Invalid": "Inválido",
"User": "Usuario",
"Installed": "Instalado",
"Not installed": "No instalado",
"Running": "Funcionando",
"Not running": "No funcionando",
"Slug": "Slug",
"Accept characters:": "Aceptar caracteres:",
"Proxies": "Proxys",
"startOrEndWithOnly": "Empezar o terminar sólo con {0}",
"No consecutive dashes": "Sin guiones consecutivos",
"Next": "Siguiente",
"The slug is already taken. Please choose another slug.": "Este slug ya está en uso. Por favor, elige otro slug.",
"No Proxy": "Sin Proxy",
"Authentication": "Autenticación",
"HTTP Basic Auth": "Autenticación básica HTTP",
"New Status Page": "Nueva Página de Estado",
"Page Not Found": "Página No Encontrada",
"Reverse Proxy": "Proxy Inverso",
"About": "Acerca de",
"wayToGetCloudflaredURL": "(Descargar cloudflared de {0})",
"cloudflareWebsite": "Web de Cloudflare",
"Message:": "Mensaje:",
"Don't know how to get the token? Please read the guide:": "No sabes como obtener el token? Por favor, lee la guía:",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "La conexión actual puede perderse si actualmente se está conectando a través del Tunel Cloudflare. ¿Seguro que quieres detenerlo? Escriba su contraseña actual para confirmarlo.",
"HTTP Headers": "Encabezados HTTP",
"Trust Proxy": "Proxy de Confianza",
"Other Software": "Otro Software",
"For example: nginx, Apache and Traefik.": "Por ejemplo: nginx, Apache y Traefik.",
"Please read": "Por favor lee",
"Subject:": "Asunto:",
"Valid To:": "Válido Para:",
"Days Remaining:": "Días Restantes:",
"Issuer:": "Emisor:",
"Fingerprint:": "Huella:",
"No status pages": "Sin páginas de estado",
"Domain Name Expiry Notification": "Notificación de Caducidad de Nombre de Dominio",
"Proxy": "Proxy",
"RadiusSecret": "Secreto de Radius",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Contenedor de Docker",
"Container Name / ID": "Nombre / ID de Contenedor",
"Docker Host": "Host Docker",
"Docker Hosts": "Hosts Docker",
"Domain": "Dominio",
"Workstation": "Puesto de Trabajo",
"Packet Size": "Tamaño del Paquete",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Token de Bot",
"wayToGetTelegramToken": "Puedes conseguir un token desde {0}.",
"Chat ID": "ID de Chat",
"supportTelegramChatID": "Chat Directo de Soporte / Grupo / ID de Chat del Canal",
"wayToGetTelegramChatID": "Puedes obtener tu ID de chat enviando un mensaje al bot y visitando esta URL para ver el chat_id:",
"YOUR BOT TOKEN HERE": "TU TOKEN DE BOT AQUÍ",
"chatIDNotFound": "ID de Chat no encontrada; por favor, primero envía un mensaje a este bot",
"disableCloudflaredNoAuthMsg": "Estas en modo No Autenticado, no es necesaria una contraseña.",
"wayToGetLineNotifyToken": "Puede obtener un token de acceso desde {0}",
"Home Assistant URL": "URL de Asistente de Hogar",
"Long-Lived Access Token": "Token de acceso de larga duración",
"Notification Service": "Servicio de Notificaciones",
"default: notify all devices": "predeterminado: notificar todos los dispositivos",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Puede encontrar una lista de Servicios de notificación en Asistente de Hogar en \"Herramientas para desarrolladores > Servicios\", busque \"notificación\" para encontrar el nombre de su dispositivo/teléfono.",
"Automations can optionally be triggered in Home Assistant:": "Las automatizaciones se pueden activar opcionalmente en Asistente de Hogar:",
"Trigger type:": "Tipo de disparador:",
"Event type:": "Tipo de Evento:",
"Event data:": "Datos del Evento:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Luego elija una acción, por ejemplo, cambie la escena a donde una luz RGB es roja.",
"Frontend Version": "Versión de Interfaz",
"Frontend Version do not match backend version!": "La Versión de Interfaz no coincide con la versión backend!",
"backupRecommend": "Por favor, haz copia de seguridad del volumen o el archivo de datos (./data/) directamente en su lugar.",
"recurringInterval": "Intervalo",
"Recurring": "Periódico",
"strategyManual": "Activo/Inactivo Manualmente",
"lastDay2": "Penúltimo Día del Mes",
"lastDay3": "Antepenúltimo día del mes",
"lastDay4": "Trasantepenúltimo Día del Mes",
"IconUrl": "URL de Icono",
"dnsCacheDescription": "Es posible que no funcione en algunos entornos IPv6; desactívelo si encuentra algún problema.",
"Single Maintenance Window": "Ventana de Mantenimiento Único",
"secureOptionTLS": "TLS (465)",
"aboutMattermostChannelName": "Puedes sobreescribir el canal por defecto en el cual el Webhook publica introduciendo el nombre del canal en el campo \"Nombre del Canal\". Esto tiene que estar habilitado en la configuración de Mattermost Webhook. Ejemplo: #otro-canal",
"dataRetentionTimeError": "El periodo de retención debe ser 0 o mayor",
"Enable TLS": "Habilita TLS",
"Lowcost": "Bajo coste",
"You can divide numbers with": "Puedes dividir números con",
"Base URL": "URL Base",
"Proto Service Name": "Nombre de Servicio Proto",
"Proto Method": "Método Proto",
"Proto Content": "Contenido Proto",
"Economy": "Económico",
"iOS": "iOS",
"Android": "Android",
"Platform": "Plataforma",
"onebotPrivateMessage": "Privado",
"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)",
"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",
"From Name/Number": "De Nombre/Número",
"Recipient Number": "Número de Destinatario",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "El token de acceso de larga duración se puede crear haciendo clic en el nombre de su perfil (abajo a la izquierda) y desplazándose hasta la parte inferior y luego haciendo clic en Crear token. ",
"backupOutdatedWarning": "Obsoleto: dado que se agregaron muchas funciones y esta función de copia de seguridad no se mantiene desde hace un tiempo, no puede generar ni restaurar una copia de seguridad completa.",
"Optional": "Opcional",
"loadingError": "No se pueden obtener los datos, inténtelo de nuevo más tarde.",
"pushoverDesc2": "Si quieres enviar notificaciones a diferentes dispositivos, rellena el campo Dispositivo.",
"octopushLegacyHint": "Utilizas la versión anterior de Octopush (2011-2020) o la nueva versión?",
"Sms template must contain parameters: ": "La plantilla SMS debería contener parámetros: ",
"For safety, must use secret key": "Por seguridad, deberías usar key secreta",
"signalImportant": "IMPORTANTE: No puedes mezclar grupos y números en destinatarios!",
"aboutWebhooks": "Más información sobre Webhooks en: {0}",
"smtpDkimHashAlgo": "Algoritmo Hash (Opcional)",
"promosmsPhoneNumber": "Número de teléfono (para destinatarios Polacos puedes omitir los códigos de área)",
"promosmsTypeFlash": "SMS FLASH - Mensaje se mostrará automáticamente en el dispositivo del destinatario. Limitado sólo a destinatarios Polacos.",
"promosmsSMSSender": "Nombre de Remitente SMS: Nombre pre-registrado o uno de los predeterminados: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"matrixDesc1": "Puedes encontrar la ID de sala interna mirando en la sección avanzado de los ajustes de sala en tu cliente Matrix. Debería ser algo como !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Es altamente recomendable crear un nuevo usuario y no usar el token de acceso propio de tu usuario porque otorgaría acceso completo a tu cuenta y todas las salas que hayas entrado. En su lugar, crea un usuario nuevo e invítalo a la sala donde quieres recibir las notificaciones. Puedes obtener el token de acceso ejecutando {0}",
"plugin": "Complemento | Complementos",
"From Email": "Desde el Email",
"emailCustomSubject": "Asunto Personalizado",
"To Email": "Al Email",
"smtpCC": "CC",
"smtpBCC": "CCO",
"Discord Webhook URL": "URL Webhook de Discord",
"wayToGetDiscordURL": "Puede obtener esto yendo a Configuración del servidor -> Integraciones -> Crear webhook",
"Bot Display Name": "Nombre para mostrar del Bot",
"Hello @everyone is...": "Hola {'@'}todos están…",
"wayToGetTeamsURL": "Puedes aprender cómo crear una URL webhook {0}.",
"wayToGetZohoCliqURL": "Puedes aprender cómo crear una URL webhook {0}.",
"needSignalAPI": "Necesitas tener un cliente de señal con API REST.",
"wayToCheckSignalURL": "Puedes revisar esta URL para ver cómo configurar uno:",
"Number": "Número",
"Access Token": "Token de Acceso",
"Channel access token": "Token de acceso al canal",
"Line Developers Console": "Consola de Desarrolladores de Line",
"lineDevConsoleTo": "Consola de Desarrolladores de Line - {0}",
"Basic Settings": "Configuración Básica",
"Messaging API": "API de Mensajería",
"wayToGetLineChannelToken": "Primero accede al {0}, crea un proveedor y un canal (API de Mensajería), entonces puedes obtener el token de acceso al cana y el ID de usuario de los elementos de menú anteriormente mencionados.",
"Icon URL": "URL de Icono",
"aboutIconURL": "Puede proporcionar un enlace a una imagen en \"URL de icono\" para anular la imagen de perfil predeterminada. No se utilizará si se establece Icono Emoji.",
"enableGRPCTls": "Permite enviar solicitudes gRPC con conexión TLS",
"grpcMethodDescription": "Nombre del método es convertido a formato cammelCase tal como digoHola, verificandoTodo, etc.",
"dnsPortDescription": "Puerto servidor DNS. Por defecto al 53. Puedes cambiar el puerto en cualquier momento.",
"recurringIntervalMessage": "Ejecutar una vez al día | Ejecutar una vez cada {0} días",
"affectedMonitorsDescription": "Selecciona los monitores que se ven afectados por el mantenimiento actual",
"affectedStatusPages": "Muestra este mensaje de mantenimiento en las páginas de estado seleccionadas",
"atLeastOneMonitor": "Selecciona al menos un monitor afectado",
"endpoint": "punto final",
"promosmsPassword": "Contraseña API",
"pushoversounds pushover": "Pushover (predeterminado)",
"pushoversounds bike": "Bicicleta",
"pushoversounds bugle": "Bugle",
"pushoversounds cashregister": "Caja Registradora",
"pushoversounds classical": "Clásica",
"pushoversounds cosmic": "Cósmico",
"pushoversounds falling": "Descendente",
"pushoversounds gamelan": "Gamelán",
"pushoversounds incoming": "Entrante",
"pushoversounds intermission": "Intermedio",
"pushoversounds magic": "Mágico",
"pushoversounds mechanical": "Mecánica",
"pushoversounds pianobar": "Bar Piano",
"pushoversounds siren": "Sirena",
"pushoversounds spacealarm": "Alarma Espacial",
"pushoversounds tugboat": "Remolcador",
"pushoversounds alien": "Alarma Alienígena (largo)",
"pushoversounds climb": "Escalada (largo)",
"pushoversounds persistent": "Persistente (largo)",
"pushoversounds echo": "Pushover Eco (largo)",
"pushoversounds updown": "Arriba Abajo (largo)",
"pushoversounds vibrate": "Sólo Vibración",
"pushoversounds none": "Ninguno (silencio)",
"pushyAPIKey": "Key de Api Secreta",
"pushyToken": "Token de Dispositivo",
"PushByTechulus": "Push con Techulus",
"clicksendsms": "SMS con ClickSend",
"GoogleChat": "Chat de Google (sólo Google Workspace)",
"Kook": "Kook",
"wayToGetKookBotToken": "Crea aplicación y obtén tu token de bot en {0}",
"wayToGetKookGuildID": "Activa 'Modo Desarrollador' en los ajustes de Kook, y haz click derecho en la unión para obtener su ID",
"Guild ID": "",
"User Key": "Key de Usuario",
"octopushTypePremium": "Premium (Rápido - recomendado para alertas)",
"octopushTypeLowCost": "Bajo Coste (Lento - algunas veces bloqueado por operador)",
"checkPrice": "Consultar {0} precios:",
"apiCredentials": "Credenciales de API",
"Check octopush prices": "Consulta los precios de octopush {0}.",
"octopushPhoneNumber": "Número de teléfono (en formato internacional, ejemplo: +33612345678) ",
"octopushSMSSender": "Nombre de Remitente del SMS: 3-11 caracteres alfanuméricos y espacio (a-zA-Z0-9)",
"LunaSea Device ID": "ID Dispositivo LunaSea",
"goAlert": "GoAlert",
"pushoverDesc1": "La prioridad Emergencia (2) tiene predeterminado un tiempo muerto entre reintentos de 30 segundos y expirará después de 1 hora.",
"AccessKeyId": "ID de Key de Acceso",
"SecretAccessKey": "Secrreto de Key de Acceso",
"TemplateCode": "Código de Plantilla",
"Bark Group": "Grupo de Bark",
"Bark Sound": "Sonido de Bark",
"SecretKey": "Key Secreta",
"Huawei": "Huawei",
"Retry": "Reintentar",
"Proxy Server": "Servidor Proxy",
"Proxy Protocol": "Protocolo Proxy",
"Setup Proxy": "Configurar Proxy",
"Proxy server has authentication": "El servidor Proxy tiene autenticación",
"promosmsAllowLongSMS": "Permitir SMS largo",
"Uptime Kuma URL": "URL de Uptime Kuma",
"Icon Emoji": "Icono Emoji",
"aboutKumaURL": "Si dejas vacío el campo URL Uptime Kuma, predeterminará la página GitHub del Proyecto.",
"smtpDkimSettings": "Ajustes DKIM",
"smtpDkimDomain": "Nombre de Dominio",
"smtpDkimKeySelector": "Selector de Key",
"smtpDkimPrivateKey": "Key Privada",
"Integration Key": "Key de Integración",
"Integration URL": "URL de Integración",
"Device Token": "Token de Dispositivo",
"WeCom Bot Key": "Key de Bot WeCom",
"promosmsTypeEco": "SMS ECO - barato pero lento y a veces sobrecargado. Limitado sólo a destinatarios Polacos.",
"promosmsTypeSpeed": "SMS SPEED - La mayor prioridad en el sistema. Muy rápido y confiable pero costoso (alrededor del doble del precio de SMS FULL).",
"matrixHomeserverURL": "URL Servidor Casero (con http(s):// y opcionalmente el puerto)",
"Internal Room Id": "ID de Sala Interna",
"Channel Name": "Nombre del canal",
"aboutChannelName": "Introduce el nombre del canal en {0} campo Nombre del Canal si quieres evitar el canal Webhook. Ejemplo: #otro-canal",
"smtpDkimDesc": "Por favor, remitir a DKIM Nodemailer {0} para descubrir como se usa.",
"smtpDkimheaderFieldNames": "Keys de encabezado para firmar (Opcional)",
"smtpDkimskipFields": "Keys de encabezado para no firmar (Opcional)",
"Auto resolve or acknowledged": "Resolución automática o reconocida",
"promosmsTypeFull": "SMS FULL - Nivel Premium de SMS, puedes usar tu Nombre de Remitente (Tienes que registrarlo primero). Confiable para alertas.",
"do nothing": "no hacer nada",
"alerta": "Alerta",
"serwersmsAPIPassword": "Contraseña de API",
"serwersmsPhoneNumber": "Número de teléfono",
"smseagle": "SMSEagle",
"smseagleTo": "Número(s) de teléfono",
"serwersmsSenderName": "Nombre de remitente de SMS (registrado a través del portal de cliente)",
"auto resolve": "resolución automática",
"auto acknowledged": "Auto reconocida",
"alertaEnvironment": "Entorno",
"PushDeer Key": "Key de PushDeer",
"onebotSafetyTips": "Por seguridad, deberías colocara el token de acceso",
"wayToGetClickSendSMSToken": "Puedes obtener Nombre de Usuario API y la Key API en {0}.",
"Apprise URL": "URL Apprise",
"gorush": "Gorush",
"squadcast": "Squadcast",
"Maintenance Time Window of a Day": "Ventana de tiempo de mantenimiento de un día",
"Effective Date Range": "Rango de Fecha Efectivo"
}

209
src/lang/et-EE.json Normal file
View File

@@ -0,0 +1,209 @@
{
"languageName": "eesti",
"retryCheckEverySecond": "Kontrolli {0} sekundilise vahega.",
"retriesDescription": "Mitu korda tuleb kontrollida, mille järel märkida 'maas' ja saata välja teavitus.",
"ignoreTLSError": "Eira TLS/SSL viga HTTPS veebisaitidel.",
"upsideDownModeDescription": "Käitle teenuse saadavust rikkena, teenuse kättesaamatust töötavaks.",
"maxRedirectDescription": "Suurim arv ümbersuunamisi, millele järgida. 0 ei luba ühtegi ",
"acceptedStatusCodesDescription": "Vali välja HTTP koodid, mida arvestada kõlblikuks.",
"passwordNotMatchMsg": "Salasõnad ei kattu.",
"notificationDescription": "Teavitusteenuse kasutamiseks seo see seirega.",
"keywordDescription": "Jälgi võtmesõna HTML või JSON vastustes. (tõstutundlik)",
"pauseDashboardHome": "Seisatud",
"deleteMonitorMsg": "Kas soovid eemaldada seire?",
"deleteNotificationMsg": "Kas soovid eemaldada selle teavitusteenuse kõikidelt seiretelt?",
"resolverserverDescription": "Cloudflare on vaikimisi pöördserver.",
"rrtypeDescription": "Vali kirje tüüp, mida soovid jälgida.",
"pauseMonitorMsg": "Kas soovid peatada seire?",
"Settings": "Seaded",
"Status Page": "Ülevaade",
"Status Pages": "Ülevaated",
"Dashboard": "Töölaud",
"New Update": "Uuem tarkvara versioon on saadaval.",
"Language": "Keel",
"Appearance": "Välimus",
"Theme": "Teema",
"General": "Üldine",
"Version": "Versioon",
"Check Update On GitHub": "Otsi uuendusi GitHub'ist",
"List": "Nimekiri",
"Add": "Lisa",
"Add New Monitor": "Lisa seire",
"Add a monitor": "Lisa seire",
"Quick Stats": "Ülevaade",
"Up": "Töökorras",
"Down": "Rikkis",
"Pending": "Määramisel",
"Unknown": "Kahtlast",
"Pause": "Seiska",
"Name": "Nimi",
"Status": "Olek",
"DateTime": "Kuupäev",
"Message": "Tulemus",
"No important events": "Märkimisväärsed juhtumid puuduvad.",
"Resume": "Taasta",
"Edit": "Muuda",
"Delete": "Eemalda",
"Current": "Hetkeseisund",
"Uptime": "Eluiga",
"Cert Exp.": "Sert. aegumine",
"day": "päev | päeva",
"-day": "-päev",
"hour": "tund",
"-hour": "-tund",
"Response": "Reaktsiooniaeg",
"Ping": "Ping",
"Monitor Type": "Seire tüüp",
"Keyword": "Võtmesõna",
"Friendly Name": "Sõbralik nimi",
"URL": "URL",
"Hostname": "Hostname",
"Port": "Port",
"Heartbeat Interval": "Tukse sagedus",
"Retries": "Korduskatsed",
"Advanced": "Rohkem",
"Upside Down Mode": "Tagurpidi seire",
"Max. Redirects": "Max. ümbersuunamine",
"Accepted Status Codes": "Kõlblikud HTTP koodid",
"Save": "Salvesta",
"Notifications": "Teavitused",
"Not available, please setup.": "Ühtegi teavitusteenust pole saadaval.",
"Setup Notification": "Lisa teavitusteenus",
"Light": "hele",
"Dark": "tume",
"Auto": "automaatne",
"Theme - Heartbeat Bar": "Teemasäte — tuksete riba",
"Normal": "tavaline",
"Bottom": "all",
"None": "puudub",
"Timezone": "Ajatsoon",
"Search Engine Visibility": "Otsimootorite ligipääs",
"Allow indexing": "Luba indekseerimine",
"Discourage search engines from indexing site": "Keela selle saidi indekseerimine otsimootorite poolt",
"Change Password": "Muuda parooli",
"Current Password": "praegune parool",
"New Password": "uus parool",
"Repeat New Password": "korda salasõna",
"Update Password": "Uuenda salasõna",
"Disable Auth": "Lülita autentimine välja",
"Enable Auth": "Lülita autentimine sisse",
"disableauth.message1": "Kas soovid <strong>lülitada autentimise välja</strong>?",
"disableauth.message2": "Kastuamiseks <strong>välise autentimispakkujaga</strong>, näiteks Cloudflare Access.",
"Please use this option carefully!": "Palun kasuta vastutustundlikult.",
"Logout": "Logi välja",
"Leave": "Lahku",
"I understand, please disable": "Olen tutvunud riskidega, lülita välja",
"Confirm": "Kinnita",
"Yes": "Jah",
"No": "Ei",
"Username": "kasutajanimi",
"Password": "parool",
"Remember me": "Mäleta mind",
"Login": "Logi sisse",
"No Monitors, please": "Seired puuduvad.",
"add one": "Lisa esimene",
"Notification Type": "Teavituse tüüp",
"Email": "e-posti aadress",
"Test": "Saada prooviteavitus",
"Certificate Info": "Sertifikaadi teave",
"Resolver Server": "Server, mis vastab DNS päringutele.",
"Resource Record Type": "DNS kirje tüüp",
"Last Result": "Viimane",
"Create your admin account": "Admininstraatori konto loomine",
"Repeat Password": "korda salasõna",
"respTime": "Reageerimisaeg (ms)",
"notAvailableShort": "N/A",
"enableDefaultNotificationDescription": "Kõik järgnevalt lisatud seired kasutavad seda teavitusteenuset. Seiretelt võib teavitusteenuse ühekaupa eemaldada.",
"clearEventsMsg": "Kas soovid seire kõik sündmused kustutada?",
"clearHeartbeatsMsg": "Kas soovid seire kõik tuksed kustutada?",
"confirmClearStatisticsMsg": "Kas soovid TERVE ajaloo kustutada?",
"Export": "Eksport",
"Import": "Import",
"Default enabled": "Kasuta vaikimisi",
"Apply on all existing monitors": "Kõik praegused seired hakkavad kasutama seda teavitusteenust",
"Create": "Loo konto",
"Clear Data": "Eemalda andmed",
"Events": "Sündmused",
"Heartbeats": "Tuksed",
"Auto Get": "Hangi automaatselt",
"backupDescription": "Varunda kõik seired ja teavitused JSON faili.",
"backupDescription2": "PS: Varukoopia EI sisalda seirete ajalugu ja sündmustikku.",
"backupDescription3": "Varukoopiad sisaldavad teavitusteenusete pääsuvõtmeid.",
"alertNoFile": "Palun lisa fail, mida importida.",
"alertWrongFileType": "Palun lisa JSON-formaadis fail.",
"twoFAVerifyLabel": "2FA kinnitamiseks sisesta pääsukood",
"tokenValidSettingsMsg": "Kood õige. Akna võib sulgeda.",
"confirmEnableTwoFAMsg": "Kas soovid 2FA sisse lülitada?",
"confirmDisableTwoFAMsg": "Kas soovid 2FA välja lülitada?",
"Verify Token": "Kontrolli",
"Setup 2FA": "Kaksikautentimise seadistamine",
"Enable 2FA": "Seadista 2FA",
"Disable 2FA": "Lülita 2FA välja",
"2FA Settings": "2FA seaded",
"Two Factor Authentication": "Kaksikautentimine",
"Active": "kasutusel",
"Inactive": "seadistamata",
"Token": "kaksikautentimise kood",
"Show URI": "Näita URId",
"Clear all statistics": "Tühjenda ajalugu",
"importHandleDescription": "'kombineeri' täiendab varukoopiast ja kirjutab üle samanimelised seireid ja teavitusteenused; 'lisa praegustele' jätab olemasolevad puutumata; 'asenda' kustutab ja asendab kõik seired ja teavitusteenused.",
"confirmImportMsg": "Käkerdistest hoidumiseks lae enne taastamist alla uus varukoopia. Kas soovid taastada üles laetud?",
"Heartbeat Retry Interval": "Korduskatsete intervall",
"Import Backup": "Varukoopia importimine",
"Export Backup": "Varukoopia eksportimine",
"Skip existing": "lisa praegustele",
"Overwrite": "asenda",
"Options": "Mestimisviis",
"Keep both": "kombineeri",
"Tags": "Sildid",
"Add New below or Select...": "Leia või lisa all uus…",
"Tag with this name already exist.": "Selle nimega silt on juba olemas.",
"Tag with this value already exist.": "Selle väärtusega silt on juba olemas.",
"color": "värvus",
"value (optional)": "väärtus (fakultatiivne)",
"Gray": "hall",
"Red": "punane",
"Orange": "oranž",
"Green": "roheline",
"Blue": "sinine",
"Indigo": "indigo",
"Purple": "lilla",
"Pink": "roosa",
"Search...": "Otsi…",
"Avg. Ping": "Keskmine ping",
"Avg. Response": "Keskmine reaktsiooniaeg",
"Entry Page": "Avaleht",
"statusPageNothing": "Kippu ega kõppu; siia saab lisada seireid või -gruppe.",
"No Services": "Teenused puuduvad.",
"All Systems Operational": "Kõik töökorras",
"Partially Degraded Service": "Teenuse töö osaliselt häiritud",
"Degraded Service": "Teenuse töö häiritud",
"Add Group": "Lisa grupp",
"Edit Status Page": "Muuda lehte",
"Go to Dashboard": "Töölauale",
"checkEverySecond": "Kontrolli peale tõrget {0} sekundilise vahega.",
"telegram": "Telegram",
"webhook": "Webhook",
"smtp": "elektronpost (SMTP)",
"discord": "Discord",
"teams": "Microsoft Teams",
"signal": "Signal",
"gotify": "Gotify",
"slack": "Slack",
"rocket.chat": "Rocket.chat",
"pushover": "Pushover",
"pushy": "Pushy",
"octopush": "Octopush",
"promosms": "PromoSMS",
"lunasea": "LunaSea",
"apprise": "Apprise (vahendab üle 65 teavitusteenust)",
"pushbullet": "Pushbullet",
"line": "LINE",
"mattermost": "Mattermost",
"alerta": "Alerta",
"alertaApiEndpoint": "API otsik",
"alertaEnvironment": "Keskkond",
"alertaApiKey": "API võti",
"alertaAlertState": "Häireseisund",
"alertaRecoverState": "Taasta algolek"
}

541
src/lang/eu.json Normal file
View File

@@ -0,0 +1,541 @@
{
"languageName": "Euskara",
"checkEverySecond": "Egiaztatu {0} segunduro",
"retryCheckEverySecond": "Errepikatu {0} segunduro",
"retriesDescription": "Zerbitzua erorita markatu eta jakinarazpena bidali aurretik egindako saiakera kopuru maximoa",
"ignoreTLSError": "Ezikusiarena egin TLS/SSL erroreei HTTPS webguneetan",
"upsideDownModeDescription": "Alderantzizkatu erortze egoera. Zerbitzua martxan badago, ERORITA markatuko du.",
"maxRedirectDescription": "Jarraitu beharreko berbideratze kopuru maximoa. Jarri 0 berbideratzeak desgaitzeko.",
"acceptedStatusCodesDescription": "Hautatu erantzun ona kontsideratzen diren egoera kodeak.",
"passwordNotMatchMsg": "Errepikatutako pasahitza ez dator bat.",
"notificationDescription": "Jakinarazpenak monitorizazio funtzio bati asignatu behar zaizkio.",
"keywordDescription": "Bilatu gako-hitza HTML edo JSON erantzunean. Bilaketan maiuskulak kontuan hartzen dira.",
"pauseDashboardHome": "Gelditu",
"deleteMonitorMsg": "Ziur zaude monitorizazio hau ezabatu nahi duzula?",
"deleteNotificationMsg": "Ziur zaude jakinarazpen hau monitorizazio guztientzat ezabatu nahi duzula?",
"dnsPortDescription": "DNS zerbitzari portua. Defektuz 53. Nahi duzunean aldatu dezakezu portua.",
"resolverserverDescription": "Cloudflare zerbitzari lehenetsia da. Edozein unetan alda dezakezu ebazteko zerbitzaria.",
"rrtypeDescription": "Hautatu kontrolatu nahi duzun RR mota",
"enableDefaultNotificationDescription": "Jakinarazpen hau monitore berrientzat gaituko da defektuz. Baina monitorizazio bakoitzarentzat jakinarazpena desgaitu dezakezu.",
"pauseMonitorMsg": "Ziur zaude gelditu egin nahi duzula?",
"clearEventsMsg": "Ziur zaude monitorizazio honen gertaera guztiak ezabatu nahi dituzula?",
"clearHeartbeatsMsg": "Ziur zaude monitorizazio honen pultsu guztiak ezabatu nahi dituzula?",
"confirmClearStatisticsMsg": "Ziur zaude estatistika GUZTIAK ezabatu nahi dituzula?",
"importHandleDescription": "Aukeratu 'existitzen bada', izen bereko monitore edo jakinarazpen bakoitza saltatu nahi baduzu. Lehendik dauden kontrol eta jakinarazpen guztiak ezabatuko ditu 'Gainidatzi' aukerak.",
"confirmImportMsg": "Ziur zaude segurtasun-kopia inportatu nahi duzula? Egiaztatu inportatzeko aukera zuzena hautatu duzula.",
"twoFAVerifyLabel": "Sartu zure tokena 2FA egiaztatzeko:",
"tokenValidSettingsMsg": "Tokenak balio du! Orain 2FA konfigurazioa gorde dezakezu.",
"confirmEnableTwoFAMsg": "Ziur zaude 2FA gaitu nahi duzula?",
"confirmDisableTwoFAMsg": "Ziur zaude 2FA desgaitu nahi duzula?",
"Settings": "Ezarpenak",
"Dashboard": "Arbela",
"New Update": "Eguneraketa berria",
"Language": "Hizkuntza",
"Appearance": "Itxura",
"Theme": "Gaia",
"General": "Orokorra",
"Primary Base URL": "Oinarrizkoa URL",
"Version": "Bertsioa",
"Check Update On GitHub": "Egiaztatu eguneraketa GitHuben",
"List": "Zerrenda",
"Add": "Gehitu",
"Add New Monitor": "Gehitu monitorizazio berria",
"Quick Stats": "Estatistika azkarrak",
"Up": "Erabilgarri",
"Down": "Erorita",
"Pending": "Zain",
"Unknown": "Ezezaguna",
"Pause": "Gelditu",
"Name": "Izena",
"Status": "Egoera",
"DateTime": "Data eta ordua",
"Message": "Mezua",
"No important events": "Gertaera garrantzitsurik ez",
"Resume": "Jarraitu",
"Edit": "Editatu",
"Delete": "Ezabatu",
"Current": "Unekoa",
"Uptime": "Martxan",
"Cert Exp.": "Ziurtagiri iraun.",
"day": "egun | egun",
"-day": "-egun",
"hour": "ordua",
"-hour": "-ordu",
"Response": "Erantzuna",
"Ping": "Ping",
"Monitor Type": "Monitorizazio mota",
"Keyword": "Gakohitza",
"Friendly Name": "Izen xumea",
"URL": "URLa",
"Hostname": "Ostalari izena",
"Port": "Portua",
"Heartbeat Interval": "Pultsu interbaloak",
"Retries": "Errepikapenak",
"Heartbeat Retry Interval": "Pultsu errepikatze interbaloak",
"Advanced": "Aurreratua",
"Upside Down Mode": "Alderantzizkako modua",
"Max. Redirects": "Berbideratze max.",
"Accepted Status Codes": "Onartutako egoera kodeak",
"Push URL": "Push URLa",
"needPushEvery": "URL hau {0} segunduro deitu beharko zenuke.",
"pushOptionalParams": "Hautazko parametroak: {0}",
"Save": "Gorde",
"Notifications": "Jakinarazpenak",
"Not available, please setup.": "Ez dago eskuragarri, ezarri mesedez.",
"Setup Notification": "Ezarri jakinarazpenak",
"Light": "Argia",
"Dark": "Iluna",
"Auto": "Auto",
"Theme - Heartbeat Bar": "Gaia - Pultsu barra",
"Normal": "Normala",
"Bottom": "Behean",
"None": "Bat ere ez",
"Timezone": "Timezone",
"Search Engine Visibility": "Bilatzaile ikurgarritasuna",
"Allow indexing": "Onartu indexatzea",
"Discourage search engines from indexing site": "Discourage search engines from indexing site",
"Change Password": "Aldatu pasahitza",
"Current Password": "Uneko pasahitza",
"New Password": "Pasahitz berria",
"Repeat New Password": "Errepikatu pasahitz berria",
"Update Password": "Eguneratu pasahitza",
"Disable Auth": "Desgaitu Auth",
"Enable Auth": "Gaitu Auth",
"disableauth.message1": "Ziur zaude <strong>autentifikazioa desgaitu</strong> nahi duzula?",
"disableauth.message2": "Egoera jakin batzuetarako diseinatuta dago, Uptime Kumaren <strong>aurrean hirugarrengo autentifikazio batzuek jartzeko</strong> (Cloudflare Access, Authelia edo beste autentifikazio-mekanismo batzuk).",
"Please use this option carefully!": "Mesedez, kontuz erabili aukera hau!",
"Logout": "Saioa amaitu",
"Leave": "Utzi",
"I understand, please disable": "Ulertzen dut, mesedez desgaitu",
"Confirm": "Baieztatu",
"Yes": "Bai",
"No": "Ez",
"Username": "Erabiltzailea",
"Password": "Pasahitza",
"Remember me": "Gogora nazazu",
"Login": "Saioa hasi",
"No Monitors, please": "Monitorizaziorik ez, mesedez",
"add one": "gehitu bat",
"Notification Type": "Jakinarazpen mota",
"Email": "Emaila",
"Test": "Testa",
"Certificate Info": "Ziurtagiri informazioa",
"Resolver Server": "Ebazpen-zerbitzaria",
"Resource Record Type": "Baliabideen erregistro mota",
"Last Result": "Azken emaitza",
"Create your admin account": "Sortu zure admin kontua",
"Repeat Password": "Errepikatu pasahitza",
"Import Backup": "segurtasun-kopia inportatu",
"Export Backup": "segurtasun-kopia esportatu",
"Export": "Esportatu",
"Import": "Inportatu",
"respTime": "Erantz. denbora (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Lehenetsia gaituta",
"Apply on all existing monitors": "Aplikatu existitzen diren monitorizazio guztietan",
"Create": "Sortu",
"Clear Data": "Garbitu datuak",
"Events": "Gertaerak",
"Heartbeats": "Pultsuak",
"Auto Get": "Auto Get",
"backupDescription": "Monitore eta jakinarazpen guztien segurtasun-kopiak egin ditzakezu JSON fitxategi batean.",
"backupDescription2": "Oharra: ez dira historia eta gertaeren datuak sartzen.",
"backupDescription3": "Datu sentikorrak, hala nola jakinarazpen tokenak, esportazio-fitxategian sartzen dira; mesedez, gorde esportazioa modu seguruan.",
"alertNoFile": "Mesedez hautatu inportatzeko fitxategia.",
"alertWrongFileType": "Mesedez hautatu JSON fitxategia.",
"Clear all statistics": "Garbitu estatistika guztiak",
"Skip existing": "Saltatu existitzen bada",
"Overwrite": "Gainidatzi",
"Options": "Aukerak",
"Keep both": "Biak mantendu",
"Verify Token": "Egiaztatu Tokena",
"Setup 2FA": "Ezarri 2FA",
"Enable 2FA": "Gaitu 2FA",
"Disable 2FA": "Desgaitu 2FA",
"2FA Settings": "2FA ezarpenak",
"Two Factor Authentication": "Bi aldetako autentifikazioa (2FA)",
"Active": "Aktibo",
"Inactive": "Inaktibo",
"Token": "Tokena",
"Show URI": "Erakutsi URIa",
"Tags": "Etiketak",
"Add New below or Select...": "Gehitu beste bat behean edo hautatu...",
"Tag with this name already exist.": "Izen hau duen etiketa dagoeneko badago.",
"Tag with this value already exist.": "Balio hau duen etiketa dagoeneko badago.",
"color": "kolorea",
"value (optional)": "balioa (hautazkoa)",
"Gray": "Grisa",
"Red": "Gorria",
"Orange": "Naranja",
"Green": "Berdea",
"Blue": "Urdina",
"Indigo": "Indigo",
"Purple": "Morea",
"Pink": "Arrosa",
"Search...": "Bilatu...",
"Avg. Ping": "Batazbesteko Pinga",
"Avg. Response": "Batazbesteko erantzuna",
"Entry Page": "Sarrera orria",
"statusPageNothing": "Ezer ere ez hemen, mesedez gehitu taldea edo monitorizazioa.",
"No Services": "Zerbitzurik ez",
"All Systems Operational": "Sistema guztiak martxan",
"Partially Degraded Service": "Zerbitzu partzialki degradatua",
"Degraded Service": "Zerbitzu degradatua",
"Add Group": "Gehitu taldea",
"Add a monitor": "Gehitu monitorizazioa",
"Edit Status Page": "Editatu egoera orria",
"Go to Dashboard": "Joan arbelera",
"Status Page": "Egoera orria",
"Status Pages": "Egoera orriak",
"defaultNotificationName": "Nire {notification} Alerta ({number})",
"here": "Hemen",
"Required": "Beharrezkoa",
"telegram": "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Bot Tokena",
"wayToGetTelegramToken": "You can get a token from {0}.",
"Chat ID": "Txat IDa",
"supportTelegramChatID": "Support Direct Chat / Group / Channel's Chat ID",
"wayToGetTelegramChatID": "You can get your chat ID by sending a message to the bot and going to this URL to view the chat_id:",
"YOUR BOT TOKEN HERE": "YOUR BOT TOKEN HERE",
"chatIDNotFound": "Chat ID is not found; please send a message to this bot first",
"webhook": "Webhook",
"Post URL": "Bidalketa URLa",
"Content Type": "Eduki mota",
"webhookJsonDesc": "{0} is good for any modern HTTP servers such as Express.js",
"webhookFormDataDesc": "{multipart} is good for PHP. The JSON will need to be parsed with {decodeFunction}",
"smtp": "Emaila (SMTP)",
"secureOptionNone": "Bat ere ez / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Ignore TLS Error",
"From Email": "Email honetatik",
"emailCustomSubject": "Pertsonalizatutako gaia",
"To Email": "Email honetara",
"smtpCC": "CC",
"smtpBCC": "BCC",
"discord": "Discord",
"Discord Webhook URL": "Discord Webhook URL",
"wayToGetDiscordURL": "You can get this by going to Server Settings -> Integrations -> Create Webhook",
"Bot Display Name": "Bot Display Name",
"Prefix Custom Message": "Prefix Custom Message",
"Hello @everyone is...": "Hello {'@'}everyone is...",
"teams": "Microsoft Teams",
"Webhook URL": "Webhook URL",
"wayToGetTeamsURL": "You can learn how to create a webhook URL {0}.",
"wayToGetZohoCliqURL": "You can learn how to create a webhook URL {0}.",
"signal": "Signal",
"Number": "Zenbakia",
"Recipients": "Recipients",
"needSignalAPI": "You need to have a signal client with REST API.",
"wayToCheckSignalURL": "You can check this URL to view how to set one up:",
"signalImportant": "IMPORTANT: You cannot mix groups and numbers in recipients!",
"gotify": "Gotify",
"Application Token": "Aplikazio tokena",
"Server URL": "Zerbitzari URLa",
"Priority": "Lehentasuna",
"slack": "Slack",
"Icon Emoji": "Emoji ikonoa",
"Channel Name": "Kanalaren izena",
"Uptime Kuma URL": "Uptime Kuma URL",
"aboutWebhooks": "More info about Webhooks on: {0}",
"aboutChannelName": "Enter the channel name on {0} Channel Name field if you want to bypass the Webhook channel. Ex: #other-channel",
"aboutKumaURL": "If you leave the Uptime Kuma URL field blank, it will default to the Project GitHub page.",
"emojiCheatSheet": "Emoji cheat sheet: {0}",
"rocket.chat": "Rocket.Chat",
"pushover": "Pushover",
"pushy": "Pushy",
"PushByTechulus": "Push by Techulus",
"octopush": "Octopush",
"promosms": "PromoSMS",
"clicksendsms": "ClickSend SMS",
"lunasea": "LunaSea",
"apprise": "Apprise (Support 50+ Notification services)",
"GoogleChat": "Google Chat (Google Workspace only)",
"pushbullet": "Pushbullet",
"line": "Line Messenger",
"mattermost": "Mattermost",
"User Key": "Erabiltzaile gakoa",
"Device": "Gailua",
"Message Title": "Mezuaren izenburua",
"Notification Sound": "Jakinarazpen soinua",
"More info on:": "More info on: {0}",
"pushoverDesc1": "Emergency priority (2) has default 30 second timeout between retries and will expire after 1 hour.",
"pushoverDesc2": "If you want to send notifications to different devices, fill out Device field.",
"SMS Type": "SMS mota",
"octopushTypePremium": "Premium (Fast - recommended for alerting)",
"octopushTypeLowCost": "Low Cost (Slow - sometimes blocked by operator)",
"checkPrice": "Check {0} prices:",
"apiCredentials": "API credentials",
"octopushLegacyHint": "Do you use the legacy version of Octopush (2011-2020) or the new version?",
"Check octopush prices": "Check octopush prices {0}.",
"octopushPhoneNumber": "Phone number (intl format, eg : +33612345678) ",
"octopushSMSSender": "SMS Sender Name : 3-11 alphanumeric characters and space (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea Device ID",
"Apprise URL": "Apprise URL",
"Example:": "Adibidez: {0}",
"Read more:": "Irakurri gehiago: {0}",
"Status:": "Egoera: {0}",
"Read more": "Irakurri gehiago",
"appriseInstalled": "Apprise instalatuta.",
"appriseNotInstalled": "Apprise ez dago instalatuta. {0}",
"Access Token": "Access Token",
"Channel access token": "Channel access token",
"Line Developers Console": "Line Developers Console",
"lineDevConsoleTo": "Line Developers Console - {0}",
"Basic Settings": "Oinarrizko ezarpenak",
"User ID": "Erabiltzaile ID",
"Messaging API": "Messaging API",
"wayToGetLineChannelToken": "First access the {0}, create a provider and channel (Messaging API), then you can get the channel access token and user ID from the above mentioned menu items.",
"Icon URL": "Ikono URL",
"aboutIconURL": "You can provide a link to a picture in \"Icon URL\" to override the default profile picture. Will not be used if Icon Emoji is set.",
"aboutMattermostChannelName": "You can override the default channel that the Webhook posts to by entering the channel name into \"Channel Name\" field. This needs to be enabled in the Mattermost Webhook settings. Ex: #other-channel",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO - cheap but slow and often overloaded. Limited only to Polish recipients.",
"promosmsTypeFlash": "SMS FLASH - Message will automatically show on recipient device. Limited only to Polish recipients.",
"promosmsTypeFull": "SMS FULL - Premium tier of SMS, You can use your Sender Name (You need to register name first). Reliable for alerts.",
"promosmsTypeSpeed": "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).",
"promosmsPhoneNumber": "Phone number (for Polish recipient You can skip area codes)",
"promosmsSMSSender": "SMS Sender Name : Pre-registred name or one of defaults: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
"matrixHomeserverURL": "Hasiera zerbitzari URL (with http(s):// and optionally port)",
"Internal Room Id": "Internal Room ID",
"matrixDesc1": "You can find the internal room ID by looking in the advanced section of the room settings in your Matrix client. It should look like !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "It is highly recommended you create a new user and do not use your own Matrix user's access token as it will allow full access to your account and all the rooms you joined. Instead, create a new user and only invite it to the room that you want to receive the notification in. You can get the access token by running {0}",
"Method": "Metodoa",
"Body": "Gorputza",
"Headers": "Goiburuak",
"PushUrl": "Push URL",
"HeadersInvalidFormat": "The request headers are not valid JSON: ",
"BodyInvalidFormat": "The request body is not valid JSON: ",
"Monitor History": "Monitorizazio Historia",
"clearDataOlderThan": "Keep monitor history data for {0} days.",
"PasswordsDoNotMatch": "Pasahitzak ez datoz bat.",
"records": "records",
"One record": "One record",
"steamApiKeyDescription": "For monitoring a Steam Game Server you need a Steam Web-API key. You can register your API key here: ",
"Current User": "Uneko erabiltzailea",
"topic": "Topic",
"topicExplanation": "MQTT topic to monitor",
"successMessage": "Arrakasta mezua",
"successMessageExplanation": "MQTT message that will be considered as success",
"recent": "Duela gutxikoa",
"Done": "Egina",
"Info": "Info",
"Security": "Segurtasuna",
"Steam API Key": "Steam API Giltza",
"Shrink Database": "Shrink Datubasea",
"Pick a RR-Type...": "Pick a RR-Type...",
"Pick Accepted Status Codes...": "Hautatu onartutako egoera kodeak...",
"Default": "Lehenetsia",
"HTTP Options": "HTTP Aukerak",
"Create Incident": "Sortu inzidentzia",
"Title": "Titulua",
"Content": "Edukia",
"Style": "Estiloa",
"info": "info",
"warning": "kontuz",
"danger": "arriskua",
"error": "errorea",
"critical": "kritikoa",
"primary": "oinarrizkoa",
"light": "argia",
"dark": "iluna",
"Post": "Post",
"Please input title and content": "Mesedez sartu titulua eta edukia",
"Created": "Sortuta",
"Last Updated": "Azken eguneratzea",
"Unpin": "Unpin",
"Switch to Light Theme": "Aldatu gai argira",
"Switch to Dark Theme": "Aldatu gai ilunera",
"Show Tags": "Erakutsi etiketak",
"Hide Tags": "Ezkutatu etiketak",
"Description": "Deskribapena",
"No monitors available.": "Monitorizaziorik eskuragarri ez.",
"Add one": "Gehitu bat",
"No Monitors": "Monitorizaziorik ez",
"Untitled Group": "Titulurik gabeko taldea",
"Services": "Zerbitzuak",
"Discard": "Baztertu",
"Cancel": "Ezeztatu",
"Powered by": "Honekin egina:",
"shrinkDatabaseDescription": "Trigger database VACUUM for SQLite. If your database is created after 1.10.0, AUTO_VACUUM is already enabled and this action is not needed.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API erabiltzailea (webapi_ aurre-hizkia barne)",
"serwersmsAPIPassword": "API pasahitza",
"serwersmsPhoneNumber": "Telefono zenbakia",
"serwersmsSenderName": "SMS bidaltzaile izena (registered via customer portal)",
"stackfield": "Stackfield",
"Customize": "Pertsonalizatu",
"Custom Footer": "Oin pertsonalizatua",
"Custom CSS": "CSS pertsonalizatua",
"smtpDkimSettings": "DKIM ezarpenak",
"smtpDkimDesc": "Please refer to the Nodemailer DKIM {0} for usage.",
"documentation": "dokumentazioa",
"smtpDkimDomain": "Domeinu izena",
"smtpDkimKeySelector": "Gako hautatzailea",
"smtpDkimPrivateKey": "Gako pribatua",
"smtpDkimHashAlgo": "Hash algoritmoa (hautazkoa)",
"smtpDkimheaderFieldNames": "Header Keys to sign (Optional)",
"smtpDkimskipFields": "Header Keys not to sign (Optional)",
"wayToGetPagerDutyKey": "You can get this by going to Service -> Service Directory -> (Select a service) -> Integrations -> Add integration. Here you can search for \"Events API V2\". More info {0}",
"Integration Key": "Integration Key",
"Integration URL": "Integrazio URLa",
"Auto resolve or acknowledged": "Auto resolve or acknowledged",
"do nothing": "ez egin ezer",
"auto acknowledged": "auto acknowledged",
"auto resolve": "auto resolve",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "API Endpoint",
"alertaEnvironment": "Ingurunea",
"alertaApiKey": "API Key",
"alertaAlertState": "Alerta egoera",
"alertaRecoverState": "Berreskuratze egoera",
"deleteStatusPageMsg": "Ziur zaude egoera orri hau ezabatu nahi duzula?",
"Proxies": "Proxiak",
"default": "Lehenetsia",
"enabled": "Gaituta",
"setAsDefault": "Ezarri lehenetsitzat",
"deleteProxyMsg": "Are you sure want to delete this proxy for all monitors?",
"proxyDescription": "Proxies must be assigned to a monitor to function.",
"enableProxyDescription": "This proxy will not effect on monitor requests until it is activated. You can control temporarily disable the proxy from all monitors by activation status.",
"setAsDefaultProxyDescription": "This proxy will be enabled by default for new monitors. You can still disable the proxy separately for each monitor.",
"Certificate Chain": "Certificate Chain",
"Valid": "Baliozkoa",
"Invalid": "Baliogabea",
"AccessKeyId": "AccessKey ID",
"SecretAccessKey": "AccessKey Secret",
"PhoneNumbers": "TelefonoZenbakiak",
"TemplateCode": "TemplateCode",
"SignName": "SignName",
"Sms template must contain parameters: ": "Sms txantiloiak parametroak eduki behar ditu: ",
"Bark Endpoint": "Bark Endpoint",
"WebHookUrl": "WebHookUrl",
"SecretKey": "SecretKey",
"For safety, must use secret key": "For safety, must use secret key",
"Device Token": "Gailu tokena",
"Platform": "Plataforma",
"iOS": "iOS",
"Android": "Android",
"Huawei": "Huawei",
"High": "Altua",
"Retry": "Errepikatu",
"Topic": "Gaia",
"WeCom Bot Key": "WeCom Bot Key",
"Setup Proxy": "Ezarri Proxya",
"Proxy Protocol": "Proxy protokoloa",
"Proxy Server": "Proxy zerbitzaria",
"Proxy server has authentication": "Proxy zerbitzariak autentifikazioa dauka",
"User": "Erabiltzailea",
"Installed": "Instalatuta",
"Not installed": "Instalatu gabe",
"Running": "Martxan",
"Not running": "Ez martxan",
"Remove Token": "Ezabatu Tokena",
"Start": "Hasi",
"Stop": "Gelditu",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "Gehitu egoera orri berria",
"Slug": "Sluga",
"Accept characters:": "Onartu karaktereak:",
"startOrEndWithOnly": "Start or end with {0} only",
"No consecutive dashes": "No consecutive dashes",
"Next": "Hurrengoa",
"The slug is already taken. Please choose another slug.": "Sluga dagoeneko hartuta dago. Mesedez beste bat hautatu.",
"No Proxy": "Proxyrik ez",
"Authentication": "Authentication",
"HTTP Basic Auth": "HTTP oinarrizko Auth",
"New Status Page": "Egoera orri berria",
"Page Not Found": "Orria ez da aurkitu",
"Reverse Proxy": "Alderantzizkako Proxya",
"Backup": "Backup",
"About": "Honi buruz",
"wayToGetCloudflaredURL": "(Download cloudflared from {0})",
"cloudflareWebsite": "Cloudflare webgunea",
"Message:": "Mezua:",
"Don't know how to get the token? Please read the guide:": "Don't know how to get the token? Please read the guide:",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "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.",
"Other Software": "Beste softwarea",
"For example: nginx, Apache and Traefik.": "Adibidez: nginx, Apache and Traefik.",
"Please read": "Mesedez irakurri",
"Subject:": "Gaia:",
"Valid To:": "Balio-epea:",
"Days Remaining:": "Egun faltan:",
"Issuer:": "Issuer:",
"Fingerprint:": "Hatzmarka:",
"No status pages": "Egoera orririk ez",
"Domain Name Expiry Notification": "Domeinu izen iraungitze jakinarazpena",
"Proxy": "Proxya",
"Date Created": "Data sortuta",
"onebotHttpAddress": "OneBot HTTP helbidea",
"onebotMessageType": "OneBot mezu mota",
"onebotGroupMessage": "Taldea",
"onebotPrivateMessage": "Pribatua",
"onebotUserOrGroupId": "Talde/Erabiltzaile IDa",
"onebotSafetyTips": "For safety, must set access token",
"PushDeer Key": "PushDeer Key",
"Footer Text": "Oineko testua",
"Show Powered By": "Erakutsi Honekin egina:",
"Domain Names": "Domeinu izenak",
"signedInDisp": "Signed in as {0}",
"signedInDispDisabled": "Auth desgaituta.",
"Certificate Expiry Notification": "Zertifikatu iraungitze jakinarazpena",
"API Username": "API Erabiltzailea",
"API Key": "API Gakoa",
"Recipient Number": "Recipient Number",
"From Name/Number": "From Name/Number",
"Leave blank to use a shared sender number.": "Leave blank to use a shared sender number.",
"Octopush API Version": "Octopush API Version",
"Legacy Octopush-DM": "Legacy Octopush-DM",
"endpoint": "endpoint",
"octopushAPIKey": "\"API key\" from HTTP API credentials in control panel",
"octopushLogin": "\"Login\" from HTTP API credentials in control panel",
"promosmsLogin": "API Saio haste izena",
"promosmsPassword": "API Pasahitza",
"pushoversounds pushover": "Pushover (defektuz)",
"pushoversounds bike": "Bizikleta",
"pushoversounds bugle": "Bugle",
"pushoversounds cashregister": "Cash Register",
"pushoversounds classical": "Klasikoa",
"pushoversounds cosmic": "Kosmikoa",
"pushoversounds falling": "Erortzen",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "Incoming",
"pushoversounds intermission": "Intermission",
"pushoversounds magic": "Magia",
"pushoversounds mechanical": "Mekanikoa",
"pushoversounds pianobar": "Piano Bar",
"pushoversounds siren": "Sirena",
"pushoversounds spacealarm": "Espazio Alarma",
"pushoversounds tugboat": "Tug Boat",
"pushoversounds alien": "Alien Alarm (long)",
"pushoversounds climb": "Climb (long)",
"pushoversounds persistent": "Persistent (long)",
"pushoversounds echo": "Pushover Echo (long)",
"pushoversounds updown": "Up Down (long)",
"pushoversounds vibrate": "Bibrazioa soilik",
"pushoversounds none": "Bat ere ez (isilik)",
"pushyAPIKey": "Secret API giltza",
"pushyToken": "Gailu tokena",
"Show update if available": "Erakutsi eguneratzea eskuragarri badago",
"Also check beta release": "Beta bertsioak ere egiaztatu",
"Using a Reverse Proxy?": "Proxy alderantzizkako zerbitzaria erabiltzen?",
"Check how to config it for WebSocket": "Check how to config it for WebSocket",
"Steam Game Server": "Steam joko zerbitzaria",
"Most likely causes:": "Arrazoi probableenak:",
"The resource is no longer available.": "Baliabidea ez dago erabilgarri.",
"There might be a typing error in the address.": "Idazketa-akats bat egon daiteke helbidean.",
"What you can try:": "Probatu dezakezuna:",
"Retype the address.": "Berridatzi helbidea.",
"Go back to the previous page.": "Itzuli aurreko orrialdera",
"Coming Soon": "Laster",
"wayToGetClickSendSMSToken": "API erabiltzailea and API giltza hemendik lortu ditzakezu: {0} .",
"Connection String": "Konexio katea",
"Query": "Kontsulta",
"settingsCertificateExpiry": "TLS irungitze zertifikatua",
"certificationExpiryDescription": "HTTPS Monitorizazio jakinarazpena martxan jarri TLS zertifikatua iraungitzeko hau falta denean:",
"ntfy Topic": "ntfy Topic",
"Domain": "Domeinua",
"Workstation": "Lan gunea",
"disableCloudflaredNoAuthMsg": "Ez Auth moduan zaude, pasahitza ez da beharrezkoa."
}

191
src/lang/fa.json Normal file
View File

@@ -0,0 +1,191 @@
{
"languageName": "Farsi",
"checkEverySecond": "بررسی هر {0} ثانیه.",
"retryCheckEverySecond": "تکرار مجدد هر {0} ثانیه.",
"retriesDescription": "حداکثر تعداد تکرار پیش از علامت گذاری وب‌سایت بعنوان خارج از دسترس و ارسال اطلاع‌رسانی.",
"ignoreTLSError": "بی‌خیال ارور TLS/SSL برای سایت‌های HTTPS",
"upsideDownModeDescription": "نتیجه وضعیت را برعکس کن، مثلا اگر سرویس در دسترس بود فرض کن که سرویس پایین است!",
"maxRedirectDescription": "حداکثر تعداد ریدایرکتی که سرویس پشتیبانی کند. برای اینکه ری‌دایرکت‌ها پشتیبانی نشوند، عدد 0 را وارد کنید.",
"acceptedStatusCodesDescription": "لطفا HTTP Status Code هایی که میخواهید به عنوان پاسخ موفقیت آمیز در نظر گرفته شود را انتخاب کنید.",
"passwordNotMatchMsg": "تکرار رمز عبور مطابقت ندارد!",
"notificationDescription": "برای اینکه سرویس اطلاع‌رسانی کار کند، آنرا به یکی از مانیتور‌ها متصل کنید.",
"keywordDescription": "در نتیجه درخواست (اهمیتی ندارد پاسخ JSON است یا HTML) بدنبال این کلمه بگرد (حساس به کوچک/بزرگ بودن حروف).",
"pauseDashboardHome": "متوقف شده",
"deleteMonitorMsg": "آیا از حذف این مانیتور مطمئن هستید؟",
"deleteNotificationMsg": "آیا مطمئن هستید که میخواهید این سرویس اطلاع‌رسانی را برای تمامی مانیتورها حذف کنید؟",
"resolverserverDescription": "سرویس CloudFlare به عنوان سرور پیش‌فرض استفاده می‌شود، شما میتوانید آنرا به هر سرور دیگری بعدا تغییر دهید.",
"rrtypeDescription": "لطفا نوع Resource Record را انتخاب کنید.",
"pauseMonitorMsg": "آیا مطمئن هستید که میخواهید این مانیتور را متوقف کنید ؟",
"enableDefaultNotificationDescription": "برای هر مانیتور جدید، این سرویس اطلاع‌رسانی به صورت پیش‌فرض فعال خواهد شد. البته که شما میتوانید به صورت دستی آنرا برای هر مانیتور به صورت جداگانه غیر فعال کنید.",
"clearEventsMsg": "آیا از اینکه تمامی تاریخچه رویداد‌های این مانیتور حذف شود مطمئن هستید؟",
"clearHeartbeatsMsg": "آیا از اینکه تاریخچه تمامی Heartbeat های این مانیتور حذف شود مطمئن هستید؟ ",
"confirmClearStatisticsMsg": "آیا از حذف تمامی آمار و ارقام مطمئن هستید؟",
"importHandleDescription": " اگر که میخواهید بیخیال مانیتورها و یا سرویس‌های اطلاع‌رسانی که با نام مشابه از قبل موجود هستند شوید، گزینه 'بی‌خیال موارد ..' را انتخاب کنید. توجه کنید که گزینه 'بازنویسی' تمامی موارد موجود با نام مشابه را از بین خواهد برد.",
"confirmImportMsg": "آیا از بازگردانی بک آپ مطمئن هستید؟ لطفا از اینکه نوع بازگردانی درستی را انتخاب کرده‌اید اطمینان حاصل کنید!",
"twoFAVerifyLabel": "لطفا جهت اطمینان از عملکرد احراز هویت دو مرحله‌ای توکن خود را وارد کنید!",
"tokenValidSettingsMsg": "توکن شما معتبر است، هم اکنون میتوانید احراز هویت دو مرحله‌ای را فعال کنید!",
"confirmEnableTwoFAMsg": " آیا از فعال سازی احراز هویت دو مرحله‌ای مطمئن هستید؟",
"confirmDisableTwoFAMsg": "آیا از غیرفعال سازی احراز هویت دومرحله‌ای مطمئن هستید؟",
"Settings": "تنظیمات",
"Dashboard": "پیشخوان",
"New Update": "بروزرسانی جدید!",
"Language": "زبان",
"Appearance": "ظاهر",
"Theme": "پوسته",
"General": "عمومی",
"Version": "نسخه",
"Check Update On GitHub": "بررسی بروزرسانی بر روی گیت‌هاب",
"List": "لیست",
"Add": "اضافه",
"Add New Monitor": "اضافه کردن مانیتور جدید",
"Quick Stats": "خلاصه وضعیت",
"Up": "فعال",
"Down": "غیرفعال",
"Pending": "در انتظار تایید",
"Unknown": "نامشخص",
"Pause": "توقف",
"Name": "نام",
"Status": "وضعیت",
"DateTime": "تاریخ و زمان",
"Message": "پیام",
"No important events": "رخداد جدیدی موجود نیست.",
"Resume": "ادامه",
"Edit": "ویرایش",
"Delete": "حذف",
"Current": "فعلی",
"Uptime": "آپتایم",
"Cert Exp.": "تاریخ انقضای SSL",
"day": "روز",
"-day": "-روز",
"hour": "ساعت",
"-hour": "-ساعت",
"Response": "پاسخ",
"Ping": "Ping",
"Monitor Type": "نوع مانیتور",
"Keyword": "کلمه کلیدی",
"Friendly Name": "عنوان",
"URL": "آدرس (URL)",
"Hostname": "نام میزبان (Hostname)",
"Port": "پورت",
"Heartbeat Interval": "فاصله هر Heartbeat",
"Retries": "تلاش مجدد",
"Heartbeat Retry Interval": "فاصله تلاش مجدد برایHeartbeat",
"Advanced": "پیشرفته",
"Upside Down Mode": "حالت بر عکس",
"Max. Redirects": "حداکثر تعداد ری‌دایرکت",
"Accepted Status Codes": "وضعیت‌های (Status Code) های قابل قبول",
"Save": "ذخیره",
"Notifications": "اطلاع‌رسانی‌ها",
"Not available, please setup.": "هیچ موردی موجود نیست، اولین مورد را راه اندازی کنید!",
"Setup Notification": "راه اندازی اطلاع‌رسانی‌",
"Light": "روشن",
"Dark": "تاریک",
"Auto": "اتوماتیک",
"Theme - Heartbeat Bar": "ظاهر نوار Heartbeat",
"Normal": "معمولی",
"Bottom": "پایین",
"None": "هیچ کدام",
"Timezone": "موقعیت زمانی",
"Search Engine Visibility": "قابلیت دسترسی برای موتورهای جستجو",
"Allow indexing": "اجازه ایندکس شدن را بده.",
"Discourage search engines from indexing site": "به موتورهای جستجو اجازه ایندکس کردن این سامانه را نده.",
"Change Password": "تغییر رمزعبور",
"Current Password": "رمزعبور فعلی",
"New Password": "رمزعبور جدید",
"Repeat New Password": "تکرار رمزعبور جدید",
"Update Password": "بروز رسانی رمز عبور",
"Disable Auth": "غیر فعال سازی تایید هویت",
"Enable Auth": "فعال سازی تایید هویت",
"disableauth.message1": "آیا مطمئن هستید که میخواهید <strong>احراز هویت را غیر فعال کنید</strong>?",
"disableauth.message2": "این ویژگی برای کسانی است که <strong> لایه امنیتی شخص ثالث دیگر بر روی این آدرس فعال کرده‌اند</strong>، مانند Cloudflare Access.",
"Please use this option carefully!": "لطفا از این امکان با دقت استفاده کنید.",
"Logout": "خروج",
"Leave": "منصرف شدم",
"I understand, please disable": "متوجه هستم، لطفا غیرفعال کنید!",
"Confirm": "تایید",
"Yes": "بلی",
"No": "خیر",
"Username": "نام کاربری",
"Password": "کلمه عبور",
"Remember me": "مراب هب خاطر بسپار",
"Login": "ورود",
"No Monitors, please": "هیچ مانیتوری موجود نیست، لطفا",
"add one": "یک مورد اضافه کنید",
"Notification Type": "نوع اطلاع‌رسانی",
"Email": "ایمیل",
"Test": "تست",
"Certificate Info": "اطلاعات سرتیفیکت",
"Resolver Server": "سرور Resolver",
"Resource Record Type": "نوع رکورد (Resource Record Type)",
"Last Result": "آخرین نتیجه",
"Create your admin account": "ایجاد حساب کاربری مدیر",
"Repeat Password": "تکرار رمز عبور",
"Import Backup": "بازگردانی فایل پشتیبان",
"Export Backup": "ذخیره فایل پشتیبان",
"Export": "استخراج اطلاعات",
"Import": "ورود اطلاعات",
"respTime": "زمان پاسخگویی (میلی‌ثانیه)",
"notAvailableShort": "ناموجود",
"Default enabled": "به صورت پیش‌فرض فعال باشد.",
"Apply on all existing monitors": "بر روی تمامی مانیتور‌های فعلی اعمال شود.",
"Create": "ایجاد",
"Clear Data": "پاکسازی داده‌ها",
"Events": "رخداد‌ها",
"Heartbeats": "Heartbeats",
"Auto Get": "Auto Get",
"backupDescription": "شما میتوانید تمامی مانیتورها و تنظیمات اطلاع‌رسانی‌ها را در قالب یه فایل JSON دریافت کنید.",
"backupDescription2": "البته تاریخچه رخدادها دراین فایل قرار نخواهند داشت.",
"backupDescription3": "توجه داشته باشید که تمامی اطلاعات حساس شما مانند توکن‌ها نیز در این فایل وجود خواهد داشت ، پس از این فایل به خوبی مراقبت کنید.",
"alertNoFile": "لطفا یک فایل برای «ورود اطلاعات» انتخاب کنید..",
"alertWrongFileType": "یک فایل JSON انتخاب کنید.",
"Clear all statistics": "پاکسازی تمامی آمار و ارقام",
"Skip existing": "بی‌خیال مواردی که از قبل موجود است",
"Overwrite": "بازنویسی",
"Options": "تنظیمات",
"Keep both": "هر دو را نگه‌ دار",
"Verify Token": "تایید توکن",
"Setup 2FA": "تنظیمات احراز دو مرحله‌ای",
"Enable 2FA": "فعال سازی احراز 2 مرحله‌ای",
"Disable 2FA": "غیر فعال کردن احراز 2 مرحله‌ای",
"2FA Settings": "تنظیمات احراز 2 مرحله‌ای",
"Two Factor Authentication": "احراز هویت دومرحله‌ای",
"Active": "فعال",
"Inactive": "غیرفعال",
"Token": "توکن",
"Show URI": "نمایش آدرس (URI) ",
"Tags": "برچسب‌ها",
"Add New below or Select...": "یک مورد جدید اضافه کنید و یا از لیست انتخاب کنید...",
"Tag with this name already exist.": "یک برچسب با این «نام» از قبل وجود دارد",
"Tag with this value already exist.": "یک برچسب با این «مقدار» از قبل وجود دارد.",
"color": "رنگ",
"value (optional)": "مقدار (اختیاری)",
"Gray": "خاکستری",
"Red": "قرمز",
"Orange": "نارنجی",
"Green": "سبز",
"Blue": "آبی",
"Indigo": "نیلی",
"Purple": "بنفش",
"Pink": "صورتی",
"Search...": "جستجو...",
"Avg. Ping": "متوسط پینگ",
"Avg. Response": "متوسط زمان پاسخ",
"Entry Page": "صفحه ورودی",
"statusPageNothing": "چیزی اینجا نیست، لطفا یک گروه و یا یک مانیتور اضافه کنید!",
"No Services": "هیچ سرویسی موجود نیست",
"All Systems Operational": "تمامی سیستم‌ها عملیاتی هستند!",
"Partially Degraded Service": "افت نسبی کیفیت سرویس",
"Degraded Service": "افت کامل کیفیت سرویس",
"Add Group": "اضافه کردن گروه",
"Add a monitor": "اضافه کردن مانیتور",
"Edit Status Page": "ویرایش صفحه وضعیت",
"Status Page": "صفحه وضعیت",
"Status Pages": "صفحه وضعیت",
"Go to Dashboard": "رفتن به پیشخوان",
"Uptime Kuma": "آپتایم کوما",
"records": "مورد",
"One record": "یک مورد",
"Info": "اطلاعات",
"Powered by": "نیرو گرفته از",
"apprise": "Apprise (Support 50+ Notification services)"
}

695
src/lang/fr-FR.json Normal file
View File

@@ -0,0 +1,695 @@
{
"languageName": "Français",
"checkEverySecond": "Vérifier toutes les {0} secondes",
"retryCheckEverySecond": "Réessayer toutes les {0} secondes",
"resendEveryXTimes": "Renvoyez toutes les {0} fois",
"resendDisabled": "Renvoi désactivé",
"retriesDescription": "Nombre d'essais avant que le service ne soit déclaré hors ligne et qu'une notification soit envoyée.",
"ignoreTLSError": "Ignorer les erreurs liées au certificat SSL/TLS",
"upsideDownModeDescription": "Si le service est en ligne, il sera alors noté hors ligne et vice-versa.",
"maxRedirectDescription": "Nombre maximal de redirections avant que le service ne soit marqué comme hors ligne.",
"enableGRPCTls": "Autoriser l'envoi d'une requête gRPC avec une connexion TLS",
"grpcMethodDescription": "Le nom de la méthode est converti au format CamelCase tel que sayHello, check, etc.",
"acceptedStatusCodesDescription": "Codes HTTP qui considèrent le service comme étant disponible.",
"Maintenance": "Maintenance",
"statusMaintenance": "Maintenance",
"Schedule maintenance": "Planifier la maintenance",
"Affected Monitors": "Sondes concernées",
"Pick Affected Monitors...": "Sélectionner les sondes concernées…",
"Start of maintenance": "Début de la maintenance",
"All Status Pages": "Toutes les pages d'état",
"Select status pages...": "Sélectionner les pages d'état…",
"recurringIntervalMessage": "Exécuter une fois par jour | Exécuter une fois tous les {0} jours",
"affectedMonitorsDescription": "Sélectionnez les sondes concernées par la maintenance en cours",
"affectedStatusPages": "Afficher ce message de maintenance sur les pages d'état sélectionnées",
"atLeastOneMonitor": "Sélectionnez au moins une sonde concernée",
"passwordNotMatchMsg": "Les mots de passe ne correspondent pas",
"notificationDescription": "Une fois ajoutée, vous devez l'activer manuellement dans les paramètres de vos hôtes.",
"keywordDescription": "Le mot clé sera recherché dans la réponse HTML/JSON reçue du site internet.",
"pauseDashboardHome": "En pause",
"deleteMonitorMsg": "Êtes-vous sûr de vouloir supprimer cette sonde ?",
"deleteMaintenanceMsg": "Voulez-vous vraiment supprimer cette maintenance ?",
"deleteNotificationMsg": "Êtes-vous sûr de vouloir supprimer ce type de notification pour toutes les sondes?",
"dnsPortDescription": "Port du serveur DNS. La valeur par défaut est 53. Vous pouvez modifier le port à tout moment.",
"resolverserverDescription": "Le DNS de Cloudflare est utilisé par défaut, mais vous pouvez le changer si vous le souhaitez.",
"rrtypeDescription": "Veuillez sélectionner un type d'enregistrement DNS",
"pauseMonitorMsg": "Êtes-vous sûr de vouloir mettre en pause cette sonde ?",
"enableDefaultNotificationDescription": "Pour chaque nouvelle sonde, cette notification sera activée par défaut. Vous pouvez toujours désactiver la notification séparément pour chaque sonde.",
"clearEventsMsg": "Êtes-vous sûr de vouloir supprimer tous les événements pour cette sonde ?",
"clearHeartbeatsMsg": "Êtes-vous sûr de vouloir supprimer toutes les vérifications pour cette sonde ?",
"confirmClearStatisticsMsg": "Êtes-vous sûr de vouloir supprimer toutes les statistiques ?",
"importHandleDescription": "Choisissez « Ignorer l'existant » si vous voulez ignorer chaque sonde ou notification portant le même nom. L'option « Écraser » supprime toutes les sondes et notifications existantes.",
"confirmImportMsg": "Êtes-vous sûr de vouloir importer la sauvegarde ? Veuillez vous assurer que vous avez sélectionné la bonne option d'importation.",
"twoFAVerifyLabel": "Veuillez saisir votre jeton pour vérifier que le système 2FA fonctionne.",
"tokenValidSettingsMsg": "Le jeton est valide. Vous pouvez maintenant sauvegarder les paramètres de double authentification (2FA).",
"confirmEnableTwoFAMsg": "Êtes-vous sûr de vouloir activer la double authentification (2FA) ?",
"confirmDisableTwoFAMsg": "Êtes-vous sûr de vouloir désactiver la double authentification (2FA) ?",
"Settings": "Paramètres",
"Dashboard": "Tableau de bord",
"New Update": "Mise à jour disponible",
"Language": "Langue",
"Appearance": "Apparence",
"Theme": "Thème",
"General": "Général",
"Primary Base URL": "URL principale",
"Version": "Version",
"Check Update On GitHub": "Consulter les mises à jour sur GitHub",
"List": "Lister",
"Add": "Ajouter",
"Add New Monitor": "Ajouter une nouvelle sonde",
"Quick Stats": "Résumé",
"Up": "En ligne",
"Down": "Hors ligne",
"Pending": "En attente",
"Unknown": "Inconnu",
"Pause": "En pause",
"Name": "Nom",
"Status": "État",
"DateTime": "Heure",
"Message": "Messages",
"No important events": "Aucun évènement important",
"Resume": "Reprendre",
"Edit": "Modifier",
"Delete": "Supprimer",
"Current": "Actuellement",
"Uptime": "Disponibilité",
"Cert Exp.": "Expiration SSL",
"day": "jour | jours",
"-day": " jours",
"hour": "heure",
"-hour": " heure",
"Response": "Temps de réponse",
"Ping": "Ping",
"Monitor Type": "Type de sonde",
"Keyword": "Mot-clé",
"Friendly Name": "Nom d'affichage",
"URL": "URL",
"Hostname": "Nom d'hôte / adresse IP",
"Port": "Port",
"Heartbeat Interval": "Intervalle de vérification",
"Retries": "Essais",
"Heartbeat Retry Interval": "Réessayer l'intervalle de vérification",
"Resend Notification if Down X times consequently": "Renvoyer une notification si hors ligne X fois",
"Advanced": "Avancé",
"Upside Down Mode": "Mode inversé",
"Max. Redirects": "Nombre maximum de redirections",
"Accepted Status Codes": "Codes HTTP acceptés",
"Push URL": "Push URL",
"needPushEvery": "Vous devez appeler cette URL toutes les {0} secondes.",
"pushOptionalParams": "Paramètres facultatifs : {0}",
"Save": "Sauvegarder",
"Notifications": "Notifications",
"Not available, please setup.": "Non disponible, merci de le configurer.",
"Setup Notification": "Créer une notification",
"Light": "Clair",
"Dark": "Sombre",
"Auto": "Automatique",
"Theme - Heartbeat Bar": "Thème - barres d'état",
"Normal": "Normal",
"Bottom": "En dessous",
"None": "Aucun",
"Timezone": "Fuseau horaire",
"Search Engine Visibility": "Visibilité par les moteurs de recherche",
"Allow indexing": "Autoriser l'indexation",
"Discourage search engines from indexing site": "Refuser l'indexation",
"Change Password": "Changer le mot de passe",
"Current Password": "Mot de passe actuel",
"New Password": "Nouveau mot de passe",
"Repeat New Password": "Répéter votre nouveau mot de passe",
"Update Password": "Mettre à jour le mot de passe",
"Disable Auth": "Désactiver l'authentification",
"Enable Auth": "Activer l'authentification",
"disableauth.message1": "Voulez-vous vraiment <strong>désactiver l'authentification</strong> ?",
"disableauth.message2": "Cette fonctionnalité est conçue pour les scénarios <strong>où vous avez l'intention d'implémenter une authentification tierce</strong> devant Uptime Kuma, comme Cloudflare Access, Authelia ou d'autres mécanismes d'authentification.",
"Please use this option carefully!": "Veuillez utiliser cette option avec précaution !",
"Logout": "Déconnexion",
"Leave": "Quitter",
"I understand, please disable": "Je comprends, désactivez-la",
"Confirm": "Confirmer",
"Yes": "Oui",
"No": "Non",
"Username": "Nom d'utilisateur",
"Password": "Mot de passe",
"Remember me": "Se souvenir de moi",
"Login": "Connexion",
"No Monitors, please": "Pas de sondes, veuillez",
"add one": "en ajouter une",
"Notification Type": "Type de notification",
"Email": "Courriel",
"Test": "Tester",
"Certificate Info": "Informations sur le certificat SSL",
"Resolver Server": "Serveur DNS utilisé",
"Resource Record Type": "Type d'enregistrement DNS recherché",
"Last Result": "Dernier résultat",
"Create your admin account": "Créer votre compte administrateur",
"Repeat Password": "Répéter le mot de passe",
"Import Backup": "Importation de la sauvegarde",
"Export Backup": "Exportation de la sauvegarde",
"Export": "Exporter",
"Import": "Importer",
"respTime": "Temps de réponse (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Activé par défaut",
"Apply on all existing monitors": "Appliquer sur toutes les sondes existantes",
"Create": "Créer",
"Clear Data": "Effacer les données",
"Events": "Événements",
"Heartbeats": "Vérifications",
"Auto Get": "Récupérer automatiquement",
"backupDescription": "Vous pouvez sauvegarder toutes les sondes et toutes les notifications dans un fichier JSON.",
"backupDescription2": "PS : Les données relatives à l'historique et aux événements ne sont pas incluses.",
"backupDescription3": "Les données sensibles telles que les jetons de notification sont incluses dans le fichier d'exportation, veuillez les conserver soigneusement.",
"alertNoFile": "Veuillez sélectionner un fichier à importer.",
"alertWrongFileType": "Veuillez sélectionner un fichier JSON à importer.",
"Clear all statistics": "Effacer toutes les statistiques",
"Skip existing": "Sauter l'existant",
"Overwrite": "Écraser",
"Options": "Options",
"Keep both": "Garder les deux",
"Verify Token": "Vérifier le jeton",
"Setup 2FA": "Configurer la double authentification (2FA)",
"Enable 2FA": "Activer la double authentification (2FA)",
"Disable 2FA": "Désactiver la double authentification (2FA)",
"2FA Settings": "Paramètres de la double authentification (2FA)",
"Two Factor Authentication": "Double authentification",
"Active": "Actif",
"Inactive": "Inactif",
"Token": "Jeton",
"Show URI": "Afficher l'URI",
"Tags": "Étiquettes",
"Add New below or Select...": "Ajoutez-en un en dessous ou sélectionnez-le ici…",
"Tag with this name already exist.": "Une étiquette portant ce nom existe déjà.",
"Tag with this value already exist.": "Une étiquette avec cette valeur existe déjà.",
"color": "Couleur",
"value (optional)": "Valeur (facultatif)",
"Gray": "Gris",
"Red": "Rouge",
"Orange": "Orange",
"Green": "Vert",
"Blue": "Bleu",
"Indigo": "Indigo",
"Purple": "Violet",
"Pink": "Rose",
"Search...": "Rechercher…",
"Avg. Ping": "Ping moyen",
"Avg. Response": "Réponse moyenne",
"Entry Page": "Page d'accueil",
"statusPageNothing": "Rien ici, veuillez ajouter un groupe ou une sonde.",
"No Services": "Aucun service",
"All Systems Operational": "Tous les systèmes sont opérationnels",
"Partially Degraded Service": "Service partiellement dégradé",
"Degraded Service": "Service dégradé",
"Add Group": "Ajouter un groupe",
"Add a monitor": "Ajouter une sonde",
"Edit Status Page": "Modifier la page de statut",
"Go to Dashboard": "Accéder au tableau de bord",
"Status Page": "Page de statut",
"Status Pages": "Pages de statut",
"defaultNotificationName": "Ma notification {notification} numéro ({number})",
"here": "ici",
"Required": "Requis",
"telegram": "Telegram",
"ZohoCliq": "ZohoCliq",
"Bot Token": "Jeton du robot",
"wayToGetTelegramToken": "Vous pouvez obtenir un token depuis {0}.",
"Chat ID": "Chat ID",
"supportTelegramChatID": "Prend en charge les messages privés / messages de groupe / l'ID d'un salon",
"wayToGetTelegramChatID": "Vous pouvez obtenir le Chat ID en envoyant un message avec le robot puis en récupérant l'URL pour voir l'ID du salon :",
"YOUR BOT TOKEN HERE": "VOTRE JETON ROBOT ICI",
"chatIDNotFound": "ID du salon introuvable, envoyez un message via le robot avant",
"webhook": "Webhook",
"Post URL": "Post URL",
"Content Type": "Type de contenu",
"webhookJsonDesc": "{0} est bien pour tous les serveurs HTTP modernes comme Express.js",
"webhookFormDataDesc": "{multipart} est bien pour du PHP. Le JSON aura besoin d'être parsé avec {decodeFunction}",
"webhookAdditionalHeadersTitle": "En-têtes supplémentaires",
"webhookAdditionalHeadersDesc": "Définit des en-têtes supplémentaires envoyés avec le webhook.",
"smtp": "Courriel (SMTP)",
"secureOptionNone": "Aucun / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Ignorer les erreurs TLS",
"From Email": "Depuis l'adresse",
"emailCustomSubject": "Objet personnalisé",
"To Email": "Vers l'adresse",
"smtpCC": "CC",
"smtpBCC": "CCI",
"discord": "Discord",
"Discord Webhook URL": "URL vers le webhook Discord",
"wayToGetDiscordURL": "Vous pouvez l'obtenir en allant dans « Paramètres du serveur » -> « Intégrations » -> « Créer un Webhook »",
"Bot Display Name": "Nom du robot (affiché)",
"Prefix Custom Message": "Préfixe du message personnalisé",
"Hello @everyone is...": "Bonjour {'@'}everyone il…",
"teams": "Microsoft Teams",
"Webhook URL": "URL vers le webhook",
"wayToGetTeamsURL": "Vous pouvez apprendre comment créer une URL Webhook {0}.",
"wayToGetZohoCliqURL": "Vous pouvez apprendre comment créer une URL Webhook {0}.",
"signal": "Signal",
"Number": "Numéro",
"Recipients": "Destinataires",
"needSignalAPI": "Vous avez besoin d'un client Signal avec l'API REST.",
"wayToCheckSignalURL": "Vous pouvez regarder l'URL suivante pour savoir comment la mettre en place :",
"signalImportant": "IMPORTANT : Vous ne pouvez pas mixer les groupes et les numéros en destinataires !",
"gotify": "Gotify",
"Application Token": "Jeton d'application",
"Server URL": "URL du serveur",
"Priority": "Priorité",
"slack": "Slack",
"Icon Emoji": "Icon Emoji",
"Channel Name": "Nom du salon",
"Uptime Kuma URL": "URL vers Uptime Kuma",
"aboutWebhooks": "Plus d'informations sur les webhooks ici : {0}",
"aboutChannelName": "Mettez le nom du salon dans {0} dans « Nom du salon » si vous voulez contourner le salon webhook. Ex. : #autre-salon",
"aboutKumaURL": "Si vous laissez l'URL d'Uptime Kuma vierge, elle redirigera vers la page du projet GitHub.",
"emojiCheatSheet": "Aide sur les émojis : {0}",
"rocket.chat": "Rocket.chat",
"pushover": "Pushover",
"pushy": "Pushy",
"PushByTechulus": "Push by Techulus",
"octopush": "Octopush",
"promosms": "PromoSMS",
"clicksendsms": "ClickSend SMS",
"lunasea": "LunaSea",
"apprise": "Apprise (prend en charge plus de 50 services de notification)",
"GoogleChat": "Google Chat (Google Workspace uniquement)",
"pushbullet": "Pushbullet",
"Kook": "Kook",
"wayToGetKookBotToken": "Créez une application et récupérer le jeton de robot à l'addresse {0}",
"wayToGetKookGuildID": "Passez en « mode développeur » dans les paramètres de Kook, et cliquez droit sur le Guild pour obtenir son identifiant",
"Guild ID": "Identifiant de Guild",
"line": "Line Messenger",
"mattermost": "Mattermost",
"User Key": "Clé d'utilisateur",
"Device": "Appareil",
"Message Title": "Titre du message",
"Notification Sound": "Son de notification",
"More info on:": "Plus d'informations sur : {0}",
"pushoverDesc1": "Priorité d'urgence (2) a un délai par défaut de 30 secondes entre les tentatives et expire après une heure.",
"pushoverDesc2": "Si vous voulez envoyer des notifications sur différents appareils, remplissez le champ « Appareil ».",
"SMS Type": "Type de SMS",
"octopushTypePremium": "Premium (rapide - recommandé pour les alertes)",
"octopushTypeLowCost": "Économique (lent, bloqué de temps en temps par l'opérateur)",
"checkPrice": "Vérification {0} tarifs :",
"apiCredentials": "Identifiants de l'API",
"octopushLegacyHint": "Voulez-vous utiliser l'ancienne version d'Octopush (2011-2020) ou la nouvelle version ?",
"Check octopush prices": "Vérifier les prix d'Octopush {0}.",
"octopushPhoneNumber": "Numéro de téléphone (format international, ex. : +33612345678)",
"octopushSMSSender": "Nom de l'expéditeur : 3-11 caractères alphanumériques avec espace (a-zA-Z0-9)",
"LunaSea Device ID": "Identifiant d'appareil LunaSea",
"Apprise URL": "URL d'Apprise",
"Example:": "Exemple : {0}",
"Read more:": "En savoir plus : {0}",
"Status:": "État : {0}",
"Read more": "En savoir plus",
"appriseInstalled": "Apprise est installé.",
"appriseNotInstalled": "Apprise n'est pas installé. {0}",
"Access Token": "Jeton d'accès",
"Channel access token": "Jeton d'accès au canal",
"Line Developers Console": "Console développeurs Line",
"lineDevConsoleTo": "Console développeurs Line - {0}",
"Basic Settings": "Paramètres de base",
"User ID": "Identifiant utilisateur",
"Messaging API": "Messaging API",
"wayToGetLineChannelToken": "Premièrement accédez à {0}, créez un <i>provider</i> et définissez un type de salon à «Messaging API». Vous obtiendrez alors le jeton d'accès du salon et l'identifiant utilisateur demandés.",
"Icon URL": "URL vers l'icône",
"aboutIconURL": "Vous pouvez mettre un lien vers une image dans « URL vers l'icône » pour remplacer l'image de profil par défaut. Elle ne sera utilisé que si « Icône émoji » n'est pas défini.",
"aboutMattermostChannelName": "Vous pouvez remplacer le salon par défaut que le webhook utilise en mettant le nom du salon dans le champ « Nom du salon ». Vous aurez besoin de l'activer depuis les paramètres de Mattermost. Ex. : #autre-salon",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO - Bon marché mais lent et souvent surchargé. Limité uniquement aux destinataires polonais.",
"promosmsTypeFlash": "SMS FLASH - Le message sera automatiquement affiché sur l'appareil du destinataire. Limité uniquement aux destinataires Polonais.",
"promosmsTypeFull": "SMS FULL - Version premium des SMS. Vous pouvez mettre le nom de l'expéditeur (vous devez l'enregistrer au préalable). Fiable pour les alertes.",
"promosmsTypeSpeed": "SMS SPEED - Priorité élevée pour le système. Très rapide et fiable mais coûteux (environ le double du prix d'un SMS FULL).",
"promosmsPhoneNumber": "Numéro de téléphone (pour les destinataires polonais, vous pouvez ignorer l'indicatif international)",
"promosmsSMSSender": "Nom de l'expéditeur du SMS : Nom pré-enregistré ou l'un de base : InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
"matrixHomeserverURL": "L'URL du serveur (avec http(s):// et le port de manière facultative)",
"Internal Room Id": "ID de la salle interne",
"matrixDesc1": "Vous pouvez trouver l'ID de salle interne en regardant dans la section avancée des paramètres dans le client Matrix. C'est censé ressembler à !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "Il est fortement recommandé de créer un nouvel utilisateur et de ne pas utiliser le jeton d'accès de votre propre utilisateur Matrix, car il vous donnera un accès complet à votre compte et à toutes les salles que vous avez rejointes. Pour cela, créez un nouvel utilisateur et invitez-le uniquement dans la salle dans laquelle vous souhaitez recevoir la notification. Vous pouvez obtenir le jeton d'accès en exécutant {0}",
"Method": "Méthode",
"Body": "Corps",
"Headers": "En-têtes",
"PushUrl": "URL Push",
"HeadersInvalidFormat": "Les en-têtes de la requête ne sont pas dans un format JSON valide : ",
"BodyInvalidFormat": "Le corps de la requête n'est pas dans un format JSON valide : ",
"Monitor History": "Historique de la sonde",
"clearDataOlderThan": "Conserver l'historique des données de la sonde durant {0} jours.",
"PasswordsDoNotMatch": "Les mots de passe ne correspondent pas.",
"records": "enregistrements",
"One record": "Un enregistrement",
"steamApiKeyDescription": "Pour surveiller un serveur Steam, vous avez besoin d'une clé Steam Web-API. Vous pouvez enregistrer votre clé ici : ",
"Current User": "Utilisateur actuel",
"topic": "Topic",
"topicExplanation": "Topic MQTT à surveiller",
"successMessage": "Message de réussite",
"successMessageExplanation": "Message MQTT qui sera considéré comme un succès",
"recent": "Récent",
"Done": "Fait",
"Info": "Info",
"Security": "Sécurité",
"Steam API Key": "Clé d'API Steam",
"Shrink Database": "Réduire la base de données",
"Pick a RR-Type...": "Choisissez un type d'enregistrement…",
"Pick Accepted Status Codes...": "Choisissez les codes de statut acceptés…",
"Default": "Défaut",
"HTTP Options": "Options HTTP",
"Create Incident": "Créer un incident",
"Title": "Titre",
"Content": "Contenu",
"Style": "Style",
"info": "Info",
"warning": "Attention",
"danger": "Danger",
"error": "Erreur",
"critical": "Critique",
"primary": "Primaire",
"light": "Blanc",
"dark": "Noir",
"Post": "Post",
"Please input title and content": "Veuillez saisir le titre et le contenu",
"Created": "Créé",
"Last Updated": "Dernière mise à jour",
"Unpin": "Retirer",
"Switch to Light Theme": "Passer au thème clair",
"Switch to Dark Theme": "Passer au thème sombre",
"Show Tags": "Afficher les étiquettes",
"Hide Tags": "Masquer les étiquettes",
"Description": "Description",
"No monitors available.": "Aucune sonde disponible.",
"Add one": "En rajouter une",
"No Monitors": "Aucune sonde",
"Untitled Group": "Groupe sans titre",
"Services": "Services",
"Discard": "Abandonner",
"Cancel": "Annuler",
"Powered by": "Propulsé par",
"shrinkDatabaseDescription": "Déclenche la commande VACUUM pour SQLite. Si votre base de données a été créée après la version 1.10.0, AUTO_VACUUM est déjà activé et cette action n'est pas nécessaire.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "Nom d'utilisateur de l'API (incl. webapi_ prefix)",
"serwersmsAPIPassword": "Mot de passe API",
"serwersmsPhoneNumber": "Numéro de téléphone",
"serwersmsSenderName": "Nom de l'expéditeur du SMS (enregistré via le portail client)",
"smseagle": "SMSEagle",
"smseagleTo": "Numéro(s) de téléphone",
"smseagleGroup": "Nom(s) de groupe(s) de répertoire",
"smseagleContact": "Nom(s) de contact du répertoire",
"smseagleRecipientType": "Type de destinataire",
"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)",
"stackfield": "Stackfield",
"Customize": "Personnaliser",
"Custom Footer": "Pied de page personnalisé",
"Custom CSS": "CSS personnalisé",
"smtpDkimSettings": "Paramètres DKIM",
"smtpDkimDesc": "Veuillez vous référer au Nodemailer DKIM {0} pour l'utilisation.",
"documentation": "documentation",
"smtpDkimDomain": "Nom de domaine",
"smtpDkimKeySelector": "Sélecteur de clé",
"smtpDkimPrivateKey": "Clé privée",
"smtpDkimHashAlgo": "Algorithme de hachage (facultatif)",
"smtpDkimheaderFieldNames": "Clés d'en-tête à signer (facultatif)",
"smtpDkimskipFields": "Clés d'en-tête à ne pas signer (facultatif)",
"wayToGetPagerDutyKey": "Vous pouvez l'obtenir en allant dans Service -> Annuaire des services -> (sélectionner un service) -> Intégrations -> Ajouter une intégration. Ici, vous pouvez rechercher \"Events API V2\". Plus d'infos {0}",
"Integration Key": "Clé d'intégration",
"Integration URL": "URL d'intégration",
"Auto resolve or acknowledged": "Résolution automatique ou accusé de réception",
"do nothing": "ne fais rien",
"auto acknowledged": "accusé de réception automatique",
"auto resolve": "résolution automatique",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "API Endpoint",
"alertaEnvironment": "Environnement",
"alertaApiKey": "Clé de l'API",
"alertaAlertState": "État de l'alerte",
"alertaRecoverState": "État de récupération",
"deleteStatusPageMsg": "Voulez-vous vraiment supprimer cette page d'état ?",
"Proxies": "Proxies",
"default": "Défaut",
"enabled": "Activé",
"setAsDefault": "Définir par défaut",
"deleteProxyMsg": "Voulez-vous vraiment supprimer ce proxy pour toutes les sondes ?",
"proxyDescription": "Les proxies doivent être affectés à une sonde pour fonctionner.",
"enableProxyDescription": "Ce proxy n'aura pas d'effet sur les demandes de sonde tant qu'il n'est pas activé. Vous pouvez contrôler la désactivation temporaire du proxy de toutes les sondes en fonction de l'état d'activation.",
"setAsDefaultProxyDescription": "Ce proxy sera activé par défaut pour les nouvelles sondes. Vous pouvez toujours désactiver le proxy séparément pour chaque sonde.",
"Certificate Chain": "Chaîne de certificats",
"Valid": "Valide",
"Invalid": "Non valide",
"AccessKeyId": "ID de clé d'accès",
"SecretAccessKey": "Clé secrète d'accès",
"PhoneNumbers": "Numéros de téléphone",
"TemplateCode": "Modèle de code",
"SignName": "Signature",
"Sms template must contain parameters: ": "Le modèle de SMS doit contenir des paramètres : ",
"Bark Endpoint": "Endpoint Bark",
"Bark Group": "Groupe Bark",
"Bark Sound": "Son Bark",
"WebHookUrl": "WebHookUrl",
"SecretKey": "Clé secrète",
"For safety, must use secret key": "Par sécurité, utilisation obligatoire de la clé secrète",
"Device Token": "Jeton d'appareil",
"Platform": "Plateforme",
"iOS": "iOS",
"Android": "Android",
"Huawei": "Huawei",
"High": "Haute",
"Retry": "Recommencez",
"Topic": "Topic",
"WeCom Bot Key": "Clé de robot WeCom",
"Setup Proxy": "Configurer le proxy",
"Proxy Protocol": "Protocole proxy",
"Proxy Server": "Serveur proxy",
"Proxy server has authentication": "Une authentification est nécessaire pour le serveur proxy",
"User": "Utilisateur",
"Installed": "Installé",
"Not installed": "Non installé",
"Running": "Fonctionne",
"Not running": "Ne fonctionne pas",
"Remove Token": "Supprimer le jeton",
"Start": "Démarrer",
"Stop": "Arrêter",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "Ajouter une page de statut",
"Slug": "Chemin",
"Accept characters:": "Caractères acceptés : ",
"startOrEndWithOnly": "Commence uniquement par {0}",
"No consecutive dashes": "Pas de double tirets",
"Next": "Continuer",
"The slug is already taken. Please choose another slug.": "Un chemin existe déjà. Veuillez en choisir un autre.",
"No Proxy": "Pas de proxy",
"Authentication": "Authentification",
"HTTP Basic Auth": "Authentification de base HTTP",
"New Status Page": "Nouvelle page de statut",
"Page Not Found": "Page non trouvée",
"Reverse Proxy": "Proxy inverse",
"Backup": "Sauvegarde",
"About": "À propos",
"wayToGetCloudflaredURL": "(télécharger cloudflared depuis {0})",
"cloudflareWebsite": "Site web de Cloudflare",
"Message:": "Message : ",
"Don't know how to get the token? Please read the guide:": "Vous ne savez pas comment obtenir le jeton ? Lisez le guide :",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "La connexion actuelle peut être perdue si vous vous connectez actuellement via un tunnel Cloudflare. Êtes-vous sûr de vouloir l'arrêter ? Tapez votre mot de passe actuel pour le confirmer.",
"HTTP Headers": "En-têtes HTTP",
"Trust Proxy": "Proxy de confiance",
"Other Software": "Autres logiciels",
"For example: nginx, Apache and Traefik.": "Par exemple : nginx, Apache et Traefik.",
"Please read": "Veuillez lire",
"Subject:": "Objet : ",
"Valid To:": "Valable jusqu'au : ",
"Days Remaining:": "Jours restants : ",
"Issuer:": "Émetteur : ",
"Fingerprint:": "Empreinte : ",
"No status pages": "Aucune page de statut.",
"Domain Name Expiry Notification": "Notification d'expiration du nom de domaine",
"Proxy": "Proxy",
"Date Created": "Date de création",
"HomeAssistant": "Home Assistant",
"onebotHttpAddress": "Adresse HTTP OneBot",
"onebotMessageType": "Type de message OneBot",
"onebotGroupMessage": "Groupe",
"onebotPrivateMessage": "Privé",
"onebotUserOrGroupId": "ID de groupe/utilisateur",
"onebotSafetyTips": "Pour des raisons de sécurité, vous devez définir un jeton d'accès",
"PushDeer Key": "Clé PushDeer",
"Footer Text": "Texte de pied de page",
"Show Powered By": "Afficher « Propulsé par »",
"Domain Names": "Noms de domaine",
"signedInDisp": "Connecté en tant que {0}",
"signedInDispDisabled": "Authentification désactivée.",
"RadiusSecret": "Radius Secret",
"RadiusSecretDescription": "Secret partagé entre le client et le serveur",
"RadiusCalledStationId": "Identifiant de la station appelée",
"RadiusCalledStationIdDescription": "Identifiant de l'appareil appelé",
"RadiusCallingStationId": "Identifiant de la station appelante",
"RadiusCallingStationIdDescription": "Identifiant de l'appareil appelant",
"Certificate Expiry Notification": "Notification d'expiration du certificat",
"API Username": "Nom d'utilisateur de l'API",
"API Key": "Clé API",
"Recipient Number": "Numéro du destinataire",
"From Name/Number": "De nom/numéro",
"Leave blank to use a shared sender number.": "Laisser vide pour utiliser un numéro d'expéditeur partagé.",
"Octopush API Version": "Version de l'API Octopush",
"Legacy Octopush-DM": "Ancien Octopush-DM",
"endpoint": "endpoint",
"octopushAPIKey": "\"Clé API\" à partir des informations d'identification de l'API HTTP dans le panneau de configuration",
"octopushLogin": "\"Identifiant\" à partir des informations d'identification de l'API HTTP dans le panneau de configuration",
"promosmsLogin": "Nom de connexion API",
"promosmsPassword": "Mot de passe API",
"pushoversounds pushover": "Pushover (par défaut)",
"pushoversounds bike": "Vélo",
"pushoversounds bugle": "Clairon",
"pushoversounds cashregister": "Caisse enregistreuse",
"pushoversounds classical": "Classique",
"pushoversounds cosmic": "Cosmique",
"pushoversounds falling": "Chute",
"pushoversounds gamelan": "Gamelan",
"pushoversounds incoming": "Arrivée",
"pushoversounds intermission": "Intermission",
"pushoversounds magic": "Magique",
"pushoversounds mechanical": "Mécanique",
"pushoversounds pianobar": "Piano-bar",
"pushoversounds siren": "Sirène",
"pushoversounds spacealarm": "Alarme spatiale",
"pushoversounds tugboat": "Remorqueur",
"pushoversounds alien": "Alarme alienne (version longue)",
"pushoversounds climb": "Escalade (version longue)",
"pushoversounds persistent": "Persistent (version longue)",
"pushoversounds echo": "Pushover Echo (version longue)",
"pushoversounds updown": "Up Down (version longue)",
"pushoversounds vibrate": "Vibration seulement",
"pushoversounds none": "Aucun (silencieux)",
"pushyAPIKey": "Clé API secrète",
"pushyToken": "Jeton d'appareil",
"Show update if available": "Afficher la mise à jour si disponible",
"Also check beta release": "Vérifiez également la version bêta",
"Using a Reverse Proxy?": "Utiliser un proxy inverse ?",
"Check how to config it for WebSocket": "Vérifier comment le configurer pour WebSocket",
"Steam Game Server": "Serveur de jeu Steam",
"Most likely causes:": "Causes les plus probables : ",
"The resource is no longer available.": "La ressource n'est plus disponible.",
"There might be a typing error in the address.": "Il se peut qu'il y ait une erreur de frappe dans l'adresse.",
"What you can try:": "Ce que vous pouvez essayer :",
"Retype the address.": "Retaper l'adresse.",
"Go back to the previous page.": "Retourner à la page précédente.",
"Coming Soon": "Prochainement",
"wayToGetClickSendSMSToken": "Vous pouvez obtenir le nom d'utilisateur API et la clé API à partir de {0} .",
"Connection String": "Chaîne de connexion",
"Query": "Requête",
"settingsCertificateExpiry": "Expiration du certificat TLS",
"certificationExpiryDescription": "Les sondes HTTPS émettent une notification lorsque le certificat TLS expire dans :",
"Setup Docker Host": "Configurer l'hôte Docker",
"Connection Type": "Type de connexion",
"Docker Daemon": "Deamon Docker",
"deleteDockerHostMsg": "Voulez-vous vraiment supprimer cet hôte Docker pour toutes les sondes ?",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "Conteneur Docker",
"Container Name / ID": "Nom / ID du conteneur",
"Docker Host": "Hôte Docker",
"Docker Hosts": "Hôtes Docker",
"ntfy Topic": "Topic ntfy",
"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.",
"wayToGetLineNotifyToken": "Vous pouvez obtenir un jeton d'accès auprès de {0}",
"Examples": "Exemples",
"Home Assistant URL": "URL vers Home Assistant",
"Long-Lived Access Token": "Jeton d'accès de longue durée",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Un jeton d'accès de longue durée peut être créé en cliquant sur le nom de votre profil (en bas à gauche) et en faisant défiler vers le bas, puis cliquez sur Créer un jeton. ",
"Notification Service": "Service de notifications",
"default: notify all devices": "par défaut: notifier tous les appareils",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Une liste des services de notification peut être trouvée dans Home Assistant sous \"Outils de développement > Services\" recherchez \"notification\" pour trouver le nom de votre appareil/téléphone.",
"Automations can optionally be triggered in Home Assistant:": "Les automatisations peuvent éventuellement être déclenchées dans Home Assistant : ",
"Trigger type:": "Type de déclencheur : ",
"Event type:": "Type d'événement : ",
"Event data:": "Données d'événement : ",
"Then choose an action, for example switch the scene to where an RGB light is red.": "Ensuite, choisissez une action, par exemple basculer la scène là où une lumière RVB est rouge.",
"Frontend Version": "Version frontend",
"Frontend Version do not match backend version!": "La version frontend ne correspond pas à la version backend !",
"Base URL": "URL de base",
"goAlertInfo": "GoAlert est une application open source pour la planification des appels, les escalades automatisées et les notifications (comme les SMS ou les appels vocaux). Impliquez automatiquement la bonne personne, de la bonne manière et au bon moment ! {0}",
"goAlertIntegrationKeyInfo": "Obtenez la clé d'intégration d'API générique pour le service dans ce format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" généralement la valeur du paramètre de jeton de l'URL copiée.",
"goAlert": "GoAlert",
"backupOutdatedWarning": "Obsolète : étant donné que de nombreuses fonctionnalités ont été ajoutées et que cette fonctionnalité de sauvegarde est non maintenue, elle ne peut pas générer ou restaurer une sauvegarde complète.",
"backupRecommend": "Veuillez sauvegarder le volume ou le dossier de données (./data/) directement à la place.",
"Optional": "Optionnel",
"squadcast": "Squadcast",
"SendKey": "SendKey",
"SMSManager API Docs": "Documentations de l'API SMSManager ",
"Gateway Type": "Type de passerelle",
"SMSManager": "SMSManager",
"You can divide numbers with": "Vous pouvez diviser des nombres avec",
"or": "ou",
"recurringInterval": "Intervalle",
"Recurring": "Récurrent",
"strategyManual": "Activer/désactiver manuellement",
"warningTimezone": "Utilisation du fuseau horaire du serveur",
"weekdayShortMon": "Lun",
"weekdayShortTue": "Mar",
"weekdayShortWed": "Mer",
"weekdayShortThu": "Jeu",
"weekdayShortFri": "Ven",
"weekdayShortSat": "Sam",
"weekdayShortSun": "Dim",
"dayOfWeek": "Jour de la semaine",
"dayOfMonth": "Jour du mois",
"lastDay": "Dernier jour",
"lastDay1": "Dernier jour du mois",
"lastDay2": "Avant-dernier jour du mois",
"lastDay3": "3ème dernier jour du mois",
"lastDay4": "4ème dernier jour du mois",
"No Maintenance": "Aucune maintenance",
"pauseMaintenanceMsg": "Voulez-vous vraiment mettre en pause ?",
"maintenanceStatus-under-maintenance": "En maintenance",
"maintenanceStatus-inactive": "Inactif",
"maintenanceStatus-scheduled": "Programmé",
"maintenanceStatus-ended": "Terminé",
"maintenanceStatus-unknown": "Inconnue",
"Display Timezone": "Afficher le fuseau horaire",
"Server Timezone": "Fuseau horaire du serveur",
"statusPageMaintenanceEndDate": "Fin",
"IconUrl": "URL vers l'icône",
"Enable DNS Cache": "Activer le cache DNS",
"Enable": "Activer",
"Disable": "Désactiver",
"dnsCacheDescription": "Il peut ne pas fonctionner dans certains environnements IPv6, désactivez-le si vous rencontrez des problèmes.",
"Single Maintenance Window": "Créneau de maintenance unique",
"Maintenance Time Window of a Day": "Créneau de la maintenance",
"Effective Date Range": "Plage de dates d'effet",
"Schedule Maintenance": "Créer une maintenance",
"Date and Time": "Date et heure",
"DateTime Range": "Plage de dates et d'heures",
"Strategy": "Stratégie",
"Free Mobile User Identifier": "Identifiant d'utilisateur Free Mobile",
"Free Mobile API Key": "Clé d'API Free Mobile",
"Enable TLS": "Activer le TLS",
"Proto Service Name": "Nom du service proto",
"Proto Method": "Méthode Proto",
"Proto Content": "Contenu proto",
"Economy": "Économique",
"Lowcost": "Faible coût",
"high": "Haute",
"General Monitor Type": "Type de sonde générale",
"Passive Monitor Type": "Type de sonde passive",
"Specific Monitor Type": "Type de sonde spécifique",
"dataRetentionTimeError": "La durée de conservation doit être supérieure ou égale à 0",
"infiniteRetention": "Définissez la valeur à 0 pour une durée de conservation infinie.",
"Monitor": "Sonde | Sondes",
"Custom": "Personnalisé",
"confirmDeleteTagMsg": "Voulez-vous vraiment supprimer cette étiquettes ? Les moniteurs associés ne seront pas supprimés.",
"promosmsAllowLongSMS": "Autoriser les longs SMS",
"Help": "Aide",
"Game": "Jeux",
"Packet Size": "Taille du paquet",
"loadingError": "Impossible de récupérer les données, veuillez réessayer plus tard.",
"plugin": "Plugin | Plugins",
"install": "Installer",
"installing": "Installation",
"uninstall": "Désinstaller",
"uninstalling": "Désinstallation",
"confirmUninstallPlugin": "Voulez-vous vraiment désinstaller ce plugin ?",
"Custom Monitor Type": "Type de sonde personnalisé"
}

672
src/lang/he-IL.json Normal file
View File

@@ -0,0 +1,672 @@
{
"languageName": "עברית",
"checkEverySecond": "בדוק כל {0} שניות",
"retryCheckEverySecond": "נסה שוב כל {0} שניות",
"resendEveryXTimes": "התראה שוב כל {0} פעמים",
"resendDisabled": "השליחה מחדש מושבתת",
"retriesDescription": "מקסימום ניסיונות חוזרים לפני שהשירות יסומן כלא פעיל ונשלחת התראה",
"ignoreTLSError": "התעלם משגיאת TLS/SSL עבור אתרי HTTPS",
"upsideDownModeDescription": "הפוך את הסטטוס על הפוך. אם ניתן להגיע לשירות, הוא לא פעיל.",
"maxRedirectDescription": "המספר המרבי של הפניות מחדש לעקוב. הגדר ל-0 כדי להשבית הפניות מחדש.",
"enableGRPCTls": "אפשר לשלוח בקשת gRPC עם חיבור TLS",
"grpcMethodDescription": "שם השיטה מומר לפורמט cammelCase כגון sayHello, check וכו.",
"acceptedStatusCodesDescription": "בחר קודי סטטוס שנחשבים לתגובה מוצלחת.",
"Maintenance": "תחזוקה",
"statusMaintenance": "תחזוקה",
"Schedule maintenance": "תחזוקה מתוכננת",
"Affected Monitors": "מוניטורים מושפעים",
"Pick Affected Monitors...": "בחר המוניטרים מושפעים...",
"Start of maintenance": "תחילת תחזוקה",
"All Status Pages": "כל דפי הסטטוס",
"Select status pages...": "בחר דפי סטטוס...",
"recurringIntervalMessage": "רוץ פעם ביום | הפעל אחת ל-{0} ימים",
"affectedMonitorsDescription": "בחר מוניטורים שמושפעים מהתחזוקה הנוכחית",
"affectedStatusPages": "הצג הודעת תחזוקה זו בדפי סטטוס שנבחרו",
"atLeastOneMonitor": "בחר לפחות מוניטור אחד מושפע",
"passwordNotMatchMsg": "הסיסמאות לא תואמות",
"notificationDescription": "יש להקצות התראות למוניטור כדי שהן יעבדו.",
"keywordDescription": "חפש מילת מפתח בתגובת HTML או JSON רגילה. החיפוש תלוי רישיות.",
"pauseDashboardHome": "עצור",
"deleteMonitorMsg": "האם אתה בטוח שברצונך למחוק את המוניטור הזה?",
"deleteMaintenanceMsg": "האם אתה בטוח שברצונך למחוק את התחזוקה הזו?",
"deleteNotificationMsg": "האם אתה בטוח שברצונך למחוק את ההודעה הזו עבור כל מוניטרים?",
"dnsPortDescription": "יציאת שרת DNS. ברירת המחדל היא 53. אתה יכול לשנות את היציאה בכל עת.",
"resolverserverDescription": "Cloudflare הוא שרת ברירת המחדל. אתה יכול לשנות את שרת הפותר בכל עת.",
"rrtypeDescription": "בחר את סוג ה-RR שברצונך לפקח עליו",
"pauseMonitorMsg": "האם אתה בטוח רוצה להשהות?",
"enableDefaultNotificationDescription": "הודעה זו תופעל כברירת מחדל עבור מוניטרים חדשים. אתה עדיין יכול להשבית את ההודעה בנפרד עבור כל מוניטור.",
"clearEventsMsg": "האם אתה בטוח שברצונך למחוק את כל האירועים עבור המוניטור הזה?",
"clearHeartbeatsMsg": "האם אתה בטוח שברצונך למחוק את כל פעימות הלב עבור המוניטור הזה?",
"confirmClearStatisticsMsg": "האם אתה בטוח שברצונך למחוק את כל הנתונים הסטטיסטיים?",
"importHandleDescription": "בחר 'דלג על קיים' אם ברצונך לדלג על כל מוניטור או התראה באותו שם. 'החלף' ימחק כל מוניטור והתראה קיימים.",
"confirmImportMsg": "האם אתה בטוח שברצונך לייבא את הגיבוי? אנא ודא שבחרת באפשרות הייבוא הנכונה.",
"twoFAVerifyLabel": "אנא הזן את האסימון שלך כדי לאמת מערכת אדוש:",
"tokenValidSettingsMsg": "האסימון תקף! כעת אתה יכול לשמור את הגדרות האדוש.",
"confirmEnableTwoFAMsg": "האם אתה בטוח שברצונך להפעיל את מערכת אדוש?",
"confirmDisableTwoFAMsg": "Are you sure you want to disable 2FA?",
"Settings": "הגדרות",
"Dashboard": "פאנל ניהול",
"New Update": "עדכון חדש",
"Language": "שפה",
"Appearance": "נראות",
"Theme": "ערכת נושא",
"General": "כללי",
"Primary Base URL": "כתובת האתר הראשית של הבסיס",
"Version": "גרסה",
"Check Update On GitHub": "לבדוק עדכונים בגיטהאב",
"List": "רשימה",
"Add": "הוסף",
"Add New Monitor": "הוספת מוניטור חדש",
"Quick Stats": "נתונים בקצרה",
"Up": "פעיל",
"Down": "לא פעיל",
"Pending": "ממתין",
"Unknown": "לא יודע",
"Pause": "עצור",
"Name": "שם",
"Status": "סטטוס",
"DateTime": "תאריך שעה",
"Message": "הודעה",
"No important events": "אין אירועים חשובים",
"Resume": "המשך",
"Edit": "עריכה",
"Delete": "מחיקה",
"Current": "עכשיו",
"Uptime": "זמן פעילות",
"Cert Exp.": "Cert Exp.",
"day": "יום | ימים",
"-day": "-יום",
"hour": "שעה",
"-hour": "-שעה",
"Response": "תגובה",
"Ping": "פינג",
"Monitor Type": "סוג מוניטור",
"Keyword": "מילת מפתח",
"Friendly Name": "שם ידידותי",
"URL": "כתובת אתר",
"Hostname": "שם המארח",
"Port": "פורט",
"Heartbeat Interval": "מרווח פעימות",
"Retries": "נסיונות חוזרים",
"Heartbeat Retry Interval": "מרווח נסיונות חוזר של פעימות",
"Resend Notification if Down X times consequently": "שלח שוב הודעה אם ירד X פעמים כתוצאה מכך",
"Advanced": "מתקדם",
"Upside Down Mode": "מצב הפוך",
"Max. Redirects": "מקסימום הפניות מחדש",
"Accepted Status Codes": "קודי סטטוס מקובלים",
"Push URL": "דחף כתובת URL",
"needPushEvery": "עליך להתקשר לכתובת האתר הזו כל {0} שניות.",
"pushOptionalParams": "פרמטרים אופציונליים: {0}",
"Save": "שמירה",
"Notifications": "התראות",
"Not available, please setup.": "לא זמין, אנא הגדר.",
"Setup Notification": "הודעת הגדרה",
"Light": "בהיר",
"Dark": "חושך",
"Auto": "אוטומטי",
"Theme - Heartbeat Bar": "ערכת נושא - Heartbeat Bar",
"Normal": "נורמלי",
"Bottom": "למטה",
"None": "כלום",
"Timezone": "אזור זמן",
"Search Engine Visibility": "נראות במנועי חיפוש",
"Allow indexing": "אפשר הוספה לאינדקס",
"Discourage search engines from indexing site": "לא לעודד מנועי חיפוש לאינדקס אתרים",
"Change Password": "שנה סיסמא",
"Current Password": "סיסמה נוכחית",
"New Password": "סיסמה חדשה",
"Repeat New Password": "חזור על סיסמה חדשה",
"Update Password": "עדכן סיסמה",
"Disable Auth": "השבתת אבטחה",
"Enable Auth": "הפעלת אבטחה",
"disableauth.message1": "האם אתה בטוח שברצונך <strong>להשבית את האבטחה</strong>?",
"disableauth.message2": "הוא מיועד לתרחישים <strong>שבהם אתה מתכוון ליישם אימות של צד שלישי</strong> מול Uptime Kuma כגון Cloudflare Access, Authelia או מנגנוני אימות אחרים.",
"Please use this option carefully!": "אנא השתמש באפשרות זו בזהירות!",
"Logout": "התנתקות",
"Leave": "יציאה",
"I understand, please disable": "אני מבין, אני רוצה להשבית",
"Confirm": "אישור",
"Yes": "כן",
"No": "לא",
"Username": "שם משתמש",
"Password": "סיסמה",
"Remember me": "זכור אותי",
"Login": "התחברות",
"No Monitors, please": "בלי מוניטורים, בבקשה",
"add one": "להוסיף אחד",
"Notification Type": "סוג התראה",
"Email": "אימייל",
"Test": "Test",
"Certificate Info": "פרטי תעודת אבטחה",
"Resolver Server": "שרת פותר",
"Resource Record Type": "סוג רשומת משאבים",
"Last Result": "תוצאה אחרונה",
"Create your admin account": "צור את חשבון הניהול שלך",
"Repeat Password": "חזור על הסיסמה",
"Import Backup": "ייבוא גיבוי",
"Export Backup": "ייצוא גיבוי",
"Export": "ייצוא",
"Import": "ייבוא",
"respTime": "רפ. זמן (ms)",
"notAvailableShort": "N/A",
"Default enabled": "ברירת המחדל מופעלת",
"Apply on all existing monitors": "החל על כל המסכים הקיימים",
"Create": "ליצור",
"Clear Data": "נקה נתונים",
"Events": "אירועים",
"Heartbeats": "פעימות לב",
"Auto Get": "קבל אוטומטי",
"backupDescription": "אתה יכול לגבות את כל המסכים וההתראות לקובץ JSON.",
"backupDescription2": "הערה: היסטוריה ונתוני אירועים אינם כלולים.",
"backupDescription3": "נתונים רגישים כגון אסימוני הודעה כלולים בקובץ הייצוא; נא לאחסן יצוא בצורה מאובטחת.",
"alertNoFile": "אנא בחר קובץ לייבוא.",
"alertWrongFileType": "אנא בחר קובץ JSON.",
"Clear all statistics": "נקה את כל הנתונים הסטטיסטיים",
"Skip existing": "דילוג על הקיים",
"Overwrite": "החלף",
"Options": "אפשרויות",
"Keep both": "שמור את שניהם",
"Verify Token": "אמת את האסימון",
"Setup 2FA": "הגדרת מערכת אדוש",
"Enable 2FA": "הפעלת אדוש",
"Disable 2FA": "כיבוי אדוש",
"2FA Settings": "הגדרות אדוש",
"Two Factor Authentication": "אימות דו-שלבי (מערכת אדוש)",
"Active": "מופעל",
"Inactive": "קבוי",
"Token": "אסימון",
"Show URI": "הצג URI",
"Tags": "תגים",
"Add New below or Select...": "הוסף חדש למטה או בחר...",
"Tag with this name already exist.": "תג בשם זה כבר קיים.",
"Tag with this value already exist.": "תג עם ערך זה כבר קיים.",
"color": "צבע",
"value (optional)": "ערך (אופציונלי)",
"Gray": "אפור",
"Red": "אדום",
"Orange": "כתום",
"Green": "ירוק",
"Blue": "כחול",
"Indigo": "כחול כהה",
"Purple": "סגול",
"Pink": "כתום",
"Search...": "לחפש...",
"Avg. Ping": "פינג ממוצע",
"Avg. Response": "ממוצע תגובה",
"Entry Page": "דף כניסה",
"statusPageNothing": "אין כאן שום דבר, בבקשה הוסף קבוצה או מוניטור.",
"No Services": "אין שירותים",
"All Systems Operational": "כל המערכות עובדות",
"Partially Degraded Service": "שירות פגום חלקית",
"Degraded Service": "שירות פגום",
"Add Group": "הוסף קבוצה",
"Add a monitor": "הוסף מוניטור",
"Edit Status Page": "ערוך דף סטטוס",
"Go to Dashboard": "מעבר לפאנל",
"Status Page": "דף סטטוס",
"Status Pages": "דפי סטטוס",
"defaultNotificationName": "התראת {notification} שלי ({number})",
"here": "פה",
"Required": "נדרש",
"telegram": "טלגרם",
"Bot Token": "אסימון בוט",
"wayToGetTelegramToken": "אתה יכול לקבל אסימון מ-{0}.",
"Chat ID": "מזהה צ'אט",
"supportTelegramChatID": "תמיכה בצ'אט ישיר / קבוצה / מזהה הצ'אט של הערוץ",
"wayToGetTelegramChatID": "אתה יכול לקבל את מזהה הצ'אט שלך על ידי שליחת הודעה לבוט ומעבר לכתובת האתר הזו כדי להציג את ה-chat_id:",
"YOUR BOT TOKEN HERE": "אסימון הבוט שלך כאן",
"chatIDNotFound": "מזהה צ'אט לא נמצא; אנא שלח הודעה לבוט זה תחילה",
"webhook": "Webhook",
"Post URL": "כתובת אתר של פוסט",
"Content Type": "סוג התוכן",
"webhookJsonDesc": "{0} מתאים לכל שרתי HTTP מודרניים כגון Express.js",
"webhookFormDataDesc": "{multipart} טוב ל-PHP. יהיה צורך לנתח את ה-JSON באמצעות {decodeFunction}",
"webhookAdditionalHeadersTitle": "כותרות נוספות",
"webhookAdditionalHeadersDesc": "מגדיר כותרות נוספות שנשלחות עם ה-webhook.",
"smtp": "אימייל (SMTP)",
"secureOptionNone": "None / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "התעלם משגיאת TLS",
"From Email": "אמייל שולח",
"emailCustomSubject": "נושא מותאם אישית",
"To Email": "למייל",
"smtpCC": "עותק",
"smtpBCC": "עותק מוסתר",
"discord": "דיסקורד",
"Discord Webhook URL": "כתובת אתר של Discord Webhook",
"wayToGetDiscordURL": "אתה יכול לקבל זאת על ידי מעבר להגדרות שרת -> אינטגרציות -> צור Webhook",
"Bot Display Name": "שם תצוגה של בוט",
"Prefix Custom Message": "קידומת הודעה מותאמת אישית",
"Hello @everyone is...": "שלום {'@'}כולם...",
"teams": "Microsoft Teams",
"Webhook URL": "כתובת האתר של Webhook",
"wayToGetTeamsURL": "אתה יכול ללמוד כיצד ליצור כתובת אתר ל-webhook {0}.",
"signal": "אוֹת",
"Number": "מספר",
"Recipients": "נמענים",
"needSignalAPI": "אתה צריך שיהיה לך לקוח איתות עם REST API.",
"wayToCheckSignalURL": "אתה יכול לבדוק את כתובת האתר הזו כדי לראות כיצד להגדיר אחת:",
"signalImportant": "חשוב: לא ניתן לערבב קבוצות ומספרים בנמענים!",
"gotify": "Gotify",
"Application Token": "אסימון אפליקציה",
"Server URL": "כתובת האתר של השרת",
"Priority": "עדיפות",
"slack": "Slack",
"Icon Emoji": "אייקון אימוג'י",
"Channel Name": "שם הערוץ",
"Uptime Kuma URL": "Uptime Kuma URL",
"aboutWebhooks": "מידע נוסף על Webhooks ב: {0}",
"aboutChannelName": "הזן את שם הערוץ בשדה {0} שם ערוץ אם ברצונך לעקוף את ערוץ Webhook. לדוגמה: #ערוץ אחר",
"aboutKumaURL": "אם תשאיר את השדה Uptime Kuma URL ריק, הוא יעבור כברירת מחדל לעמוד Project GitHub.",
"emojiCheatSheet": "גיליון הונאה של אמוג'י: {0}",
"rocket.chat": "Rocket.Chat",
"pushover": "Pushover",
"pushy": "Pushy",
"PushByTechulus": "Push by Techulus",
"octopush": "Octopush",
"promosms": "PromoSMS",
"clicksendsms": "ClickSend SMS",
"lunasea": "LunaSea",
"apprise": "Apprise (תומך ב-50+ שירותי התראות)",
"GoogleChat": "Google Chat (Google Workspace בלבד)",
"pushbullet": "Pushbullet",
"line": "Line Messenger",
"mattermost": "Mattermost",
"User Key": "מפתח משתמש",
"Device": "התקן",
"Message Title": "כותרת ההודעה",
"Notification Sound": "צליל התראה",
"More info on:": "מידע נוסף על: {0}",
"pushoverDesc1": "לעדיפות חירום (2) יש פסק זמן של 30 שניות ברירת מחדל בין ניסיונות חוזרים, והיא תפוג לאחר שעה.",
"pushoverDesc2": "אם ברצונך לשלוח התראות למכשירים שונים, מלא את שדה התקן.",
"SMS Type": "סוג SMS",
"octopushTypePremium": "פרימיום (מהיר - מומלץ להתראה)",
"octopushTypeLowCost": "עלות נמוכה (איטית - לפעמים חסומה על ידי המפעיל)",
"checkPrice": "בדוק מחירים של {0}:",
"apiCredentials": "אישורי API",
"octopushLegacyHint": "האם אתה משתמש בגרסה הישנה של Octopush (2011-2020) או בגרסה החדשה?",
"Check octopush prices": "בדוק מחירי תמנון {0}.",
"octopushPhoneNumber": "מספר טלפון (פורמט אינטלי, למשל: +33612345678)",
"octopushSMSSender": "שם שולח SMS: 3-11 תווים אלפאנומריים ורווח (a-zA-Z0-9)",
"LunaSea Device ID": "מזהה מכשיר LunaSea",
"Apprise URL": "Apprise URL",
"Example:": "דוגמה: {0}",
"Read more:": "קרא עוד: {0}",
"Status:": "סטטוס: {0}",
"Read more": "קרא עוד",
"appriseInstalled": "Apprise מותקן.",
"appriseNotInstalled": "Apprise אינו מותקן. {0}",
"Access Token": "אסימון גישה",
"Channel access token": "אסימון גישה לערוץ",
"Line Developers Console": "קונסולת מפתחים",
"lineDevConsoleTo": "קו מפתחי קונסולת - {0}",
"Basic Settings": "הגדרות בסיסיות",
"User ID": "תעודת זהות של משתמש",
"Messaging API": "Messaging API",
"wayToGetLineChannelToken": "תחילה גש ל-{0}, צור ספק וערוץ (Messaging API), לאחר מכן תוכל לקבל את אסימון הגישה לערוץ ומזהה המשתמש מפריטי התפריט שהוזכרו לעיל.",
"Icon URL": "כתובת אתר של סמל",
"aboutIconURL": "אתה יכול לספק קישור לתמונה ב\"כתובת URL של סמל\" כדי לעקוף את תמונת הפרופיל המוגדרת כברירת מחדל. לא ישמש אם Icon Emoji מוגדר.",
"aboutMattermostChannelName": "אתה יכול לעקוף את ערוץ ברירת המחדל שאליו ה-Webhook מפרסם על ידי הזנת שם הערוץ בשדה \"שם ערוץ\". זה צריך להיות מופעל בהגדרות Mattermos Webhook. לדוגמה: #ערוץ אחר",
"matrix": "Matrix",
"promosmsTypeEco": "SMS ECO - זול אך איטי ולעיתים עמוס מדי. מוגבל רק לנמענים פולנים.",
"promosmsTypeFlash": "SMS FLASH - ההודעה תוצג אוטומטית במכשיר הנמען. מוגבל לנמענים פולנים בלבד.",
"promosmsTypeFull": "SMS FULL - שכבת פרימיום של SMS, אתה יכול להשתמש בשם השולח שלך (עליך לרשום את השם תחילה). אמין להתראות.",
"promosmsTypeSpeed": "SMS SPEED - העדיפות הגבוהה ביותר במערכת. מאוד מהיר ואמין אבל יקר (בערך פי שניים ממחיר מלא של SMS).",
"promosmsPhoneNumber": "מספר טלפון (לנמען פולני ניתן לדלג על אזורי חיוג)",
"promosmsSMSSender": "שם שולח SMS: שם רשום מראש או אחת מברירות המחדל: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookURL",
"matrixHomeserverURL": "כתובת האתר של שרת הבית (עם http(s):// ויציאה אופציונלית)",
"Internal Room Id": "מזהה חדר פנימי",
"matrixDesc1": "אתה יכול למצוא את מזהה החדר הפנימי על ידי עיון בחלק המתקדם של לקוח Matrix שלך בהגדרות החדר. זה צריך להיראות כמו !QMdRCpUIfLwsfjxye6:home.server.",
"matrixDesc2": "מומלץ מאוד ליצור משתמש חדש ולא להשתמש באסימון הגישה של משתמש מטריקס משלך שכן הוא יאפשר גישה מלאה לחשבון שלך ולכל החדרים שהצטרפת אליהם. במקום זאת, צור משתמש חדש והזמן אותו רק לחדר שבו תרצה לקבל את ההתראה. תוכל לקבל את אסימון הגישה על ידי הפעלת {0}",
"Method": "Method",
"Body": "Body",
"Headers": "Headers",
"PushUrl": "Push URL",
"HeadersInvalidFormat": "כותרות הבקשה אינן JSON חוקיות:",
"BodyInvalidFormat": "גוף הבקשה אינו JSON חוקי:",
"Monitor History": "מעקב אחר היסטוריה",
"clearDataOlderThan": "שמור את נתוני היסטוריית הצג למשך {0} ימים.",
"PasswordsDoNotMatch": "סיסמאות לא תואמות.",
"records": "רשומות",
"One record": "שיא אחד",
"steamApiKeyDescription": "לניטור שרת משחקי Steam אתה צריך מפתח Steam Web-API. אתה יכול לרשום את מפתח ה-API שלך כאן:",
"Current User": "משתמש נוכחי",
"topic": "נושא",
"topicExplanation": "נושא MQTT למעקב",
"successMessage": "הודעת הצלחה",
"successMessageExplanation": "הודעת MQTT שתיחשב כהצלחה",
"recent": "לאחרונה",
"Done": "בוצע",
"Info": "מידע",
"Security": "אבטחה",
"Steam API Key": "מפתח API Steam",
"Shrink Database": "מסד נתונים מכווץ",
"Pick a RR-Type...": "בחר סוג RR ...",
"Pick Accepted Status Codes...": "בחר קודי סטטוס מקובלים ...",
"Default": "בְּרִירַת מֶחדָל",
"HTTP Options": "אפשרויות HTTP",
"Create Incident": "ליצור אירוע",
"Title": "כותרת",
"Content": "תוֹכֶן",
"Style": "Style",
"info": "מידע",
"warning": "אַזהָרָה",
"danger": "סַכָּנָה",
"error": "שְׁגִיאָה",
"critical": "קריטי",
"primary": "יְסוֹדִי",
"light": "אוֹר",
"dark": "אפל",
"Post": "הודעה",
"Please input title and content": "אנא הזן כותרת ותוכן",
"Created": "נוצר",
"Last Updated": "עודכן לאחרונה",
"Unpin": "ענן חוף",
"Switch to Light Theme": "לעבור לנושא האור",
"Switch to Dark Theme": "לעבור לנושא אפל",
"Show Tags": "Show Tags",
"Hide Tags": "הסתר תגיות",
"Description": "תיאור",
"No monitors available.": "אין צגים זמינים.",
"Add one": "הוסף אחד",
"No Monitors": "אין צגים",
"Untitled Group": "קבוצה ללא כותרת",
"Services": "שירותים",
"Discard": "להשליך",
"Cancel": "לְבַטֵל",
"Powered by": "פועל על",
"shrinkDatabaseDescription": "ואקום מסד נתונים להפעיל עבור SQLITE.אם בסיס הנתונים שלך נוצר לאחר 1.10.0, Auto_VACUUM כבר מופעל ואין צורך בפעולה זו.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Username (incl. webapi_ prefix)",
"serwersmsAPIPassword": "סיסמת API",
"serwersmsPhoneNumber": "מספר טלפון",
"serwersmsSenderName": "שם שולח SMS (רשום באמצעות פורטל לקוחות)",
"smseagle": "SMSEagle",
"smseagleTo": "מספרי טלפון)",
"smseagleGroup": "שם קבוצת ספר טלפונים",
"smseagleContact": "שם איש קשר בספר הטלפונים",
"smseagleRecipientType": "Rסוג הנמען",
"smseagleRecipient": "נמענים (ים) (יש להפריד בין מרובים לפסיק)",
"smseagleToken": "API Access Token",
"smseagleUrl": "כתובת האתר של מכשיר ה- SMSeagege שלך",
"smseagleEncoding": "שלח כ- Unicode",
"smseaglePriority": "עדיפות הודעה (0-9, ברירת מחדל = 0)",
"stackfield": "סטאקפילד",
"Customize": "התאמה אישית",
"Custom Footer": "כותרת תחתונה מותאמת אישית",
"Custom CSS": "CSS מותאם אישית",
"smtpDkimSettings": "הגדרות DKIM",
"smtpDkimDesc": "אנא עיין ב- NodeMailer DKIM {0} לשימוש.",
"documentation": "ווקיפדיית מדריכים",
"smtpDkimDomain": "שם דומיין",
"smtpDkimKeySelector": "בורר מפתח",
"smtpDkimPrivateKey": "טוראי של פרטיy",
"smtpDkimHashAlgo": "אלגוריתם hash (אופציונלי)",
"smtpDkimheaderFieldNames": "מפתחות כותרת לחתום (אופציונלי)",
"smtpDkimskipFields": "מפתחות כותרת לא לחתום (אופציונלי)",
"wayToGetPagerDutyKey": "אתה יכול להשיג זאת על ידי מעבר לשירות -> ספריית שירות -> (בחר שירות) -> אינטגרציות -> הוסף אינטגרציה.כאן תוכלו לחפש \"אירועים API v2 \".מידע נוסף {0}",
"Integration Key": "מפתח אינטגרציה",
"Integration URL": "URL אינטגרציה",
"Auto resolve or acknowledged": "פיתרון אוטומטי או הודה",
"do nothing": "לעשות כלום",
"auto acknowledged": "Auto הודה",
"auto resolve": "פתרון אוטומטי",
"gorush": "Gorush",
"alerta": "Alerta",
"alertaApiEndpoint": "נקודת קצה של API",
"alertaEnvironment": "סביבה",
"alertaApiKey": "מפתח API",
"alertaAlertState": "מצב התראה",
"alertaRecoverState": "לשחזר מדינה",
"deleteStatusPageMsg": "האם אתה בטוח רוצה למחוק את דף הסטטוס הזה?",
"Proxies": "Proxies",
"default": "בְּרִירַת מֶחדָל",
"enabled": "מופעל",
"setAsDefault": "נקבע כברירת מחדל",
"deleteProxyMsg": "האם אתה בטוח רוצה למחוק את הפרוקסי הזה לכל המסכים?",
"proxyDescription": "Proxies must be assigned to a monitor to function.",
"enableProxyDescription": "פרוקסי זה לא ישפיע על בקשות צג עד שהוא יופעל.אתה יכול לשלוט באופן זמני להשבית את ה- Proxy מכל המסכים לפי מצב ההפעלה.",
"setAsDefaultProxyDescription": "פרוקסי זה יופעל כברירת מחדל עבור צגים חדשים.אתה עדיין יכול להשבית את ה- Proxy בנפרד עבור כל צג.",
"Certificate Chain": "שרשרת אישורים",
"Valid": "תָקֵף",
"Invalid": "לא חוקי",
"AccessKeyId": "מזהה AccessKey",
"SecretAccessKey": "גישהלמפתחסוד",
"PhoneNumbers": "מספר טלפוןs",
"TemplateCode": "TemplateCode",
"SignName": "שם שם",
"Sms template must contain parameters: ": "תבנית SMS חייבת להכיל פרמטרים: ",
"Bark Endpoint": "Bark Endpoint",
"Bark Group": "Bark Group",
"Bark Sound": "Bark Sound",
"WebHookUrl": "WebHookUrl",
"SecretKey": "מפתח סודי",
"For safety, must use secret key": "לבטיחות, חייב להשתמש במפתח סודיy",
"Device Token": "אסימון מכשיר",
"Platform": "פּלַטפוֹרמָה",
"iOS": "iOS",
"Android": "דְמוּי אָדָם",
"Huawei": "huawei",
"High": "High",
"Retry": "נסה שוב",
"Topic": "נוֹשֵׂא",
"WeCom Bot Key": "WeCom Bot Key",
"Setup Proxy": "הגדרת פרוקסי",
"Proxy Protocol": "פרוטוקול פרוקסי",
"Proxy Server": "שרת פרוקסי",
"Proxy server has authentication": "לשרת ה- Proxy יש אימות",
"User": "מִשׁתַמֵשׁ",
"Installed": "מוּתקָן",
"Not installed": "לא מותקן",
"Running": "רץ",
"Not running": "לא רץ",
"Remove Token": "הסר אסימון",
"Start": "הַתחָלָה",
"Stop": "תפסיק",
"Uptime Kuma": "Uptime Kuma",
"Add New Status Page": "הוסף דף סטטוס חדש",
"Slug": "Slug",
"Accept characters:": "קבל תווים:",
"startOrEndWithOnly": "התחל או סוף עם {0} בלבד",
"No consecutive dashes": "אין מקפים רצופים",
"Next": "הַבָּא",
"The slug is already taken. Please choose another slug.": "השבלול כבר נלקח.אנא בחר שבלול נוסף.",
"No Proxy": "אין פרוקסי",
"Authentication": "אבטחה",
"HTTP Basic Auth": "HTTP בסיסי Auth",
"New Status Page": "דף סטטוס חדש",
"Page Not Found": "הדף לא נמצא",
"Reverse Proxy": "פרוקסי הפוך",
"Backup": "גיבוי",
"About": "אודות",
"wayToGetCloudflaredURL": "(הורד את CloudFlared מ- {0})",
"cloudflareWebsite": "אתר CloudFlare",
"Message:": "הוֹדָעָה:",
"Don't know how to get the token? Please read the guide:": "לא יודע איך להשיג את האסימון?אנא קרא את המדריך:",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "החיבור הנוכחי עשוי ללכת לאיבוד אם אתה מתחבר כרגע באמצעות מנהרת CloudFlare.האם אתה בטוח רוצה לעצור את זה?הקלד את הסיסמה הנוכחית שלך כדי לאשר אותה.",
"HTTP Headers": "כותרות HTTP",
"Trust Proxy": "אמון בפרוקסי",
"Other Software": "תוכנה אחרת",
"For example: nginx, Apache and Traefik.": "למשל: Nginx, Apache ו- Traefik.",
"Please read": "בבקשה תקרא",
"Subject:": "נושא:",
"Valid To:": "תקף ל:",
"Days Remaining:": "ימים שנותרו:",
"Issuer:": "המנפיק:",
"Fingerprint:": "טביעת אצבע:",
"No status pages": "אין דפי סטטוס",
"Domain Name Expiry Notification": "הודעה על תום שם תחום",
"Proxy": "פרוקסי",
"Date Created": "תאריך יצירה",
"HomeAssistant": "Home Assistant",
"onebotHttpAddress": "כתובת HTTP של OneBot ",
"onebotMessageType": "סוג ההודעה OneBot",
"onebotGroupMessage": "קְבוּצָה",
"onebotPrivateMessage": "פְּרָטִי",
"onebotUserOrGroupId": "מזהה קבוצה/משתמש ",
"onebotSafetyTips": "לבטיחות, חייב לקבוע אסימון גישה ",
"PushDeer Key": "PushDeer Key",
"Footer Text": "טקסט כותרת תחתונה ",
"Show Powered By": "הצג מופעל על ידי ",
"Domain Names": "שמות דומיין ",
"signedInDisp": "חתום כ- {0} ",
"signedInDispDisabled": "Auth מושבת.",
"RadiusSecret": "רדיוס סוד",
"RadiusSecretDescription": "סוד משותף בין לקוח לשרת",
"RadiusCalledStationId": "נקרא מזהה תחנה",
"RadiusCalledStationIdDescription": "מזהה של המכשיר הנקרא ",
"RadiusCallingStationId": "מזהה תחנת שיחה ",
"RadiusCallingStationIdDescription": "מזהה של מכשיר השיחה ",
"Certificate Expiry Notification": "הודעת תפוגה של אישור",
"API Username": "שם משתמש API",
"API Key": "מפתח API",
"Recipient Number": "מספר הנמען",
"From Name/Number": "משם/מספר",
"Leave blank to use a shared sender number.": "השאר ריק כדי להשתמש במספר שולח משותף.",
"Octopush API Version": "גרסת API של תמנון",
"Legacy Octopush-DM": "Legacy Octopush-DM",
"endpoint": "נקודת קצה",
"octopushAPIKey": "\"מפתח API \" מתוך תעודות API של HTTP בלוח הבקרה",
"octopushLogin": "\"כניסה \" מתעודות API של HTTP בלוח הבקרה",
"promosmsLogin": "שם כניסה של API",
"promosmsPassword": "סיסמת API",
"pushoversounds pushover": "Pushover (ברירת מחדל)",
"pushoversounds bike": "אופניים",
"pushoversounds bugle": "חֲצוֹצְרָה",
"pushoversounds cashregister": "קופה רושמת",
"pushoversounds classical": "קלַאסִי",
"pushoversounds cosmic": "קוֹסמִי",
"pushoversounds falling": "נופל",
"pushoversounds gamelan": "gamelan",
"pushoversounds incoming": "נִכנָס",
"pushoversounds intermission": "Intermission",
"pushoversounds magic": "קֶסֶם",
"pushoversounds mechanical": "מֵכָנִי",
"pushoversounds pianobar": "בר פסנתר",
"pushoversounds siren": "סִירֶנָה",
"pushoversounds spacealarm": "אזעקת חלל",
"pushoversounds tugboat": "סירת משיכה",
"pushoversounds alien": "אזעקת חייזרים (ארוכה)",
"pushoversounds climb": "לטפס (ארוך)",
"pushoversounds persistent": "מתמיד (ארוך)",
"pushoversounds echo": "הד Pushover (ארוך)",
"pushoversounds updown": "למעלה (ארוך)",
"pushoversounds vibrate": "לרטוט בלבד",
"pushoversounds none": "אף אחד (שקט)",
"pushyAPIKey": "מפתח API סודי",
"pushyToken": "אסימון מכשיר",
"Show update if available": "הצג עדכון אם זמין",
"Also check beta release": "בדוק גם את שחרור הבטא",
"Using a Reverse Proxy?": "באמצעות פרוקסי הפוך?",
"Check how to config it for WebSocket": "בדוק כיצד להגדיר אותו ל- WebSocket",
"Steam Game Server": "שרת משחק קיטור",
"Most likely causes:": "ככל הנראה גורם:",
"The resource is no longer available.": "המשאב כבר לא זמין.",
"There might be a typing error in the address.": "יתכן שיש שגיאת הקלדה בכתובת.",
"What you can try:": "מה שאתה יכול לנסות:",
"Retype the address.": "הקלד מחדש את הכתובת.",
"Go back to the previous page.": "חזור לדף הקודם.",
"Coming Soon": "בקרוב",
"wayToGetClickSendSMSToken": "אתה יכול לקבל שם משתמש API ומפתח API מ- {0}.",
"Connection String": "מחרוזת חיבור",
"Query": "שאילתא",
"settingsCertificateExpiry": "תפוגת תעודת TLS",
"certificationExpiryDescription": "HTTPS עוקב אחר התראה על התראה כאשר תעודת TLS פגה ב:",
"Setup Docker Host": "הגדרת מארח Docker",
"Connection Type": "סוג חיבור",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "האם אתה בטוח רוצה למחוק את המארח של Docker לכל המוניטורים?",
"socket": "Socket",
"tcp": "TCP / HTTP",
"Docker Container": "מיכל Docker",
"Container Name / ID": "שם מכולה / מזהה",
"Docker Host": "מארח דוקר",
"Docker Hosts": "מארחי Docker",
"ntfy Topic": "ntfy Topic",
"Domain": "תְחוּם",
"Workstation": "עמדת עבודה",
"disableCloudflaredNoAuthMsg": "אתה לא נמצא במצב AUTH, אין צורך בסיסמה.",
"trustProxyDescription": "סמוך על כותרות 'x-forwarded-*'.אם אתה רוצה להשיג את ה- IP של הלקוח הנכון וה- Uptime Kuma שלך מאחור כמו Nginx או Apache, עליך לאפשר זאת.",
"wayToGetLineNotifyToken": "אתה יכול לקבל אסימון גישה מ- {0}",
"Examples": "דוגמאות",
"Home Assistant URL": "כתובת URL עוזרת ביתית",
"Long-Lived Access Token": "אסימון גישה ארוכת שנים",
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "ניתן ליצור אסימון גישה לאורך זמן על ידי לחיצה על שם הפרופיל שלך (שמאל למטה) וגלילה לתחתית ואז לחץ על צור אסימון. ",
"Notification Service": "Notification Service",
"default: notify all devices": "default: notify all devices",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "רשימה של שירותי הודעה ניתן למצוא בעוזר הבית תחת \"כלי מפתחים> שירותים \" חפש \"הודעה \" כדי למצוא את שם המכשיר/טלפון שלך.",
"Automations can optionally be triggered in Home Assistant:": "אוטומציות יכולות להיות מופעלות באופן אופציונלי לעוזר הבית:",
"Trigger type:": "סוג ההדק:",
"Event type:": "סוג אירוע:",
"Event data:": "נתוני אירועים:",
"Then choose an action, for example switch the scene to where an RGB light is red.": "ואז בחר פעולה, למשל העבר את הסצינה למקום בו אור RGB הוא אדום.",
"Frontend Version": "גרסת Frontend",
"Frontend Version do not match backend version!": "גרסת Frontend לא תואמת את גרסת Backend!",
"Base URL": "Base URL",
"goAlertInfo": "SAETRERT הוא יישום קוד פתוח לתזמון שיחה, הסלמות והודעות אוטומטיות (כמו SMS או שיחות קוליות).לעסוק אוטומטית את האדם הנכון, בדרך הנכונה ובזמן הנכון!{0}",
"goAlertIntegrationKeyInfo": "קבל מפתח אינטגרציה של API גנרי לשירות בפורמט זה \"AAAAAAAA-BBB-CCCC-DDDD-EEEEEEEEEEE \" בדרך כלל הערך של פרמטר האסימון של URL שהועתק.",
"goAlert": "GoAlert",
"backupOutdatedWarning": "מיושם: מכיוון שהרבה תכונות שנוספו ותכונת הגיבוי הזו מעט לא מצומצמת, היא לא יכולה לייצר או לשחזר גיבוי שלם.",
"backupRecommend": "אנא גבה את עוצמת הקול או את תיקיית הנתונים (./data/) ישירות במקום.",
"Optional": "אופציונאלי",
"squadcast": "Squadcast",
"SendKey": "SendKey",
"SMSManager API Docs": "מסמכי API של SmsManager ",
"Gateway Type": "סוג שער",
"SMSManager": "SMSManager",
"You can divide numbers with": "אתה יכול לחלק מספרים עם",
"or": "אוֹ",
"recurringInterval": "הפסקה",
"Recurring": "מחזורי",
"strategyManual": "פעיל/לא פעיל באופן ידני",
"warningTimezone": "זה משתמש באזור הזמן של השרת",
"weekdayShortMon": "שני",
"weekdayShortTue": "שלישי",
"weekdayShortWed": "רביעי",
"weekdayShortThu": "חמישי",
"weekdayShortFri": "שישי",
"weekdayShortSat": "שבת",
"weekdayShortSun": "ראשון",
"dayOfWeek": "יום בשבוע",
"dayOfMonth": "יום בחודש",
"lastDay": "Last Day",
"lastDay1": "היום האחרון של החודש",
"lastDay2": "יום שני האחרון של החודש",
"lastDay3": "יום 3 האחרון של החודש",
"lastDay4": "היום הרביעי האחרון בחודש",
"No Maintenance": "אין תחזוקה",
"pauseMaintenanceMsg": "האם אתה בטוח רוצה להשהות?",
"maintenanceStatus-under-maintenance": "מתבצעות עבודות תחזוקה",
"maintenanceStatus-inactive": "לא פעיל",
"maintenanceStatus-scheduled": "מתוזמן",
"maintenanceStatus-ended": "הסתיים",
"maintenanceStatus-unknown": "לא ידוע",
"Display Timezone": "הצג אזור זמן",
"Server Timezone": "אזור זמן של שרת",
"statusPageMaintenanceEndDate": "סוך",
"IconUrl": "קישור לתמונת אייקון",
"Enable DNS Cache": "הפעל מטמון DNS",
"Enable": "הפעל",
"Disable": "השבת",
"dnsCacheDescription": "ייתכן שהוא לא עובד בסביבות IPv6 מסוימות, השבת אותו אם אתה נתקל בבעיות כלשהן.",
"Single Maintenance Window": "חלון תחזוקה בודד",
"Maintenance Time Window of a Day": "חלון זמן תחזוקה ביום",
"Effective Date Range": "טווח תאריכים אפקטיבי",
"Schedule Maintenance": "לוח זמנים לתחזוקה",
"Date and Time": "תאריך ושעה",
"DateTime Range": "טווח תאריכים וזמן",
"Strategy": "אסטרטגיה",
"Free Mobile User Identifier": "מזהה משתמש נייד בחינם",
"Free Mobile API Key": "מפתח API חינם לנייד",
"Enable TLS": "אפשר TLS",
"Proto Service Name": "שם שירות פרוטו",
"Proto Method": "שיטת פרוטו",
"Proto Content": "תוכן פרוטו",
"Economy": "חיסכון",
"Lowcost": "זול",
"high": "גבוהה",
"General Monitor Type": "מוניטור כללי",
"Passive Monitor Type": "מוניטור פסיבי",
"Specific Monitor Type": "סוג מוניטור ספציפי"
}

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