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 structed and commented so well, lol. Sorry about that.
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 sub-directory called "server" for server part. Both frontend and backend share the same package.json.
@ -27,7 +27,7 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
## Can I create a pull request for Uptime Kuma?
## 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 perfomance, I will merge into the master branch once it is tested.
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.
If you are not sure whether I will accept your pull request, feel free to create an empty pull request draft first.
If you are not sure whether I will accept your pull request, feel free to create an empty pull request draft first.
@ -66,13 +66,13 @@ I do not have such knowledge to test it.
#### ⚠ Low Priority - Harsh Mode
#### ⚠ Low Priority - Harsh Mode
Some pull requests are required to modifiy 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 large parts of code of any very important features
- Touch monitoring logic
- Touch monitoring logic
- Drop a table or drop a column for any reason
- Drop a table or drop a column for any reason
- Touch the entry point of Docker or Node.js
- Touch the entry point of Docker or Node.js
- Modifiy auth
- Modify auth
#### *️⃣ Low Priority
#### *️⃣ Low Priority
@ -114,7 +114,7 @@ I personally do not like something need to learn so much and need to config so m
- Node.js >= 14
- Node.js >= 14
- Git
- Git
- IDE that supports ESLint and EditorConfig (I am using Intellji Idea)
- IDE that supports ESLint and EditorConfig (I am using IntelliJ IDEA)
- A SQLite tool (SQLite Expert Personal is suggested)
- A SQLite tool (SQLite Expert Personal is suggested)
## Install dependencies
## Install dependencies
@ -141,7 +141,7 @@ express.js is just used for serving the frontend built files (index.html, .js an
- model/ (Object model, auto mapping to the database table name)
- model/ (Object model, auto mapping to the database table name)
<divclass="my-1 update-link"><ahref="https://github.com/louislam/uptime-kuma/releases"target="_blank"rel="noopener">{{$t("Check Update On GitHub")}}</a></div>
steamApiKeyDescription:"For monitoring a Steam Game Server you need a Steam Web-API key. You can register your API key here: ",
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",
"Current User":"Current User",
recent:"Recent",
recent:"Recent",
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.",
lineDevConsoleTo:"Console sviluppatori Line - {0}",
"Basic Settings":"Impostazioni Base",
"User ID":"ID Utente",
"Messaging API":"API di Messaggistica",
wayToGetLineChannelToken:"Prima accedi a {0}, crea un provider e un canale (API di Messaggistica), dopodiché puoi avere il token di accesso e l'id utente dal menù sopra.",
"Icon URL":"URL Icona",
aboutIconURL:"È possibile impostare un collegameno a una immagine in \"URL Icona\" per modificare l'immagine di profilo. Non verrà utilizzata se è impostata l'Icona Emoji.",
aboutMattermostChannelName:"È possibile modificare il canale predefinito che dove il webhook manda messaggi immettendo il nome del canale nel campo \"Nome Canale\". Questo va abilitato nelle impostazioni webhook di Mattermost webhook. P.E.: #altro-canale",
"matrix":"Matrix",
promosmsTypeEco:"SMS ECO - economico, ma lento e spesso sovraccarico. Limitato solamente a destinatari Polacchi.",
promosmsTypeFlash:"SMS FLASH - Il messaggio sarà automaticamente mostrato sul dispositivo dei destinatari. Limitato solo a destinatari Polacchi.",
promosmsTypeFull:"SMS FULL - Premium, È possibile utilizzare il proprio come come mittente (è necessario prima registrare il nome). Affidabile per gli allarmi.",
promosmsTypeSpeed:"SMS SPEED - Maggior priorità. Rapido, affidabile, ma costoso (costa il doppio di SMS FULL).",
promosmsPhoneNumber:"Numero di Telefono (per destinatari Polacchi si può omettere il codice area)",
promosmsSMSSender:"Mittente SMS : Nome preregistrato oppure uno dei seguenti: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl":"URL WebHook di Feishu",
matrixHomeserverURL:"URL Server (con http(s):// e opzionalmente la porta)",
"Internal Room Id":"ID Stanza Interna",
matrixDesc1:"È possibile recuperare l'ID della stanza all'interno delle impostazioni avanzate della stanza nel client Matrix. Dovrebbe essere simile a !QMdRCpUIfLwsfjxye6:server.di.casa.",
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",
PushUrl:"URL di Push",
HeadersInvalidFormat:"L'header 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.",
PasswordsDoNotMatch:"Le password non corrispondono.",
records:"records",
"One record":"One record",
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",
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.",
"Create your admin account":"Create your admin account",
"Create your admin account":"Adminアカウントの作成",
"Repeat Password":"Repeat Password",
"Repeat Password":"パスワード確認",
respTime:"Resp. Time (ms)",
respTime:"応答時間 (ms)",
notAvailableShort:"N/A",
notAvailableShort:"N/A",
Create:"Create",
Create:"作成",
clearEventsMsg:"Are you sure want to delete all events for this monitor?",
clearEventsMsg:"この監視のすべての記録を削除してもよろしいですか?",
clearHeartbeatsMsg:"Are you sure want to delete all heartbeats for this monitor?",
clearHeartbeatsMsg:"この監視のすべての異常記録を削除してもよろしいですか?",
confirmClearStatisticsMsg:"Are you sure want to delete ALL statistics?",
confirmClearStatisticsMsg:"すべての統計を削除してもよろしいですか?",
"Clear Data":"Clear Data",
"Clear Data":"データを削除",
Events:"Events",
Events:"統計",
Heartbeats:"Heartbeats",
Heartbeats:"異常記録",
"Auto Get":"Auto Get",
"Auto Get":"自動取得",
enableDefaultNotificationDescription:"For every new monitor this notification will be enabled by default. You can still disable the notification separately for each monitor.",
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.",
wayToGetTelegramChatID:"Bạn có thể lấy chat id của mình bằng cách gửi tin nhắn tới bot và truy cập url này để xem chat_id:",
wayToGetTelegramChatID:"Bạn có thể lấy chat id của mình bằng cách gửi tin nhắn tới bot và truy cập url này để xem chat_id:",
@ -200,6 +204,7 @@ export default {
secureOptionTLS:"TLS (465)",
secureOptionTLS:"TLS (465)",
"Ignore TLS Error":"Bỏ qua lỗi TLS",
"Ignore TLS Error":"Bỏ qua lỗi TLS",
"From Email":"Từ Email",
"From Email":"Từ Email",
emailCustomSubject:"Tuỳ chỉnh tiêu đề",
"To Email":"Tới Email",
"To Email":"Tới Email",
smtpCC:"CC",
smtpCC:"CC",
smtpBCC:"BCC",
smtpBCC:"BCC",
@ -212,7 +217,7 @@ export default {
teams:"Microsoft Teams",
teams:"Microsoft Teams",
"Webhook URL":"Webhook URL",
"Webhook URL":"Webhook URL",
wayToGetTeamsURL:"Bạn có thể học cách tạo webhook url {0}.",
wayToGetTeamsURL:"Bạn có thể học cách tạo webhook url {0}.",
signal:"Signal",
signal:"Tín hiệu",
Number:"Số",
Number:"Số",
Recipients:"Người nhận",
Recipients:"Người nhận",
needSignalAPI:"Bạn cần một tín hiệu client với REST API.",
needSignalAPI:"Bạn cần một tín hiệu client với REST API.",
@ -235,8 +240,9 @@ export default {
pushy:"Pushy",
pushy:"Pushy",
octopush:"Octopush",
octopush:"Octopush",
promosms:"PromoSMS",
promosms:"PromoSMS",
clicksendsms:"ClickSend SMS",
lunasea:"LunaSea",
lunasea:"LunaSea",
apprise:"Thông báo (Hỗ trợ 50+ dịch vụ thông báo)",
apprise:"Apprise (Hỗ trợ 50+ dịch vụ thông báo)",
pushbullet:"Pushbullet",
pushbullet:"Pushbullet",
line:"Line Messenger",
line:"Line Messenger",
mattermost:"Mattermost",
mattermost:"Mattermost",
@ -250,8 +256,11 @@ export default {
"SMS Type":"SMS Type",
"SMS Type":"SMS Type",
octopushTypePremium:"Premium (Nhanh - Khuyến nghị nên dùng cho cảnh báo)",
octopushTypePremium:"Premium (Nhanh - Khuyến nghị nên dùng cho cảnh báo)",
octopushTypeLowCost:"Giá rẻ (Chậm, thỉnh thoảng bị chặn)",
octopushTypeLowCost:"Giá rẻ (Chậm, thỉnh thoảng bị chặn)",
checkPrice:"Kiểm tra giá {0}:",
apiCredentials:"API credentials",
octopushLegacyHint:"Bạn muốn sử dụng phiên bản cũ của Octopush (2011-2020) hay phiên bản mới?",
"Check octopush prices":"Kiểm tra giá octopush {0}.",
"Check octopush prices":"Kiểm tra giá octopush {0}.",
octopushPhoneNumber:"Số điện thoại (Định dạng intl, vd : +33612345678) ",
octopushPhoneNumber:"Số điện thoại (Định dạng intl, vd : +84123456789) ",
octopushSMSSender:"SMS người gửi : 3-11 ký tự chữ, số và dấu cách (a-zA-Z0-9)",
octopushSMSSender:"SMS người gửi : 3-11 ký tự chữ, số và dấu cách (a-zA-Z0-9)",
"LunaSea Device ID":"LunaSea ID thiết bị",
"LunaSea Device ID":"LunaSea ID thiết bị",
"Apprise URL":"Apprise URL",
"Apprise URL":"Apprise URL",
@ -280,4 +289,22 @@ export default {
promosmsPhoneNumber:"Số điện thoại (Bỏ qua mã vùng với người Ba Lan)",
promosmsPhoneNumber:"Số điện thoại (Bỏ qua mã vùng với người Ba Lan)",
promosmsSMSSender:"SMS Tên người gửi: Tên đã đăng ký trước hoặc tên mặc định: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
promosmsSMSSender:"SMS Tên người gửi: Tên đã đăng ký trước hoặc tên mặc định: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
"Feishu WebHookUrl":"Feishu WebHookUrl",
"Feishu WebHookUrl":"Feishu WebHookUrl",
matrixHomeserverURL:"Homeserver URL (với http(s):// và port tuỳ chỉnh)",
"Internal Room Id":"Room ID Nội bộ",
matrixDesc1:"Bạn có thể tìm thấy room ID nội bộ bằng cách tìm trong mục advanced của phần room settings trong Matrix client của bạn. Nó có dạng giống như !QMdRCpUIfLwsfjxye6:home.server.",
matrixDesc2:"Bạn nên tạo người dùng mới và đừng sử dụng mã token truy cập của Matrix user vì nó sẽ cho phép truy cập toàn quyền vào tài khoản của bạn và tất cả các phòng bạn đã tham gia. Thay vào đó, hãy tạo một người dùng mới và chỉ mời người đó vào phòng mà bạn muốn nhận thông báo. Bạn có thể lấy được mã token truy cập bằng cách chạy {0}",
Method:"Method",
Body:"Body",
Headers:"Headers",
PushUrl:"Push URL",
HeadersInvalidFormat:"Header request không hợp lệ JSON: ",
BodyInvalidFormat:"Tequest body không hợp lệ JSON: ",
"Monitor History":"Lịch sử Monitor",
clearDataOlderThan:"Giữ dữ liệu lịch sử monitor {0} ngày.",
PasswordsDoNotMatch:"Passwords không khớp.",
records:"records",
"One record":"One record",
steamApiKeyDescription:"Để monitor các Steam Game Server bạn cần một Steam Web-API key. Bạn có thể đăng ký API key tại đây: ",