diff --git a/.github/workflows/docs-publish.yml b/.github/workflows/docs-publish.yml
index 92900e25..d3aea8e6 100644
--- a/.github/workflows/docs-publish.yml
+++ b/.github/workflows/docs-publish.yml
@@ -46,7 +46,7 @@ jobs:
         with:
           python-version: 3.x
       - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         with:
           key: mkdocs-material-${{ env.cache_id }}
           path: .cache
@@ -71,7 +71,7 @@ jobs:
         with:
           python-version: 3.x
       - run: echo "cache_id=${{github.sha}}" >> $GITHUB_ENV
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         with:
           key: mkdocs-material-${{ env.cache_id }}
           path: .cache
diff --git a/docs/widgets/services/calendar.md b/docs/widgets/services/calendar.md
index 74751f6e..bb8b5016 100644
--- a/docs/widgets/services/calendar.md
+++ b/docs/widgets/services/calendar.md
@@ -16,6 +16,7 @@ widget:
   view: monthly # optional - possible values monthly, agenda
   maxEvents: 10 # optional - defaults to 10
   showTime: true # optional - show time for event happening today - defaults to false
+  timezone: America/Los_Angeles # optional and only when timezone is not detected properly (slightly slower performance) - force timezone for ical events (if it's the same - no change, if missing or different in ical - will be converted to this timezone)
   integrations: # optional
     - type: sonarr # active widget type that is currently enabled on homepage - possible values: radarr, sonarr, lidarr, readarr, ical
       service_group: Media # group name where widget exists
@@ -27,7 +28,6 @@ widget:
       url: https://domain.url/with/link/to.ics # URL with calendar events
       name: My Events # required - name for these calendar events
       color: zinc # optional - defaults to pre-defined color for the service (zinc for ical)
-      timezone: America/Los_Angeles # optional - force timezone for events (if it's the same - no change, if missing or different in ical - will be converted to this timezone)
       params: # optional - additional params for the service
         showName: true # optional - show name before event title in event line - defaults to false
 ```
diff --git a/docs/widgets/services/customapi.md b/docs/widgets/services/customapi.md
index f39d8d5e..d392f0a9 100644
--- a/docs/widgets/services/customapi.md
+++ b/docs/widgets/services/customapi.md
@@ -34,11 +34,20 @@ widget:
     - field: key # needs to be YAML string or object
       label: Field 4
       format: date # optional - defaults to text
+      locale: nl # optional
       dateStyle: long # optional - defaults to "long". Allowed values: `["full", "long", "medium", "short"]`.
       timeStyle: medium # optional - Allowed values: `["full", "long", "medium", "short"]`.
+    - field: key # needs to be YAML string or object
+      label: Field 5
+      format: relativeDate # optional - defaults to text
+      locale: nl # optional
+      style: short # optional - defaults to "long". Allowed values: `["long", "short", "narrow"]`.
+      numeric: auto # optional - defaults to "always". Allowed values `["always", "auto"]`.
 ```
 
-Supported formats for the values are `text`, `number`, `float`, `percent`, `bytes`, `bitrate` and `date`.
+Supported formats for the values are `text`, `number`, `float`, `percent`, `bytes`, `bitrate`, `date` and `relativeDate`.
+
+The `dateStyle` and `timeStyle` options of the `date` format are passed directly to [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) and the `style` and `numeric` options of `relativeDate` are passed to [Intl.RelativeTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat).
 
 ## Example
 
diff --git a/docs/widgets/services/immich.md b/docs/widgets/services/immich.md
index 6fd37e51..b6d286c4 100644
--- a/docs/widgets/services/immich.md
+++ b/docs/widgets/services/immich.md
@@ -3,6 +3,8 @@ title: Immich
 description: Immich Widget Configuration
 ---
 
+Find your API key under `Account Settings > API Keys`.
+
 Allowed fields: `["users" ,"photos", "videos", "storage"]`.
 
 Note that API key must be from admin user.
diff --git a/docs/widgets/services/netdata.md b/docs/widgets/services/netdata.md
new file mode 100644
index 00000000..70acf490
--- /dev/null
+++ b/docs/widgets/services/netdata.md
@@ -0,0 +1,12 @@
+---
+title: Netdata
+description: Netdata Widget Configuration
+---
+
+Allowed fields: `["warnings", "criticals"]`.
+
+```yaml
+widget:
+  type: Netdata
+  url: http://netdata.host.or.ip
+```
diff --git a/docs/widgets/services/romm.md b/docs/widgets/services/romm.md
new file mode 100644
index 00000000..ae8d69d2
--- /dev/null
+++ b/docs/widgets/services/romm.md
@@ -0,0 +1,12 @@
+---
+title: Romm
+description: Romm Widget Configuration
+---
+
+Allowed fields: `["platforms", "totalRoms"]`.
+
+```yaml
+widget:
+  type: Romm
+  url: http://romm.host.or.ip
+```
diff --git a/mkdocs.yml b/mkdocs.yml
index 77f55dde..a9beba06 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -84,6 +84,7 @@ nav:
       - widgets/services/moonraker.md
       - widgets/services/mylar.md
       - widgets/services/navidrome.md
+      - widgets/services/netdata.md
       - widgets/services/nextcloud.md
       - widgets/services/nextdns.md
       - widgets/services/nginx-proxy-manager.md
@@ -114,6 +115,7 @@ nav:
       - widgets/services/qnap.md
       - widgets/services/radarr.md
       - widgets/services/readarr.md
+      - widgets/services/romm.md
       - widgets/services/rutorrent.md
       - widgets/services/sabnzbd.md
       - widgets/services/scrutiny.md
diff --git a/next-i18next.config.js b/next-i18next.config.js
index 6790e14d..96483cc3 100644
--- a/next-i18next.config.js
+++ b/next-i18next.config.js
@@ -100,6 +100,17 @@ function uptime(uptimeInSeconds, i18next) {
   return (moDisplay + dDisplay + hDisplay + mDisplay + sDisplay).replace(/,\s*$/, "");
 }
 
+function relativeDate(date, formatter) {
+  const cutoffs = [60, 3600, 86400, 86400 * 7, 86400 * 30, 86400 * 365, Infinity];
+  const units = ["second", "minute", "hour", "day", "week", "month", "year"];
+
+  const delta = Math.round((date.getTime() - Date.now()) / 1000);
+  const unitIndex = cutoffs.findIndex((cutoff) => cutoff > Math.abs(delta));
+  const divisor = unitIndex ? cutoffs[unitIndex - 1] : 1;
+
+  return formatter.format(Math.floor(delta / divisor), units[unitIndex]);
+}
+
 module.exports = {
   i18n: {
     defaultLocale: "en",
@@ -142,6 +153,9 @@ module.exports = {
         i18next.services.formatter.add("date", (value, lng, options) =>
           new Intl.DateTimeFormat(lng, { ...options }).format(new Date(value)),
         );
+        i18next.services.formatter.add("relativeDate", (value, lng, options) =>
+          relativeDate(new Date(value), new Intl.RelativeTimeFormat(lng, { ...options })),
+        );
         i18next.services.formatter.add("uptime", (value, lng) => uptime(value, i18next));
       },
       type: "3rdParty",
diff --git a/public/locales/af/common.json b/public/locales/af/common.json
index 08ff379e..102f24c4 100644
--- a/public/locales/af/common.json
+++ b/public/locales/af/common.json
@@ -12,8 +12,9 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
-        "months": "mo",
+        "months": "ma",
         "days": "d",
         "hours": "h",
         "minutes": "m",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Nuut",
-        "up": "Aanlyn",
+        "up": "Op",
         "grace": "In Grasietydperk",
-        "down": "Vanlyn",
+        "down": "Af",
         "paused": "Onderbreek",
         "status": "Status",
         "last_ping": "Laaste Pieng",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digitale Vrylating",
         "noEventsToday": "Geen gebeure vir vandag nie!",
         "noEventsFound": "Geen gebeure gevind nie"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json
index fedb8251..d81b4a95 100644
--- a/public/locales/ar/common.json
+++ b/public/locales/ar/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "ش",
         "days": "ي",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "جديد(ة)",
-        "up": "مُتّصل",
+        "up": "يعمل",
         "grace": "في فترة السماح",
-        "down": "غير متصل",
+        "down": "لا يعمل",
         "paused": "متوقف",
         "status": "الحالة",
         "last_ping": "آخر Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "الإصدار الرقمي",
         "noEventsToday": "لا توجد أحداث اليوم!",
         "noEventsFound": "لم يتم العثور على أحداث"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json
index 954bf616..2bf20ccc 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Нови",
-        "up": "Online",
+        "up": "Up",
         "grace": "Гратисен период",
-        "down": "Изключен",
+        "down": "Down",
         "paused": "Paused",
         "status": "Статус",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "Няма събития за днес!",
         "noEventsFound": "Няма намерени събития"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json
index 425f6c80..7c638792 100644
--- a/public/locales/ca/common.json
+++ b/public/locales/ca/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Fora de línia",
+        "down": "Down",
         "paused": "Paused",
         "status": "Estat",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json
index faab95bb..3e3e540b 100644
--- a/public/locales/cs/common.json
+++ b/public/locales/cs/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Nové",
-        "up": "Online",
+        "up": "Up",
         "grace": "V období odkladu",
-        "down": "Offline",
+        "down": "Down",
         "paused": "Pozastaveno",
         "status": "Stav",
         "last_ping": "Poslední ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/da/common.json b/public/locales/da/common.json
index 20127cca..1bcfdc7f 100644
--- a/public/locales/da/common.json
+++ b/public/locales/da/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Ny",
-        "up": "Online",
+        "up": "Op",
         "grace": "Henstandsperiode",
-        "down": "Offline",
+        "down": "Ned",
         "paused": "Pause",
         "status": "Status",
         "last_ping": "Sidste Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digitale udgivelser",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/de/common.json b/public/locales/de/common.json
index feb6c25f..4d2a5b17 100644
--- a/public/locales/de/common.json
+++ b/public/locales/de/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -169,7 +170,7 @@
         "activeUser": "Aktive Geräte",
         "alerts": "Warnungen",
         "connectedGateway": "Verbundene Gateways",
-        "connectedSwitches": "Verbundene Switches"
+        "connectedSwitches": "Verbundene Switche"
     },
     "nzbget": {
         "rate": "Datenrate",
@@ -383,8 +384,8 @@
     },
     "authentik": {
         "users": "Benutzer",
-        "loginsLast24H": "Anmeldungen (24h)",
-        "failedLoginsLast24H": "fehlerhafte Anmeldungen (24h)"
+        "loginsLast24H": "Anmeldungen (24 h)",
+        "failedLoginsLast24H": "Fehlgeschlagene Anmeldungen (24 h)"
     },
     "proxmox": {
         "mem": "RAM",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Neu",
-        "up": "Online",
+        "up": "Senden",
         "grace": "In Karenzzeit",
-        "down": "Offline",
+        "down": "Empfangen",
         "paused": "Pausiert",
         "status": "Status",
         "last_ping": "Letzter Ping",
@@ -561,7 +562,7 @@
         "cpuLoad": "CPU-Auslastung",
         "memoryUsed": "RAM Verbrauch",
         "uptime": "Betriebszeit",
-        "numberOfLeases": "Leasen"
+        "numberOfLeases": "Leases"
     },
     "xteve": {
         "streams_all": "Keine Übertragungen",
@@ -608,7 +609,7 @@
     },
     "proxmoxbackupserver": {
         "datastore_usage": "Datenspeicher",
-        "failed_tasks_24h": "Fehlgeschlagene Prozesse 24h",
+        "failed_tasks_24h": "Fehlgeschlagene Prozesse (24 h)",
         "cpu_usage": "CPU",
         "memory_usage": "RAM"
     },
@@ -794,5 +795,13 @@
         "digitalRelease": "Digitale Version",
         "noEventsToday": "Heute keine Ereignisse!",
         "noEventsFound": "Keine Termine gefunden"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnungen",
+        "criticals": "Kritisch"
     }
 }
diff --git a/public/locales/el/common.json b/public/locales/el/common.json
index 3f6802a4..b318cfda 100644
--- a/public/locales/el/common.json
+++ b/public/locales/el/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -50,7 +51,7 @@
     },
     "unifi": {
         "users": "Χρήστες",
-        "uptime": "Uptime",
+        "uptime": "Χρόνος Λειτουργίας",
         "days": "Ημέρες",
         "wan": "WAN",
         "lan": "LAN",
@@ -86,15 +87,15 @@
         "ping": "Ping",
         "down": "Down",
         "up": "Up",
-        "not_available": "Not Available"
+        "not_available": "Μη διαθέσιμο"
     },
     "siteMonitor": {
-        "http_status": "HTTP status",
+        "http_status": "Κατάσταση HTTP",
         "error": "Σφάλμα",
-        "response": "Response",
+        "response": "Απόκριση",
         "down": "Down",
         "up": "Up",
-        "not_available": "Not Available"
+        "not_available": "Μη διαθέσιμο"
     },
     "emby": {
         "playing": "Παίζει",
@@ -126,14 +127,14 @@
     },
     "fritzbox": {
         "connectionStatus": "Κατάσταση",
-        "connectionStatusUnconfigured": "Unconfigured",
-        "connectionStatusConnecting": "Connecting",
+        "connectionStatusUnconfigured": "Μη Ρυθμισμένο",
+        "connectionStatusConnecting": "Κατάσταση Σύνδεσης",
         "connectionStatusAuthenticating": "Authenticating",
         "connectionStatusPendingDisconnect": "Pending Disconnect",
         "connectionStatusDisconnecting": "Disconnecting",
         "connectionStatusDisconnected": "Disconnected",
         "connectionStatusConnected": "Connected",
-        "uptime": "Uptime",
+        "uptime": "Χρόνος Λειτουργίας",
         "maxDown": "Max. Down",
         "maxUp": "Max. Up",
         "down": "Down",
@@ -309,7 +310,7 @@
         "hours": "{{number}}h",
         "minutes": "{{number}}m",
         "seconds": "{{number}}s",
-        "ago": "{{value}} Ago"
+        "ago": "{{value}} πρίν"
     },
     "tdarr": {
         "queue": "Ουρά",
@@ -324,45 +325,45 @@
     },
     "navidrome": {
         "nothing_streaming": "Δεν υπάρχουν ενεργές ροές",
-        "please_wait": "Please Wait"
+        "please_wait": "Παρακαλώ περιμένετε"
     },
     "npm": {
-        "enabled": "Enabled",
-        "disabled": "Disabled",
+        "enabled": "Ενεργοποιημένο",
+        "disabled": "Απενεργοποιημένο",
         "total": "Σύνολο"
     },
     "coinmarketcap": {
-        "configure": "Configure one or more crypto currencies to track",
-        "1hour": "1 Hour",
-        "1day": "1 Day",
-        "7days": "7 Days",
-        "30days": "30 Days"
+        "configure": "Ρυθμίστε ένα ή περισσότερα κρυπτονομίσματα για παρακολούθηση",
+        "1hour": "1 Ώρα",
+        "1day": "1 ημέρα",
+        "7days": "7 Ημέρες",
+        "30days": "30 Ημέρες"
     },
     "gotify": {
-        "apps": "Applications",
-        "clients": "Clients",
-        "messages": "Messages"
+        "apps": "Εφαρμογές",
+        "clients": "Πελάτες",
+        "messages": "Μηνύματα"
     },
     "prowlarr": {
-        "enableIndexers": "Indexers",
-        "numberOfGrabs": "Grabs",
+        "enableIndexers": "Ευρετήρια",
+        "numberOfGrabs": "Αρπαγές",
         "numberOfQueries": "Queries",
-        "numberOfFailGrabs": "Fail Grabs",
+        "numberOfFailGrabs": "Αποτυχημένες Αρπαγές",
         "numberOfFailQueries": "Fail Queries"
     },
     "jackett": {
-        "configured": "Configured",
+        "configured": "Ρυθμισμένο",
         "errored": "Errored"
     },
     "strelaysrv": {
-        "numActiveSessions": "Sessions",
-        "numConnections": "Connections",
+        "numActiveSessions": "Συνεδρίες",
+        "numConnections": "Συνδέσεις",
         "dataRelayed": "Relayed",
         "transferRate": "Ρυθμός"
     },
     "mastodon": {
         "user_count": "Χρήστες",
-        "status_count": "Posts",
+        "status_count": "Δημοσιεύσεις",
         "domain_count": "Domains"
     },
     "medusa": {
@@ -371,10 +372,10 @@
         "series": "Σειρές"
     },
     "minecraft": {
-        "players": "Players",
-        "version": "Version",
+        "players": "Παίκτες",
+        "version": "Έκδοση",
         "status": "Κατάσταση",
-        "up": "Online",
+        "up": "Συνδεδεμένοι",
         "down": "Εκτός σύνδεσης"
     },
     "miniflux": {
@@ -383,8 +384,8 @@
     },
     "authentik": {
         "users": "Χρήστες",
-        "loginsLast24H": "Logins (24h)",
-        "failedLoginsLast24H": "Failed Logins (24h)"
+        "loginsLast24H": "Συνδέσεις (24h)",
+        "failedLoginsLast24H": "Αποτυχημένες Συνδέσεις (24h)"
     },
     "proxmox": {
         "mem": "MEM",
@@ -409,7 +410,7 @@
         "read": "Read",
         "write": "Write",
         "gpu": "GPU",
-        "mem": "Mem",
+        "mem": "Μνήμη",
         "swap": "Swap"
     },
     "quicklaunch": {
@@ -421,22 +422,22 @@
         "url": "URL"
     },
     "wmo": {
-        "0-day": "Sunny",
-        "0-night": "Clear",
-        "1-day": "Mainly Sunny",
-        "1-night": "Mainly Clear",
-        "2-day": "Partly Cloudy",
-        "2-night": "Partly Cloudy",
-        "3-day": "Cloudy",
-        "3-night": "Cloudy",
-        "45-day": "Foggy",
-        "45-night": "Foggy",
-        "48-day": "Foggy",
-        "48-night": "Foggy",
-        "51-day": "Light Drizzle",
-        "51-night": "Light Drizzle",
-        "53-day": "Drizzle",
-        "53-night": "Drizzle",
+        "0-day": "Λιακάδα",
+        "0-night": "Καθαρή",
+        "1-day": "Κυρίως Ηλιόλουστη",
+        "1-night": "Κυρίως καθαρή",
+        "2-day": "Αραιές Νεφώσεις",
+        "2-night": "Αραιές Νεφώσεις",
+        "3-day": "Συννεφιές",
+        "3-night": "Συννεφιές",
+        "45-day": "Ομίχλη",
+        "45-night": "Ομίχλη",
+        "48-day": "Ομίχλη",
+        "48-night": "Ομίχλη",
+        "51-day": "Ψιλόβροχο",
+        "51-night": "Ψιλόβροχο",
+        "53-day": "Ψιλόβροχο",
+        "53-night": "Ψιλόβροχο",
         "55-day": "Heavy Drizzle",
         "55-night": "Heavy Drizzle",
         "56-day": "Light Freezing Drizzle",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Εκτός σύνδεσης",
+        "down": "Down",
         "paused": "Paused",
         "status": "Κατάσταση",
         "last_ping": "Last Ping",
@@ -508,7 +509,7 @@
         "approvedPushes": "Εγκρίθηκε",
         "rejectedPushes": "Rejected",
         "filters": "Filters",
-        "indexers": "Indexers"
+        "indexers": "Ευρετήρια"
     },
     "tubearchivist": {
         "downloads": "Ουρά",
@@ -517,20 +518,20 @@
         "playlists": "Playlists"
     },
     "truenas": {
-        "load": "System Load",
-        "uptime": "Uptime",
+        "load": "Φόρτος Συστήματος",
+        "uptime": "Χρόνος Λειτουργίας",
         "alerts": "Ειδοποιήσεις"
     },
     "pyload": {
-        "speed": "Speed",
+        "speed": "Ταχύτητα",
         "active": "Ενεργό",
         "queue": "Ουρά",
         "total": "Σύνολο"
     },
     "gluetun": {
-        "public_ip": "Public IP",
-        "region": "Region",
-        "country": "Country"
+        "public_ip": "Δημόσια ΙΡ",
+        "region": "Περιοχή",
+        "country": "Χώρα"
     },
     "hdhomerun": {
         "channels": "Channels",
@@ -549,19 +550,19 @@
         "battery_charge": "Battery Charge",
         "ups_load": "UPS Load",
         "ups_status": "UPS Status",
-        "online": "Online",
+        "online": "Συνδεδεμένοι",
         "on_battery": "On Battery",
         "low_battery": "Low Battery"
     },
     "nextdns": {
-        "wait": "Please Wait",
+        "wait": "Παρακαλώ περιμένετε",
         "no_devices": "No Device Data Received"
     },
     "mikrotik": {
-        "cpuLoad": "CPU Load",
-        "memoryUsed": "Memory Used",
-        "uptime": "Uptime",
-        "numberOfLeases": "Leases"
+        "cpuLoad": "Φόρτος CPU",
+        "memoryUsed": "Χρήση μνήμης",
+        "uptime": "Χρόνος Λειτουργίας",
+        "numberOfLeases": "Μισθώσεις"
     },
     "xteve": {
         "streams_all": "All Streams",
@@ -569,20 +570,20 @@
         "streams_xepg": "XEPG Channels"
     },
     "opendtu": {
-        "yieldDay": "Today",
-        "absolutePower": "Power",
-        "relativePower": "Power %",
+        "yieldDay": "Σήμερα",
+        "absolutePower": "Ισχύς",
+        "relativePower": "Ισχύς %",
         "limit": "Limit"
     },
     "opnsense": {
-        "cpu": "CPU Load",
+        "cpu": "Φόρτος CPU",
         "memory": "Active Memory",
         "wanUpload": "WAN Upload",
         "wanDownload": "WAN Download"
     },
     "moonraker": {
-        "printer_state": "Printer State",
-        "print_status": "Print Status",
+        "printer_state": "Κατάσταση Εκτυπωτή",
+        "print_status": "Κατάσταση Εκτύπωσης",
         "print_progress": "Progress",
         "layers": "Layers"
     },
@@ -590,7 +591,7 @@
         "printer_state": "Κατάσταση",
         "temp_tool": "Tool temp",
         "temp_bed": "Bed temp",
-        "job_completion": "Completion"
+        "job_completion": "Ολοκλήρωση"
     },
     "cloudflared": {
         "origin_ip": "Origin IP",
@@ -621,7 +622,7 @@
     "uptimekuma": {
         "up": "Sites Up",
         "down": "Sites Down",
-        "uptime": "Uptime",
+        "uptime": "Χρόνος Λειτουργίας",
         "incident": "Incident",
         "m": "m"
     },
@@ -638,7 +639,7 @@
     },
     "diskstation": {
         "days": "Ημέρες",
-        "uptime": "Uptime",
+        "uptime": "Χρόνος Λειτουργίας",
         "volumeAvailable": "Διαθέσιμο"
     },
     "mylar": {
@@ -694,7 +695,7 @@
         "targets_total": "Total Targets"
     },
     "ghostfolio": {
-        "gross_percent_today": "Today",
+        "gross_percent_today": "Σήμερα",
         "gross_percent_1y": "One year",
         "gross_percent_max": "All time"
     },
@@ -723,7 +724,7 @@
         "downloadCount": "Ουρά",
         "downloadBytesRemaining": "Υπόλοιπο",
         "downloadTotalBytes": "Size",
-        "downloadSpeed": "Speed"
+        "downloadSpeed": "Ταχύτητα"
     },
     "kavita": {
         "seriesCount": "Σειρές",
@@ -744,12 +745,12 @@
     },
     "gamedig": {
         "status": "Κατάσταση",
-        "online": "Online",
+        "online": "Συνδεδεμένοι",
         "offline": "Εκτός σύνδεσης",
         "name": "Name",
         "map": "Map",
         "currentPlayers": "Current players",
-        "players": "Players",
+        "players": "Παίκτες",
         "maxPlayers": "Max players",
         "bots": "Bots",
         "ping": "Ping"
@@ -776,7 +777,7 @@
     },
     "uptimerobot": {
         "status": "Κατάσταση",
-        "uptime": "Uptime",
+        "uptime": "Χρόνος Λειτουργίας",
         "lastDown": "Last Downtime",
         "downDuration": "Downtime Duration",
         "sitesUp": "Sites Up",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 3299913c..1fb62062 100755
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -823,4 +824,9 @@
         "platforms": "Platforms",
         "totalRoms": "Total ROMs"
     }
+    ,
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
+    }
 }
\ No newline at end of file
diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json
index c55fefb2..42a2f460 100644
--- a/public/locales/eo/common.json
+++ b/public/locales/eo/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Malkonekta",
+        "down": "Down",
         "paused": "Paused",
         "status": "Stato",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index bcf9ebea..97dabdc2 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -12,8 +12,9 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
-        "months": "mo",
+        "months": "me",
         "days": "d",
         "hours": "h",
         "minutes": "m",
@@ -46,11 +47,11 @@
         "load": "Carga",
         "temp": "TEMP",
         "max": "Máx.",
-        "uptime": "ARRIBA"
+        "uptime": "ACTIVO"
     },
     "unifi": {
         "users": "Usuarios",
-        "uptime": "Tiempo de la actividad",
+        "uptime": "Tiempo activo",
         "days": "Días",
         "wan": "WAN",
         "lan": "LAN",
@@ -60,7 +61,7 @@
         "wlan_devices": "Dispositivos WLAN",
         "lan_users": "Usuarios LAN",
         "wlan_users": "Usuarios WLAN",
-        "up": "ARRIBA",
+        "up": "ACTIVO",
         "down": "CAÍDO",
         "wait": "Espera, por favor",
         "empty_data": "Se desconoce el estado del subsistema"
@@ -84,17 +85,17 @@
     "ping": {
         "error": "Fallo",
         "ping": "Ping",
-        "down": "Abajo",
-        "up": "Arriba",
-        "not_available": "No Disponible"
+        "down": "Inactivo",
+        "up": "Activo",
+        "not_available": "No disponible"
     },
     "siteMonitor": {
         "http_status": "Estado HTTP",
         "error": "Fallo",
         "response": "Respuesta",
-        "down": "Abajo",
-        "up": "Arriba",
-        "not_available": "No Disponible"
+        "down": "Inactivo",
+        "up": "Activo",
+        "not_available": "No disponible"
     },
     "emby": {
         "playing": "Reproduciendo",
@@ -102,7 +103,7 @@
         "bitrate": "Tasa de bits",
         "no_active": "Sin transmisiones activas",
         "movies": "Películas",
-        "series": "Serie",
+        "series": "Series",
         "episodes": "Episodios",
         "songs": "Canciones"
     },
@@ -129,18 +130,18 @@
         "connectionStatusUnconfigured": "Sin configurar",
         "connectionStatusConnecting": "Conectando",
         "connectionStatusAuthenticating": "Autenticando",
-        "connectionStatusPendingDisconnect": "Pending Disconnect",
+        "connectionStatusPendingDisconnect": "Desconexión pendiente",
         "connectionStatusDisconnecting": "Desconectando",
         "connectionStatusDisconnected": "Desconectado",
         "connectionStatusConnected": "Conectado",
-        "uptime": "Tiempo de la actividad",
-        "maxDown": "Max. Down",
-        "maxUp": "Max. Up",
-        "down": "Abajo",
-        "up": "Arriba",
+        "uptime": "Tiempo activo",
+        "maxDown": "Descarga máxima",
+        "maxUp": "Subida máxima",
+        "down": "Inactivo",
+        "up": "Activo",
         "received": "Recibido",
         "sent": "Enviado",
-        "externalIPAddress": "IP pública"
+        "externalIPAddress": "IP ext."
     },
     "caddy": {
         "upstreams": "Upstream (desarrollo de software)",
@@ -152,7 +153,7 @@
         "diffsDetected": "Diferencias detectadas"
     },
     "channelsdvrserver": {
-        "shows": "Espectáculos",
+        "shows": "Series",
         "recordings": "Grabaciones",
         "scheduled": "Programado",
         "passes": "Pases"
@@ -168,8 +169,8 @@
         "connectedAp": "AP conectados",
         "activeUser": "Dispositivos activos",
         "alerts": "Alertas",
-        "connectedGateway": "Pasarelas conectadas",
-        "connectedSwitches": "Interruptores conectados"
+        "connectedGateway": "Puertas de enlace conectadas",
+        "connectedSwitches": "Conmutadores conectados"
     },
     "nzbget": {
         "rate": "Tasa",
@@ -205,11 +206,11 @@
         "seed": "Semillas"
     },
     "qnap": {
-        "cpuUsage": "Uso de la Cpu",
+        "cpuUsage": "Uso de la CPU",
         "memUsage": "Uso de la memoria",
         "systemTempC": "Temperatura del sistema",
-        "poolUsage": "Comprobación del uso del grupo de memoria",
-        "volumeUsage": "Volumen utilizado",
+        "poolUsage": "Uso del pool",
+        "volumeUsage": "Uso de volúmenes",
         "invalid": "No válido"
     },
     "deluge": {
@@ -227,13 +228,13 @@
     "sonarr": {
         "wanted": "Buscando",
         "queued": "En cola",
-        "series": "Serie",
+        "series": "Series",
         "queue": "En cola",
         "unknown": "Desconocido"
     },
     "radarr": {
         "wanted": "Buscando",
-        "missing": "Faltan",
+        "missing": "Faltantes",
         "queued": "En cola",
         "movies": "Películas",
         "queue": "En cola",
@@ -250,8 +251,8 @@
         "books": "Libros"
     },
     "bazarr": {
-        "missingEpisodes": "Episodios perdidos",
-        "missingMovies": "Películas perdidas"
+        "missingEpisodes": "Episodios faltantes",
+        "missingMovies": "Películas faltantes"
     },
     "ombi": {
         "pending": "Pendiente",
@@ -273,13 +274,13 @@
         "total": "Total",
         "connected": "Conectado",
         "new_devices": "Nuevos dispositivos",
-        "down_alerts": "Alertas"
+        "down_alerts": "Alertas de caídas"
     },
     "pihole": {
         "queries": "Consultas",
         "blocked": "Bloqueado",
         "blocked_percent": "% bloqueado",
-        "gravity": "Gravedad"
+        "gravity": "Gravity"
     },
     "adguard": {
         "queries": "Consultas",
@@ -303,12 +304,12 @@
         "never": "Nunca",
         "last_seen": "Visto por última vez",
         "now": "Ahora",
-        "years": "{{number}}años",
-        "weeks": "{{number}}semanas",
-        "days": "{{number}}días",
-        "hours": "{{number}}horas",
-        "minutes": "{{number}}minutos",
-        "seconds": "{{number}}segundos",
+        "years": "{{number}}a",
+        "weeks": "{{number}}sem",
+        "days": "{{number}}d",
+        "hours": "{{number}}h",
+        "minutes": "{{number}}m",
+        "seconds": "{{number}}s",
         "ago": "Hace {{value}}"
     },
     "tdarr": {
@@ -324,7 +325,7 @@
     },
     "navidrome": {
         "nothing_streaming": "Sin transmisiones activas",
-        "please_wait": "Espere por favor"
+        "please_wait": "Por favor, espera"
     },
     "npm": {
         "enabled": "Activado",
@@ -368,7 +369,7 @@
     "medusa": {
         "wanted": "Buscando",
         "queued": "En cola",
-        "series": "Serie"
+        "series": "Series"
     },
     "minecraft": {
         "players": "Jugadores",
@@ -389,7 +390,7 @@
     "proxmox": {
         "mem": "MEM",
         "cpu": "CPU",
-        "lxc": "Contenedores Linux",
+        "lxc": "LXC",
         "vms": "Máquinas Virtuales"
     },
     "glances": {
@@ -399,7 +400,7 @@
         "temp": "TEMP",
         "_temp": "Temperatura",
         "warn": "Advertir",
-        "uptime": "ARRIBA",
+        "uptime": "ACTIVO",
         "total": "Total",
         "free": "Libre",
         "used": "Usado",
@@ -417,7 +418,7 @@
         "service": "Servicio",
         "search": "Buscar",
         "custom": "Personalizado",
-        "visit": "Visita",
+        "visit": "Visitar",
         "url": "Enlace"
     },
     "wmo": {
@@ -437,8 +438,8 @@
         "51-night": "Llovizna ligera",
         "53-day": "Llovizna",
         "53-night": "Llovizna",
-        "55-day": "Llovizna pesada",
-        "55-night": "Llovizna pesada",
+        "55-day": "Llovizna intensa",
+        "55-night": "Llovizna intensa",
         "56-day": "Llovizna helada ligera",
         "56-night": "Llovizna helada ligera",
         "57-day": "Llovizna helada",
@@ -447,26 +448,26 @@
         "61-night": "Lluvia ligera",
         "63-day": "Lluvia",
         "63-night": "Lluvia",
-        "65-day": "Chubascos",
-        "65-night": "Chubascos",
+        "65-day": "Lluvia torrencial",
+        "65-night": "Lluvia torrencial",
         "66-day": "Granizo",
         "66-night": "Granizo",
         "67-day": "Granizo",
         "67-night": "Granizo",
-        "71-day": "Nevada Leve",
-        "71-night": "Nevada Leve",
+        "71-day": "Nevada leve",
+        "71-night": "Nevada leve",
         "73-day": "Nevada",
         "73-night": "Nevada",
-        "75-day": "Fuertes Nevadas",
-        "75-night": "Fuertes Nevadas",
+        "75-day": "Nevada intensa",
+        "75-night": "Nevada intensa",
         "77-day": "Granizada",
         "77-night": "Granizada",
         "80-day": "Llovizna",
         "80-night": "Llovizna",
         "81-day": "Lluvia",
         "81-night": "Lluvia",
-        "82-day": "Chubascos",
-        "82-night": "Chubascos",
+        "82-day": "Lluvias torrenciales",
+        "82-night": "Lluvias torrenciales",
         "85-day": "Lluvia de nieve",
         "85-night": "Lluvia de nieve",
         "86-day": "Lluvia de nieve",
@@ -485,15 +486,15 @@
         "up_to_date": "Actualizado",
         "child_bridges": "Bridges secundarios",
         "child_bridges_status": "{{ok}}/{{total}}",
-        "up": "Arriba",
+        "up": "Activo",
         "pending": "Pendiente",
-        "down": "Abajo"
+        "down": "Inactivo"
     },
     "healthchecks": {
         "new": "Nuevo",
-        "up": "En línea",
+        "up": "Activo",
         "grace": "En Periodo de Gracia",
-        "down": "Desconectado",
+        "down": "Inactivo",
         "paused": "Pausado",
         "status": "Estado",
         "last_ping": "Último ping",
@@ -512,13 +513,13 @@
     },
     "tubearchivist": {
         "downloads": "En cola",
-        "videos": "Vídeos",
+        "videos": "Videos",
         "channels": "Canales",
         "playlists": "Listas de reproducción"
     },
     "truenas": {
         "load": "Carga del sistema",
-        "uptime": "Tiempo de la actividad",
+        "uptime": "Tiempo activo",
         "alerts": "Alertas"
     },
     "pyload": {
@@ -546,21 +547,21 @@
         "total": "Total"
     },
     "peanut": {
-        "battery_charge": "Battery Charge",
-        "ups_load": "UPS Load",
-        "ups_status": "UPS Status",
+        "battery_charge": "Carga de la batería",
+        "ups_load": "Carga del UPS",
+        "ups_status": "Estado del UPS",
         "online": "En línea",
-        "on_battery": "On Battery",
-        "low_battery": "Low Battery"
+        "on_battery": "Con batería",
+        "low_battery": "Batería baja"
     },
     "nextdns": {
-        "wait": "Espere por favor",
-        "no_devices": "No se reciben datos del dispositivo"
+        "wait": "Por favor, espera",
+        "no_devices": "No se recibieron datos del dispositivo"
     },
     "mikrotik": {
         "cpuLoad": "Carga de la CPU",
         "memoryUsed": "Memoria utilizada",
-        "uptime": "Tiempo de la actividad",
+        "uptime": "Tiempo activo",
         "numberOfLeases": "Alquileres"
     },
     "xteve": {
@@ -570,15 +571,15 @@
     },
     "opendtu": {
         "yieldDay": "Hoy",
-        "absolutePower": "Encender",
-        "relativePower": "Encender %",
+        "absolutePower": "Potencia",
+        "relativePower": "Potencia %",
         "limit": "Límite"
     },
     "opnsense": {
         "cpu": "Carga de la CPU",
         "memory": "Memoria activa",
-        "wanUpload": "Carga WAN",
-        "wanDownload": "Descargar WAN"
+        "wanUpload": "Subida WAN",
+        "wanDownload": "Descarga WAN"
     },
     "moonraker": {
         "printer_state": "Estado de la impresora",
@@ -598,10 +599,10 @@
     },
     "pfsense": {
         "load": "Promedio de carga",
-        "memory": "Memoria utilizada",
+        "memory": "Uso de memoria",
         "wanStatus": "Estado de la WAN",
-        "up": "Arriba",
-        "down": "Abajo",
+        "up": "Activo",
+        "down": "Inactivo",
         "temp": "Temperatura",
         "disk": "Uso del disco",
         "wanIP": "IP de la WAN"
@@ -615,41 +616,41 @@
     "immich": {
         "users": "Usuarios",
         "photos": "Fotos",
-        "videos": "Vídeos",
+        "videos": "Videos",
         "storage": "Almacenamiento"
     },
     "uptimekuma": {
-        "up": "Páginas web activas",
-        "down": "Páginas web inactivas",
-        "uptime": "Tiempo de la actividad",
+        "up": "Sitios activos",
+        "down": "Sitios inactivos",
+        "uptime": "Tiempo activo",
         "incident": "Incidencia",
         "m": "m"
     },
     "atsumeru": {
-        "series": "Serie",
+        "series": "Series",
         "archives": "Archivos",
         "chapters": "Capítulos",
         "categories": "Categorías"
     },
     "komga": {
         "libraries": "Librerías",
-        "series": "Serie",
+        "series": "Series",
         "books": "Libros"
     },
     "diskstation": {
         "days": "Días",
-        "uptime": "Tiempo de la actividad",
+        "uptime": "Tiempo activo",
         "volumeAvailable": "Disponible"
     },
     "mylar": {
-        "series": "Serie",
-        "issues": "Cuestiones",
+        "series": "Series",
+        "issues": "Números",
         "wanted": "Buscando"
     },
     "photoprism": {
         "albums": "Álbumes",
         "photos": "Fotos",
-        "videos": "Vídeos",
+        "videos": "Videos",
         "people": "Personas"
     },
     "fileflows": {
@@ -680,17 +681,17 @@
         "failed": "Fallido"
     },
     "unmanic": {
-        "active_workers": "Trabajadores en activo",
+        "active_workers": "Trabajadores activos",
         "total_workers": "Total de trabajadores",
-        "records_total": "Duración de la cola"
+        "records_total": "Longitud de la cola"
     },
     "pterodactyl": {
         "servers": "Servidores",
         "nodes": "Nodos"
     },
     "prometheus": {
-        "targets_up": "Objetivos arriba",
-        "targets_down": "Objetivos abajo",
+        "targets_up": "Objetivos activos",
+        "targets_down": "Objetivos inactivos",
         "targets_total": "Objetivos totales"
     },
     "ghostfolio": {
@@ -705,19 +706,19 @@
         "booksDuration": "Duración"
     },
     "homeassistant": {
-        "people_home": "Inicio de personas",
+        "people_home": "Personas en casa",
         "lights_on": "Luces encendidas",
-        "switches_on": "Encendido"
+        "switches_on": "Interruptores activados"
     },
     "whatsupdocker": {
-        "monitoring": "Supervisión",
+        "monitoring": "Monitorizando",
         "updates": "Actualizaciones"
     },
     "calibreweb": {
         "books": "Libros",
         "authors": "Autores",
         "categories": "Categorías",
-        "series": "Serie"
+        "series": "Series"
     },
     "jdownloader": {
         "downloadCount": "En cola",
@@ -726,15 +727,15 @@
         "downloadSpeed": "Velocidad"
     },
     "kavita": {
-        "seriesCount": "Serie",
+        "seriesCount": "Series",
         "totalFiles": "Archivos"
     },
     "azuredevops": {
         "result": "Resultado",
         "status": "Estado",
-        "buildId": "Identificador de la construcción",
+        "buildId": "ID de compilación",
         "succeeded": "Exitoso",
-        "notStarted": "Sin empezar",
+        "notStarted": "No iniciado",
         "failed": "Fallido",
         "canceled": "Cancelado",
         "inProgress": "En curso",
@@ -755,7 +756,7 @@
         "ping": "Ping"
     },
     "urbackup": {
-        "ok": "De acuerdo",
+        "ok": "OK",
         "errored": "Errores",
         "noRecent": "Caducado",
         "totalUsed": "Almacenamiento usado"
@@ -776,23 +777,31 @@
     },
     "uptimerobot": {
         "status": "Estado",
-        "uptime": "Tiempo de la actividad",
+        "uptime": "Tiempo activo",
         "lastDown": "Último periodo de inactividad",
-        "downDuration": "Tiempo de inactividad",
-        "sitesUp": "Páginas web activas",
-        "sitesDown": "Páginas web inactivas",
+        "downDuration": "Duración de inactividad",
+        "sitesUp": "Sitios activos",
+        "sitesDown": "Sitios inactivos",
         "paused": "Pausado",
         "notyetchecked": "Aún no verificado",
-        "up": "Arriba",
+        "up": "Activo",
         "seemsdown": "Parece caída",
-        "down": "Abajo",
+        "down": "Inactivo",
         "unknown": "Desconocido"
     },
     "calendar": {
         "inCinemas": "En cine",
         "physicalRelease": "Lanzamiento en físico",
         "digitalRelease": "Lanzamiento en digital",
-        "noEventsToday": "Sin eventos para hoy",
-        "noEventsFound": "No events found"
+        "noEventsToday": "¡Sin eventos para hoy!",
+        "noEventsFound": "No se encontraron eventos"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json
index b8dfaa06..a6a2402e 100644
--- a/public/locales/eu/common.json
+++ b/public/locales/eu/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Offline",
+        "down": "Down",
         "paused": "Paused",
         "status": "Status",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json
index 7a987f9f..0fd030be 100644
--- a/public/locales/fi/common.json
+++ b/public/locales/fi/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Offline",
+        "down": "Down",
         "paused": "Paused",
         "status": "Tila",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index b36e039a..0cd5435a 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Nouveau",
-        "up": "En ligne",
+        "up": "Up",
         "grace": "En Période de Grâce",
-        "down": "Hors ligne",
+        "down": "Down",
         "paused": "En Pause",
         "status": "Statut",
         "last_ping": "Dernier Ping",
@@ -547,11 +548,11 @@
     },
     "peanut": {
         "battery_charge": "Battery Charge",
-        "ups_load": "UPS Load",
-        "ups_status": "UPS Status",
+        "ups_load": "Charge de l'UPS",
+        "ups_status": "État de l'UPS",
         "online": "En ligne",
         "on_battery": "On Battery",
-        "low_battery": "Low Battery"
+        "low_battery": "Batterie Faible"
     },
     "nextdns": {
         "wait": "Merci de patienter",
@@ -794,5 +795,13 @@
         "digitalRelease": "Sortie numérique",
         "noEventsToday": "Rien pour aujourd'hui !",
         "noEventsFound": "Aucun événement trouvé"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/he/common.json b/public/locales/he/common.json
index edac36af..0c4caf80 100644
--- a/public/locales/he/common.json
+++ b/public/locales/he/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "כבוי",
+        "down": "Down",
         "paused": "Paused",
         "status": "סטטוס",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json
index 356c6749..ca628d3b 100644
--- a/public/locales/hi/common.json
+++ b/public/locales/hi/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Offline",
+        "down": "Down",
         "paused": "Paused",
         "status": "Status",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json
index 32e6255b..5c23c742 100644
--- a/public/locales/hr/common.json
+++ b/public/locales/hr/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Novo",
-        "up": "Online",
+        "up": "Up",
         "grace": "U razdoblju odgode",
-        "down": "Offline",
+        "down": "Down",
         "paused": "Zaustavljeno",
         "status": "Stanje",
         "last_ping": "Zadnji ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json
index 60dee22f..4c047536 100644
--- a/public/locales/hu/common.json
+++ b/public/locales/hu/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Új",
-        "up": "Csatlakozva",
+        "up": "Fel",
         "grace": "Türelmi idő alatt",
-        "down": "Offline",
+        "down": "Le",
         "paused": "Szünetel",
         "status": "Státusz",
         "last_ping": "Legutóbbi Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digitális kiadás",
         "noEventsToday": "Ezen a napon nincsenek események!",
         "noEventsFound": "Nem található esemény"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/id/common.json b/public/locales/id/common.json
index 09934533..c5f35e1f 100644
--- a/public/locales/id/common.json
+++ b/public/locales/id/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Offline",
+        "down": "Down",
         "paused": "Paused",
         "status": "Status",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/it/common.json b/public/locales/it/common.json
index c72565c9..6f10baf7 100644
--- a/public/locales/it/common.json
+++ b/public/locales/it/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Nuovo",
-        "up": "Online",
+        "up": "Up",
         "grace": "Periodo di Tolleranza",
-        "down": "Non in linea",
+        "down": "Down",
         "paused": "In Pausa",
         "status": "Stato",
         "last_ping": "Ultimo Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Versione digitale",
         "noEventsToday": "Nessun evento per oggi!",
         "noEventsFound": "Nessun evento trovato"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json
index d98a4c55..9725e59b 100644
--- a/public/locales/ja/common.json
+++ b/public/locales/ja/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "新着",
-        "up": "オンライン",
+        "up": "上へ",
         "grace": "猶予期間中",
-        "down": "オフライン",
+        "down": "下へ",
         "paused": "一時停止中",
         "status": "状態",
         "last_ping": "最後のPing",
@@ -794,5 +795,13 @@
         "digitalRelease": "デジタル・リリース",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json
index 2b857463..13961129 100644
--- a/public/locales/ko/common.json
+++ b/public/locales/ko/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "중지",
+        "down": "Down",
         "paused": "Paused",
         "status": "상태",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json
index 8a3cba64..1c35a7f2 100644
--- a/public/locales/lv/common.json
+++ b/public/locales/lv/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Bezsaistē",
+        "down": "Down",
         "paused": "Paused",
         "status": "Statuss",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json
index 052705b7..c62138cb 100644
--- a/public/locales/ms/common.json
+++ b/public/locales/ms/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Luar talian",
+        "down": "Down",
         "paused": "Paused",
         "status": "Status",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json
index 2c1ddd44..c2fac214 100644
--- a/public/locales/nl/common.json
+++ b/public/locales/nl/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mnd",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Nieuw",
-        "up": "Bereikbaar",
+        "up": "Online",
         "grace": "In de respijt periode",
-        "down": "Onbereikbaar",
+        "down": "Offline",
         "paused": "Gepauzeerd",
         "status": "Status",
         "last_ping": "Laatste Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digitale versie",
         "noEventsToday": "Geen gebeurtenissen voor vandaag!",
         "noEventsFound": "Geen gebeurtenissen gevonden"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Waarschuwingen",
+        "criticals": "Kritiek"
     }
 }
diff --git a/public/locales/no/common.json b/public/locales/no/common.json
index 356c6749..ca628d3b 100644
--- a/public/locales/no/common.json
+++ b/public/locales/no/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Offline",
+        "down": "Down",
         "paused": "Paused",
         "status": "Status",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json
index 663078c0..f6e6dca4 100644
--- a/public/locales/pl/common.json
+++ b/public/locales/pl/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -493,7 +494,7 @@
         "new": "Nowy",
         "up": "Dostępny",
         "grace": "In Grace Period",
-        "down": "Nieosiągalny",
+        "down": "Niedostępny",
         "paused": "Zatrzymane",
         "status": "Stan",
         "last_ping": "Ostatni ping",
@@ -619,8 +620,8 @@
         "storage": "Pamięć"
     },
     "uptimekuma": {
-        "up": "Sites Up",
-        "down": "Niedziałające strony",
+        "up": "Działające",
+        "down": "Niedziałające",
         "uptime": "Czas działania",
         "incident": "Incydent",
         "m": "m"
@@ -779,8 +780,8 @@
         "uptime": "Czas działania",
         "lastDown": "Last Downtime",
         "downDuration": "Downtime Duration",
-        "sitesUp": "Sites Up",
-        "sitesDown": "Niedziałające strony",
+        "sitesUp": "Działające",
+        "sitesDown": "Niedziałające",
         "paused": "Zatrzymane",
         "notyetchecked": "Not Yet Checked",
         "up": "Dostępny",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json
index fcedb7cf..b471ccc2 100644
--- a/public/locales/pt/common.json
+++ b/public/locales/pt/common.json
@@ -12,11 +12,12 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
-        "months": "mo",
+        "months": "mes",
         "days": "d",
         "hours": "h",
-        "minutes": "m",
+        "minutes": "min",
         "seconds": "s"
     },
     "widget": {
@@ -30,7 +31,7 @@
     },
     "weather": {
         "current": "Localização atual",
-        "allow": "Clicar para permitir",
+        "allow": "Clique para permitir",
         "updating": "Atualizando",
         "wait": "Por favor aguarde"
     },
@@ -126,21 +127,21 @@
     },
     "fritzbox": {
         "connectionStatus": "Estado",
-        "connectionStatusUnconfigured": "Unconfigured",
-        "connectionStatusConnecting": "Connecting",
-        "connectionStatusAuthenticating": "Authenticating",
-        "connectionStatusPendingDisconnect": "Pending Disconnect",
-        "connectionStatusDisconnecting": "Disconnecting",
-        "connectionStatusDisconnected": "Disconnected",
+        "connectionStatusUnconfigured": "Não configurado",
+        "connectionStatusConnecting": "A conectar",
+        "connectionStatusAuthenticating": "Autenticando",
+        "connectionStatusPendingDisconnect": "Desconexão pendente",
+        "connectionStatusDisconnecting": "Desconectando",
+        "connectionStatusDisconnected": "Desconectado",
         "connectionStatusConnected": "Conectado",
         "uptime": "Ligado",
-        "maxDown": "Max. Down",
-        "maxUp": "Max. Up",
+        "maxDown": "Máx. de Descarga",
+        "maxUp": "Max. de Envio",
         "down": "Down",
         "up": "Up",
-        "received": "Received",
-        "sent": "Sent",
-        "externalIPAddress": "Ext. IP"
+        "received": "Recebido",
+        "sent": "Enviado",
+        "externalIPAddress": "Endereço IP externo"
     },
     "caddy": {
         "upstreams": "Upstreams",
@@ -439,20 +440,20 @@
         "53-night": "Chuvisco",
         "55-day": "Aguaceiro Forte",
         "55-night": "Aguaceiro Forte",
-        "56-day": "Leve Garoa Congelante",
-        "56-night": "Leve Garoa Congelante",
-        "57-day": "Garoa Congelante",
-        "57-night": "Garoa Congelante",
+        "56-day": "Granizo Leve",
+        "56-night": "Granizo Leve",
+        "57-day": "Granizo",
+        "57-night": "Granizo",
         "61-day": "Chuva fraca",
         "61-night": "Chuva fraca",
         "63-day": "Chuva",
         "63-night": "Chuva",
         "65-day": "Chuva forte",
         "65-night": "Chuva forte",
-        "66-day": "Chuva Congelante",
-        "66-night": "Chuva Congelante",
-        "67-day": "Chuva Congelante",
-        "67-night": "Chuva Congelante",
+        "66-day": "Granizo",
+        "66-night": "Granizo",
+        "67-day": "Granizo",
+        "67-night": "Granizo",
         "71-day": "Neve fraca",
         "71-night": "Neve fraca",
         "73-day": "Neve",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Novo",
-        "up": "Online",
+        "up": "Up",
         "grace": "Em Período Gratuito",
-        "down": "Desligado",
+        "down": "Down",
         "paused": "Pausado",
         "status": "Estado",
         "last_ping": "Ultimo Ping",
@@ -546,12 +547,12 @@
         "total": "Total"
     },
     "peanut": {
-        "battery_charge": "Battery Charge",
-        "ups_load": "UPS Load",
-        "ups_status": "UPS Status",
+        "battery_charge": "Carga da bateria",
+        "ups_load": "Carga da UPS",
+        "ups_status": "Estado da UPS",
         "online": "Online",
-        "on_battery": "On Battery",
-        "low_battery": "Low Battery"
+        "on_battery": "Em bateria",
+        "low_battery": "Bateria Fraca"
     },
     "nextdns": {
         "wait": "Por favor aguarde",
@@ -623,7 +624,7 @@
         "down": "Sites Fora do Ar",
         "uptime": "Ligado",
         "incident": "Incidente",
-        "m": "m"
+        "m": "min"
     },
     "atsumeru": {
         "series": "Séries",
@@ -793,6 +794,14 @@
         "physicalRelease": "Lançamento físico",
         "digitalRelease": "Lançamento digital",
         "noEventsToday": "Não existem eventos hoje!",
-        "noEventsFound": "No events found"
+        "noEventsFound": "Nenhum evento encontrado"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json
index 599eee13..3fda97f8 100644
--- a/public/locales/pt_BR/common.json
+++ b/public/locales/pt_BR/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Novo",
-        "up": "Online",
+        "up": "Up",
         "grace": "Em Período Gratuito",
-        "down": "Desligado",
+        "down": "Down",
         "paused": "Pausado",
         "status": "Estado",
         "last_ping": "Ultimo Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json
index cd8ef637..348989ae 100644
--- a/public/locales/ro/common.json
+++ b/public/locales/ro/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Sus",
         "grace": "In Grace Period",
-        "down": "Offline",
+        "down": "Jos",
         "paused": "Paused",
         "status": "Stare",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json
index 1366847b..f52d6007 100644
--- a/public/locales/ru/common.json
+++ b/public/locales/ru/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Новый",
-        "up": "В сети",
+        "up": "Онлайн",
         "grace": "Пробный период",
-        "down": "Не в сети",
+        "down": "Офлайн",
         "paused": "Приостановлено",
         "status": "Статус",
         "last_ping": "Последний пинг",
@@ -794,5 +795,13 @@
         "digitalRelease": "Цифровой релиз",
         "noEventsToday": "Нет событий на сегодня!",
         "noEventsFound": "Событий не найдено"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json
index 6d0f87ef..015187d2 100644
--- a/public/locales/sk/common.json
+++ b/public/locales/sk/common.json
@@ -12,7 +12,8 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{value, date}",
-        "uptime": "{{value, čas prevádzky}}",
+        "relativeDate": "{{value, relativeDate}}",
+        "uptime": "{{value, uptime}}",
         "months": "mes",
         "days": "d",
         "hours": "h",
@@ -51,7 +52,7 @@
     "unifi": {
         "users": "Používatelia",
         "uptime": "Prevádzka",
-        "days": "dní",
+        "days": "Dní",
         "wan": "WAN",
         "lan": "Lokálna sieť",
         "wlan": "WLAN",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Nový",
-        "up": "Online",
+        "up": "Nahrávanie",
         "grace": "V dodatočnej lehote",
-        "down": "Nedostupný",
+        "down": "Sťahovanie",
         "paused": "Pozastavené",
         "status": "Stav",
         "last_ping": "Poslendný ping",
@@ -637,7 +638,7 @@
         "books": "Knihy"
     },
     "diskstation": {
-        "days": "dní",
+        "days": "Dní",
         "uptime": "Prevádzka",
         "volumeAvailable": "Dostupné"
     },
@@ -794,5 +795,13 @@
         "digitalRelease": "Digitálne vydanie",
         "noEventsToday": "Žiadne udalosti na dnešný deň!",
         "noEventsFound": "Žiadne udalosti"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json
index afa46f7c..ed79137d 100644
--- a/public/locales/sl/common.json
+++ b/public/locales/sl/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mes",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Nov",
-        "up": "Na spletu",
+        "up": "Povezan",
         "grace": "V podaljšanem roku",
-        "down": "Ni povezan",
+        "down": "Nepovezan",
         "paused": "Pavziran",
         "status": "Stanje",
         "last_ping": "Zadnji Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digitalna izdaja",
         "noEventsToday": "Za danes ni dogodkov!",
         "noEventsFound": "Ni dogodkov"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Opozorila",
+        "criticals": "Kritično"
     }
 }
diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json
index 356c6749..ca628d3b 100644
--- a/public/locales/sr/common.json
+++ b/public/locales/sr/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Offline",
+        "down": "Down",
         "paused": "Paused",
         "status": "Status",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json
index 55b22d7e..af27210e 100644
--- a/public/locales/sv/common.json
+++ b/public/locales/sv/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Offline",
+        "down": "Down",
         "paused": "Paused",
         "status": "Status",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/te/common.json b/public/locales/te/common.json
index 4da6eb64..81b6af79 100644
--- a/public/locales/te/common.json
+++ b/public/locales/te/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "ఆఫ్‌లైన్",
+        "down": "Down",
         "paused": "Paused",
         "status": "హోదా",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/th/common.json b/public/locales/th/common.json
index 693f91fa..86b7021a 100644
--- a/public/locales/th/common.json
+++ b/public/locales/th/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "ออฟไลน์",
+        "down": "Down",
         "paused": "Paused",
         "status": "สถานะ",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json
index 7949b526..7ac4a63a 100644
--- a/public/locales/tr/common.json
+++ b/public/locales/tr/common.json
@@ -12,11 +12,12 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
-        "months": "mo",
-        "days": "d",
-        "hours": "h",
-        "minutes": "m",
+        "months": "ay",
+        "days": "g",
+        "hours": "sa",
+        "minutes": "dk",
         "seconds": "s"
     },
     "widget": {
@@ -83,18 +84,18 @@
     },
     "ping": {
         "error": "Hata",
-        "ping": "Ping",
-        "down": "Down",
-        "up": "Up",
-        "not_available": "Not Available"
+        "ping": "Gecikme",
+        "down": "İndirme",
+        "up": "Yükleme",
+        "not_available": "Mevcut Değil"
     },
     "siteMonitor": {
-        "http_status": "HTTP status",
+        "http_status": "HTTPS durumu",
         "error": "Hata",
-        "response": "Response",
-        "down": "Down",
-        "up": "Up",
-        "not_available": "Not Available"
+        "response": "Yanıt",
+        "down": "İndirme",
+        "up": "Yükleme",
+        "not_available": "Mevcut Değil"
     },
     "emby": {
         "playing": "Oynatılıyor",
@@ -126,20 +127,20 @@
     },
     "fritzbox": {
         "connectionStatus": "Durum",
-        "connectionStatusUnconfigured": "Unconfigured",
-        "connectionStatusConnecting": "Connecting",
-        "connectionStatusAuthenticating": "Authenticating",
+        "connectionStatusUnconfigured": "Yapılandırılmamış",
+        "connectionStatusConnecting": "Bağlanıyor",
+        "connectionStatusAuthenticating": "Kimlik doğrulanıyor",
         "connectionStatusPendingDisconnect": "Pending Disconnect",
-        "connectionStatusDisconnecting": "Disconnecting",
-        "connectionStatusDisconnected": "Disconnected",
+        "connectionStatusDisconnecting": "Bağlantı kesiliyor...",
+        "connectionStatusDisconnected": "Bağlantı kesildi",
         "connectionStatusConnected": "Bağlandı",
         "uptime": "Çalışma Süresi",
         "maxDown": "Max. Down",
         "maxUp": "Max. Up",
-        "down": "Down",
-        "up": "Up",
-        "received": "Received",
-        "sent": "Sent",
+        "down": "İndirme",
+        "up": "Yükleme",
+        "received": "Alınan",
+        "sent": "Gönderilen",
         "externalIPAddress": "Ext. IP"
     },
     "caddy": {
@@ -242,7 +243,7 @@
     "lidarr": {
         "wanted": "Aranan",
         "queued": "Kuyrukta",
-        "artists": "Artists"
+        "artists": "Sanatçılar"
     },
     "readarr": {
         "wanted": "Aranan",
@@ -290,7 +291,7 @@
     "speedtest": {
         "upload": "Yükle",
         "download": "İndir",
-        "ping": "Ping"
+        "ping": "Gecikme"
     },
     "portainer": {
         "running": "Çalışan",
@@ -397,19 +398,19 @@
         "load": "Yük",
         "wait": "Lütfen bekleyin",
         "temp": "Geçici",
-        "_temp": "Temp",
+        "_temp": "Sıcaklık",
         "warn": "Uyarı",
         "uptime": "Çalışma Süresi",
         "total": "Toplam",
         "free": "Boşta",
         "used": "Kullanımda",
-        "days": "d",
-        "hours": "h",
-        "crit": "Crit",
+        "days": "g",
+        "hours": "sa",
+        "crit": "Kritik",
         "read": "Oku",
-        "write": "Write",
+        "write": "Yazma",
         "gpu": "GPU",
-        "mem": "Mem",
+        "mem": "Hafıza",
         "swap": "Swap"
     },
     "quicklaunch": {
@@ -485,18 +486,18 @@
         "up_to_date": "Güncel",
         "child_bridges": "Alt Köprüler",
         "child_bridges_status": "{{ok}}/{{total}}",
-        "up": "Up",
+        "up": "Yükleme",
         "pending": "Bekliyor",
-        "down": "Down"
+        "down": "İndirme"
     },
     "healthchecks": {
         "new": "New",
-        "up": "Çevrimiçi",
+        "up": "Yükleme",
         "grace": "In Grace Period",
-        "down": "Çevrimdışı",
+        "down": "İndirme",
         "paused": "Paused",
         "status": "Durum",
-        "last_ping": "Last Ping",
+        "last_ping": "Son Ping",
         "never": "No pings yet"
     },
     "watchtower": {
@@ -546,11 +547,11 @@
         "total": "Toplam"
     },
     "peanut": {
-        "battery_charge": "Battery Charge",
+        "battery_charge": "Pil Yüzdesi",
         "ups_load": "UPS Load",
         "ups_status": "UPS Status",
         "online": "Çevrimiçi",
-        "on_battery": "On Battery",
+        "on_battery": "Pilde",
         "low_battery": "Low Battery"
     },
     "nextdns": {
@@ -600,9 +601,9 @@
         "load": "Load Avg",
         "memory": "Mem Usage",
         "wanStatus": "WAN Status",
-        "up": "Up",
-        "down": "Down",
-        "temp": "Temp",
+        "up": "Yükleme",
+        "down": "İndirme",
+        "temp": "Sıcaklık",
         "disk": "Disk Usage",
         "wanIP": "WAN IP"
     },
@@ -623,7 +624,7 @@
         "down": "Sites Down",
         "uptime": "Çalışma Süresi",
         "incident": "Incident",
-        "m": "m"
+        "m": "dk"
     },
     "atsumeru": {
         "series": "Diziler",
@@ -752,7 +753,7 @@
         "players": "Oyuncular",
         "maxPlayers": "Max players",
         "bots": "Bots",
-        "ping": "Ping"
+        "ping": "Gecikme"
     },
     "urbackup": {
         "ok": "Ok",
@@ -783,9 +784,9 @@
         "sitesDown": "Sites Down",
         "paused": "Paused",
         "notyetchecked": "Not Yet Checked",
-        "up": "Up",
+        "up": "Yükleme",
         "seemsdown": "Seems Down",
-        "down": "Down",
+        "down": "İndirme",
         "unknown": "Bilinmiyor"
     },
     "calendar": {
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json
index 27609ac9..5cee41a6 100644
--- a/public/locales/uk/common.json
+++ b/public/locales/uk/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "Новий",
-        "up": "Онлайн",
+        "up": "Up",
         "grace": "У пільговий період",
-        "down": "Офлайн",
+        "down": "Down",
         "paused": "Призупинено",
         "status": "Стан",
         "last_ping": "Останній пінг",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json
index 942d1388..45b7cdef 100644
--- a/public/locales/vi/common.json
+++ b/public/locales/vi/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -491,9 +492,9 @@
     },
     "healthchecks": {
         "new": "New",
-        "up": "Online",
+        "up": "Up",
         "grace": "In Grace Period",
-        "down": "Ngoại tuyến",
+        "down": "Down",
         "paused": "Paused",
         "status": "Trạng thái",
         "last_ping": "Last Ping",
@@ -794,5 +795,13 @@
         "digitalRelease": "Digital release",
         "noEventsToday": "No events for today!",
         "noEventsFound": "No events found"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json
index c4c1593e..baec31f0 100644
--- a/public/locales/yue/common.json
+++ b/public/locales/yue/common.json
@@ -12,12 +12,13 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
-        "months": "mo",
-        "days": "d",
-        "hours": "h",
-        "minutes": "m",
-        "seconds": "s"
+        "months": "月",
+        "days": "天",
+        "hours": "小時",
+        "minutes": "分",
+        "seconds": "秒"
     },
     "widget": {
         "missing_type": "缺少小部件類型:{{type}}",
@@ -129,13 +130,13 @@
         "connectionStatusUnconfigured": "未設置",
         "connectionStatusConnecting": "連線中",
         "connectionStatusAuthenticating": "驗證中",
-        "connectionStatusPendingDisconnect": "Pending Disconnect",
+        "connectionStatusPendingDisconnect": "待辦的斷開",
         "connectionStatusDisconnecting": "正在中斷連線",
         "connectionStatusDisconnected": "連接已中斷",
         "connectionStatusConnected": "已連線",
         "uptime": "運行時間",
-        "maxDown": "Max. Down",
-        "maxUp": "Max. Up",
+        "maxDown": "最大下載速率",
+        "maxUp": "最大上傳速率",
         "down": "離線",
         "up": "在線",
         "received": "已接收",
@@ -403,8 +404,8 @@
         "total": "全部",
         "free": "剩餘",
         "used": "用咗",
-        "days": "d",
-        "hours": "h",
+        "days": "天",
+        "hours": "小時",
         "crit": "重大的",
         "read": "已讀",
         "write": "寫入",
@@ -546,12 +547,12 @@
         "total": "全部"
     },
     "peanut": {
-        "battery_charge": "Battery Charge",
+        "battery_charge": "充電",
         "ups_load": "UPS Load",
         "ups_status": "UPS Status",
         "online": "在線",
-        "on_battery": "On Battery",
-        "low_battery": "Low Battery"
+        "on_battery": "電池供電",
+        "low_battery": "低電量"
     },
     "nextdns": {
         "wait": "請稍後",
@@ -623,7 +624,7 @@
         "down": "離線網站",
         "uptime": "運行時間",
         "incident": "事件",
-        "m": "m"
+        "m": "分"
     },
     "atsumeru": {
         "series": "影集",
@@ -794,5 +795,13 @@
         "digitalRelease": "數位發行",
         "noEventsToday": "今日無事件",
         "noEventsFound": "未找到事件"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json
index 0a0e728d..68e17e85 100644
--- a/public/locales/zh-Hans/common.json
+++ b/public/locales/zh-Hans/common.json
@@ -12,6 +12,7 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
         "months": "mo",
         "days": "d",
@@ -794,5 +795,13 @@
         "digitalRelease": "数字发行",
         "noEventsToday": "今天没有活动!",
         "noEventsFound": "未找到事件"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json
index 30a934d8..08ebe7d5 100644
--- a/public/locales/zh-Hant/common.json
+++ b/public/locales/zh-Hant/common.json
@@ -12,12 +12,13 @@
         "number": "{{value, number}}",
         "ms": "{{value, number}}",
         "date": "{{value, date}}",
+        "relativeDate": "{{value, relativeDate}}",
         "uptime": "{{value, uptime}}",
-        "months": "mo",
-        "days": "d",
-        "hours": "h",
-        "minutes": "m",
-        "seconds": "s"
+        "months": "月",
+        "days": "天",
+        "hours": "小時",
+        "minutes": "分",
+        "seconds": "秒"
     },
     "widget": {
         "missing_type": "遺失小工具的類型: {{type}}",
@@ -129,13 +130,13 @@
         "connectionStatusUnconfigured": "未設置",
         "connectionStatusConnecting": "連線中",
         "connectionStatusAuthenticating": "驗證中",
-        "connectionStatusPendingDisconnect": "Pending Disconnect",
+        "connectionStatusPendingDisconnect": "待辦的斷開",
         "connectionStatusDisconnecting": "正在中斷連線",
         "connectionStatusDisconnected": "連接已中斷",
         "connectionStatusConnected": "已連線",
         "uptime": "運行時間",
-        "maxDown": "Max. Down",
-        "maxUp": "Max. Up",
+        "maxDown": "最大下載速率",
+        "maxUp": "最大上傳速率",
         "down": "離線",
         "up": "在線",
         "received": "已接收",
@@ -403,8 +404,8 @@
         "total": "全部",
         "free": "剩餘",
         "used": "已使用",
-        "days": "d",
-        "hours": "h",
+        "days": "天",
+        "hours": "小時",
         "crit": "重大的",
         "read": "已讀",
         "write": "寫入",
@@ -546,12 +547,12 @@
         "total": "全部"
     },
     "peanut": {
-        "battery_charge": "Battery Charge",
+        "battery_charge": "充電",
         "ups_load": "UPS Load",
         "ups_status": "UPS Status",
         "online": "在線",
-        "on_battery": "On Battery",
-        "low_battery": "Low Battery"
+        "on_battery": "電池供電",
+        "low_battery": "低電量"
     },
     "nextdns": {
         "wait": "請稍後",
@@ -623,7 +624,7 @@
         "down": "離線網站",
         "uptime": "運行時間",
         "incident": "事件",
-        "m": "m"
+        "m": "分"
     },
     "atsumeru": {
         "series": "影集",
@@ -794,5 +795,13 @@
         "digitalRelease": "數位發行",
         "noEventsToday": "今日無事件",
         "noEventsFound": "未找到事件"
+    },
+    "romm": {
+        "platforms": "Platforms",
+        "totalRoms": "Total ROMs"
+    },
+    "netdata": {
+        "warnings": "Warnings",
+        "criticals": "Criticals"
     }
 }
diff --git a/requirements.txt b/requirements.txt
index b55fe427..e0365917 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -10,8 +10,8 @@ Markdown==3.4.4
 MarkupSafe==2.1.3
 mergedeep==1.3.4
 mkdocs==1.5.3
-mkdocs-material @ git+https://github.com/benphelps/mkdocs-material-insiders.git@bcad61c278491d58e74c39e164b821cec795c161
-mkdocs-material-extensions==1.2
+mkdocs-material==9.5.2
+mkdocs-material-extensions==1.3
 packaging==23.1
 paginate==0.5.6
 pathspec==0.11.2
diff --git a/src/components/widgets/datetime/datetime.jsx b/src/components/widgets/datetime/datetime.jsx
index 4e1cd6f1..a7aec5da 100644
--- a/src/components/widgets/datetime/datetime.jsx
+++ b/src/components/widgets/datetime/datetime.jsx
@@ -23,6 +23,7 @@ export default function DateTime({ options }) {
 
   useEffect(() => {
     const dateFormat = new Intl.DateTimeFormat(dateLocale, { ...format });
+    setDate(dateFormat.format(new Date()));
     const interval = setInterval(() => {
       setDate(dateFormat.format(new Date()));
     }, 1000);
diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js
index b0854b08..cfc88fdc 100644
--- a/src/utils/config/service-helpers.js
+++ b/src/utils/config/service-helpers.js
@@ -368,6 +368,7 @@ export function cleanServiceGroups(groups) {
           showTime,
           previousDays,
           view,
+          timezone,
 
           // coinmarketcap
           currency,
@@ -538,6 +539,7 @@ export function cleanServiceGroups(groups) {
           if (maxEvents) cleanedService.widget.maxEvents = maxEvents;
           if (previousDays) cleanedService.widget.previousDays = previousDays;
           if (showTime) cleanedService.widget.showTime = showTime;
+          if (timezone) cleanedService.widget.timezone = timezone;
         }
         if (type === "healthchecks") {
           if (uuid !== undefined) cleanedService.widget.uuid = uuid;
diff --git a/src/widgets/calendar/agenda.jsx b/src/widgets/calendar/agenda.jsx
index 9313cb8e..6a3be031 100644
--- a/src/widgets/calendar/agenda.jsx
+++ b/src/widgets/calendar/agenda.jsx
@@ -2,7 +2,7 @@ import { DateTime } from "luxon";
 import classNames from "classnames";
 import { useTranslation } from "next-i18next";
 
-import Event, { compareDateTimezoneAware } from "./event";
+import Event, { compareDateTimezone } from "./event";
 
 export default function Agenda({ service, colorVariants, events, showDate }) {
   const { widget } = service;
@@ -15,10 +15,8 @@ export default function Agenda({ service, colorVariants, events, showDate }) {
   const eventsArray = Object.keys(events)
     .filter(
       (eventKey) =>
-        showDate
-          .setZone(events[eventKey].date.zoneName)
-          .minus({ days: widget?.previousDays ?? 0 })
-          .startOf("day").ts <= events[eventKey].date?.startOf("day").ts,
+        showDate.minus({ days: widget?.previousDays ?? 0 }).startOf("day").ts <=
+        events[eventKey].date?.startOf("day").ts,
     )
     .map((eventKey) => events[eventKey])
     .sort((a, b) => a.date - b.date)
@@ -58,7 +56,7 @@ export default function Agenda({ service, colorVariants, events, showDate }) {
                 event={event}
                 colorVariants={colorVariants}
                 showDate={j === 0}
-                showTime={widget?.showTime && compareDateTimezoneAware(showDate, event)}
+                showTime={widget?.showTime && compareDateTimezone(showDate, event)}
               />
             ))}
           </div>
diff --git a/src/widgets/calendar/component.jsx b/src/widgets/calendar/component.jsx
index 0e10d0ed..ff93c41b 100644
--- a/src/widgets/calendar/component.jsx
+++ b/src/widgets/calendar/component.jsx
@@ -41,7 +41,8 @@ export default function Component({ service }) {
   const { i18n } = useTranslation();
   const [showDate, setShowDate] = useState(null);
   const [events, setEvents] = useState({});
-  const currentDate = DateTime.now().setLocale(i18n.language).startOf("day");
+  const nowDate = DateTime.now().setLocale(i18n.language);
+  const currentDate = widget?.timezone ? nowDate.setZone(widget?.timezone).startOf("day") : nowDate;
   const { settings } = useContext(SettingsContext);
 
   useEffect(() => {
@@ -93,6 +94,7 @@ export default function Component({ service }) {
                 params={params}
                 setEvents={setEvents}
                 hideErrors={settings.hideErrors}
+                timezone={widget?.timezone}
                 className="fixed bottom-0 left-0 bg-red-500 w-screen h-12"
               />
             );
@@ -106,6 +108,7 @@ export default function Component({ service }) {
             events={events}
             showDate={showDate}
             setShowDate={setShowDate}
+            currentDate={currentDate}
             className="flex"
           />
         )}
diff --git a/src/widgets/calendar/event.jsx b/src/widgets/calendar/event.jsx
index 7d348285..13e736a3 100644
--- a/src/widgets/calendar/event.jsx
+++ b/src/widgets/calendar/event.jsx
@@ -39,7 +39,4 @@ export default function Event({ event, colorVariants, showDate = false, showTime
     </div>
   );
 }
-
-export function compareDateTimezoneAware(date, event) {
-  return date.setZone(event.date.zoneName).startOf("day").valueOf() === event.date.startOf("day").valueOf();
-}
+export const compareDateTimezone = (date, event) => date.startOf("day").ts === event.date.startOf("day").ts;
diff --git a/src/widgets/calendar/integrations/ical.jsx b/src/widgets/calendar/integrations/ical.jsx
index 4c4ec9ca..ab3d06f2 100644
--- a/src/widgets/calendar/integrations/ical.jsx
+++ b/src/widgets/calendar/integrations/ical.jsx
@@ -7,7 +7,7 @@ import { RRule } from "rrule";
 import useWidgetAPI from "../../../utils/proxy/use-widget-api";
 import Error from "../../../components/services/widget/error";
 
-export default function Integration({ config, params, setEvents, hideErrors }) {
+export default function Integration({ config, params, setEvents, hideErrors, timezone }) {
   const { t } = useTranslation();
   const { data: icalData, error: icalError } = useWidgetAPI(config, config.name, {
     refreshInterval: 300000, // 5 minutes
@@ -23,9 +23,8 @@ export default function Integration({ config, params, setEvents, hideErrors }) {
       }
     }
 
-    const zone = config?.timezone || null;
-    const startDate = DateTime.fromISO(params.start, { zone });
-    const endDate = DateTime.fromISO(params.end, { zone });
+    const startDate = DateTime.fromISO(params.start);
+    const endDate = DateTime.fromISO(params.end);
 
     if (icalError || !parsedIcal || !startDate.isValid || !endDate.isValid) {
       return;
@@ -33,6 +32,7 @@ export default function Integration({ config, params, setEvents, hideErrors }) {
 
     const eventsToAdd = {};
     const events = parsedIcal?.getEventsBetweenDates(startDate.toJSDate(), endDate.toJSDate());
+    const now = timezone ? DateTime.now().setZone(timezone) : DateTime.now();
 
     events?.forEach((event) => {
       let title = `${event?.summary?.value}`;
@@ -44,8 +44,7 @@ export default function Integration({ config, params, setEvents, hideErrors }) {
         const duration = event.dtend.value - event.dtstart.value;
         const days = duration / (1000 * 60 * 60 * 24);
 
-        const now = DateTime.now().setZone(zone);
-        const eventDate = DateTime.fromJSDate(date, { zone });
+        const eventDate = timezone ? DateTime.fromJSDate(date, { zone: timezone }) : DateTime.fromJSDate(date);
 
         for (let j = 0; j < days; j += 1) {
           eventsToAdd[`${event?.uid?.value}${i}${j}${type}`] = {
@@ -61,18 +60,23 @@ export default function Integration({ config, params, setEvents, hideErrors }) {
 
       const recurrenceOptions = event?.recurrenceRule?.origOptions;
       if (recurrenceOptions && Object.keys(recurrenceOptions).length !== 0) {
-        const rule = new RRule(recurrenceOptions);
-        const recurringEvents = rule.between(startDate.toJSDate(), endDate.toJSDate());
+        try {
+          const rule = new RRule(recurrenceOptions);
+          const recurringEvents = rule.between(startDate.toJSDate(), endDate.toJSDate());
 
-        recurringEvents.forEach((date, i) => eventToAdd(date, i, "recurring"));
-        return;
+          recurringEvents.forEach((date, i) => eventToAdd(date, i, "recurring"));
+          return;
+        } catch (e) {
+          // eslint-disable-next-line no-console
+          console.error("Unable to parse recurring events from iCal: %s", e);
+        }
       }
 
       event.matchingDates.forEach((date, i) => eventToAdd(date, i, "single"));
     });
 
     setEvents((prevEvents) => ({ ...prevEvents, ...eventsToAdd }));
-  }, [icalData, icalError, config, params, setEvents, t]);
+  }, [icalData, icalError, config, params, setEvents, timezone, t]);
 
   const error = icalError ?? icalData?.error;
   return error && !hideErrors && <Error error={{ message: `${config.type}: ${error.message ?? error}` }} />;
diff --git a/src/widgets/calendar/monthly.jsx b/src/widgets/calendar/monthly.jsx
index ddb9cd87..43694354 100644
--- a/src/widgets/calendar/monthly.jsx
+++ b/src/widgets/calendar/monthly.jsx
@@ -3,16 +3,14 @@ import { DateTime, Info } from "luxon";
 import classNames from "classnames";
 import { useTranslation } from "next-i18next";
 
-import Event, { compareDateTimezoneAware } from "./event";
+import Event, { compareDateTimezone } from "./event";
 
 const cellStyle = "relative w-10 flex items-center justify-center flex-col";
 const monthButton = "pl-6 pr-6 ml-2 mr-2 hover:bg-theme-100/20 dark:hover:bg-white/5 rounded-md cursor-pointer";
 
-export function Day({ weekNumber, weekday, events, colorVariants, showDate, setShowDate }) {
-  const currentDate = DateTime.now();
-
+export function Day({ weekNumber, weekday, events, colorVariants, showDate, setShowDate, currentDate }) {
   const cellDate = showDate.set({ weekday, weekNumber }).startOf("day");
-  const filteredEvents = events?.filter((event) => compareDateTimezoneAware(cellDate, event));
+  const filteredEvents = events?.filter((event) => compareDateTimezone(cellDate, event));
 
   const dayStyles = (displayDate) => {
     let style = "h-9 ";
@@ -77,10 +75,9 @@ const dayInWeekId = {
   sunday: 7,
 };
 
-export default function Monthly({ service, colorVariants, events, showDate, setShowDate }) {
+export default function Monthly({ service, colorVariants, events, showDate, setShowDate, currentDate }) {
   const { widget } = service;
   const { i18n } = useTranslation();
-  const currentDate = DateTime.now().setLocale(i18n.language).startOf("day");
 
   const dayNames = Info.weekdays("short", { locale: i18n.language });
 
@@ -164,6 +161,7 @@ export default function Monthly({ service, colorVariants, events, showDate, setS
                 colorVariants={colorVariants}
                 showDate={showDate}
                 setShowDate={setShowDate}
+                currentDate={currentDate}
               />
             )),
           )}
@@ -171,7 +169,7 @@ export default function Monthly({ service, colorVariants, events, showDate, setS
 
         <div className="flex flex-col">
           {eventsArray
-            ?.filter((event) => compareDateTimezoneAware(showDate, event))
+            ?.filter((event) => compareDateTimezone(showDate, event))
             .slice(0, widget?.maxEvents ?? 10)
             .map((event) => (
               <Event
@@ -179,7 +177,7 @@ export default function Monthly({ service, colorVariants, events, showDate, setS
                 event={event}
                 colorVariants={colorVariants}
                 showDateColumn={widget?.showTime ?? false}
-                showTime={widget?.showTime && compareDateTimezoneAware(showDate, event)}
+                showTime={widget?.showTime && compareDateTimezone(showDate, event)}
               />
             ))}
         </div>
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 14a09cec..9b72c33d 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -59,6 +59,7 @@ const components = {
   moonraker: dynamic(() => import("./moonraker/component")),
   mylar: dynamic(() => import("./mylar/component")),
   navidrome: dynamic(() => import("./navidrome/component")),
+  netdata: dynamic(() => import("./netdata/component")),
   nextcloud: dynamic(() => import("./nextcloud/component")),
   nextdns: dynamic(() => import("./nextdns/component")),
   nextpvr: dynamic(() => import("./nextpvr/component")),
diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx
index fcf6e82f..7e6ad4d7 100644
--- a/src/widgets/customapi/component.jsx
+++ b/src/widgets/customapi/component.jsx
@@ -70,7 +70,20 @@ function formatValue(t, mapping, rawValue) {
       value = t("common.bitrate", { value });
       break;
     case "date":
-      value = t("common.date", { value, dateStyle: mapping?.dateStyle ?? "long", timeStyle: mapping?.timeStyle });
+      value = t("common.date", {
+        value,
+        lng: mapping?.locale,
+        dateStyle: mapping?.dateStyle ?? "long",
+        timeStyle: mapping?.timeStyle,
+      });
+      break;
+    case "relativeDate":
+      value = t("common.relativeDate", {
+        value,
+        lng: mapping?.locale,
+        style: mapping?.style,
+        numeric: mapping?.numeric,
+      });
       break;
     case "text":
     default:
diff --git a/src/widgets/netdata/component.jsx b/src/widgets/netdata/component.jsx
new file mode 100644
index 00000000..9d7f2469
--- /dev/null
+++ b/src/widgets/netdata/component.jsx
@@ -0,0 +1,33 @@
+import { useTranslation } from "next-i18next";
+
+import Container from "components/services/widget/container";
+import Block from "components/services/widget/block";
+import useWidgetAPI from "utils/proxy/use-widget-api";
+
+export default function Component({ service }) {
+  const { t } = useTranslation();
+
+  const { widget } = service;
+
+  const { data: netdataData, error: netdataError } = useWidgetAPI(widget, "info");
+
+  if (netdataError) {
+    return <Container service={service} error={netdataError} />;
+  }
+
+  if (!netdataData) {
+    return (
+      <Container service={service}>
+        <Block label="netdata.warnings" />
+        <Block label="netdata.criticals" />
+      </Container>
+    );
+  }
+
+  return (
+    <Container service={service}>
+      <Block label="netdata.warnings" value={t("common.number", { value: netdataData.alarms.warning })} />
+      <Block label="netdata.criticals" value={t("common.number", { value: netdataData.alarms.critical })} />
+    </Container>
+  );
+}
diff --git a/src/widgets/netdata/widget.js b/src/widgets/netdata/widget.js
new file mode 100644
index 00000000..9c7b2457
--- /dev/null
+++ b/src/widgets/netdata/widget.js
@@ -0,0 +1,14 @@
+import genericProxyHandler from "utils/proxy/handlers/generic";
+
+const widget = {
+  api: "{url}/api/v1/{endpoint}",
+  proxyHandler: genericProxyHandler,
+
+  mappings: {
+    info: {
+      endpoint: "info",
+    },
+  },
+};
+
+export default widget;
diff --git a/src/widgets/romm/component.jsx b/src/widgets/romm/component.jsx
index 518b2e14..37c00c2d 100644
--- a/src/widgets/romm/component.jsx
+++ b/src/widgets/romm/component.jsx
@@ -3,30 +3,30 @@ import Block from "components/services/widget/block";
 import useWidgetAPI from "utils/proxy/use-widget-api";
 
 export default function Component({ service }) {
-  const { widget } = service;
+    const { widget } = service;
 
-  const { data: response, error: responseError } = useWidgetAPI(widget, "statistics");
+    const { data: response, error: responseError } = useWidgetAPI(widget, "statistics");
 
-  if (responseError) {
-    return (
-      <Container service={service}>
-        <Block label="Error" value={responseError.message} />
-      </Container>
-    );
-  }
+    if (responseError) {
+        return (
+            <Container service={service}>
+                <Block label="Error" value={responseError.message} />
+            </Container>
+        );
+    }
 
-  if (responseError) {
-    return <Container service={service} error={responseError} />;
-  }
+    if (responseError) {
+        return <Container service={service} error={responseError} />;
+    }
 
-  if (response) {
-    const platforms = response.filter(x => x.rom_count!==0).length
-    const totalRoms = response.reduce((total, stat) => total + stat.rom_count, 0);
-    return (
-        <Container service={service}>
-          <Block label="romm.platforms" value={platforms} />
-          <Block label="romm.totalRoms" value={totalRoms} />
-        </Container>
-    );
-  }
-}
\ No newline at end of file
+    if (response) {
+        const platforms = response.filter((x) => x.rom_count !== 0).length;
+        const totalRoms = response.reduce((total, stat) => total + stat.rom_count, 0);
+        return (
+            <Container service={service}>
+                <Block label="romm.platforms" value={platforms} />
+                <Block label="romm.totalRoms" value={totalRoms} />
+            </Container>
+        );
+    }
+}
diff --git a/src/widgets/romm/widget.js b/src/widgets/romm/widget.js
index ee80f9bc..a7bb60fd 100644
--- a/src/widgets/romm/widget.js
+++ b/src/widgets/romm/widget.js
@@ -7,8 +7,8 @@ const widget = {
   mappings: {
     statistics: {
       endpoint: "platforms",
-    }
+    },
   },
 };
 
-export default widget;
\ No newline at end of file
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index f4091f63..1d728947 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -50,6 +50,7 @@ import mjpeg from "./mjpeg/widget";
 import moonraker from "./moonraker/widget";
 import mylar from "./mylar/widget";
 import navidrome from "./navidrome/widget";
+import netdata from "./netdata/widget";
 import nextcloud from "./nextcloud/widget";
 import nextdns from "./nextdns/widget";
 import nextpvr from "./nextpvr/widget";
@@ -105,6 +106,7 @@ import wgeasy from "./wgeasy/widget";
 import xteve from "./xteve/widget";
 import jdrssdownloader from "./jdrssdownloader/widget";
 import urbackup from "./urbackup/widget";
+import romm from "./romm/widget";
 
 const widgets = {
   adguard,
@@ -161,6 +163,7 @@ const widgets = {
   moonraker,
   mylar,
   navidrome,
+  netdata,
   nextcloud,
   nextdns,
   nextpvr,