502 lines
16 KiB
JSON
502 lines
16 KiB
JSON
{
|
|
"common": {
|
|
"appName": "Sport Admin",
|
|
"changeLanguage": "Change language",
|
|
"signedOut": "Signed out",
|
|
"requires": "requires: {permission}",
|
|
"planned": "Planned: {milestone}",
|
|
"sections": {
|
|
"catalog": "Catalog",
|
|
"sales": "Sales",
|
|
"marketing": "Marketing",
|
|
"settings": "Settings"
|
|
},
|
|
"login": {
|
|
"title": "Sign in",
|
|
"body": "Use your back-office account. Sessions are short-lived and refresh automatically.",
|
|
"email": "Email",
|
|
"password": "Password",
|
|
"signIn": "Sign in",
|
|
"signingIn": "Signing in…",
|
|
"signOut": "Sign out",
|
|
"invalid": "Enter a valid email and password.",
|
|
"throttled": "Too many attempts. Please wait a few minutes.",
|
|
"networkError": "Could not reach the server. Check your connection."
|
|
},
|
|
"session": {
|
|
"signedInAs": "Signed in as {name}",
|
|
"signOut": "Sign out"
|
|
}
|
|
},
|
|
"pages": {
|
|
"dashboard": {
|
|
"title": "Dashboard",
|
|
"body": "Revenue, orders, conversion and low-stock alerts."
|
|
},
|
|
"products": {
|
|
"title": "Products",
|
|
"body": "Product list with status, brand and variant count. The editor manages options, generates the variant matrix and edits per-variant SKU, price and stock."
|
|
},
|
|
"categories": {
|
|
"title": "Categories",
|
|
"body": "Drag-to-reorder category tree with materialised-path maintenance."
|
|
},
|
|
"collections": {
|
|
"title": "Collections",
|
|
"body": "Manual and rule-based collections, with campaign scheduling."
|
|
},
|
|
"brands": {
|
|
"title": "Brands",
|
|
"body": "Brand records, logos and SEO fields."
|
|
},
|
|
"inventory": {
|
|
"title": "Inventory",
|
|
"body": "Stock by variant and location, adjustments and the movement ledger."
|
|
},
|
|
"media": {
|
|
"title": "Media",
|
|
"body": "Asset library. Uploads go browser → presigned URL → R2; the API only records metadata."
|
|
},
|
|
"orders": {
|
|
"title": "Orders",
|
|
"body": "Order list and detail: fulfilment, status transitions, refunds and the audit trail."
|
|
},
|
|
"customers": {
|
|
"title": "Customers",
|
|
"body": "Customer records, order history and addresses."
|
|
},
|
|
"reviews": {
|
|
"title": "Reviews",
|
|
"body": "Every review comes from a verified purchase. Approve or reject before it appears on the storefront."
|
|
},
|
|
"cms": {
|
|
"title": "Content",
|
|
"body": "Journal posts and static pages. Written in Markdown, published per language."
|
|
},
|
|
"users": {
|
|
"title": "Users",
|
|
"body": "Back-office accounts and role assignment."
|
|
},
|
|
"roles": {
|
|
"title": "Roles",
|
|
"body": "Role editor: a role is a named set of permissions, editable at runtime with no deploy."
|
|
},
|
|
"discounts": {
|
|
"title": "Discounts",
|
|
"body": "Promotions and coupon codes. Both run on the same rules — a coupon is simply a promotion that needs a code typed."
|
|
}
|
|
},
|
|
"settings": {
|
|
"roles": "Roles",
|
|
"systemRole": "System role",
|
|
"permissionCount": "{count} permissions",
|
|
"loadFailed": "Could not load this data.",
|
|
"noPermission": "You do not have permission to view this.",
|
|
"table": {
|
|
"name": "Name",
|
|
"email": "Email",
|
|
"type": "Type",
|
|
"roles": "Roles",
|
|
"status": "Status",
|
|
"lastLogin": "Last sign-in"
|
|
}
|
|
},
|
|
"catalog": {
|
|
"searchPlaceholder": "Search name or SKU",
|
|
"count": "{count} products",
|
|
"empty": "No products match.",
|
|
"loadFailed": "Could not load products.",
|
|
"actionFailed": "That action failed.",
|
|
"noPermission": "You do not have permission to view this.",
|
|
"publish": "Publish",
|
|
"unpublish": "Unpublish",
|
|
"status": {
|
|
"ALL": "All",
|
|
"ACTIVE": "Active",
|
|
"DRAFT": "Draft",
|
|
"ARCHIVED": "Archived"
|
|
},
|
|
"table": {
|
|
"product": "Product",
|
|
"status": "Status",
|
|
"variants": "Variants",
|
|
"stock": "Stock",
|
|
"price": "Price"
|
|
},
|
|
"newProduct": "New product",
|
|
"edit": "Edit",
|
|
"delete": "Retire",
|
|
"deleteConfirm": "Confirm retire"
|
|
},
|
|
"media": {
|
|
"chooseFiles": "Choose files",
|
|
"uploadHint": "PNG, JPEG, WebP or AVIF, up to 25 MB. Uploaded straight to storage.",
|
|
"uploading": "uploading…",
|
|
"uploadFailed": "Upload failed.",
|
|
"deleteFailed": "Could not delete.",
|
|
"loadFailed": "Could not load the library.",
|
|
"empty": "No media yet.",
|
|
"delete": "Delete",
|
|
"noPermission": "You do not have permission to view this."
|
|
},
|
|
"inventory": {
|
|
"searchPlaceholder": "Search SKU or product",
|
|
"lowStockOnly": "Low stock only",
|
|
"loadFailed": "Could not load stock levels.",
|
|
"adjustFailed": "Adjustment failed.",
|
|
"noPermission": "You do not have permission to view this.",
|
|
"adjust": "Adjust",
|
|
"apply": "Apply",
|
|
"cancel": "Cancel",
|
|
"outOfStock": "Out of stock",
|
|
"deltaLabel": "Quantity change",
|
|
"table": {
|
|
"sku": "SKU",
|
|
"product": "Product",
|
|
"onHand": "On hand",
|
|
"reserved": "Reserved",
|
|
"available": "Available"
|
|
}
|
|
},
|
|
"editor": {
|
|
"createTitle": "New product",
|
|
"editTitle": "Edit product",
|
|
"createHint": "Fill in the content and the option axes. Saving generates one variant per combination, which you then price on the Variants tab.",
|
|
"backToList": "Products",
|
|
"content": "Content",
|
|
"facets": "Merchandising",
|
|
"options": "Options",
|
|
"generation": "Variant generation",
|
|
"localeHint": "A language with no name is skipped — the storefront falls back per field.",
|
|
"name": "Name",
|
|
"shortDescription": "Short description",
|
|
"description": "Description",
|
|
"gender": "Gender",
|
|
"sport": "Sport",
|
|
"optionsHint": "Every combination of these values becomes a purchasable variant with its own SKU, price and stock.",
|
|
"addOption": "Add option",
|
|
"removeOption": "Remove",
|
|
"optionKey": "Key",
|
|
"optionName": "Label",
|
|
"addValue": "Add value",
|
|
"removeValue": "Remove",
|
|
"valueKey": "value",
|
|
"valueLabel": "Label",
|
|
"swatch": "Swatch",
|
|
"skuPrefix": "SKU prefix",
|
|
"basePrice": "Base price (VND)",
|
|
"generationHint": "Applied to every generated variant. Adjust individual prices afterwards.",
|
|
"save": "Save changes",
|
|
"create": "Create product",
|
|
"saving": "Saving…",
|
|
"saved": "Saved",
|
|
"saveFailed": "Could not save.",
|
|
"loadFailed": "Could not load this product.",
|
|
"matrixWarning": "Saving re-runs the variant matrix",
|
|
"publish": "Publish",
|
|
"unpublish": "Unpublish",
|
|
"archive": "Archive",
|
|
"tab": {
|
|
"details": "Details",
|
|
"variants": "Variants",
|
|
"images": "Images"
|
|
},
|
|
"noVariants": "No variants yet. Add option values on the Details tab.",
|
|
"variantCount": "{count} active",
|
|
"archivedCount": "{count} archived",
|
|
"archived": "Archived",
|
|
"saveChanged": "Save {count} change(s)",
|
|
"grid": {
|
|
"variant": "Variant",
|
|
"sku": "SKU",
|
|
"price": "Price",
|
|
"sale": "Sale price",
|
|
"stock": "Available / on hand"
|
|
},
|
|
"stockHint": "Stock is read-only here. Adjust it from Inventory so every change lands in the ledger with a reason.",
|
|
"attached": "Attached images",
|
|
"library": "Library",
|
|
"noImages": "No images attached yet.",
|
|
"saveImages": "Save images",
|
|
"primary": "Primary",
|
|
"remove": "Remove",
|
|
"colourway": "Colourway",
|
|
"anyColourway": "All colourways",
|
|
"moveLeft": "Move earlier",
|
|
"moveRight": "Move later"
|
|
},
|
|
"orders": {
|
|
"title": "Orders",
|
|
"detailTitle": "Order",
|
|
"description": "Placed orders, their stock reservations and where each one is in its lifecycle.",
|
|
"searchPlaceholder": "Order number, name, email or phone",
|
|
"count": "{count} orders",
|
|
"empty": "No orders match.",
|
|
"view": "View",
|
|
"backToList": "Orders",
|
|
"noPermission": "You do not have permission to view orders.",
|
|
"loadFailed": "Could not load orders.",
|
|
"updateFailed": "Could not update this order.",
|
|
"actions": "Actions",
|
|
"reasonPlaceholder": "Reason for cancelling (required)",
|
|
"fulfilHint": "Fulfilling ships the reserved stock and writes a ledger entry.",
|
|
"items": "Items",
|
|
"subtotal": "Subtotal",
|
|
"shipping": "Shipping",
|
|
"discount": "Discount",
|
|
"total": "Total",
|
|
"customer": "Customer",
|
|
"shippingTo": "Shipping to",
|
|
"timeline": "Timeline",
|
|
"placed": "Placed",
|
|
"confirmed": "Confirmed",
|
|
"cancelled": "Cancelled",
|
|
"status": {
|
|
"ALL": "All",
|
|
"PENDING": "Pending",
|
|
"CONFIRMED": "Confirmed",
|
|
"FULFILLED": "Fulfilled",
|
|
"COMPLETED": "Completed",
|
|
"CANCELLED": "Cancelled"
|
|
},
|
|
"action": {
|
|
"CONFIRMED": "Confirm",
|
|
"FULFILLED": "Mark fulfilled",
|
|
"COMPLETED": "Complete",
|
|
"CANCELLED": "Cancel order"
|
|
},
|
|
"payment": {
|
|
"UNPAID": "Unpaid",
|
|
"PAID": "Paid",
|
|
"PARTIALLY_REFUNDED": "Partly refunded",
|
|
"REFUNDED": "Refunded"
|
|
},
|
|
"column": {
|
|
"order": "Order",
|
|
"customer": "Customer",
|
|
"status": "Status",
|
|
"items": "Items",
|
|
"total": "Total",
|
|
"placed": "Placed"
|
|
}
|
|
},
|
|
"discounts": {
|
|
"noPermission": "You do not have permission to manage discounts.",
|
|
"loadFailed": "Could not load discounts.",
|
|
"saveFailed": "Could not save this discount.",
|
|
"searchPlaceholder": "Search by name or code",
|
|
"create": "New discount",
|
|
"edit": "Edit",
|
|
"empty": "No discounts yet. Create one to start running an offer.",
|
|
"createTitle": "New discount",
|
|
"editTitle": "Edit discount",
|
|
"dialogHint": "A coupon is a promotion that needs a code typed. Both use the same rules.",
|
|
"filter": {
|
|
"ALL": "All",
|
|
"CODE": "Coupons",
|
|
"AUTOMATIC": "Automatic"
|
|
},
|
|
"trigger": "Applies",
|
|
"triggerCode": "When a code is entered",
|
|
"triggerAutomatic": "Automatically",
|
|
"code": "Code",
|
|
"codeNotApplicable": "Not used for automatic promotions",
|
|
"type": "Discount",
|
|
"typePercentage": "Percentage",
|
|
"typeFixed": "Fixed amount",
|
|
"valuePercent": "Percent off",
|
|
"valueAmount": "Amount off",
|
|
"valuePercentHint": "Rounded down, never up.",
|
|
"valueAmountHint": "In đồng, e.g. 100000 for 100.000 ₫.",
|
|
"scope": "Applies to",
|
|
"scopeOrder": "Whole order",
|
|
"scopeProduct": "Selected products",
|
|
"scopeProductHint": "Product targeting is set from the product and collection screens.",
|
|
"name": "Name",
|
|
"namePlaceholder": "Summer sale",
|
|
"nameHint": "Shown to the shopper in their bag and on the order.",
|
|
"startsAt": "Starts",
|
|
"endsAt": "Ends",
|
|
"minSubtotal": "Minimum subtotal",
|
|
"noMinimum": "No minimum",
|
|
"usageLimit": "Usage limit",
|
|
"unlimited": "Unlimited",
|
|
"alreadyUsed": "Already used {count} time(s).",
|
|
"priority": "Priority",
|
|
"priorityShort": "Priority",
|
|
"priorityHint": "Lower runs first when several apply.",
|
|
"stackable": "Stackable",
|
|
"stackableHint": "Can combine with other discounts.",
|
|
"exclusive": "Exclusive",
|
|
"active": "Active",
|
|
"activeHint": "Switch off to stop it applying without deleting it.",
|
|
"always": "Always",
|
|
"noEnd": "No end",
|
|
"cancel": "Cancel",
|
|
"save": "Save",
|
|
"saving": "Saving…",
|
|
"status": {
|
|
"live": "Live",
|
|
"paused": "Paused",
|
|
"scheduled": "Scheduled",
|
|
"expired": "Expired",
|
|
"exhausted": "Used up"
|
|
},
|
|
"table": {
|
|
"name": "Name",
|
|
"value": "Value",
|
|
"window": "Window",
|
|
"usage": "Used",
|
|
"stacking": "Stacking",
|
|
"status": "Status"
|
|
},
|
|
"delete": "Retire",
|
|
"deleteConfirm": "Confirm retire",
|
|
"deleteFailed": "Could not retire this discount."
|
|
},
|
|
"reviews": {
|
|
"noPermission": "You do not have permission to moderate reviews.",
|
|
"loadFailed": "Could not load reviews.",
|
|
"moderateFailed": "Could not save that decision.",
|
|
"searchPlaceholder": "Search text or author",
|
|
"filter": {
|
|
"PENDING": "Pending",
|
|
"APPROVED": "Approved",
|
|
"REJECTED": "Rejected",
|
|
"ALL": "All"
|
|
},
|
|
"status": {
|
|
"PENDING": "Pending",
|
|
"APPROVED": "Approved",
|
|
"REJECTED": "Rejected"
|
|
},
|
|
"empty": "No reviews match this filter.",
|
|
"emptyQueue": "Nothing waiting. The queue is clear.",
|
|
"untitled": "(no title)",
|
|
"noBody": "No written review — a rating only.",
|
|
"by": "By {name}",
|
|
"moderatedBy": "Handled by {name}",
|
|
"note": "Note",
|
|
"notePlaceholder": "Why (internal, never shown to the shopper)",
|
|
"approve": "Approve",
|
|
"reject": "Reject",
|
|
"confirmReject": "Confirm reject",
|
|
"cancel": "Cancel"
|
|
},
|
|
"cms": {
|
|
"noPermission": "You do not have permission to manage content.",
|
|
"loadFailed": "Could not load content.",
|
|
"saveFailed": "Could not save this entry.",
|
|
"deleteFailed": "Could not retire this entry.",
|
|
"searchPlaceholder": "Search by title",
|
|
"filter": {
|
|
"ALL": "All",
|
|
"POST": "Posts",
|
|
"PAGE": "Pages"
|
|
},
|
|
"type": {
|
|
"POST": "Post",
|
|
"PAGE": "Page"
|
|
},
|
|
"status": {
|
|
"DRAFT": "Draft",
|
|
"PUBLISHED": "Published"
|
|
},
|
|
"table": {
|
|
"title": "Title",
|
|
"languages": "Languages",
|
|
"status": "Status",
|
|
"updated": "Updated"
|
|
},
|
|
"newPost": "New post",
|
|
"newPage": "New page",
|
|
"empty": "Nothing written yet.",
|
|
"untitled": "(untitled)",
|
|
"edit": "Edit",
|
|
"backToList": "Back to content",
|
|
"title": "Title",
|
|
"slug": "URL slug",
|
|
"slugHint": "Lowercase, hyphens. Different per language.",
|
|
"excerpt": "Excerpt",
|
|
"excerptHint": "The summary shown on the journal listing.",
|
|
"body": "Body",
|
|
"bodyHint": "Markdown. Headings, lists, links, bold and tables.",
|
|
"seo": "Search engine listing",
|
|
"metaTitle": "Meta title",
|
|
"metaDescription": "Meta description",
|
|
"saveDraft": "Save draft",
|
|
"saving": "Saving…",
|
|
"publish": "Publish",
|
|
"update": "Update",
|
|
"unpublish": "Unpublish",
|
|
"delete": "Retire",
|
|
"deleteConfirm": "Confirm retire"
|
|
},
|
|
"taxonomy": {
|
|
"noPermission": "You do not have permission to manage this.",
|
|
"loadFailed": "Could not load.",
|
|
"saveFailed": "Could not save.",
|
|
"deleteFailed": "Could not delete.",
|
|
"dialogHint": "The base name is the fallback; per-language copy overrides it.",
|
|
"table": {
|
|
"name": "Name",
|
|
"products": "Products",
|
|
"status": "Status"
|
|
},
|
|
"active": "Active",
|
|
"inactive": "Inactive",
|
|
"activeHint": "Inactive entries stay in the admin but disappear from the storefront.",
|
|
"name": "Name",
|
|
"slug": "URL slug",
|
|
"slugHint": "Lowercase, hyphens.",
|
|
"nameLocalised": "Name in this language",
|
|
"slugLocalised": "Slug in this language",
|
|
"slugLocalisedHint": "Leave blank to reuse the base slug.",
|
|
"description": "Description",
|
|
"edit": "Edit",
|
|
"delete": "Delete",
|
|
"deleteConfirm": "Confirm delete",
|
|
"cancel": "Cancel",
|
|
"save": "Save",
|
|
"saving": "Saving…",
|
|
"brands": {
|
|
"create": "New brand",
|
|
"edit": "Edit brand",
|
|
"empty": "No brands yet."
|
|
},
|
|
"categories": {
|
|
"create": "New category",
|
|
"edit": "Edit category",
|
|
"empty": "No categories yet."
|
|
},
|
|
"collections": {
|
|
"create": "New collection",
|
|
"edit": "Edit collection",
|
|
"empty": "No collections yet."
|
|
}
|
|
},
|
|
"customers": {
|
|
"noPermission": "You do not have permission to view customers.",
|
|
"loadFailed": "Could not load customers.",
|
|
"searchPlaceholder": "Search name, email or phone",
|
|
"table": {
|
|
"customer": "Customer",
|
|
"orders": "Orders",
|
|
"spend": "Lifetime spend",
|
|
"marketing": "Marketing",
|
|
"joined": "Joined"
|
|
},
|
|
"empty": "No customers yet.",
|
|
"noMatches": "No customers match that search.",
|
|
"view": "View",
|
|
"subscribed": "Subscribed",
|
|
"notSubscribed": "No",
|
|
"recentOrders": "Recent orders",
|
|
"noOrders": "No orders yet.",
|
|
"addresses": "Saved addresses",
|
|
"noAddresses": "No saved addresses.",
|
|
"default": "Default",
|
|
"lastSeen": "Last sign-in"
|
|
}
|
|
}
|