Add customer and business user-product flows across dashboards.
Ship my-products / customer-products UI with gallery uploads, status controls, module gating, and related shared UI polish. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
c5bdaad16b
commit
1271d96539
@@ -28,6 +28,7 @@ const en = {
|
||||
'nav.store.cards': 'Shopping Cards',
|
||||
'nav.store.settings': 'Settings',
|
||||
'nav.customers': 'Customers',
|
||||
'nav.customerProducts': 'Customer products',
|
||||
'nav.settings': 'Settings',
|
||||
'nav.blog': 'Blog',
|
||||
'nav.blog.overview': 'Overview',
|
||||
@@ -241,6 +242,163 @@ const en = {
|
||||
'Are you sure you want to delete "{name}"? This action cannot be undone.',
|
||||
'products.list.addByAi': 'Add product by AI',
|
||||
'products.list.addNew': 'Add new product',
|
||||
|
||||
'customerProducts.title': 'Customer products',
|
||||
'customerProducts.subtitle': '{count} products submitted by customers.',
|
||||
'customerProducts.empty': 'No customer products yet.',
|
||||
'customerProducts.form.title': 'My Products',
|
||||
'customerProducts.form.empty': 'You have not added any products yet.',
|
||||
'customerProducts.form.add': 'Add product',
|
||||
'customerProducts.form.addTitle': 'Add product',
|
||||
'customerProducts.form.addSubtitle': 'Submit a new product for review.',
|
||||
'customerProducts.form.addComingSoon': 'The add form will be designed next.',
|
||||
'customerProducts.form.backToList': 'Back to my products',
|
||||
'customerProducts.form.editTitle': 'Edit product',
|
||||
'customerProducts.form.editSubtitle': 'Update your listing details, then save.',
|
||||
'customerProducts.form.detailsTitle': 'Product details',
|
||||
'customerProducts.form.detailsSubtitle': 'Review your submitted listing.',
|
||||
'customerProducts.form.edit': 'Edit product',
|
||||
'customerProducts.form.yes': 'Yes',
|
||||
'customerProducts.form.editSoon': 'Edit product will be available soon.',
|
||||
'customerProducts.form.remove': 'Remove product',
|
||||
'customerProducts.form.removeConfirm': 'Remove this product from your stock?',
|
||||
'customerProducts.form.removeSuccess': 'Product removed.',
|
||||
'customerProducts.form.promote': 'Promote product',
|
||||
'customerProducts.form.promoted': 'Promoted',
|
||||
'customerProducts.form.promoteSuccess': 'Product promoted.',
|
||||
'customerProducts.form.priceUnavailable': 'Price on request',
|
||||
'customerProducts.form.status.pending': 'Pending',
|
||||
'customerProducts.form.status.published': 'Approved',
|
||||
'customerProducts.form.status.archived': 'Archived',
|
||||
'customerProducts.form.stepperLabel': 'Add product steps',
|
||||
'customerProducts.form.step.basics': 'Basics',
|
||||
'customerProducts.form.step.basicsHint': 'Category, names, description, price, and location.',
|
||||
'customerProducts.form.step.basicsPlaceholder': 'Basic fields will go here.',
|
||||
'customerProducts.form.step.images': 'Images',
|
||||
'customerProducts.form.step.imagesHint': 'Add a cropped thumbnail and gallery photos.',
|
||||
'customerProducts.form.step.details': 'Details',
|
||||
'customerProducts.form.step.detailsHint': 'Description and technical information for the selected category.',
|
||||
'customerProducts.form.step.detailsPlaceholder': 'Details and technical fields will go here.',
|
||||
'customerProducts.form.step.technical': 'Technical data',
|
||||
'customerProducts.form.step.technicalHint':
|
||||
'Choose condition, add optional notes, then fill the category technical form.',
|
||||
'customerProducts.form.optional': '(optional)',
|
||||
'customerProducts.form.loading': 'Loading products…',
|
||||
'customerProducts.form.fields.category': 'Category',
|
||||
'customerProducts.form.fields.selectCategory': 'Select category',
|
||||
'customerProducts.form.fields.searchCategory': 'Search category…',
|
||||
'customerProducts.form.fields.clearCategory': 'Clear category',
|
||||
'customerProducts.form.fields.noCategories': 'No categories found',
|
||||
'customerProducts.form.fields.titleFa': 'Name (FA)',
|
||||
'customerProducts.form.fields.titleFaPlaceholder': 'Product name in Farsi',
|
||||
'customerProducts.form.fields.titleEn': 'Name (EN)',
|
||||
'customerProducts.form.fields.titleEnPlaceholder': 'Product name in English',
|
||||
'customerProducts.form.fields.description': 'Description',
|
||||
'customerProducts.form.fields.descriptionPlaceholder': 'Short description of your product',
|
||||
'customerProducts.form.fields.price': 'Desired price',
|
||||
'customerProducts.form.fields.priceSuggested': 'Your suggested price',
|
||||
'customerProducts.form.fields.priceByExpert': 'I want an expert to set the price',
|
||||
'customerProducts.form.fields.pricePlaceholder': 'e.g. 1,500,000',
|
||||
'customerProducts.form.fields.priceUnit': 'Unit',
|
||||
'customerProducts.form.fields.priceUnit.IRT': 'IRT',
|
||||
'customerProducts.form.fields.priceUnit.USD': 'Dollar',
|
||||
'customerProducts.form.fields.priceUnit.EUR': 'EURO',
|
||||
'customerProducts.form.fields.priceUnit.AED': 'AED',
|
||||
'customerProducts.form.fields.location': 'Location',
|
||||
'customerProducts.form.fields.country': 'Country',
|
||||
'customerProducts.form.fields.selectCountry': 'Select country',
|
||||
'customerProducts.form.fields.province': 'Province',
|
||||
'customerProducts.form.fields.selectProvince': 'Select province',
|
||||
'customerProducts.form.fields.city': 'City',
|
||||
'customerProducts.form.fields.selectCity': 'Select city',
|
||||
'customerProducts.form.fields.searchCity': 'Search city…',
|
||||
'customerProducts.form.fields.clearCity': 'Clear city',
|
||||
'customerProducts.form.fields.noCities': 'No cities found',
|
||||
'customerProducts.form.fields.deliveryNote': 'Pickup / delivery note',
|
||||
'customerProducts.form.fields.deliveryNotePlaceholder': 'e.g. pickup only, evening delivery…',
|
||||
'customerProducts.form.fields.district': 'District',
|
||||
'customerProducts.form.fields.selectDistrict': 'Select district',
|
||||
'customerProducts.form.fields.condition': 'Condition',
|
||||
'customerProducts.form.fields.technicalNotes': 'Technical notes',
|
||||
'customerProducts.form.fields.technicalNotesPlaceholder': 'Optional extra technical details…',
|
||||
'customerProducts.form.condition.new': 'New',
|
||||
'customerProducts.form.condition.stock': 'Stock',
|
||||
'customerProducts.form.condition.needs_repair': 'Needs repair',
|
||||
'customerProducts.form.condition.scrap': 'Scrap',
|
||||
'customerProducts.form.images.thumbnail': 'Thumbnail',
|
||||
'customerProducts.form.images.thumbnailUpload': 'Upload thumbnail',
|
||||
'customerProducts.form.images.thumbnailHint': '3:2 landscape works best',
|
||||
'customerProducts.form.images.thumbnailChange': 'Change thumbnail',
|
||||
'customerProducts.form.images.thumbnailRemove': 'Remove thumbnail',
|
||||
'customerProducts.form.images.zoom': 'Zoom',
|
||||
'customerProducts.form.images.applyCrop': 'Apply crop',
|
||||
'customerProducts.form.images.gallery': 'Gallery',
|
||||
'customerProducts.form.images.galleryAdd': 'Add photos',
|
||||
'customerProducts.form.images.galleryHint': 'You can select multiple images.',
|
||||
'customerProducts.form.images.galleryRemove': 'Remove image {index}',
|
||||
'customerProducts.form.technical.select': 'Select…',
|
||||
'customerProducts.form.technical.needCategory': 'Choose a category in step 1 to load technical fields.',
|
||||
'customerProducts.form.technical.empty': 'This category has no technical fields yet.',
|
||||
'customerProducts.form.technical.categoryForm': 'Category technical form',
|
||||
'customerProducts.form.technical.loading': 'Loading technical fields…',
|
||||
'customerProducts.form.cancel': 'Cancel',
|
||||
'customerProducts.form.next': 'Next',
|
||||
'customerProducts.form.back': 'Back',
|
||||
'customerProducts.form.submit': 'Submit',
|
||||
'customerProducts.form.save': 'Save changes',
|
||||
'customerProducts.form.submitting': 'Submitting…',
|
||||
'customerProducts.form.submitSuccess': 'Product submitted for review.',
|
||||
'customerProducts.form.updateSuccess': 'Product updated.',
|
||||
'customerProducts.form.error.load': 'Unable to load your products.',
|
||||
'customerProducts.form.error.loadDetail': 'Unable to load this product.',
|
||||
'customerProducts.form.error.loadLocations': 'Unable to load locations.',
|
||||
'customerProducts.form.error.loadCategories': 'Unable to load categories.',
|
||||
'customerProducts.form.error.loadTechnicalForm': 'Unable to load the category technical form.',
|
||||
'customerProducts.form.error.categoryRequired': 'Please select a category.',
|
||||
'customerProducts.form.error.titleFaRequired': 'Please enter the Farsi name.',
|
||||
'customerProducts.form.error.locationRequired': 'Please select country and city.',
|
||||
'customerProducts.form.error.priceInvalid': 'Please enter a valid price.',
|
||||
'customerProducts.form.error.conditionRequired': 'Please select a condition.',
|
||||
'customerProducts.form.error.technicalRequired': 'Please fill required technical fields.',
|
||||
'customerProducts.form.error.submit': 'Unable to submit the product.',
|
||||
'customerProducts.form.error.update': 'Unable to update the product.',
|
||||
'customerProducts.form.error.remove': 'Unable to remove the product.',
|
||||
'customerProducts.form.error.promote': 'Unable to promote the product.',
|
||||
|
||||
'customerProducts.add': 'Add product',
|
||||
'customerProducts.detailsTitle': 'Product details',
|
||||
'customerProducts.detailsSubtitle': 'Review a customer-submitted listing.',
|
||||
'customerProducts.backToList': 'Back to customer products',
|
||||
'customerProducts.owner': 'Customer',
|
||||
'customerProducts.location': 'Location',
|
||||
'customerProducts.promote': 'Promote product',
|
||||
'customerProducts.promoted': 'Promoted',
|
||||
'customerProducts.promoteSuccess': 'Product promoted.',
|
||||
'customerProducts.remove': 'Remove product',
|
||||
'customerProducts.removeConfirm': 'Delete this customer product?',
|
||||
'customerProducts.removeSuccess': 'Product deleted.',
|
||||
'customerProducts.statusChange': 'Change status',
|
||||
'customerProducts.statusModalTitle': 'Change product status',
|
||||
'customerProducts.statusModalSave': 'Update status',
|
||||
'customerProducts.statusModalHint': 'Choose how this listing should appear.',
|
||||
'customerProducts.status.pending': 'Pending',
|
||||
'customerProducts.status.published': 'Approved',
|
||||
'customerProducts.status.rejected': 'Rejected',
|
||||
'customerProducts.status.archived': 'Archived',
|
||||
'customerProducts.statusSuccess': 'Status updated.',
|
||||
'customerProducts.loading': 'Loading products…',
|
||||
'customerProducts.error.load': 'Unable to load customer products.',
|
||||
'customerProducts.error.loadDetail': 'Unable to load this product.',
|
||||
'customerProducts.error.remove': 'Unable to delete the product.',
|
||||
'customerProducts.error.promote': 'Unable to promote the product.',
|
||||
'customerProducts.error.status': 'Unable to update status.',
|
||||
'customerProducts.yes': 'Yes',
|
||||
'customerProducts.edit': 'Edit product',
|
||||
'customerProducts.approve': 'Approve product',
|
||||
'customerProducts.editSoon': 'Customer product editing comes next.',
|
||||
'customerProducts.toast.approved': 'Product approved.',
|
||||
'customerProducts.priceUnavailable': 'Price on request',
|
||||
|
||||
'products.card.edit': 'Edit product',
|
||||
'products.card.quickInfo': 'Quick info',
|
||||
'products.card.variations': 'Manage variations',
|
||||
@@ -301,6 +459,10 @@ const en = {
|
||||
'categories.addSub': 'Add Sub Category',
|
||||
'categories.edit': 'Edit Category',
|
||||
'categories.addByAi': 'Fill categories by AI',
|
||||
'categories.ai.title': 'Fill Categories with AI',
|
||||
'categories.ai.subtitle':
|
||||
'Edit the prompt below, then run it to generate and save a category tree.',
|
||||
'categories.ai.error': 'Unable to generate categories with AI.',
|
||||
'categories.deleteTitle': 'Delete Category',
|
||||
'categories.deleteMessage':
|
||||
'Are you sure you want to delete "{name}"? Subcategories will also be removed.',
|
||||
@@ -325,6 +487,31 @@ const en = {
|
||||
'categories.select.empty': 'No categories found',
|
||||
'categories.select.clear': 'Clear selection',
|
||||
|
||||
'categories.technical.title': 'Technical Data Form',
|
||||
'categories.technical.loading': 'Loading form...',
|
||||
'categories.technical.empty':
|
||||
'No fields yet. Add text, textarea, select, or multi-select inputs.',
|
||||
'categories.technical.fieldLabel': 'Field label',
|
||||
'categories.technical.inputType': 'Input type',
|
||||
'categories.technical.required': 'Required',
|
||||
'categories.technical.removeField': 'Remove field',
|
||||
'categories.technical.options': 'Options',
|
||||
'categories.technical.optionN': 'Option {n}',
|
||||
'categories.technical.removeOption': 'Remove option',
|
||||
'categories.technical.addOption': 'Add option',
|
||||
'categories.technical.addField': 'Add field',
|
||||
'categories.technical.generateAi': 'Generate with AI',
|
||||
'categories.technical.save': 'Save form',
|
||||
'categories.technical.saving': 'Saving…',
|
||||
'categories.technical.type.text': 'Text',
|
||||
'categories.technical.type.textarea': 'Textarea',
|
||||
'categories.technical.type.select': 'Select',
|
||||
'categories.technical.type.multi_select': 'Multi',
|
||||
'categories.technical.ai.title': 'Generate Technical Form with AI',
|
||||
'categories.technical.ai.subtitle':
|
||||
'Edit the prompt below, then run it to fill the form fields.',
|
||||
'categories.technical.ai.error': 'Unable to generate technical form with AI.',
|
||||
|
||||
'brands.page.subtitle': 'Manage product brands for your store catalog.',
|
||||
'brands.loading': 'Loading brands...',
|
||||
'brands.empty': 'No brands yet. Click + to add one.',
|
||||
@@ -1009,6 +1196,7 @@ const en = {
|
||||
'title.orders': 'My Orders',
|
||||
'title.shoppingCards': 'Shopping Cards',
|
||||
'title.customers': 'Customers',
|
||||
'title.customerProducts': 'Customer products',
|
||||
'title.blog': 'Blog',
|
||||
'title.myBlogs': 'My Blogs',
|
||||
'title.addBlog': 'Add New Blog',
|
||||
@@ -1143,6 +1331,7 @@ const fa: Record<MessageKey, string> = {
|
||||
'nav.store.cards': 'کارتهای خرید',
|
||||
'nav.store.settings': 'تنظیمات',
|
||||
'nav.customers': 'مشتریان',
|
||||
'nav.customerProducts': 'محصولات مشتریان',
|
||||
'nav.settings': 'تنظیمات',
|
||||
'nav.blog': 'بلاگ',
|
||||
'nav.blog.overview': 'نمای کلی',
|
||||
@@ -1356,6 +1545,163 @@ const fa: Record<MessageKey, string> = {
|
||||
'آیا از حذف «{name}» مطمئن هستید؟ این عمل قابل بازگشت نیست.',
|
||||
'products.list.addByAi': 'افزودن محصول با هوش مصنوعی',
|
||||
'products.list.addNew': 'افزودن محصول جدید',
|
||||
|
||||
'customerProducts.title': 'محصولات مشتریان',
|
||||
'customerProducts.subtitle': '{count} محصول ثبتشده توسط مشتریان.',
|
||||
'customerProducts.empty': 'هنوز محصول مشتری ثبت نشده است.',
|
||||
'customerProducts.form.title': 'محصولات من',
|
||||
'customerProducts.form.empty': 'هنوز محصولی ثبت نکردهاید.',
|
||||
'customerProducts.form.add': 'افزودن محصول',
|
||||
'customerProducts.form.addTitle': 'افزودن محصول',
|
||||
'customerProducts.form.addSubtitle': 'محصول جدید را برای بررسی ارسال کنید.',
|
||||
'customerProducts.form.addComingSoon': 'فرم افزودن در مرحله بعد طراحی میشود.',
|
||||
'customerProducts.form.backToList': 'بازگشت به محصولات من',
|
||||
'customerProducts.form.editTitle': 'ویرایش محصول',
|
||||
'customerProducts.form.editSubtitle': 'جزئیات آگهی را بهروز کنید و ذخیره کنید.',
|
||||
'customerProducts.form.detailsTitle': 'جزئیات محصول',
|
||||
'customerProducts.form.detailsSubtitle': 'جزئیات آگهی ثبتشده را ببینید.',
|
||||
'customerProducts.form.edit': 'ویرایش محصول',
|
||||
'customerProducts.form.yes': 'بله',
|
||||
'customerProducts.form.editSoon': 'ویرایش محصول بهزودی در دسترس خواهد بود.',
|
||||
'customerProducts.form.remove': 'حذف محصول',
|
||||
'customerProducts.form.removeConfirm': 'این محصول از موجودی شما حذف شود؟',
|
||||
'customerProducts.form.removeSuccess': 'محصول حذف شد.',
|
||||
'customerProducts.form.promote': 'پروموت محصول',
|
||||
'customerProducts.form.promoted': 'پروموت شده',
|
||||
'customerProducts.form.promoteSuccess': 'محصول پروموت شد.',
|
||||
'customerProducts.form.priceUnavailable': 'قیمت اعلام نشده',
|
||||
'customerProducts.form.status.pending': 'در انتظار تأیید',
|
||||
'customerProducts.form.status.published': 'تأیید شده',
|
||||
'customerProducts.form.status.archived': 'بایگانی',
|
||||
'customerProducts.form.stepperLabel': 'مراحل افزودن محصول',
|
||||
'customerProducts.form.step.basics': 'اطلاعات پایه',
|
||||
'customerProducts.form.step.basicsHint': 'دستهبندی، نام، توضیحات، قیمت و موقعیت.',
|
||||
'customerProducts.form.step.basicsPlaceholder': 'فیلدهای پایه اینجا قرار میگیرند.',
|
||||
'customerProducts.form.step.images': 'تصاویر',
|
||||
'customerProducts.form.step.imagesHint': 'تصویر شاخص با برش و گالری تصاویر را اضافه کنید.',
|
||||
'customerProducts.form.step.details': 'جزئیات',
|
||||
'customerProducts.form.step.detailsHint': 'توضیحات و اطلاعات فنی بر اساس دستهبندی انتخابشده.',
|
||||
'customerProducts.form.step.detailsPlaceholder': 'جزئیات و فیلدهای فنی اینجا قرار میگیرند.',
|
||||
'customerProducts.form.step.technical': 'اطلاعات فنی',
|
||||
'customerProducts.form.step.technicalHint':
|
||||
'وضعیت را انتخاب کنید، یادداشت اختیاری بنویسید و فرم فنی دستهبندی را تکمیل کنید.',
|
||||
'customerProducts.form.optional': '(اختیاری)',
|
||||
'customerProducts.form.loading': 'در حال بارگذاری محصولات…',
|
||||
'customerProducts.form.fields.category': 'دستهبندی',
|
||||
'customerProducts.form.fields.selectCategory': 'انتخاب دستهبندی',
|
||||
'customerProducts.form.fields.searchCategory': 'جستجوی دستهبندی…',
|
||||
'customerProducts.form.fields.clearCategory': 'پاک کردن دستهبندی',
|
||||
'customerProducts.form.fields.noCategories': 'دستهبندیای پیدا نشد',
|
||||
'customerProducts.form.fields.titleFa': 'نام (فارسی)',
|
||||
'customerProducts.form.fields.titleFaPlaceholder': 'نام محصول به فارسی',
|
||||
'customerProducts.form.fields.titleEn': 'نام (انگلیسی)',
|
||||
'customerProducts.form.fields.titleEnPlaceholder': 'نام محصول به انگلیسی',
|
||||
'customerProducts.form.fields.description': 'توضیحات',
|
||||
'customerProducts.form.fields.descriptionPlaceholder': 'توضیح کوتاه درباره محصول',
|
||||
'customerProducts.form.fields.price': 'قیمت پیشنهادی',
|
||||
'customerProducts.form.fields.priceSuggested': 'قیمت پیشنهادی شما',
|
||||
'customerProducts.form.fields.priceByExpert': 'میخواهم قیمت توسط کارشناس مشخص شود',
|
||||
'customerProducts.form.fields.pricePlaceholder': 'مثلاً ۱٬۵۰۰٬۰۰۰',
|
||||
'customerProducts.form.fields.priceUnit': 'واحد',
|
||||
'customerProducts.form.fields.priceUnit.IRT': 'IRT',
|
||||
'customerProducts.form.fields.priceUnit.USD': 'Dollar',
|
||||
'customerProducts.form.fields.priceUnit.EUR': 'EURO',
|
||||
'customerProducts.form.fields.priceUnit.AED': 'AED',
|
||||
'customerProducts.form.fields.location': 'موقعیت',
|
||||
'customerProducts.form.fields.country': 'کشور',
|
||||
'customerProducts.form.fields.selectCountry': 'انتخاب کشور',
|
||||
'customerProducts.form.fields.province': 'استان',
|
||||
'customerProducts.form.fields.selectProvince': 'انتخاب استان',
|
||||
'customerProducts.form.fields.city': 'شهر',
|
||||
'customerProducts.form.fields.selectCity': 'انتخاب شهر',
|
||||
'customerProducts.form.fields.searchCity': 'جستجوی شهر…',
|
||||
'customerProducts.form.fields.clearCity': 'پاک کردن شهر',
|
||||
'customerProducts.form.fields.noCities': 'شهری پیدا نشد',
|
||||
'customerProducts.form.fields.deliveryNote': 'یادداشت تحویل / دریافت',
|
||||
'customerProducts.form.fields.deliveryNotePlaceholder': 'مثلاً فقط حضوری، تحویل عصر…',
|
||||
'customerProducts.form.fields.district': 'منطقه',
|
||||
'customerProducts.form.fields.selectDistrict': 'انتخاب منطقه',
|
||||
'customerProducts.form.fields.condition': 'وضعیت',
|
||||
'customerProducts.form.fields.technicalNotes': 'توضیحات فنی',
|
||||
'customerProducts.form.fields.technicalNotesPlaceholder': 'جزئیات فنی اختیاری…',
|
||||
'customerProducts.form.condition.new': 'نو',
|
||||
'customerProducts.form.condition.stock': 'استوک',
|
||||
'customerProducts.form.condition.needs_repair': 'نیاز به تعمیر',
|
||||
'customerProducts.form.condition.scrap': 'اوراق',
|
||||
'customerProducts.form.images.thumbnail': 'تصویر شاخص',
|
||||
'customerProducts.form.images.thumbnailUpload': 'آپلود تصویر شاخص',
|
||||
'customerProducts.form.images.thumbnailHint': 'نسبت ۳:۲ افقی بهتر است',
|
||||
'customerProducts.form.images.thumbnailChange': 'تغییر تصویر شاخص',
|
||||
'customerProducts.form.images.thumbnailRemove': 'حذف تصویر شاخص',
|
||||
'customerProducts.form.images.zoom': 'بزرگنمایی',
|
||||
'customerProducts.form.images.applyCrop': 'اعمال برش',
|
||||
'customerProducts.form.images.gallery': 'گالری',
|
||||
'customerProducts.form.images.galleryAdd': 'افزودن عکس',
|
||||
'customerProducts.form.images.galleryHint': 'میتوانید چند تصویر انتخاب کنید.',
|
||||
'customerProducts.form.images.galleryRemove': 'حذف تصویر {index}',
|
||||
'customerProducts.form.technical.select': 'انتخاب کنید…',
|
||||
'customerProducts.form.technical.needCategory': 'برای نمایش فیلدهای فنی، در مرحله ۱ دستهبندی را انتخاب کنید.',
|
||||
'customerProducts.form.technical.empty': 'برای این دستهبندی هنوز فیلد فنی تعریف نشده است.',
|
||||
'customerProducts.form.technical.categoryForm': 'فرم فنی دستهبندی',
|
||||
'customerProducts.form.technical.loading': 'در حال بارگذاری فیلدهای فنی…',
|
||||
'customerProducts.form.cancel': 'انصراف',
|
||||
'customerProducts.form.next': 'بعدی',
|
||||
'customerProducts.form.back': 'قبلی',
|
||||
'customerProducts.form.submit': 'ارسال',
|
||||
'customerProducts.form.save': 'ذخیره تغییرات',
|
||||
'customerProducts.form.submitting': 'در حال ارسال…',
|
||||
'customerProducts.form.submitSuccess': 'محصول برای بررسی ارسال شد.',
|
||||
'customerProducts.form.updateSuccess': 'محصول بهروز شد.',
|
||||
'customerProducts.form.error.load': 'بارگذاری محصولات ممکن نشد.',
|
||||
'customerProducts.form.error.loadDetail': 'بارگذاری این محصول ممکن نشد.',
|
||||
'customerProducts.form.error.loadLocations': 'بارگذاری موقعیتها ممکن نشد.',
|
||||
'customerProducts.form.error.loadCategories': 'بارگذاری دستهبندیها ممکن نشد.',
|
||||
'customerProducts.form.error.loadTechnicalForm': 'بارگذاری فرم فنی دستهبندی ممکن نشد.',
|
||||
'customerProducts.form.error.categoryRequired': 'لطفاً دستهبندی را انتخاب کنید.',
|
||||
'customerProducts.form.error.titleFaRequired': 'لطفاً نام فارسی را وارد کنید.',
|
||||
'customerProducts.form.error.locationRequired': 'لطفاً کشور و شهر را انتخاب کنید.',
|
||||
'customerProducts.form.error.priceInvalid': 'لطفاً قیمت معتبر وارد کنید.',
|
||||
'customerProducts.form.error.conditionRequired': 'لطفاً وضعیت را انتخاب کنید.',
|
||||
'customerProducts.form.error.technicalRequired': 'لطفاً فیلدهای فنی الزامی را تکمیل کنید.',
|
||||
'customerProducts.form.error.submit': 'ارسال محصول ممکن نشد.',
|
||||
'customerProducts.form.error.update': 'بهروزرسانی محصول ممکن نشد.',
|
||||
'customerProducts.form.error.remove': 'حذف محصول ممکن نشد.',
|
||||
'customerProducts.form.error.promote': 'پروموت محصول ممکن نشد.',
|
||||
|
||||
'customerProducts.add': 'افزودن محصول',
|
||||
'customerProducts.detailsTitle': 'جزئیات محصول',
|
||||
'customerProducts.detailsSubtitle': 'جزئیات محصول ثبتشده توسط مشتری را ببینید.',
|
||||
'customerProducts.backToList': 'بازگشت به محصولات مشتریان',
|
||||
'customerProducts.owner': 'مشتری',
|
||||
'customerProducts.location': 'موقعیت',
|
||||
'customerProducts.promote': 'پروموت محصول',
|
||||
'customerProducts.promoted': 'پروموت شده',
|
||||
'customerProducts.promoteSuccess': 'محصول پروموت شد.',
|
||||
'customerProducts.remove': 'حذف محصول',
|
||||
'customerProducts.removeConfirm': 'این محصول مشتری حذف شود؟',
|
||||
'customerProducts.removeSuccess': 'محصول حذف شد.',
|
||||
'customerProducts.statusChange': 'تغییر وضعیت',
|
||||
'customerProducts.statusModalTitle': 'تغییر وضعیت محصول',
|
||||
'customerProducts.statusModalSave': 'بهروزرسانی وضعیت',
|
||||
'customerProducts.statusModalHint': 'وضعیت نمایش این آگهی را انتخاب کنید.',
|
||||
'customerProducts.status.pending': 'در انتظار تأیید',
|
||||
'customerProducts.status.published': 'تأیید شده',
|
||||
'customerProducts.status.rejected': 'رد شده',
|
||||
'customerProducts.status.archived': 'بایگانی',
|
||||
'customerProducts.statusSuccess': 'وضعیت بهروز شد.',
|
||||
'customerProducts.loading': 'در حال بارگذاری محصولات…',
|
||||
'customerProducts.error.load': 'بارگذاری محصولات مشتریان ممکن نشد.',
|
||||
'customerProducts.error.loadDetail': 'بارگذاری این محصول ممکن نشد.',
|
||||
'customerProducts.error.remove': 'حذف محصول ممکن نشد.',
|
||||
'customerProducts.error.promote': 'پروموت محصول ممکن نشد.',
|
||||
'customerProducts.error.status': 'بهروزرسانی وضعیت ممکن نشد.',
|
||||
'customerProducts.yes': 'بله',
|
||||
'customerProducts.edit': 'ویرایش محصول',
|
||||
'customerProducts.approve': 'تأیید محصول',
|
||||
'customerProducts.editSoon': 'ویرایش محصول مشتری در مرحله بعد اضافه میشود.',
|
||||
'customerProducts.toast.approved': 'محصول تأیید شد.',
|
||||
'customerProducts.priceUnavailable': 'قیمت اعلام نشده',
|
||||
|
||||
'products.card.edit': 'ویرایش محصول',
|
||||
'products.card.quickInfo': 'اطلاعات سریع',
|
||||
'products.card.variations': 'مدیریت تنوعها',
|
||||
@@ -1416,6 +1762,10 @@ const fa: Record<MessageKey, string> = {
|
||||
'categories.addSub': 'افزودن زیردسته',
|
||||
'categories.edit': 'ویرایش دستهبندی',
|
||||
'categories.addByAi': 'پر کردن دستهها با هوش مصنوعی',
|
||||
'categories.ai.title': 'پر کردن دستهها با هوش مصنوعی',
|
||||
'categories.ai.subtitle':
|
||||
'پرامپت زیر را ویرایش کنید، سپس اجرا کنید تا درخت دستهبندی ساخته و ذخیره شود.',
|
||||
'categories.ai.error': 'تولید دستهبندی با هوش مصنوعی ممکن نشد.',
|
||||
'categories.deleteTitle': 'حذف دستهبندی',
|
||||
'categories.deleteMessage':
|
||||
'آیا از حذف «{name}» مطمئن هستید؟ زیردستهها نیز حذف میشوند.',
|
||||
@@ -1440,6 +1790,31 @@ const fa: Record<MessageKey, string> = {
|
||||
'categories.select.empty': 'دستهبندیای یافت نشد',
|
||||
'categories.select.clear': 'پاک کردن انتخاب',
|
||||
|
||||
'categories.technical.title': 'فرم اطلاعات فنی',
|
||||
'categories.technical.loading': 'در حال بارگذاری فرم...',
|
||||
'categories.technical.empty':
|
||||
'هنوز فیلدی نیست. فیلد متنی، چندخطی، انتخابی یا چندانتخابی اضافه کنید.',
|
||||
'categories.technical.fieldLabel': 'برچسب فیلد',
|
||||
'categories.technical.inputType': 'نوع ورودی',
|
||||
'categories.technical.required': 'الزامی',
|
||||
'categories.technical.removeField': 'حذف فیلد',
|
||||
'categories.technical.options': 'گزینهها',
|
||||
'categories.technical.optionN': 'گزینه {n}',
|
||||
'categories.technical.removeOption': 'حذف گزینه',
|
||||
'categories.technical.addOption': 'افزودن گزینه',
|
||||
'categories.technical.addField': 'افزودن فیلد',
|
||||
'categories.technical.generateAi': 'تولید با هوش مصنوعی',
|
||||
'categories.technical.save': 'ذخیره فرم',
|
||||
'categories.technical.saving': 'در حال ذخیره…',
|
||||
'categories.technical.type.text': 'متنی',
|
||||
'categories.technical.type.textarea': 'چندخطی',
|
||||
'categories.technical.type.select': 'انتخابی',
|
||||
'categories.technical.type.multi_select': 'چندانتخابی',
|
||||
'categories.technical.ai.title': 'تولید فرم فنی با هوش مصنوعی',
|
||||
'categories.technical.ai.subtitle':
|
||||
'پرامپت زیر را ویرایش کنید، سپس اجرا کنید تا فیلدهای فرم پر شوند.',
|
||||
'categories.technical.ai.error': 'تولید فرم فنی با هوش مصنوعی ممکن نشد.',
|
||||
|
||||
'brands.page.subtitle': 'برندهای محصول فروشگاه خود را مدیریت کنید.',
|
||||
'brands.loading': 'در حال بارگذاری برندها...',
|
||||
'brands.empty': 'هنوز برندی نیست. برای افزودن روی + کلیک کنید.',
|
||||
@@ -2123,6 +2498,7 @@ const fa: Record<MessageKey, string> = {
|
||||
'title.orders': 'سفارشهای من',
|
||||
'title.shoppingCards': 'کارتهای خرید',
|
||||
'title.customers': 'مشتریان',
|
||||
'title.customerProducts': 'محصولات مشتریان',
|
||||
'title.blog': 'بلاگ',
|
||||
'title.myBlogs': 'بلاگهای من',
|
||||
'title.addBlog': 'افزودن بلاگ',
|
||||
@@ -2255,6 +2631,7 @@ const BREADCRUMB_LABEL_KEYS: Record<string, MessageKey> = {
|
||||
'Shipping Fees': 'nav.store.shipping',
|
||||
'Shopping Cards': 'nav.store.cards',
|
||||
Customers: 'nav.customers',
|
||||
'Customer products': 'nav.customerProducts',
|
||||
Blog: 'nav.blog',
|
||||
'My Blogs': 'nav.blog.list',
|
||||
'Add New Blog': 'nav.blog.new',
|
||||
@@ -2323,6 +2700,10 @@ export function getBusinessRouteTitleRules(locale: DashboardLocale): RouteTitleR
|
||||
{ match: '/store/settings', labels: [t('title.store'), t('title.settings')] },
|
||||
{ match: '/store', labels: [t('title.store')] },
|
||||
{ match: '/customers', labels: [t('title.customers')] },
|
||||
{ match: '/customer-products/new', labels: [t('title.customerProducts'), t('customerProducts.add')] },
|
||||
{ match: /^\/customer-products\/[^/]+\/edit$/, labels: [t('title.customerProducts'), t('customerProducts.edit')] },
|
||||
{ match: /^\/customer-products\/[^/]+$/, labels: [t('title.customerProducts'), t('customerProducts.detailsTitle')] },
|
||||
{ match: '/customer-products', labels: [t('title.customerProducts')] },
|
||||
{ match: '/blog/list', labels: [t('title.blog'), t('title.myBlogs')] },
|
||||
{ match: /^\/blog\/detail\/[^/]+$/, labels: [t('title.blog'), t('title.blogDetails')] },
|
||||
{ match: '/blog/new', labels: [t('title.blog'), t('title.addBlog')] },
|
||||
|
||||
Reference in New Issue
Block a user