This commit is contained in:
Nông Đức Huy
2026-08-13 23:20:23 +07:00
parent 1e356a2578
commit d9f159a8c3
84 changed files with 7992 additions and 180 deletions
+158 -10
View File
@@ -65,21 +65,13 @@
"title": "Customers",
"body": "Customer records, order history and addresses."
},
"promotions": {
"title": "Promotions",
"body": "Automatic cart-level discount rules."
},
"coupons": {
"title": "Coupons",
"body": "Coupon codes, usage limits and redemption reporting."
},
"reviews": {
"title": "Reviews",
"body": "Review moderation queue."
"body": "Every review comes from a verified purchase. Approve or reject before it appears on the storefront."
},
"cms": {
"title": "Content",
"body": "Homepage blocks, banners, blog posts and static pages."
"body": "Journal posts and static pages. Written in Markdown, published per language."
},
"users": {
"title": "Users",
@@ -88,6 +80,10 @@
"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": {
@@ -281,5 +277,157 @@
"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"
}
}