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.
@ -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?
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.
@ -66,13 +66,13 @@ I do not have such knowledge to test it.
#### ⚠ 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 monitoring logic
- Drop a table or drop a column for any reason
- Touch the entry point of Docker or Node.js
- Modifiy auth
- Modify auth
#### *️⃣ 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
- 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)
## 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)
<divclass="my-1 update-link"><ahref="https://github.com/louislam/uptime-kuma/releases"target="_blank"rel="noopener">{{$t("Check Update On GitHub")}}</a></div>
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.",
PasswordsDoNotMatch:"Le password non corrispondono.",
records:"records",
"One record":"One record",
steamApiKeyDescription:"Per monitorare un server di gioco Steam si necessita della chiave Steam Web-API. È possibile registrare la propria chiave API qui: ",
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",
"Repeat Password":"Repeat Password",
respTime:"Resp. Time (ms)",
"Create your admin account":"Adminアカウントの作成",
"Repeat Password":"パスワード確認",
respTime:"応答時間 (ms)",
notAvailableShort:"N/A",
Create:"Create",
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 want to delete ALL statistics?",
"Clear Data":"Clear Data",
Events:"Events",
Heartbeats:"Heartbeats",
"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.",
"Default enabled":"Default enabled",
"Also apply to existing monitors":"Also apply to existing monitors",
Export:"Export",
Import:"Import",
backupDescription:"You can backup all monitors and all notifications into a JSON file.",
backupDescription2:"PS: History and event data is not included.",
backupDescription3:"Sensitive data such as notification tokens is included in the export file, please keep it carefully.",
alertNoFile:"Please select a file to import.",
alertWrongFileType:"Please select a JSON file.",
twoFAVerifyLabel:"Please type in your token to verify that 2FA is working",
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?",
"Apply on all existing monitors":"Apply on all existing monitors",
"Apply on all existing monitors":"既存のすべてのモニターに適用する",
"Verify Token":"認証する",
"Setup 2FA":"2段階認証の設定",
"Enable 2FA":"2段階認証を有効にする",
"Disable 2FA":"2段階認証を無効にする",
"2FA Settings":"2段階認証の設定",
"Two Factor Authentication":"2段階認証",
Active:"Active",
Inactive:"Inactive",
Token:"Token",
"Show URI":"Show URI",
"Clear all statistics":"Clear all Statistics",
"Clear all statistics":"すべての記録を削除",
retryCheckEverySecond:"Retry every {0} seconds.",
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 to import the backup? Please make sure you've selected the right import option.",
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)",
"Ignore TLS Error":"Bỏ qua lỗi TLS",
"From Email":"Từ Email",
emailCustomSubject:"Tuỳ chỉnh tiêu đề",
"To Email":"Tới Email",
smtpCC:"CC",
smtpBCC:"BCC",
@ -212,7 +217,7 @@ export default {
teams:"Microsoft Teams",
"Webhook URL":"Webhook URL",
wayToGetTeamsURL:"Bạn có thể học cách tạo webhook url {0}.",
signal:"Signal",
signal:"Tín hiệu",
Number:"Số",
Recipients:"Người nhận",
needSignalAPI:"Bạn cần một tín hiệu client với REST API.",
@ -235,8 +240,9 @@ export default {
pushy:"Pushy",
octopush:"Octopush",
promosms:"PromoSMS",
clicksendsms:"ClickSend SMS",
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",
line:"Line Messenger",
mattermost:"Mattermost",
@ -250,8 +256,11 @@ export default {
"SMS Type":"SMS Type",
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)",
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}.",
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)",
"LunaSea Device ID":"LunaSea ID thiết bị",
"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)",
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",
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: ",