👉 Delete this line if you have read and agree our pull request rules and guidelines: https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma
@ -27,17 +27,30 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
## Can I create a pull request for Uptime Kuma?
(Updated 2022-04-24) Since I don't want to waste your time, be sure to create empty draft pull request, so we can discuss first.
Yes, you can. However, since I don't want to waste your time, be sure to **create empty draft pull request, so we can discuss first** if it is a large pull request or you don't know it will be merged or not.
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.
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.
✅ Accept:
- Bug/Security fix
- Translations
- Adding notification providers
⚠️ Discuss First
⚠️ Discussion First
- Large pull requests
- New features
❌ Won't Merge
- Do not pass auto test
- Any breaking changes
- Duplicated pull request
- Buggy
- Existing logic is completely modified or deleted for no reason
- A function that is completely out of scope
### Recommended Pull Request Guideline
Before deep into coding, discussion first is preferred. Creating an empty pull request for discussion would be recommended.
@ -53,22 +66,15 @@ Before deep into coding, discussion first is preferred. Creating an empty pull r
1. Click "Change to draft"
1. Discussion
#### ❌ Won't Merge
- Any breaking changes
- Duplicated pull request
- Buggy
- Existing logic is completely modified or deleted
- A function that is completely out of scope
## 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.
- 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
- 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. Env var is not encouraged.
- 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.
"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 сертификата в:",
supportTelegramChatID:"Direct Chat / Group / Channel's Chat ID를 지원해요.",
supportTelegramChatID:"개인 채팅 / 그룹 / 채널의 ID를 지원해요.",
wayToGetTelegramChatID:"봇에 메시지를 보내 채팅 ID를 얻고 밑에 URL로 이동해 chat_id를 볼 수 있어요.",
"YOUR BOT TOKEN HERE":"여기에 BOT 토큰을 적어주세요.",
"YOUR BOT TOKEN HERE":"봇 토큰",
chatIDNotFound:"채팅 ID를 찾을 수 없어요. 먼저 봇에게 메시지를 보내주세요.",
webhook:"Webhook",
"Post URL":"Post URL",
@ -305,13 +304,13 @@ export default {
PasswordsDoNotMatch:"비밀번호가 일치하지 않아요.",
records:"records",
"One record":"One record",
steamApiKeyDescription:"스팀 게임 서버를 모니터링하려면 Steam Web API 키가 필요해요. API 키는 하단 사이트에서 등록할 수 있어요: ",
steamApiKeyDescription:"스팀 게임 서버를 모니터링하려면 Steam Web API 키가 필요해요. API 키는 하단 웹사이트에서 등록할 수 있어요: ",
"Current User":"현재 사용자",
recent:"최근",
Done:"완료",
Info:"정보",
Security:"보안",
"Steam API Key":"Steam API Key",
"Steam API Key":"스팀 API 키",
"Shrink Database":"데이터베이스 축소",
"Pick a RR-Type...":"RR-Type을 골라주세요...",
"Pick Accepted Status Codes...":"상태 코드를 골라주세요...",
@ -352,4 +351,177 @@ export default {
serwersmsPhoneNumber:"휴대전화 번호",
serwersmsSenderName:"보내는 사람 이름 (customer portal를 통해 가입된 정보)",
stackfield:"Stackfield",
dnsPortDescription:"DNS 서버 포트, 기본값은 53 이에요. 포트는 언제나 변경할 수 있어요.",
PushByTechulus:"Push by Techulus",
GoogleChat:"Google Chat (Google Workspace only)",
topic:"Topic",
topicExplanation:"모니터링할 MQTT Topic",
successMessage:"성공 메시지",
successMessageExplanation:"성공으로 간주되는 MQTT 메시지",
error:"error",
critical:"critical",
Customize:"커스터마이즈",
"Custom Footer":"커스텀 Footer",
"Custom CSS":"커스텀 CSS",
smtpDkimSettings:"DKIM 설정",
smtpDkimDesc:"사용 방법은 DKIM {0}를 참조하세요.",
documentation:"문서",
smtpDkimDomain:"도메인 이름",
smtpDkimKeySelector:"Key Selector",
smtpDkimPrivateKey:"Private Key",
smtpDkimHashAlgo:"해시 알고리즘 (선택)",
smtpDkimheaderFieldNames:"서명할 헤더 키 (선택)",
smtpDkimskipFields:"서명하지 않을 헤더 키 (선택)",
wayToGetPagerDutyKey:"Service -> Service Directory -> (서비스 선택) -> Integrations -> Add integration. 에서 찾을 수 있어요. 자세히 알아보려면 {0}에서 \"Events API V2\"를 검색해봐요.",
"Integration Key":"Integration 키",
"Integration URL":"Integration URL",
"Auto resolve or acknowledged":"자동 해결 혹은 승인",
"do nothing":"아무것도 하지 않기",
"auto acknowledged":"자동 승인 (acknowledged)",
"auto resolve":"자동 해결 (resolve)",
gorush:"Gorush",
alerta:"Alerta",
alertaApiEndpoint:"API Endpoint",
alertaEnvironment:"환경변수",
alertaApiKey:"API 키",
alertaAlertState:"경고 상태",
alertaRecoverState:"해결된 상태",
deleteStatusPageMsg:"정말 이 상태 페이지를 삭제할까요?",
Proxies:"프록시",
default:"Default",
enabled:"활성화",
setAsDefault:"기본 프록시로 설정",
deleteProxyMsg:"정말 이 프록시를 모든 모니터링에서 삭제할까요?",
proxyDescription:"프록시가 작동하려면 모니터에 할당되어야 해요.",
enableProxyDescription:"이 프록시는 활성화될 때까지 영향을 미치지 않아요. 활성화 상태에 따라 모든 모니터에서 프록시를 일시정지할 수 있어요.",
setAsDefaultProxyDescription:"새로 추가하는 모든 모니터링에 이 프록시를 기본적으로 활성화해요. 각 모니터에 대해 별도로 프록시를 비활성화할 수 있어요.",
"Certificate Chain":"인증서 체인",
Valid:"유효",
Invalid:"유효하지 않음",
AccessKeyId:"AccessKey ID",
SecretAccessKey:"AccessKey Secret",
PhoneNumbers:"휴대전화 번호",
TemplateCode:"템플릿 코드",
SignName:"SignName",
"Sms template must contain parameters: ":"Sms 템플릿은 다음과 같은 파라미터가 포함되어야 해요:",
"Bark Endpoint":"Bark Endpoint",
WebHookUrl:"웹훅 URL",
SecretKey:"Secret Key",
"For safety, must use secret key":"안전을 위해 꼭 Secret Key를 사용하세요.",
"Device Token":"기기 Token",
Platform:"플랫폼",
iOS:"iOS",
Android:"Android",
Huawei:"Huawei",
High:"High",
Retry:"재시도",
Topic:"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":"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":"프록시 없음",
"HTTP Basic Auth":"HTTP 인증",
"New Status Page":"새로운 상태 페이지",
"Page Not Found":"페이지를 찾을 수 없어요",
"Reverse Proxy":"리버스 프록시",
Backup:"백업",
About:"정보",
wayToGetCloudflaredURL:"({0}에서 Cloudflare 다운로드 하기)",
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:":"Subject:",
"Valid To:":"Valid To:",
"Days Remaining:":"남은 일수:",
"Issuer:":"Issuer:",
"Fingerprint:":"Fingerprint:",
"No status pages":"상태 페이지 없음",
"Domain Name Expiry Notification":"도메인 이름 만료 알림",
Proxy:"프록시",
"Date Created":"생성된 날짜",
onebotHttpAddress:"OneBot HTTP 주소",
onebotMessageType:"OneBot 메시지 종류",
onebotGroupMessage:"그룹 메시지",
onebotPrivateMessage:"개인 메시지",
onebotUserOrGroupId:"그룹/사용자 ID",
onebotSafetyTips:"안전을 위해 Access 토큰을 설정하세요.",
"PushDeer Key":"PushDeer 키",
"Footer Text":"Footer 문구",
"Show Powered By":"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",
endpoint:"endpoint",
octopushAPIKey:"제어판 HTTP API credentials 에서 \"API key\"",
octopushLogin:"제어판 HTTP API credentials 에서 \"Login\"",
promosmsLogin:"API 로그인 이름",
promosmsPassword:"API 비밀번호",
"pushoversounds pushover":"Pushover (기본)",
"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":"진동만",
"pushoversounds none":"없음 (무음)",
pushyAPIKey:"비밀 API 키",
pushyToken:"기기 토큰",
"Show update if available":"사용 가능한 경우에 업데이트 표시",
"Also check beta release":"베타 릴리즈 확인",
"Using a Reverse Proxy?":"리버스 프록시를 사용하시나요?",
"Check how to config it for 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":"Coming Soon",
wayToGetClickSendSMSToken:"{0}에서 API 사용자 이름과 키를 얻을 수 있어요.",
"Go back to the previous page.":"Bir önceki sayfaya geri git.",
"Coming Soon":"Yakında gelecek",
wayToGetClickSendSMSToken:"API Kullanıcı Adı ve API Anahtarını {0} adresinden alabilirsiniz.",
error:"hata",
critical:"kritik",
wayToGetPagerDutyKey:"Bunu şuraya giderek alabilirsiniz: Servis -> Servis Dizini -> (Bir servis seçin) -> Entegrasyonlar -> Entegrasyon ekle. Burada \"Events API V2\" için arama yapabilirsiniz. Daha fazla bilgi {0}",
"Integration Key":"Entegrasyon Anahtarı",
"Integration URL":"Entegrasyon URL",
"Auto resolve or acknowledged":"Otomatik çözümleme veya onaylama",