Bonjour,
C’est en fait un processus simple.
Étape par étape : activer les dates Shamsi sur l’interface Discourse
1) Créer un composant de thème
-
Allez dans Admin → Personnaliser → Thèmes
-
Cliquez sur Composants
-
Cliquez sur Ajouter → Créer nouveau
-
Nommez-le : Convertisseur de date Shamsi (Ou ce que vous voulez)
2) Ajouter le script (section Tête)
À l’intérieur du composant :
-
Ouvrez Commun → Tête
-
Collez tout ce qui suit
-
Enregistrez
Code :
<script>
(function () {
// Appliquer uniquement lorsque la langue du site est le persan
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 (secondes ou 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);
}
// chargement initial
run();
// gérer le défilement infini / les mises à jour en direct
new MutationObserver(muts => {
muts.forEach(m => m.addedNodes.forEach(n => {
if (n.nodeType === 1) run(n);
}));
}).observe(document.documentElement, { childList: true, subtree: true });
})();
</script>
___
Alternativement, vous pouvez télécharger ce que j’ai exporté et l’attribuer à vos thèmes.
discourse-shamsi-date.zip (1.1 KB)
Comment ça marche
Discourse envoie déjà des dates grégoriennes normales à votre navigateur ; ce script ne modifie pas les données, il remplace seulement la façon dont le texte de la date est affiché sur la page, en le convertissant en Shamsi (Jalali) en utilisant le navigateur lui-même.
Ce que fait le script (vue d’ensemble)
-
Trouve ces éléments
<time> -
Lit la vraie date grégorienne à partir de
datetime -
La convertit en Shamsi
-
Remplace uniquement le texte visible
-
Répète cette opération chaque fois que de nouveaux messages sont chargés
C’est tout. Rien de plus.
Cela vous donnera des dates comme celles-ci :
Vous pouvez le voir en ligne sur notre instance : https://forums.7ho.st
Bonne chance
