@base44/app-plugin-commerce 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -10
- package/base44/entities/commerce.ProductReview.jsonc +2 -2
- package/base44/functions/commerce/storefront-catalog/entry.ts +7 -3
- package/package.json +1 -1
- package/scripts/install.js +2 -4
- package/skills/commerce/SKILL.md +9 -3
- package/skills/commerce/docs/api-storefront.md +3 -3
- package/skills/commerce/install/01-install.md +18 -30
- package/skills/commerce/install/02-storefront.md +23 -9
- package/skills/commerce/references/admin-localization.md +95 -0
- package/skills/commerce/references/reviews.md +7 -6
- package/src/commerce/admin/README.md +36 -15
- package/src/commerce/admin/bot/StoreAdminBot.jsx +12 -11
- package/src/commerce/admin/components/AddressForm.jsx +13 -12
- package/src/commerce/admin/components/ConfirmDialog.jsx +5 -4
- package/src/commerce/admin/components/CountrySelect.jsx +12 -8
- package/src/commerce/admin/components/DataTable.jsx +3 -2
- package/src/commerce/admin/components/DateRangePicker.jsx +11 -10
- package/src/commerce/admin/components/EmptyState.jsx +2 -1
- package/src/commerce/admin/components/MediaUploader.jsx +3 -2
- package/src/commerce/admin/components/MetaDataEditor.jsx +4 -3
- package/src/commerce/admin/components/SearchSelect.jsx +4 -3
- package/src/commerce/admin/context/SettingsContext.jsx +12 -25
- package/src/commerce/admin/hooks/useMoney.js +3 -2
- package/src/commerce/admin/i18n/index.js +54 -0
- package/src/commerce/admin/i18n/locales/de.js +896 -0
- package/src/commerce/admin/i18n/locales/en.js +900 -0
- package/src/commerce/admin/i18n/locales/es.js +896 -0
- package/src/commerce/admin/i18n/locales/fr.js +896 -0
- package/src/commerce/admin/i18n/locales/ja.js +896 -0
- package/src/commerce/admin/i18n/locales/pt.js +896 -0
- package/src/commerce/admin/index.jsx +6 -30
- package/src/commerce/admin/layout/AccessDenied.jsx +8 -9
- package/src/commerce/admin/layout/AuthGuard.jsx +2 -1
- package/src/commerce/admin/layout/Sidebar.jsx +29 -18
- package/src/commerce/admin/layout/Topbar.jsx +4 -3
- package/src/commerce/admin/lib/api.js +3 -2
- package/src/commerce/admin/lib/constants.js +44 -43
- package/src/commerce/admin/lib/format.js +4 -3
- package/src/commerce/admin/lib/paths.js +2 -3
- package/src/commerce/admin/pages/Dashboard.jsx +25 -24
- package/src/commerce/admin/pages/coupons/CouponEditor.jsx +55 -57
- package/src/commerce/admin/pages/coupons/CouponsList.jsx +22 -21
- package/src/commerce/admin/pages/customers/CustomerEditor.jsx +31 -30
- package/src/commerce/admin/pages/customers/CustomersList.jsx +19 -18
- package/src/commerce/admin/pages/orders/OrderEditor.jsx +75 -71
- package/src/commerce/admin/pages/orders/OrdersList.jsx +16 -15
- package/src/commerce/admin/pages/orders/components/AddProductDialog.jsx +12 -11
- package/src/commerce/admin/pages/orders/components/DownloadPermissionsPanel.jsx +14 -13
- package/src/commerce/admin/pages/orders/components/LineItemsTable.jsx +12 -11
- package/src/commerce/admin/pages/orders/components/OrderNotesPanel.jsx +11 -10
- package/src/commerce/admin/pages/orders/components/PaymentPanel.jsx +22 -22
- package/src/commerce/admin/pages/orders/components/RefundPanel.jsx +18 -17
- package/src/commerce/admin/pages/orders/components/TotalsBox.jsx +18 -17
- package/src/commerce/admin/pages/products/Categories.jsx +14 -13
- package/src/commerce/admin/pages/products/ProductEditor.jsx +16 -15
- package/src/commerce/admin/pages/products/ProductsList.jsx +41 -36
- package/src/commerce/admin/pages/products/Reviews.jsx +54 -46
- package/src/commerce/admin/pages/products/components/AttributesSection.jsx +45 -39
- package/src/commerce/admin/pages/products/components/ProductDataPanel.jsx +8 -7
- package/src/commerce/admin/pages/products/components/PublishBox.jsx +10 -9
- package/src/commerce/admin/pages/products/components/TaxonomyPanel.jsx +18 -17
- package/src/commerce/admin/pages/products/components/tabs/DownloadsTab.jsx +11 -10
- package/src/commerce/admin/pages/products/components/tabs/LinkedTab.jsx +9 -10
- package/src/commerce/admin/pages/products/components/tabs/ModifiersTab.jsx +3 -9
- package/src/commerce/admin/pages/products/components/tabs/PriceInventoryTab.jsx +76 -78
- package/src/commerce/admin/pages/reports/Reports.jsx +33 -32
- package/src/commerce/admin/pages/settings/EmailsSettings.jsx +36 -39
- package/src/commerce/admin/pages/settings/GeneralSettings.jsx +13 -14
- package/src/commerce/admin/pages/settings/InventorySettings.jsx +12 -13
- package/src/commerce/admin/pages/settings/LocationEditor.jsx +48 -47
- package/src/commerce/admin/pages/settings/PaymentsSettings.jsx +32 -33
- package/src/commerce/admin/pages/settings/SettingsLayout.jsx +13 -12
- package/src/commerce/admin/pages/settings/ShippingTaxSettings.jsx +31 -31
- package/src/commerce/admin/pages/settings/useGroupForm.jsx +4 -3
- package/src/commerce/admin/pages/status/WebhookEditor.jsx +34 -31
- package/src/commerce/admin/pages/status/Webhooks.jsx +11 -10
- package/src/commerce/admin/routes.jsx +31 -43
- package/src/commerce/storefront/pickers.jsx +19 -5
- package/src/commerce/storefront/useCheckout.jsx +28 -3
- package/src/commerce/utils/storefront.js +49 -2
|
@@ -0,0 +1,900 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* English — the admin default language and the fallback for every other locale
|
|
3
|
+
* file. Keys are flat and dot-namespaced by admin area; `{name}` marks an
|
|
4
|
+
* interpolated value and must survive translation verbatim.
|
|
5
|
+
*
|
|
6
|
+
* Adding a key: add it here first, then to every other file in this folder.
|
|
7
|
+
* A key missing from a locale falls back to the English below.
|
|
8
|
+
*/
|
|
9
|
+
export default {
|
|
10
|
+
$locale: "en",
|
|
11
|
+
|
|
12
|
+
// ── shared vocabulary ───────────────────────────────────────────
|
|
13
|
+
"common.add": "Add",
|
|
14
|
+
"common.amount": "Amount",
|
|
15
|
+
"common.cancel": "Cancel",
|
|
16
|
+
"common.confirm": "Confirm",
|
|
17
|
+
"common.delete": "Delete",
|
|
18
|
+
"common.description": "Description",
|
|
19
|
+
"common.edit": "Edit",
|
|
20
|
+
"common.email": "Email",
|
|
21
|
+
"common.name": "Name",
|
|
22
|
+
"common.no_results": "No results.",
|
|
23
|
+
"common.phone": "Phone",
|
|
24
|
+
"common.request_failed": "Request failed",
|
|
25
|
+
"common.save": "Save",
|
|
26
|
+
"common.search": "Search…",
|
|
27
|
+
"common.selected_count": "{count} selected",
|
|
28
|
+
"common.status": "Status",
|
|
29
|
+
"common.type": "Type",
|
|
30
|
+
"common.upload_failed": "Upload failed",
|
|
31
|
+
|
|
32
|
+
// ── generic table ───────────────────────────────────────────────
|
|
33
|
+
"table.empty_title": "Nothing here yet",
|
|
34
|
+
"table.page": "Page {page}",
|
|
35
|
+
|
|
36
|
+
// ── confirm dialog ──────────────────────────────────────────────
|
|
37
|
+
"confirm.description": "This action cannot be undone.",
|
|
38
|
+
"confirm.title": "Are you sure?",
|
|
39
|
+
|
|
40
|
+
// ── date-range presets ──────────────────────────────────────────
|
|
41
|
+
"dates.all_time": "All time",
|
|
42
|
+
"dates.last_7_days": "Last 7 days",
|
|
43
|
+
"dates.last_month": "Last month",
|
|
44
|
+
"dates.this_month": "This month",
|
|
45
|
+
"dates.this_year": "This year",
|
|
46
|
+
"dates.today": "Today",
|
|
47
|
+
|
|
48
|
+
// ── navigation ──────────────────────────────────────────────────
|
|
49
|
+
"nav.all_products": "All Products",
|
|
50
|
+
"nav.marketing_group": "Marketing",
|
|
51
|
+
"nav.products_group": "Products",
|
|
52
|
+
"nav.store_management": "Store Management",
|
|
53
|
+
"nav.storeadmin_bot": "StoreAdmin bot",
|
|
54
|
+
"nav.view_storefront": "View storefront",
|
|
55
|
+
|
|
56
|
+
// ── route + breadcrumb labels ───────────────────────────────────
|
|
57
|
+
"routes.categories": "Categories",
|
|
58
|
+
"routes.coupons": "Coupons",
|
|
59
|
+
"routes.coupons_edit": "Edit coupon",
|
|
60
|
+
"routes.coupons_new": "Add coupon",
|
|
61
|
+
"routes.customer": "Customer",
|
|
62
|
+
"routes.customers": "Customers",
|
|
63
|
+
"routes.customers_new": "Add customer",
|
|
64
|
+
"routes.dashboard": "Dashboard",
|
|
65
|
+
"routes.order": "Order",
|
|
66
|
+
"routes.orders": "Orders",
|
|
67
|
+
"routes.orders_new": "Add order",
|
|
68
|
+
"routes.products": "Products",
|
|
69
|
+
"routes.products_edit": "Edit product",
|
|
70
|
+
"routes.products_new": "Add product",
|
|
71
|
+
"routes.reports": "Reports",
|
|
72
|
+
"routes.reviews": "Reviews",
|
|
73
|
+
"routes.settings": "Settings",
|
|
74
|
+
"routes.settings_emails": "Emails",
|
|
75
|
+
"routes.settings_general": "General",
|
|
76
|
+
"routes.settings_inventory": "Inventory",
|
|
77
|
+
"routes.settings_location": "Location",
|
|
78
|
+
"routes.settings_payments": "Payments",
|
|
79
|
+
"routes.settings_shipping_tax": "Shipping & Tax",
|
|
80
|
+
"routes.settings_webhooks": "Webhooks",
|
|
81
|
+
"routes.webhook": "Webhook",
|
|
82
|
+
"routes.webhooks_new": "Add webhook",
|
|
83
|
+
|
|
84
|
+
// ── 404 ─────────────────────────────────────────────────────────
|
|
85
|
+
"notfound.back": "Back to the dashboard",
|
|
86
|
+
"notfound.description": "This is not an admin page.",
|
|
87
|
+
"notfound.title": "Page not found",
|
|
88
|
+
|
|
89
|
+
// ── auth / access screens ───────────────────────────────────────
|
|
90
|
+
"auth.admin_required": "Admin access required",
|
|
91
|
+
"auth.administrator": "Administrator",
|
|
92
|
+
"auth.checking_access": "Checking your access…",
|
|
93
|
+
"auth.must_sign_in": "You must sign in to access the store admin.",
|
|
94
|
+
"auth.no_admin_role": "Your account does not have the admin role. Ask a store administrator to grant you access.",
|
|
95
|
+
"auth.sign_in": "Sign in",
|
|
96
|
+
"auth.sign_in_required": "Sign in required",
|
|
97
|
+
"auth.sign_in_timeout": "We couldn't confirm who you are. Sign in to continue — if this page is embedded in a preview pane, open it in its own browser tab first, since sign-in can't complete inside a frame.",
|
|
98
|
+
"auth.sign_out": "Sign out",
|
|
99
|
+
"auth.signed_in_as": "Signed in as {email}",
|
|
100
|
+
|
|
101
|
+
// ── address form ────────────────────────────────────────────────
|
|
102
|
+
"address.city": "City",
|
|
103
|
+
"address.company": "Company",
|
|
104
|
+
"address.country": "Country",
|
|
105
|
+
"address.first_name": "First name",
|
|
106
|
+
"address.last_name": "Last name",
|
|
107
|
+
"address.line1": "Address line 1",
|
|
108
|
+
"address.line2": "Address line 2",
|
|
109
|
+
"address.postcode": "Postcode / ZIP",
|
|
110
|
+
"address.select_state": "Select state…",
|
|
111
|
+
"address.state": "State / Province",
|
|
112
|
+
|
|
113
|
+
// ── country picker ──────────────────────────────────────────────
|
|
114
|
+
"country.any": "Any country",
|
|
115
|
+
"country.none_found": "No country found.",
|
|
116
|
+
"country.search": "Search countries…",
|
|
117
|
+
"country.select": "Select country…",
|
|
118
|
+
|
|
119
|
+
// ── media uploader ──────────────────────────────────────────────
|
|
120
|
+
"media.add_images": "Add images",
|
|
121
|
+
"media.set_image": "Set image",
|
|
122
|
+
|
|
123
|
+
// ── meta-data editor ────────────────────────────────────────────
|
|
124
|
+
"meta.add_field": "Add field",
|
|
125
|
+
"meta.key": "Key",
|
|
126
|
+
"meta.value": "Value",
|
|
127
|
+
|
|
128
|
+
// ── first-run setup screen ──────────────────────────────────────
|
|
129
|
+
"setup.description": "This looks like a fresh installation. Initialize the store with default settings (currency, tax classes, payment methods, shipping zone and email configuration) to start using the admin.",
|
|
130
|
+
"setup.run": "Initialize store defaults",
|
|
131
|
+
"setup.sample_hint": "Adds demo categories, 10 products (three with size/colour variants, one downloadable) and coupons so you can explore the admin.",
|
|
132
|
+
"setup.sample_label": "Include sample data",
|
|
133
|
+
"setup.schema_error_description": "The entity schemas in this app have been modified in a way that prevents seeding. Restore the template schemas or fix the fields below, then retry.",
|
|
134
|
+
"setup.schema_error_title": "Entity schemas are incompatible",
|
|
135
|
+
"setup.store_name": "Store name",
|
|
136
|
+
"setup.store_name_hint": "Used in the subject and as the sender name on every transactional email. Editable later in Settings → Emails.",
|
|
137
|
+
"setup.store_name_placeholder": "Your store's name",
|
|
138
|
+
"setup.success": "Store defaults initialized",
|
|
139
|
+
"setup.title": "Set up your store",
|
|
140
|
+
|
|
141
|
+
// ── status enums ────────────────────────────────────────────────
|
|
142
|
+
"status.order.cancelled": "Cancelled",
|
|
143
|
+
"status.order.completed": "Completed",
|
|
144
|
+
"status.order.failed": "Failed",
|
|
145
|
+
"status.order.on-hold": "On hold",
|
|
146
|
+
"status.order.pending": "Pending payment",
|
|
147
|
+
"status.order.processing": "Processing",
|
|
148
|
+
"status.order.refunded": "Refunded",
|
|
149
|
+
"status.product.draft": "Draft",
|
|
150
|
+
"status.product.pending": "Pending review",
|
|
151
|
+
"status.product.private": "Private",
|
|
152
|
+
"status.product.publish": "Published",
|
|
153
|
+
"status.review.approved": "Approved",
|
|
154
|
+
"status.review.hold": "Pending",
|
|
155
|
+
"status.review.spam": "Spam",
|
|
156
|
+
"status.review.trash": "Trash",
|
|
157
|
+
"status.stock.instock": "In stock",
|
|
158
|
+
"status.stock.onbackorder": "On backorder",
|
|
159
|
+
"status.stock.outofstock": "Out of stock",
|
|
160
|
+
"status.webhook.active": "Active",
|
|
161
|
+
"status.webhook.disabled": "Disabled",
|
|
162
|
+
"status.webhook.paused": "Paused",
|
|
163
|
+
|
|
164
|
+
// ── backorder options ───────────────────────────────────────────
|
|
165
|
+
"backorder.no": "Do not allow",
|
|
166
|
+
"backorder.notify": "Allow, but notify customer",
|
|
167
|
+
"backorder.yes": "Allow",
|
|
168
|
+
|
|
169
|
+
// ── tax status ──────────────────────────────────────────────────
|
|
170
|
+
"tax_status.none": "None",
|
|
171
|
+
"tax_status.taxable": "Taxable",
|
|
172
|
+
|
|
173
|
+
// ── coupon types ────────────────────────────────────────────────
|
|
174
|
+
"coupon_type.fixed_cart": "Fixed cart discount",
|
|
175
|
+
"coupon_type.fixed_product": "Fixed product discount",
|
|
176
|
+
"coupon_type.percent": "Percentage discount",
|
|
177
|
+
|
|
178
|
+
// ── transactional emails ────────────────────────────────────────
|
|
179
|
+
"email_type.cancelled_order": "Cancelled order",
|
|
180
|
+
"email_type.completed_order": "Completed order",
|
|
181
|
+
"email_type.customer_invoice": "Customer invoice / Order details",
|
|
182
|
+
"email_type.customer_note": "Customer note",
|
|
183
|
+
"email_type.failed_order": "Failed order",
|
|
184
|
+
"email_type.low_stock": "Low stock",
|
|
185
|
+
"email_type.new_account": "New account",
|
|
186
|
+
"email_type.new_order": "New order",
|
|
187
|
+
"email_type.on_hold_order": "Order on-hold",
|
|
188
|
+
"email_type.out_of_stock": "Out of stock",
|
|
189
|
+
"email_type.processing_order": "Processing order",
|
|
190
|
+
"email_type.refunded_order": "Refunded order",
|
|
191
|
+
"email_type.reset_password": "Reset password",
|
|
192
|
+
|
|
193
|
+
// ── dashboard ───────────────────────────────────────────────────
|
|
194
|
+
"dashboard.all_stocked_description": "No products are low on stock.",
|
|
195
|
+
"dashboard.all_stocked_title": "All stocked up",
|
|
196
|
+
"dashboard.awaiting_processing": "Awaiting processing",
|
|
197
|
+
"dashboard.create_coupon": "Create coupon",
|
|
198
|
+
"dashboard.date": "Date",
|
|
199
|
+
"dashboard.latest_orders": "Latest orders",
|
|
200
|
+
"dashboard.low_on_stock": "Low on stock",
|
|
201
|
+
"dashboard.low_stock": "Low stock",
|
|
202
|
+
"dashboard.low_stock_hint": "products at or below threshold",
|
|
203
|
+
"dashboard.n_left": "{count} left",
|
|
204
|
+
"dashboard.net_sales_month": "Net sales this month",
|
|
205
|
+
"dashboard.net_sales_today": "Net sales today",
|
|
206
|
+
"dashboard.no_orders_description": "Orders will appear here as soon as they come in.",
|
|
207
|
+
"dashboard.no_orders_title": "No orders yet",
|
|
208
|
+
"dashboard.orders_to_fulfill": "orders to fulfill",
|
|
209
|
+
"dashboard.sku": "SKU: {sku}",
|
|
210
|
+
"dashboard.status_count": "{status}: {count}",
|
|
211
|
+
"dashboard.subtitle": "Your store at a glance.",
|
|
212
|
+
"dashboard.total": "Total",
|
|
213
|
+
"dashboard.view_reports": "View reports",
|
|
214
|
+
|
|
215
|
+
// ── orders ──────────────────────────────────────────────────────
|
|
216
|
+
"orders.add_fee": "Add fee",
|
|
217
|
+
"orders.add_note_placeholder": "Add a note…",
|
|
218
|
+
"orders.add_products": "Add product(s)",
|
|
219
|
+
"orders.add_shipping": "Add shipping",
|
|
220
|
+
"orders.add_to_order": "Add to order",
|
|
221
|
+
"orders.addr_billing": "billing",
|
|
222
|
+
"orders.addr_shipping": "shipping",
|
|
223
|
+
"orders.all": "All",
|
|
224
|
+
"orders.already_customer_linked": "{name} is already a customer — linked. Save the order to keep the link.",
|
|
225
|
+
"orders.and_separator": " and ",
|
|
226
|
+
"orders.apply": "Apply",
|
|
227
|
+
"orders.apply_coupon": "Apply coupon",
|
|
228
|
+
"orders.apply_coupon_dirty_tip": "Saves your pending changes, then applies the coupon",
|
|
229
|
+
"orders.available_to_refund": "Total available to refund:",
|
|
230
|
+
"orders.awaiting_payment": "Awaiting payment",
|
|
231
|
+
"orders.billing": "Billing",
|
|
232
|
+
"orders.change_status_to": "Change status to…",
|
|
233
|
+
"orders.check_payment": "Check payment",
|
|
234
|
+
"orders.choose_variation": "Choose a variation…",
|
|
235
|
+
"orders.close_refund": "Close refund",
|
|
236
|
+
"orders.copy_failed": "Could not copy — select the link and copy it manually",
|
|
237
|
+
"orders.copy_from_billing": "Copy the billing address into shipping",
|
|
238
|
+
"orders.copy_link": "Copy link",
|
|
239
|
+
"orders.cost": "Cost",
|
|
240
|
+
"orders.coupon_applied": "Coupon {code} applied",
|
|
241
|
+
"orders.coupon_code": "Coupon code",
|
|
242
|
+
"orders.coupon_code_placeholder": "e.g. welcome10",
|
|
243
|
+
"orders.coupon_removed": "Coupon {code} removed",
|
|
244
|
+
"orders.coupons_codes": "Coupon(s): {codes}",
|
|
245
|
+
"orders.coupons_label": "Coupons:",
|
|
246
|
+
"orders.create_payment_link": "Create payment link",
|
|
247
|
+
"orders.custom_fields": "Custom fields",
|
|
248
|
+
"orders.customer_created": "Customer {name} created. Save the order to keep the link.",
|
|
249
|
+
"orders.customer_load_failed": "Could not load that customer record",
|
|
250
|
+
"orders.customer_no_saved_address": "That customer has no saved address",
|
|
251
|
+
"orders.customer_provided_note": "Customer provided note",
|
|
252
|
+
"orders.date": "Date",
|
|
253
|
+
"orders.delete_note": "Delete note",
|
|
254
|
+
"orders.delete_order": "Delete order",
|
|
255
|
+
"orders.delete_order_description": "Only pending, cancelled or failed orders can be deleted. This cannot be undone.",
|
|
256
|
+
"orders.delete_order_title": "Delete order #{number}?",
|
|
257
|
+
"orders.deleted": "Order deleted",
|
|
258
|
+
"orders.discount": "Discount",
|
|
259
|
+
"orders.download_granted": "Download access granted",
|
|
260
|
+
"orders.download_permissions": "Downloadable product permissions",
|
|
261
|
+
"orders.download_revoked": "Download access revoked",
|
|
262
|
+
"orders.empty_description": "Orders will appear here as they come in.",
|
|
263
|
+
"orders.empty_search_hint": "Try adjusting your search or date range.",
|
|
264
|
+
"orders.empty_title": "No orders found",
|
|
265
|
+
"orders.expires": "Expires",
|
|
266
|
+
"orders.fee": "Fee",
|
|
267
|
+
"orders.fee_name": "Fee name",
|
|
268
|
+
"orders.fees": "Fees",
|
|
269
|
+
"orders.file": "File",
|
|
270
|
+
"orders.filled_from": "Filled {parts} from {name}",
|
|
271
|
+
"orders.from_billing": "From billing",
|
|
272
|
+
"orders.general": "General",
|
|
273
|
+
"orders.grant_access": "Grant access",
|
|
274
|
+
"orders.guest_order": "Guest order",
|
|
275
|
+
"orders.guest_order_hint": "Guest order. Pick a customer to fill the addresses from their record, or enter the details below — the billing email is where this order's emails go.",
|
|
276
|
+
"orders.guest_order_needs_email": "Guest order — needs a billing email",
|
|
277
|
+
"orders.guest_search_customers": "Guest — search customers…",
|
|
278
|
+
"orders.invoice_sent": "Order details sent to customer",
|
|
279
|
+
"orders.item": "Item",
|
|
280
|
+
"orders.items": "Items",
|
|
281
|
+
"orders.items_subtotal": "Items subtotal",
|
|
282
|
+
"orders.kept_existing_addresses": "Kept the addresses already on this order — use “Use customer's addresses” to replace them.",
|
|
283
|
+
"orders.link_copied": "Link copied",
|
|
284
|
+
"orders.link_sets_method": "Sending a payment link sets this order to card payment.",
|
|
285
|
+
"orders.link_switches_method": "Sending a payment link switches this order from {method} to card payment.",
|
|
286
|
+
"orders.loading_variations": "Loading variations…",
|
|
287
|
+
"orders.method": "Method",
|
|
288
|
+
"orders.method_title": "Method title",
|
|
289
|
+
"orders.n_orders": "{count} order(s)",
|
|
290
|
+
"orders.n_updated": "{count} order(s) updated",
|
|
291
|
+
"orders.net_payment": "Net payment",
|
|
292
|
+
"orders.never": "Never",
|
|
293
|
+
"orders.new_payment_link": "New payment link",
|
|
294
|
+
"orders.no_address_set": "No address set.",
|
|
295
|
+
"orders.no_card_payment_tip": "This order has no card payment on record to refund",
|
|
296
|
+
"orders.no_download_permissions": "No download permissions on this order.",
|
|
297
|
+
"orders.no_items": "No items.",
|
|
298
|
+
"orders.no_items_hint": "Use “Add product(s)” below.",
|
|
299
|
+
"orders.no_notes": "No notes yet.",
|
|
300
|
+
"orders.no_payment_method_hint": "No payment method is set on this order. Take payment outside the store and move it to Processing, or send the customer a payment link.",
|
|
301
|
+
"orders.no_payment_yet": "No payment received yet",
|
|
302
|
+
"orders.no_saved_address_enter_below": "{name} has no saved address — enter the details below.",
|
|
303
|
+
"orders.no_variations": "This product has no variations yet.",
|
|
304
|
+
"orders.not_found": "Order not found.",
|
|
305
|
+
"orders.note_added": "Note added",
|
|
306
|
+
"orders.note_sent": "Note sent to customer",
|
|
307
|
+
"orders.note_to_customer": "Note to customer",
|
|
308
|
+
"orders.open": "Open",
|
|
309
|
+
"orders.open_customer": "Open customer",
|
|
310
|
+
"orders.order_actions": "Order actions",
|
|
311
|
+
"orders.order_notes": "Order notes",
|
|
312
|
+
"orders.order_number": "Order #",
|
|
313
|
+
"orders.order_total": "Order total",
|
|
314
|
+
"orders.paid": "Paid",
|
|
315
|
+
"orders.pay_outside_hint": "This order is set to be paid outside the store ({method}), so mark it paid by moving it to Processing once the money arrives.",
|
|
316
|
+
"orders.payment": "Payment",
|
|
317
|
+
"orders.payment_confirmed": "Payment confirmed",
|
|
318
|
+
"orders.payment_link_created": "Payment link created",
|
|
319
|
+
"orders.payment_link_hint": "Send this to the customer — it opens the provider's secure payment page. The order updates itself once they pay.",
|
|
320
|
+
"orders.placed_via": "{date} via {via}",
|
|
321
|
+
"orders.preview_failed": "Could not price these changes:",
|
|
322
|
+
"orders.preview_failed_generic": "Could not price these changes",
|
|
323
|
+
"orders.previous_refunds": "Previous refunds",
|
|
324
|
+
"orders.pricing_changes": "Pricing your changes…",
|
|
325
|
+
"orders.private_note": "Private note",
|
|
326
|
+
"orders.product": "Product",
|
|
327
|
+
"orders.qty": "Qty",
|
|
328
|
+
"orders.quantity": "Quantity",
|
|
329
|
+
"orders.recalculate": "Recalculate",
|
|
330
|
+
"orders.recalculate_dirty_tip": "Saves your pending changes, then re-runs tax and totals against the current settings",
|
|
331
|
+
"orders.recalculate_tip": "Re-run tax and totals against the current settings",
|
|
332
|
+
"orders.recalculated": "Totals recalculated",
|
|
333
|
+
"orders.reference": "Reference",
|
|
334
|
+
"orders.refund": "Refund",
|
|
335
|
+
"orders.refund_amount": "Refund",
|
|
336
|
+
"orders.refund_over_max": "Amount exceeds the refundable total.",
|
|
337
|
+
"orders.refund_reason": "Reason for refund (optional)",
|
|
338
|
+
"orders.refund_shipping": "Refund shipping",
|
|
339
|
+
"orders.refund_via_provider": "Send the money back through the payment provider",
|
|
340
|
+
"orders.refunded": "Refunded",
|
|
341
|
+
"orders.refunded_amount": "Refunded {amount}",
|
|
342
|
+
"orders.refunded_by": "by {name}",
|
|
343
|
+
"orders.refunded_via_provider": "Refunded {amount} through the payment provider",
|
|
344
|
+
"orders.remaining": "Remaining",
|
|
345
|
+
"orders.remove_coupon": "Remove coupon",
|
|
346
|
+
"orders.replaced_from_customer": "Replaced {parts} from the customer record",
|
|
347
|
+
"orders.restock_items": "Restock refunded items",
|
|
348
|
+
"orders.revoke": "Revoke",
|
|
349
|
+
"orders.save_and_recalculate": "Save & recalculate",
|
|
350
|
+
"orders.save_as_customer": "Save as customer",
|
|
351
|
+
"orders.save_as_customer_needs_email_tip": "Add a billing email below to save these details as a customer",
|
|
352
|
+
"orders.save_as_customer_tip": "Create a customer from the billing details below and link this order to it",
|
|
353
|
+
"orders.save_order": "Save order",
|
|
354
|
+
"orders.saved": "Order saved",
|
|
355
|
+
"orders.saved_recalculated": "Order saved and totals recalculated",
|
|
356
|
+
"orders.search_downloadable": "Search downloadable products…",
|
|
357
|
+
"orders.search_placeholder": "Search order #, name, email…",
|
|
358
|
+
"orders.search_products": "Search products…",
|
|
359
|
+
"orders.send_details": "Send order details to customer",
|
|
360
|
+
"orders.sent_to_customer": "· sent to customer",
|
|
361
|
+
"orders.shipping": "Shipping",
|
|
362
|
+
"orders.sku": "SKU: {sku}",
|
|
363
|
+
"orders.system": "· system",
|
|
364
|
+
"orders.tax": "Tax",
|
|
365
|
+
"orders.total": "Total",
|
|
366
|
+
"orders.unsaved_totals": "Unsaved — totals below include your changes",
|
|
367
|
+
"orders.use_customer_addresses": "Use customer's addresses",
|
|
368
|
+
"orders.use_customer_addresses_tip": "Replace the order's billing and shipping with the customer's saved addresses",
|
|
369
|
+
"orders.used_count": "(used {count})",
|
|
370
|
+
"orders.variation": "Variation",
|
|
371
|
+
"orders.view_edit": "View / edit",
|
|
372
|
+
|
|
373
|
+
// ── products ────────────────────────────────────────────────────
|
|
374
|
+
"products.add_file": "Add file",
|
|
375
|
+
"products.add_gallery_images": "Add gallery images",
|
|
376
|
+
"products.add_new": "Add new",
|
|
377
|
+
"products.add_new_category": "Add new category",
|
|
378
|
+
"products.add_new_product": "Add new product",
|
|
379
|
+
"products.add_new_ribbon": "Add new ribbon",
|
|
380
|
+
"products.add_option_placeholder": "Add option…",
|
|
381
|
+
"products.add_value": "Add value",
|
|
382
|
+
"products.all_categories": "All categories",
|
|
383
|
+
"products.all_stock": "All stock",
|
|
384
|
+
"products.backorders": "Backorders",
|
|
385
|
+
"products.bulk_copied": "Copied to {count} variant(s).",
|
|
386
|
+
"products.bulk_price_set": "Price set on {count} variant(s).",
|
|
387
|
+
"products.bulk_stock_set": "Stock set on {count} variant(s).",
|
|
388
|
+
"products.category_create_failed": "Failed to create category",
|
|
389
|
+
"products.category_created": "Category created",
|
|
390
|
+
"products.category_name_placeholder": "Category name",
|
|
391
|
+
"products.clear": "Clear",
|
|
392
|
+
"products.code": "Code",
|
|
393
|
+
"products.confirm_delete_bulk": "Delete {count} product(s)?",
|
|
394
|
+
"products.confirm_delete_description": "This permanently deletes the product and its variations.",
|
|
395
|
+
"products.confirm_delete_one": "Delete “{name}”?",
|
|
396
|
+
"products.confirm_delete_this": "Delete this product?",
|
|
397
|
+
"products.confirm_remove_option": "Remove the “{name}” option?",
|
|
398
|
+
"products.confirm_remove_option_all": "This deletes all {count} variant(s) with their prices, stock and SKUs.",
|
|
399
|
+
"products.confirm_remove_option_rebuild": "The variant list is rebuilt without it — prices, stock and SKUs of the current {count} variant(s) may be lost.",
|
|
400
|
+
"products.confirm_remove_values": "Remove {values}?",
|
|
401
|
+
"products.confirm_remove_values_description": "This deletes {count} variant(s). Their prices, stock and SKUs will be lost when you save.",
|
|
402
|
+
"products.confirm_remove_values_description_stock": "This deletes {count} variant(s) and their {stock} units of stock. Their prices, stock and SKUs will be lost when you save.",
|
|
403
|
+
"products.copy_to_selected": "Copy to selected",
|
|
404
|
+
"products.create_named": "Create “{name}”",
|
|
405
|
+
"products.created": "Product created",
|
|
406
|
+
"products.cross_sells": "Cross-sells",
|
|
407
|
+
"products.cross_sells_hint": "Promoted in the cart alongside this product.",
|
|
408
|
+
"products.cross_sells_placeholder": "Search for products to cross-sell…",
|
|
409
|
+
"products.date": "Date",
|
|
410
|
+
"products.default": "Default",
|
|
411
|
+
"products.default_value_name": "Value {number}",
|
|
412
|
+
"products.delete_count": "Delete ({count})",
|
|
413
|
+
"products.delete_product": "Delete product",
|
|
414
|
+
"products.delete_variants": "Delete variants",
|
|
415
|
+
"products.deleted": "Product deleted",
|
|
416
|
+
"products.deleted_product": "(deleted product)",
|
|
417
|
+
"products.description_placeholder": "Full product description (HTML allowed)",
|
|
418
|
+
"products.dimensions_with_unit": "Dimensions L×W×H ({unit})",
|
|
419
|
+
"products.done": "Done",
|
|
420
|
+
"products.download_expiry": "Download expiry (days)",
|
|
421
|
+
"products.download_expiry_hint": "-1 for no expiry.",
|
|
422
|
+
"products.download_limit": "Download limit",
|
|
423
|
+
"products.download_limit_hint": "-1 for unlimited downloads.",
|
|
424
|
+
"products.download_name_placeholder": "e.g. User manual",
|
|
425
|
+
"products.downloadable": "Downloadable",
|
|
426
|
+
"products.downloadable_files": "Downloadable files",
|
|
427
|
+
"products.downloads": "Downloads",
|
|
428
|
+
"products.duplicate": "Duplicate",
|
|
429
|
+
"products.duplicated": "Product duplicated",
|
|
430
|
+
"products.empty_create": "Create your first product to get started.",
|
|
431
|
+
"products.empty_search": "Try a different search or filter.",
|
|
432
|
+
"products.empty_title": "No products found",
|
|
433
|
+
"products.enable_variant": "Enable {name}",
|
|
434
|
+
"products.enabled": "Enabled",
|
|
435
|
+
"products.featured_product": "Featured product",
|
|
436
|
+
"products.file": "File",
|
|
437
|
+
"products.file_url": "File URL",
|
|
438
|
+
"products.from_price": "from {price}",
|
|
439
|
+
"products.has_variants": "Has variants",
|
|
440
|
+
"products.image": "Image",
|
|
441
|
+
"products.linked_products": "Linked products",
|
|
442
|
+
"products.load_failed": "Failed to load product",
|
|
443
|
+
"products.low_stock_threshold": "Low stock threshold",
|
|
444
|
+
"products.lowest_enabled_variant": "(lowest enabled variant)",
|
|
445
|
+
"products.make_default": "Make {name} the default",
|
|
446
|
+
"products.manage_catalog": "Manage your catalog",
|
|
447
|
+
"products.manage_option_catalog": "Manage option catalog (affects all products)",
|
|
448
|
+
"products.max_one_per_order": "max 1 per order",
|
|
449
|
+
"products.modifiers_empty_hint": "Want the product to vary by something? Add it as an option under Price & Inventory.",
|
|
450
|
+
"products.modifiers_hint": "Descriptive details shown on the product page (e.g. ingredients, allergens, care instructions).",
|
|
451
|
+
"products.more_fields": "More fields (image, sale, shipping)",
|
|
452
|
+
"products.move_down": "Move down",
|
|
453
|
+
"products.move_up": "Move up",
|
|
454
|
+
"products.n_deleted": "{count} product(s) deleted",
|
|
455
|
+
"products.name_placeholder": "Product name",
|
|
456
|
+
"products.name_required": "Product name is required",
|
|
457
|
+
"products.new_option": "New option",
|
|
458
|
+
"products.new_option_placeholder": "e.g. Fabric",
|
|
459
|
+
"products.no_categories": "No categories yet.",
|
|
460
|
+
"products.no_options": "No options yet.",
|
|
461
|
+
"products.no_parent": "— None —",
|
|
462
|
+
"products.no_title": "(no title)",
|
|
463
|
+
"products.no_values": "No values yet.",
|
|
464
|
+
"products.no_variants_description": "Pick the values this product comes in for the option above and its variants appear here automatically.",
|
|
465
|
+
"products.no_variants_title": "No variants yet — customers can't buy this product",
|
|
466
|
+
"products.not_tracked": "Not tracked — type a quantity to track",
|
|
467
|
+
"products.option_catalog": "Option catalog",
|
|
468
|
+
"products.option_catalog_hint": "Shared across every product — changes save immediately. To delete an option or a value, remove it from the entity data.",
|
|
469
|
+
"products.options": "Options",
|
|
470
|
+
"products.options_empty": "No options yet. Add one (Size, Color, Pack…) and pick the values this product comes in.",
|
|
471
|
+
"products.options_hint": "What this product comes in — each combination of values becomes a variant below.",
|
|
472
|
+
"products.order": "Order",
|
|
473
|
+
"products.parent": "Parent",
|
|
474
|
+
"products.price": "Price",
|
|
475
|
+
"products.price_inventory": "Price & Inventory",
|
|
476
|
+
"products.product_data": "Product data",
|
|
477
|
+
"products.product_gallery": "Product gallery",
|
|
478
|
+
"products.product_image": "Product image",
|
|
479
|
+
"products.publish": "Publish",
|
|
480
|
+
"products.qty": "Qty",
|
|
481
|
+
"products.quick_edit": "Quick edit",
|
|
482
|
+
"products.regular_price": "Regular price",
|
|
483
|
+
"products.remove_from_product": "Remove from this product",
|
|
484
|
+
"products.remove_option": "Remove option",
|
|
485
|
+
"products.remove_variants": "Remove variants",
|
|
486
|
+
"products.ribbon_create_failed": "Failed to create ribbon",
|
|
487
|
+
"products.ribbon_created": "Ribbon created",
|
|
488
|
+
"products.ribbons": "Ribbons",
|
|
489
|
+
"products.sale_end": "Sale end",
|
|
490
|
+
"products.sale_price": "Sale price",
|
|
491
|
+
"products.sale_start": "Sale start",
|
|
492
|
+
"products.saved": "Product saved",
|
|
493
|
+
"products.schedule_sale": "Schedule sale",
|
|
494
|
+
"products.search_placeholder": "Search products…",
|
|
495
|
+
"products.section_files": "Files",
|
|
496
|
+
"products.section_inventory": "Inventory",
|
|
497
|
+
"products.section_price": "Price",
|
|
498
|
+
"products.section_sale": "Sale",
|
|
499
|
+
"products.section_shipping": "Shipping",
|
|
500
|
+
"products.section_type": "Type",
|
|
501
|
+
"products.select_all_variants": "Select all variants",
|
|
502
|
+
"products.select_ribbons": "Select ribbons",
|
|
503
|
+
"products.select_variant": "Select {name}",
|
|
504
|
+
"products.set_price": "Set price",
|
|
505
|
+
"products.set_product_image": "Set product image",
|
|
506
|
+
"products.set_stock": "Set stock",
|
|
507
|
+
"products.short_description": "Short description",
|
|
508
|
+
"products.short_description_placeholder": "Short summary shown in listings",
|
|
509
|
+
"products.single_hint": "One price, one stock count. Switch if it comes in sizes, packs or colors.",
|
|
510
|
+
"products.single_product": "Single product",
|
|
511
|
+
"products.sku": "SKU",
|
|
512
|
+
"products.sku_line": "SKU: {sku}",
|
|
513
|
+
"products.sku_placeholder": "Unique stock keeping unit",
|
|
514
|
+
"products.slug_label": "Slug:",
|
|
515
|
+
"products.sold_individually": "Limit purchases to 1 item per order",
|
|
516
|
+
"products.specifications": "Specifications",
|
|
517
|
+
"products.stock": "Stock",
|
|
518
|
+
"products.stock_dont_track": "Don't track",
|
|
519
|
+
"products.stock_management": "Stock management",
|
|
520
|
+
"products.stock_quantity": "Stock quantity",
|
|
521
|
+
"products.stock_same_as_product": "Same as product",
|
|
522
|
+
"products.stock_status": "Stock status",
|
|
523
|
+
"products.stock_track_quantity": "Track quantity",
|
|
524
|
+
"products.store_default": "Store default",
|
|
525
|
+
"products.store_price": "Store price:",
|
|
526
|
+
"products.switch_single_description": "This removes {count} variant(s) and their stock and prices. The product keeps one price and one stock count.",
|
|
527
|
+
"products.switch_single_title": "Switch to a single product?",
|
|
528
|
+
"products.tax_group": "Tax group",
|
|
529
|
+
"products.tax_purchase_rules": "Tax & purchase rules",
|
|
530
|
+
"products.tax_status": "Tax status",
|
|
531
|
+
"products.toggle_featured": "Toggle featured",
|
|
532
|
+
"products.track_stock_quantity": "Track stock quantity",
|
|
533
|
+
"products.tracked_quantity": "Tracked quantity",
|
|
534
|
+
"products.updated": "Product updated",
|
|
535
|
+
"products.upload_file": "Upload file",
|
|
536
|
+
"products.upsells": "Upsells",
|
|
537
|
+
"products.upsells_hint": "Recommended instead of this product, e.g. premium alternatives.",
|
|
538
|
+
"products.upsells_placeholder": "Search for products to upsell…",
|
|
539
|
+
"products.values": "Values",
|
|
540
|
+
"products.values_placeholder": "Values this product comes in…",
|
|
541
|
+
"products.variant": "Variant",
|
|
542
|
+
"products.variant_count": "{count} variant(s)",
|
|
543
|
+
"products.variants_hint": "Each combination of option values becomes a variant with its own price, stock and SKU.",
|
|
544
|
+
"products.virtual": "Virtual",
|
|
545
|
+
"products.visible": "Visible",
|
|
546
|
+
"products.visible_off": "Hidden — saved as a draft",
|
|
547
|
+
"products.visible_on": "Shown in the store",
|
|
548
|
+
"products.weight_with_unit": "Weight ({unit})",
|
|
549
|
+
|
|
550
|
+
// ── categories ──────────────────────────────────────────────────
|
|
551
|
+
"categories.add": "Add category",
|
|
552
|
+
"categories.added": "Category added",
|
|
553
|
+
"categories.confirm_delete_description": "Products in this category are not deleted; they simply lose the category. This cannot be undone.",
|
|
554
|
+
"categories.confirm_delete_title": "Delete “{name}”?",
|
|
555
|
+
"categories.deleted": "Category deleted",
|
|
556
|
+
"categories.description": "Organize products into categories",
|
|
557
|
+
"categories.empty": "No categories yet — add the first one below.",
|
|
558
|
+
"categories.name_placeholder": "Category name",
|
|
559
|
+
"categories.order": "Order",
|
|
560
|
+
"categories.saved": "Category saved",
|
|
561
|
+
"categories.slug": "Slug",
|
|
562
|
+
"categories.slug_placeholder": "auto from name",
|
|
563
|
+
|
|
564
|
+
// ── reviews ─────────────────────────────────────────────────────
|
|
565
|
+
"reviews.anonymous": "Anonymous",
|
|
566
|
+
"reviews.approve": "Approve",
|
|
567
|
+
"reviews.author": "Author",
|
|
568
|
+
"reviews.auto_approve_label": "Auto-approve new reviews",
|
|
569
|
+
"reviews.auto_approve_off": "New reviews are held for moderation",
|
|
570
|
+
"reviews.auto_approve_on": "New reviews publish immediately",
|
|
571
|
+
"reviews.confirm_delete_bulk": "Delete {count} review(s)?",
|
|
572
|
+
"reviews.confirm_delete_description": "This permanently removes the review.",
|
|
573
|
+
"reviews.confirm_delete_one": "Delete this review?",
|
|
574
|
+
"reviews.date": "Date",
|
|
575
|
+
"reviews.delete_permanently": "Delete permanently",
|
|
576
|
+
"reviews.deleted": "Review deleted",
|
|
577
|
+
"reviews.deleted_plural": "Reviews deleted",
|
|
578
|
+
"reviews.deleted_product": "(deleted product)",
|
|
579
|
+
"reviews.edit_review": "Edit review",
|
|
580
|
+
"reviews.empty_description": "Reviews submitted by customers appear here.",
|
|
581
|
+
"reviews.empty_title": "No reviews",
|
|
582
|
+
"reviews.hold": "Hold",
|
|
583
|
+
"reviews.page_description": "Moderate customer product reviews",
|
|
584
|
+
"reviews.product": "Product",
|
|
585
|
+
"reviews.rating": "Rating",
|
|
586
|
+
"reviews.rating_only": "Rating only — no text",
|
|
587
|
+
"reviews.review": "Review",
|
|
588
|
+
"reviews.save_failed": "Failed to save",
|
|
589
|
+
"reviews.tab_all": "All",
|
|
590
|
+
"reviews.updated": "Review updated",
|
|
591
|
+
"reviews.updated_plural": "Reviews updated",
|
|
592
|
+
"reviews.verified_owner": "✓ Verified owner",
|
|
593
|
+
|
|
594
|
+
// ── coupons ─────────────────────────────────────────────────────
|
|
595
|
+
"coupons.allowed_emails": "Allowed emails",
|
|
596
|
+
"coupons.allowed_emails_hint": "Only these addresses can use the coupon. Leave empty to allow anyone.",
|
|
597
|
+
"coupons.amount_label": "Amount",
|
|
598
|
+
"coupons.amount_label_percent": "Percentage",
|
|
599
|
+
"coupons.amount_required": "A discount amount is required",
|
|
600
|
+
"coupons.any_category": "Any category",
|
|
601
|
+
"coupons.any_product": "Any product",
|
|
602
|
+
"coupons.apply_all_items": "Apply to all qualifying items",
|
|
603
|
+
"coupons.code": "Code",
|
|
604
|
+
"coupons.code_placeholder": "e.g. SUMMER20",
|
|
605
|
+
"coupons.code_required": "A coupon code is required",
|
|
606
|
+
"coupons.confirm_delete_description": "Customers will no longer be able to use it. This cannot be undone.",
|
|
607
|
+
"coupons.confirm_delete_many": "Delete {count} coupon(s)?",
|
|
608
|
+
"coupons.confirm_delete_one": "Delete this coupon?",
|
|
609
|
+
"coupons.coupon_code": "Coupon code",
|
|
610
|
+
"coupons.coupon_expiry_date": "Coupon expiry date",
|
|
611
|
+
"coupons.create": "Create coupon",
|
|
612
|
+
"coupons.delete_selected": "Delete selected ({count})",
|
|
613
|
+
"coupons.deleted": "Coupon deleted",
|
|
614
|
+
"coupons.description_optional": "Description (optional)",
|
|
615
|
+
"coupons.disabled": "Disabled",
|
|
616
|
+
"coupons.disabled_hint": "Disabled — customers can't apply this coupon, and carts holding it drop it.",
|
|
617
|
+
"coupons.discount_type": "Discount type",
|
|
618
|
+
"coupons.email_chips_placeholder": "email@example.com or *@example.com — press Enter",
|
|
619
|
+
"coupons.empty_description": "Coupons let you offer discounts at checkout.",
|
|
620
|
+
"coupons.empty_title": "No coupons yet",
|
|
621
|
+
"coupons.enabled": "Enabled",
|
|
622
|
+
"coupons.exclude_categories": "Exclude categories",
|
|
623
|
+
"coupons.exclude_products": "Exclude products",
|
|
624
|
+
"coupons.exclude_sale_items": "Exclude sale items",
|
|
625
|
+
"coupons.exclude_sale_items_hint": "The coupon will not apply to items on sale.",
|
|
626
|
+
"coupons.expiry_date": "Expiry date",
|
|
627
|
+
"coupons.free_shipping": "Allow free shipping",
|
|
628
|
+
"coupons.free_shipping_hint": "Grants access to free-shipping methods that require a coupon.",
|
|
629
|
+
"coupons.general": "General",
|
|
630
|
+
"coupons.generate": "Generate",
|
|
631
|
+
"coupons.individual_use": "Individual use only",
|
|
632
|
+
"coupons.individual_use_hint": "Cannot be used in conjunction with other coupons.",
|
|
633
|
+
"coupons.limit_usage_items": "Limit usage to X items",
|
|
634
|
+
"coupons.limit_usage_items_hint": "Maximum number of individual items the coupon applies to (product discounts).",
|
|
635
|
+
"coupons.maximum_spend": "Maximum spend ({code})",
|
|
636
|
+
"coupons.minimum_spend": "Minimum spend ({code})",
|
|
637
|
+
"coupons.n_deleted": "{count} coupon(s) deleted",
|
|
638
|
+
"coupons.no_exclusions": "No exclusions",
|
|
639
|
+
"coupons.no_maximum": "No maximum",
|
|
640
|
+
"coupons.no_minimum": "No minimum",
|
|
641
|
+
"coupons.product_categories": "Product categories",
|
|
642
|
+
"coupons.publish": "Publish",
|
|
643
|
+
"coupons.save": "Save coupon",
|
|
644
|
+
"coupons.saved": "Coupon saved",
|
|
645
|
+
"coupons.search_placeholder": "Search coupons…",
|
|
646
|
+
"coupons.subtitle": "Create and manage discount codes.",
|
|
647
|
+
"coupons.title_with_code": "Coupon: {code}",
|
|
648
|
+
"coupons.unlimited": "Unlimited",
|
|
649
|
+
"coupons.usage_limit_col": "Usage / Limit",
|
|
650
|
+
"coupons.usage_limit_per_coupon": "Usage limit per coupon",
|
|
651
|
+
"coupons.usage_limit_per_coupon_hint": "How many times the coupon can be used in total.",
|
|
652
|
+
"coupons.usage_limit_per_user": "Usage limit per user",
|
|
653
|
+
"coupons.usage_limit_per_user_hint": "How many times a single customer (by billing email) can use it.",
|
|
654
|
+
"coupons.usage_limits": "Usage limits",
|
|
655
|
+
"coupons.usage_restriction": "Usage restriction",
|
|
656
|
+
"coupons.used_times": "Used: {count}",
|
|
657
|
+
|
|
658
|
+
// ── customers ───────────────────────────────────────────────────
|
|
659
|
+
"customers.account": "Account",
|
|
660
|
+
"customers.average_order_value": "Average order value",
|
|
661
|
+
"customers.billing_address": "Billing address",
|
|
662
|
+
"customers.confirm_delete_description": "Their orders are kept and reassigned to Guest. This cannot be undone.",
|
|
663
|
+
"customers.confirm_delete_title": "Delete this customer?",
|
|
664
|
+
"customers.copied_from_billing": "Copied from billing",
|
|
665
|
+
"customers.copy_from_billing": "Copy from billing",
|
|
666
|
+
"customers.create": "Create customer",
|
|
667
|
+
"customers.custom_fields": "Custom fields",
|
|
668
|
+
"customers.deleted": "Customer deleted",
|
|
669
|
+
"customers.email_address_required": "Email address *",
|
|
670
|
+
"customers.email_required": "An email address is required",
|
|
671
|
+
"customers.email_username": "Email / Username",
|
|
672
|
+
"customers.empty_description": "Customers appear here after checkout or when you add them manually.",
|
|
673
|
+
"customers.empty_title": "No customers yet",
|
|
674
|
+
"customers.guest_badge": "Guest",
|
|
675
|
+
"customers.invite_sent": "Invite sent",
|
|
676
|
+
"customers.location": "Location",
|
|
677
|
+
"customers.no_orders_yet": "No orders yet.",
|
|
678
|
+
"customers.paying_customer": "Paying customer ✓",
|
|
679
|
+
"customers.recalculate": "Recalculate",
|
|
680
|
+
"customers.recent_orders": "Recent orders",
|
|
681
|
+
"customers.save": "Save customer",
|
|
682
|
+
"customers.saved": "Customer saved",
|
|
683
|
+
"customers.search_placeholder": "Search by name, email or username…",
|
|
684
|
+
"customers.send_invite": "Send the new user an account invite",
|
|
685
|
+
"customers.shipping_address": "Shipping address",
|
|
686
|
+
"customers.stats": "Stats",
|
|
687
|
+
"customers.stats_recalculated": "Stats recalculated",
|
|
688
|
+
"customers.subtitle": "Registered customers and checkout guests.",
|
|
689
|
+
"customers.total_spend": "Total spend",
|
|
690
|
+
"customers.username": "Username",
|
|
691
|
+
|
|
692
|
+
// ── reports ─────────────────────────────────────────────────────
|
|
693
|
+
"reports.attributes": "Attributes",
|
|
694
|
+
"reports.coupons_by_type": "Coupons by type",
|
|
695
|
+
"reports.discounted": "Discounted",
|
|
696
|
+
"reports.empty_no_sales": "No sales in this period",
|
|
697
|
+
"reports.gross_sales": "Gross sales",
|
|
698
|
+
"reports.items_sold": "Items sold",
|
|
699
|
+
"reports.net_revenue": "Net revenue",
|
|
700
|
+
"reports.net_sales": "Net sales",
|
|
701
|
+
"reports.no_sales_in_period": "No sales in this period.",
|
|
702
|
+
"reports.orders_by_status": "Orders by status",
|
|
703
|
+
"reports.product": "Product",
|
|
704
|
+
"reports.products_by_status": "Products by status",
|
|
705
|
+
"reports.quantity": "Quantity",
|
|
706
|
+
"reports.quantity_sold": "Quantity sold",
|
|
707
|
+
"reports.reviews_by_status": "Reviews by status",
|
|
708
|
+
"reports.ribbons": "Ribbons",
|
|
709
|
+
"reports.shipping": "Shipping",
|
|
710
|
+
"reports.subtitle": "Sales performance and store totals.",
|
|
711
|
+
"reports.tab_sales": "Sales",
|
|
712
|
+
"reports.tab_top_sellers": "Top sellers",
|
|
713
|
+
"reports.tab_totals": "Totals",
|
|
714
|
+
"reports.top_sellers_by_quantity": "Top sellers by quantity",
|
|
715
|
+
|
|
716
|
+
// ── settings ────────────────────────────────────────────────────
|
|
717
|
+
"settings.description": "Configure how your store works.",
|
|
718
|
+
"settings.emails.additional_content": "Additional content",
|
|
719
|
+
"settings.emails.additional_content_placeholder": "Text appended below the email body.",
|
|
720
|
+
"settings.emails.admin": "Admin",
|
|
721
|
+
"settings.emails.admin_recipients": "Admin notification recipients",
|
|
722
|
+
"settings.emails.admin_users_fallback": "your app's admin users",
|
|
723
|
+
"settings.emails.default_placeholder": "Leave blank for the default",
|
|
724
|
+
"settings.emails.done": "Done",
|
|
725
|
+
"settings.emails.enabled": "Enabled",
|
|
726
|
+
"settings.emails.heading": "Email heading",
|
|
727
|
+
"settings.emails.manage": "Manage",
|
|
728
|
+
"settings.emails.managed_by_auth": "Handled by Base44 auth",
|
|
729
|
+
"settings.emails.manual": "Manual",
|
|
730
|
+
"settings.emails.no_admin_warning": "No app user has the admin role, so leaving this blank sends these emails nowhere.",
|
|
731
|
+
"settings.emails.notifications": "Email notifications",
|
|
732
|
+
"settings.emails.notifications_description": "Enable, disable and customize each transactional email, including the low-stock and out-of-stock alerts.",
|
|
733
|
+
"settings.emails.placeholders_hint": "Available placeholders: {order_number}, {customer_name}, {store_name}, {order_total}",
|
|
734
|
+
"settings.emails.recipient": "Recipient",
|
|
735
|
+
"settings.emails.recipient_override_hint": "Comma-separated. Overrides the admin recipients above for this email only.",
|
|
736
|
+
"settings.emails.recipient_placeholder": "Leave blank to use the default admin recipients",
|
|
737
|
+
"settings.emails.recipients_hint": "Leave blank to notify {users}.",
|
|
738
|
+
"settings.emails.recipients_label": "Recipient(s)",
|
|
739
|
+
"settings.emails.recipients_placeholder": "admin@example.com, ops@example.com",
|
|
740
|
+
"settings.emails.sender_options": "Sender options",
|
|
741
|
+
"settings.emails.sender_options_description": "How transactional emails are named, and who gets the admin copies. The sending address is controlled by your Base44 email configuration, not here.",
|
|
742
|
+
"settings.emails.sent_to_admin": "Sent to the store admin",
|
|
743
|
+
"settings.emails.sent_to_customer": "Sent to the customer",
|
|
744
|
+
"settings.emails.store_name_hint": "Sent as “{name}” in the subject and sender name of every transactional email.",
|
|
745
|
+
"settings.emails.subject": "Subject",
|
|
746
|
+
"settings.emails.type_email_title": "{type} email",
|
|
747
|
+
"settings.emails.your_store": "Your store",
|
|
748
|
+
"settings.general.checkout": "Checkout",
|
|
749
|
+
"settings.general.checkout_description": "Where customers land once they come back from paying.",
|
|
750
|
+
"settings.general.currency": "Currency",
|
|
751
|
+
"settings.general.currency_description": "Every price in the store is stored and displayed in this currency.",
|
|
752
|
+
"settings.general.dimension_unit": "Dimensions unit",
|
|
753
|
+
"settings.general.measurements": "Measurements",
|
|
754
|
+
"settings.general.measurements_description": "Units used for product weight and dimensions.",
|
|
755
|
+
"settings.general.payment_return_path": "Payment return path",
|
|
756
|
+
"settings.general.payment_return_path_hint": "The storefront route customers come back to after paying, on your storefront's own address. It must match the page you built — a wrong path sends paying customers to a 404.",
|
|
757
|
+
"settings.general.weight_unit": "Weight unit",
|
|
758
|
+
"settings.inventory.description": "Stock management defaults for products that track inventory.",
|
|
759
|
+
"settings.inventory.hide_out_of_stock": "Hide out of stock items from the catalog",
|
|
760
|
+
"settings.inventory.hide_out_of_stock_hint": "Storefront APIs will exclude out-of-stock products from listings.",
|
|
761
|
+
"settings.inventory.hold_stock": "Hold stock (minutes)",
|
|
762
|
+
"settings.inventory.hold_stock_hint": "Hold stock for unpaid orders for this many minutes. When the limit is reached, the pending order is cancelled and its stock released. Release runs opportunistically — see the commerce skill's references/operations.md.",
|
|
763
|
+
"settings.inventory.low_stock_threshold": "Low stock threshold",
|
|
764
|
+
"settings.inventory.manage_stock": "Manage stock",
|
|
765
|
+
"settings.inventory.manage_stock_hint": "Enable stock management store-wide.",
|
|
766
|
+
"settings.inventory.out_of_stock_threshold": "Out of stock threshold",
|
|
767
|
+
"settings.inventory.visibility": "Visibility",
|
|
768
|
+
"settings.location.add_rate": "Add rate",
|
|
769
|
+
"settings.location.add_region": "Add region",
|
|
770
|
+
"settings.location.add_tax_group": "Add tax group",
|
|
771
|
+
"settings.location.continent": "Continent",
|
|
772
|
+
"settings.location.cost": "Cost",
|
|
773
|
+
"settings.location.created": "Location created",
|
|
774
|
+
"settings.location.default_group_hint": "Default group — products without a Tax group charge this",
|
|
775
|
+
"settings.location.delivery_option": "Delivery option",
|
|
776
|
+
"settings.location.edit_location": "Edit location",
|
|
777
|
+
"settings.location.exact_amount": "Exact amount",
|
|
778
|
+
"settings.location.free_over": "Free over",
|
|
779
|
+
"settings.location.free_over_title": "Items subtotal (after discounts) at which this rate becomes free",
|
|
780
|
+
"settings.location.group_name_placeholder": "Group name",
|
|
781
|
+
"settings.location.header_description": "Manage where you sell, and the shipping and tax charged there.",
|
|
782
|
+
"settings.location.load_failed": "Failed to load location",
|
|
783
|
+
"settings.location.match_order": "Match order",
|
|
784
|
+
"settings.location.name_placeholder": "e.g. Israel",
|
|
785
|
+
"settings.location.name_required": "Location name is required",
|
|
786
|
+
"settings.location.never": "Never",
|
|
787
|
+
"settings.location.no_tax_rates": "No tax rates for {name} items.",
|
|
788
|
+
"settings.location.no_tax_rates_default": "No tax rates — these items are untaxed here.",
|
|
789
|
+
"settings.location.no_tax_rates_unnamed": "No tax rates for these items.",
|
|
790
|
+
"settings.location.not_taxed": "Not taxed",
|
|
791
|
+
"settings.location.rate_name_placeholder": "e.g. Standard delivery",
|
|
792
|
+
"settings.location.rate_percent": "Rate %",
|
|
793
|
+
"settings.location.rate_placeholder": "Rate name — e.g. Sales tax, VAT",
|
|
794
|
+
"settings.location.rates_hint": "Rates offered at checkout for orders shipping to this location.",
|
|
795
|
+
"settings.location.regions_hint": "Leave the regions empty to make this the fallback that catches every address no other location covers.",
|
|
796
|
+
"settings.location.save_failed": "Failed to save location",
|
|
797
|
+
"settings.location.saved": "Location saved",
|
|
798
|
+
"settings.location.select_continent": "Select continent…",
|
|
799
|
+
"settings.location.state": "State",
|
|
800
|
+
"settings.location.state_placeholder": "COUNTRY:STATE — e.g. US:CA",
|
|
801
|
+
"settings.location.tax_example": "Example: {base} in the Products group at 18% charges {tax} tax.",
|
|
802
|
+
"settings.location.tax_group": "Tax group",
|
|
803
|
+
"settings.location.tax_hint": "Applies to {group} items.",
|
|
804
|
+
"settings.location.tax_on_shipping": "Tax on shipping",
|
|
805
|
+
"settings.location.tax_on_shipping_hint": "Applied to the shipping cost at this location — separate from the product groups above.",
|
|
806
|
+
"settings.payments.account_n": "Account",
|
|
807
|
+
"settings.payments.account_name": "Account name",
|
|
808
|
+
"settings.payments.account_number": "Account number",
|
|
809
|
+
"settings.payments.add_account": "Add account",
|
|
810
|
+
"settings.payments.add_method": "Add payment method",
|
|
811
|
+
"settings.payments.added": "Payment method added",
|
|
812
|
+
"settings.payments.bank_details": "Bank account details",
|
|
813
|
+
"settings.payments.bank_name": "Bank name",
|
|
814
|
+
"settings.payments.bank_none": "None yet — fine for cash on delivery; add one for bank transfer.",
|
|
815
|
+
"settings.payments.bic": "BIC / Swift",
|
|
816
|
+
"settings.payments.checkout_options": "Checkout options",
|
|
817
|
+
"settings.payments.checkout_options_description": "Which payment options customers can pick at checkout, in this order, and the wording they see. Every option except Credit card settles outside the store: the order goes on-hold with the option's description as instructions, and you move it on once paid.",
|
|
818
|
+
"settings.payments.delete_confirm": "Delete the “{title}” payment option?",
|
|
819
|
+
"settings.payments.delete_failed": "Failed to delete",
|
|
820
|
+
"settings.payments.deleted": "Payment method deleted",
|
|
821
|
+
"settings.payments.description_hint": "Also shown as the payment instructions after the order is placed.",
|
|
822
|
+
"settings.payments.iban": "IBAN",
|
|
823
|
+
"settings.payments.reorder_failed": "Failed to reorder",
|
|
824
|
+
"settings.payments.saved": "Payment method saved",
|
|
825
|
+
"settings.payments.sort_code": "Sort code",
|
|
826
|
+
"settings.payments.title_hint": "Shown to customers during checkout.",
|
|
827
|
+
"settings.payments.title_label": "Title",
|
|
828
|
+
"settings.payments.title_required": "Give the payment method a title",
|
|
829
|
+
"settings.payments.update_failed": "Failed to update gateway",
|
|
830
|
+
"settings.save_changes": "Save changes",
|
|
831
|
+
"settings.save_failed": "Failed to save",
|
|
832
|
+
"settings.save_settings_failed": "Failed to save settings",
|
|
833
|
+
"settings.saved": "Settings saved",
|
|
834
|
+
"settings.shipping.add_location": "Add location",
|
|
835
|
+
"settings.shipping.charge_shipping": "Charge shipping",
|
|
836
|
+
"settings.shipping.charge_shipping_hint": "Off means carts never carry a shipping step — for fully virtual stores.",
|
|
837
|
+
"settings.shipping.clone": "Clone",
|
|
838
|
+
"settings.shipping.clone_failed": "Failed to clone location",
|
|
839
|
+
"settings.shipping.copy_name": "{name} (copy)",
|
|
840
|
+
"settings.shipping.delete_confirm_description": "Orders already placed keep their charges; carts shipping to this location lose their options.",
|
|
841
|
+
"settings.shipping.delete_confirm_title": "Delete “{name}”?",
|
|
842
|
+
"settings.shipping.delete_failed": "Failed to delete location",
|
|
843
|
+
"settings.shipping.disabled_toast": "Shipping disabled",
|
|
844
|
+
"settings.shipping.empty_description": "Add a location to define where you ship and what tax applies.",
|
|
845
|
+
"settings.shipping.empty_title": "No locations yet",
|
|
846
|
+
"settings.shipping.enabled_toast": "Shipping enabled",
|
|
847
|
+
"settings.shipping.everywhere_else": "Everywhere else (fallback)",
|
|
848
|
+
"settings.shipping.location": "Location",
|
|
849
|
+
"settings.shipping.location_cloned": "Location cloned",
|
|
850
|
+
"settings.shipping.location_deleted": "Location deleted",
|
|
851
|
+
"settings.shipping.locations_intro": "A location covers the regions it names; the location with no regions catches everyone else. Each carries its own shipping rates and tax.",
|
|
852
|
+
"settings.shipping.no_rates": "none — nothing ships here",
|
|
853
|
+
"settings.shipping.no_tax": "no tax",
|
|
854
|
+
"settings.shipping.rate_fallback": "Rate",
|
|
855
|
+
"settings.shipping.regions": "Regions",
|
|
856
|
+
"settings.shipping.shipping_amount": "Shipping {amount}",
|
|
857
|
+
"settings.shipping.shipping_rates": "Shipping rates",
|
|
858
|
+
"settings.shipping.tax": "Tax",
|
|
859
|
+
|
|
860
|
+
// ── webhooks ────────────────────────────────────────────────────
|
|
861
|
+
"webhooks.api_version": "API version",
|
|
862
|
+
"webhooks.create": "Create webhook",
|
|
863
|
+
"webhooks.created": "Created",
|
|
864
|
+
"webhooks.created_toast": "Webhook created",
|
|
865
|
+
"webhooks.delete_confirm": "Delete webhook?",
|
|
866
|
+
"webhooks.delete_failed": "Failed to delete",
|
|
867
|
+
"webhooks.deleted": "Webhook deleted",
|
|
868
|
+
"webhooks.delivery_url": "Delivery URL",
|
|
869
|
+
"webhooks.description": "Notify external services when store events occur.",
|
|
870
|
+
"webhooks.details": "Webhook details",
|
|
871
|
+
"webhooks.edit_title": "Edit webhook",
|
|
872
|
+
"webhooks.empty_description": "Create a webhook to POST event payloads to an external URL.",
|
|
873
|
+
"webhooks.empty_title": "No webhooks",
|
|
874
|
+
"webhooks.failures": "Failures",
|
|
875
|
+
"webhooks.generate": "Generate",
|
|
876
|
+
"webhooks.load_failed": "Failed to load webhook",
|
|
877
|
+
"webhooks.name_url_required": "Name and delivery URL are required",
|
|
878
|
+
"webhooks.no_deliveries": "No deliveries yet.",
|
|
879
|
+
"webhooks.recent_deliveries": "Recent deliveries",
|
|
880
|
+
"webhooks.redeliver": "Redeliver",
|
|
881
|
+
"webhooks.redelivered": "Redelivered",
|
|
882
|
+
"webhooks.request": "Request",
|
|
883
|
+
"webhooks.response": "Response",
|
|
884
|
+
"webhooks.save_failed": "Failed to save webhook",
|
|
885
|
+
"webhooks.saved": "Webhook saved",
|
|
886
|
+
"webhooks.secret": "Secret",
|
|
887
|
+
"webhooks.secret_placeholder": "Used to sign the payload (HMAC-SHA256)",
|
|
888
|
+
"webhooks.send_test": "Send test",
|
|
889
|
+
"webhooks.test_delivered": "Test delivered",
|
|
890
|
+
"webhooks.test_delivered_code": "Test delivered — HTTP {code}",
|
|
891
|
+
"webhooks.topic": "Topic",
|
|
892
|
+
|
|
893
|
+
// ── StoreAdmin bot ──────────────────────────────────────────────
|
|
894
|
+
"bot.error_reach": "Failed to reach StoreAdmin",
|
|
895
|
+
"bot.input_placeholder": "e.g. Show pending orders as a table",
|
|
896
|
+
"bot.intro": "Ask me anything about your store — I can look things up and make changes for you.",
|
|
897
|
+
"bot.new_chat": "New chat",
|
|
898
|
+
"bot.title": "StoreAdmin",
|
|
899
|
+
"bot.working": "Working…",
|
|
900
|
+
};
|