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

Ciao,

Questo è in realtà un processo semplice.


Passo dopo passo: abilitare le date Shamsi sul frontend di Discourse

1) Creare un Componente Tema

  1. Vai su Admin → Customize → Themes (Amministrazione → Personalizza → Temi)

  2. Clicca su Components (Componenti)

  3. Clicca su Add → Create new (Aggiungi → Crea nuovo)

  4. Assegna un nome: Shamsi Date Converter (O quello che preferisci)


2) Aggiungere lo script (Sezione Head)

All’interno del componente:

  1. Apri Common → Head (Comune → Head)

  2. Incolla tutto ciò che segue

  3. Salva

Codice:

<script>
(function () {
  // Applica solo quando la lingua del sito è Persiano
  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;

    // epoch (secondi o 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);
  }

  // caricamento iniziale
  run();

  // gestisce lo scorrimento infinito / aggiornamenti in tempo reale
  new MutationObserver(muts => {
    muts.forEach(m => m.addedNodes.forEach(n => {
      if (n.nodeType === 1) run(n);
    }));
  }).observe(document.documentElement, { childList: true, subtree: true });
})();
</script>
___

In alternativa, puoi caricare ciò che ho esportato e assegnarlo ai tuoi temi.

discourse-shamsi-date.zip (1.1 KB)


Come funziona

Discourse invia già date Gregoriane normali al tuo browser; questo script non modifica i dati, ma sostituisce solo il modo in cui il testo della data viene visualizzato sulla pagina, convertendolo in Shamsi (Jalali) utilizzando il browser stesso.

Cosa fa lo script (a grandi linee)

  1. Trova quegli elementi time

  2. Legge la data Gregoriana reale da datetime

  3. La converte in Shamsi

  4. Sostituisce solo il testo visibile

  5. Ripete questa operazione ogni volta che vengono caricati nuovi post

Tutto qui. Nient’altro.


Questo ti darà date come questa:

Puoi vederlo online sulla nostra istanza: https://forums.7ho.st

Buona fortuna

1 Mi Piace