From c4a2ce4e78cf90fc371a62c394f9523b5d62c102 Mon Sep 17 00:00:00 2001 From: Rolf Bachmann <1196109+rolfbachmann@users.noreply.github.com> Date: Tue, 19 Jul 2022 10:57:52 +0200 Subject: [PATCH 01/48] Add authentication support for ntfy --- server/notification-providers/ntfy.js | 11 +++++++++-- src/components/notifications/Ntfy.vue | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/server/notification-providers/ntfy.js b/server/notification-providers/ntfy.js index 21f358f6..17d6d812 100644 --- a/server/notification-providers/ntfy.js +++ b/server/notification-providers/ntfy.js @@ -8,12 +8,19 @@ class Ntfy extends NotificationProvider { async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { let okMsg = "Sent Successfully."; try { - await axios.post(`${notification.ntfyserverurl}`, { + let headers = {}; + if (notification.ntfyusername.length > 0) { + headers = { + "Authorization": "Basic " + Buffer.from(notification.ntfyusername + ":" + notification.ntfypassword).toString("base64"), + }; + } + let data = { "topic": notification.ntfytopic, "message": msg, "priority": notification.ntfyPriority || 4, "title": "Uptime-Kuma", - }); + }; + await axios.post(`${notification.ntfyserverurl}`, data, { headers: headers }); return okMsg; diff --git a/src/components/notifications/Ntfy.vue b/src/components/notifications/Ntfy.vue index d9a83b49..a42dca30 100644 --- a/src/components/notifications/Ntfy.vue +++ b/src/components/notifications/Ntfy.vue @@ -11,7 +11,18 @@ - +
+ +
+ +
+
+
+ +
+ +
+
@@ -19,7 +30,12 @@ `); + head.append(script); + // manifest.json $("link[rel=manifest]").attr("href", `/api/status-page/${statusPage.slug}/manifest.json`); From 7d3cc002ea8fe95c7ca23885052280110e7f5217 Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Fri, 7 Oct 2022 08:55:12 +0000 Subject: [PATCH 32/48] Added greek language --- src/i18n.js | 1 + src/languages/el-GR.js | 585 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 586 insertions(+) create mode 100644 src/languages/el-GR.js diff --git a/src/i18n.js b/src/i18n.js index 8495cd99..4c19eb00 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -34,6 +34,7 @@ const languageList = { "zh-TW": "繁體中文 (台灣)", "uk-UA": "Український", "th-TH": "ไทย", + "el-GR": "Ελληνικά", }; let messages = { diff --git a/src/languages/el-GR.js b/src/languages/el-GR.js new file mode 100644 index 00000000..29af0417 --- /dev/null +++ b/src/languages/el-GR.js @@ -0,0 +1,585 @@ +export default { + languageName: "Ελληνικά", + checkEverySecond: "Έλεγχος κάθε {0} δευτερόλεπτα", + retryCheckEverySecond: "Επανάληψη κάθε {0} δευτερόλεπτα", + resendEveryXTimes: "Επανάληψη αποστολής ειδοποίησης κάθε {0} φορές", + resendDisabled: "Η επανάληψη αποστολής ειδοποίησης είναι απενεργοποιημένη", + retriesDescription: "Μέγιστες επαναλήψεις προτού η υπηρεσία επισημανθεί ως κατω και σταλεί μια ειδοποίηση", + ignoreTLSError: "Παράβλεψη σφάλματος TLS/SSL για ιστότοπους HTTPS", + upsideDownModeDescription: "Αναποδογυρίστε την κατάσταση. Εάν η υπηρεσία είναι προσβάσιμη, είναι ΚΑΤΩ.", + maxRedirectDescription: "Μέγιστος αριθμός redirect που θα ακολουθήσουν. Ρυθμίστε το 0 για να απενεργοποιήσετε τα redirect.", + acceptedStatusCodesDescription: "Επιλέξτε κωδικούς κατάστασης που θεωρούνται επιτυχή.", + passwordNotMatchMsg: "Ο κωδικός δεν ταιριάζει.", + notificationDescription: "Οι ειδοποιήσεις πρέπει να εκχωρηθούν σε μια παρακολούθηση για να λειτουργήσουν.", + keywordDescription: "Αναζήτηση λέξης-κλειδιού σε απλή απόκριση HTML ή JSON. Η αναζήτηση είναι διάκριση πεζών-κεφαλαίων.", + pauseDashboardHome: "Παύση", + deleteMonitorMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την παρακολούθηση;", + deleteNotificationMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την ειδοποίηση για όλες τις παρακολούθησης?", + dnsPortDescription: "Θύρα διακομιστή DNS. Προεπιλογή σε 53. Μπορείτε να αλλάξετε τη θύρα ανά πάσα στιγμή.", + resolverserverDescription: "Το Cloudflare είναι ο προεπιλεγμένος διακομιστής. Μπορείτε να αλλάξετε τον διακομιστή επίλυσης ανά πάσα στιγμήhe default server. You can change the resolver server anytime.", + rrtypeDescription: "Επιλέξτε τον τύπο RR που θέλετε να παρακολουθήσετε", + pauseMonitorMsg: "Είστε βέβαιοι ότι θέλετε να κάνετε παύση;", + enableDefaultNotificationDescription: "Αυτή η ειδοποίηση θα είναι ενεργοποιημένη από προεπιλογή για νέες παρακολούθησης. Μπορείτε ακόμα να απενεργοποιήσετε την ειδοποίηση ξεχωριστά για κάθε παρακολούθηση.", + clearEventsMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα συμβάντα για αυτήν την παρακολούθηση;", + clearHeartbeatsMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε όλους τους καρδιακούς παλμούς για αυτήν την παρακολούθηση;", + confirmClearStatisticsMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε ΟΛΑ τα στατιστικά στοιχεία;?", + importHandleDescription: "Επιλέξτε «Παράλειψη υπάρχοντος» εάν θέλετε να παραλείψετε κάθε παρακολούθηση ή ειδοποίηση με το ίδιο όνομα. Το 'Overwrite' θα διαγράψει κάθε υπάρχουσα παρακολούθηση και ειδοποίηση.", + confirmImportMsg: "Είστε βέβαιοι ότι θέλετε να εισαγάγετε το αντίγραφο ασφαλείας; Επαληθεύστε ότι έχετε επιλέξει τη σωστή επιλογή.", + twoFAVerifyLabel: "Εισαγάγετε το 2FA κωδικό για να επαληθεύσετε: ", + tokenValidSettingsMsg: "Ο κωδικός 2FA είναι έγκυρο! Τώρα μπορείτε να αποθηκεύσετε τις ρυθμίσεις 2FA", + confirmEnableTwoFAMsg: "Είστε βέβαιοι ότι θέλετε να ενεργοποιήσετε το 2FA;", + confirmDisableTwoFAMsg: "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε το 2FA;", + Settings: "Ρυθμίσεις", + Dashboard: "Πίνακας", + "New Update": "Νέα αναβάθμιση", + Language: "Γλώσσα", + Appearance: "Εμφάνιση", + Theme: "Θέμα", + General: "Γενικά", + "Primary Base URL": "Κύρια βασική διεύθυνση URL", + Version: "Εκδοχή", + "Check Update On GitHub": "Ελέγξτε για Ενημέρωση στο GitHub", + List: "Λίστα", + Add: "Προσθήκη", + "Add New Monitor": "Προσθήκη νέας παρακολούθησης", + "Quick Stats": "Γρήγορα στατιστικά", + Up: "Πάνω", + Down: "Κάτω", + Pending: "Εκκρεμεί", + Unknown: "Άγνωστο", + Pause: "Παύση", + Name: "Ονομα", + Status: "Κατάσταση", + DateTime: "ΗμερομηνίαΏρα", + Message: "Μήνυμα", + "No important events": "Δεν υπάρχουν σημαντικά γεγονότα", + Resume: "Συνέχιση", + Edit: "Επεξεργασία", + Delete: "Διαγράφω", + Current: "Current", + Uptime: "Χρόνος λειτουργίας", + "Cert Exp.": "Cert Exp.", + day: "ημέρα | ημέρες", + "-day": "-ημέρα", + hour: "ώρα", + "-hour": "-ώρα", + Response: "Απάντηση", + Ping: "Ping", + "Monitor Type": "Τύπος παρακολούθησης", + Keyword: "Λέξη-κλειδί", + "Friendly Name": "Φιλικό όνομα", + URL: "URL", + Hostname: "Hostname", + Port: "Port", + "Heartbeat Interval": "Διάστημα καρδιακών παλμών", + Retries: "Επαναλήψεις", + "Heartbeat Retry Interval": "Διάστημα επανάληψης παλμών καρδιάς", + "Resend Notification if Down X times consequently": "Αποστολή νέας ειδοποίησης εάν κατω X φορές κατά συνέχεια", + Advanced: "Προχωρημένα", + "Upside Down Mode": "Ανάποδη λειτουργία", + "Max. Redirects": "Μέγιστη. Ανακατευθύνσεις", + "Accepted Status Codes": "Αποδεκτοί Κωδικοί Κατάστασης", + "Push URL": "Push URL", + needPushEvery: "Θα πρέπει να καλείτε αυτήν τη διεύθυνση URL κάθε {0} δευτερόλεπτα.", + pushOptionalParams: "Προαιρετικές παράμετροι: {0}", + Save: "Αποθηκεύση", + Notifications: "Ειδοποιήσεις", + "Not available, please setup.": "Μη διαθέσιμο, παρακαλώ ρυθμίστε.", + "Setup Notification": "Δημιουργία ειδοποίησης", + Light: "Φωτεινό", + Dark: "Σκοτεινό", + Auto: "Αυτόματο", + "Theme - Heartbeat Bar": "Θέμα - Μπάρα καρδιακών παλμών", + Normal: "Κανονικό", + Bottom: "Κάτω μέρος", + None: "Τίποτα", + Timezone: "Ζώνη ώρας", + "Search Engine Visibility": "Ορατότητα μηχανών αναζήτησης", + "Allow indexing": "Να επιτρέπεται η ευρετηρίαση", + "Discourage search engines from indexing site": "Αποθαρρύνετε τις μηχανές αναζήτησης από την ευρετηρίαση ιστότοπου", + "Change Password": "Αλλαγή κωδικού πρόσβασης", + "Current Password": "Τρέχων κωδικός πρόσβασης", + "New Password": "Νέος κωδικός πρόσβασης", + "Repeat New Password": "Επαναλάβετε τον νέο κωδικό πρόσβασης", + "Update Password": "Ενημέρωση κωδικού πρόσβασης", + "Disable Auth": "Απενεργοποίηση ελέγχου ταυτότητας", + "Enable Auth": "Ενεργοποίηση ελέγχου ταυτότητας", + "disableauth.message1": "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε τον έλεγχο ταυτότητας;", + "disableauth.message2": "Έχει σχεδιαστεί για σενάρια όπου σκοπεύετε να εφαρμόσετε έλεγχο ταυτότητας τρίτου μέρους μπροστά από το Uptime Kuma, όπως το Cloudflare Access, Authelia ή άλλους μηχανισμούς ελέγχου ταυτότητας.", + "Please use this option carefully!": "Χρησιμοποιήστε αυτή την επιλογή προσεκτικά!", + Logout: "Αποσύνδεση", + Leave: "Φύγετε", + "I understand, please disable": "Καταλαβαίνω, απενεργοποιήστε", + Confirm: "Επιβεβαίωση", + Yes: "Ναί", + No: "Οχι", + Username: "Όνομα χρήστη", + Password: "Κωδικός πρόσβασης", + "Remember me": "Θυμήσου με", + Login: "Σύνδεση", + "No Monitors, please": "Δεν υπάρχουν παρακολούθησης παρακαλώ", + "add one": "προσθέστε ένα", + "Notification Type": "Είδος ειδοποίησης", + Email: "Email", + Test: "Δοκιμή", + "Certificate Info": "Πληροφορίες πιστοποιητικού", + "Resolver Server": "Διακομιστής επίλυσης", + "Resource Record Type": "Τύπος εγγραφής πόρων", + "Last Result": "Τελευταίο Αποτέλεσμα", + "Create your admin account": "Δημιουργήστε τον λογαριασμό διαχειριστή σας", + "Repeat Password": "Επαναλάβετε τον κωδικό πρόσβασης", + "Import Backup": "Εισαγωγή αντιγράφων ασφαλείας", + "Export Backup": "Εξαγωγή αντιγράφων ασφαλείας", + Export: "Εξαγωγή", + Import: "Εισαγωγή", + respTime: "Χρόν. Aπό (ms)", + notAvailableShort: "N/A", + "Default enabled": "Προεπιλογή ενεργοποιημένη", + "Apply on all existing monitors": "Εφαρμόστε σε όλες τις υπάρχουσες παρακολούθησης", + Create: "Δημιουργία", + "Clear Data": "Καθαρισμός δεδομένων", + Events: "Γεγονότα", + Heartbeats: "Παλμοι καρδιας", + "Auto Get": "Αυτόματη λήψη", + backupDescription: "Μπορείτε να δημιουργήσετε αντίγραφα ασφαλείας γία ολλες της παρακολούθησης και ειδοποιήσης σε ένα αρχείο JSON..", + backupDescription2: "Σημείωση: δεν περιλαμβάνονται δεδομένα ιστορικού και συμβάντων.", + backupDescription3: "Στο αρχείο εξαγωγής περιλαμβάνονται ευαίσθητα δεδομένα, όπως token ειδοποιήσεων. Aποθηκεύστε την εξαγωγή με ασφάλεια..", + alertNoFile: "Επιλέξτε ένα αρχείο για εισαγωγή.", + alertWrongFileType: "Επιλέξτε ένα αρχείο JSON.", + "Clear all statistics": "Εκκαθάριση όλων των στατιστικών", + "Skip existing": "Παράβλεψη υπάρχοντος", + Overwrite: "Αντικατάσταση", + Options: "Επιλογές", + "Keep both": "Κράτα και τα δύο", + "Verify Token": "Επαλήθευση Token", + "Setup 2FA": "Ρύθμιση 2FA", + "Enable 2FA": "Ενεργοποίηση 2FA", + "Disable 2FA": "Απενεργοποίηση 2FA", + "2FA Settings": "Ρυθμίσεις 2FA", + "Two Factor Authentication": "Έλεγχος ταυτότητας δύο παραγόντων", + Active: "Ενεργός", + Inactive: "Ανενεργό", + Token: "Token", + "Show URI": "Εμφάνιση URI", + Tags: "Ετικέτες", + "Add New below or Select...": "Προσθήκη νέου παρακάτω ή Επιλέξτε...", + "Tag with this name already exist.": "Υπάρχει ήδη η ετικέτα με αυτό το όνομα.", + "Tag with this value already exist.": "Υπάρχει ήδη ετικέτα με αυτό το value.", + color: "χρώμα", + "value (optional)": "value (optional)", + Gray: "Γκρί", + Red: "Κόκκινο", + Orange: "Πορτοκάλι", + Green: "Πράσινο", + Blue: "Μπλε", + Indigo: "Indigo", + Purple: "Μωβ", + Pink: "Ροζ", + "Search...": "Αναζήτηση...", + "Avg. Ping": "Μέσo.Ping", + "Avg. Response": "Μέσo. Aπάντηση", + "Entry Page": "Σελίδα εισαγωγής", + statusPageNothing: "Δεν υπάρχει τίποτα εδώ, προσθέστε μια ομάδα ή μια παρακολούθηση.", + "No Services": "Δεν υπάρχουν υπηρεσίες", + "All Systems Operational": "Όλα τα συστήματα λειτουργούν", + "Partially Degraded Service": "Μερικώς υποβαθμισμένη υπηρεσία", + "Degraded Service": "Υποβαθμισμένη υπηρεσία", + "Add Group": "Προσθήκη γρουπ", + "Add a monitor": "Προσθήκη παρακολούθησης", + "Edit Status Page": "Επεξεργασία σελίδας κατάστασης", + "Go to Dashboard": "Μεταβείτε στον Πίνακα ελέγχου", + "Status Page": "Σελίδα κατάστασης", + "Status Pages": "Σελίδες κατάστασης", + defaultNotificationName: "Η ειδοποίηση μου {notification} ({number})", + here: "εδώ", + Required: "Απαιτείται", + telegram: "Telegram", + "Bot Token": "Διακριτικό Bot", + wayToGetTelegramToken: "Μπορείτε να πάρετε ένα διακριτικό από {0}.", + "Chat ID": "Chat ID", + supportTelegramChatID: "Support Direct Chat / Group / Channel's Chat ID", + wayToGetTelegramChatID: "Μπορείτε να λάβετε το αναγνωριστικό συνομιλίας σας στέλνοντας ένα μήνυμα στο bot και μεταβαίνοντας σε αυτήν τη διεύθυνση URL για να προβάλετε το chat_id:", + "YOUR BOT TOKEN HERE": "ΤΟ BOT ΣΑΣ ΔΙΑΚΡΙΤΙΚΌ ΕΔΩ", + chatIDNotFound: "Το Chat ID δεν βρέθηκε. Στείλτε πρώτα ένα μήνυμα σε αυτό το bot", + webhook: "Webhook", + "Post URL": "Post URL", + "Content Type": "Τύπος περιεχομένου", + webhookJsonDesc: "{0} είναι καλό για οποιονδήποτε σύγχρονο διακομιστή HTTP όπως το Express.js", + webhookFormDataDesc: "{multipart} είναι καλό για την PHP. Το JSON θα πρέπει να αναλυθεί με {decodeFunction}", + smtp: "Email (SMTP)", + secureOptionNone: "None / STARTTLS (25, 587)", + secureOptionTLS: "TLS (465)", + "Ignore TLS Error": "Παράβλεψη σφάλματος TLS", + "From Email": "Από Email", + emailCustomSubject: "Προσαρμοσμένο θέμα", + "To Email": "Προς Email", + smtpCC: "CC", + smtpBCC: "BCC", + discord: "Discord", + "Discord Webhook URL": "Discord Webhook URL", + wayToGetDiscordURL: "Μπορείτε να το αποκτήσετε μεταβαίνοντας στις Ρυθμίσεις διακομιστή -> Ενσωματώσεις -> Δημιουργία Webhook", + "Bot Display Name": "Εμφανιζόμενο όνομα bot", + "Prefix Custom Message": "Προσαρμοσμένο μήνυμα", + "Hello @everyone is...": "Γεια {'@'}everyone ειναι...", + teams: "Microsoft Teams", + "Webhook URL": "Webhook URL", + wayToGetTeamsURL: "Μπορείτε να μάθετε πώς να δημιουργείτε μια διεύθυνση URL webhook {0}.", + signal: "Signal", + Number: "Αριθμός", + Recipients: "Αποδέκτες", + needSignalAPI: "Πρέπει να έχετε ένα signal client με REST API..", + wayToCheckSignalURL: "Μπορείτε να ελέγξετε αυτό το URL για να δείτε πώς να ρυθμίσετε ένα:", + signalImportant: "ΣΗΜΑΝΤΙΚΟ: Δεν μπορείτε να συνδυάσετε ομάδες και αριθμούς στους παραλήπτες!", + gotify: "Gotify", + "Application Token": "Token εφαρμογής", + "Server URL": "URL διακομιστή", + Priority: "Προτεραιότητα", + slack: "Slack", + "Icon Emoji": "Εικονίδιο Emoji", + "Channel Name": "Όνομα καναλιού", + "Uptime Kuma URL": "Uptime Kuma URL", + aboutWebhooks: "Περισσότερες πληροφορίες σχετικά με τα Webhooks στο: {0}", + aboutChannelName: "Εισαγάγετε το όνομα του καναλιού στο {0} Όνομα καναλιού εάν θέλετε να παρακάμψετε το κανάλι Webhook. Π.χ.: #other-channel", + aboutKumaURL: "Εάν αφήσετε κενό το πεδίο URL Uptime Kuma, θα είναι προεπιλεγμένο στη σελίδα Project GitHub..", + emojiCheatSheet: "Φύλλο εξαπάτησης emoji: {0}", + "rocket.chat": "Rocket.Chat", + pushover: "Pushover", + pushy: "Pushy", + PushByTechulus: "Push by Techulus", + octopush: "Octopush", + promosms: "PromoSMS", + clicksendsms: "ClickSend SMS", + lunasea: "LunaSea", + apprise: "Apprise (Support 50+ Notification services)", + GoogleChat: "Google Chat (Google Workspace only)", + pushbullet: "Pushbullet", + line: "Line Messenger", + mattermost: "Mattermost", + "User Key": "Κλειδί χρήστη", + Device: "Συσκευή", + "Message Title": "Τίτλος μηνύματος", + "Notification Sound": "Ήχος ειδοποίησης", + "More info on:": "Περισσότερες πληροφορίες στο: {0}", + pushoverDesc1: "Η προτεραιότητα έκτακτης ανάγκης (2) έχει προεπιλεγμένο χρονικό όριο 30 δευτερολέπτων μεταξύ των επαναλήψεων και θα λήξει μετά από 1 ώρα.", + pushoverDesc2: "Εάν θέλετε να στέλνετε ειδοποιήσεις σε διαφορετικές συσκευές, συμπληρώστε το πεδίο Συσκευή.", + "SMS Type": "Τύπος SMS", + octopushTypePremium: "Premium (Γρήγορη - συνιστάται για ειδοποίηση)", + octopushTypeLowCost: "Χαμηλό κόστος (Αργό - μερικές φορές μπλοκάρεται από τον χειριστή)", + checkPrice: "Ελέγξτε τις τιμές {0}:", + apiCredentials: "API credentials", + octopushLegacyHint: "Χρησιμοποιείτε την παλαιού τύπου έκδοση του Octopush (2011-2020) ή τη νέα έκδοση;", + "Check octopush prices": "Ελέγξτε τις τιμές OctoPush {0}.", + octopushPhoneNumber: "Αριθμός τηλεφώνου (διεθνής μορφή, π.χ.: +30694345678)", + octopushSMSSender: "Όνομα αποστολέα SMS: 3-11 αλφαριθμητικοί χαρακτήρες και διάστημα (a-zA-Z0-9)", + "LunaSea Device ID": "LunaSea Device ID", + "Apprise URL": "Apprise URL", + "Example:": "Παράδειγμα: {0}", + "Read more:": "Διαβάστε περισσότερα: {0}", + "Status:": "Κατάσταση: {0}", + "Read more": "Διαβάστε περισσότερα", + appriseInstalled: "Το Apprise έχει εγκατασταθεί.", + appriseNotInstalled: "Το Apprise δεν έχει εγκατασταθεί. {0}", + "Access Token": "Access Token", + "Channel access token": "Channel Access Token", + "Line Developers Console": "Line Developers Console", + lineDevConsoleTo: "Line Developers Console - {0}", + "Basic Settings": "Βασικές ρυθμίσεις", + "User ID": "User ID", + "Messaging API": "Messaging API", + wayToGetLineChannelToken: "Πρώτα αποκτήστε πρόσβαση στο {0}, δημιουργήστε έναν πάροχο και ένα κανάλι (Messanging API) και, στη συνέχεια, μπορείτε να λάβετε το channel access token και το user ID από τα παραπάνω στοιχεία μενού.", + "Icon URL": "Διεύθυνση URL εικονιδίου", + aboutIconURL: "Μπορείτε να παρέχετε έναν σύνδεσμο προς μια εικόνα στο \"Icon URL\" για να παρακάμψετε την προεπιλεγμένη εικόνα προφίλ. Δεν θα χρησιμοποιηθεί εάν έχει οριστεί το εικονίδιο Emoji.", + aboutMattermostChannelName: "Μπορείτε να παρακάμψετε το προεπιλεγμένο κανάλι στο οποίο δημοσιεύει το Webhook εισάγοντας το όνομα του καναλιού στο πεδίο \"Όνομα καναλιού\". Αυτό πρέπει να ενεργοποιηθεί στις ρυθμίσεις του Mattermost Webhook. Π.χ.: #other-channel", + matrix: "Matrix", + promosmsTypeEco: "SMS ECO - φθηνό αλλά αργό και συχνά υπερφορτωμένο. Περιορίζεται μόνο σε Πολωνούς παραλήπτες.", + promosmsTypeFlash: "SMS FLASH - Το μήνυμα θα εμφανίζεται αυτόματα στη συσκευή του παραλήπτη. Περιορίζεται μόνο σε Πολωνούς παραλήπτες.", + promosmsTypeFull: "SMS FULL - Premium επίπεδο SMS, Μπορείτε να χρησιμοποιήσετε το Όνομα Αποστολέα σας (Πρέπει πρώτα να καταχωρήσετε το όνομα). Αξιόπιστο για ειδοποιήσεις.", + promosmsTypeSpeed: "SMS SPEED - Υψηλότερη προτεραιότητα στο σύστημα. Πολύ γρήγορο και αξιόπιστο αλλά ακριβό (περίπου διπλάσια τιμή SMS FULL).", + promosmsPhoneNumber: "Αριθμός τηλεφώνου (για πολωνούς παραλήπτες Μπορείτε να παραλείψετε τους κωδικούς περιοχής)", + promosmsSMSSender: "Όνομα αποστολέα SMS: Προεγγεγραμμένο όνομα ή ένα από τα προεπιλεγμένα: InfoSMS, SMS Info, MaxSMS, INFO, SMS", + "Feishu WebHookUrl": "Feishu WebHookURL", + matrixHomeserverURL: "Homeserver URL (με http(s):// και προαιρετικά θύρα)", + "Internal Room Id": "Internal Room ID", + matrixDesc1: "Μπορείτε να βρείτε το internal room ID ανατρέχοντας στην ενότητα για προχωρημένους των ρυθμίσεων δωματίου στο πρόγραμμα-πελάτη Matrix. Θα πρέπει να μοιάζει με !QMdRCpUIfLwsfjxye6:home.server.", + matrixDesc2: "Συνιστάται ανεπιφύλακτα να δημιουργήσετε έναν νέο χρήστη και να μην χρησιμοποιήσετε το διακριτικό πρόσβασης του χρήστη Matrix, καθώς θα επιτρέψει την πλήρη πρόσβαση στον λογαριασμό σας και σε όλα τα δωμάτια στα οποία συμμετέχετε. Αντίθετα, δημιουργήστε έναν νέο χρήστη και προσκαλέστε τον μόνο στο δωμάτιο στο οποίο θέλετε να λαμβάνετε την ειδοποίηση. Μπορείτε να λάβετε το access token εκτελώντας {0}", + Method: "Μέθοδος", + Body: "Σώμα", + Headers: "Headers", + PushUrl: "Push URL", + HeadersInvalidFormat: "The request headers are not valid JSON: ", + BodyInvalidFormat: "The request body is not valid JSON: ", + "Monitor History": "Ιστορικο Παρακολούθησης", + clearDataOlderThan: "Διατηρήστε τα δεδομένα ιστορικού παρακολούθησης για {0} ημέρες.", + PasswordsDoNotMatch: "Οι κωδικοί πρόσβασης δεν ταιριάζουν.", + records: "εγγραφές", + "One record": "Μία εγγραφή", + steamApiKeyDescription: "Για την παρακολούθηση ενός διακομιστή παιχνιδιών Steam χρειάζεστε ένα κλειδί Steam Web-API. Μπορείτε να καταχωρήσετε το κλειδί API σας εδώ: ", + "Current User": "Τρέχων χρήστης", + topic: "Θέμα", + topicExplanation: "Θέμα MQTT προς παρακολούθηση", + successMessage: "Μήνυμα επιτυχίας", + successMessageExplanation: "Μήνυμα MQTT που θα θεωρηθεί επιτυχές", + recent: "Πρόσφατος", + Done: "Ολοκληρώθηκε", + Info: "Πληροφορίες", + Security: "Ασφάλεια", + "Steam API Key": "Steam API Key", + "Shrink Database": "Συρρίκνωση βάσης δεδομένων", + "Pick a RR-Type...": "Επιλέξτε έναν τύπο RR...", + "Pick Accepted Status Codes...": "Επιλέξτε Αποδεκτούς κωδικούς κατάστασης...", + Default: "Προκαθορισμένο", + "HTTP Options": "Επιλογές HTTP", + "Create Incident": "Δημιουργία περιστατικού", + Title: "Τίτλος", + Content: "Περιεχόμενο", + Style: "Στυλ", + info: "πληροφορίες", + warning: "προειδοποίηση", + danger: "κίνδυνος", + error: "σφάλμα", + critical: "κριτικό", + primary: "primary", + light: "light", + dark: "dark", + Post: "Δημοσίευση", + "Please input title and content": "Παρακαλούμε εισαγάγετε τίτλο και περιεχόμενο", + Created: "Δημιουργήθηκε", + "Last Updated": "Τελευταία ενημέρωση", + Unpin: "Ξεκαρφιτσώστε", + "Switch to Light Theme": "Μετάβαση σε Ανιχτό θέμα", + "Switch to Dark Theme": "Μετάβαση σε Σκούρο θέμα", + "Show Tags": "Εμφάνιση ετικετών", + "Hide Tags": "Απόκρυψη ετικετών", + Description: "Περιγραφή", + "No monitors available.": "Δεν υπάρχουν διαθέσιμες παρακολουθήσεις.", + "Add one": "Προσθέστε ένα", + "No Monitors": "Χωρίς παρακολουθήσεις", + "Untitled Group": "Ομάδα χωρίς τίτλο", + Services: "Υπηρεσίες", + Discard: "Απορρίψει", + Cancel: "Ακυρο", + "Powered by": "Με την υποστήριξη του", + shrinkDatabaseDescription: "Ενεργοποίηση βάσης δεδομένων VACUUM για SQLite. Εάν η βάση δεδομένων σας έχει δημιουργηθεί μετά την έκδοση 1.10.0, το AUTO_VACUUM είναι ήδη ενεργοποιημένο και αυτή η ενέργεια δεν χρειάζεται.", + serwersms: "SerwerSMS.pl", + serwersmsAPIUser: "API Username (incl. webapi_ prefix)", + serwersmsAPIPassword: "API κωδικός πρόσβασης", + serwersmsPhoneNumber: "Αριθμός τηλεφώνου", + serwersmsSenderName: "Όνομα αποστολέα SMS (καταχωρήθηκε μέσω της πύλης πελατών)", + stackfield: "Stackfield", + Customize: "Προσαρμογή", + "Custom Footer": "Προσαρμογή Footer", + "Custom CSS": "Προσαρμογή CSS", + smtpDkimSettings: "Ρυθμίσεις DKIM", + smtpDkimDesc: "Ανατρέξτε στο Nodemailer DKIM {0} για χρήση.", + documentation: "documentation", + smtpDkimDomain: "Domain Name", + smtpDkimKeySelector: "Key Selector", + smtpDkimPrivateKey: "Private Key", + smtpDkimHashAlgo: "Hash Algorithm (Optional)", + smtpDkimheaderFieldNames: "Header Keys to sign (Optional)", + smtpDkimskipFields: "Header Keys not to sign (Optional)", + wayToGetPagerDutyKey: "Μπορείτε να το λάβετε μεταβαίνοντας στο Service -> Service Directory -> (Επιλέξτε μια υπηρεσία) -> Integrations -> Add integration. Εδώ μπορείτε να κάνετε αναζήτηση για \"Events API V2\". Περισσότερες πληροφορίες {0}", + "Integration Key": "Integration Key", + "Integration URL": "Integration URL", + "Auto resolve or acknowledged": "Αυτόματη επίλυση ή αναγνώριση", + "do nothing": "μην κάνεις τίποτα", + "auto acknowledged": "αυτόματη αναγνώριση", + "auto resolve": "αυτόματη επίλυση", + gorush: "Gorush", + alerta: "Alerta", + alertaApiEndpoint: "API Endpoint", + alertaEnvironment: "Environment", + alertaApiKey: "API Key", + alertaAlertState: "Alert State", + alertaRecoverState: "Recover State", + deleteStatusPageMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν τη σελίδα κατάστασης?", + Proxies: "Proxies", + default: "Προκαθορισμένο", + enabled: "Ενεργοποιημένο", + setAsDefault: "Ορίσετε ως προεπιλογή", + deleteProxyMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το proxy για όλες τις παρακολουθήσεις;", + proxyDescription: "Πρέπει να εκχωρηθούν proxies σε μια οθπαρακολουθή για να λειτουργήσουν..", + enableProxyDescription: "Το proxy δεν θα επηρεάσει τα αιτήματα της παρακολουθήσεις μέχρι να ενεργοποιηθεί. Μπορείτε να ελέγξετε την προσωρινή απενεργοποίηση του proxy από όλες τις παρακολουθήσεις βάσει κατάστασης ενεργοποίησης.", + setAsDefaultProxyDescription: "Αυτός το proxy θα είναι ενεργοποιημένο από προεπιλογή για νέες παρακολουθήσεις. Μπορείτε ακόμα να απενεργοποιήσετε το proxy ξεχωριστά για κάθε οθόνη.", + "Certificate Chain": "Certificate Chain", + Valid: "Εγκυρο", + Invalid: "Μη έγκυρο", + AccessKeyId: "AccessKey ID", + SecretAccessKey: "AccessKey Secret", + PhoneNumbers: "PhoneNumbers", + TemplateCode: "TemplateCode", + SignName: "SignName", + "Sms template must contain parameters: ": "Το πρότυπο SMS πρέπει να περιέχει παραμέτρους: ", + "Bark Endpoint": "Bark Endpoint", + "Bark Group": "Bark Ομάδα", + "Bark Sound": "Bark Ήχος", + WebHookUrl: "WebHookUrl", + SecretKey: "SecretKey", + "For safety, must use secret key": "Για ασφάλεια, πρέπει να χρησιμοποιήσετε secret key", + "Device Token": "Device Token", + Platform: "Platform", + iOS: "iOS", + Android: "Android", + Huawei: "Huawei", + High: "High", + Retry: "Ξαναδοκιμάσετε", + Topic: "Θέμα", + "WeCom Bot Key": "WeCom Bot Key", + "Setup Proxy": "Ρύθμιση Proxy", + "Proxy Protocol": "Πρωτόκολλο Proxy", + "Proxy Server": "Proxy Server", + "Proxy server has authentication": "Το Proxy διαθέτει έλεγχο ταυτότητας", + User: "Χρήστης", + Installed: "Εγκατεστημένο", + "Not installed": "Μη εγκατεστημενο", + Running: "Τρέχη", + "Not running": "Δεν τρεχη", + "Remove Token": "Κατάργηση Token", + Start: "Αρχή", + Stop: "Στάση", + "Uptime Kuma": "Uptime Kuma", + "Add New Status Page": "Προσθήκη νέας σελίδας κατάστασης", + Slug: "Slug", + "Accept characters:": "Αποδοχή χαρακτήρων:", + startOrEndWithOnly: "Ξεκινήστε ή τελειώστε μόνο με {0}", + "No consecutive dashes": "Χωρίς διαδοχικές παύλες", + Next: "Επόμενο", + "The slug is already taken. Please choose another slug.": "Ο slug έχει ήδη πιαστεί. Επιλέξτε άλλο slug.", + "No Proxy": "Οχι Proxy", + Authentication: "Authentication", + "HTTP Basic Auth": "HTTP Basic Auth", + "New Status Page": "Σελίδα νέας κατάστασης", + "Page Not Found": "Η σελίδα δεν βρέθηκε", + "Reverse Proxy": "Αντίστροφο Proxy", + Backup: "Αντιγράφων ασφαλείας", + About: "Σχετικά με", + wayToGetCloudflaredURL: "(Λήψη cloudflared από {0})", + cloudflareWebsite: "Ιστοσελίδα Cloudflare", + "Message:": "Μήνυμα:", + "Don't know how to get the token? Please read the guide:": "Δεν ξέρετε πώς να αποκτήσετε το token; Διαβάστε τον οδηγό:", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Η τρέχουσα σύνδεση μπορεί να χαθεί εάν αυτή τη στιγμή συνδέεστε μέσω του Cloudflare Tunnel. Θέλετε σίγουρα να το σταματήσετε; Πληκτρολογήστε τον τρέχοντα κωδικό πρόσβασής σας για να τον επιβεβαιώσετε.", + "HTTP Headers": "HTTP Headers", + "Trust Proxy": "Εμπιστοσύνη του Proxy", + "Other Software": "Other Software", + "For example: nginx, Apache and Traefik.": "Για παράδειγμα: nginx, Apache και Traefik.", + "Please read": "Παρακαλώ διαβάστε", + "Subject:": "Θέμα:", + "Valid To:": "Εγκυρο για:", + "Days Remaining:": "Ημέρες που απομένουν:", + "Issuer:": "Εκδότης:", + "Fingerprint:": "Δακτυλικό αποτύπωμα:", + "No status pages": "Δεν υπάρχουν σελίδες κατάστασης", + "Domain Name Expiry Notification": "Ειδοποίηση λήξης ονόματος τομέα", + Proxy: "Proxy", + "Date Created": "Ημερομηνία Δημιουργίας", + HomeAssistant: "Home Assistant", + onebotHttpAddress: "OneBot HTTP Address", + onebotMessageType: "OneBot Message Type", + onebotGroupMessage: "Group", + onebotPrivateMessage: "Private", + onebotUserOrGroupId: "Group/User ID", + onebotSafetyTips: "Για ασφάλεια, πρέπει να ορίσετε το acess token", + "PushDeer Key": "PushDeer Key", + "Footer Text": "Κείμενο υποσέλιδου", + "Show Powered By": "Εμφάνιση Powered By", + "Domain Names": "Ονόματα Τομέα", + signedInDisp: "Συνδεθήκατε ως {0}", + signedInDispDisabled: "Εξουσιοδότηση είναι απενεργοποιημένη.", + RadiusSecret: "Radius Secret", + RadiusSecretDescription: "Shared Secret μεταξύ client και το server", + RadiusCalledStationId: "Called Station Id", + RadiusCalledStationIdDescription: "Identifier της καλούμενης συσκευής", + RadiusCallingStationId: "Calling Station Id", + RadiusCallingStationIdDescription: "Identifier oτης συσκευής κλήσης", + "Certificate Expiry Notification": "Ειδοποίηση Λήξης Πιστοποιητικού", + "API Username": "API Username", + "API Key": "API Key", + "Recipient Number": "Αριθμός Παραλήπτη", + "From Name/Number": "Από Όνομα/Αριθμός", + "Leave blank to use a shared sender number.": "Αφήστε το κενό για να χρησιμοποιήσετε έναν κοινόχρηστο αριθμό αποστολέα.", + "Octopush API Version": "Octopush API Version", + "Legacy Octopush-DM": "Legacy Octopush-DM", + endpoint: "endpoint", + octopushAPIKey: "\"API key\" από το HTTP API credentials στον πίνακα ελέγχου", + octopushLogin: "\"Login\" από το HTTP API credentials στον πίνακα ελέγχου", + promosmsLogin: "API Login Name", + promosmsPassword: "API Password", + "pushoversounds pushover": "Pushover (default)", + "pushoversounds bike": "Bike", + "pushoversounds bugle": "Bugle", + "pushoversounds cashregister": "Cash Register", + "pushoversounds classical": "Classical", + "pushoversounds cosmic": "Cosmic", + "pushoversounds falling": "Falling", + "pushoversounds gamelan": "Gamelan", + "pushoversounds incoming": "Incoming", + "pushoversounds intermission": "Intermission", + "pushoversounds magic": "Magic", + "pushoversounds mechanical": "Mechanical", + "pushoversounds pianobar": "Piano Bar", + "pushoversounds siren": "Siren", + "pushoversounds spacealarm": "Space Alarm", + "pushoversounds tugboat": "Tug Boat", + "pushoversounds alien": "Alien Alarm (long)", + "pushoversounds climb": "Climb (long)", + "pushoversounds persistent": "Persistent (long)", + "pushoversounds echo": "Pushover Echo (long)", + "pushoversounds updown": "Up Down (long)", + "pushoversounds vibrate": "Vibrate Only", + "pushoversounds none": "None (silent)", + pushyAPIKey: "Μυστικό API Key", + pushyToken: "Τoken Συσκευής", + "Show update if available": "Εμφάνιση ενημέρωσης εάν είναι διαθέσιμη", + "Also check beta release": "Ελέγξτε επίσης την έκδοση beta", + "Using a Reverse Proxy?": "Χρησιμοποιείτε reverse proxy;", + "Check how to config it for WebSocket": "Ελέγξτε πώς να το ρυθμίσετε για το WebSocket", + "Steam Game Server": "Διακομιστής παιχνιδιών Steam", + "Most likely causes:": "Πιο πιθανές αιτίες:", + "The resource is no longer available.": "Ο πόρος δεν είναι πλέον διαθέσιμος.", + "There might be a typing error in the address.": "Μπορεί να υπάρχει σφάλμα πληκτρολόγησης στη διεύθυνση.", + "What you can try:": "Τι μπορείτε να δοκιμάσετε:", + "Retype the address.": "Πληκτρολογήστε ξανά τη διεύθυνση.", + "Go back to the previous page.": "Επιστρέψτε στην προηγούμενη σελίδα.", + "Coming Soon": "Ερχεται σύντομα", + wayToGetClickSendSMSToken: "Μπορείτε να πάρετε το API Username και API Key απο {0} .", + "Connection String": "Connection String", + Query: "Query", + settingsCertificateExpiry: "Λήξη πιστοποιητικού TLS", + certificationExpiryDescription: "Οι παρακολουθήσεις HTTPS ενεργοποιούν ειδοποίηση όταν λήξει το πιστοποιητικό TLS σε:", + "Setup Docker Host": "Ρύθμιση Docker Host", + "Connection Type": "Τύπος σύνδεσης", + "Docker Daemon": "Docker Daemon", + deleteDockerHostMsg: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον κεντρικό υπολογιστή βάσης για όλες τις παρακολουθήσεις;", + socket: "Socket", + tcp: "TCP / HTTP", + "Docker Container": "Docker Container", + "Container Name / ID": "Container Name / ID", + "Docker Host": "Docker Host", + "Docker Hosts": "Docker Hosts", + "ntfy Topic": "ntfy Topic", + Domain: "Domain", + Workstation: "Workstation", + disableCloudflaredNoAuthMsg: "Βρίσκεστε σε λειτουργία No Auth, δεν απαιτείται κωδικός πρόσβασης.", + trustProxyDescription: "Εμπιστευτείτε τις κεφαλίδες 'X-Forwarded-*'. Εάν θέλετε να λάβετε τη σωστή IP πελάτη και το Uptime Kuma σας βρίσκεται πίσω το Nginx ή το Apache, θα πρέπει να το ενεργοποιήσετε.", + wayToGetLineNotifyToken: "Μπορείτε να λάβετε ένα access token από το {0}", + Examples: "Παραδείγματα", + "Home Assistant URL": "Home Assistant URL", + "Long-Lived Access Token": "Long-Lived Access Token", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token μπορεί να δημιουργηθεί κάνοντας κλικ στο όνομα του προφίλ σας (κάτω αριστερά) και κάνοντας κύλιση προς τα κάτω και, στη συνέχεια, κάντε κλικ στο Create Token. ", + "Notification Service": "Υπηρεσία ειδοποιήσεων", + "default: notify all devices": "προεπιλογή: ειδοποίηση όλων των συσκευών", + "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Μπορείτε να βρείτε μια λίστα με τις Υπηρεσίες ειδοποιήσεων στον Home assistant στην περιοχή \"Developer Tools > Services\" αναζήτηση για \"notification\" για να βρείτε το όνομα της συσκευής/τηλεφώνου σας.", + "Automations can optionally be triggered in Home Assistant:": "Οι αυτοματισμοί μπορούν προαιρετικά να ενεργοποιηθούν στο Home Assistant:", + "Trigger type:": "Τύπος ενεργοποίησης:", + "Event type:": "Τύπος συμβάντος:", + "Event data:": "Δεδομένα συμβάντος:", + "Then choose an action, for example switch the scene to where an RGB light is red.": "Στη συνέχεια, επιλέξτε μια ενέργεια, για παράδειγμα αλλάξτε τη σκηνή στο σημείο όπου ένα φως RGB είναι κόκκινο.", + "Frontend Version": "Έκδοση Frontend", + "Frontend Version do not match backend version!": "Η Frontend έκδοση δεν ταιριάζει με την έκδοση backend!", + "Base URL": "Βασική διεύθυνση URL", + goAlertInfo: "Το GoAlert είναι μια εφαρμογή ανοιχτού κώδικα για προγραμματισμό κλήσεων, αυτοματοποιημένες κλιμακώσεις και ειδοποιήσεις (όπως SMS ή φωνητικές κλήσεις). Αλληλεπιδράστε αυτόματα με το σωστό άτομο, με τον σωστό τρόπο και τη σωστή στιγμή! {0}", + goAlertIntegrationKeyInfo: "Λάβετε το generic API integration key για την υπηρεσία σε αυτήν τη μορφή \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" συνήθως την τιμή της παραμέτρου διακριτικού της αντιγραμμένης διεύθυνσης URL.", + goAlert: "GoAlert", + backupOutdatedWarning: "Καταργήθηκε: Επειδή προστέθηκαν πολλές δυνατότητες και αυτή η δυνατότητα δημιουργίας αντιγράφων ασφαλείας δεν διατηρείται πολη, δεν μπορεί να δημιουργήσει ή να επαναφέρει ένα πλήρες αντίγραφο ασφαλείας.", + backupRecommend: "Παρακαλούμε δημιουργήστε αντίγραφα ασφαλείας του τόμου ή του φακέλου δεδομένων (./data/) απευθείας.", +}; From e29527e22fad7f9691b3fed4b29466f9bd1ced9c Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Fri, 7 Oct 2022 11:33:29 +0200 Subject: [PATCH 33/48] Update Greek --- src/languages/el-GR.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/el-GR.js b/src/languages/el-GR.js index 29af0417..92a2d775 100644 --- a/src/languages/el-GR.js +++ b/src/languages/el-GR.js @@ -55,7 +55,7 @@ export default { "No important events": "Δεν υπάρχουν σημαντικά γεγονότα", Resume: "Συνέχιση", Edit: "Επεξεργασία", - Delete: "Διαγράφω", + Delete: "Διαγράφη", Current: "Current", Uptime: "Χρόνος λειτουργίας", "Cert Exp.": "Cert Exp.", @@ -448,11 +448,11 @@ export default { "No Proxy": "Οχι Proxy", Authentication: "Authentication", "HTTP Basic Auth": "HTTP Basic Auth", - "New Status Page": "Σελίδα νέας κατάστασης", + "New Status Page": "Νέας Σελίδα κατάστασης", "Page Not Found": "Η σελίδα δεν βρέθηκε", "Reverse Proxy": "Αντίστροφο Proxy", Backup: "Αντιγράφων ασφαλείας", - About: "Σχετικά με", + About: "Σχετικά με το Uptime Kuma", wayToGetCloudflaredURL: "(Λήψη cloudflared από {0})", cloudflareWebsite: "Ιστοσελίδα Cloudflare", "Message:": "Μήνυμα:", From 4f6dec41c617267860ec9c686477e03c633e7c4b Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Fri, 7 Oct 2022 20:46:43 +0800 Subject: [PATCH 34/48] Fix ntfy username should not be required --- src/components/notifications/Ntfy.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/notifications/Ntfy.vue b/src/components/notifications/Ntfy.vue index ddcc3917..b0f7888a 100644 --- a/src/components/notifications/Ntfy.vue +++ b/src/components/notifications/Ntfy.vue @@ -18,7 +18,7 @@
- +
From 43c1ec640c41e83b0cb7783b1760f7781fab8f4a Mon Sep 17 00:00:00 2001 From: AnnAngela Date: Sat, 8 Oct 2022 01:45:00 +0800 Subject: [PATCH 35/48] feat: :globe_with_meridians: Update zh-cn and en translation (#2167) Co-authored-by: Louis Lam --- src/components/notifications/HomeAssistant.vue | 2 +- src/components/notifications/SMSManager.vue | 2 +- src/languages/en.js | 6 ++++++ src/languages/zh-CN.js | 14 ++++++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/components/notifications/HomeAssistant.vue b/src/components/notifications/HomeAssistant.vue index 67e370a1..de368095 100644 --- a/src/components/notifications/HomeAssistant.vue +++ b/src/components/notifications/HomeAssistant.vue @@ -18,7 +18,7 @@
-

{{ $t("A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.") }}

+

{{ $t('A list of Notification Services can be found in Home Assistant under "Developer Tools > Services" search for "notification" to find your device/phone name.') }}

{{ $t("Automations can optionally be triggered in Home Assistant:") }}

{{ $t("Trigger type:") }} Event
diff --git a/src/components/notifications/SMSManager.vue b/src/components/notifications/SMSManager.vue index 25db624f..1be952ae 100644 --- a/src/components/notifications/SMSManager.vue +++ b/src/components/notifications/SMSManager.vue @@ -2,7 +2,7 @@

- {{ $t("SMSManager API Docs ") }} + {{ $t("SMSManager API Docs") }} {{ $t("here") }}
diff --git a/src/languages/en.js b/src/languages/en.js index 4bf92e92..e277958b 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -584,4 +584,10 @@ export default { backupRecommend: "Please backup the volume or the data folder (./data/) directly instead.", "Optional": "Optional", squadcast: "Squadcast", + SendKey: "SendKey", + "SMSManager API Docs": "SMSManager API Docs ", + "Gateway Type": "Gateway Type", + SMSManager: "SMSManager", + "You can divide numbers with": "You can divide numbers with", + "or": "or", }; diff --git a/src/languages/zh-CN.js b/src/languages/zh-CN.js index a37d4ae4..0d21efda 100644 --- a/src/languages/zh-CN.js +++ b/src/languages/zh-CN.js @@ -581,4 +581,18 @@ export default { "Then choose an action, for example switch the scene to where an RGB light is red.": "然后您可以选择关联操作,例如切换到 RGB 灯发出红光的场景", "Frontend Version": "前端版本", "Frontend Version do not match backend version!": "前端版本与后端版本不符!", + "Base URL": "API 基础地址", + goAlertInfo: "GoAlert 是一个用于呼叫调度、自动汇报和通知(如 SMS 或语音呼叫)的开源应用程序。在正确的时间以正确的方式自动让正确的人参与!{0}", + goAlertIntegrationKeyInfo: "使用形如 aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee 的通用 API 集成密钥,通常是复制来的链接中的 token 参数值。", + goAlert: "GoAlert", + backupOutdatedWarning: "已弃用:由于大量新功能的加入,以及备份功能没有时时维护,现在备份功能已经无法生成完整的备份和恢复完整的设置。", + backupRecommend: "请改为直接备份 docker 卷或者数据文件夹(./data/)。", + Optional: "可选的", + squadcast: "Squadcast", + SendKey: "SendKey", + "SMSManager API Docs": "SMSManager API 文档在", + "Gateway Type": "网关类型", + SMSManager: "SMSManager", + "You can divide numbers with": "可用的分隔符:", + "or": "或", }; From 59e7aa74a3a7c542b06d05b963216c4246a65b06 Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Fri, 7 Oct 2022 17:51:45 +0000 Subject: [PATCH 36/48] Remove some double dots & fix backuprecommended --- src/languages/el-GR.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/el-GR.js b/src/languages/el-GR.js index 92a2d775..c520a607 100644 --- a/src/languages/el-GR.js +++ b/src/languages/el-GR.js @@ -141,9 +141,9 @@ export default { Events: "Γεγονότα", Heartbeats: "Παλμοι καρδιας", "Auto Get": "Αυτόματη λήψη", - backupDescription: "Μπορείτε να δημιουργήσετε αντίγραφα ασφαλείας γία ολλες της παρακολούθησης και ειδοποιήσης σε ένα αρχείο JSON..", + backupDescription: "Μπορείτε να δημιουργήσετε αντίγραφα ασφαλείας γία ολλες της παρακολούθησης και ειδοποιήσης σε ένα αρχείο JSON.", backupDescription2: "Σημείωση: δεν περιλαμβάνονται δεδομένα ιστορικού και συμβάντων.", - backupDescription3: "Στο αρχείο εξαγωγής περιλαμβάνονται ευαίσθητα δεδομένα, όπως token ειδοποιήσεων. Aποθηκεύστε την εξαγωγή με ασφάλεια..", + backupDescription3: "Στο αρχείο εξαγωγής περιλαμβάνονται ευαίσθητα δεδομένα, όπως token ειδοποιήσεων. Aποθηκεύστε την εξαγωγή με ασφάλεια.", alertNoFile: "Επιλέξτε ένα αρχείο για εισαγωγή.", alertWrongFileType: "Επιλέξτε ένα αρχείο JSON.", "Clear all statistics": "Εκκαθάριση όλων των στατιστικών", @@ -581,5 +581,5 @@ export default { goAlertIntegrationKeyInfo: "Λάβετε το generic API integration key για την υπηρεσία σε αυτήν τη μορφή \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" συνήθως την τιμή της παραμέτρου διακριτικού της αντιγραμμένης διεύθυνσης URL.", goAlert: "GoAlert", backupOutdatedWarning: "Καταργήθηκε: Επειδή προστέθηκαν πολλές δυνατότητες και αυτή η δυνατότητα δημιουργίας αντιγράφων ασφαλείας δεν διατηρείται πολη, δεν μπορεί να δημιουργήσει ή να επαναφέρει ένα πλήρες αντίγραφο ασφαλείας.", - backupRecommend: "Παρακαλούμε δημιουργήστε αντίγραφα ασφαλείας του τόμου ή του φακέλου δεδομένων (./data/) απευθείας.", + backupRecommend: "Παρακαλούμε δημιουργήστε αντίγραφα ασφαλείας του volume ή του φακέλου δεδομένων (./data/) απευθείας.", }; From df2f5368459cccab1a4713c11aaf3f51273dfc4c Mon Sep 17 00:00:00 2001 From: wellart Date: Sat, 8 Oct 2022 01:15:03 +0700 Subject: [PATCH 37/48] [id-ID.js] Fix some type and word (#2149) Co-authored-by: Matthew Nickson --- src/languages/id-ID.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/languages/id-ID.js b/src/languages/id-ID.js index 3d3c3389..f8ee3ab7 100644 --- a/src/languages/id-ID.js +++ b/src/languages/id-ID.js @@ -126,10 +126,10 @@ export default { "Resolver Server": "Resolver Server", "Resource Record Type": "Resource Record Type", "Last Result": "Hasil Terakhir", - "Create your admin account": "Buat admin akun Anda", + "Create your admin account": "Buat akun admin anda", "Repeat Password": "Ulangi Sandi", "Import Backup": "Impor Cadangan", - "Export Backup": "Expor Cadangan", + "Export Backup": "Ekspor Cadangan", Export: "Ekspor", Import: "Impor", respTime: "Tanggapan. Waktu (milidetik)", @@ -217,7 +217,7 @@ export default { smtpBCC: "BCC", discord: "Discord", "Discord Webhook URL": "Discord Webhook URL", - wayToGetDiscordURL: "Anda bisa mendapatkan ini dengan pergi ke Server Settings -> Integrations -> Create Webhook", + wayToGetDiscordURL: "Anda bisa mendapatkan ini dengan pergi ke Server Pengaturan -> Integrasi -> Buat Webhook", "Bot Display Name": "Nama Bot", "Prefix Custom Message": "Awalan Pesan", "Hello @everyone is...": "Halo {'@'}everyone is...", @@ -328,7 +328,7 @@ export default { "Pick a RR-Type...": "Pilih RR-Type...", "Pick Accepted Status Codes...": "Pilih Kode Status yang Diterima...", Default: "Default", - "HTTP Options": "HTTP Options", + "HTTP Options": "Opsi HTTP", "Create Incident": "Buat Incident", Title: "Judul", Content: "Konten", @@ -379,8 +379,8 @@ export default { smtpDkimheaderFieldNames: "Header Keys untuk ditambahkan (Optional)", smtpDkimskipFields: "Header Keys not untuk ditambahkan (Optional)", wayToGetPagerDutyKey: "Anda dapat menambahkan melalui Service -> Service Directory -> (Select a service) -> Integrations -> Add integration. Lalu Anda dapat menjadi dengan kata kunci \"Events API V2\". Informasi tambahan {0}", - "Integration Key": "Integration Key", - "Integration URL": "Integration URL", + "Integration Key": "Kunci Integrasi", + "Integration URL": "URL Integrasi", "Auto resolve or acknowledged": "Penyelesaian otomatis atau diakui", "do nothing": "tidak melakukan apapun", "auto acknowledged": "otomatis diakui", @@ -402,14 +402,14 @@ export default { enableProxyDescription: "Proxy berikut tidak akan berdampak ke monitor hingga diaktifkan. Anda dapat mengontrol menonaktifkan sementara proxy dari semua monitor dengan status aktivasi.", setAsDefaultProxyDescription: "Proxy berikut akan diaktifkan sebagai bawaan untuk monitor baru. Anda masih dapat menonaktifkan proxy secara terpisah untuk setiap monitor.", "Certificate Chain": "Certificate Chain", - Valid: "Sahih", + Valid: "Valid", Invalid: "Tidak Valid", AccessKeyId: "AccessKey ID", SecretAccessKey: "AccessKey Secret", PhoneNumbers: "Nomor Telepon", TemplateCode: "Kode Template", SignName: "Nama Tanda", - "Sms template must contain parameters: ": "Template SMS harus memuat parameter: ", + "Sms template must contain parameters: ": "Template SMS harus berisi parameter: ", "Bark Endpoint": "Bark Endpoint", "Bark Group": "Bark Group", "Bark Sound": "Bark Sound", @@ -432,7 +432,7 @@ export default { User: "Pengguna", Installed: "Terpasang", "Not installed": "Tidak terpasang", - Running: "Berlari", + Running: "Berjalan", "Not running": "Tidak berjalan", "Remove Token": "Hapus Token", Start: "Mulai", @@ -445,7 +445,7 @@ export default { "No consecutive dashes": "Tanda hubung tidak berurutan", Next: "Selanjutnya", "The slug is already taken. Please choose another slug.": "Slug telah digunakan. Silakan pilih slug lain.", - "No Proxy": "TIdak ada Proxy", + "No Proxy": "Tidak ada Proxy", Authentication: "Autentikasi", "HTTP Basic Auth": "HTTP Basic Auth", "New Status Page": "Halaman Status Baru", @@ -457,7 +457,7 @@ export default { cloudflareWebsite: "Situs Cloudflare", "Message:": "Pesan:", "Don't know how to get the token? Please read the guide:": "Tidak tahu cara mendapatkan token? Silakan baca panduannya:", - "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Koneksi saat ini mungkin hilang jika Anda saat ini terhubung melalui CloudflareTunnel. Apakah Anda yakin ingin menghentikannya? Ketik kata sandi Anda saat ini untuk mengonfirmasinya.", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Koneksi saat ini mungkin hilang jika Anda saat ini terhubung melalui Cloudflare Tunel. Apakah Anda yakin ingin menghentikannya? Ketik kata sandi Anda saat ini untuk mengonfirmasinya.", "HTTP Headers": "HTTP Headers", "Trust Proxy": "Proxy Terpercaya", "Other Software": "Perangkat Lunak lainnya", @@ -494,7 +494,7 @@ export default { "Certificate Expiry Notification": "Pemberitahuan Kedaluwarsa Sertifikat", "API Username": "Nama Pengguna API", "API Key": "Kunci API", - "Recipient Number": "Nomor Penerima Recipient Number", + "Recipient Number": "Nomor Penerima", "From Name/Number": "Dari Nama/Nomor", "Leave blank to use a shared sender number.": "Biarkan kosong untuk menggunakan nomor pengirim bersama.", "Octopush API Version": "Versi API Octopush", @@ -542,9 +542,9 @@ export default { "Go back to the previous page.": "Kembali ke halaman sebelumnya.", "Coming Soon": "Segera", wayToGetClickSendSMSToken: "Anda bisa mendapatkan Nama Pengguna API dan Kunci API dari {0} .", - "Connection String": "Connection String", + "Connection String": "String Koneksi", Query: "Query", - settingsCertificateExpiry: "Kedaluwarsa Sertifikat TLS", + settingsCertificateExpiry: "Sertifikat TLS Kadaluarsa", certificationExpiryDescription: "Monitor HTTPS memicu pemberitahuan saat sertifikat TLS kedaluwarsa dalam:", "Setup Docker Host": "Siapkan Host Docker", "Connection Type": "Jenis Koneksi", @@ -570,9 +570,9 @@ export default { "default: notify all devices": "bawaan: notifikasi seluruh perangkat", "A listof Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Daftar Layanan Pemberitahuan dapat ditemukan di Home Assistant pada \"Developer Tools > Services\" cari \"notification\" lalu cari nama perangkat Anda.", "Automations can optionally be triggered in Home Assistant:": "Otomatisasi dapat dipicu secara opsional di Home Assistant:", - "Trigger type:": "Trigger type:", - "Event type:": "Event type:", - "Event data:": "Event data:", + "Trigger type:": "Tipe Trigger/Pemicu:", + "Event type:": "Tipe event:", + "Event data:": "Data event:", "Then choose an action, for example switch the scene to where an RGB light is red.": "Kemudian pilih tindakan, misalnya alihkan ke tempat dimana lampu RGB berwarna merah.", "Frontend Version": "Versi Frontend", "Frontend Version do not match backend version!": "Versi Frontend tidak sama dengan versi backend!", @@ -580,6 +580,6 @@ export default { goAlertInfo: "GoAlert adalah aplikasi open source untuk penjadwalan panggilan, eskalasi otomatis dan pemberitahuan (seperti SMS atau panggilan suara). Secara otomatis melibatkan orang yang tepat, dengan cara yang benar, dan pada waktu yang tepat! {0}", goAlertIntegrationKeyInfo: "Dapatkan kunci integrasi API generik untuk layanan dalam format ini \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" biasanya nilai parameter token dari URL yang disalin.", goAlert: "GoAlert", - backupOutdatedWarning: "Usang: Karena banyak fitur ditambahkan dan fitur cadangan ini agak tidak terawat, itu tidak dapat menghasilkan atau memulihkan cadangan lengkap.", + backupOutdatedWarning: "Tidak digunakan lagi: Karena banyak fitur ditambahkan dan fitur cadangan ini agak tidak terawat, itu tidak dapat menghasilkan atau memulihkan cadangan lengkap.", backupRecommend: "Harap cadangkan volume atau folder data (./data/) secara langsung.", }; From f67d7cdf3f3edf66415747bde53c944a600df57d Mon Sep 17 00:00:00 2001 From: Matthew Nickson Date: Sat, 8 Oct 2022 08:01:47 +0100 Subject: [PATCH 38/48] Make update-language-files command more useful (#2198) * [empty commit] pull request for Fix language update script * Avoid mass changes with update-language-files This commit updates the update-language-files script to prevent mass changes as seen on a number of recent PRs where the contributer has ran the script and comitted the results. The script has been updated to now require the --language argument to specify which language file to update. This ensures that only that file is updated instead of all files. If the provided language code does not already exist, a new file with that code is created. This should make it easier to add new languages as you only need to pass the language code to the script. The base lang code is now also passed as an optional argument to negate the need for a seperate script entry in package.json. The script has been restructures into a couple of functions to make it easier to understand. ESlint now only checks the changed file instead of them all in order to improve performance. Signed-off-by: Matthew Nickson * Updated translation docs for new command Signed-off-by: Matthew Nickson * [update-language-files] Add cross-env-shell Signed-off-by: Matthew Nickson Co-authored-by: Louis Lam --- extra/update-language-files/index.js | 79 ++++++++++++++++------------ package.json | 3 +- src/languages/README.md | 13 +++-- 3 files changed, 53 insertions(+), 42 deletions(-) diff --git a/extra/update-language-files/index.js b/extra/update-language-files/index.js index e449fe34..078c4e6f 100644 --- a/extra/update-language-files/index.js +++ b/extra/update-language-files/index.js @@ -1,51 +1,45 @@ // Need to use ES6 to read language files import fs from "fs"; -import path from "path"; import util from "util"; import rmSync from "../fs-rmSync.js"; -// https://stackoverflow.com/questions/13786160/copy-folder-recursively-in-node-js /** - * Look ma, it's cp -R. - * @param {string} src The path to the thing to copy. - * @param {string} dest The path to the new copy. + * Copy across the required language files + * Creates a local directory (./languages) and copies the required files + * into it. + * @param {string} langCode Code of language to update. A file will be + * created with this code if one does not already exist + * @param {string} baseLang The second base language file to copy. This + * will be ignored if set to "en" as en.js is copied by default */ -const copyRecursiveSync = function (src, dest) { - let exists = fs.existsSync(src); - let stats = exists && fs.statSync(src); - let isDirectory = exists && stats.isDirectory(); - - if (isDirectory) { - fs.mkdirSync(dest); - fs.readdirSync(src).forEach(function (childItemName) { - copyRecursiveSync(path.join(src, childItemName), - path.join(dest, childItemName)); - }); - } else { - fs.copyFileSync(src, dest); +function copyFiles(langCode, baseLang) { + if (fs.existsSync("./languages")) { + rmSync("./languages", { recursive: true }); } -}; + fs.mkdirSync("./languages"); -console.log("Arguments:", process.argv); -const baseLangCode = process.argv[2] || "en"; -console.log("Base Lang: " + baseLangCode); -if (fs.existsSync("./languages")) { - rmSync("./languages", { recursive: true }); + if (!fs.existsSync(`../../src/languages/${langCode}.js`)) { + fs.closeSync(fs.openSync(`./languages/${langCode}.js`, "a")); + } else { + fs.copyFileSync(`../../src/languages/${langCode}.js`, `./languages/${langCode}.js`); + } + fs.copyFileSync("../../src/languages/en.js", "./languages/en.js"); + if (baseLang !== "en") { + fs.copyFileSync(`../../src/languages/${baseLang}.js`, `./languages/${baseLang}.js`); + } } -copyRecursiveSync("../../src/languages", "./languages"); - -const en = (await import("./languages/en.js")).default; -const baseLang = (await import(`./languages/${baseLangCode}.js`)).default; -const files = fs.readdirSync("./languages"); -console.log("Files:", files); -for (const file of files) { - if (! file.endsWith(".js")) { - console.log("Skipping " + file); - continue; - } +/** + * Update the specified language file + * @param {string} langCode Language code to update + * @param {string} baseLang Second language to copy keys from + */ +async function updateLanguage(langCode, baseLangCode) { + const en = (await import("./languages/en.js")).default; + const baseLang = (await import(`./languages/${baseLangCode}.js`)).default; + let file = langCode + ".js"; console.log("Processing " + file); const lang = await import("./languages/" + file); @@ -83,5 +77,20 @@ for (const file of files) { fs.writeFileSync(`../../src/languages/${file}`, code); } +// Get command line arguments +const baseLangCode = process.env.npm_config_baselang || "en"; +const langCode = process.env.npm_config_language; + +// We need the file to edit +if (langCode == null) { + throw new Error("Argument --language= must be provided"); +} + +console.log("Base Lang: " + baseLangCode); +console.log("Updating: " + langCode); + +copyFiles(langCode, baseLangCode); +await updateLanguage(langCode, baseLangCode); rmSync("./languages", { recursive: true }); + console.log("Done. Fixing formatting by ESLint..."); diff --git a/package.json b/package.json index d478a1d2..f5f78f3a 100644 --- a/package.json +++ b/package.json @@ -51,8 +51,7 @@ "test-nodejs16": "docker build --progress plain -f test/ubuntu-nodejs16.dockerfile .", "simple-dns-server": "node extra/simple-dns-server.js", "simple-mqtt-server": "node extra/simple-mqtt-server.js", - "update-language-files-with-base-lang": "cd extra/update-language-files && node index.js %npm_config_base_lang% && eslint ../../src/languages/**.js --fix", - "update-language-files": "cd extra/update-language-files && node index.js && eslint ../../src/languages/**.js --fix", + "update-language-files": "cd extra/update-language-files && node index.js && cross-env-shell eslint ../../src/languages/$npm_config_language.js --fix", "ncu-patch": "npm-check-updates -u -t patch", "release-final": "node extra/update-version.js && npm run build-docker && node ./extra/press-any-key.js && npm run upload-artifacts && node ./extra/update-wiki-version.js", "release-beta": "node extra/beta/update-version.js && npm run build && node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:$VERSION -t louislam/uptime-kuma:beta . --target release --push && node ./extra/press-any-key.js && npm run upload-artifacts", diff --git a/src/languages/README.md b/src/languages/README.md index d505476a..eddd6102 100644 --- a/src/languages/README.md +++ b/src/languages/README.md @@ -1,10 +1,13 @@ # How to translate 1. Fork this repo. -2. Create a language file (e.g. `zh-TW.js`). The filename must be ISO language code: http://www.lingoes.net/en/translator/langcode.htm -3. Run `npm run update-language-files`. You can also use this command to check if there are new strings to translate for your language. -4. Your language file should be filled in. You can translate now. -5. Add it into `languageList` constant. -6. Make a [pull request](https://github.com/louislam/uptime-kuma/pulls) when you have done. +2. Run `npm run update-language-files --language=` where `` + is a valid ISO language code: + http://www.lingoes.net/en/translator/langcode.htm. You can also use + this command to check if there are new strings to + translate for your language. +3. Your language file should be filled in. You can translate now. +4. Add it into `languageList` constant. +5. Make a [pull request](https://github.com/louislam/uptime-kuma/pulls) when you have done. If you do not have programming skills, let me know in [the issues section](https://github.com/louislam/uptime-kuma/issues). I will assist you. 😏 From 230e5110b1db0527c763daa680fa556a06d3bd9b Mon Sep 17 00:00:00 2001 From: Kevin Falentio Date: Sat, 8 Oct 2022 19:59:22 +0700 Subject: [PATCH 39/48] Fix typo in id-ID language file (#2202) --- src/languages/id-ID.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/id-ID.js b/src/languages/id-ID.js index f8ee3ab7..fe5d3594 100644 --- a/src/languages/id-ID.js +++ b/src/languages/id-ID.js @@ -565,7 +565,7 @@ export default { Examples: "Contoh", "Home Assistant URL": "Home Assistant URL", "Long-Lived Access Token": "Token Akses Berumur Panjang", - "Long-Lived Access Token canbe created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Token Akses Berumur Panjang dapat dibuat dengan mengklik nama profil Anda (kiri bawah) dan menggulir ke bawah lalu klik Buat Token. ", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Token Akses Berumur Panjang dapat dibuat dengan mengklik nama profil Anda (kiri bawah) dan menggulir ke bawah lalu klik Buat Token. ", "Notification Service": "Layanan Pemberitahuan", "default: notify all devices": "bawaan: notifikasi seluruh perangkat", "A listof Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Daftar Layanan Pemberitahuan dapat ditemukan di Home Assistant pada \"Developer Tools > Services\" cari \"notification\" lalu cari nama perangkat Anda.", From ad1a7c255f214d2ce0be9d71d0d232d246fb64f9 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sat, 8 Oct 2022 23:56:58 +0800 Subject: [PATCH 40/48] Drop exports.entryPage fully --- server/server.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/server/server.js b/server/server.js index 620e5bb4..2efad753 100644 --- a/server/server.js +++ b/server/server.js @@ -127,6 +127,7 @@ const StatusPage = require("./model/status_page"); const { cloudflaredSocketHandler, autoStart: cloudflaredAutoStart, stop: cloudflaredStop } = require("./socket-handlers/cloudflared-socket-handler"); const { proxySocketHandler } = require("./socket-handlers/proxy-socket-handler"); const { dockerSocketHandler } = require("./socket-handlers/docker-socket-handler"); +const { Settings } = require("./settings"); app.use(express.json()); @@ -155,9 +156,7 @@ let needSetup = false; Database.init(args); await initDatabase(testMode); - const entryPage = (await getSettings("general"))["entryPage"]; - exports.entryPage = entryPage; - UptimeKumaServer.getInstance().entryPage = entryPage; + server.entryPage = await Settings.get("entryPage"); await StatusPage.loadDomainMappingList(); log.info("server", "Adding route"); @@ -178,7 +177,7 @@ let needSetup = false; log.debug("entry", `Request Domain: ${hostname}`); - const uptimeKumaEntryPage = UptimeKumaServer.getInstance().entryPage; + const uptimeKumaEntryPage = server.entryPage; if (hostname in StatusPage.domainMappingList) { log.debug("entry", "This is a status page domain"); @@ -1087,8 +1086,7 @@ let needSetup = false; } await setSettings("general", data); - exports.entryPage = data.entryPage; - UptimeKumaServer.getInstance().entryPage = data.entryPage; + server.entryPage = data.entryPage; callback({ ok: true, From 1c8631af8d5b3547f1fff5bea1ee3da75b7ee45f Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 9 Oct 2022 16:02:47 +0800 Subject: [PATCH 41/48] Pin dependencies (#2205) --- package-lock.json | 48 +++++++++++++++++++++++------------------------ package.json | 48 +++++++++++++++++++++++------------------------ 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4f222171..6053fa5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,47 +12,47 @@ "@louislam/sqlite3": "~15.0.6", "args-parser": "~1.3.0", "axios": "~0.27.0", - "axios-ntlm": "^1.3.0", - "badge-maker": "^3.3.1", + "axios-ntlm": "~1.3.0", + "badge-maker": "~3.3.1", "bcryptjs": "~2.4.3", "bree": "~7.1.5", "cacheable-lookup": "~6.0.4", - "chardet": "^1.3.0", + "chardet": "~1.4.0", "check-password-strength": "^2.0.5", - "cheerio": "^1.0.0-rc.10", - "chroma-js": "^2.1.2", + "cheerio": "~1.0.0-rc.12", + "chroma-js": "~2.4.2", "command-exists": "~1.2.9", "compare-versions": "~3.6.0", - "compression": "^1.7.4", - "dayjs": "^1.11.0", + "compression": "~1.7.4", + "dayjs": "~1.11.5", "express": "~4.17.3", "express-basic-auth": "~1.2.1", - "express-static-gzip": "^2.1.7", + "express-static-gzip": "~2.1.7", "form-data": "~4.0.0", "http-graceful-shutdown": "~3.1.7", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "iconv-lite": "^0.6.3", - "jsesc": "^3.0.2", + "http-proxy-agent": "~5.0.0", + "https-proxy-agent": "~5.0.1", + "iconv-lite": "~0.6.3", + "jsesc": "~3.0.2", "jsonwebtoken": "~8.5.1", - "jwt-decode": "^3.1.2", - "limiter": "^2.1.0", - "mqtt": "^4.2.8", - "mssql": "^8.1.0", + "jwt-decode": "~3.1.2", + "limiter": "~2.1.0", + "mqtt": "~4.3.7", + "mssql": "~8.1.4", "node-cloudflared-tunnel": "~1.0.9", - "node-radius-client": "^1.0.0", + "node-radius-client": "~1.0.0", "nodemailer": "~6.6.5", "notp": "~2.0.3", "password-hash": "~1.2.2", - "pg": "^8.7.3", - "pg-connection-string": "^2.5.0", + "pg": "~8.8.0", + "pg-connection-string": "~2.5.0", "prom-client": "~13.2.0", "prometheus-api-metrics": "~3.2.1", "redbean-node": "0.1.4", "socket.io": "~4.4.1", "socket.io-client": "~4.4.1", "socks-proxy-agent": "6.1.1", - "tar": "^6.1.11", + "tar": "~6.1.11", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2" }, @@ -82,18 +82,18 @@ "dns2": "~2.0.1", "eslint": "~8.14.0", "eslint-plugin-vue": "~8.7.1", - "favico.js": "^0.3.10", + "favico.js": "~0.3.10", "jest": "~27.2.5", "postcss-html": "~1.5.0", "postcss-rtlcss": "~3.7.2", "postcss-scss": "~4.0.4", - "prismjs": "^1.27.0", + "prismjs": "~1.29.0", "qrcode": "~1.5.0", "rollup-plugin-visualizer": "^5.6.0", "sass": "~1.42.1", "stylelint": "~14.7.1", "stylelint-config-standard": "~25.0.0", - "terser": "^5.15.0", + "terser": "~5.15.0", "timezones-list": "~3.0.1", "typescript": "~4.4.4", "v-pagination-3": "~0.1.7", @@ -106,7 +106,7 @@ "vue-i18n": "~9.1.9", "vue-image-crop-upload": "~3.0.3", "vue-multiselect": "~3.0.0-alpha.2", - "vue-prism-editor": "^2.0.0-alpha.2", + "vue-prism-editor": "~2.0.0-alpha.2", "vue-qrcode": "~1.0.0", "vue-router": "~4.0.14", "vue-toastification": "~2.0.0-rc.5", diff --git a/package.json b/package.json index f5f78f3a..0c72722d 100644 --- a/package.json +++ b/package.json @@ -66,47 +66,47 @@ "@louislam/sqlite3": "~15.0.6", "args-parser": "~1.3.0", "axios": "~0.27.0", - "axios-ntlm": "^1.3.0", - "badge-maker": "^3.3.1", + "axios-ntlm": "~1.3.0", + "badge-maker": "~3.3.1", "bcryptjs": "~2.4.3", "bree": "~7.1.5", "cacheable-lookup": "~6.0.4", - "chardet": "^1.3.0", + "chardet": "~1.4.0", "check-password-strength": "^2.0.5", - "cheerio": "^1.0.0-rc.10", - "chroma-js": "^2.1.2", + "cheerio": "~1.0.0-rc.12", + "chroma-js": "~2.4.2", "command-exists": "~1.2.9", "compare-versions": "~3.6.0", - "compression": "^1.7.4", - "dayjs": "^1.11.0", + "compression": "~1.7.4", + "dayjs": "~1.11.5", "express": "~4.17.3", "express-basic-auth": "~1.2.1", - "express-static-gzip": "^2.1.7", + "express-static-gzip": "~2.1.7", "form-data": "~4.0.0", "http-graceful-shutdown": "~3.1.7", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "iconv-lite": "^0.6.3", - "jsesc": "^3.0.2", + "http-proxy-agent": "~5.0.0", + "https-proxy-agent": "~5.0.1", + "iconv-lite": "~0.6.3", + "jsesc": "~3.0.2", "jsonwebtoken": "~8.5.1", - "jwt-decode": "^3.1.2", - "limiter": "^2.1.0", - "mqtt": "^4.2.8", - "mssql": "^8.1.0", + "jwt-decode": "~3.1.2", + "limiter": "~2.1.0", + "mqtt": "~4.3.7", + "mssql": "~8.1.4", "node-cloudflared-tunnel": "~1.0.9", - "node-radius-client": "^1.0.0", + "node-radius-client": "~1.0.0", "nodemailer": "~6.6.5", "notp": "~2.0.3", "password-hash": "~1.2.2", - "pg": "^8.7.3", - "pg-connection-string": "^2.5.0", + "pg": "~8.8.0", + "pg-connection-string": "~2.5.0", "prom-client": "~13.2.0", "prometheus-api-metrics": "~3.2.1", "redbean-node": "0.1.4", "socket.io": "~4.4.1", "socket.io-client": "~4.4.1", "socks-proxy-agent": "6.1.1", - "tar": "^6.1.11", + "tar": "~6.1.11", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2" }, @@ -136,18 +136,18 @@ "dns2": "~2.0.1", "eslint": "~8.14.0", "eslint-plugin-vue": "~8.7.1", - "favico.js": "^0.3.10", + "favico.js": "~0.3.10", "jest": "~27.2.5", "postcss-html": "~1.5.0", "postcss-rtlcss": "~3.7.2", "postcss-scss": "~4.0.4", - "prismjs": "^1.27.0", + "prismjs": "~1.29.0", "qrcode": "~1.5.0", "rollup-plugin-visualizer": "^5.6.0", "sass": "~1.42.1", "stylelint": "~14.7.1", "stylelint-config-standard": "~25.0.0", - "terser": "^5.15.0", + "terser": "~5.15.0", "timezones-list": "~3.0.1", "typescript": "~4.4.4", "v-pagination-3": "~0.1.7", @@ -160,7 +160,7 @@ "vue-i18n": "~9.1.9", "vue-image-crop-upload": "~3.0.3", "vue-multiselect": "~3.0.0-alpha.2", - "vue-prism-editor": "^2.0.0-alpha.2", + "vue-prism-editor": "~2.0.0-alpha.2", "vue-qrcode": "~1.0.0", "vue-router": "~4.0.14", "vue-toastification": "~2.0.0-rc.5", From 07f9aafd7bce1b6d5226744654070a2fc7d54745 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 9 Oct 2022 16:50:47 +0800 Subject: [PATCH 42/48] Update to 1.18.4 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0c72722d..180bea28 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uptime-kuma", - "version": "1.18.3", + "version": "1.18.4", "license": "MIT", "repository": { "type": "git", @@ -38,7 +38,7 @@ "build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", "build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push", "upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain", - "setup": "git checkout 1.18.3 && npm ci --production && npm run download-dist", + "setup": "git checkout 1.18.4 && npm ci --production && npm run download-dist", "download-dist": "node extra/download-dist.js", "mark-as-nightly": "node extra/mark-as-nightly.js", "reset-password": "node extra/reset-password.js", From 71af23cf0003c4a5086a9eb44abeabd1ccb8bdce Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Mon, 10 Oct 2022 02:47:24 +0800 Subject: [PATCH 43/48] Fix #2207 --- server/model/status_page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/model/status_page.js b/server/model/status_page.js index 7682272c..68c7f8b0 100644 --- a/server/model/status_page.js +++ b/server/model/status_page.js @@ -58,7 +58,7 @@ class StatusPage extends BeanModel { // Preload data // Add jsesc, fix https://github.com/louislam/uptime-kuma/issues/2186 - const escapedJSONObject = jsesc(JSON.stringify(await StatusPage.getStatusPageData(statusPage)), { + const escapedJSONObject = jsesc(await StatusPage.getStatusPageData(statusPage), { "isScriptContext": true }); From bd42450e55dc29bdd1daddb1080aaa6d81b32912 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Mon, 10 Oct 2022 16:23:32 +0800 Subject: [PATCH 44/48] Update vue-i18n from 9.1.9 to 9.2.2, force to use production version of vue-i18n in order to improve the performance --- package-lock.json | 186 +++++++++++++++++----------------------------- package.json | 2 +- src/i18n.js | 2 +- 3 files changed, 71 insertions(+), 119 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6053fa5f..44af1469 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uptime-kuma", - "version": "1.18.3", + "version": "1.18.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "uptime-kuma", - "version": "1.18.3", + "version": "1.18.4", "license": "MIT", "dependencies": { "@louislam/sqlite3": "~15.0.6", @@ -103,7 +103,7 @@ "vue-chart-3": "3.0.9", "vue-confirm-dialog": "~1.0.2", "vue-contenteditable": "~3.0.4", - "vue-i18n": "~9.1.9", + "vue-i18n": "~9.2.2", "vue-image-crop-upload": "~3.0.3", "vue-multiselect": "~3.0.0-alpha.2", "vue-prism-editor": "~2.0.0-alpha.2", @@ -2338,92 +2338,65 @@ "dev": true }, "node_modules/@intlify/core-base": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.1.10.tgz", - "integrity": "sha512-So9CNUavB/IsZ+zBmk2Cv6McQp6vc2wbGi1S0XQmJ8Vz+UFcNn9MFXAe9gY67PreIHrbLsLxDD0cwo1qsxM1Nw==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz", + "integrity": "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==", "dev": true, "dependencies": { - "@intlify/devtools-if": "9.1.10", - "@intlify/message-compiler": "9.1.10", - "@intlify/message-resolver": "9.1.10", - "@intlify/runtime": "9.1.10", - "@intlify/shared": "9.1.10", - "@intlify/vue-devtools": "9.1.10" + "@intlify/devtools-if": "9.2.2", + "@intlify/message-compiler": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2" }, "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/@intlify/devtools-if": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.1.10.tgz", - "integrity": "sha512-SHaKoYu6sog3+Q8js1y3oXLywuogbH1sKuc7NSYkN3GElvXSBaMoCzW+we0ZSFqj/6c7vTNLg9nQ6rxhKqYwnQ==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz", + "integrity": "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==", "dev": true, "dependencies": { - "@intlify/shared": "9.1.10" + "@intlify/shared": "9.2.2" }, "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/@intlify/message-compiler": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.1.10.tgz", - "integrity": "sha512-+JiJpXff/XTb0EadYwdxOyRTB0hXNd4n1HaJ/a4yuV960uRmPXaklJsedW0LNdcptd/hYUZtCkI7Lc9J5C1gxg==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz", + "integrity": "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==", "dev": true, "dependencies": { - "@intlify/message-resolver": "9.1.10", - "@intlify/shared": "9.1.10", + "@intlify/shared": "9.2.2", "source-map": "0.6.1" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/@intlify/message-resolver": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.1.10.tgz", - "integrity": "sha512-5YixMG/M05m0cn9+gOzd4EZQTFRUu8RGhzxJbR1DWN21x/Z3bJ8QpDYj6hC4FwBj5uKsRfKpJQ3Xqg98KWoA+w==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@intlify/runtime": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.1.10.tgz", - "integrity": "sha512-7QsuByNzpe3Gfmhwq6hzgXcMPpxz8Zxb/XFI6s9lQdPLPe5Lgw4U1ovRPZTOs6Y2hwitR3j/HD8BJNGWpJnOFA==", - "dev": true, - "dependencies": { - "@intlify/message-compiler": "9.1.10", - "@intlify/message-resolver": "9.1.10", - "@intlify/shared": "9.1.10" - }, - "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/@intlify/shared": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.1.10.tgz", - "integrity": "sha512-Om54xJeo1Vw+K1+wHYyXngE8cAbrxZHpWjYzMR9wCkqbhGtRV5VLhVc214Ze2YatPrWlS2WSMOWXR8JktX/IgA==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz", + "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==", "dev": true, "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/@intlify/vue-devtools": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.1.10.tgz", - "integrity": "sha512-5l3qYARVbkWAkagLu1XbDUWRJSL8br1Dj60wgMaKB0+HswVsrR6LloYZTg7ozyvM621V6+zsmwzbQxbVQyrytQ==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz", + "integrity": "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==", "dev": true, "dependencies": { - "@intlify/message-resolver": "9.1.10", - "@intlify/runtime": "9.1.10", - "@intlify/shared": "9.1.10" + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2" }, "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/@istanbuljs/load-nyc-config": { @@ -16107,18 +16080,18 @@ } }, "node_modules/vue-i18n": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.1.10.tgz", - "integrity": "sha512-jpr7gV5KPk4n+sSPdpZT8Qx3XzTcNDWffRlHV/cT2NUyEf+sEgTTmLvnBAibjOFJ0zsUyZlVTAWH5DDnYep+1g==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz", + "integrity": "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==", "dev": true, "dependencies": { - "@intlify/core-base": "9.1.10", - "@intlify/shared": "9.1.10", - "@intlify/vue-devtools": "9.1.10", - "@vue/devtools-api": "^6.0.0-beta.7" + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2", + "@vue/devtools-api": "^6.2.1" }, "engines": { - "node": ">= 10" + "node": ">= 14" }, "peerDependencies": { "vue": "^3.0.0" @@ -18279,71 +18252,50 @@ "dev": true }, "@intlify/core-base": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.1.10.tgz", - "integrity": "sha512-So9CNUavB/IsZ+zBmk2Cv6McQp6vc2wbGi1S0XQmJ8Vz+UFcNn9MFXAe9gY67PreIHrbLsLxDD0cwo1qsxM1Nw==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz", + "integrity": "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==", "dev": true, "requires": { - "@intlify/devtools-if": "9.1.10", - "@intlify/message-compiler": "9.1.10", - "@intlify/message-resolver": "9.1.10", - "@intlify/runtime": "9.1.10", - "@intlify/shared": "9.1.10", - "@intlify/vue-devtools": "9.1.10" + "@intlify/devtools-if": "9.2.2", + "@intlify/message-compiler": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2" } }, "@intlify/devtools-if": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.1.10.tgz", - "integrity": "sha512-SHaKoYu6sog3+Q8js1y3oXLywuogbH1sKuc7NSYkN3GElvXSBaMoCzW+we0ZSFqj/6c7vTNLg9nQ6rxhKqYwnQ==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz", + "integrity": "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==", "dev": true, "requires": { - "@intlify/shared": "9.1.10" + "@intlify/shared": "9.2.2" } }, "@intlify/message-compiler": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.1.10.tgz", - "integrity": "sha512-+JiJpXff/XTb0EadYwdxOyRTB0hXNd4n1HaJ/a4yuV960uRmPXaklJsedW0LNdcptd/hYUZtCkI7Lc9J5C1gxg==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz", + "integrity": "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==", "dev": true, "requires": { - "@intlify/message-resolver": "9.1.10", - "@intlify/shared": "9.1.10", + "@intlify/shared": "9.2.2", "source-map": "0.6.1" } }, - "@intlify/message-resolver": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.1.10.tgz", - "integrity": "sha512-5YixMG/M05m0cn9+gOzd4EZQTFRUu8RGhzxJbR1DWN21x/Z3bJ8QpDYj6hC4FwBj5uKsRfKpJQ3Xqg98KWoA+w==", - "dev": true - }, - "@intlify/runtime": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.1.10.tgz", - "integrity": "sha512-7QsuByNzpe3Gfmhwq6hzgXcMPpxz8Zxb/XFI6s9lQdPLPe5Lgw4U1ovRPZTOs6Y2hwitR3j/HD8BJNGWpJnOFA==", - "dev": true, - "requires": { - "@intlify/message-compiler": "9.1.10", - "@intlify/message-resolver": "9.1.10", - "@intlify/shared": "9.1.10" - } - }, "@intlify/shared": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.1.10.tgz", - "integrity": "sha512-Om54xJeo1Vw+K1+wHYyXngE8cAbrxZHpWjYzMR9wCkqbhGtRV5VLhVc214Ze2YatPrWlS2WSMOWXR8JktX/IgA==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz", + "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==", "dev": true }, "@intlify/vue-devtools": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.1.10.tgz", - "integrity": "sha512-5l3qYARVbkWAkagLu1XbDUWRJSL8br1Dj60wgMaKB0+HswVsrR6LloYZTg7ozyvM621V6+zsmwzbQxbVQyrytQ==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz", + "integrity": "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==", "dev": true, "requires": { - "@intlify/message-resolver": "9.1.10", - "@intlify/runtime": "9.1.10", - "@intlify/shared": "9.1.10" + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2" } }, "@istanbuljs/load-nyc-config": { @@ -28795,15 +28747,15 @@ } }, "vue-i18n": { - "version": "9.1.10", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.1.10.tgz", - "integrity": "sha512-jpr7gV5KPk4n+sSPdpZT8Qx3XzTcNDWffRlHV/cT2NUyEf+sEgTTmLvnBAibjOFJ0zsUyZlVTAWH5DDnYep+1g==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz", + "integrity": "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==", "dev": true, "requires": { - "@intlify/core-base": "9.1.10", - "@intlify/shared": "9.1.10", - "@intlify/vue-devtools": "9.1.10", - "@vue/devtools-api": "^6.0.0-beta.7" + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2", + "@vue/devtools-api": "^6.2.1" } }, "vue-image-crop-upload": { diff --git a/package.json b/package.json index 180bea28..6f48fedd 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,7 @@ "vue-chart-3": "3.0.9", "vue-confirm-dialog": "~1.0.2", "vue-contenteditable": "~3.0.4", - "vue-i18n": "~9.1.9", + "vue-i18n": "~9.2.2", "vue-image-crop-upload": "~3.0.3", "vue-multiselect": "~3.0.0-alpha.2", "vue-prism-editor": "~2.0.0-alpha.2", diff --git a/src/i18n.js b/src/i18n.js index 4c19eb00..902177cf 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -1,4 +1,4 @@ -import { createI18n } from "vue-i18n/index"; +import { createI18n } from "vue-i18n/dist/vue-i18n.esm-browser.prod.js"; import en from "./languages/en"; const languageList = { From 2ee8378814d5cf92dceabcf2d9e4e79505001f16 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Tue, 11 Oct 2022 02:32:57 +0800 Subject: [PATCH 45/48] Update to 1.18.5 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6f48fedd..b1a76d36 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uptime-kuma", - "version": "1.18.4", + "version": "1.18.5", "license": "MIT", "repository": { "type": "git", @@ -38,7 +38,7 @@ "build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", "build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push", "upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain", - "setup": "git checkout 1.18.4 && npm ci --production && npm run download-dist", + "setup": "git checkout 1.18.5 && npm ci --production && npm run download-dist", "download-dist": "node extra/download-dist.js", "mark-as-nightly": "node extra/mark-as-nightly.js", "reset-password": "node extra/reset-password.js", From 180d881ac122fb8f85805153f2342725a4843851 Mon Sep 17 00:00:00 2001 From: Alexander Borzov <59200516+Borzoff@users.noreply.github.com> Date: Tue, 11 Oct 2022 10:35:08 +0300 Subject: [PATCH 46/48] Update ru-RU.js (#2217) --- src/languages/ru-RU.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/languages/ru-RU.js b/src/languages/ru-RU.js index 0aaf0968..6922f51b 100644 --- a/src/languages/ru-RU.js +++ b/src/languages/ru-RU.js @@ -393,6 +393,12 @@ export default { alertaAlertState: "Состояние алерта", alertaRecoverState: "Состояние восстановления", Proxies: "Прокси", + "Setup Proxy": "Настройка Прокси", + "Proxy Protocol": "Протокол Прокси", + "Proxy Server": "Прокси", + "Proxy server has authentication": "Прокси имеет аутентификацию", + "Reverse Proxy": "Обратный прокси", + "No Proxy": "Без прокси", default: "По умолчанию", enabled: "Включено", setAsDefault: "Установлено по умолчанию", From cb5f90aa89eae0d84c7eb62c98c956b7055183a3 Mon Sep 17 00:00:00 2001 From: MagicFun1241 Date: Wed, 12 Oct 2022 19:27:50 +0300 Subject: [PATCH 47/48] Update Russian locale (#2218) * Update ru-RU.js * Remove duplicates * Remove duplicates x2 * Revert to previous version for one translation * Removed conflicting lines * Remove conflicting 'Reverse Proxy' key --- src/languages/ru-RU.js | 172 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) diff --git a/src/languages/ru-RU.js b/src/languages/ru-RU.js index 6922f51b..2e6fdf7b 100644 --- a/src/languages/ru-RU.js +++ b/src/languages/ru-RU.js @@ -406,4 +406,176 @@ export default { proxyDescription: "Прокси должны быть привязаны к монитору, чтобы работать.", enableProxyDescription: "Этот прокси не будет влиять на запросы монитора, пока не будет активирован. Вы можете контролировать временное отключение прокси для всех мониторов через статус активации.", setAsDefaultProxyDescription: "Этот прокси будет по умолчанию включен для новых мониторов. Вы всё ещё можете отдельно отключать прокси в каждом мониторе.", + Invalid: "Недействительный", + AccessKeyId: "AccessKey ID", + SecretAccessKey: "AccessKey Secret", + PhoneNumbers: "PhoneNumbers", + TemplateCode: "TemplateCode", + SignName: "SignName", + "Sms template must contain parameters: ": "Шаблон СМС должен содержать параметры: ", + "Bark Endpoint": "Bark Endpoint", + "Bark Group": "Bark Group", + "Bark Sound": "Bark Sound", + WebHookUrl: "WebHookUrl", + SecretKey: "SecretKey", + "For safety, must use secret key": "В целях безопасности необходимо использовать секретный ключ", + "Device Token": "Токен устройства", + Platform: "Платформа", + iOS: "iOS", + Android: "Android", + Huawei: "Huawei", + High: "High", + Retry: "Повторить", + Topic: "Тема", + "WeCom Bot Key": "WeCom Bot Key", + User: "Пользователь", + Installed: "Установлено", + "Not installed": "Не установлено", + Running: "Запускается", + "Not running": "Не запускается", + "Remove Token": "Удалить токен", + Start: "Запустить", + Stop: "Остановить", + "Uptime Kuma": "Uptime Kuma", + Slug: "Slug", + "Accept characters:": "Принимаемые символы:", + startOrEndWithOnly: "Начинается или кончается только {0}", + "No consecutive dashes": "Без последовательных тире", + "The slug is already taken. Please choose another slug.": "The slug is already taken. Please choose another slug.", + "Page Not Found": "Страница не найдена", + wayToGetCloudflaredURL: "(Скачать cloudflared с {0})", + cloudflareWebsite: "Cloudflare Website", + "Message:": "Сообщение:", + "Don't know how to get the token? Please read the guide:": "Don't know how to get the token? Please read the guide:", + "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.", + "HTTP Headers": "HTTP заголовки", + "Trust Proxy": "Доверять прокси", + "Other Software": "Другое программное обеспечение", + "For example: nginx, Apache and Traefik.": "К примеру: nginx, Apache и Traefik.", + "Please read": "Пожалуйста, прочитайте", + "Subject:": "Тема:", + "Valid To:": "Действителен до:", + "Days Remaining:": "Дней осталось:", + "Issuer:": "Издатель:", + "Fingerprint:": "Отпечаток:", + "No status pages": "Нет статусных страниц", + "Domain Name Expiry Notification": "Уведомление об истечении срока действия доменного имени", + Proxy: "Прокси", + "Date Created": "Дата создания", + HomeAssistant: "Home Assistant", + onebotHttpAddress: "OneBot HTTP Address", + onebotMessageType: "OneBot Message Type", + onebotGroupMessage: "Группа", + onebotPrivateMessage: "Private", + onebotUserOrGroupId: "Группа/ID пользователя", + onebotSafetyTips: "В целях безопасности необходимо установить токен доступа", + "PushDeer Key": "PushDeer Key", + "Footer Text": "Текст нижнего колонтитула", + "Show Powered By": "Показывать на чем создано", + "Domain Names": "Доменные имена", + signedInDisp: "Вы вошли как {0}", + signedInDispDisabled: "Аутентификация отключена.", + RadiusSecret: "Секрет Radius", + RadiusSecretDescription: "Общий секрет между клиентом и сервером", + RadiusCalledStationId: "Идентификатор вызываемой станции", + RadiusCalledStationIdDescription: "Идентификатор вызываемого устройства", + RadiusCallingStationId: "Идентификатор вызывающей станции", + RadiusCallingStationIdDescription: "Идентификатор вызывающего устройства", + "Certificate Expiry Notification": "Уведомление об истечении срока действия сертификата", + "API Username": "Имя пользователя API", + "API Key": "API ключ", + "Recipient Number": "Номер получателя", + "From Name/Number": "Имя/номер отправителя", + "Leave blank to use a shared sender number.": "Оставьте пустым, чтобы использовать общий номер отправителя.", + "Octopush API Version": "Версия API Octopush", + "Legacy Octopush-DM": "Legacy Octopush-DM", + endpoint: "endpoint", + octopushAPIKey: "\"API key\" из учетных данных HTTP API в панели управления", + octopushLogin: "\"Login\" из учетных данных HTTP API в панели управления", + promosmsLogin: "Логин API", + promosmsPassword: "Пароль API", + "pushoversounds pushover": "Pushover (default)", + "pushoversounds bike": "Bike", + "pushoversounds bugle": "Bugle", + "pushoversounds cashregister": "Cash Register", + "pushoversounds classical": "Classical", + "pushoversounds cosmic": "Cosmic", + "pushoversounds falling": "Falling", + "pushoversounds gamelan": "Gamelan", + "pushoversounds incoming": "Incoming", + "pushoversounds intermission": "Intermission", + "pushoversounds magic": "Magic", + "pushoversounds mechanical": "Mechanical", + "pushoversounds pianobar": "Piano Bar", + "pushoversounds siren": "Siren", + "pushoversounds spacealarm": "Space Alarm", + "pushoversounds tugboat": "Tug Boat", + "pushoversounds alien": "Alien Alarm (long)", + "pushoversounds climb": "Climb (long)", + "pushoversounds persistent": "Persistent (long)", + "pushoversounds echo": "Pushover Echo (long)", + "pushoversounds updown": "Up Down (long)", + "pushoversounds vibrate": "Vibrate Only", + "pushoversounds none": "None (silent)", + pushyAPIKey: "Secret API Key", + pushyToken: "Токен устройства", + "Using a Reverse Proxy?": "Используете обратный прокси?", + "Check how to config it for WebSocket": "Проверьте, как настроить его для WebSocket", + "Steam Game Server": "Steam Game Server", + "Most likely causes:": "Наиболее вероятные причины:", + "The resource is no longer available.": "Ресурс больше не доступен.", + "There might be a typing error in the address.": "В адресе может быть опечатка.", + "What you can try:": "Что вы можете попробовать:", + "Retype the address.": "Повторите адрес.", + "Go back to the previous page.": "Вернуться на предыдущую страницу.", + "Coming Soon": "Скоро", + wayToGetClickSendSMSToken: "Вы можете получить имя пользователя API и ключ API из {0} .", + "Connection String": "Строка подключения", + Query: "Запрос", + settingsCertificateExpiry: "Истекание TLS сертификата", + certificationExpiryDescription: "HTTPS Мониторы инициируют уведомление, когда срок действия сертификата TLS истечет:", + "Setup Docker Host": "Настроить Docker Host", + "Connection Type": "Тип соединения", + "Docker Daemon": "Docker Daemon", + deleteDockerHostMsg: "Are you sure want to delete this docker host for all monitors?", + socket: "Socket", + tcp: "TCP / HTTP", + "Docker Container": "Docker контейнер", + "Container Name / ID": "Название контейнера / ID", + "Docker Host": "Docker Host", + "Docker Hosts": "Docker Hosts", + "ntfy Topic": "ntfy Topic", + Domain: "Домен", + Workstation: "Workstation", + disableCloudflaredNoAuthMsg: "Вы находитесь в режиме без авторизации, пароль не требуется.", + trustProxyDescription: "Доверять заголовкам 'X-Forwarded-*'. Если вы хотите получить правильный IP-адрес клиента, а ваш Uptime Kuma находится под Nginx или Apache, вам следует включить этот параметр.", + wayToGetLineNotifyToken: "Вы можете получить токен доступа в {0}", + Examples: "Примеры", + "Home Assistant URL": "Home Assistant URL", + "Long-Lived Access Token": "Токен доступа с длительным сроком службы", + "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ", + "Notification Service": "Служба уведомлений", + "default: notify all devices": "по стандарту: уведомлять все устройства", + "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.", + "Automations can optionally be triggered in Home Assistant:": "При желании автоматизацию можно активировать в Home Assistant.:", + "Trigger type:": "Тип триггера:", + "Event type:": "Тип события:", + "Event data:": "Данные события:", + "Then choose an action, for example switch the scene to where an RGB light is red.": "Затем выберите действие, например, переключите сцену на красный индикатор RGB..", + "Frontend Version": "Версия интерфейса", + "Frontend Version do not match backend version!": "Версия интерфейса не соответствует версии серверной части!", + "Base URL": "Базовый URL", + goAlertInfo: "GoAlert is a An open source application for on-call scheduling, automated escalations and notifications (like SMS or voice calls). Automatically engage the right person, the right way, and at the right time! {0}", + goAlertIntegrationKeyInfo: "Получить общий ключ интеграции API для сервиса в этом формате \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" обычно значение параметра токена скопированного URL.", + goAlert: "GoAlert", + backupOutdatedWarning: "Устарело: поскольку добавлено множество функций, а эта функция резервного копирования немного не поддерживается, она не может создать или восстановить полную резервную копию.", + backupRecommend: "Сделайте резервную копию тома или папки с данными (./data/) напрямую.", + "Optional": "Необязательно", + squadcast: "Squadcast", + SendKey: "SendKey", + "SMSManager API Docs": "Документация к API SMSManager ", + "Gateway Type": "Тип шлюза", + SMSManager: "SMSManager", + "You can divide numbers with": "Вы можете делить числа с", + "or": "или", }; From f459ea845c6a1b192fa35efa44f3116aca921dd1 Mon Sep 17 00:00:00 2001 From: Matthew Nickson Date: Wed, 12 Oct 2022 17:32:05 +0100 Subject: [PATCH 48/48] Added #2182 Add support for custom radius ports (#2197) This commit adds support for the port to be specified when using the radius monitor type. A check has been implemented to ensure that a null value is not passed to the radius check function as could occur with monitors that were created before this change was introduced. The default port of 1812 is displayed when the user selects the radius monitor in much the same way as the DNS port is handled. The port was not included in the hostname in the form hostname:port in order to avoid issues with IPv6 addresses and monitors that had been created before this change was implemented. Signed-off-by: Matthew Nickson Signed-off-by: Matthew Nickson --- server/model/monitor.js | 14 +++++++++++++- server/util-server.js | 13 +++++++++++++ src/pages/EditMonitor.vue | 8 +++++--- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index ac892560..c0a3cce6 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -534,6 +534,17 @@ class Monitor extends BeanModel { bean.ping = dayjs().valueOf() - startTime; } else if (this.type === "radius") { let startTime = dayjs().valueOf(); + + // Handle monitors that were created before the + // update and as such don't have a value for + // this.port. + let port; + if (this.port == null) { + port = 1812; + } else { + port = this.port; + } + try { const resp = await radius( this.hostname, @@ -541,7 +552,8 @@ class Monitor extends BeanModel { this.radiusPassword, this.radiusCalledStationId, this.radiusCallingStationId, - this.radiusSecret + this.radiusSecret, + port ); if (resp.code) { bean.msg = resp.code; diff --git a/server/util-server.js b/server/util-server.js index cf303ba8..b975a43f 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -291,6 +291,17 @@ exports.postgresQuery = function (connectionString, query) { }); }; +/** + * Query radius server + * @param {string} hostname Hostname of radius server + * @param {string} username Username to use + * @param {string} password Password to use + * @param {string} calledStationId ID of called station + * @param {string} callingStationId ID of calling station + * @param {string} secret Secret to use + * @param {number} [port=1812] Port to contact radius server on + * @returns {Promise} + */ exports.radius = function ( hostname, username, @@ -298,9 +309,11 @@ exports.radius = function ( calledStationId, callingStationId, secret, + port = 1812, ) { const client = new radiusClient({ host: hostname, + hostPort: port, dictionaries: [ file ], }); diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 99cbeb95..6d1a7e51 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -97,8 +97,8 @@
- -
+ +
@@ -616,9 +616,11 @@ export default { } // Set default port for DNS if not already defined - if (! this.monitor.port || this.monitor.port === "53") { + if (! this.monitor.port || this.monitor.port === "53" || this.monitor.port === "1812") { if (this.monitor.type === "dns") { this.monitor.port = "53"; + } else if (this.monitor.type === "radius") { + this.monitor.port = "1812"; } else { this.monitor.port = undefined; }