From 2625cbe0d2eda6a7ea7ee203a27a5b00bc4fbe91 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sat, 2 Oct 2021 14:43:31 +0800 Subject: [PATCH 01/14] add script for downloading the dist files from github --- .dockerignore | 2 +- .gitignore | 1 + extra/download-dist.js | 57 ++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 1 + package.json | 4 ++- 5 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 extra/download-dist.js diff --git a/.dockerignore b/.dockerignore index 539e9328..9aa6ba32 100644 --- a/.dockerignore +++ b/.dockerignore @@ -27,7 +27,7 @@ CNAME install.sh SECURITY.md tsconfig.json - +/tmp ### .gitignore content (commented rules are duplicated) diff --git a/.gitignore b/.gitignore index 2bf60f7c..0863015d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ dist-ssr /private /out +/tmp diff --git a/extra/download-dist.js b/extra/download-dist.js new file mode 100644 index 00000000..0a08b7f9 --- /dev/null +++ b/extra/download-dist.js @@ -0,0 +1,57 @@ +console.log("Downloading dist"); +const https = require("https"); +const tar = require("tar"); + +const packageJSON = require("../package.json"); +const fs = require("fs"); +const version = packageJSON.version; + +const filename = "dist.tar.gz"; + +const url = `https://github.com/louislam/uptime-kuma/releases/download/${version}/${filename}`; +download(url); + +function download(url) { + console.log(url); + + https.get(url, (response) => { + if (response.statusCode === 200) { + console.log("Extracting dist..."); + + if (fs.existsSync("./dist")) { + + if (fs.existsSync("./dist-backup")) { + fs.rmdirSync("./dist-backup", { + recursive: true + }); + } + + fs.renameSync("./dist", "./dist-backup"); + } + + const tarStream = tar.x({ + cwd: "./", + }); + + tarStream.on("close", () => { + fs.rmdirSync("./dist-backup", { + recursive: true + }); + console.log("Done"); + }); + + tarStream.on("error", () => { + if (fs.existsSync("./dist-backup")) { + fs.renameSync("./dist-backup", "./dist"); + } + console.log("Done"); + }); + + response.pipe(tarStream); + } else if (response.statusCode === 302) { + download(response.headers.location); + } else { + console.log("dist not found"); + } + }); +} diff --git a/package-lock.json b/package-lock.json index 34615b9d..60f9a7bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,6 +40,7 @@ "redbean-node": "0.1.2", "socket.io": "~4.2.0", "socket.io-client": "~4.2.0", + "tar": "^6.1.11", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", "timezones-list": "~3.0.1", diff --git a/package.json b/package.json index 17bfe975..cf22cd99 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,8 @@ "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", "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.7.3 && npm install --legacy-peer-deps && node node_modules/esbuild/install.js && npm run build && npm prune", + "setup": "git checkout 1.7.3 && npm ci --production && npm run download-dist", + "download-dist": "node extra/download-dist.js", "update-version": "node extra/update-version.js", "mark-as-nightly": "node extra/mark-as-nightly.js", "reset-password": "node extra/reset-password.js", @@ -77,6 +78,7 @@ "redbean-node": "0.1.2", "socket.io": "~4.2.0", "socket.io-client": "~4.2.0", + "tar": "^6.1.11", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", "timezones-list": "~3.0.1", From d3517e76c1a73f3623d22f2caecf127d1926caa5 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 3 Oct 2021 15:27:15 +0800 Subject: [PATCH 02/14] change to npm ci --- dockerfile | 2 +- dockerfile-alpine | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dockerfile b/dockerfile index 969d5ff3..3746722f 100644 --- a/dockerfile +++ b/dockerfile @@ -2,7 +2,7 @@ FROM louislam/uptime-kuma:base-debian AS build WORKDIR /app COPY . . -RUN npm install --legacy-peer-deps && \ +RUN npm ci && \ npm run build && \ npm prune --production && \ chmod +x /app/extra/entrypoint.sh diff --git a/dockerfile-alpine b/dockerfile-alpine index 178afcab..8cbfbe23 100644 --- a/dockerfile-alpine +++ b/dockerfile-alpine @@ -2,7 +2,7 @@ FROM louislam/uptime-kuma:base-alpine AS build WORKDIR /app COPY . . -RUN npm install --legacy-peer-deps && \ +RUN npm ci && \ npm run build && \ npm prune --production && \ chmod +x /app/extra/entrypoint.sh From 5c8956265048aee726f236bd83b4988a592242f4 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 10 Oct 2021 02:23:27 +0800 Subject: [PATCH 03/14] not allow lower than 20s for demo mode --- server/model/monitor.js | 8 ++++++++ server/server.js | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index a50baccf..b7b24971 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -11,6 +11,7 @@ const { tcping, ping, dnsResolve, checkCertificate, checkStatusCode, getTotalCli const { R } = require("redbean-node"); const { BeanModel } = require("redbean-node/dist/bean-model"); const { Notification } = require("../notification"); +const { demoMode } = require("../server"); const version = require("../../package.json").version; /** @@ -334,6 +335,13 @@ class Monitor extends BeanModel { previousBeat = bean; if (! this.isStop) { + + if (demoMode) { + if (beatInterval < 20) { + beatInterval = 20; + } + } + this.heartbeatInterval = setTimeout(beat, beatInterval * 1000); } diff --git a/server/server.js b/server/server.js index ddd68695..984e73ad 100644 --- a/server/server.js +++ b/server/server.js @@ -66,12 +66,13 @@ const sslCert = process.env.SSL_CERT || args["ssl-cert"] || undefined; // Demo Mode? const demoMode = args["demo"] || false; +exports.demoMode = demoMode; if (demoMode) { console.log("==== Demo Mode ===="); } -console.log("Creating express and socket.io instance") +console.log("Creating express and socket.io instance"); const app = express(); let server; From 56ae6f6117809d5d4c552ce3a5cfb50abed7b388 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 10 Oct 2021 02:36:20 +0800 Subject: [PATCH 04/14] fix demoMode export --- server/model/monitor.js | 1 + server/server.js | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index b7b24971..3c9e79b5 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -338,6 +338,7 @@ class Monitor extends BeanModel { if (demoMode) { if (beatInterval < 20) { + console.log("beat interval too low, reset to 20s"); beatInterval = 20; } } diff --git a/server/server.js b/server/server.js index 984e73ad..cdbb447a 100644 --- a/server/server.js +++ b/server/server.js @@ -1,12 +1,18 @@ console.log("Welcome to Uptime Kuma"); +const args = require("args-parser")(process.argv); +const { sleep, debug, getRandomInt } = require("../src/util"); + +debug(args); if (! process.env.NODE_ENV) { process.env.NODE_ENV = "production"; } -console.log("Node Env: " + process.env.NODE_ENV); +// Demo Mode? +const demoMode = args["demo"] || false; +exports.demoMode = demoMode; -const { sleep, debug, TimeLogger, getRandomInt } = require("../src/util"); +console.log("Node Env: " + process.env.NODE_ENV); console.log("Importing Node libraries"); const fs = require("fs"); @@ -50,8 +56,6 @@ const { basicAuth } = require("./auth"); const { login } = require("./auth"); const passwordHash = require("./password-hash"); -const args = require("args-parser")(process.argv); - const checkVersion = require("./check-version"); console.info("Version: " + checkVersion.version); @@ -64,10 +68,6 @@ const port = parseInt(process.env.PORT || args.port || 3001); const sslKey = process.env.SSL_KEY || args["ssl-key"] || undefined; const sslCert = process.env.SSL_CERT || args["ssl-cert"] || undefined; -// Demo Mode? -const demoMode = args["demo"] || false; -exports.demoMode = demoMode; - if (demoMode) { console.log("==== Demo Mode ===="); } From d6f7be91123450f830deab62e8f9b4a119649e6c Mon Sep 17 00:00:00 2001 From: Lukas <35193662+NixNotCastey@users.noreply.github.com> Date: Sun, 10 Oct 2021 00:38:19 +0200 Subject: [PATCH 05/14] Translated all missing texts and updated few of previously translated. --- src/languages/pl.js | 233 ++++++++++++++++++++++++++++++-------------- 1 file changed, 158 insertions(+), 75 deletions(-) diff --git a/src/languages/pl.js b/src/languages/pl.js index 05101c6a..2b083527 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -1,38 +1,49 @@ export default { languageName: "Polski", - checkEverySecond: "Sprawdzam co {0} sekund.", - retriesDescription: "Maksymalna liczba powtórzeń, zanim usługa zostanie oznaczona jako wyłączona i zostanie wysłane powiadomienie", + checkEverySecond: "Sprawdzaj co {0} sekund", + retryCheckEverySecond: "Ponawiaj co {0} sekund", + retriesDescription: "Maksymalna liczba powtórzeń, zanim usługa zostanie oznaczona jako niedostępna i zostanie wysłane powiadomienie", ignoreTLSError: "Ignoruj błąd TLS/SSL dla stron HTTPS", upsideDownModeDescription: "Odwróć status do góry nogami. Jeśli usługa jest osiągalna, to jest oznaczona jako niedostępna.", maxRedirectDescription: "Maksymalna liczba przekierowań do wykonania. Ustaw na 0, aby wyłączyć przekierowania.", - acceptedStatusCodesDescription: "Wybierz kody stanu, które są uważane za udaną odpowiedź.", + acceptedStatusCodesDescription: "Wybierz kody stanu, które są uważane za prawidłową odpowiedź.", passwordNotMatchMsg: "Powtórzone hasło nie pasuje.", - notificationDescription: "Proszę przypisać powiadomienie do monitora(ów), aby zadziałało.", + notificationDescription: "Proszę przypisać powiadomienie do monitora(ów), aby działało.", keywordDescription: "Wyszukiwanie słów kluczowych w zwykłym html lub odpowiedzi JSON. Wielkość liter ma znaczenie.", - pauseDashboardHome: "Pauza", + pauseDashboardHome: "Wstrzymaj", deleteMonitorMsg: "Czy na pewno chcesz usunąć ten monitor?", deleteNotificationMsg: "Czy na pewno chcesz usunąć to powiadomienie dla wszystkich monitorów?", resoverserverDescription: "Cloudflare jest domyślnym serwerem, możesz zmienić serwer resolver w każdej chwili.", - rrtypeDescription: "Wybierz RR-Type który chcesz monitorować", - pauseMonitorMsg: "Czy na pewno chcesz wstrzymać?", + rrtypeDescription: "Wybierz rodzaj rekordu, który chcesz monitorować.", + pauseMonitorMsg: "Czy na pewno chcesz wstrzymać monitorowanie?", + enableDefaultNotificationDescription: "Dla każdego nowego monitora to powiadomienie będzie domyślnie włączone. Nadal możesz wyłączyć powiadomienia osobno dla każdego monitora.", + clearEventsMsg: "Jesteś pewien, że chcesz wyczyścić historię zdarzeń dla tego monitora?", + clearHeartbeatsMsg: "Jesteś pewien, że chcesz wyczyścić historię bicia serca dla tego monitora?", + confirmClearStatisticsMsg: "Jesteś pewien, że chcesz usunąć WSZYSTKIE statystyki?", + importHandleDescription: "Wybierz 'Pomiń istniejące', jeśli chcesz pominąć każdy monitor lub powiadomienie o tej samej nazwie. 'Nadpisz' spowoduje usunięcie każdego istniejącego monitora i powiadomienia.", + confirmImportMsg: "Czy na pewno chcesz zaimportować kopię zapasową? Upewnij się, że wybrałeś właściwą opcję importu.", + twoFAVerifyLabel: "Proszę podaj swój token 2FA, aby sprawdzić czy 2FA działa.", + tokenValidSettingsMsg: "Token jest prawdiłowy! Teraz możesz zapisać ustawienia 2FA.", + confirmEnableTwoFAMsg: "Jesteś pewien, że chcesz włączyć 2FA?", + confirmDisableTwoFAMsg: "Jesteś pewien, że chcesz wyłączyć 2FA?", Settings: "Ustawienia", Dashboard: "Panel", - "New Update": "Nowa aktualizacja", + "New Update": "Nowa Aktualizacja", Language: "Język", Appearance: "Wygląd", Theme: "Motyw", General: "Ogólne", Version: "Wersja", - "Check Update On GitHub": "Sprawdź aktualizację na GitHub.", + "Check Update On GitHub": "Sprawdź aktualizację na GitHub", List: "Lista", Add: "Dodaj", - "Add New Monitor": "Dodaj nowy monitor", - "Quick Stats": "Szybkie statystyki", + "Add New Monitor": "Dodaj Monitor", + "Quick Stats": "Szybki podgląd statystyk", Up: "Online", Down: "Offline", - Pending: "Oczekujący", + Pending: "Oczekuje", Unknown: "Nieznane", - Pause: "Pauza", + Pause: "Wstrzymane", Name: "Nazwa", Status: "Status", DateTime: "Data i godzina", @@ -41,42 +52,43 @@ export default { Resume: "Wznów", Edit: "Edytuj", Delete: "Usuń", - Current: "aktualny", - Uptime: "Czas pracy", - "Cert Exp.": "Wygaśnięcie certyfikatu", + Current: "Aktualny", + Uptime: "Czas Pracy", + "Cert Exp.": "Certyfikat Wygasa", days: "dni", day: "dzień", "-day": " dni", hour: "godzina", - "-hour": " godziny", + "-hour": " godzin", Response: "Odpowiedź", Ping: "Ping", - "Monitor Type": "Typ monitora", + "Monitor Type": "Rodzaj Monitora", Keyword: "Słowo kluczowe", - "Friendly Name": "Przyjazna nazwa", + "Friendly Name": "Przyjazna Nazwa", URL: "URL", - Hostname: "Nazwa hosta", + Hostname: "Hostname", Port: "Port", - "Heartbeat Interval": "Interwał bicia serca", + "Heartbeat Interval": "Czętotliwość bicia serca", Retries: "Prób", + "Heartbeat Retry Interval": "Częstotliwość ponawiania bicia serca", Advanced: "Zaawansowane", - "Upside Down Mode": "Tryb do góry nogami", - "Max. Redirects": "Maks. przekierowania", + "Upside Down Mode": "Tryb odwrócony", + "Max. Redirects": "Maks. Przekierowań", "Accepted Status Codes": "Akceptowane kody statusu", Save: "Zapisz", Notifications: "Powiadomienia", "Not available, please setup.": "Niedostępne, proszę skonfigurować.", - "Setup Notification": "Konfiguracja powiadomień", + "Setup Notification": "Skonfiguruj Powiadomienie", Light: "Jasny", Dark: "Ciemny", Auto: "Automatyczny", "Theme - Heartbeat Bar": "Motyw - pasek bicia serca", - Normal: "Normalne", + Normal: "Domyślne", Bottom: "Na dole", None: "Brak", Timezone: "Strefa czasowa", "Search Engine Visibility": "Widoczność w wyszukiwarce", - "Allow indexing": "Pozwól na indeksowanie", + "Allow indexing": "Zezwól na indeksowanie", "Discourage search engines from indexing site": "Zniechęcaj wyszukiwarki do indeksowania strony", "Change Password": "Zmień hasło", "Current Password": "Aktualne hasło", @@ -84,54 +96,52 @@ export default { "Repeat New Password": "Powtórz nowe hasło", "Update Password": "Zaktualizuj hasło", "Disable Auth": "Wyłącz autoryzację", - "Enable Auth": "Włącz autoryzację ", - Logout: "Wyloguj się", + "Enable Auth": "Włącz autoryzację", + Logout: "Wyloguj", Leave: "Zostaw", "I understand, please disable": "Rozumiem, proszę wyłączyć", - Confirm: "Potwierdź", + Confirm: "Potiwerdź", Yes: "Tak", No: "Nie", Username: "Nazwa użytkownika", Password: "Hasło", "Remember me": "Zapamiętaj mnie", - Login: "Zaloguj się", + Login: "Zaloguj", "No Monitors, please": "Brak monitorów, proszę", - "add one": "dodaj jeden", - "Notification Type": "Typ powiadomienia", + "add one": "dodać jeden", + "Notification Type": "Rodzaj powiadomienia", Email: "Email", Test: "Test", "Certificate Info": "Informacje o certyfikacie", - "Resolver Server": "Server resolver", + "Resolver Server": "Serwer rozwiązywania nazw", "Resource Record Type": "Typ rekordu zasobów", "Last Result": "Ostatni wynik", "Create your admin account": "Utwórz swoje konto administratora", "Repeat Password": "Powtórz hasło", - respTime: "Czas odp. (ms)", + "Import Backup": "Importuj Kopię", + "Export Backup": "Eksportuj Kopię", + Export: "Eksportuj", + Import: "Importuj", + respTime: "Czas Odp. (ms)", notAvailableShort: "N/A", + "Default enabled": "Włącz domyślnie", + "Apply on all existing monitors": "Zastosuj do istniejących monitorów", Create: "Stwórz", - clearEventsMsg: "Jesteś pewien, że chcesz usunąć wszystkie monitory dla tej strony?", - clearHeartbeatsMsg: "Jesteś pewien, że chcesz usunąć wszystkie bicia serca dla tego monitora?", - confirmClearStatisticsMsg: "Jesteś pewien, że chcesz usunąć WSZYSTKIE statystyki?", - "Clear Data": "Usuń dane", + "Clear Data": "Usuń Dane", Events: "Wydarzenia", Heartbeats: "Bicia serca", - "Auto Get": "Pobierz automatycznie", - enableDefaultNotificationDescription: "Dla każdego nowego monitora to powiadomienie będzie domyślnie włączone. Nadal możesz wyłączyć powiadomienia osobno dla każdego monitora.", - "Default enabled": "Domyślnie włączone", - "Also apply to existing monitors": "Również zastosuj do obecnych monitorów", - Export: "Eksportuj", - Import: "Importuj", + "Auto Get": "Wykryj", backupDescription: "Możesz wykonać kopię zapasową wszystkich monitorów i wszystkich powiadomień do pliku JSON.", backupDescription2: "PS: Historia i dane zdarzeń nie są uwzględniane.", backupDescription3: "Poufne dane, takie jak tokeny powiadomień, są zawarte w pliku eksportu, prosimy o ostrożne przechowywanie.", - alertNoFile: "Proszę wybrać plik do importu.", + alertNoFile: "Wybierz plik do importu.", alertWrongFileType: "Proszę wybrać plik JSON.", - twoFAVerifyLabel: "Proszę podaj swój token 2FA, aby sprawdzić czy 2FA działa", - tokenValidSettingsMsg: "Token jest poprawny! Możesz teraz zapisać ustawienia 2FA.", - confirmEnableTwoFAMsg: "Jesteś pewien że chcesz włączyć 2FA?", - confirmDisableTwoFAMsg: "Jesteś pewien że chcesz wyłączyć 2FA?", - "Apply on all existing monitors": "Zastosuj do wszystki obecnych monitorów", - "Verify Token": "Weryfikuj token", + "Clear all statistics": "Wyczyść wszystkie statystyki", + "Skip existing": "Pomiń istniejące", + Overwrite: "Nadpisz", + Options: "Opcje", + "Keep both": "Zachowaj oba", + "Verify Token": "Zweryfikuj token", "Setup 2FA": "Konfiguracja 2FA", "Enable 2FA": "Włącz 2FA", "Disable 2FA": "Wyłącz 2FA", @@ -141,17 +151,6 @@ export default { Inactive: "Wyłączone", Token: "Token", "Show URI": "Pokaż URI", - "Clear all statistics": "Wyczyść wszystkie statystyki", - retryCheckEverySecond: "Ponawiaj co {0} sekund.", - importHandleDescription: "Wybierz 'Pomiń istniejące', jeśli chcesz pominąć każdy monitor lub powiadomienie o tej samej nazwie. 'Nadpisz' spowoduje usunięcie każdego istniejącego monitora i powiadomienia.", - confirmImportMsg: "Czy na pewno chcesz zaimportować kopię zapasową? Upewnij się, że wybrałeś właściwą opcję importu.", - "Heartbeat Retry Interval": "Częstotliwość ponawiania bicia serca", - "Import Backup": "Importuj kopię zapasową", - "Export Backup": "Eksportuj kopię zapasową", - "Skip existing": "Pomiń istniejące", - Overwrite: "Nadpisz", - Options: "Opcje", - "Keep both": "Zachowaj oba", Tags: "Tagi", "Add New below or Select...": "Dodaj nowy poniżej lub wybierz...", "Tag with this name already exist.": "Tag o tej nazwie już istnieje.", @@ -169,33 +168,117 @@ export default { "Search...": "Szukaj...", "Avg. Ping": "Średni ping", "Avg. Response": "Średnia odpowiedź", - "Entry Page": "Strona główna", + "Entry Page": "Strona startowa", statusPageNothing: "Nic tu nie ma, dodaj grupę lub monitor.", "No Services": "Brak usług", - "All Systems Operational": "Wszystkie systemy działają", - "Partially Degraded Service": "Częściowy błąd usługi", - "Degraded Service": "Błąd usługi", + "All Systems Operational": "Wszystkie systemy działają poprawnie", + "Partially Degraded Service": "Część usług nie działa", + "Degraded Service": "Usługa nie działa", "Add Group": "Dodaj grupę", "Add a monitor": "Dodaj monitor", "Edit Status Page": "Edytuj stronę statusu", "Go to Dashboard": "Idź do panelu", "Status Page": "Strona statusu", - telegram: "Telegram", - webhook: "Webhook", - smtp: "Email (SMTP)", - discord: "Discord", - teams: "Microsoft Teams", - signal: "Signal", - gotify: "Gotify", - slack: "Slack", + // Start notification form + defaultNotificationName: "Moje powiadomienie {notification} ({number})", + here: "tutaj", + "Required": "Wymagane", + "telegram": "Telegram", + "Bot Token": "Token Bota", + "You can get a token from": "Token można uzyskać z", + "Chat ID": "Identyfikator Czatu", + supportTelegramChatID: "Czat wsprarcia technicznego / Bezpośrednia Rozmowa / Czat Grupowy", + wayToGetTelegramChatID: "Możesz uzyskać swój identyfikator czatu, wysyłając wiadomość do bota i przechodząc pod ten adres URL, aby wyświetlić identyfikator czatu:", + "YOUR BOT TOKEN HERE": "TWOJ TOKEN BOTA", + chatIDNotFound: "Identyfikator czatu nie znaleziony, najpierw napisz do bota", + "webhook": "Webhook", + "Post URL": "Adres URL", + "Content Type": "Rodzaj danych", + webhookJsonDesc: "{0} jest dobry w przypadku serwerów HTTP, takich jak express.js", + webhookFormDataDesc: "{multipart} jest dobry dla PHP, musisz jedynie przetowrzyć dane przez {decodeFunction}", + "smtp": "Email (SMTP)", + secureOptionNone: "Brak / STARTTLS (25, 587)", + secureOptionTLS: "TLS (465)", + "Ignore TLS Error": "Zignrouj Błędy TLS", + "From Email": "Nadawca (OD)", + "To Email": "Odbiorca (DO)", + smtpCC: "DW", + smtpBCC: "UDW", + "discord": "Discord", + "Discord Webhook URL": "URL Webhook Discorda", + wayToGetDiscordURL: "Możesz go uzyskać przechodząc do Ustawienia Serwera -> Integracje -> Tworzenie Webhooka", + "Bot Display Name": "Wyświetlana Nazwa Bota", + "Prefix Custom Message": "Własny Początek Wiadomości", + "Hello @everyone is...": "Hej {'@'}everyone ...", + "teams": "Microsoft Teams", + "Webhook URL": "URL Webhooka", + wayToGetTeamsURL: "You can learn how to create a webhook url {0}.", + "signal": "Signal", + "Number": "Numer", + "Recipients": "Odbiorcy", + needSignalAPI: "Musisz posiadać klienta Signal z REST API.", + wayToCheckSignalURL: "W celu dowiedzenia się, jak go skonfigurować, odwiedź poniższy link:", + signalImportant: "UWAGA: Nie można mieszać nazw grup i numerów odbiorców!", + "gotify": "Gotify", + "Application Token": "Token Aplikacji", + "Server URL": "Server URL", + "Priority": "Priorytet", + "slack": "Slack", + "Icon Emoji": "Ikona Emoji", + "Channel Name": "Nazwa Kanału", + "Uptime Kuma URL": "Adres Uptime Kuma", + aboutWebhooks: "Więcej informacji na temat webhooków: {0}", + aboutChannelName: "Podaj nazwę kanału {0} w polu Nazwa Kanału, jeśli chcesz pominąć kanał webhooka. Np.: #inny-kanal", + aboutKumaURL: "Jeśli pozostawisz pole Adres Uptime Kuma puste, domyślnie będzie to strona projektu na Github.", + emojiCheatSheet: "Ściąga Emoji: {0}", "rocket.chat": "Rocket.chat", pushover: "Pushover", pushy: "Pushy", octopush: "Octopush", promosms: "PromoSMS", lunasea: "LunaSea", - apprise: "Apprise (obsługuje 50+ usług powiadamiania)", + apprise: "Apprise (Obsługuje 50+ usług powiadomień)", pushbullet: "Pushbullet", line: "Line Messenger", mattermost: "Mattermost", + "User Key": "Klucz Użytkownika", + "Device": "Urządzenie", + "Message Title": "Tytuł Wiadomości", + "Notification Sound": "Dźwięk Powiadomienia", + "More info on:": "Więcej informacji na: {0}", + pushoverDesc1: "Priorytet awaryjny (2) ma domyślny 30-sekundowy limit czasu między kolejnymi próbami i wygaśnie po 1 godzinie.", + pushoverDesc2: "Jeśli chcesz wysyłać powiadomienia na różne urządzenia, wypełnij pole Urządzenie.", + "SMS Type": "Rodzaj SMS", + octopushTypePremium: "Premium (Szybki - rekomendowany dla powiadomień)", + octopushTypeLowCost: "Low Cost (Wolny, czasami blokowany przez operatorów)", + "Check octopush prices": "Sprawdź ceny Octopush {0}.", + octopushPhoneNumber: "Numer Telefonu (Format międzynarodowy np.: +33612345678)", + octopushSMSSender: "Nadawca SMS : 3-11 znaków alfanumerycznych i spacji (a-zA-Z0-9)", + "LunaSea Device ID": "Idetyfikator Urządzenia LunaSea", + "Apprise URL": "URL Apprise", + "Example:": "Przykład: {0}", + "Read more:": "Czytaj Dalej: {0}", + "Status:": "Status: {0}", + "Read more": "Czytaj dalej", + appriseInstalled: "Apprise jest zostało zainstalowane.", + appriseNotInstalled: "Apprise nie zostało zainstalowane. {0}", + "Access Token": "Token Dostępu", + "Channel access token": "Token Dostępu Kanału", + "Line Developers Console": "Konsola Dewelopersja Line", + lineDevConsoleTo: "Konsola Dewelopersja Line - {0}", + "Basic Settings": "Ustawienia Ogólne", + "User ID": "Idetyfikator Użytkownika", + "Messaging API": "API Wiadomości", + wayToGetLineChannelToken: "Najpierw uzyskaj dostęp do {0}, utwórz dostawcę i kanał (Messaging API), a następnie możesz uzyskać token dostępu do kanału i identyfikator użytkownika z wyżej wymienionych pozycji menu.", + "Icon URL": "Adres Ikony", + aboutIconURL: "You can provide a link to a picture in \"Icon URL\" to override the default profile picture. Will not be used if Icon Emoji is set.", + aboutMattermostChannelName: "You can override the default channel that webhook posts to by entering the channel name into \"Channel Name\" field. This needs to be enabled in Mattermost webhook settings. Ex: #other-channel", + "matrix": "Matrix", + promosmsTypeEco: "SMS ECO - Tanie, lecz wolne. Dostępne tylko w Polsce", + promosmsTypeFlash: "SMS FLASH - Wiadomość automatycznie wyświetli się na urządzeniu. Dostępne tylko w Polsce.", + promosmsTypeFull: "SMS FULL - Szybkie i dostępne międzynarodowo. Wersja premium usługi, która pozwala min. ustawić własną nazwę nadawcy.", + promosmsTypeFull: "SMS SPEED - Wysyłka priorytetowa, posiada wszystkie zalety SMS FULL", + promosmsPhoneNumber: "Numer Odbiorcy", + promosmsSMSSender: "Nadawca SMS (Wcześniej zatwierdzone nazwy z panelu PromoSMS)", + // End notification form }; From 54f864a1bb868c49955086b7b790eab3537ae02e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B0=E9=80=B8Cary?= Date: Sun, 10 Oct 2021 10:04:07 +0800 Subject: [PATCH 06/14] =?UTF-8?q?Update=20Simplified=20Chinese=20Language?= =?UTF-8?q?=EF=BC=88=E6=9B=B4=E6=96=B0=E7=AE=80=E4=BD=93=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/languages/zh-CN.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/zh-CN.js b/src/languages/zh-CN.js index 40db94e2..a7f81950 100644 --- a/src/languages/zh-CN.js +++ b/src/languages/zh-CN.js @@ -179,7 +179,7 @@ export default { "Add a monitor": "添加监控项", "Edit Status Page": "编辑状态页", "Go to Dashboard": "前往仪表盘", - "Status Page": "Status Page", + "Status Page": "状态页", telegram: "Telegram", webhook: "Webhook", smtp: "Email (SMTP)", From 93a021d027dca3b3e972e2c95360e86231d9edbb Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 10 Oct 2021 12:20:15 +0800 Subject: [PATCH 07/14] Update SECURITY.md --- SECURITY.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/SECURITY.md b/SECURITY.md index d2f000ed..ae052e20 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,11 +5,23 @@ Use this section to tell people about which versions of your project are currently being supported with security updates. +#### Uptime Kuma Version: | Version | Supported | | ------- | ------------------ | | 1.7.X | :white_check_mark: | | < 1.7 | ❌ | +#### Upgradable Docker Tag: +| Tag | Supported | +| ------- | ------------------ | +| 1 | :white_check_mark: | +| 1-debian | :white_check_mark: | +| 1-alpine | :white_check_mark: | +| latest | :white_check_mark: | +| debian | :white_check_mark: | +| alpine | :white_check_mark: | +| All other tags | ❌ | + ## Reporting a Vulnerability Please report security issues to uptime@kuma.pet. From d6753b883376ced8517fc8b3517e4464ce8f7bea Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 10 Oct 2021 12:20:29 +0800 Subject: [PATCH 08/14] Update SECURITY.md --- SECURITY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index ae052e20..4a285723 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,13 +5,13 @@ Use this section to tell people about which versions of your project are currently being supported with security updates. -#### Uptime Kuma Version: +#### Uptime Kuma Versions: | Version | Supported | | ------- | ------------------ | | 1.7.X | :white_check_mark: | | < 1.7 | ❌ | -#### Upgradable Docker Tag: +#### Upgradable Docker Tags: | Tag | Supported | | ------- | ------------------ | | 1 | :white_check_mark: | From 272d4bde4581d9b977f5fec2fe97186aa1afa0a4 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 10 Oct 2021 13:19:10 +0800 Subject: [PATCH 09/14] find promossms language key typo --- src/languages/en.js | 2 +- src/languages/pl.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/en.js b/src/languages/en.js index 2ce8f46b..119b558e 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -277,7 +277,7 @@ export default { promosmsTypeEco: "SMS ECO - cheap but slow and often overloaded. Limited only to Polish recipients.", promosmsTypeFlash: "SMS FLASH - Message will automatically show on recipient device. Limited only to Polish recipients.", promosmsTypeFull: "SMS FULL - Premium tier of SMS, You can use Your Sender Name (You need to register name first). Reliable for alerts.", - promosmsTypeFull: "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).", + promosmsTypeSpeed: "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).", promosmsPhoneNumber: "Phone number (for Polish recipient You can skip area codes)", promosmsSMSSender: "SMS Sender Name : Pre-registred name or one of defaults: InfoSMS, SMS Info, MaxSMS, INFO, SMS", // End notification form diff --git a/src/languages/pl.js b/src/languages/pl.js index 2b083527..f6a32dc6 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -277,7 +277,7 @@ export default { promosmsTypeEco: "SMS ECO - Tanie, lecz wolne. Dostępne tylko w Polsce", promosmsTypeFlash: "SMS FLASH - Wiadomość automatycznie wyświetli się na urządzeniu. Dostępne tylko w Polsce.", promosmsTypeFull: "SMS FULL - Szybkie i dostępne międzynarodowo. Wersja premium usługi, która pozwala min. ustawić własną nazwę nadawcy.", - promosmsTypeFull: "SMS SPEED - Wysyłka priorytetowa, posiada wszystkie zalety SMS FULL", + promosmsTypeSpeed: "SMS SPEED - Wysyłka priorytetowa, posiada wszystkie zalety SMS FULL", promosmsPhoneNumber: "Numer Odbiorcy", promosmsSMSSender: "Nadawca SMS (Wcześniej zatwierdzone nazwy z panelu PromoSMS)", // End notification form From 4ba20254519d863df1387b3b297b6642039e8c0c Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 10 Oct 2021 14:40:19 +0800 Subject: [PATCH 10/14] minor --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 93b03ac6..55b7da27 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -64,7 +64,7 @@ It changed my current workflow and require further studies. 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-composer file. Just map the volume and expose the port, then good to go +- 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. - Easy to use @@ -74,7 +74,7 @@ I personally do not like something need to learn so much and need to config so m - Follow `.editorconfig` - Follow ESLint -## Name convention +# Name convention - Javascript/Typescript: camelCaseType - SQLite: underscore_type From 2286f78f574ff56b787b56b558c5f56d9a09fd97 Mon Sep 17 00:00:00 2001 From: Louis Date: Sun, 10 Oct 2021 16:37:53 +0800 Subject: [PATCH 11/14] update to 1.8.0 --- package.json | 8 ++++---- server/prometheus.js | 31 ++++++++++++++++--------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index ae8ed1b1..6cb8d9db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uptime-kuma", - "version": "1.7.3", + "version": "1.8.0", "license": "MIT", "repository": { "type": "git", @@ -29,13 +29,13 @@ "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.7.3-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.7.3 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.7.3-debian --target release . --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-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", "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.7.3 && npm ci --production && npm run download-dist", + "setup": "git checkout 1.8.0 && npm ci --production && npm run download-dist", "download-dist": "node extra/download-dist.js", "update-version": "node extra/update-version.js", "mark-as-nightly": "node extra/mark-as-nightly.js", diff --git a/server/prometheus.js b/server/prometheus.js index c27f87f0..870581d2 100644 --- a/server/prometheus.js +++ b/server/prometheus.js @@ -6,7 +6,7 @@ const commonLabels = [ "monitor_url", "monitor_hostname", "monitor_port", -] +]; const monitor_cert_days_remaining = new PrometheusClient.Gauge({ name: "monitor_cert_days_remaining", @@ -41,45 +41,46 @@ class Prometheus { monitor_url: monitor.url, monitor_hostname: monitor.hostname, monitor_port: monitor.port - } + }; } update(heartbeat, tlsInfo) { + if (typeof tlsInfo !== "undefined") { try { - let is_valid = 0 + let is_valid = 0; if (tlsInfo.valid == true) { - is_valid = 1 + is_valid = 1; } else { - is_valid = 0 + is_valid = 0; } - monitor_cert_is_valid.set(this.monitorLabelValues, is_valid) + monitor_cert_is_valid.set(this.monitorLabelValues, is_valid); } catch (e) { - console.error(e) + console.error(e); } try { - monitor_cert_days_remaining.set(this.monitorLabelValues, tlsInfo.certInfo.daysRemaining) + monitor_cert_days_remaining.set(this.monitorLabelValues, tlsInfo.certInfo.daysRemaining); } catch (e) { - console.error(e) + console.error(e); } } try { - monitor_status.set(this.monitorLabelValues, heartbeat.status) + monitor_status.set(this.monitorLabelValues, heartbeat.status); } catch (e) { - console.error(e) + console.error(e); } try { if (typeof heartbeat.ping === "number") { - monitor_response_time.set(this.monitorLabelValues, heartbeat.ping) + monitor_response_time.set(this.monitorLabelValues, heartbeat.ping); } else { // Is it good? - monitor_response_time.set(this.monitorLabelValues, -1) + monitor_response_time.set(this.monitorLabelValues, -1); } } catch (e) { - console.error(e) + console.error(e); } } @@ -87,4 +88,4 @@ class Prometheus { module.exports = { Prometheus -} +}; From cee225bcb26969ebd2100cadca7771c0734f24db Mon Sep 17 00:00:00 2001 From: Louis Date: Sun, 10 Oct 2021 17:55:31 +0800 Subject: [PATCH 12/14] no idea why npm prune --production suddenly not working, switch to npm ci --production --- dockerfile | 2 +- dockerfile-alpine | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dockerfile b/dockerfile index ae935de6..38d585ca 100644 --- a/dockerfile +++ b/dockerfile @@ -6,7 +6,7 @@ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 COPY . . RUN npm ci && \ npm run build && \ - npm prune --production && \ + npm ci --production && \ chmod +x /app/extra/entrypoint.sh diff --git a/dockerfile-alpine b/dockerfile-alpine index a3a079eb..e883031a 100644 --- a/dockerfile-alpine +++ b/dockerfile-alpine @@ -6,7 +6,7 @@ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 COPY . . RUN npm ci && \ npm run build && \ - npm prune --production && \ + npm ci --production && \ chmod +x /app/extra/entrypoint.sh From efd38229301bd8874490a11c00e74c4e7fbdbad8 Mon Sep 17 00:00:00 2001 From: RisedSky Date: Sun, 10 Oct 2021 17:33:02 +0200 Subject: [PATCH 13/14] Update fr-FR.js All the lines corresponds to the English version (sorted correctly) Plus, updated all the translated strings --- src/languages/fr-FR.js | 197 +++++++++++++++++++++++++++++------------ 1 file changed, 140 insertions(+), 57 deletions(-) diff --git a/src/languages/fr-FR.js b/src/languages/fr-FR.js index 9f234f7a..92184e59 100644 --- a/src/languages/fr-FR.js +++ b/src/languages/fr-FR.js @@ -1,5 +1,31 @@ export default { languageName: "Français (France)", + checkEverySecond: "Vérifier toutes les {0} secondes", + retryCheckEverySecond: "Réessayer toutes les {0} secondes.", + retriesDescription: "Nombre d'essais avant que le service soit déclaré hors-ligne.", + ignoreTLSError: "Ignorer les erreurs liées au certificat SSL/TLS", + upsideDownModeDescription: "Si le service est en ligne, il sera alors noté hors-ligne et vice-versa.", + maxRedirectDescription: "Nombre maximal de redirections avant que le service soit noté hors-ligne.", + acceptedStatusCodesDescription: "Codes HTTP considérés comme en ligne", + passwordNotMatchMsg: "Les mots de passe ne correspondent pas", + notificationDescription: "Une fois ajoutée, vous devez l'activer manuellement dans les paramètres de vos hôtes.", + keywordDescription: "Le mot clé sera recherché dans la réponse HTML/JSON reçue du site internet.", + pauseDashboardHome: "Éléments mis en pause", + deleteMonitorMsg: "Êtes-vous sûr de vouloir supprimer cette sonde ?", + deleteNotificationMsg: "Êtes-vous sûr de vouloir supprimer ce type de notifications ? Une fois désactivée, les services qui l'utilisent ne pourront plus envoyer de notifications.", + resoverserverDescription: "Le DNS de cloudflare est utilisé par défaut, mais vous pouvez le changer si vous le souhaitez.", + rrtypeDescription: "Veuillez séléctionner un type d'enregistrement DNS", + pauseMonitorMsg: "Etes vous sur de vouloir mettre en pause cette sonde ?", + enableDefaultNotificationDescription: "Pour chaque nouvelle sonde, cette notification sera activée par défaut. Vous pouvez toujours désactiver la notification séparément pour chaque sonde.", + clearEventsMsg: "Êtes-vous sûr de vouloir supprimer tous les événements pour cette sonde ?", + clearHeartbeatsMsg: "Êtes-vous sûr de vouloir supprimer tous les vérifications pour cette sonde ?", + confirmClearStatisticsMsg: "Êtes-vous sûr de vouloir supprimer tous les statistiques ?", + importHandleDescription: "Choisissez 'Ignorer l'existant' si vous voulez ignorer chaque sonde ou notification portant le même nom. L'option 'Écraser' supprime tous les sondes et notifications existantes.", + confirmImportMsg: "Êtes-vous sûr d'importer la sauvegarde ? Veuillez vous assurer que vous avez sélectionné la bonne option d'importation.", + twoFAVerifyLabel: "Veuillez saisir votre jeton pour vérifier que le système 2FA fonctionne.", + tokenValidSettingsMsg: "Le jeton est valide ! Vous pouvez maintenant sauvegarder les paramètres 2FA.", + confirmEnableTwoFAMsg: "Êtes-vous sûr de vouloir activer le 2FA ?", + confirmDisableTwoFAMsg: "Êtes-vous sûr de vouloir désactiver le 2FA ?", Settings: "Paramètres", Dashboard: "Tableau de bord", "New Update": "Mise à jour disponible", @@ -18,7 +44,6 @@ export default { Pending: "En attente", Unknown: "Inconnu", Pause: "En Pause", - pauseDashboardHome: "Éléments mis en pause", Name: "Nom", Status: "État", DateTime: "Heure", @@ -30,31 +55,26 @@ export default { Current: "Actuellement", Uptime: "Uptime", "Cert Exp.": "Certificat expiré", - days: "Jours", - day: "Jour", - "-day": "Journée", - hour: "Heure", - "-hour": "Heures", - checkEverySecond: "Vérifier toutes les {0} secondes", + days: "jours", + day: "jour", + "-day": "-jours", + hour: "-heure", + "-hour": "-heures", Response: "Temps de réponse", Ping: "Ping", "Monitor Type": "Type de Sonde", Keyword: "Mot-clé", "Friendly Name": "Nom d'affichage", URL: "URL", - Hostname: "Nom d'hôte", + Hostname: "Nom d'hôte / adresse IP", Port: "Port", "Heartbeat Interval": "Intervale de vérification", Retries: "Essais", - retriesDescription: "Nombre d'essais avant que le service soit déclaré hors-ligne.", + "Heartbeat Retry Interval": "Réessayer l'intervale de vérification", Advanced: "Avancé", - ignoreTLSError: "Ignorer les erreurs liées au certificat SSL/TLS", "Upside Down Mode": "Mode inversé", - upsideDownModeDescription: "Si le service est en ligne, il sera alors noté hors-ligne et vice-versa.", "Max. Redirects": "Nombre maximum de redirections", - maxRedirectDescription: "Nombre maximal de redirections avant que le service soit noté hors-ligne.", - "Accepted Status Codes": "Codes HTTP", - acceptedStatusCodesDescription: "Codes HTTP considérés comme en ligne", + "Accepted Status Codes": "Codes HTTP acceptés", Save: "Sauvegarder", Notifications: "Notifications", "Not available, please setup.": "Pas de système de notification disponible, merci de le configurer", @@ -63,9 +83,9 @@ export default { Dark: "Sombre", Auto: "Automatique", "Theme - Heartbeat Bar": "Voir les services surveillés", - Normal: "Général", + Normal: "Normal", Bottom: "En dessous", - None: "Rien", + None: "Aucun", Timezone: "Fuseau Horaire", "Search Engine Visibility": "Visibilité par les moteurs de recherche", "Allow indexing": "Autoriser l'indexation par des moteurs de recherche", @@ -74,14 +94,12 @@ export default { "Current Password": "Mot de passe actuel", "New Password": "Nouveau mot de passe", "Repeat New Password": "Répéter votre nouveau mot de passe", - passwordNotMatchMsg: "Les mots de passe ne correspondent pas", "Update Password": "Mettre à jour le mot de passe", "Disable Auth": "Désactiver l'authentification", "Enable Auth": "Activer l'authentification", Logout: "Se déconnecter", - notificationDescription: "Une fois ajoutée, vous devez l'activer manuellement dans les paramètres de vos hôtes.", Leave: "Quitter", - "I understand, please disable": "J'ai compris, désactivez-le", + "I understand, please disable": "Je comprends, désactivez-le", Confirm: "Confirmer", Yes: "Oui", No: "Non", @@ -94,43 +112,35 @@ export default { "Notification Type": "Type de notification", Email: "Email", Test: "Tester", - keywordDescription: "Le mot clé sera recherché dans la réponse HTML/JSON reçue du site internet.", "Certificate Info": "Informations sur le certificat SSL", - deleteMonitorMsg: "Êtes-vous sûr de vouloir supprimer cette sonde ?", - deleteNotificationMsg: "Êtes-vous sûr de vouloir supprimer ce type de notifications ? Une fois désactivée, les services qui l'utilisent ne pourront plus envoyer de notifications.", "Resolver Server": "Serveur DNS utilisé", "Resource Record Type": "Type d'enregistrement DNS recherché", - resoverserverDescription: "Le DNS de cloudflare est utilisé par défaut, mais vous pouvez le changer si vous le souhaitez.", - rrtypeDescription: "Veuillez séléctionner un type d'enregistrement DNS", - pauseMonitorMsg: "Etes vous sur de vouloir mettre en pause cette sonde ?", "Last Result": "Dernier résultat", "Create your admin account": "Créez votre compte administrateur", "Repeat Password": "Répéter le mot de passe", + "Import Backup": "Importation de la sauvegarde", + "Export Backup": "Exportation de la sauvegarde", + Export: "Exporter", + Import: "Importer", respTime: "Temps de réponse (ms)", notAvailableShort: "N/A", + "Default enabled": "Activé par défaut", + "Apply on all existing monitors": "Appliquer sur toutes les sondes existantes", Create: "Créer", - clearEventsMsg: "Êtes-vous sûr de vouloir supprimer tous les événements pour cette sonde ?", - clearHeartbeatsMsg: "Êtes-vous sûr de vouloir supprimer tous les vérifications pour cette sonde ? Are you sure want to delete all heartbeats for this monitor?", - confirmClearStatisticsMsg: "tes-vous sûr de vouloir supprimer tous les statistiques ?", "Clear Data": "Effacer les données", Events: "Evénements", Heartbeats: "Vérfications", "Auto Get": "Auto Get", - enableDefaultNotificationDescription: "Pour chaque nouvelle sonde, cette notification sera activée par défaut. Vous pouvez toujours désactiver la notification séparément pour chaque sonde.", - "Default enabled": "Activé par défaut", - "Also apply to existing monitors": "S'applique également aux sondes existantes", - Export: "Exporter", - Import: "Importer", backupDescription: "Vous pouvez sauvegarder toutes les sondes et toutes les notifications dans un fichier JSON.", backupDescription2: "PS: Les données relatives à l'historique et aux événements ne sont pas incluses.", backupDescription3: "Les données sensibles telles que les jetons de notification sont incluses dans le fichier d'exportation, veuillez les conserver soigneusement.", alertNoFile: "Veuillez sélectionner un fichier à importer.", alertWrongFileType: "Veuillez sélectionner un fichier JSON à importer.", - twoFAVerifyLabel: "Veuillez saisir votre jeton pour vérifier que le système 2FA fonctionne.", - tokenValidSettingsMsg: "Le jeton est valide ! Vous pouvez maintenant sauvegarder les paramètres 2FA.", - confirmEnableTwoFAMsg: "Êtes-vous sûr de vouloir activer le 2FA ?", - confirmDisableTwoFAMsg: "Êtes-vous sûr de vouloir désactiver le 2FA ?", - "Apply on all existing monitors": "Appliquer sur toutes les sondes existantes", + "Clear all statistics": "Effacer touutes les statistiques", + "Skip existing": "Sauter l'existant", + Overwrite: "Ecraser", + Options: "Options", + "Keep both": "Garder les deux", "Verify Token": "Vérifier le jeton", "Setup 2FA": "Configurer 2FA", "Enable 2FA": "Activer 2FA", @@ -141,17 +151,6 @@ export default { Inactive: "Inactif", Token: "Jeton", "Show URI": "Afficher l'URI", - "Clear all statistics": "Effacer touutes les statistiques", - retryCheckEverySecond: "Réessayer toutes les {0} secondes.", - importHandleDescription: "Choisissez 'Ignorer l'existant' si vous voulez ignorer chaque sonde ou notification portant le même nom. L'option 'Écraser' supprime tous les sondes et notifications existantes.", - confirmImportMsg: "Êtes-vous sûr d'importer la sauvegarde ? Veuillez vous assurer que vous avez sélectionné la bonne option d'importation.", - "Heartbeat Retry Interval": "Réessayer l'intervale de vérification", - "Import Backup": "Importation de la sauvegarde", - "Export Backup": "Exportation de la sauvegarde", - "Skip existing": "Sauter l'existant", - Overwrite: "Ecraser", - Options: "Options", - "Keep both": "Garder les deux", Tags: "Étiquettes", "Add New below or Select...": "Ajouter nouveau ci-dessous ou sélectionner...", "Tag with this name already exist.": "Une étiquette portant ce nom existe déjà.", @@ -180,14 +179,58 @@ export default { "Edit Status Page": "Modifier la page de statut", "Go to Dashboard": "Accéder au tableau de bord", "Status Page": "Status Page", - telegram: "Telegram", - webhook: "Webhook", - smtp: "Email (SMTP)", - discord: "Discord", - teams: "Microsoft Teams", - signal: "Signal", - gotify: "Gotify", - slack: "Slack", + // Start notification form + defaultNotificationName: "Ma notification {notification} numéro ({number})", + here: "ici", + "Required": "Requis", + "telegram": "Telegram", + "Bot Token": "Bot Token", + "You can get a token from": "Vous pouvez avoir un token depuis", + "Chat ID": "Chat ID", + supportTelegramChatID: "Supporte les messages privés / en groupe / l'ID du salon", + wayToGetTelegramChatID: "Vous pouvez obtenir l'ID du chat en envoyant un message avec le bot puis en récupérant l'URL pour voir l'ID du salon:", + "YOUR BOT TOKEN HERE": "VOTRE TOKEN BOT ICI", + chatIDNotFound: "ID du salon introuvable, envoyez un message via le bot avant", + "webhook": "Webhook", + "Post URL": "Post URL", + "Content Type": "Content Type", + webhookJsonDesc: "{0} est bon pour tous les serveurs HTTP modernes comme express.js", + webhookFormDataDesc: "{multipart} est bon pour du PHP, vous avez juste besoin de mettre le json via {decodeFunction}", + "smtp": "Email (SMTP)", + secureOptionNone: "Aucun / STARTTLS (25, 587)", + secureOptionTLS: "TLS (465)", + "Ignore TLS Error": "Ignorer les erreurs TLS", + "From Email": "Depuis l'Email", + "To Email": "Vers l'Email", + smtpCC: "CC", + smtpBCC: "BCC", + "discord": "Discord", + "Discord Webhook URL": "Discord Webhook URL", + wayToGetDiscordURL: "Vous pouvez l'obtenir en allant dans 'Paramètres du Serveur' -> 'Intégrations' -> 'Créer un Webhook'", + "Bot Display Name": "Nom du bot (affiché)", + "Prefix Custom Message": "Prefix Custom Message", + "Hello @everyone is...": "Bonjour {'@'}everyone il...", + "teams": "Microsoft Teams", + "Webhook URL": "Webhook URL", + wayToGetTeamsURL: "Vous pouvez apprendre comment créer un Webhook {0}.", + "signal": "Signal", + "Number": "Numéro", + "Recipients": "Destinataires", + needSignalAPI: "Vous avez besoin d'un client Signal avec l'API REST.", + wayToCheckSignalURL: "Vous pouvez regarder l'URL sur comment le mettre en place:", + signalImportant: "IMPORTANT: Vous ne pouvez pas mixer les groupes et les numéros en destinataires!", + "gotify": "Gotify", + "Application Token": "Application Token", + "Server URL": "Server URL", + "Priority": "Priorité", + "slack": "Slack", + "Icon Emoji": "Icon Emoji", + "Channel Name": "Nom du salon", + "Uptime Kuma URL": "Uptime Kuma URL", + aboutWebhooks: "Plus d'informations sur les Webhooks ici: {0}", + aboutChannelName: "Mettez le nom du salon dans {0} dans Channel Name si vous voulez bypass le salon Webhook. Ex: #autre-salon", + aboutKumaURL: "Si vous laissez l'URL d'Uptime Kuma vierge, elle redirigera vers la page du projet GitHub.", + emojiCheatSheet: "Emoji cheat sheet: {0}", "rocket.chat": "Rocket.chat", pushover: "Pushover", pushy: "Pushy", @@ -198,4 +241,44 @@ export default { pushbullet: "Pushbullet", line: "Line Messenger", mattermost: "Mattermost", + "User Key": "Clé d'utilisateur", + "Device": "Device", + "Message Title": "Titre du message", + "Notification Sound": "Son de notification", + "More info on:": "Plus d'informations sur: {0}", + pushoverDesc1: "Priorité d'urgence (2) a par défaut 30 secondes de délai dépassé entre les tentatives et expierera après 1 heure.", + pushoverDesc2: "Si vous voulez envoyer des notifications sur différents Appareils, remplissez le champ Device.", + "SMS Type": "SMS Type", + octopushTypePremium: "Premium (Rapide - recommandé pour les alertes)", + octopushTypeLowCost: "A bas prix (Lent, bloqué de temps en temps par l'opérateur)", + "Check octopush prices": "Vérifiez les prix d'octopush {0}.", + octopushPhoneNumber: "Numéro de téléphone (format intérn., ex : +33612345678) ", + octopushSMSSender: "Nom de l'envoyer : 3-11 caractères alphanumériques avec espace (a-zA-Z0-9)", + "LunaSea Device ID": "LunaSea Device ID", + "Apprise URL": "Apprise URL", + "Example:": "Exemple: {0}", + "Read more:": "En savoir plus: {0}", + "Status:": "Status: {0}", + "Read more": "En savoir plus", + appriseInstalled: "Apprise est intallé.", + appriseNotInstalled: "Apprise n'est pas intallé. {0}", + "Access Token": "Access Token", + "Channel access token": "Channel access token", + "Line Developers Console": "Line Developers Console", + lineDevConsoleTo: "Line Developers Console - {0}", + "Basic Settings": "Paramètres de base", + "User ID": "Identifiant utilisateur", + "Messaging API": "Messaging API", + wayToGetLineChannelToken: "Premièrement accéder à {0}, créez un Provider et un Salon (Messaging API), puis vous pourrez avoir le Token d'accès du salon ainsi que l'Identifiant utilisateur depuis le même menu.", + "Icon URL": "Icon URL", + aboutIconURL: "Vous pouvez mettre un lien vers l'image dans \"Icon URL\" pour remplacer l'image de profil par défaut. Ne sera pas utilisé si Icon Emoji est défini.", + aboutMattermostChannelName: "Vous pouvez remplacer le salon par défaut que le Webhook utilise en mettant le nom du salon dans le champ \"Channel Name\". Vous aurez besoin de l'activer depuis les paramètres de Mattermost. Ex: #autre-salon", + "matrix": "Matrix", + promosmsTypeEco: "SMS ECO - Pas chère mais lent et souvent surchargé. Limité uniquement aux déstinataires Polonais.", + promosmsTypeFlash: "SMS FLASH - Le message sera automatiquement affiché sur l'appareil du destinataire. Limité uniquement aux déstinataires Polonais.", + promosmsTypeFull: "SMS FULL - Version Premium des SMS, Vous pouvez mettre le nom de l'expéditeur (Vous devez vous enregistrer avant). Fiable pour les alertes.", + promosmsTypeSpeed: "SMS SPEED - La plus haute des priorités dans le système. Très rapide et fiable mais cher (environ le double du prix d'un SMS FULL).", + promosmsPhoneNumber: "Numéro de téléphone (Poiur les déstinataires Polonais, vous pouvez enlever les codes interna.)", + promosmsSMSSender: "SMS Expéditeur : Nom pré-enregistré ou l'un de base: InfoSMS, SMS Info, MaxSMS, INFO, SMS", + // End notification form }; From afb75e07d58adb499e9a92dc328b2abfa5a724c4 Mon Sep 17 00:00:00 2001 From: RisedSky Date: Sun, 10 Oct 2021 17:37:05 +0200 Subject: [PATCH 14/14] Update fr-FR.js Fixed string (Device => Appareil in French) --- src/languages/fr-FR.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/fr-FR.js b/src/languages/fr-FR.js index 92184e59..6d65f375 100644 --- a/src/languages/fr-FR.js +++ b/src/languages/fr-FR.js @@ -242,12 +242,12 @@ export default { line: "Line Messenger", mattermost: "Mattermost", "User Key": "Clé d'utilisateur", - "Device": "Device", + "Device": "Appareil", "Message Title": "Titre du message", "Notification Sound": "Son de notification", "More info on:": "Plus d'informations sur: {0}", pushoverDesc1: "Priorité d'urgence (2) a par défaut 30 secondes de délai dépassé entre les tentatives et expierera après 1 heure.", - pushoverDesc2: "Si vous voulez envoyer des notifications sur différents Appareils, remplissez le champ Device.", + pushoverDesc2: "Si vous voulez envoyer des notifications sur différents Appareils, remplissez le champ 'Device'.", "SMS Type": "SMS Type", octopushTypePremium: "Premium (Rapide - recommandé pour les alertes)", octopushTypeLowCost: "A bas prix (Lent, bloqué de temps en temps par l'opérateur)",