From 5e3ea3293c5d1f37ba65ab94182075b788608b45 Mon Sep 17 00:00:00 2001
From: Lukas <35193662+NixNotCastey@users.noreply.github.com>
Date: Sat, 9 Oct 2021 20:32:45 +0200
Subject: [PATCH 1/9] Very basic email subject customization

---
 server/notification-providers/smtp.js | 10 +++++++++-
 src/components/notifications/SMTP.vue |  5 +++++
 src/languages/en.js                   |  1 +
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js
index ecb583eb7..e5fd53e46 100644
--- a/server/notification-providers/smtp.js
+++ b/server/notification-providers/smtp.js
@@ -20,6 +20,14 @@ class SMTP extends NotificationProvider {
                 pass: notification.smtpPassword,
             };
         }
+        // Lets start with default subject
+        let subject = msg;
+        // Our subject cannot end with whitespace it's often raise spam score
+        let customsubject = notification.customsubject.trim()
+        // If custom subject is not empty, change subject for notification
+        if (customsubject !== "") {
+            subject = customsubject
+        }
 
         let transporter = nodemailer.createTransport(config);
 
@@ -34,7 +42,7 @@ class SMTP extends NotificationProvider {
             cc: notification.smtpCC,
             bcc: notification.smtpBCC,
             to: notification.smtpTo,
-            subject: msg,
+            subject: subject,
             text: bodyTextContent,
             tls: {
                 rejectUnauthorized: notification.smtpIgnoreTLSError || false,
diff --git a/src/components/notifications/SMTP.vue b/src/components/notifications/SMTP.vue
index 72934cdaf..165d39c67 100644
--- a/src/components/notifications/SMTP.vue
+++ b/src/components/notifications/SMTP.vue
@@ -43,6 +43,11 @@
         </div>
     </div>
 
+    <div class="mb-3">
+        <label for="subject-email" class="form-label">{{ $t("Custom Email subject") }}</label>
+        <input id="subject-email" v-model="$parent.notification.customsubject" type="text" class="form-control" autocomplete="false" placeholder="[Uptime Kuma] Service status has changed">
+    </div>
+
     <div class="mb-3">
         <label for="to-email" class="form-label">{{ $t("To Email") }}</label>
         <input id="to-email" v-model="$parent.notification.smtpTo" type="text" class="form-control" autocomplete="false" placeholder="example2@kuma.pet, example3@kuma.pet" :required="!hasRecipient">
diff --git a/src/languages/en.js b/src/languages/en.js
index 2ce8f46be..b59cdb73f 100644
--- a/src/languages/en.js
+++ b/src/languages/en.js
@@ -201,6 +201,7 @@ export default {
     secureOptionTLS: "TLS (465)",
     "Ignore TLS Error": "Ignore TLS Error",
     "From Email": "From Email",
+    "Custom Email subject": "Custom Email Subject (leave blank for default one)",
     "To Email": "To Email",
     smtpCC: "CC",
     smtpBCC: "BCC",

From 792f3c7c5c17a2db80e7f9638e272b4607f3d4c6 Mon Sep 17 00:00:00 2001
From: Lukas <35193662+NixNotCastey@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:48:28 +0200
Subject: [PATCH 2/9] Add support for values of Name, Hostname and Status

---
 server/notification-providers/smtp.js | 30 +++++++++++++++++++++++++++
 src/components/notifications/SMTP.vue |  4 ++--
 src/languages/en.js                   |  2 +-
 3 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js
index e5fd53e46..2bbec5848 100644
--- a/server/notification-providers/smtp.js
+++ b/server/notification-providers/smtp.js
@@ -22,10 +22,40 @@ class SMTP extends NotificationProvider {
         }
         // Lets start with default subject
         let subject = msg;
+
         // Our subject cannot end with whitespace it's often raise spam score
         let customsubject = notification.customsubject.trim()
+
         // If custom subject is not empty, change subject for notification
         if (customsubject !== "") {
+            
+             // Replace "MACROS" with coresponding variable
+            let replaceName = new RegExp("{NAME}", "g");
+            let replaceHostname = new RegExp("{HOSTNAME}", "g");
+            let replaceStatus = new RegExp("{STATUS}", "g");
+
+            let serviceStatus;
+
+            if (monitorJSON !== null) {
+                customsubject = customsubject.replace(replaceName,monitorJSON["name"]);
+                customsubject = customsubject.replace(replaceHostname,monitorJSON["hostname"]);
+            } else {
+                // Insert dummy values during test
+                customsubject = customsubject.replace(replaceName,"Test");
+                customsubject = customsubject.replace(replaceHostname,"example.com");
+            }
+            if (heartbeatJSON !== null) {
+                    if (heartbeatJSON["status"] === 0) {
+                        serviceStatus = "🔴 Down"
+                    } else {
+                        serviceStatus = "✅ Up"
+                    }
+                customsubject = customsubject.replace(replaceStatus,serviceStatus);
+            } else {
+                // Insert dummy values during test
+                customsubject = customsubject.replace(replaceStatus,"TEST");
+            }
+
             subject = customsubject
         }
 
diff --git a/src/components/notifications/SMTP.vue b/src/components/notifications/SMTP.vue
index 165d39c67..01bdf8607 100644
--- a/src/components/notifications/SMTP.vue
+++ b/src/components/notifications/SMTP.vue
@@ -44,8 +44,8 @@
     </div>
 
     <div class="mb-3">
-        <label for="subject-email" class="form-label">{{ $t("Custom Email subject") }}</label>
-        <input id="subject-email" v-model="$parent.notification.customsubject" type="text" class="form-control" autocomplete="false" placeholder="[Uptime Kuma] Service status has changed">
+        <label for="subject-email" class="form-label">{{ $t("Email Subject") }}</label>
+        <input id="subject-email" v-model="$parent.notification.customsubject" type="text" class="form-control" autocomplete="false" placeholder="Service {NAME} on {HOSTNAME} has changed status to {STATUS}">
     </div>
 
     <div class="mb-3">
diff --git a/src/languages/en.js b/src/languages/en.js
index b59cdb73f..0e8e92302 100644
--- a/src/languages/en.js
+++ b/src/languages/en.js
@@ -201,7 +201,7 @@ export default {
     secureOptionTLS: "TLS (465)",
     "Ignore TLS Error": "Ignore TLS Error",
     "From Email": "From Email",
-    "Custom Email subject": "Custom Email Subject (leave blank for default one)",
+    "Email Subject": "Subject (leave blank for default one)",
     "To Email": "To Email",
     smtpCC: "CC",
     smtpBCC: "BCC",

From 30d8aadf12af55198679960685130321507af865 Mon Sep 17 00:00:00 2001
From: Lukas <35193662+NixNotCastey@users.noreply.github.com>
Date: Tue, 12 Oct 2021 23:24:34 +0200
Subject: [PATCH 3/9] Slightly refactor

---
 server/notification-providers/smtp.js | 33 ++++++++++++---------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js
index 2bbec5848..7def06940 100644
--- a/server/notification-providers/smtp.js
+++ b/server/notification-providers/smtp.js
@@ -1,5 +1,6 @@
 const nodemailer = require("nodemailer");
 const NotificationProvider = require("./notification-provider");
+const { DOWN, UP } = require("../../src/util");
 
 class SMTP extends NotificationProvider {
 
@@ -28,33 +29,29 @@ class SMTP extends NotificationProvider {
 
         // If custom subject is not empty, change subject for notification
         if (customsubject !== "") {
-            
-             // Replace "MACROS" with coresponding variable
+
+            // Replace "MACROS" with coresponding variable
             let replaceName = new RegExp("{NAME}", "g");
             let replaceHostname = new RegExp("{HOSTNAME}", "g");
             let replaceStatus = new RegExp("{STATUS}", "g");
 
-            let serviceStatus;
+            // Lets start with dummy values to simplify code
+            let monitorName = "Test"
+            let monitorHostname = "example.com"
+            let serviceStatus = "⚠️ Test";
 
             if (monitorJSON !== null) {
-                customsubject = customsubject.replace(replaceName,monitorJSON["name"]);
-                customsubject = customsubject.replace(replaceHostname,monitorJSON["hostname"]);
-            } else {
-                // Insert dummy values during test
-                customsubject = customsubject.replace(replaceName,"Test");
-                customsubject = customsubject.replace(replaceHostname,"example.com");
+                monitorName = monitorJSON["name"];
+                monitorHostname = monitorJSON["hostname"];
             }
+
             if (heartbeatJSON !== null) {
-                    if (heartbeatJSON["status"] === 0) {
-                        serviceStatus = "🔴 Down"
-                    } else {
-                        serviceStatus = "✅ Up"
-                    }
-                customsubject = customsubject.replace(replaceStatus,serviceStatus);
-            } else {
-                // Insert dummy values during test
-                customsubject = customsubject.replace(replaceStatus,"TEST");
+                serviceStatus = heartbeatJSON["status"] == DOWN ? "🔴 Down":"✅ Up";
             }
+            // Break replace to one by line for better readability
+            customsubject = customsubject.replace(replaceStatus,serviceStatus);
+            customsubject = customsubject.replace(replaceName,monitorName);
+            customsubject = customsubject.replace(replaceHostname,monitorHostname);
 
             subject = customsubject
         }

From 330cd6e058b77cda9444482d184474af48a39424 Mon Sep 17 00:00:00 2001
From: Lukas <35193662+NixNotCastey@users.noreply.github.com>
Date: Wed, 13 Oct 2021 07:32:09 +0200
Subject: [PATCH 4/9] Minor rehabilitanty impedyment

Co-authored-by: Adam Stachowicz <saibamenppl@gmail.com>
---
 server/notification-providers/smtp.js | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js
index 7def06940..dd1cd10a7 100644
--- a/server/notification-providers/smtp.js
+++ b/server/notification-providers/smtp.js
@@ -46,12 +46,13 @@ class SMTP extends NotificationProvider {
             }
 
             if (heartbeatJSON !== null) {
-                serviceStatus = heartbeatJSON["status"] == DOWN ? "🔴 Down":"✅ Up";
+                serviceStatus = heartbeatJSON["status"] == DOWN ? "🔴 Down" : "✅ Up";
             }
+            
             // Break replace to one by line for better readability
-            customsubject = customsubject.replace(replaceStatus,serviceStatus);
-            customsubject = customsubject.replace(replaceName,monitorName);
-            customsubject = customsubject.replace(replaceHostname,monitorHostname);
+            customsubject = customsubject.replace(replaceStatus, serviceStatus);
+            customsubject = customsubject.replace(replaceName, monitorName);
+            customsubject = customsubject.replace(replaceHostname, monitorHostname);
 
             subject = customsubject
         }

From 89b34b57484d5dfba7913b9bf2c56c1ec5c80763 Mon Sep 17 00:00:00 2001
From: Lukas <35193662+NixNotCastey@users.noreply.github.com>
Date: Wed, 13 Oct 2021 18:05:18 +0200
Subject: [PATCH 5/9] Use double curly brackets and sanity check for
 customSubject

---
 server/notification-providers/smtp.js | 24 ++++++++++++++----------
 src/components/notifications/SMTP.vue |  2 +-
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js
index dd1cd10a7..a74b48cc1 100644
--- a/server/notification-providers/smtp.js
+++ b/server/notification-providers/smtp.js
@@ -21,19 +21,23 @@ class SMTP extends NotificationProvider {
                 pass: notification.smtpPassword,
             };
         }
-        // Lets start with default subject
+        // Lets start with default subject and empty string for custom one
         let subject = msg;
+        let customSubject = "";
 
         // Our subject cannot end with whitespace it's often raise spam score
-        let customsubject = notification.customsubject.trim()
+        // Once I got "Cannot read property 'trim' of undefined", better be safe than sorry
+        if (notification.customSubject) {
+            customSubject = notification.customSubject.trim()
+        }
 
         // If custom subject is not empty, change subject for notification
-        if (customsubject !== "") {
+        if (customSubject !== "") {
 
             // Replace "MACROS" with coresponding variable
-            let replaceName = new RegExp("{NAME}", "g");
-            let replaceHostname = new RegExp("{HOSTNAME}", "g");
-            let replaceStatus = new RegExp("{STATUS}", "g");
+            let replaceName = new RegExp("{{NAME}}", "g");
+            let replaceHostname = new RegExp("{{HOSTNAME}}", "g");
+            let replaceStatus = new RegExp("{{STATUS}}", "g");
 
             // Lets start with dummy values to simplify code
             let monitorName = "Test"
@@ -50,11 +54,11 @@ class SMTP extends NotificationProvider {
             }
             
             // Break replace to one by line for better readability
-            customsubject = customsubject.replace(replaceStatus, serviceStatus);
-            customsubject = customsubject.replace(replaceName, monitorName);
-            customsubject = customsubject.replace(replaceHostname, monitorHostname);
+            customSubject = customSubject.replace(replaceStatus, serviceStatus);
+            customSubject = customSubject.replace(replaceName, monitorName);
+            customSubject = customSubject.replace(replaceHostname, monitorHostname);
 
-            subject = customsubject
+            subject = customSubject
         }
 
         let transporter = nodemailer.createTransport(config);
diff --git a/src/components/notifications/SMTP.vue b/src/components/notifications/SMTP.vue
index 01bdf8607..79efd9f9a 100644
--- a/src/components/notifications/SMTP.vue
+++ b/src/components/notifications/SMTP.vue
@@ -45,7 +45,7 @@
 
     <div class="mb-3">
         <label for="subject-email" class="form-label">{{ $t("Email Subject") }}</label>
-        <input id="subject-email" v-model="$parent.notification.customsubject" type="text" class="form-control" autocomplete="false" placeholder="Service {NAME} on {HOSTNAME} has changed status to {STATUS}">
+        <input id="subject-email" v-model="$parent.notification.customSubject" type="text" class="form-control" autocomplete="false" placeholder="Service {{NAME}} on {{HOSTNAME}} has changed status to {{STATUS}}">
     </div>
 
     <div class="mb-3">

From 655ccc86b9dce6c7f334456175de5de6a2d98b99 Mon Sep 17 00:00:00 2001
From: Aaron Erkenswick <aaron.erkenswick@jwt.com>
Date: Wed, 13 Oct 2021 11:47:23 -0700
Subject: [PATCH 6/9] Add monitor name context to Slack fallback text.

The text block of a slack notification payload is used for mobile
devices and plain text previews. This change allows slack users to see
the name of the failing service without having to open up Slack to read
the entire message.
---
 server/notification-providers/slack.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/server/notification-providers/slack.js b/server/notification-providers/slack.js
index 5132ba977..b4dad6fe3 100644
--- a/server/notification-providers/slack.js
+++ b/server/notification-providers/slack.js
@@ -39,8 +39,9 @@ class Slack extends NotificationProvider {
             }
 
             const time = heartbeatJSON["time"];
+            const textMsg = "Uptime Kuma Alert";
             let data = {
-                "text": "Uptime Kuma Alert",
+                "text": monitorJSON ? textMsg + `: ${monitorJSON.name}` : textMsg,
                 "channel": notification.slackchannel,
                 "username": notification.slackusername,
                 "icon_emoji": notification.slackiconemo,

From 83388819273e49e8773646a90cb6de3f0bfebd6d Mon Sep 17 00:00:00 2001
From: Louis Lam <louislam@users.noreply.github.com>
Date: Thu, 14 Oct 2021 16:07:25 +0800
Subject: [PATCH 7/9] [SMTP] change {{HOSTNAME}} to {{HOSTNAME_OR_URL}},
 support for http montior type, some UI improvements

---
 server/notification-providers/smtp.js | 73 +++++++++++++++------------
 src/components/notifications/SMTP.vue | 17 +++++--
 src/languages/en.js                   |  2 +-
 src/pages/EditMonitor.vue             |  1 +
 4 files changed, 56 insertions(+), 37 deletions(-)

diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js
index a74b48cc1..60068eb77 100644
--- a/server/notification-providers/smtp.js
+++ b/server/notification-providers/smtp.js
@@ -23,42 +23,53 @@ class SMTP extends NotificationProvider {
         }
         // Lets start with default subject and empty string for custom one
         let subject = msg;
-        let customSubject = "";
 
-        // Our subject cannot end with whitespace it's often raise spam score
-        // Once I got "Cannot read property 'trim' of undefined", better be safe than sorry
-        if (notification.customSubject) {
-            customSubject = notification.customSubject.trim()
-        }
+        // Change the subject if:
+        //     - The msg ends with "Testing" or
+        //     - Actual Up/Down Notification
+        if ((monitorJSON && heartbeatJSON) || msg.endsWith("Testing")) {
+            let customSubject = "";
 
-        // If custom subject is not empty, change subject for notification
-        if (customSubject !== "") {
-
-            // Replace "MACROS" with coresponding variable
-            let replaceName = new RegExp("{{NAME}}", "g");
-            let replaceHostname = new RegExp("{{HOSTNAME}}", "g");
-            let replaceStatus = new RegExp("{{STATUS}}", "g");
-
-            // Lets start with dummy values to simplify code
-            let monitorName = "Test"
-            let monitorHostname = "example.com"
-            let serviceStatus = "⚠️ Test";
-
-            if (monitorJSON !== null) {
-                monitorName = monitorJSON["name"];
-                monitorHostname = monitorJSON["hostname"];
+            // Our subject cannot end with whitespace it's often raise spam score
+            // Once I got "Cannot read property 'trim' of undefined", better be safe than sorry
+            if (notification.customSubject) {
+                customSubject = notification.customSubject.trim();
             }
 
-            if (heartbeatJSON !== null) {
-                serviceStatus = heartbeatJSON["status"] == DOWN ? "🔴 Down" : "✅ Up";
-            }
-            
-            // Break replace to one by line for better readability
-            customSubject = customSubject.replace(replaceStatus, serviceStatus);
-            customSubject = customSubject.replace(replaceName, monitorName);
-            customSubject = customSubject.replace(replaceHostname, monitorHostname);
+            // If custom subject is not empty, change subject for notification
+            if (customSubject !== "") {
 
-            subject = customSubject
+                // Replace "MACROS" with corresponding variable
+                let replaceName = new RegExp("{{NAME}}", "g");
+                let replaceHostnameOrURL = new RegExp("{{HOSTNAME_OR_URL}}", "g");
+                let replaceStatus = new RegExp("{{STATUS}}", "g");
+
+                // Lets start with dummy values to simplify code
+                let monitorName = "Test";
+                let monitorHostnameOrURL = "testing.hostname";
+                let serviceStatus = "⚠️ Test";
+
+                if (monitorJSON !== null) {
+                    monitorName = monitorJSON["name"];
+
+                    if (monitorJSON["type"] === "http" || monitorJSON["type"] === "keyword") {
+                        monitorHostnameOrURL = monitorJSON["url"];
+                    } else {
+                        monitorHostnameOrURL = monitorJSON["hostname"];
+                    }
+                }
+
+                if (heartbeatJSON !== null) {
+                    serviceStatus = (heartbeatJSON["status"] === DOWN) ? "🔴 Down" : "✅ Up";
+                }
+
+                // Break replace to one by line for better readability
+                customSubject = customSubject.replace(replaceStatus, serviceStatus);
+                customSubject = customSubject.replace(replaceName, monitorName);
+                customSubject = customSubject.replace(replaceHostnameOrURL, monitorHostnameOrURL);
+
+                subject = customSubject;
+            }
         }
 
         let transporter = nodemailer.createTransport(config);
diff --git a/src/components/notifications/SMTP.vue b/src/components/notifications/SMTP.vue
index 79efd9f9a..483917e3f 100644
--- a/src/components/notifications/SMTP.vue
+++ b/src/components/notifications/SMTP.vue
@@ -43,11 +43,6 @@
         </div>
     </div>
 
-    <div class="mb-3">
-        <label for="subject-email" class="form-label">{{ $t("Email Subject") }}</label>
-        <input id="subject-email" v-model="$parent.notification.customSubject" type="text" class="form-control" autocomplete="false" placeholder="Service {{NAME}} on {{HOSTNAME}} has changed status to {{STATUS}}">
-    </div>
-
     <div class="mb-3">
         <label for="to-email" class="form-label">{{ $t("To Email") }}</label>
         <input id="to-email" v-model="$parent.notification.smtpTo" type="text" class="form-control" autocomplete="false" placeholder="example2@kuma.pet, example3@kuma.pet" :required="!hasRecipient">
@@ -62,6 +57,18 @@
         <label for="to-bcc" class="form-label">{{ $t("smtpBCC") }}</label>
         <input id="to-bcc" v-model="$parent.notification.smtpBCC" type="text" class="form-control" autocomplete="false" :required="!hasRecipient">
     </div>
+
+    <div class="mb-3">
+        <label for="subject-email" class="form-label">{{ $t("emailCustomSubject") }}</label>
+        <input id="subject-email" v-model="$parent.notification.customSubject" type="text" class="form-control" autocomplete="false" placeholder="">
+        <div v-pre class="form-text">
+            (leave blank for default one)<br />
+            {{NAME}}: Service Name<br />
+            {{HOSTNAME_OR_URL}}: Hostname or URL<br />
+            {{URL}}: URL<br />
+            {{STATUS}}: Status<br />
+        </div>
+    </div>
 </template>
 
 <script>
diff --git a/src/languages/en.js b/src/languages/en.js
index 9a657f948..1fc176823 100644
--- a/src/languages/en.js
+++ b/src/languages/en.js
@@ -201,7 +201,7 @@ export default {
     secureOptionTLS: "TLS (465)",
     "Ignore TLS Error": "Ignore TLS Error",
     "From Email": "From Email",
-    "Email Subject": "Subject (leave blank for default one)",
+    emailCustomSubject: "Custom Subject",
     "To Email": "To Email",
     smtpCC: "CC",
     smtpBCC: "BCC",
diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue
index b0b0012f2..ace41818d 100644
--- a/src/pages/EditMonitor.vue
+++ b/src/pages/EditMonitor.vue
@@ -63,6 +63,7 @@
                                 </div>
                             </div>
 
+                            <!-- Hostname -->
                             <!-- TCP Port / Ping / DNS only -->
                             <div v-if="monitor.type === 'port' || monitor.type === 'ping' || monitor.type === 'dns' " class="my-3">
                                 <label for="hostname" class="form-label">{{ $t("Hostname") }}</label>

From 2f0119bc3f6b4f7033ec5bf5da178c21b155f927 Mon Sep 17 00:00:00 2001
From: firattemel <firattml@gmail.com>
Date: Thu, 14 Oct 2021 17:29:13 +0300
Subject: [PATCH 8/9] Update tr-TR.js

---
 src/languages/tr-TR.js | 66 +++++++++++++++++++++---------------------
 1 file changed, 33 insertions(+), 33 deletions(-)

diff --git a/src/languages/tr-TR.js b/src/languages/tr-TR.js
index 8c404a7dc..e26306037 100644
--- a/src/languages/tr-TR.js
+++ b/src/languages/tr-TR.js
@@ -116,39 +116,39 @@ export default {
     Events: "Olaylar",
     Heartbeats: "Sağlık Durumları",
     "Auto Get": "Otomatik Al",
-    retryCheckEverySecond: "Retry every {0} seconds.",
-    enableDefaultNotificationDescription: "For every new monitor this notification will be enabled by default. You can still disable the notification separately for each monitor.",
-    importHandleDescription: "Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
-    confirmImportMsg: "Are you sure to import the backup? Please make sure you've selected the right import option.",
-    twoFAVerifyLabel: "Please type in your token to verify that 2FA is working",
-    tokenValidSettingsMsg: "Token is valid! You can now save the 2FA settings.",
-    confirmEnableTwoFAMsg: "Are you sure you want to enable 2FA?",
-    confirmDisableTwoFAMsg: "Are you sure you want to disable 2FA?",
-    "Heartbeat Retry Interval": "Heartbeat Retry Interval",
-    "Import Backup": "Import Backup",
-    "Export Backup": "Export Backup",
-    Export: "Export",
-    Import: "Import",
-    "Default enabled": "Default enabled",
-    "Apply on all existing monitors": "Apply on all existing monitors",
-    backupDescription: "You can backup all monitors and all notifications into a JSON file.",
-    backupDescription2: "PS: History and event data is not included.",
-    backupDescription3: "Sensitive data such as notification tokens is included in the export file, please keep it carefully.",
-    alertNoFile: "Please select a file to import.",
-    alertWrongFileType: "Please select a JSON file.",
-    "Clear all statistics": "Clear all Statistics",
-    "Skip existing": "Skip existing",
-    Overwrite: "Overwrite",
-    Options: "Options",
-    "Keep both": "Keep both",
-    "Verify Token": "Verify Token",
-    "Setup 2FA": "Setup 2FA",
-    "Enable 2FA": "Enable 2FA",
-    "Disable 2FA": "Disable 2FA",
-    "2FA Settings": "2FA Settings",
-    "Two Factor Authentication": "Two Factor Authentication",
-    Active: "Active",
-    Inactive: "Inactive",
+    retryCheckEverySecond: "{0} Saniyede bir dene.",
+    enableDefaultNotificationDescription: "Bu bildirim her yeni serviste aktif olacaktır. Bildirimi servisler için ayrı ayrı deaktive edebilirsiniz. ",
+    importHandleDescription: "Aynı isimdeki bütün servisleri ve bildirimleri atlamak için 'Var olanı atla' seçiniz. 'Üzerine yaz' var olan bütün servisleri ve bildirimleri silecektir. ",
+    confirmImportMsg: "Yedeği içeri aktarmak istediğinize emin misiniz? Lütfen doğru içeri aktarma seçeneğini seçtiğinizden emin olunuz. ",
+    twoFAVerifyLabel: "Lütfen tokeni yazarak 2FA doğrulamanın çalıştığından emin olunuz.",
+    tokenValidSettingsMsg: "Token geçerli! Şimdi 2FA ayarlarını kaydedebilirsiniz. ",
+    confirmEnableTwoFAMsg: "2FA'ı etkinleştirmek istediğinizden emin misiniz?",
+    confirmDisableTwoFAMsg: "2FA'ı devre dışı bırakmak istediğinize emin misiniz?",
+    "Heartbeat Retry Interval": "Sağlık Dırımları Tekrar Deneme Sıklığı",
+    "Import Backup": "Yedeği içe aktar",
+    "Export Backup": "Yedeği dışa aktar",
+    Export: "Dışa aktar",
+    Import: "İçe aktar",
+    "Default enabled": "Varsayılan etkinleştirilmiş",
+    "Apply on all existing monitors": "Var olan bütün servislere uygula",
+    backupDescription: "Bütün servisleri ve bildirimleri JSON dosyasına yedekleyebilirsiniz.",
+    backupDescription2: "Not: Geçmiş ve etkinlik verileri içinde değildir.",
+    backupDescription3: "Dışa aktarma dosyasında bildirim tokeni gibi hassas veriler bulunur, dikkatli bir şekilde saklayınız.",
+    alertNoFile: "İçeri aktarmak için bir dosya seçiniz.",
+    alertWrongFileType: "Lütfen bir JSON dosyası seçiniz.",
+    "Clear all statistics": "Bütün istatistikleri temizle",
+    "Skip existing": "Var olanı atla",
+    Overwrite: "Üzerine yaz",
+    Options: "Seçenekler",
+    "Keep both": "İkisini sakla",
+    "Verify Token": "Tokeni doğrula",
+    "Setup 2FA": "2FA Kur",
+    "Enable 2FA": "2FA Etkinleştir",
+    "Disable 2FA": "2FA Devre dışı bırak",
+    "2FA Settings": "2FA Ayarları",
+    "Two Factor Authentication": "İki Faktörlü Kimlik Doğrulama (2FA)",
+    Active: "Aktif",
+    Inactive: "İnaktif",
     Token: "Token",
     "Show URI": "Show URI",
     Tags: "Tags",

From 8242a1586d9d7aabea87afc445c637a8c0594586 Mon Sep 17 00:00:00 2001
From: iooner <contact@iooner.be>
Date: Thu, 14 Oct 2021 22:23:01 +0200
Subject: [PATCH 9/9] Update fr-FR.js

---
 src/languages/fr-FR.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/languages/fr-FR.js b/src/languages/fr-FR.js
index bcba1f869..f187b6332 100644
--- a/src/languages/fr-FR.js
+++ b/src/languages/fr-FR.js
@@ -10,7 +10,7 @@ export default {
     passwordNotMatchMsg: "Les mots de passe ne correspondent pas",
     notificationDescription: "Une fois ajoutée, vous devez l'activer manuellement dans les paramètres de vos hôtes.",
     keywordDescription: "Le mot clé sera recherché dans la réponse HTML/JSON reçue du site internet.",
-    pauseDashboardHome: "Éléments mis en pause",
+    pauseDashboardHome: "En pause",
     deleteMonitorMsg: "Êtes-vous sûr de vouloir supprimer cette sonde ?",
     deleteNotificationMsg: "Êtes-vous sûr de vouloir supprimer ce type de notifications ? Une fois désactivée, les services qui l'utilisent ne pourront plus envoyer de notifications.",
     resoverserverDescription: "Le DNS de cloudflare est utilisé par défaut, mais vous pouvez le changer si vous le souhaitez.",
@@ -54,7 +54,7 @@ export default {
     Delete: "Supprimer",
     Current: "Actuellement",
     Uptime: "Uptime",
-    "Cert Exp.": "Certificat expiré",
+    "Cert Exp.": "Expiration SSL",
     days: "jours",
     day: "jour",
     "-day": "-jours",