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

مرحباً،

هذه في الواقع عملية مباشرة.


خطوة بخطوة: تفعيل تواريخ شمسي على واجهة ديسكورس (Discourse frontend)

1) إنشاء مكون سمة (Theme Component)

  1. اذهب إلى المسؤول (Admin) ← تخصيص (Customize) ← السمات (Themes)

  2. انقر على المكونات (Components)

  3. انقر على إضافة (Add) ← إنشاء جديد (Create new)

  4. سمِّه: محول تاريخ شمسي (Shamsi Date Converter) (أو أي شيء تريده)


2) إضافة النص البرمجي (قسم الرأس - Head section)

داخل المكون:

  1. افتح مشترك (Common) ← رأس (Head)

  2. الصق كل ما يلي أدناه

  3. احفظ

الكود:

<script>
(function () {
  // تطبيق فقط عندما تكون لغة الموقع فارسية
  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;

    // الحقبة (بالثواني أو المللي ثانية)
    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);
  }

  // التحميل الأولي
  run();

  // التعامل مع التمرير اللانهائي / التحديثات المباشرة
  new MutationObserver(muts => {
    muts.forEach(m => m.addedNodes.forEach(n => {
      if (n.nodeType === 1) run(n);
    }));
  }).observe(document.documentElement, { childList: true, subtree: true });
})();
</script>
___

بدلاً من ذلك، يمكنك تحميل ما قمت بتصديره وتعيينه للسمات الخاصة بك.

discourse-shamsi-date.zip (1.1 KB)


كيف يعمل

ديسكورس يرسل بالفعل تواريخ ميلادية عادية إلى متصفحك؛ هذا النص البرمجي لا يغير البيانات، بل يستبدل فقط كيفية عرض نص التاريخ على الصفحة، محولاً إياه إلى شمسي (جلالي) باستخدام المتصفح نفسه.

ما يفعله النص البرمجي (نظرة عامة)

  1. يجد عناصر <time> تلك

  2. يقرأ تاريخ ميلادي حقيقي من datetime

  3. يحوله إلى شمسي

  4. يستبدل النص المرئي فقط

  5. يكرر هذا كلما تم تحميل مشاركات جديدة

هذا كل شيء. لا شيء آخر.


سيعطيك هذا تواريخ مثل هذه:

يمكنك رؤيته مباشرة على نسختنا: https://forums.7ho.st

حظاً موفقاً

إعجاب واحد (1)