Merge branch 'louislam:master' into master

This commit is contained in:
Ioma Taani 2021-10-13 14:25:46 +02:00 committed by GitHub
commit f3a823c0b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 427 additions and 96 deletions

View file

@ -9,9 +9,8 @@ assignees: ''
**Is it a duplicate question?**
Please search in Issues without filters: https://github.com/louislam/uptime-kuma/issues?q=
**Describe your problem**
Please describe what you are asking for
**Info**
Uptime Kuma Version:

View file

@ -6,7 +6,7 @@ The project was created with vite.js (vue3). Then I created a sub-directory call
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.
# Key Technical Skills
## Key Technical Skills
- Node.js (You should know what are promise, async/await and arrow function etc.)
- Socket.io
@ -15,7 +15,7 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
- Bootstrap
- SQLite
# Directories
## Directories
- data (App data)
- dist (Frontend build)
@ -25,41 +25,41 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
- src (Frontend source code)
- test (unit test)
# 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.
If you are not sure, feel free to create an empty pull request draft first.
## Pull Request Examples
### Pull Request Examples
### ✅ High - Medium Priority
#### ✅ High - Medium Priority
- Add a new notification
- Add a chart
- Fix a bug
- Translations
### *️⃣ Requires one more reviewer
#### *️⃣ Requires one more reviewer
I do not have such knowledge to test it.
- Add k8s supports
### *️⃣ Low Priority
#### *️⃣ Low Priority
It changed my current workflow and require further studies.
- Change my release approach
### ❌ Won't Merge
#### ❌ Won't Merge
- Duplicated pull request
- Buggy
- Existing logic is completely modified or deleted
- A function that is completely out of scope
# Project Styles
## 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.
@ -68,32 +68,32 @@ I personally do not like something need to learn so much and need to config so m
- Settings should be configurable in the frontend. Env var is not encouraged.
- Easy to use
# Coding Styles
## Coding Styles
- 4 spaces indentation
- Follow `.editorconfig`
- Follow ESLint
# Name convention
## Name convention
- Javascript/Typescript: camelCaseType
- SQLite: underscore_type
- CSS/SCSS: dash-type
# Tools
## Tools
- Node.js >= 14
- Git
- IDE that supports ESLint and EditorConfig (I am using Intellji Idea)
- A SQLite tool (SQLite Expert Personal is suggested)
# Install dependencies
## Install dependencies
```bash
npm ci
```
# How to start the Backend Dev Server
## How to start the Backend Dev Server
(2021-09-23 Update)
@ -103,7 +103,7 @@ npm run start-server-dev
It binds to `0.0.0.0:3001` by default.
## Backend Details
### Backend Details
It is mainly a socket.io app + express.js.
@ -116,24 +116,26 @@ express.js is just used for serving the frontend built files (index.html, .js an
- scoket-handler (Socket.io Handlers)
- server.js (Server main logic)
# How to start the Frontend Dev Server
## How to start the Frontend Dev Server
1. Set the env var `NODE_ENV` to "development".
2. Start the frontend dev server by the following command.
```bash
npm run dev
```
It binds to `0.0.0.0:3000` by default.
You can use Vue.js devtools Chrome extension for debugging.
## Build the frontend
### Build the frontend
```bash
npm run build
```
## Frontend Details
### Frontend Details
Uptime Kuma Frontend is a single page application (SPA). Most paths are handled by Vue Router.
@ -143,24 +145,23 @@ As you can see, most data in frontend is stored in root level, even though you c
The data and socket logic are in `src/mixins/socket.js`.
# Database Migration
## Database Migration
1. Create `patch-{name}.sql` in `./db/`
2. Add your patch filename in the `patchList` list in `./server/database.js`
# Unit Test
## 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.
# Update Dependencies
## Update Dependencies
Install `ncu`
https://github.com/raineorshine/npm-check-updates
@ -170,10 +171,10 @@ 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
Patch release = the third digit ([Semantic Versioning](https://semver.org/))
# Translations
## Translations
Please read: https://github.com/louislam/uptime-kuma/tree/master/src/languages

View file

@ -2,7 +2,6 @@
<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=Backers&color=brightgreen" /></a>
<div align="center" width="100%">
<img src="./public/icon.svg" width="128" alt="" />
</div>
@ -119,9 +118,11 @@ If you love this project, please consider giving me a ⭐.
## 🗣️ Discussion
### Issues Page
You can discuss or ask for help in [Issues](https://github.com/louislam/uptime-kuma/issues).
### Subreddit
My Reddit account: louislamlam
You can mention me if you ask question on Reddit.
https://www.reddit.com/r/UptimeKuma/

View file

@ -5,13 +5,15 @@
Use this section to tell people about which versions of your project are
currently being supported with security updates.
#### Uptime Kuma Versions:
### Uptime Kuma Versions
| Version | Supported |
| ------- | ------------------ |
| 1.7.X | :white_check_mark: |
| < 1.7 | |
#### Upgradable Docker Tags:
### Upgradable Docker Tags
| Tag | Supported |
| ------- | ------------------ |
| 1 | :white_check_mark: |
@ -23,6 +25,7 @@ currently being supported with security updates.
| All other tags | ❌ |
## Reporting a Vulnerability
Please report security issues to uptime@kuma.pet.
Do not use the issue tracker or discuss it in the public as it will cause more damage.

View file

@ -4,4 +4,8 @@ if (process.env.TEST_FRONTEND) {
config.presets = ["@babel/preset-env"];
}
if (process.env.TEST_BACKEND) {
config.plugins = ["babel-plugin-rewire"];
}
module.exports = config;

View file

@ -0,0 +1,5 @@
module.exports = {
"rootDir": "..",
"testRegex": "./test/backend.spec.js",
};

View file

@ -1,5 +1,5 @@
module.exports = {
"rootDir": ".",
"rootDir": "..",
"testRegex": "./test/frontend.spec.js",
};

View file

@ -5,7 +5,7 @@ module.exports = {
"__DEV__": true
},
"testRegex": "./test/e2e.spec.js",
"rootDir": ".",
"rootDir": "..",
"testTimeout": 30000,
};

View file

@ -1,9 +1,9 @@
import legacy from "@vitejs/plugin-legacy"
import vue from "@vitejs/plugin-vue"
import { defineConfig } from "vite"
import legacy from "@vitejs/plugin-legacy";
import vue from "@vitejs/plugin-vue";
import { defineConfig } from "vite";
const postCssScss = require("postcss-scss")
const postcssRTLCSS = require('postcss-rtlcss');
const postCssScss = require("postcss-scss");
const postcssRTLCSS = require("postcss-rtlcss");
// https://vitejs.dev/config/
export default defineConfig({
@ -20,5 +20,5 @@ export default defineConfig({
"map": false,
"plugins": [postcssRTLCSS]
}
},
})
},
});

View file

@ -47,5 +47,5 @@ RUN chmod +x /app/extra/upload-github-release-asset.sh
# Dist only
RUN cd /app && tar -zcvf $DIST dist
RUN /app/extra/upload-github-release-asset.sh github_api_token=$GITHUB_TOKEN owner=louislam repo=uptime-kuma tag=$VERSION filename=$DIST
RUN /app/extra/upload-github-release-asset.sh github_api_token=$GITHUB_TOKEN owner=louislam repo=uptime-kuma tag=$VERSION filename=/app/$DIST

17
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "uptime-kuma",
"version": "1.7.3",
"version": "1.8.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "uptime-kuma",
"version": "1.7.3",
"version": "1.8.0",
"license": "MIT",
"dependencies": {
"@fortawesome/fontawesome-svg-core": "~1.2.36",
@ -64,6 +64,7 @@
"@vitejs/plugin-legacy": "~1.6.1",
"@vitejs/plugin-vue": "~1.9.2",
"@vue/compiler-sfc": "~3.2.19",
"babel-plugin-rewire": "^1.2.0",
"core-js": "~3.18.1",
"cross-env": "~7.0.3",
"dns2": "~2.0.1",
@ -3331,6 +3332,12 @@
"@babel/core": "^7.0.0-0"
}
},
"node_modules/babel-plugin-rewire": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/babel-plugin-rewire/-/babel-plugin-rewire-1.2.0.tgz",
"integrity": "sha512-JBZxczHw3tScS+djy6JPLMjblchGhLI89ep15H3SyjujIzlxo5nr6Yjo7AXotdeVczeBmWs0tF8PgJWDdgzAkQ==",
"dev": true
},
"node_modules/babel-preset-current-node-syntax": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
@ -14722,6 +14729,12 @@
"@babel/helper-define-polyfill-provider": "^0.2.2"
}
},
"babel-plugin-rewire": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/babel-plugin-rewire/-/babel-plugin-rewire-1.2.0.tgz",
"integrity": "sha512-JBZxczHw3tScS+djy6JPLMjblchGhLI89ep15H3SyjujIzlxo5nr6Yjo7AXotdeVczeBmWs0tF8PgJWDdgzAkQ==",
"dev": true
},
"babel-preset-current-node-syntax": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",

View file

@ -15,25 +15,26 @@
"lint:js": "eslint --ext \".js,.vue\" --ignore-path .gitignore .",
"lint:style": "stylelint \"**/*.{vue,css,scss}\" --ignore-path .gitignore",
"lint": "npm run lint:js && npm run lint:style",
"dev": "vite --host",
"dev": "vite --host --config ./config/vite.config.js",
"start": "npm run start-server",
"start-server": "node server/server.js",
"start-server-dev": "cross-env NODE_ENV=development node server/server.js",
"build": "vite build",
"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 && jest ",
"jest-frontend": "cross-env TEST_FRONTEND=1 jest --config=./jest-frontend.config.js",
"jest": "node test/prepare-jest.js && npm run jest-frontend && npm run jest-backend && jest --config=./config/jest.config.js",
"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",
"vite-preview-dist": "vite preview --host",
"vite-preview-dist": "vite preview --host --config ./config/vite.config.js",
"build-docker": "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-alpine": "docker buildx build -f 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:1.8.0-alpine --target release . --push",
"build-docker-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.8.0 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.8.0-debian --target release . --push",
"build-docker-nightly": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push",
"build-docker-alpine": "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:1.8.0-alpine --target release . --push",
"build-docker-debian": "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:1.8.0 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.8.0-debian --target release . --push",
"build-docker-nightly": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push",
"build-docker-nightly-alpine": "docker buildx build -f dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly-alpine --target nightly . --push",
"build-docker-nightly-amd64": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain",
"build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain",
"upload-artifacts": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain",
"setup": "git checkout 1.8.0 && npm ci --production && npm run download-dist",
"download-dist": "node extra/download-dist.js",
@ -59,6 +60,7 @@
"@popperjs/core": "~2.10.2",
"args-parser": "~1.3.0",
"axios": "~0.21.4",
"babel-plugin-rewire": "~1.2.0",
"bcryptjs": "~2.4.3",
"bootstrap": "~5.1.1",
"chart.js": "~3.5.1",

View file

@ -8,6 +8,7 @@ import fa from "./languages/fa";
import frFR from "./languages/fr-FR";
import hu from "./languages/hu";
import itIT from "./languages/it-IT";
import idID from "./languages/id-ID";
import ja from "./languages/ja";
import koKR from "./languages/ko-KR";
import nlNL from "./languages/nl-NL";
@ -36,6 +37,7 @@ const languageList = {
"fr-FR": frFR,
"hu": hu,
"it-IT": itIT,
"id-ID" : idID,
"ja": ja,
"da-DK": daDK,
"sr": sr,

View file

@ -8,7 +8,7 @@ export default {
Theme: "Thema",
General: "Allgemein",
Version: "Version",
"Check Update On GitHub": "Auf Github nach Updates suchen",
"Check Update On GitHub": "Auf GitHub nach Updates suchen",
List: "Liste",
Add: "Hinzufügen",
"Add New Monitor": "Neuer Monitor",
@ -38,7 +38,7 @@ export default {
checkEverySecond: "Überprüfe alle {0} Sekunden",
Response: "Antwortzeit",
Ping: "Ping",
"Monitor Type": "Monitor Typ",
"Monitor Type": "Monitor-Typ",
Keyword: "Suchwort",
"Friendly Name": "Anzeigename",
URL: "URL",
@ -48,11 +48,11 @@ export default {
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",
ignoreTLSError: "Ignoriere TLS-/SSL-Fehler von Webseiten",
"Upside Down Mode": "Invertierter Modus",
upsideDownModeDescription: "Im invertierten 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.",
maxRedirectDescription: "Maximale Anzahl von Weiterleitungen, denen gefolgt werden soll. Auf 0 setzen, um Weiterleitungen zu deaktivieren.",
"Accepted Status Codes": "Erlaubte HTTP-Statuscodes",
acceptedStatusCodesDescription: "Wähle die Statuscodes aus, welche trotzdem als erfolgreich gewertet werden sollen.",
Save: "Speichern",
@ -82,7 +82,7 @@ export default {
notificationDescription: "Weise den Monitor(en) eine Benachrichtigung zu, damit diese Funktion greift.",
Leave: "Verlassen",
"I understand, please disable": "Ich verstehe, bitte deaktivieren",
Confirm: "Bestätige",
Confirm: "Bestätigen",
Yes: "Ja",
No: "Nein",
Username: "Benutzername",
@ -95,7 +95,7 @@ export default {
Email: "E-Mail",
Test: "Test",
"Certificate Info": "Zertifikatsinfo",
keywordDescription: "Ein Suchwort in der HTML oder JSON Ausgabe finden. Bitte beachte: es wird zwischen Groß-/Kleinschreibung unterschieden.",
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?",
resoverserverDescription: "Cloudflare ist als der Standardserver festgelegt, dieser kann jederzeit geändern werden.",
@ -108,13 +108,13 @@ export default {
"Clear Data": "Lösche Daten",
Events: "Ereignisse",
Heartbeats: "Statistiken",
confirmClearStatisticsMsg: "Bist du dir wirklich sicher, dass du ALLE Statistiken löschen möchtest?",
"Create your admin account": "Erstelle dein Admin Konto",
confirmClearStatisticsMsg: "Bist du dir sicher, dass du ALLE Statistiken löschen möchtest?",
"Create your admin account": "Erstelle dein Admin-Konto",
"Repeat Password": "Wiederhole das Passwort",
"Resource Record Type": "Resource Record Type",
Export: "Export",
Import: "Import",
respTime: "Antw. Zeit (ms)",
respTime: "Antw.-Zeit (ms)",
notAvailableShort: "N/A",
"Default enabled": "Standardmäßig aktiviert",
"Apply on all existing monitors": "Auf alle existierenden Monitore anwenden",
@ -125,34 +125,34 @@ export default {
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.",
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 Benachrichtigung mit demselben Namen übersprungen werden soll. 'Überschreiben' löscht jeden vorhandenen Monitor sowie Benachrichtigungen.",
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.",
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",
"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",
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",
"Show URI": "URI anzeigen",
Tags: "Tags",
"Add New below or Select...": "Bestehenden Tag auswählen oder neuen hinzufügen...",
"Tag with this name already exist.": "Ein Tag mit dem Namen existiert bereits.",
"Tag with this value already exist.": "Ein Tag mit dem Wert existiert bereits.",
"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)",
"value (optional)": "Wert (optional)",
Gray: "Grau",
Red: "Rot",
Orange: "Orange",
@ -176,9 +176,9 @@ export default {
"Degraded Service": "Eingeschränkter Dienst",
"Add Group": "Gruppe hinzufügen",
"Add a monitor": "Monitor hinzufügen",
"Edit Status Page": "Bearbeite Status Seite",
"Edit Status Page": "Bearbeite Status-Seite",
"Go to Dashboard": "Gehe zum Dashboard",
"Status Page": "Status Seite",
"Status Page": "Status-Seite",
telegram: "Telegram",
webhook: "Webhook",
smtp: "E-Mail (SMTP)",

View file

@ -19,7 +19,7 @@ export default {
enableDefaultNotificationDescription: "For every new monitor this notification will be enabled by default. 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 want to delete ALL statistics?",
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 to import the backup? Please make sure you've selected the right import option.",
twoFAVerifyLabel: "Please type in your token to verify that 2FA is working",

285
src/languages/id-ID.js Normal file
View file

@ -0,0 +1,285 @@
export default {
languageName: "Indonesia",
checkEverySecond: "Cek Setiap {0} detik.",
retryCheckEverySecond: "Coba lagi setiap {0} detik.",
retriesDescription: "Percobaan ulang maksimum sebelum layanan dinyatakan tidak aktif dan notifikasi dikirim",
ignoreTLSError: "Abaikan kesalahan TLS/SSL untuk situs web HTTPS",
upsideDownModeDescription: "Balikkan statusnya. Jika layanan dapat dijangkau, TIDAK AKTIF.",
maxRedirectDescription: "Jumlah maksimum pengalihan untuk diikuti. Setel ke 0 untuk menonaktifkan pengalihan.",
acceptedStatusCodesDescription: "Pilih kode status yang dianggap sebagai respons yang berhasil.",
passwordNotMatchMsg: "Sandi kedua tidak cocok.",
notificationDescription: "Harap atur notifikasi ke monitor agar berfungsi.",
keywordDescription: "Cari kata kunci dalam code html atau JSON huruf besar-kecil berpengaruh",
pauseDashboardHome: "Jeda",
deleteMonitorMsg: "Apakah anda mau menghapus monitor ini?",
deleteNotificationMsg: "Apakah anda mau menghapus notifikasi ini untuk semua monitor?",
resoverserverDescription: "Cloudflare adalah server default, Anda dapat mengubah server resolver kapan saja.",
rrtypeDescription: "Pilih RR-Type yang mau anda monitor",
pauseMonitorMsg: "Apakah anda yakin mau menjeda?",
enableDefaultNotificationDescription: "Untuk setiap monitor baru, notifikasi ini akan diaktifkan secara default. Anda masih dapat menonaktifkan notifikasi secara terpisah untuk setiap monitor.",
clearEventsMsg: "Apakah anda yakin mau menghapus semua event di monitor ini?",
clearHeartbeatsMsg: "Apakah anda yakin mau menghapus semua heartbeats di monitor ini?",
confirmClearStatisticsMsg: "Apakah anda yakin mau menghapus semua statistik?",
importHandleDescription: "Pilih 'Lewati yang ada' jika Anda ingin melewati setiap monitor atau notifikasi dengan nama yang sama. 'Timpa' akan menghapus setiap monitor dan notifikasi yang ada.",
confirmImportMsg: "Apakah Anda yakin untuk mengimpor cadangan? Pastikan Anda telah memilih opsi impor yang tepat.",
twoFAVerifyLabel: "Silakan ketik token Anda untuk memverifikasi bahwa 2FA berfungsi",
tokenValidSettingsMsg: "Tokennya valid! Anda sekarang dapat menyimpan pengaturan 2FA.",
confirmEnableTwoFAMsg: "Apakah Anda yakin ingin mengaktifkan 2FA?",
confirmDisableTwoFAMsg: "Apakah Anda yakin ingin menonaktifkan 2FA?",
Settings: "Pengaturan",
Dashboard: "Dashboard",
"New Update": "Update Baru",
Language: "Bahasa",
Appearance: "Tampilan",
Theme: "Tema",
General: "General",
Version: "Versi",
"Check Update On GitHub": "Cek Update di GitHub",
List: "List",
Add: "Tambah",
"Add New Monitor": "Tambah Monitor Baru",
"Quick Stats": "Statistik Cepat",
Up: "Aktif",
Down: "Tidak Aktif",
Pending: "Tertunda",
Unknown: "Tidak diketahui",
Pause: "Jeda",
Name: "Nama",
Status: "Status",
DateTime: "Tanggal Waktu",
Message: "Pesan",
"No important events": "Tidak ada Event penting",
Resume: "Melanjutkan",
Edit: "Rubah",
Delete: "Hapus",
Current: "Saat ini",
Uptime: "Waktu aktif",
"Cert Exp.": "Cert Exp.",
days: "hari-hari",
day: "hari",
"-day": "-hari",
hour: "Jam",
"-hour": "-Jam",
Response: "Respon",
Ping: "Ping",
"Monitor Type": "Tipe Monitor",
Keyword: "Keyword",
"Friendly Name": "Friendly Name",
URL: "URL",
Hostname: "Hostname",
Port: "Port",
"Heartbeat Interval": "Interval Heartbeat ",
Retries: "Retries",
"Heartbeat Retry Interval": "Interval Heartbeat Mencoba kembali ",
Advanced: "Advanced",
"Upside Down Mode": "Mode Terbalik",
"Max. Redirects": "Maksimal Redirect/Pengalihan",
"Accepted Status Codes": "Kode Status yang Diterima",
Save: "Simpan",
Notifications: "Notifikasi",
"Not available, please setup.": "Tidak tersedia, silakan atur.",
"Setup Notification": "Setel Notifikasi",
Light: "Terang",
Dark: "Gelap",
Auto: "Automatis",
"Theme - Heartbeat Bar": "Theme - Heartbeat Bar",
Normal: "Normal",
Bottom: "Bawah",
None: "Tidak ada",
Timezone: "Zona Waktu",
"Search Engine Visibility": "Visibilitas Mesin Pencari",
"Allow indexing": "Mengizinkan untuk diindex",
"Discourage search engines from indexing site": "Mencegah mesin pencari untuk mengindex site",
"Change Password": "Ganti Sandi",
"Current Password": "Sandi Lama",
"New Password": "Sandi Baru",
"Repeat New Password": "Ulangi Sandi Baru",
"Update Password": "Perbarui Kata Sandi",
"Disable Auth": "Nonaktifkan auth",
"Enable Auth": "Aktifkan Auth",
Logout: "Keluar",
Leave: "Pergi",
"I understand, please disable": "Saya mengerti, silahkan dinonaktifkan",
Confirm: "Konfirmasi",
Yes: "Ya",
No: "Tidak",
Username: "Nama Pengguna",
Password: "Sandi",
"Remember me": "Ingat saya",
Login: "Masuk",
"No Monitors, please": "Tidak ada monitor, silahkan",
"add one": "tambah baru",
"Notification Type": "Tipe Notifikasi",
Email: "Email",
Test: "Test",
"Certificate Info": "Info Sertifikasi ",
"Resolver Server": "Resolver Server",
"Resource Record Type": "Resource Record Type",
"Last Result": "Hasil Terakhir",
"Create your admin account": "Buat admin akun anda",
"Repeat Password": "Ulangi Sandi",
"Import Backup": "Impor Backup",
"Export Backup": "Expor Backup",
Export: "Expor",
Import: "Impor",
respTime: "Tanggapan. Waktu (milidetik)",
notAvailableShort: "N/A",
"Default enabled": "Default diaktifkan",
"Apply on all existing monitors": "Terapkan pada semua monitor yang ada",
Create: "Buat",
"Clear Data": "Bersihkan Data",
Events: "Event",
Heartbeats: "Heartbeats",
"Auto Get": "Auto Get",
backupDescription: "Anda dapat mencadangkan semua monitor dan semua notifikasi ke dalam file JSON.",
backupDescription2: "Catatan: Data sejarah dan event tidak disertakan.",
backupDescription3: "Data sensitif seperti notifikasi token disertakan dalam file ekspor, harap simpan dengan hati-hati.",
alertNoFile: "Silakan pilih file untuk diimpor.",
alertWrongFileType: "Silakan pilih file JSON .",
"Clear all statistics": "Hapus semua statistik",
"Skip existing": "Lewati yang ada",
Overwrite: "Timpa",
Options: "Opsi",
"Keep both": "Simpan keduanya",
"Verify Token": "Verifikasi Token",
"Setup 2FA": "Pengaturan 2FA",
"Enable 2FA": "Aktifkan 2FA",
"Disable 2FA": "Nonaktifkan 2FA",
"2FA Settings": "Settings 2FA",
"Two Factor Authentication": "Otentikasi Dua Faktor",
Active: "Aktif",
Inactive: "Tidak Aktif",
Token: "Token",
"Show URI": "Lihat URI",
Tags: "Tag",
"Add New below or Select...": "Tambahkan Baru di bawah atau Pilih...",
"Tag with this name already exist.": "Tag dengan nama ini sudah ada.",
"Tag with this value already exist.": "Tag dengan nilai ini sudah ada.",
color: "warna",
"value (optional)": "nilai (harus diisi)",
Gray: "Abu Abu",
Red: "Merah",
Orange: "Oranye",
Green: "Hijau",
Blue: "Biru",
Indigo: "Indigo",
Purple: "Ungu",
Pink: "Merah Muda",
"Search...": "Cari...",
"Avg. Ping": "Rata-rata. Ping",
"Avg. Response": "Rata-rata. Respon",
"Entry Page": "Halaman Masuk",
statusPageNothing: "Tidak ada di sini, silakan tambahkan grup atau monitor.",
"No Services": "Tidak ada Layanan",
"All Systems Operational": "Semua Sistem Berfungsi",
"Partially Degraded Service": "Layanan Terdegradasi Sebagian",
"Degraded Service": "Layanan Terdegradasi",
"Add Group": "Tambah Grup",
"Add a monitor": "Tambah monitor",
"Edit Status Page": "Edit Halaman Status",
"Go to Dashboard": "Lihat Dashboard",
"Status Page": "Halaman Status",
// Start notification form
defaultNotificationName: "{notification} saya Peringatan ({number})",
here: "di sini",
"Required": "Dibutuhkan",
"telegram": "Telegram",
"Bot Token": "Bot Token",
"You can get a token from": "Anda bisa mendapatkan token dari",
"Chat ID": "Chat ID",
supportTelegramChatID: "Mendukung Obrolan Langsung / Grup / Channel Chat ID",
wayToGetTelegramChatID: "Anda bisa mendapatkan chat id Anda dengan mengirim pesan ke bot dan pergi ke url ini untuk melihat chat_id:",
"YOUR BOT TOKEN HERE": "BOT TOKEN ANDA DI SINI",
chatIDNotFound: "Chat ID tidak ditemukan, tolong kirim pesan ke bot ini dulu",
"webhook": "Webhook",
"Post URL": "Post URL",
"Content Type": "Tipe konten",
webhookJsonDesc: "{0} bagus untuk server http modern seperti express.js",
webhookFormDataDesc: "{multipart} bagus untuk PHP, Anda hanya perlu mengurai json dengan {decodeFunction}",
"smtp": "Email (SMTP)",
secureOptionNone: "None / STARTTLS (25, 587)",
secureOptionTLS: "TLS (465)",
"Ignore TLS Error": "Ignore TLS Error",
"From Email": "From Email",
"To Email": "To Email",
smtpCC: "CC",
smtpBCC: "BCC",
"discord": "Discord",
"Discord Webhook URL": "Discord Webhook URL",
wayToGetDiscordURL: "Anda bisa mendapatkan ini dengan pergi ke Server Settings -> Integrations -> Create Webhook",
"Bot Display Name": "Nama Bot",
"Prefix Custom Message": "Prefix Pesan",
"Hello @everyone is...": "Hallo {'@'}everyone is...",
"teams": "Microsoft Teams",
"Webhook URL": "Webhook URL",
wayToGetTeamsURL: "Anda dapat mempelajari cara membuat url webhook {0}.",
"signal": "Sinyal",
"Number": "Nomer",
"Recipients": "Penerima",
needSignalAPI: "Anda harus memiliki klien sinyal dengan REST API.",
wayToCheckSignalURL: "Anda dapat memeriksa url ini untuk melihat cara menyiapkannya:",
signalImportant: "PENTING: Anda tidak dapat mencampur grup dan nomor di penerima!",
"gotify": "Gotify",
"Application Token": "Token Aplikasi",
"Server URL": "Server URL",
"Priority": "Prioritas",
"slack": "Slack",
"Icon Emoji": "Icon Emoji",
"Channel Name": "Nama Channel",
"Uptime Kuma URL": "Uptime Kuma URL",
aboutWebhooks: "Info lain tentang webhook: {0}",
aboutChannelName: "Masukan nama channel di {0} Kolom Nama Channel jika Anda ingin melewati channel webhook. Contoh: #other-channel",
aboutKumaURL: "Jika Anda membiarkan bidang URL Uptime Kuma kosong, itu akan menjadi default ke halaman Project Github.",
emojiCheatSheet: "Emoji cheat sheet: {0}",
"rocket.chat": "Rocket.chat",
pushover: "Pushover",
pushy: "Pushy",
octopush: "Octopush",
promosms: "PromoSMS",
lunasea: "LunaSea",
apprise: "Apprise (Mendukung 50+ layanan notifikasi)",
pushbullet: "Pushbullet",
line: "Line Messenger",
mattermost: "Mattermost",
"User Key": "Kunci pengguna",
"Device": "Perangkat",
"Message Title": "Judul Pesan",
"Notification Sound": "Suara Nofifikasi",
"More info on:": "Info lebih lanjut tentang: {0}",
pushoverDesc1: "Prioritas darurat (2) memiliki batas waktu default 30 detik antara percobaan ulang dan akan kadaluwarsa setelah 1 jam.",
pushoverDesc2: "Jika Anda ingin mengirim pemberitahuan ke perangkat yang berbeda, isi kolom Perangkat.",
"SMS Type": "Tipe SMS",
octopushTypePremium: "Premium (Cepat - direkomendasikan untuk mengingatkan)",
octopushTypeLowCost: "Low Cost (Lambat, terkadang diblokir oleh operator)",
"Check octopush prices": "Cek harga octopush {0}.",
octopushPhoneNumber: "Nomer Telpon/HP (format internasional, contoh : +33612345678) ",
octopushSMSSender: "Nama Pengirim SMS : 3-11 karakter alfanumerik dan spasi (a-zA-Z0-9)",
"LunaSea Device ID": "LunaSea Device ID",
"Apprise URL": "Apprise URL",
"Example:": "Contoh: {0}",
"Read more:": "Baca lebih lajut: {0}",
"Status:": "Status: {0}",
"Read more": "Baca lebih lajut",
appriseInstalled: "Apprise diinstall.",
appriseNotInstalled: "Apprise tidak diinstall. {0}",
"Access Token": "Access Token",
"Channel access token": "Channel access token",
"Line Developers Console": "Line Developers Console",
lineDevConsoleTo: "Line Developers Console - {0}",
"Basic Settings": "Pengaturan dasar",
"User ID": "User ID",
"Messaging API": "Messaging API",
wayToGetLineChannelToken: "Pertama akses {0}, buat penyedia dan saluran (Messaging API), lalu Anda bisa mendapatkan token akses saluran dan id pengguna dari item menu yang disebutkan di atas.",
"Icon URL": "Icon URL",
aboutIconURL: "Anda dapat memberikan tautan ke gambar di \"Icon URL\" untuk mengganti gambar profil default. Tidak akan digunakan jika Ikon Emoji diset.",
aboutMattermostChannelName: "Anda dapat mengganti channel default tujuan posting webhook dengan memasukkan nama channel ke dalam Kolom \"Channel Name\". Ini perlu diaktifkan di pengaturan webhook Mattermost. contoh: #other-channel",
"matrix": "Matrix",
promosmsTypeEco: "SMS ECO - murah tapi lambat dan sering kelebihan beban. Terbatas hanya untuk penerima Polandia.",
promosmsTypeFlash: "SMS FLASH - Pesan akan otomatis muncul di perangkat penerima. Terbatas hanya untuk penerima Polandia.",
promosmsTypeFull: "SMS FULL - SMS tingkat premium, Anda dapat menggunakan Nama Pengirim Anda (Anda harus mendaftarkan nama terlebih dahulu). Dapat diandalkan untuk peringatan.",
promosmsTypeSpeed: "SMS SPEED - Prioritas tertinggi dalam sistem. Sangat cepat dan dapat diandalkan tetapi mahal (sekitar dua kali lipat dari harga SMS FULL).",
promosmsPhoneNumber: "Nomor telepon (untuk penerima Polandia Anda dapat melewati kode area)",
promosmsSMSSender: "Nama Pengirim SMS : Nama pra-registrasi atau salah satu default: InfoSMS, Info SMS, MaxSMS, INFO, SMS",
"Feishu WebHookUrl": "Feishu WebHookUrl",
// End notification form
};

View file

@ -4,8 +4,8 @@ export default {
retryCheckEverySecond: "{0}초마다 다시 확인해요.",
retriesDescription: "서비스가 중단된 후 알림을 보내기 전 최대 재시도 횟수",
ignoreTLSError: "HTTPS 웹사이트에서 TLS/SSL 에러 무시하기",
upsideDownModeDescription: "서버 상태를 반대로 표시해요. 서버가 작동하면 오프라인으로 표시할 거요.",
maxRedirectDescription: "최대 리다이렉트 횟수요. 0을 입력하면 리다이렉트를 꺼요.",
upsideDownModeDescription: "서버 상태를 반대로 표시해요. 서버가 작동하면 오프라인으로 표시할 거요.",
maxRedirectDescription: "최대 리다이렉트 횟수요. 0을 입력하면 리다이렉트를 꺼요.",
acceptedStatusCodesDescription: "응답 성공으로 간주할 상태 코드를 정해요.",
passwordNotMatchMsg: "비밀번호 재입력이 일치하지 않아요.",
notificationDescription: "모니터링에 알림을 설정할 수 있어요.",
@ -13,9 +13,9 @@ export default {
pauseDashboardHome: "일시 정지",
deleteMonitorMsg: "정말 이 모니터링을 삭제할까요?",
deleteNotificationMsg: "정말 이 알림을 모든 모니터링에서 삭제할까요?",
resoverserverDescription: "Cloudflare가 기본 서버요, 원한다면 언제나 다른 Resolver 서버로 변경할 수 있어요.",
resoverserverDescription: "Cloudflare가 기본 서버요, 원한다면 언제나 다른 Resolver 서버로 변경할 수 있어요.",
rrtypeDescription: "모니터링할 RR-Type을 선택해요.",
pauseMonitorMsg: "정말 이 모니터링을 일시 정지 할까요?",
pauseMonitorMsg: "정말 이 모니터링을 일시 정지할까요?",
enableDefaultNotificationDescription: "새로 추가하는 모든 모니터링에 이 알림을 기본적으로 활성화해요. 각 모니터에 대해 별도로 알림을 비활성화할 수 있어요.",
clearEventsMsg: "정말 이 모니터링에 대한 모든 이벤트를 삭제할까요?",
clearHeartbeatsMsg: "정말 이 모니터링에 대한 모든 하트비트를 삭제할까요?",
@ -24,8 +24,8 @@ export default {
confirmImportMsg: "정말 백업을 가져올까요? 가져오기 옵션을 제대로 설정했는지 다시 확인해주세요.",
twoFAVerifyLabel: "토큰을 입력해 2단계 인증이 작동하는지 확인해주세요.",
tokenValidSettingsMsg: "토큰이 유효해요! 이제 2단계 인증 설정을 저장할 수 있어요.",
confirmEnableTwoFAMsg: "정말 2단계 인증을 활성화 할까요?",
confirmDisableTwoFAMsg: "정말 2단계 인증을 비활성화 할까요?",
confirmEnableTwoFAMsg: "정말 2단계 인증을 활성화할까요?",
confirmDisableTwoFAMsg: "정말 2단계 인증을 비활성화할까요?",
Settings: "설정",
Dashboard: "대시보드",
"New Update": "새로운 업데이트",
@ -77,7 +77,7 @@ export default {
"Accepted Status Codes": "응답 성공 상태 코드",
Save: "저장",
Notifications: "알림",
"Not available, please setup.": "존재하지 않아요, 새로운거 하나 만드는건 어때요?",
"Not available, please setup.": "존재하지 않아요, 새로운 거 하나 만드는 건 어때요?",
"Setup Notification": "알림 설정",
Light: "라이트",
Dark: "다크",
@ -158,10 +158,10 @@ export default {
color: "색상",
"value (optional)": "값 (선택)",
Gray: "회색",
Red: "빨색",
Red: "빨색",
Orange: "주황색",
Green: "초록색",
Blue: "파색",
Blue: "파색",
Indigo: "남색",
Purple: "보라색",
Pink: "핑크색",
@ -175,9 +175,9 @@ export default {
"Partially Degraded Service": "일부 시스템 비정상",
"Degraded Service": "모든 시스템 비정상",
"Add Group": "그룹 추가",
"Add a monitor": "모니터링 추가r",
"Add a monitor": "모니터링 추가",
"Edit Status Page": "상태 페이지 수정",
"Go to Dashboard": "대보드로 가기",
"Go to Dashboard": "대보드로 가기",
"Status Page": "상태 페이지",
defaultNotificationName: "내 {notification} 알림 ({number})",
here: "여기",
@ -194,7 +194,7 @@ export default {
"Post URL": "Post URL",
"Content Type": "Content Type",
webhookJsonDesc: "{0}은 express.js와 같은 최신 HTTP 서버에 적합해요.",
webhookFormDataDesc: "{multipart}은 PHP에 적합해요. {decodeFunction}를 기준으로 json을 디코딩하면 되어요.",
webhookFormDataDesc: "{multipart}은 PHP에 적합해요. {decodeFunction}를 기준으로 json을 디코딩하면 요.",
smtp: "Email (SMTP)",
secureOptionNone: "없음 / STARTTLS (25, 587)",
secureOptionTLS: "TLS (465)",
@ -245,11 +245,11 @@ export default {
"Message Title": "메시지 제목",
"Notification Sound": "알림음",
"More info on:": "자세한 정보: {0}",
pushoverDesc1: "긴급 우선 순위 (2)는 재시도 사이에 기본적으로 30초의 타임아웃이 있고, 1시간 후에 만료되어요.",
pushoverDesc1: "긴급 우선 순위 (2)는 재시도 사이에 기본적으로 30초의 타임아웃이 있고, 1시간 후에 만료요.",
pushoverDesc2: "다른 장치에 알림을 보내려면 장치칸을 입력해주세요.",
"SMS Type": "SMS 종류",
octopushTypePremium: "프리미엄 (빠름) - 알림 기능에 적합해요)",
octopushTypeLowCost: "저렴한 요금 (느림, 가끔 차단될 수 있어요)",
octopushTypeLowCost: "저렴한 요금 (느림) - 가끔 차단될 수 있어요)",
"Check octopush prices": "{0}에서 Octopush 가격을 확인할 수 있어요.",
octopushPhoneNumber: "휴대전화 번호 (intl format, eg : +33612345678) ",
octopushSMSSender: "보내는 사람 이름 : 3-11개의 영숫자 및 여백공간 (a-z, A-Z, 0-9)",
@ -259,24 +259,24 @@ export default {
"Read more:": "더 보기: {0}",
"Status:": "상태: {0}",
"Read more": "더 보기",
appriseInstalled: "Apprise가 설치되어있어요..",
appriseNotInstalled: "Apprise 가 설치되어있지 않아요. {0}",
appriseInstalled: "Apprise가 설치되어있어요.",
appriseNotInstalled: "Apprise가 설치되어있지 않아요. {0}",
"Access Token": "액세스 토큰",
"Channel access token": "채널 세스 토큰",
"Channel access token": "채널 세스 토큰",
"Line Developers Console": "Line 개발자 콘솔",
lineDevConsoleTo: "Line 개발자 콘솔 - {0}",
"Basic Settings": "기본 설정 메뉴",
"User ID": "사용자 ID",
"Messaging API": "Messaging API 메뉴",
wayToGetLineChannelToken: "먼저 {0}에 세스하고, 공급자 및 채널 (Messaging API)을 만든 다음, 각 메뉴 밑에 언급된 메뉴에서 채널 액세스 토큰과 사용자 ID를 얻을 수 있어요.",
wayToGetLineChannelToken: "먼저 {0}에 세스하고, 공급자 및 채널 (Messaging API)을 만든 다음, 각 메뉴 밑에 언급된 메뉴에서 채널 액세스 토큰과 사용자 ID를 얻을 수 있어요.",
"Icon URL": "아이콘 URL",
aboutIconURL: "\"Icon URL\"에 사진 링크를 입력해 프로필 사진을 설정할 수 있어요. 아이콘 이모지가 설정되어 있으면 적용되지 않을거에요.",
aboutIconURL: "\"Icon URL\"에 사진 링크를 입력해 프로필 사진을 설정할 수 있어요. 아이콘 이모지가 설정되어 있으면 적용되지 않을 거예요.",
aboutMattermostChannelName: "채널 이름을 입력하면 Webhook이 게시할 기본 채널을 재설정할 수 있어요. 이 설정은 Mattermost 웹훅 설정에서 활성화해야 해요. 예: #기타-채널",
matrix: "매트릭스",
promosmsTypeEco: "SMS ECO - 저렴하지만 느리고 가끔 과부하에 걸려요. 폴란드 수신자만 사용할 수 있어요. ",
promosmsTypeFlash: "SMS FLASH - 메시지가 받는 사람 장치에 자동으로 표시되어요. 폴란드 수신자만 사용할 수 있어요.",
promosmsTypeFlash: "SMS FLASH - 메시지가 받는 사람 장치에 자동으로 표시요. 폴란드 수신자만 사용할 수 있어요.",
promosmsTypeFull: "SMS FULL - SMS 프리미엄 티어, 보내는 사람 이름을 먼저 등록해야 해요. 알림 기능에 적합해요.",
promosmsTypeSpeed: "SMS SPEED - 시스템에서 가장 높은 우선순위요. 매우 빠르고 신뢰할 수 있지만 비용이 많이 들어요 (SMS 전체 가격의 약 두 배).",
promosmsTypeSpeed: "SMS SPEED - 시스템에서 가장 높은 우선순위요. 매우 빠르고 신뢰할 수 있지만 비용이 많이 들어요 (SMS 전체 가격의 약 두 배).",
promosmsPhoneNumber: "전화 번호 (폴란드 수신자라면 지역번호를 적지 않아도 돼요.)",
promosmsSMSSender: "SMS 보내는 사람 이름 : 미리 등록된 이름 혹은 기본값 중 하나요: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
promosmsSMSSender: "SMS 보내는 사람 이름 : 미리 등록된 이름 혹은 기본값 중 하나요: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
};

View file

@ -333,6 +333,12 @@
<p>Utilizzare con attenzione.</p>
</template>
<template v-else-if="$i18n.locale === 'id-ID' ">
<p> Apakah Anda yakin ingin <strong>menonaktifkan autentikasi</strong>? </p>
<p> Ini untuk <strong>mereka yang memiliki otentikasi pihak ketiga</strong> diletakkan di depan Uptime Kuma, misalnya akses Cloudflare. </p>
<p> Gunakan dengan hati-hati. </p>
</template>
<template v-else-if="$i18n.locale === 'ru-RU' ">
<p>Вы уверены, что хотите <strong>отключить авторизацию</strong>?</p>
<p>Это подходит для <strong>тех, у кого стоит другая авторизация</strong> перед открытием Uptime Kuma, например Cloudflare Access.</p>

10
test/backend.spec.js Normal file
View file

@ -0,0 +1,10 @@
beforeAll(() => {
});
describe("", () => {
it("should ", () => {
});
});