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
-
Ve a Admin → Personalizar → Temas
-
Haz clic en Componentes
-
Haz clic en Añadir → Crear nuevo
-
Nómbralo: Convertidor de Fecha Shamsi (O lo que quieras)
2) Añadir el script (Sección Head)
Dentro del componente:
-
Abre Común → Head
-
Pega todo lo de abajo
-
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)
-
Encuentra esos elementos
<time> -
Lee la fecha gregoriana real de
datetime -
La convierte a Shamsi
-
Reemplaza solo el texto visible
-
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!
