admin/texts/errors.ts
alisaza e1eaf5eff5 feat: initial ghabilee-admin backoffice app
Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js
app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
2026-09-05 13:12:59 +03:30

63 lines
4.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const sessionInvalid = 'نشست شما معتبر نیست. لطفاً دوباره وارد شوید.'
const sessionExpired = 'نشست شما منقضی شده است. لطفاً دوباره وارد شوید.'
/** Product API error codes → Persian user-facing messages. */
export const errorCodes = {
UNAUTHORIZED: 'برای ادامه باید وارد حساب کاربری شوید.',
ACCESS_TOKEN_INVALID: sessionInvalid,
ACCESS_TOKEN_EXPIRED: sessionExpired,
REFRESH_TOKEN_INVALID: sessionInvalid,
REFRESH_TOKEN_EXPIRED: sessionExpired,
FORBIDDEN: 'شما اجازه انجام این عملیات را ندارید.',
ACCOUNT_SUSPENDED: 'حساب کاربری شما معلق شده است و امکان انجام این عملیات را ندارید. برای پیگیری با پشتیبانی تماس بگیرید.',
NOT_FOUND: 'مورد درخواستی پیدا نشد.',
EVENT_FULL: 'ظرفیت این رویداد تکمیل شده است.',
EVENT_NOT_EDITABLE: 'این رویداد دیگر قابل ویرایش نیست.',
EVENT_FIELD_LOCKED: 'این بخش از اطلاعات رویداد دیگر قابل ویرایش نیست.',
PRICE_LOCKED: 'قیمت رویداد پس از انتشار قابل تغییر نیست.',
HOST_EVENT_LIMIT_REACHED: 'در پلن رایگان حداکثر ۱۰ ایونت می‌توانید بسازید. برای ساخت ایونت‌های بیشتر با پشتیبانی در ارتباط باشید.',
ACTIVE_BOOKING_EXISTS: 'برای این رویداد رزرو فعال دارید.',
ALREADY_BOOKED: 'این رویداد قبلاً رزرو شده است.',
MESSAGING_BLOCKED: 'ارسال پیام بین این کاربران امکان‌پذیر نیست.',
CHAT_CLOSED: 'این چت بسته شده و امکان ارسال پیام جدید وجود ندارد.',
NOT_PARTICIPANT: 'شما عضو این گفت‌وگو نیستید.',
SELF_ACTION_FORBIDDEN: 'این عملیات روی حساب خودتان مجاز نیست.',
IDENTITY_REQUIRED: 'برای میزبانی رویداد باید هویت شما تأیید شده باشد.',
EVENT_NOT_BOOKABLE: 'این رویداد در حال حاضر قابل رزرو نیست.',
CAPACITY_BELOW_BOOKED: 'ظرفیت نمی‌تواند از رزروهای فعال و ظرفیت رزروشده کمتر باشد.',
RESERVED_CAPACITY_EXCEEDS_REMAINING: 'ظرفیت رزرو شده بیشتر از صندلی‌های خالی است. صندلی‌های در حال پرداخت هم اشغال‌شده حساب می‌شوند.',
WAITLIST_NOT_AVAILABLE: 'لیست انتظار برای این رویداد در دسترس نیست.',
OTP_INVALID: 'کد وارد شده نامعتبر است.',
OTP_EXPIRED: 'کد تأیید منقضی شده است.',
CAPTCHA_INVALID: 'تأیید کپچا ناموفق بود. لطفاً دوباره تلاش کنید.',
SERVICE_UNAVAILABLE: 'این سرویس فعلاً در دسترس نیست. لطفاً کمی بعد دوباره تلاش کنید.',
REVIEW_WINDOW_EXPIRED: 'مهلت ثبت نظر تمام شده',
HOST_REPLY_WINDOW_EXPIRED: 'مهلت پاسخ میزبان به نظر تمام شده است.',
} as const
/** HTTP status → Persian fallback messages. */
export const httpStatus = {
400: 'اطلاعات ارسال‌شده معتبر نیست.',
401: 'برای ادامه باید وارد حساب کاربری شوید.',
403: 'شما اجازه انجام این عملیات را ندارید.',
404: 'مورد درخواستی پیدا نشد.',
405: 'این عملیات پشتیبانی نمی‌شود.',
408: 'زمان پاسخ‌گویی سرور به پایان رسید. لطفاً دوباره تلاش کنید.',
409: 'اطلاعات با وضعیت فعلی سازگار نیست.',
413: 'حجم اطلاعات ارسال‌شده بیش از حد مجاز است.',
415: 'نوع اطلاعات ارسال‌شده پشتیبانی نمی‌شود.',
422: 'اطلاعات واردشده معتبر نیست.',
429: 'تعداد درخواست‌ها بیش از حد مجاز است. کمی بعد دوباره تلاش کنید.',
500: 'خطایی در سرور رخ داد. لطفاً دوباره تلاش کنید.',
502: 'سرور موقتاً در دسترس نیست. لطفاً دوباره تلاش کنید.',
503: 'سرویس موقتاً در دسترس نیست. لطفاً کمی بعد دوباره تلاش کنید.',
504: 'زمان پاسخ‌گویی سرور به پایان رسید. لطفاً دوباره تلاش کنید.',
} as const
export const errors = {
codes: errorCodes,
httpStatus,
defaultApi: 'خطایی در انجام درخواست پیش آمد.',
networkError: 'اتصال به سرور برقرار نشد یا قطع شد. لطفاً اتصال اینترنت و دسترسی به سرور را بررسی کنید.',
} as const