diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 6e53fa0..d55fbd4 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,6 +1,6 @@
 # These are supported funding model platforms
 
-#github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+github: louislam # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
 #patreon: # Replace with a single Patreon username
 open_collective: uptime-kuma # Replace with a single Open Collective username
 #ko_fi: # Replace with a single Ko-fi username
diff --git a/.github/workflows/auto-test.yml b/.github/workflows/auto-test.yml
index 1d4452a..c59a61b 100644
--- a/.github/workflows/auto-test.yml
+++ b/.github/workflows/auto-test.yml
@@ -27,7 +27,7 @@ jobs:
       with:
         node-version: ${{ matrix.node-version }}
         cache: 'npm'
-    - run: npm ci
+    - run: npm run install-legacy
     - run: npm run build
     - run: npm test
       env:
diff --git a/README.md b/README.md
index be5494b..75ee8b2 100644
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@ Light Mode:
 
 Status Page:
 
-<img src="https://user-images.githubusercontent.com/1336778/133384019-962e1120-6c3a-481f-9d07-d7df765e9ba4.png" width="512" alt="" />
+<img src="https://user-images.githubusercontent.com/1336778/134628766-a3fe0981-0926-4285-ab46-891a21c3e4cb.png" width="512" alt="" />
 
 Settings Page:
 
diff --git a/server/model/monitor.js b/server/model/monitor.js
index 0e2d84e..9089b83 100644
--- a/server/model/monitor.js
+++ b/server/model/monitor.js
@@ -12,6 +12,7 @@ const { R } = require("redbean-node");
 const { BeanModel } = require("redbean-node/dist/bean-model");
 const { Notification } = require("../notification");
 const version = require("../../package.json").version;
+const apicache = require("../modules/apicache");
 
 /**
  * status:
@@ -333,6 +334,9 @@ class Monitor extends BeanModel {
                             console.log(e);
                         }
                     }
+
+                    // Clear Status Page Cache
+                    apicache.clear();
                 }
 
             } else {
diff --git a/server/server.js b/server/server.js
index ed6fa6d..390c940 100644
--- a/server/server.js
+++ b/server/server.js
@@ -1041,6 +1041,10 @@ exports.entryPage = "dashboard";
                                 notificationIDList: {},
                             };
 
+                            if (monitorListData[i].pushToken) {
+                                monitor.pushToken = monitorListData[i].pushToken;
+                            }
+
                             let bean = R.dispense("monitor");
 
                             let notificationIDList = monitor.notificationIDList;
diff --git a/src/assets/app.scss b/src/assets/app.scss
index 3072e37..2cbec5c 100644
--- a/src/assets/app.scss
+++ b/src/assets/app.scss
@@ -3,7 +3,7 @@
 @import "node_modules/bootstrap/scss/bootstrap";
 
 #app {
-    font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji;
+    font-family: BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji;
 }
 
 h1 {
diff --git a/src/languages/bg-BG.js b/src/languages/bg-BG.js
index bcf1b57..48d3f23 100644
--- a/src/languages/bg-BG.js
+++ b/src/languages/bg-BG.js
@@ -1,7 +1,7 @@
 export default {
     languageName: "Български",
-    checkEverySecond: "Ще се извършва на всеки {0} секунди.",
-    retryCheckEverySecond: "Повторен опит на всеки {0} секунди.",
+    checkEverySecond: "Ще се извършва на всеки {0} секунди",
+    retryCheckEverySecond: "Ще се извършва на всеки {0} секунди",
     retriesDescription: "Максимакен брой опити преди услугата да бъде маркирана като недостъпна и да бъде изпратено известие",
     ignoreTLSError: "Игнорирай TLS/SSL грешки за HTTPS уебсайтове",
     upsideDownModeDescription: "Обърни статуса от достъпен на недостъпен. Ако услугата е достъпна се вижда НЕДОСТЪПНА.",
@@ -28,7 +28,7 @@ export default {
     confirmDisableTwoFAMsg: "Сигурни ли сте, че желаете да изключите 2FA?",
     Settings: "Настройки",
     Dashboard: "Табло",
-    "New Update": "Нова актуализация",
+    "New Update": "Налична е актуализация",
     Language: "Език",
     Appearance: "Изглед",
     Theme: "Тема",
@@ -57,7 +57,7 @@ export default {
     "Cert Exp.": "Вал. сертификат",
     days: "дни",
     day: "ден",
-    "-day": "-денa",
+    "-day": "-дни",
     hour: "час",
     "-hour": "-часa",
     Response: "Отговор",
diff --git a/src/languages/de-DE.js b/src/languages/de-DE.js
index 20beb62..bf2dff8 100644
--- a/src/languages/de-DE.js
+++ b/src/languages/de-DE.js
@@ -2,7 +2,7 @@ export default {
     languageName: "Deutsch (Deutschland)",
     Settings: "Einstellungen",
     Dashboard: "Dashboard",
-    "New Update": "Update Verfügbar",
+    "New Update": "Update verfügbar",
     Language: "Sprache",
     Appearance: "Erscheinung",
     Theme: "Thema",
@@ -50,7 +50,7 @@ export default {
     Advanced: "Erweitert",
     ignoreTLSError: "Ignoriere TLS/SSL Fehler von Webseiten",
     "Upside Down Mode": "Umgedrehter Modus",
-    upsideDownModeDescription: "Drehe den Modus um, ist der Dienst erreichbar, wird er als Inaktiv angezeigt.",
+    upsideDownModeDescription: "Drehe den Modus um, ist der Dienst erreichbar, wird er als inaktiv angezeigt.",
     "Max. Redirects": "Max. Weiterleitungen",
     maxRedirectDescription: "Maximale Anzahl von Weiterleitungen, denen gefolgt werden soll. Setzte auf 0, um Weiterleitungen zu deaktivieren.",
     "Accepted Status Codes": "Erlaubte HTTP-Statuscodes",
@@ -71,7 +71,7 @@ export default {
     "Allow indexing": "Indizierung zulassen",
     "Discourage search engines from indexing site": "Halte Suchmaschinen von der Indexierung der Seite ab",
     "Change Password": "Passwort ändern",
-    "Current Password": "Dezeitiges Passwort",
+    "Current Password": "Derzeitiges Passwort",
     "New Password": "Neues Passwort",
     "Repeat New Password": "Wiederhole neues Passwort",
     passwordNotMatchMsg: "Passwörter stimmen nicht überein. ",
@@ -91,24 +91,24 @@ export default {
     Login: "Einloggen",
     "No Monitors, please": "Keine Monitore, bitte",
     "add one": "hinzufügen",
-    "Notification Type": "Benachrichtigungs Dienst",
+    "Notification Type": "Benachrichtigungsdienst",
     Email: "E-Mail",
     Test: "Test",
     "Certificate Info": "Zertifikatsinfo",
     keywordDescription: "Suche nach einem Schlüsselwort in der HTML oder JSON Ausgabe. Bitte beachte, es wird in der Groß-/Kleinschreibung unterschieden.",
-    deleteMonitorMsg: "Bist du sicher das du den Monitor löschen möchtest?",
+    deleteMonitorMsg: "Bist du sicher, dass du den Monitor löschen möchtest?",
     deleteNotificationMsg: "Möchtest du diese Benachrichtigung wirklich für alle Monitore löschen?",
     resoverserverDescription: "Cloudflare ist als der Standardserver festgelegt, dieser kann jederzeit geändern werden.",
     "Resolver Server": "Auflösungsserver",
     rrtypeDescription: "Wähle den RR-Typ aus, welchen du überwachen möchtest.",
     "Last Result": "Letztes Ergebnis",
-    pauseMonitorMsg: "Bist du sicher das du den Monitor pausieren möchtest?",
-    clearEventsMsg: "Bist du sicher das du alle Ereignisse für diesen Monitor löschen möchtest?",
-    clearHeartbeatsMsg: "Bist du sicher das du alle Statistiken für diesen Monitor löschen möchtest?",
+    pauseMonitorMsg: "Bist du sicher, dass du den Monitor pausieren möchtest?",
+    clearEventsMsg: "Bist du sicher, dass du alle Ereignisse für diesen Monitor löschen möchtest?",
+    clearHeartbeatsMsg: "Bist du sicher, dass du alle Statistiken für diesen Monitor löschen möchtest?",
     "Clear Data": "Lösche Daten",
     Events: "Ereignisse",
     Heartbeats: "Statistiken",
-    confirmClearStatisticsMsg: "Bist du sicher das du ALLE Statistiken löschen möchtest?",
+    confirmClearStatisticsMsg: "Bist du dir wirklich sicher, dass du ALLE Statistiken löschen möchtest?",
     "Create your admin account": "Erstelle dein Admin Konto",
     "Repeat Password": "Wiederhole das Passwort",
     "Resource Record Type": "Resource Record Type",
@@ -124,7 +124,7 @@ export default {
     backupDescription: "Es können alle Monitore und Benachrichtigungen in einer JSON-Datei gesichert werden.",
     backupDescription2: "PS: Verlaufs- und Ereignisdaten sind nicht enthalten.",
     backupDescription3: "Sensible Daten wie Benachrichtigungstoken sind in der Exportdatei enthalten, bitte bewahre sie sorgfältig auf.",
-    alertNoFile: "Bitte wähle eine Datei zum importieren aus.",
+    alertNoFile: "Bitte wähle eine Datei zum Importieren aus.",
     alertWrongFileType: "Bitte wähle eine JSON Datei aus.",
     "Clear all statistics": "Lösche alle Statistiken",
     importHandleDescription: "Wähle 'Vorhandene überspringen' aus, wenn jeder Monitor oder Benachrichtigung mit demselben Namen übersprungen werden soll. 'Überschreiben' löscht jeden vorhandenen Monitor sowie Benachrichtigungen.",
@@ -133,14 +133,14 @@ export default {
     Options: "Optionen",
     confirmImportMsg: "Möchtest du das Backup wirklich importieren? Bitte stelle sicher, dass die richtige Import Option ausgewählt ist.",
     "Keep both": "Beide behalten",
-    twoFAVerifyLabel: "Bitte trage deinen Token ein um zu verifizieren das 2FA funktioniert",
+    twoFAVerifyLabel: "Bitte trage deinen Token ein, um zu verifizieren das 2FA funktioniert",
     "Verify Token": "Token verifizieren",
     "Setup 2FA": "2FA Einrichten",
     "Enable 2FA": "2FA Aktivieren",
     "Disable 2FA": "2FA deaktivieren",
     "2FA Settings": "2FA Einstellungen",
-    confirmEnableTwoFAMsg: "Bist du sicher das du 2FA aktivieren möchtest?",
-    confirmDisableTwoFAMsg: "Bist du sicher das du 2FA deaktivieren möchtest?",
+    confirmEnableTwoFAMsg: "Bist du sicher, dass du 2FA aktivieren möchtest?",
+    confirmDisableTwoFAMsg: "Bist du sicher, dass du 2FA deaktivieren möchtest?",
     tokenValidSettingsMsg: "Token gültig! Du kannst jetzt die 2FA Einstellungen speichern.",
     "Two Factor Authentication": "Zwei Faktor Authentifizierung",
     Active: "Aktiv",
@@ -162,7 +162,7 @@ export default {
     Purple: "Lila",
     Pink: "Pink",
     "Search...": "Suchen...",
-    "Heartbeat Retry Interval": "Takt-Wiederholungsintervall",
+    "Heartbeat Retry Interval": "Heartbeat-Wiederholungsintervall",
     retryCheckEverySecond: "Versuche alle {0} Sekunden",
     "Import Backup": "Import Backup",
     "Export Backup": "Export Backup",
@@ -178,10 +178,10 @@ export default {
     "Add a monitor": "Monitor hinzufügen",
     "Edit Status Page": "Bearbeite Statusseite",
     "Go to Dashboard": "Gehe zum Dashboard",
-    "Status Page": "Status Page",
+    "Status Page": "Status Seite",
     telegram: "Telegram",
     webhook: "Webhook",
-    smtp: "Email (SMTP)",
+    smtp: "E-Mail (SMTP)",
     discord: "Discord",
     teams: "Microsoft Teams",
     signal: "Signal",
@@ -193,7 +193,7 @@ export default {
     octopush: "Octopush",
     promosms: "PromoSMS",
     lunasea: "LunaSea",
-    apprise: "Apprise (Support 50+ Notification services)",
+    apprise: "Apprise (Unterstützung für 50+ Benachrichtigungsdienste)",
     pushbullet: "Pushbullet",
     line: "Line Messenger",
     mattermost: "Mattermost",
diff --git a/src/languages/es-ES.js b/src/languages/es-ES.js
index 3fa2073..41254b5 100644
--- a/src/languages/es-ES.js
+++ b/src/languages/es-ES.js
@@ -17,7 +17,7 @@ export default {
     pauseMonitorMsg: "¿Seguro que quieres pausar?",
     Settings: "Ajustes",
     Dashboard: "Panel",
-    "New Update": "Vueva actualización",
+    "New Update": "Nueva actualización",
     Language: "Idioma",
     Appearance: "Apariencia",
     Theme: "Tema",
@@ -61,11 +61,11 @@ export default {
     Retries: "Reintentos",
     Advanced: "Avanzado",
     "Upside Down Mode": "Modo invertido",
-    "Max. Redirects": "Máx. redirecciones",
+    "Max. Redirects": "Redirecciones Máximas",
     "Accepted Status Codes": "Códigos de estado aceptados",
     Save: "Guardar",
     Notifications: "Notificaciones",
-    "Not available, please setup.": "No disponible, por favor configurar.",
+    "Not available, please setup.": "No disponible, por favor configúrelo.",
     "Setup Notification": "Configurar notificación",
     Light: "Claro",
     Dark: "Oscuro",
@@ -83,11 +83,11 @@ export default {
     "New Password": "Nueva contraseña",
     "Repeat New Password": "Repetir nueva contraseña",
     "Update Password": "Actualizar contraseña",
-    "Disable Auth": "Deshabilitar Autenticación ",
-    "Enable Auth": "Habilitar Autenticación ",
+    "Disable Auth": "Deshabilitar Autenticación",
+    "Enable Auth": "Habilitar Autenticación",
     Logout: "Cerrar sesión",
     Leave: "Salir",
-    "I understand, please disable": "Lo comprendo, por favor deshabilitar",
+    "I understand, please disable": "Entiendo, por favor deshabilitar",
     Confirm: "Confirmar",
     Yes: "Sí",
     No: "No",
@@ -100,7 +100,7 @@ export default {
     "Notification Type": "Tipo de notificación",
     Email: "Email",
     Test: "Test",
-    "Certificate Info": "Información del certificado ",
+    "Certificate Info": "Información del certificado",
     "Resolver Server": "Servidor de resolución",
     "Resource Record Type": "Tipo de Registro",
     "Last Result": "Último resultado",
@@ -108,78 +108,78 @@ export default {
     "Repeat Password": "Repetir contraseña",
     respTime: "Tiempo de resp. (ms)",
     notAvailableShort: "N/A",
-    Create: "Create",
-    clearEventsMsg: "Are you sure want to delete all events for this monitor?",
-    clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?",
-    confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?",
-    "Clear Data": "Clear Data",
-    Events: "Events",
-    Heartbeats: "Heartbeats",
-    "Auto Get": "Auto Get",
-    enableDefaultNotificationDescription: "For every new monitor this notification will be enabled by default. You can still disable the notification separately for each monitor.",
-    "Default enabled": "Default enabled",
-    "Also apply to existing monitors": "Also apply to existing monitors",
-    Export: "Export",
-    Import: "Import",
-    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.",
-    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?",
-    "Apply on all existing monitors": "Apply on all existing monitors",
-    "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",
+    Create: "Crear",
+    clearEventsMsg: "¿Está seguro de que desea eliminar todos los eventos de este monitor?",
+    clearHeartbeatsMsg: "¿Está seguro de que desea eliminar todos los latidos de este monitor?",
+    confirmClearStatisticsMsg: "¿Está seguro de que desea eliminar TODAS las estadísticas?",
+    "Clear Data": "Borrar Datos",
+    Events: "Eventos",
+    Heartbeats: "Latidos",
+    "Auto Get": "Obtener automáticamente",
+    enableDefaultNotificationDescription: "Para cada nuevo monitor, esta notificación estará habilitada de forma predeterminada. Aún puede deshabilitar la notificación por separado para cada monitor.",
+    "Default enabled": "Habilitado por defecto",
+    "Also apply to existing monitors": "También se aplica a monitores existentes",
+    Export: "Exportar",
+    Import: "Importar",
+    backupDescription: "Puede hacer una copia de seguridad de todos los monitores y todas las notificaciones en un archivo JSON.",
+    backupDescription2: "PD: el historial y los datos de eventos no están incluidos.",
+    backupDescription3: "Los datos confidenciales, como los tokens de notificación, se incluyen en el archivo de exportación. Guárdelo con cuidado.",
+    alertNoFile: "Seleccione un archivo para importar.",
+    alertWrongFileType: "Seleccione un archivo JSON.",
+    twoFAVerifyLabel: "Ingrese su token para verificar que 2FA está funcionando",
+    tokenValidSettingsMsg: "¡El token es válido! Ahora puede guardar la configuración de 2FA.",
+    confirmEnableTwoFAMsg: "¿Estás seguro de que quieres habilitar 2FA?",
+    confirmDisableTwoFAMsg: "¿Estás seguro de que quieres desactivar 2FA?",
+    "Apply on all existing monitors": "Aplicar en todos los monitores existentes",
+    "Verify Token": "Verificar token",
+    "Setup 2FA": "Configurar 2FA",
+    "Enable 2FA": "Habilitar 2FA",
+    "Disable 2FA": "Desactivar 2FA",
+    "2FA Settings": "Ajustes 2FA",
+    "Two Factor Authentication": "Autenticación de dos factores",
+    Active: "Activo",
+    Inactive: "Inactivo",
     Token: "Token",
-    "Show URI": "Show URI",
-    "Clear all statistics": "Clear all Statistics",
-    retryCheckEverySecond: "Retry every {0} seconds.",
-    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.",
-    "Heartbeat Retry Interval": "Heartbeat Retry Interval",
-    "Import Backup": "Import Backup",
-    "Export Backup": "Export Backup",
-    "Skip existing": "Skip existing",
-    Overwrite: "Overwrite",
-    Options: "Options",
-    "Keep both": "Keep both",
-    Tags: "Tags",
-    "Add New below or Select...": "Add New below or Select...",
-    "Tag with this name already exist.": "Tag with this name already exist.",
-    "Tag with this value already exist.": "Tag with this value already exist.",
+    "Show URI": "Mostrar URI",
+    "Clear all statistics": "Borrar todas las estadísticas",
+    retryCheckEverySecond: "Reintentar cada {0} segundo.",
+    importHandleDescription: "Elija 'Omitir existente' si desea omitir todos los monitores o notificaciones con el mismo nombre. 'Sobrescribir' eliminará todos los monitores y notificaciones existentes.",
+    confirmImportMsg: "¿Estás seguro de importar la copia de seguridad? Asegúrese de haber seleccionado la opción de importación correcta.",
+    "Heartbeat Retry Interval": "Intervalo de reintento de latido",
+    "Import Backup": "Importar copia de seguridad",
+    "Export Backup": "Exportar copia de seguridad",
+    "Skip existing": "Omitir existente",
+    Overwrite: "Sobrescribir",
+    Options: "Opciones",
+    "Keep both": "Mantén ambos",
+    Tags: "Etiquetas",
+    "Add New below or Select...": "Agregar nuevo a continuación o Seleccionar...",
+    "Tag with this name already exist.": "La etiqueta con este nombre ya existe.",
+    "Tag with this value already exist.": "La etiqueta con este valor ya existe.",
     color: "color",
-    "value (optional)": "value (optional)",
-    Gray: "Gray",
-    Red: "Red",
-    Orange: "Orange",
-    Green: "Green",
-    Blue: "Blue",
-    Indigo: "Indigo",
-    Purple: "Purple",
-    Pink: "Pink",
-    "Search...": "Search...",
-    "Avg. Ping": "Avg. Ping",
-    "Avg. Response": "Avg. Response",
-    "Entry Page": "Entry Page",
-    statusPageNothing: "Nothing here, please add a group or a monitor.",
-    "No Services": "No Services",
-    "All Systems Operational": "All Systems Operational",
-    "Partially Degraded Service": "Partially Degraded Service",
-    "Degraded Service": "Degraded Service",
-    "Add Group": "Add Group",
-    "Add a monitor": "Add a monitor",
-    "Edit Status Page": "Edit Status Page",
-    "Go to Dashboard": "Go to Dashboard",
-    "Status Page": "Status Page",
+    "value (optional)": "valor (opcional)",
+    Gray: "Gris",
+    Red: "Rojo",
+    Orange: "Naranja",
+    Green: "Verde",
+    Blue: "Azul",
+    Indigo: "Índigo",
+    Purple: "Morado",
+    Pink: "Rosa",
+    "Search...": "Buscar...",
+    "Avg. Ping": "Ping promedio",
+    "Avg. Response": "Respuesta promedio",
+    "Entry Page": "Página de entrada",
+    statusPageNothing: "No hay nada aquí, agregue un grupo o un monitor.",
+    "No Services": "Sin servicio",
+    "All Systems Operational": "Todos los sistemas están operativos",
+    "Partially Degraded Service": "Servicio parcialmente degradado",
+    "Degraded Service": "Servicio degradado",
+    "Add Group": "Agregar Grupo",
+    "Add a monitor": "Agregar un monitor",
+    "Edit Status Page": "Editar página de estado",
+    "Go to Dashboard": "Ir al panel de control",
+    "Status Page": "Página de estado",
     telegram: "Telegram",
     webhook: "Webhook",
     smtp: "Email (SMTP)",
@@ -194,7 +194,7 @@ export default {
     octopush: "Octopush",
     promosms: "PromoSMS",
     lunasea: "LunaSea",
-    apprise: "Apprise (Support 50+ Notification services)",
+    apprise: "Apprise (Admite más de 50 servicios de notificación)",
     pushbullet: "Pushbullet",
     line: "Line Messenger",
     mattermost: "Mattermost",
diff --git a/src/languages/ko-KR.js b/src/languages/ko-KR.js
index 9d5cb5b..8ad7e96 100644
--- a/src/languages/ko-KR.js
+++ b/src/languages/ko-KR.js
@@ -108,78 +108,78 @@ export default {
     "Repeat Password": "비밀번호 재입력",
     respTime: "응답 시간 (ms)",
     notAvailableShort: "N/A",
-    Create: "Create",
-    clearEventsMsg: "Are you sure want to delete all events for this monitor?",
-    clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?",
-    confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?",
-    "Clear Data": "Clear Data",
-    Events: "Events",
-    Heartbeats: "Heartbeats",
-    "Auto Get": "Auto Get",
-    enableDefaultNotificationDescription: "For every new monitor this notification will be enabled by default. You can still disable the notification separately for each monitor.",
-    "Default enabled": "Default enabled",
-    "Also apply to existing monitors": "Also apply to existing monitors",
-    Export: "Export",
-    Import: "Import",
-    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.",
-    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?",
-    "Apply on all existing monitors": "Apply on all existing monitors",
-    "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",
-    Token: "Token",
-    "Show URI": "Show URI",
-    "Clear all statistics": "Clear all Statistics",
-    retryCheckEverySecond: "Retry every {0} seconds.",
-    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.",
-    "Heartbeat Retry Interval": "Heartbeat Retry Interval",
-    "Import Backup": "Import Backup",
-    "Export Backup": "Export Backup",
-    "Skip existing": "Skip existing",
-    Overwrite: "Overwrite",
-    Options: "Options",
-    "Keep both": "Keep both",
-    Tags: "Tags",
-    "Add New below or Select...": "Add New below or Select...",
-    "Tag with this name already exist.": "Tag with this name already exist.",
-    "Tag with this value already exist.": "Tag with this value already exist.",
-    color: "color",
-    "value (optional)": "value (optional)",
-    Gray: "Gray",
-    Red: "Red",
-    Orange: "Orange",
-    Green: "Green",
-    Blue: "Blue",
-    Indigo: "Indigo",
-    Purple: "Purple",
-    Pink: "Pink",
-    "Search...": "Search...",
-    "Avg. Ping": "Avg. Ping",
-    "Avg. Response": "Avg. Response",
-    "Entry Page": "Entry Page",
-    statusPageNothing: "Nothing here, please add a group or a monitor.",
-    "No Services": "No Services",
-    "All Systems Operational": "All Systems Operational",
-    "Partially Degraded Service": "Partially Degraded Service",
-    "Degraded Service": "Degraded Service",
-    "Add Group": "Add Group",
-    "Add a monitor": "Add a monitor",
-    "Edit Status Page": "Edit Status Page",
-    "Go to Dashboard": "Go to Dashboard",
-    "Status Page": "Status Page",
+    Create: "생성하기",
+    clearEventsMsg: "정말로 이 모니터링부터 모든 이벤트를 제거할까요?",
+    clearHeartbeatsMsg: "정말로 이 모니터링부터 모든 하트비트를 제거할까요?",
+    confirmClearStatisticsMsg: "정말로 모든 통계치를 제거할까요?",
+    "Clear Data": "데이터 클리어",
+    Events: "이벤트",
+    Heartbeats: "하트비트",
+    "Auto Get": "자동 Get",
+    enableDefaultNotificationDescription: "모든 모니터링에 이 알림이 기본값으로 설정될거에요. 각각 모니터링에서 이 알림을 비활성화 할 수 있어요.",
+    "Default enabled": "기본값 ",
+    "Also apply to existing monitors": "기존 모니터링에도 적용되요.",
+    Export: "내보내기",
+    Import: "가져오기",
+    backupDescription: "모든 모니터링과 알림을 JSON 파일 형식에 저장할 수 있어요.",
+    backupDescription2: "(히스토리와 이벤트 데이터는 포함되어 있지 않아요.)",
+    backupDescription3: "알림 토큰과 같은 보안 데이터가 내보내기 파일에 포함되어 있으므로 관리에 주의해주세요.",
+    alertNoFile: "가져오기를 하기 위해 파일을 선택해주세요.",
+    alertWrongFileType: "JSON 파일을 선택해주세요.",
+    twoFAVerifyLabel: "2단계 인증이 정상적으로 등록됬는지 확인하기 위해 토큰을 입력해주세요.",
+    tokenValidSettingsMsg: "토큰이 정상 값 이에요! 2단계 인증 설정을 저장할 수 있어요.",
+    confirmEnableTwoFAMsg: "정말로 2단계 인증을 활성화 할까요?",
+    confirmDisableTwoFAMsg: "정말로 2단계 인증을 비활성화 할까요?",
+    "Apply on all existing monitors": "기존 모니터링에 모두 적용하기",
+    "Verify Token": "토큰 검증",
+    "Setup 2FA": "2단계 인증 설정하기",
+    "Enable 2FA": "2단계 인증 활성화",
+    "Disable 2FA": "2단계 인증 비활성화",
+    "2FA Settings": "2단계 인증 설정",
+    "Two Factor Authentication": "2단계 인증",
+    Active: "활성화",
+    Inactive: "비활성화",
+    Token: "토큰",
+    "Show URI": "URI 보기",
+    "Clear all statistics": "모든 통계치 ",
+    retryCheckEverySecond: "{0} 초마다 재시도",
+    importHandleDescription: "같은 이름을 가진 모든 모니터링 또는 알림들을 건너뛰기를 원하시면, '기존값 건너뛰기'를 눌러주세요. 기존 모니터링과 알림을 지우고 싶으면, '덮어쓰기'를 눌러주세요.",
+    confirmImportMsg: "정말로 백업을 가져올까요? 정확한 백업 설정인지 다시 확인해주세요.",
+    "Heartbeat Retry Interval": "하트비트 재시도 주기",
+    "Import Backup": "백업 가져오기",
+    "Export Backup": "백업 내보내기",
+    "Skip existing": "기존값 건너뛰기",
+    Overwrite: "덮어쓰기",
+    Options: "옵션",
+    "Keep both": "두개 모두 보존",
+    Tags: "태그",
+    "Add New below or Select...": "아래 새롭게 추가 또는 선택...",
+    "Tag with this name already exist.": "같은 태그 이름이 이미 존재해요.",
+    "Tag with this value already exist.": "같은 값을 가진 태그가 이미 존재해요.",
+    color: "색상",
+    "value (optional)": "값 (선택)",
+    Gray: "회색",
+    Red: "빨강색",
+    Orange: "주황색",
+    Green: "초록색",
+    Blue: "파랑색",
+    Indigo: "남색",
+    Purple: "보라색",
+    Pink: "핑크색",
+    "Search...": "검색...",
+    "Avg. Ping": "평균 핑",
+    "Avg. Response": "평균 응답",
+    "Entry Page": "첫 페이지",
+    statusPageNothing: "아무것도 없어요. 새로운 그룹 또는 모니터링을 추가해주세요.",
+    "No Services": "서비스 없음",
+    "All Systems Operational": "모든 시스템 정상",
+    "Partially Degraded Service": "일부 시스템 비정상",
+    "Degraded Service": "모든 시스템 비정상",
+    "Add Group": "그룹 추가",
+    "Add a monitor": "모니터링 추가r",
+    "Edit Status Page": "상태 페이지 수정",
+    "Go to Dashboard": "대쉬보드로 가기",
+    "Status Page": "상태 페이지",
     telegram: "Telegram",
     webhook: "Webhook",
     smtp: "Email (SMTP)",
@@ -194,7 +194,7 @@ export default {
     octopush: "Octopush",
     promosms: "PromoSMS",
     lunasea: "LunaSea",
-    apprise: "Apprise (Support 50+ Notification services)",
+    apprise: "Apprise (50개 이상 알림 서비스 )",
     pushbullet: "Pushbullet",
     line: "Line Messenger",
     mattermost: "Mattermost",
diff --git a/src/pages/Details.vue b/src/pages/Details.vue
index ee0c494..1363aa2 100644
--- a/src/pages/Details.vue
+++ b/src/pages/Details.vue
@@ -83,6 +83,7 @@
                 </div>
             </div>
 
+            <!-- Cert Info Box -->
             <transition name="slide-fade" appear>
                 <div v-if="showCertInfoBox" class="shadow-box big-padding text-center">
                     <div class="row">
@@ -93,6 +94,7 @@
                 </div>
             </transition>
 
+            <!-- Ping Chart -->
             <div v-if="showPingChartBox" class="shadow-box big-padding text-center ping-chart-wrapper">
                 <div class="row">
                     <div class="col">
@@ -270,7 +272,10 @@ export default {
         },
 
         tlsInfo() {
-            if (this.$root.tlsInfoList[this.monitor.id]) {
+            // Add: this.$root.tlsInfoList[this.monitor.id].certInfo
+            // Fix: TypeError: Cannot read properties of undefined (reading 'validTo')
+            // Reason: TLS Info object format is changed in 1.8.0, if for some reason, it cannot connect to the site after update to 1.8.0, the object is still in the old format.
+            if (this.$root.tlsInfoList[this.monitor.id] && this.$root.tlsInfoList[this.monitor.id].certInfo) {
                 return this.$root.tlsInfoList[this.monitor.id];
             }