Converter to change gregorian date to jalali on view layer of discourse

Hallo,

Das ist tatsächlich ein unkomplizierter Vorgang.


Schritt-für-Schritt: Shamsi-Daten im Discourse-Frontend aktivieren

1) Eine Theme-Komponente erstellen

  1. Gehen Sie zu Admin → Anpassen → Themes
  2. Klicken Sie auf Komponenten
  3. Klicken Sie auf Hinzufügen → Neu erstellen
  4. Benennen Sie sie: Shamsi-Datums-Konverter (Oder was auch immer Sie möchten)

2) Das Skript hinzufügen (Kopfbereich)

Innerhalb der Komponente:

  1. Öffnen Sie Allgemein → Kopf
  2. Fügen Sie alles unten ein
  3. Speichern

Code:

<script>
(function () {
  // Nur anwenden, wenn die Seitensprache Persisch ist
  if (!document.documentElement.lang.startsWith("fa")) return;

  const formatter = new Intl.DateTimeFormat(
    "fa-IR-u-ca-persian",
    { dateStyle: "medium" }
  );

  function toDate(value) {
    if (!value) return null;

    // Epoche (Sekunden oder ms)
    if (/^\d{10,13}$/.test(value)) {
      const n = Number(value);
      return new Date(value.length === 10 ? n * 1000 : n);
    }

    const d = new Date(value);
    return isNaN(d) ? null : d;
  }

  function process(el) {
    if (el.dataset.shamsi === "1") return;

    const date =
      toDate(el.getAttribute("datetime")) ||
      toDate(el.dataset.time) ||
      toDate(el.getAttribute("title"));

    if (!date) return;

    el.textContent = formatter.format(date);
    el.dataset.shamsi = "1";
  }

  function run(root = document) {
    root.querySelectorAll("time, .relative-date").forEach(process);
  }

  // Erstes Laden
  run();

  // Unendliches Scrollen / Live-Updates behandeln
  new MutationObserver(muts => {
    muts.forEach(m => m.addedNodes.forEach(n => {
      if (n.nodeType === 1) run(n);
    }));
  }).observe(document.documentElement, { childList: true, subtree: true });
})();
</script>
___

Alternativ können Sie das, was ich exportiert habe, hochladen und es Ihren Themes zuweisen.

discourse-shamsi-date.zip (1.1 KB)


Funktionsweise

Discourse sendet bereits normale gregorianische Daten an Ihren Browser; dieses Skript ändert die Daten nicht, sondern ersetzt nur, wie der Datumstext auf der Seite angezeigt wird, indem es ihn mithilfe des Browsers selbst in Shamsi (Jalali) umwandelt.

Was das Skript tut (auf hoher Ebene)

  1. Findet diese <td>-Elemente
  2. Liest das tatsächliche gregorianische Datum aus datetime
  3. Wandelt es in Shamsi um
  4. Ersetzt nur den sichtbaren Text
  5. Wiederholt dies, wann immer neue Beiträge geladen werden

Das ist alles. Nichts weiter.


Dies führt zu Daten wie diesen:

Sie können es online auf unserer Instanz ansehen: https://forums.7ho.st

Viel Erfolg

1 „Gefällt mir“