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

Hola,

Ese es en realidad un proceso sencillo.


Paso a paso: habilitar fechas Shamsi en el frontend de Discourse

1) Crear un Componente de Tema

  1. Ve a Admin → Personalizar → Temas

  2. Haz clic en Componentes

  3. Haz clic en Añadir → Crear nuevo

  4. Nómbralo: Convertidor de Fecha Shamsi (O lo que quieras)


2) Añadir el script (Sección Head)

Dentro del componente:

  1. Abre Común → Head

  2. Pega todo lo de abajo

  3. Guarda

Código:

<script>
(function () {
  // Aplicar solo cuando el idioma del sitio es persa
  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;

    // época (segundos 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);
  }

  // carga inicial
  run();

  // manejar desplazamiento infinito / actualizaciones en vivo
  new MutationObserver(muts => {
    muts.forEach(m => m.addedNodes.forEach(n => {
      if (n.nodeType === 1) run(n);
    }));
  }).observe(document.documentElement, { childList: true, subtree: true });
})();
</script>
___

Alternativamente, puedes subir lo que exporté y asignarlo a tus temas.

discourse-shamsi-date.zip (1.1 KB)


Cómo funciona

Discourse ya envía fechas gregorianas normales a tu navegador; este script no cambia los datos, solo reemplaza cómo se muestra el texto de la fecha en la página, convirtiéndolo a Shamsi (Jalali) usando el propio navegador.

Lo que hace el script (visión general)

  1. Encuentra esos elementos <time>

  2. Lee la fecha gregoriana real de datetime

  3. La convierte a Shamsi

  4. Reemplaza solo el texto visible

  5. Repite esto cada vez que se cargan nuevas publicaciones

Eso es todo. Nada más.


Esto te dará fechas como esta:

Puedes verlo en línea en nuestra instancia: https://forums.7ho.st

¡Buena suerte!

1 me gusta