feat: add news section with admin editor and public article view

- NewsSection with animated grid background, category filters, featured cards
- AdminNews list page with toggle publish/featured, pagination
- AdminNewsCreate with TipTap rich text editor, URL validation
- NewsArticle detail page with DOMPurify sanitization, Telegram back button
- Toggle component with WCAG 44px touch targets, role=switch
- Prose styles for highlight marks and responsive iframes
- i18n translations (en, ru, zh, fa)
This commit is contained in:
Fringg
2026-03-23 10:49:46 +03:00
parent 5b12784ab8
commit 99fc33625e
17 changed files with 7750 additions and 70 deletions

View File

@@ -3921,5 +3921,59 @@
"warning": {
"telegram_unresolvable": "نام کاربری تلگرام قابل تأیید نبود. ممکن است گیرنده اعلان هدیه را دریافت نکند."
}
},
"news": {
"title": "اخبار و به‌روزرسانی‌ها",
"filterAll": "همه",
"readMore": "ادامه مطلب",
"readTime": "دقیقه مطالعه",
"loadMore": "بارگذاری بیشتر",
"noNews": "هنوز خبری نیست",
"backToHome": "بازگشت",
"views": "بازدید",
"admin": {
"title": "مدیریت اخبار",
"create": "ایجاد مقاله",
"edit": "ویرایش",
"delete": "حذف",
"confirmDelete": "این مقاله حذف شود؟",
"published": "منتشر شده",
"draft": "پیش‌نویس",
"featured": "ویژه",
"titleLabel": "عنوان",
"slugLabel": "شناسه URL",
"categoryLabel": "دسته‌بندی",
"categoryColorLabel": "رنگ دسته‌بندی",
"tagLabel": "برچسب",
"excerptLabel": "توضیح کوتاه",
"contentLabel": "محتوا",
"imageLabel": "تصویر ویژه",
"readTimeLabel": "زمان مطالعه (دقیقه)",
"save": "ذخیره",
"saving": "در حال ذخیره...",
"saveError": "ذخیره مقاله ناموفق بود. لطفاً دوباره تلاش کنید.",
"saved": "مقاله ذخیره شد",
"deleted": "مقاله حذف شد",
"toolbar": {
"bold": "پررنگ",
"italic": "کج",
"underline": "زیرخط",
"strikethrough": "خط‌خورده",
"heading1": "عنوان ۱",
"heading2": "عنوان ۲",
"heading3": "عنوان ۳",
"bulletList": "لیست نقطه‌ای",
"orderedList": "لیست شماره‌دار",
"blockquote": "نقل قول",
"codeBlock": "بلوک کد",
"alignLeft": "چپ‌چین",
"alignCenter": "وسط‌چین",
"highlight": "برجسته",
"link": "پیوند",
"image": "تصویر",
"imageUrlPrompt": "آدرس تصویر:",
"linkUrlPrompt": "آدرس پیوند:"
}
}
}
}