mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-11-27 20:10:53 +03:00
Merge branch 'louislam:master' into logging
This commit is contained in:
commit
dcc7856b5d
13 changed files with 348 additions and 76 deletions
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
@ -25,4 +25,4 @@ Please delete options that are not relevant.
|
|||
|
||||
## Screenshots (if any)
|
||||
|
||||
Please do not use any external image service. Instead, just paste in or drag and drop the image here and it will be uploaded automatically.
|
||||
Please do not use any external image service. Instead, just paste in or drag and drop the image here, and it will be uploaded automatically.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
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.
|
||||
|
||||
The project was created with vite.js (vue3). Then I created a sub-directory called "server" for server part. Both frontend and backend share the same package.json.
|
||||
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.
|
||||
|
||||
The frontend code build into "dist" directory. The server (express.js) exposes the "dist" directory as root of the endpoint. This is how production is working.
|
||||
|
||||
|
@ -27,11 +27,10 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
|
|||
|
||||
## Can I create a pull request for Uptime Kuma?
|
||||
|
||||
Generally, if the pull request is working fine and it do not affect any existing logic, workflow and performance, I will merge into the master branch once it is tested.
|
||||
Generally, if the pull request is working fine, and it does not affect any existing logic, workflow and performance, I will merge into the master branch once it is tested.
|
||||
|
||||
If you are not sure whether I will accept your pull request, feel free to create an empty pull request draft first.
|
||||
|
||||
|
||||
### Recommended Pull Request Guideline
|
||||
|
||||
1. Fork the project
|
||||
|
@ -41,7 +40,7 @@ If you are not sure whether I will accept your pull request, feel free to create
|
|||
`git commit -m "[empty commit] pull request for <YOUR TASK NAME>" --allow-empty`
|
||||
1. Push to your fork repo
|
||||
1. Create a pull request: https://github.com/louislam/uptime-kuma/compare
|
||||
1. Write a proper description
|
||||
1. Write a proper description
|
||||
1. Click "Change to draft"
|
||||
|
||||
### Pull Request Examples
|
||||
|
@ -66,7 +65,7 @@ I do not have such knowledge to test it.
|
|||
|
||||
#### ⚠ Low Priority - Harsh Mode
|
||||
|
||||
Some pull requests are required to modify the core. To be honest, I do not want anyone to try to do that, because it would spend a lot of your time. I will review your pull request harshly. Also you may need to write a lot of unit tests to ensure that there is no breaking change.
|
||||
Some pull requests are required to modify the core. To be honest, I do not want anyone to try to do that, because it would spend a lot of your time. I will review your pull request harshly. Also, you may need to write a lot of unit tests to ensure that there is no breaking change.
|
||||
|
||||
- Touch large parts of code of any very important features
|
||||
- Touch monitoring logic
|
||||
|
@ -74,7 +73,6 @@ Some pull requests are required to modify the core. To be honest, I do not want
|
|||
- Touch the entry point of Docker or Node.js
|
||||
- Modify auth
|
||||
|
||||
|
||||
#### *️⃣ Low Priority
|
||||
|
||||
It changed my current workflow and require further studies.
|
||||
|
@ -143,7 +141,7 @@ express.js is just used for serving the frontend built files (index.html, .js an
|
|||
- modules/ (Modified 3rd-party modules)
|
||||
- notification-providers/ (individual notification logic)
|
||||
- routers/ (Express Routers)
|
||||
- scoket-handler (Socket.io Handlers)
|
||||
- socket-handler (Socket.io Handlers)
|
||||
- server.js (Server main logic)
|
||||
|
||||
## How to start the Frontend Dev Server
|
||||
|
@ -201,7 +199,7 @@ 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.
|
||||
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/))
|
||||
|
||||
|
@ -209,20 +207,19 @@ Patch release = the third digit ([Semantic Versioning](https://semver.org/))
|
|||
|
||||
Please read: https://github.com/louislam/uptime-kuma/tree/master/src/languages
|
||||
|
||||
|
||||
## Wiki
|
||||
|
||||
Since there is no way to make a pull request to wiki's repo, I have setup another repo to do that.
|
||||
Since there is no way to make a pull request to wiki's repo, I have set up another repo to do that.
|
||||
|
||||
https://github.com/louislam/uptime-kuma-wiki
|
||||
|
||||
|
||||
## Maintainer
|
||||
## Maintainer
|
||||
|
||||
Check the latest issues and pull requests:
|
||||
https://github.com/louislam/uptime-kuma/issues?q=sort%3Aupdated-desc
|
||||
|
||||
### Release Procedures
|
||||
|
||||
1. Draft a release note
|
||||
1. Make sure the repo is cleared
|
||||
1. `npm run update-version 1.X.X`
|
||||
|
@ -234,22 +231,24 @@ https://github.com/louislam/uptime-kuma/issues?q=sort%3Aupdated-desc
|
|||
1. SSH to demo site server and update to 1.X.X
|
||||
|
||||
Checking:
|
||||
|
||||
- Check all tags is fine on https://hub.docker.com/r/louislam/uptime-kuma/tags
|
||||
- Try the Docker image with tag 1.X.X (Clean install / amd64 / arm64 / armv7)
|
||||
- Try clean install with Node.js
|
||||
- Try clean installation with Node.js
|
||||
|
||||
### Release Wiki
|
||||
|
||||
#### Setup Repo
|
||||
```
|
||||
|
||||
```bash
|
||||
git clone https://github.com/louislam/uptime-kuma-wiki.git
|
||||
cd uptime-kuma-wiki
|
||||
git remote add production https://github.com/louislam/uptime-kuma.wiki.git
|
||||
```
|
||||
|
||||
#### Push to Production Wiki
|
||||
```
|
||||
|
||||
```bash
|
||||
git pull
|
||||
git push production master
|
||||
```
|
||||
|
||||
|
|
12
README.md
12
README.md
|
@ -17,13 +17,13 @@ Try it!
|
|||
|
||||
https://demo.uptime.kuma.pet
|
||||
|
||||
It is a temporary live demo, all data will be deleted after 10 minutes. The server is located at Tokyo, so if you live far from there it may affect your experience. I suggest that you should install and try it out for the best demo experience.
|
||||
It is a temporary live demo, all data will be deleted after 10 minutes. The server is located in Tokyo, so if you live far from there, it may affect your experience. I suggest that you should install and try it out for the best demo experience.
|
||||
|
||||
VPS is sponsored by Uptime Kuma sponsors on [Open Collective](https://opencollective.com/uptime-kuma)! Thank you so much!
|
||||
|
||||
## ⭐ Features
|
||||
|
||||
* Monitoring uptime for HTTP(s) / TCP / Ping / DNS Record / Push.
|
||||
* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / Ping / DNS Record / Push / Steam Game Server.
|
||||
* Fancy, Reactive, Fast UI/UX.
|
||||
* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [70+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications).
|
||||
* 20 second intervals.
|
||||
|
@ -67,7 +67,7 @@ Browse to http://localhost:3001 after starting.
|
|||
|
||||
### Advanced Installation
|
||||
|
||||
If you need more options or need to browse via a reserve proxy, please read:
|
||||
If you need more options or need to browse via a reverse proxy, please read:
|
||||
|
||||
https://github.com/louislam/uptime-kuma/wiki/%F0%9F%94%A7-How-to-Install
|
||||
|
||||
|
@ -120,7 +120,7 @@ If you love this project, please consider giving me a ⭐.
|
|||
|
||||
### Issues Page
|
||||
|
||||
You can discuss or ask for help in [Issues](https://github.com/louislam/uptime-kuma/issues).
|
||||
You can discuss or ask for help in [issues](https://github.com/louislam/uptime-kuma/issues).
|
||||
|
||||
### Subreddit
|
||||
|
||||
|
@ -132,8 +132,8 @@ https://www.reddit.com/r/UptimeKuma/
|
|||
|
||||
If you want to report a bug or request a new feature. Free feel to open a [new issue](https://github.com/louislam/uptime-kuma/issues).
|
||||
|
||||
If you want to translate Uptime Kuma into your langauge, please read: https://github.com/louislam/uptime-kuma/tree/master/src/languages
|
||||
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 modify Uptime Kuma, this guideline may be useful for you: https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md
|
||||
|
||||
English proofreading is needed too because my grammar is not that great sadly. Feel free to correct my grammar in this readme, source code, or wiki.
|
||||
English proofreading is needed too because my grammar is not that great, sadly. Feel free to correct my grammar in this README, source code, or wiki.
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"url": "https://github.com/louislam/uptime-kuma.git"
|
||||
},
|
||||
"engines": {
|
||||
"node": "14.*"
|
||||
"node": "14.* || >=16.*"
|
||||
},
|
||||
"scripts": {
|
||||
"install-legacy": "npm install --legacy-peer-deps",
|
||||
|
@ -22,7 +22,7 @@
|
|||
"build": "vite build --config ./config/vite.config.js",
|
||||
"test": "node test/prepare-test-server.js && node server/server.js --port=3002 --data-dir=./data/test/ --test",
|
||||
"test-with-build": "npm run build && npm test",
|
||||
"jest": "node test/prepare-jest.js && npm run jest-frontend && npm run jest-backend && jest --runInBand --config=./config/jest.config.js",
|
||||
"jest": "node test/prepare-jest.js && npm run jest-frontend && npm run jest-backend",
|
||||
"jest-frontend": "cross-env TEST_FRONTEND=1 jest --config=./config/jest-frontend.config.js",
|
||||
"jest-backend": "cross-env TEST_BACKEND=1 jest --config=./config/jest-backend.config.js",
|
||||
"tsc": "tsc",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<label for="clicksendsms-login" class="form-label">API Username</label>
|
||||
<div class="form-text">
|
||||
{{ $t("apiCredentials") }}
|
||||
<a href="http://dashboard.clicksend.com/account/subaccounts" target="_blank">here</a>
|
||||
<a href="http://dashboard.clicksend.com/account/subaccounts" target="_blank">{{ $t("here") }}</a>
|
||||
</div>
|
||||
<input id="clicksendsms-login" v-model="$parent.notification.clicksendsmsLogin" type="text" class="form-control" required>
|
||||
<label for="clicksendsms-key" class="form-label">API Key</label>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="secure" class="form-label">Secure</label>
|
||||
<label for="secure" class="form-label">{{ $t("Security") }}</label>
|
||||
<select id="secure" v-model="$parent.notification.smtpSecure" class="form-select">
|
||||
<option :value="false">{{ $t("secureOptionNone") }}</option>
|
||||
<option :value="true">{{ $t("secureOptionTLS") }}</option>
|
||||
|
|
|
@ -8,4 +8,4 @@
|
|||
6. Add it into `languageList` constant.
|
||||
7. Make a [pull request](https://github.com/louislam/uptime-kuma/pulls) when you have done.
|
||||
|
||||
If you do not have programming skills, let me know in [Issues section](https://github.com/louislam/uptime-kuma/issues). I will assist you. 😏
|
||||
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. 😏
|
||||
|
|
|
@ -307,6 +307,44 @@ export default {
|
|||
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",
|
||||
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",
|
||||
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",
|
||||
"Add one": "Add one",
|
||||
"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.",
|
||||
serwersms: "SerwerSMS.pl",
|
||||
serwersmsAPIUser: "API Username (incl. webapi_ prefix)",
|
||||
|
|
|
@ -308,4 +308,43 @@ export default {
|
|||
steamApiKeyDescription: "Za praćenje Steam poslužitelja za igru, potrebno je imati Steam Web-API ključ. Možete registrirati vlastiti ključ ovdje: ",
|
||||
"Current User": "Trenutni korisnik",
|
||||
recent: "Nedavno",
|
||||
Done: "Gotovo",
|
||||
Info: "Informacije",
|
||||
Security: "Sigurnost",
|
||||
"Shrink Database": "Smanji bazu podataka",
|
||||
"Pick a RR-Type...": "Odaberite vrstu DNS zapisa od navedenih...",
|
||||
"Pick Accepted Status Codes...": "Odaberite HTTP statusne kodove koji će biti prihvaćeni...",
|
||||
"Steam API Key": "Steam API ključ",
|
||||
Default: "Zadano",
|
||||
"HTTP Options": "HTTP Postavke",
|
||||
"Create Incident": "Novi izvještaj o incidentu",
|
||||
Title: "Naslov",
|
||||
Content: "Sadržaj",
|
||||
Style: "Stil",
|
||||
info: "informacija",
|
||||
warning: "upozorenje",
|
||||
danger: "opasnost",
|
||||
primary: "primarno",
|
||||
light: "svijetlo",
|
||||
dark: "tamno",
|
||||
Post: "Objavi",
|
||||
Created: "Stvoreno",
|
||||
"Last Updated": "Uređeno",
|
||||
"Please input title and content": "Naslov i sadržaj ne mogu biti prazni",
|
||||
Unpin: "Ukloni",
|
||||
"Switch to Light Theme": "Prebaci na svijetli način",
|
||||
"Switch to Dark Theme": "Prebaci na tamni način",
|
||||
"Show Tags": "Pokaži oznake",
|
||||
"Hide Tags": "Sakrij oznake",
|
||||
Description: "Opis",
|
||||
"No monitors available.": "Nema dostupnih monitora.",
|
||||
"Add one": "Add one",
|
||||
"No Monitors": "Bez monitora",
|
||||
"Add one": "Stvori jednog",
|
||||
"Untitled Group": "Bezimena grupa",
|
||||
Services: "Usluge",
|
||||
Discard: "Odbaci",
|
||||
Cancel: "Otkaži",
|
||||
"Powered by": "Pokreće",
|
||||
Saved: "Spremljeno",
|
||||
};
|
||||
|
|
|
@ -2,26 +2,26 @@ export default {
|
|||
languageName: "Magyar",
|
||||
checkEverySecond: "Ellenőrzés {0} másodpercenként",
|
||||
retryCheckEverySecond: "Újrapróbál {0} másodpercenként.",
|
||||
retriesDescription: "Maximális próbálkozás mielőtt a szolgáltatás leállt jelőlést kap és értesítés kerül kiküldésre",
|
||||
ignoreTLSError: "TLS/SSL hibák figyelnen kívül hagyása HTTPS weboldalaknál",
|
||||
retriesDescription: "Maximális próbálkozás mielőtt a szolgáltatás 'Leállt' jelölést kap és értesítés kerül kiküldésre",
|
||||
ignoreTLSError: "TLS/SSL hibák figyelmen kívül hagyása HTTPS weboldalaknál",
|
||||
upsideDownModeDescription: "Az állapot megfordítása. Ha a szolgáltatás elérhető, akkor lesz leállt állapotú.",
|
||||
maxRedirectDescription: "Az átirányítások maximális száma. állítsa 0-ra az átirányítás tiltásához.",
|
||||
acceptedStatusCodesDescription: "Válassza ki az állapot kódokat amelyek sikeres válasznak fognak számítani.",
|
||||
passwordNotMatchMsg: "A megismételt jelszó nem egyezik.",
|
||||
notificationDescription: "Kérem, rendeljen egy értesítést a figyeléshez, hogy működjön.",
|
||||
keywordDescription: "Kulcsszó keresése a html-ben vagy a JSON válaszban. (kis-nagybetű érzékeny)",
|
||||
keywordDescription: "Kulcsszó keresése a HTML-ben vagy a JSON válaszban. (kis-nagybetű érzékeny)",
|
||||
pauseDashboardHome: "Szünetel",
|
||||
deleteMonitorMsg: "Biztos, hogy törölni akarja ezt a figyelőt?",
|
||||
deleteNotificationMsg: "Biztos, hogy törölni akarja ezt az értesítést az összes figyelőnél?",
|
||||
resoverserverDescription: "A Cloudflare az alapértelmezett szerver, bármikor meg tudja változtatni a resolver server-t.",
|
||||
rrtypeDescription: "Válassza ki az RR-Típust a figyelőhöz",
|
||||
rrtypeDescription: "Válassza ki az RR-típust a figyelőhöz",
|
||||
pauseMonitorMsg: "Biztos, hogy szüneteltetni akarja?",
|
||||
enableDefaultNotificationDescription: "Minden új figyelőhöz ez az értesítés engedélyezett lesz alapértelmezetten. Kikapcsolhatja az értesítést külön minden figyelőnél.",
|
||||
clearEventsMsg: "Biztos, hogy törölni akar miden eseményt ennél a figyelnél?",
|
||||
clearHeartbeatsMsg: "Biztos, hogy törölni akar minden heartbeat-et ennél a figyelőnél?",
|
||||
confirmClearStatisticsMsg: "Biztos, hogy törölni akat MINDEN statisztikát?",
|
||||
clearHeartbeatsMsg: "Biztos, hogy törölni akar minden életjelet ennél a figyelőnél?",
|
||||
confirmClearStatisticsMsg: "Biztos, hogy törölni akar MINDEN statisztikát?",
|
||||
importHandleDescription: "Válassza a 'Meglévő kihagyását', ha ki szeretné hagyni az azonos nevő figyelőket vagy értesítésket. A 'Felülírás' törölni fog minden meglévő figyelőt és értesítést.",
|
||||
confirmImportMsg: "Biztos, hogy importálja a mentést? Győzödjön meg róla, hogy jól választotta ki az importálás opciót.",
|
||||
confirmImportMsg: "Biztos, hogy importálja a mentést? Győződjön meg róla, hogy jól választotta ki az importálás opciót.",
|
||||
twoFAVerifyLabel: "Kérem, adja meg a token-t, hogy a 2FA működését ellenőrizzük",
|
||||
tokenValidSettingsMsg: "A token érvényes! El tudja menteni a 2FA beállításait.",
|
||||
confirmEnableTwoFAMsg: "Biztosan engedélyezi a 2FA-t?",
|
||||
|
@ -68,9 +68,9 @@ export default {
|
|||
URL: "URL",
|
||||
Hostname: "Hostnév",
|
||||
Port: "Port",
|
||||
"Heartbeat Interval": "Heartbeat időköz",
|
||||
"Heartbeat Interval": "Életjel időköz",
|
||||
Retries: "Újrapróbálkozás",
|
||||
"Heartbeat Retry Interval": "Heartbeat újrapróbálkozások időköze",
|
||||
"Heartbeat Retry Interval": "Életjel újrapróbálkozások időköze",
|
||||
Advanced: "Haladó",
|
||||
"Upside Down Mode": "Fordított mód",
|
||||
"Max. Redirects": "Max. átirányítás",
|
||||
|
@ -82,8 +82,8 @@ export default {
|
|||
Light: "Világos",
|
||||
Dark: "Sötét",
|
||||
Auto: "Auto",
|
||||
"Theme - Heartbeat Bar": "Téma - Heartbeat Bar",
|
||||
Normal: "Normal",
|
||||
"Theme - Heartbeat Bar": "Téma - Életjel sáv",
|
||||
Normal: "Normál",
|
||||
Bottom: "Nyomógomb",
|
||||
None: "Nincs",
|
||||
Timezone: "Időzóna",
|
||||
|
@ -97,9 +97,9 @@ export default {
|
|||
"Update Password": "Jelszó módosítása",
|
||||
"Disable Auth": "Hitelesítés tiltása",
|
||||
"Enable Auth": "Hitelesítés engedélyezése",
|
||||
Logout: "Kijelenetkezés",
|
||||
Logout: "Kijelentkezés",
|
||||
Leave: "Elhagy",
|
||||
"I understand, please disable": "Megértettem, kérem tilsa le",
|
||||
"I understand, please disable": "Megértettem, kérem tiltsa le",
|
||||
Confirm: "Megerősítés",
|
||||
Yes: "Igen",
|
||||
No: "Nem",
|
||||
|
@ -113,7 +113,7 @@ export default {
|
|||
Email: "Email",
|
||||
Test: "Teszt",
|
||||
"Certificate Info": "Tanúsítvány információk",
|
||||
"Resolver Server": "Resolver szerver",
|
||||
"Resolver Server": "DNS szerver",
|
||||
"Resource Record Type": "Resource Record típusa",
|
||||
"Last Result": "Utolsó eredmény",
|
||||
"Create your admin account": "Hozza létre az adminisztrátor felhasználót",
|
||||
|
@ -129,8 +129,8 @@ export default {
|
|||
Create: "Létrehozás",
|
||||
"Clear Data": "Adatok törlése",
|
||||
Events: "Események",
|
||||
Heartbeats: "Heartbeats",
|
||||
"Auto Get": "Auto Get",
|
||||
Heartbeats: "Életjelek",
|
||||
"Auto Get": "Auto lekérd.",
|
||||
backupDescription: "Ki tudja menteni az összes figyelőt és értesítést egy JSON fájlba.",
|
||||
backupDescription2: "Ui.: Történeti és esemény adatokat nem tartalmaz.",
|
||||
backupDescription3: "Érzékeny adatok, pl. szolgáltatás kulcsok is vannak az export fájlban. Figyelmesen őrizze!",
|
||||
|
@ -144,17 +144,17 @@ export default {
|
|||
"Verify Token": "Token ellenőrzése",
|
||||
"Setup 2FA": "2FA beállítása",
|
||||
"Enable 2FA": "2FA engedélyezése",
|
||||
"Disable 2FA": "2FA toltása",
|
||||
"Disable 2FA": "2FA tiltása",
|
||||
"2FA Settings": "2FA beállítások",
|
||||
"Two Factor Authentication": "Two Factor Authentication",
|
||||
"Two Factor Authentication": "Kétfaktoros hitelesítés",
|
||||
Active: "Aktív",
|
||||
Inactive: "Inaktív",
|
||||
Token: "Token",
|
||||
"Show URI": "URI megmutatása",
|
||||
Tags: "Cimkék",
|
||||
Tags: "Címkék",
|
||||
"Add New below or Select...": "Adjon hozzá lentre vagy válasszon...",
|
||||
"Tag with this name already exist.": "Ilyen nevű cimke már létezik.",
|
||||
"Tag with this value already exist.": "Ilyen értékű cimke már létezik.",
|
||||
"Tag with this name already exist.": "Ilyen nevű címke már létezik.",
|
||||
"Tag with this value already exist.": "Ilyen értékű címke már létezik.",
|
||||
color: "szín",
|
||||
"value (optional)": "érték (opcionális)",
|
||||
Gray: "Szürke",
|
||||
|
@ -169,15 +169,15 @@ export default {
|
|||
"Avg. Ping": "Átl. ping",
|
||||
"Avg. Response": "Átl. válasz",
|
||||
"Entry Page": "Nyitólap",
|
||||
statusPageNothing: "Semmi nincs itt, kérem, adjon hozzá egy figyelőt.",
|
||||
statusPageNothing: "Semmi nincs itt. Adjon hozzá egy vagy több figyelőt.",
|
||||
"No Services": "Nincs szolgáltatás",
|
||||
"All Systems Operational": "Minden rendszer működik",
|
||||
"Partially Degraded Service": "Részlegesen leállt szolgáltatás",
|
||||
"Degraded Service": "Leállt szolgáltatás",
|
||||
"Add Group": "Csoport hozzáadása",
|
||||
"Add a monitor": "Figyelő hozzáadása",
|
||||
"Edit Status Page": "Sátusz oldal szerkesztése",
|
||||
"Go to Dashboard": "Menj az irányítópulthoz",
|
||||
"Edit Status Page": "Státusz oldal szerkesztése",
|
||||
"Go to Dashboard": "Irányítópulthoz",
|
||||
telegram: "Telegram",
|
||||
webhook: "Webhook",
|
||||
smtp: "Email (SMTP)",
|
||||
|
@ -192,9 +192,162 @@ export default {
|
|||
octopush: "Octopush",
|
||||
promosms: "PromoSMS",
|
||||
lunasea: "LunaSea",
|
||||
apprise: "Apprise (Support 50+ Notification services)",
|
||||
apprise: "Apprise (50+ értesítési szolgáltatás)",
|
||||
pushbullet: "Pushbullet",
|
||||
line: "Line Messenger",
|
||||
mattermost: "Mattermost",
|
||||
"Status Page": "Status Page",
|
||||
"Status Page": "Státusz oldal",
|
||||
"Primary Base URL": "Elsődleges URL",
|
||||
"Push URL": "Meghívandó URL",
|
||||
needPushEvery: "Ezt az URL-t kell meghívni minden {0} másodpercben.",
|
||||
pushOptionalParams: "Opcionális paraméterek: {0}",
|
||||
defaultNotificationName: "{notification} értesítésem ({number})",
|
||||
here: "itt",
|
||||
Required: "Kötelező",
|
||||
"Bot Token": "Hibás token",
|
||||
wayToGetTelegramToken: "Innen kaphat token-t: {0}.",
|
||||
"Chat ID": "Csevegés ID",
|
||||
supportTelegramChatID: "Támogatja a közvetlen csevegést, csoportnak küldést és csatona ID-t is",
|
||||
wayToGetTelegramChatID: "A csevegés ID-t kinyerheti azzal, hogy küld egy üzenetet a bot-nak és erre az URL-re ellátogat, ahol láthatja a chat_id:-t",
|
||||
"YOUR BOT TOKEN HERE": "AZ ÖN BOT TOKENJE ITT",
|
||||
chatIDNotFound: "Csevegés ID nem található, küldjön egy első üzenetet a bot-nak",
|
||||
"Post URL": "Cél URL (Post)",
|
||||
"Content Type": "Tartalom típus (Content Type)",
|
||||
webhookJsonDesc: "{0} ideális a moderh HTTP szerverekhez, mint az Express.js",
|
||||
webhookFormDataDesc: "{multipart} ideális a PHP-hez. A JSON értelmezhető ezzel: {decodeFunction}",
|
||||
secureOptionNone: "Nincs / STARTTLS (25, 587)",
|
||||
secureOptionTLS: "TLS (465)",
|
||||
"Ignore TLS Error": "TLS hiba figyelmen kívül hagyása",
|
||||
"From Email": "Feladó email",
|
||||
emailCustomSubject: "Egyedi tárgy",
|
||||
"To Email": "Cél email",
|
||||
smtpCC: "Másolat",
|
||||
smtpBCC: "Titkos másolat",
|
||||
"Discord Webhook URL": "Discord cím (webhook URL)",
|
||||
wayToGetDiscordURL: "Kaphat egy ilyet, ha ellátogat a Server Settings -> Integrations -> Create Webhook oldalra",
|
||||
"Bot Display Name": "Bot megjelenő neve",
|
||||
"Prefix Custom Message": "Egyedi előtét üzenet",
|
||||
"Hello @everyone is...": "Hello {'@'}mindenki...",
|
||||
"Webhook URL": "Cím (webhook URL)",
|
||||
wayToGetTeamsURL: "Itt megnézheti, hogy kell ilyen URL-t készíteni: {0}.",
|
||||
Number: "Szám",
|
||||
Recipients: "Címzettek",
|
||||
needSignalAPI: "Egy Signal kliensre van szüksége, amihez REST API tartozik.",
|
||||
wayToCheckSignalURL: "Itt megnézheti, hogy hozhat létre egyet:",
|
||||
signalImportant: "FONTOS! Nem keverheti a csoportokat és számokat a címzetteknél.",
|
||||
"Application Token": "Alkalmazás token",
|
||||
"Server URL": "Szerver URL",
|
||||
Priority: "Prioritás",
|
||||
"Icon Emoji": "Emoji ikonok",
|
||||
"Channel Name": "Csatorna neve",
|
||||
"Uptime Kuma URL": "Uptime Kuma cím",
|
||||
aboutWebhooks: "Webhook-okról több info: {0}",
|
||||
aboutChannelName: "Adja meg a {0} csatorna nevét ha szeretné elkerülni a webhook-ot. Pl: #masik-csatorna",
|
||||
aboutKumaURL: "Ha üresen hagyja a Uptime Kuma cím mezőt, akkor a projekt GitHub oldala lesz az alapértelmezett.",
|
||||
emojiCheatSheet: "Emoji csalás: {0}",
|
||||
clicksendsms: "ClickSend SMS",
|
||||
"User Key": "Felhasználói kulcs",
|
||||
Device: "Eszköz",
|
||||
"Message Title": "Üzenet címe",
|
||||
"Notification Sound": "Értesítési hang",
|
||||
"More info on:": "További információ: {0}",
|
||||
pushoverDesc1: "A vészhelyzeti prioritásnak (2) 30 másodperc az újrapróbálkozási alapértéke és egy óra után lejár.",
|
||||
pushoverDesc2: "Ha különböző eszközökre szeretne értesítést küldeni, töltse ki az Eszköz mezőt.",
|
||||
"SMS Type": "SMS típusa",
|
||||
octopushTypePremium: "Premium (Fast - recommended for alerting)",
|
||||
octopushTypeLowCost: "Low Cost (Slow - sometimes blocked by operator)",
|
||||
checkPrice: "Nézze meg az {0} féle árat:",
|
||||
apiCredentials: "API kulcsok",
|
||||
octopushLegacyHint: "Az Octopush régi (2011-2020) verzióját használja vagy az újat?",
|
||||
"Check octopush prices": "Nézze meg az Octopush {0} féle árát.",
|
||||
octopushPhoneNumber: "Telefonszám (nemz. formátum, pl : +36705554433) ",
|
||||
octopushSMSSender: "SMS küldő neve : 3-11 betű/szám (a-zA-Z0-9) vagy szóköz",
|
||||
"LunaSea Device ID": "LunaSea eszköz ID",
|
||||
"Apprise URL": "Apprise cím (URL)",
|
||||
"Example:": "Például: {0}",
|
||||
"Read more:": "Itt olvashat róla: {0}",
|
||||
"Status:": "Állapot: {0}",
|
||||
"Read more": "Tovább olvasom",
|
||||
appriseInstalled: "Apprise telepítve.",
|
||||
appriseNotInstalled: "Apprise nincs telepítve. {0}",
|
||||
"Access Token": "Elérési token",
|
||||
"Channel access token": "Csatorna elérési token",
|
||||
"Line Developers Console": "Line Developers konzol",
|
||||
lineDevConsoleTo: "Line Developers konzol - {0}",
|
||||
"Basic Settings": "Alap beállítások",
|
||||
"User ID": "Felhasználó ID",
|
||||
"Messaging API": "Üzenet API",
|
||||
wayToGetLineChannelToken: "{0} első eléréséhez készítsen egy Provider-t és csatornát (Messaging API), utána kaphatja meg a csatorna elérési token-t és felhasználó ID-t az alábbi menüpontban.",
|
||||
"Icon URL": "Ikon cím (URL)",
|
||||
aboutIconURL: "Megadhat egy webcímet az Ikon cím mezőben, ezzel felülírva az alapértelmezet képet. Nem kerül felhasználásra, ha az Emoji-k be vannak állítva.",
|
||||
aboutMattermostChannelName: "Felülírhatja az alapértelmezett csatornát, ahova a webhook az adatokat küldi. Ehhez töltse ki a \"Csatorna neve\" mezőt (pl: #egyeb-csatorna). A Mattermost webhook beállításaiban további engedélyek szükségesek",
|
||||
matrix: "Matrix",
|
||||
promosmsTypeEco: "SMS ECO - olcsó, de lassú, gyakran túlterhelt. Csak lengyel címzettekhez.",
|
||||
promosmsTypeFlash: "SMS FLASH - Az üzenet automatikusan megjelenik a fogadó eszközön. Csak lengyel címzettekhez.",
|
||||
promosmsTypeFull: "SMS FULL - Prémium szintje az SMS-nek. Megadható a feladó neve, de előtte jóváhagyás szükséges. Ideális értesítésekhez.",
|
||||
promosmsTypeSpeed: "SMS SPEED - A legmagasabb prioritás a rendszerben. Nagyon gyors és pontos, de költséges (kb. duplája a hagyományos SMS-nek).",
|
||||
promosmsPhoneNumber: "Telefonszám (lengyel címzett esetén az országkód elhagyható)",
|
||||
promosmsSMSSender: "SMS feladónév: Előre beállított név vagy az alábbiak egyike: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
|
||||
"Feishu WebHookUrl": "Feishu webhook cím (URL)",
|
||||
matrixHomeserverURL: "Homeserver cím (URL http(s):// előtaggal és opcionálisan port-tal)",
|
||||
"Internal Room Id": "Belső Szoba ID",
|
||||
matrixDesc1: "A belső szoba ID-t a szpbák speciális beállítások között találja meg a Matrix kliens programban. Így kell kinéznie: !QMdRCpUIfLwsfjxye6:home.server.",
|
||||
matrixDesc2: "Erősen ajánlott készíteni egy új felhasználót és nem a teljes joggal rendelkező felhasználót használni. Az új felhasználó létrehozása után csak azokba a szobákba kell megjhívni a felhasználót, ahol értesítéseket szeretne kapni. Ezzel a művelettel lehet elérési token-t kérni: {0}",
|
||||
Method: "Metódus",
|
||||
Body: "Törzs",
|
||||
Headers: "Fejlécek",
|
||||
PushUrl: "Push cím (URL)",
|
||||
HeadersInvalidFormat: "A kérés fejléc nem egy valós JSON: ",
|
||||
BodyInvalidFormat: "A kérés törzse nem egy valós JSON: ",
|
||||
"Monitor History": "Vizsgálatok előzményei",
|
||||
clearDataOlderThan: "Előzmények megtartása {0} napig.",
|
||||
PasswordsDoNotMatch: "Jelszó nem egyezik.",
|
||||
records: "sorok",
|
||||
"One record": "Egy sor",
|
||||
steamApiKeyDescription: "Steam Game Server ellenőrzéséhez szükséges egy Steam Web-API kulcs. Itt létrehozhat egy API kulcsot: ",
|
||||
"Current User": "Felhasználó",
|
||||
recent: "Legújabb",
|
||||
Done: "Kész",
|
||||
Info: "Infó",
|
||||
Security: "Biztonság",
|
||||
"Steam API Key": "Steam API kulcs",
|
||||
"Shrink Database": "Adatbázis tömörítése",
|
||||
"Pick a RR-Type...": "Válasszon egy RR-típust...",
|
||||
"Pick Accepted Status Codes...": "Válasszon olyan kódot, ami elfogadottnak számít...",
|
||||
Default: "Alapért.",
|
||||
"HTTP Options": "HTTP beállítások",
|
||||
"Create Incident": "Incidens létrehozása",
|
||||
Title: "Cím",
|
||||
Content: "Tartalom",
|
||||
Style: "Stílus",
|
||||
info: "info",
|
||||
warning: "warning",
|
||||
danger: "danger",
|
||||
primary: "primary",
|
||||
light: "light",
|
||||
dark: "dark",
|
||||
Post: "Bejegyzés",
|
||||
"Please input title and content": "Adjon meg címet és tartalmat",
|
||||
Created: "Létrehozva",
|
||||
"Last Updated": "Utolsó mód.",
|
||||
Unpin: "Leválaszt",
|
||||
"Switch to Light Theme": "Világos témára váltás",
|
||||
"Switch to Dark Theme": "Sötét témára váltás",
|
||||
"Show Tags": "Címkék mutatása",
|
||||
"Hide Tags": "Címkék elrejtése",
|
||||
Description: "Leírás",
|
||||
"No monitors available.": "Nincs még figyelő beállítva.",
|
||||
"Add one": "Adjon hozzá egyet",
|
||||
"No Monitors": "Nincs figyelő",
|
||||
"Untitled Group": "Névtelen csoport",
|
||||
Services: "Szolgáltatások",
|
||||
Discard: "Elvet",
|
||||
Cancel: "Mégsem",
|
||||
"Powered by": "A megoldást szállítja az",
|
||||
shrinkDatabaseDescription: "VACUUM futtatása az SQLite-on. Ha az adatbázisod 1.10.0-nál újabb, akkor az AUTO_VACUUM engedélyezve van, nincs szükség a műveletre.",
|
||||
serwersms: "SerwerSMS.pl",
|
||||
serwersmsAPIUser: "API felhasználónév (webapi_ előtaggal együtt)",
|
||||
serwersmsAPIPassword: "API jelszó",
|
||||
serwersmsPhoneNumber: "Telefonszám",
|
||||
serwersmsSenderName: "SMS feladó neve (regisztrált név az oldalon)",
|
||||
};
|
||||
|
|
|
@ -166,7 +166,7 @@ export default {
|
|||
Orange: "Arancione",
|
||||
Green: "Verde",
|
||||
Blue: "Blu",
|
||||
Indigo: "Indigo",
|
||||
Indigo: "Indaco",
|
||||
Purple: "Viola",
|
||||
Pink: "Rosa",
|
||||
"Search...": "Cerca...",
|
||||
|
@ -295,9 +295,9 @@ export default {
|
|||
matrixDesc2: "È altamente raccomandata la creazione di un nuovo utente e di non utilizare il proprio token di accesso Matrix poiché darà pieno controllo al proprio account e a tutte le stanze in cui si ha accesso. Piuttosto, si crei un nuovo utente per invitarlo nella stanza dove si vuole ricevere le notifiche. Si può accedere al token eseguendo {0}",
|
||||
Method: "Metodo",
|
||||
Body: "Corpo",
|
||||
Headers: "Headers",
|
||||
Headers: "Intestazioni",
|
||||
PushUrl: "URL di Push",
|
||||
HeadersInvalidFormat: "L'header di richiesta non è un JSON valido: ",
|
||||
HeadersInvalidFormat: "L'intestazione di richiesta non è un JSON valido: ",
|
||||
BodyInvalidFormat: "Il corpo di richiesta non è un JSON valido: ",
|
||||
"Monitor History": "Storico monitoraggio",
|
||||
clearDataOlderThan: "Mantieni lo storico per {0} giorni.",
|
||||
|
@ -307,5 +307,48 @@ export default {
|
|||
steamApiKeyDescription: "Per monitorare un server di gioco Steam si necessita della chiave Web-API di Steam. È possibile registrare la propria chiave API qui: ",
|
||||
"Current User": "Utente corrente",
|
||||
recent: "Recenti",
|
||||
Done: "Fatto",
|
||||
Info: "Info",
|
||||
Security: "Sicurezza",
|
||||
"Steam API Key": "Chiave API di Steam",
|
||||
"Shrink Database": "Comprimi Database",
|
||||
"Pick a RR-Type...": "Scegli un tipo di RR...",
|
||||
"Pick Accepted Status Codes...": "Scegli i codici di Stato Accettati...",
|
||||
Default: "Predefinito",
|
||||
"HTTP Options": "Opzioni HTTP",
|
||||
"Create Incident": "Crea Incident",
|
||||
Title: "Titolo",
|
||||
Content: "Contenuto",
|
||||
Style: "Stile",
|
||||
info: "informativo",
|
||||
warning: "attenzione",
|
||||
danger: "critico",
|
||||
primary: "primario",
|
||||
light: "chiaro",
|
||||
dark: "scuro",
|
||||
Post: "Posta",
|
||||
"Please input title and content": "Inserire il titolo e il contenuto",
|
||||
Created: "Creato",
|
||||
"Last Updated": "Ultima modifica",
|
||||
Unpin: "Stacca",
|
||||
"Switch to Light Theme": "Utilizza tema chiaro",
|
||||
"Switch to Dark Theme": "Utilizza tema scuro",
|
||||
"Show Tags": "Mostra etichette",
|
||||
"Hide Tags": "Nascondi etichette",
|
||||
Description: "Descrizione",
|
||||
"No monitors available.": "Nessun monitoraggio disponibile.",
|
||||
"Add one": "Aggiungi",
|
||||
"No Monitors": "Nessun monitoraggio",
|
||||
"Add one": "Aggiungi",
|
||||
"Untitled Group": "Gruppo senza titolo",
|
||||
Services: "Servizi",
|
||||
Discard: "Scarta",
|
||||
Cancel: "Annulla",
|
||||
"Powered by": "Servito da",
|
||||
shrinkDatabaseDescription: "Lancia il comando VACUUM sul database SQLite. Se il database è stato creato dopo la versione 1.10.0, AUTO_VACUUM è già abilitato e questa azione non è necessaria.",
|
||||
serwersms: "SerwerSMS.pl",
|
||||
serwersmsAPIUser: "Nome utente API (incl. prefisso webapi_)",
|
||||
serwersmsAPIPassword: "Password API",
|
||||
serwersmsPhoneNumber: "Numero di Telefono",
|
||||
serwersmsSenderName: "Nome del mittente SMS (registrato via portale cliente)",
|
||||
};
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
:close-on-select="true"
|
||||
:clear-on-select="false"
|
||||
:preserve-search="false"
|
||||
placeholder="Pick a RR-Type..."
|
||||
:placeholder="$t('Pick a RR-Type...')"
|
||||
:preselect-first="false"
|
||||
:max-height="500"
|
||||
:taggable="false"
|
||||
|
@ -177,7 +177,7 @@
|
|||
:close-on-select="false"
|
||||
:clear-on-select="false"
|
||||
:preserve-search="true"
|
||||
placeholder="Pick Accepted Status Codes..."
|
||||
:placeholder="$t('Pick Accepted Status Codes...')"
|
||||
:preselect-first="false"
|
||||
:max-height="600"
|
||||
:taggable="true"
|
||||
|
@ -215,7 +215,7 @@
|
|||
<a href="#" @click="$refs.notificationDialog.show(notification.id)">{{ $t("Edit") }}</a>
|
||||
</label>
|
||||
|
||||
<span v-if="notification.isDefault == true" class="badge bg-primary ms-2">Default</span>
|
||||
<span v-if="notification.isDefault == true" class="badge bg-primary ms-2">{{ $t("Default") }}</span>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-primary me-2" type="button" @click="$refs.notificationDialog.show()">
|
||||
|
@ -353,17 +353,17 @@ export default {
|
|||
},
|
||||
|
||||
bodyPlaceholder() {
|
||||
return `Example:
|
||||
return this.$t("Example:", [`
|
||||
{
|
||||
"key": "value"
|
||||
}`;
|
||||
}`]);
|
||||
},
|
||||
|
||||
headersPlaceholder() {
|
||||
return `Example:
|
||||
return this.$t("Example:", [`
|
||||
{
|
||||
"HeaderName": "HeaderValue"
|
||||
}`;
|
||||
}`]);
|
||||
}
|
||||
|
||||
},
|
||||
|
|
|
@ -101,9 +101,9 @@
|
|||
|
||||
<!-- Incident Date -->
|
||||
<div class="date mt-3">
|
||||
Created: {{ $root.datetime(incident.createdDate) }} ({{ dateFromNow(incident.createdDate) }})<br />
|
||||
{{ $t("Created") }}: {{ $root.datetime(incident.createdDate) }} ({{ dateFromNow(incident.createdDate) }})<br />
|
||||
<span v-if="incident.lastUpdatedDate">
|
||||
Last Updated: {{ $root.datetime(incident.lastUpdatedDate) }} ({{ dateFromNow(incident.lastUpdatedDate) }})
|
||||
{{ $t("Last Updated") }}: {{ $root.datetime(incident.lastUpdatedDate) }} ({{ dateFromNow(incident.lastUpdatedDate) }})
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
@ -125,15 +125,15 @@
|
|||
|
||||
<div v-if="editIncidentMode" class="dropdown d-inline-block me-2">
|
||||
<button id="dropdownMenuButton1" class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
Style: {{ incident.style }}
|
||||
{{ $t("Style") }}: {{ $t(incident.style) }}
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton1">
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'info'">info</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'warning'">warning</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'danger'">danger</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'primary'">primary</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'light'">light</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'dark'">dark</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'info'">{{ $t("info") }}</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'warning'">{{ $t("warning") }}</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'danger'">{{ $t("danger") }}</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'primary'">{{ $t("primary") }}</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'light'">{{ $t("light") }}</a></li>
|
||||
<li><a class="dropdown-item" href="#" @click="incident.style = 'dark'">{{ $t("dark") }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
@ -468,10 +468,10 @@ export default {
|
|||
},
|
||||
|
||||
addGroup() {
|
||||
let groupName = "Untitled Group";
|
||||
let groupName = this.$t("Untitled Group");
|
||||
|
||||
if (this.$root.publicGroupList.length === 0) {
|
||||
groupName = "Services";
|
||||
groupName = this.$t("Services");
|
||||
}
|
||||
|
||||
this.$root.publicGroupList.unshift({
|
||||
|
@ -536,7 +536,7 @@ export default {
|
|||
|
||||
postIncident() {
|
||||
if (this.incident.title == "" || this.incident.content == "") {
|
||||
toast.error("Please input title and content.");
|
||||
toast.error(this.$t("Please input title and content"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue