Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
63 lines
4.9 KiB
TypeScript
63 lines
4.9 KiB
TypeScript
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
|