Hallo,
Das ist tatsächlich ein unkomplizierter Vorgang.
Schritt-für-Schritt: Shamsi-Daten im Discourse-Frontend aktivieren
1) Eine Theme-Komponente erstellen
- Gehen Sie zu Admin → Anpassen → Themes
- Klicken Sie auf Komponenten
- Klicken Sie auf Hinzufügen → Neu erstellen
- Benennen Sie sie: Shamsi-Datums-Konverter (Oder was auch immer Sie möchten)
2) Das Skript hinzufügen (Kopfbereich)
Innerhalb der Komponente:
- Öffnen Sie Allgemein → Kopf
- Fügen Sie alles unten ein
- 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)
- Findet diese
<td>-Elemente - Liest das tatsächliche gregorianische Datum aus
datetime - Wandelt es in Shamsi um
- Ersetzt nur den sichtbaren Text
- 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
