@endora-commerce/mod-i18n 0.100.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.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +52 -0
  3. package/dist/backend/cli/coverage.d.ts +29 -0
  4. package/dist/backend/cli/coverage.d.ts.map +1 -0
  5. package/dist/backend/cli/coverage.js +84 -0
  6. package/dist/backend/cli/coverage.js.map +1 -0
  7. package/dist/backend/cli/reload.d.ts +35 -0
  8. package/dist/backend/cli/reload.d.ts.map +1 -0
  9. package/dist/backend/cli/reload.js +18 -0
  10. package/dist/backend/cli/reload.js.map +1 -0
  11. package/dist/backend/entities/translation-bundle.entity.d.ts +23 -0
  12. package/dist/backend/entities/translation-bundle.entity.d.ts.map +1 -0
  13. package/dist/backend/entities/translation-bundle.entity.js +69 -0
  14. package/dist/backend/entities/translation-bundle.entity.js.map +1 -0
  15. package/dist/backend/index.d.ts +164 -0
  16. package/dist/backend/index.d.ts.map +1 -0
  17. package/dist/backend/index.js +134 -0
  18. package/dist/backend/index.js.map +1 -0
  19. package/dist/backend/routes.admin.d.ts +41 -0
  20. package/dist/backend/routes.admin.d.ts.map +1 -0
  21. package/dist/backend/routes.admin.js +74 -0
  22. package/dist/backend/routes.admin.js.map +1 -0
  23. package/dist/backend/services/bundle-loader.d.ts +49 -0
  24. package/dist/backend/services/bundle-loader.d.ts.map +1 -0
  25. package/dist/backend/services/bundle-loader.js +84 -0
  26. package/dist/backend/services/bundle-loader.js.map +1 -0
  27. package/dist/backend/services/bundle-reconciler.d.ts +82 -0
  28. package/dist/backend/services/bundle-reconciler.d.ts.map +1 -0
  29. package/dist/backend/services/bundle-reconciler.js +38 -0
  30. package/dist/backend/services/bundle-reconciler.js.map +1 -0
  31. package/dist/backend/services/i18n-service.d.ts +67 -0
  32. package/dist/backend/services/i18n-service.d.ts.map +1 -0
  33. package/dist/backend/services/i18n-service.js +323 -0
  34. package/dist/backend/services/i18n-service.js.map +1 -0
  35. package/dist/backend/services/missing-key-logger.d.ts +52 -0
  36. package/dist/backend/services/missing-key-logger.d.ts.map +1 -0
  37. package/dist/backend/services/missing-key-logger.js +37 -0
  38. package/dist/backend/services/missing-key-logger.js.map +1 -0
  39. package/dist/manifest.d.ts +214 -0
  40. package/dist/manifest.d.ts.map +1 -0
  41. package/dist/manifest.js +245 -0
  42. package/dist/manifest.js.map +1 -0
  43. package/dist/migrations/20260507T091405_i18n_admin_i18n_init.d.ts +30 -0
  44. package/dist/migrations/20260507T091405_i18n_admin_i18n_init.d.ts.map +1 -0
  45. package/dist/migrations/20260507T091405_i18n_admin_i18n_init.js +50 -0
  46. package/dist/migrations/20260507T091405_i18n_admin_i18n_init.js.map +1 -0
  47. package/dist/migrations/index.d.ts +23 -0
  48. package/dist/migrations/index.d.ts.map +1 -0
  49. package/dist/migrations/index.js +23 -0
  50. package/dist/migrations/index.js.map +1 -0
  51. package/docs/i18n.md +166 -0
  52. package/i18n/en.json +1957 -0
  53. package/i18n/pl.json +1957 -0
  54. package/package.json +68 -0
package/i18n/en.json ADDED
@@ -0,0 +1,1957 @@
1
+ {
2
+ "action.amount_off_cart": "Y off the whole cart",
3
+ "action.buy_x_get_y_free": "Buy X get Y free",
4
+ "action.buy_x_units_amount_off": "Buy X units of a product, Y off the cart",
5
+ "action.buy_x_units_percent_off": "Buy X units of a product, Y% off the cart",
6
+ "action.buy_x_units_y_free": "Buy X units of a product, Y free",
7
+ "action.every_nth_product_percent_off": "Every Nth product Y% cheaper",
8
+ "action.free_delivery": "Apply free delivery",
9
+ "action.percentage_off_cart": "X% off the whole cart",
10
+ "action.spend_x_amount_off": "For every X spent, Y off the cart",
11
+ "action.spend_x_percent_off": "For every X spent, Y% off the cart",
12
+ "adminRoles.confirmDelete": "Delete role \"{name}\"?",
13
+ "adminRoles.delete": "Delete role",
14
+ "adminRoles.dependencies.add": "Add {code}",
15
+ "adminRoles.dependencies.addAll": "Add all",
16
+ "adminRoles.dependencies.description": "These permissions declare that a role holding them also needs the ones below, or the screens they open work only in part. Adding them is a suggestion — you can save this role without them.",
17
+ "adminRoles.dependencies.title": "Some permissions need others",
18
+ "adminRoles.empty": "No roles yet.",
19
+ "adminRoles.error.delete": "Delete failed.",
20
+ "adminRoles.error.load": "Failed to load.",
21
+ "adminRoles.error.save": "Save failed.",
22
+ "adminRoles.field.code": "Code",
23
+ "adminRoles.field.displayName": "Display name",
24
+ "adminRoles.field.requires2fa": "Requires two-factor authentication on assigned users",
25
+ "adminRoles.info.deleted": "Deleted role {code}.",
26
+ "adminRoles.info.saved": "Saved role {code}.",
27
+ "adminRoles.loading": "Loading…",
28
+ "adminRoles.newRole": "New role",
29
+ "adminRoles.owners": "grantable while these modules are on: {modules}",
30
+ "adminRoles.page.descriptionPrefix": "Permission bundles assigned in",
31
+ "adminRoles.page.title": "Roles",
32
+ "adminRoles.permission.admin:read": "View admin notifications",
33
+ "adminRoles.permission.admin_users:manage": "Manage admin users + roles",
34
+ "adminRoles.permission.analytics:read": "View analytics",
35
+ "adminRoles.permission.assets.read": "Browse assets library",
36
+ "adminRoles.permission.assets.write": "Upload and manage assets",
37
+ "adminRoles.permission.audit_log:read": "View audit log",
38
+ "adminRoles.permission.blog.read": "View blog content",
39
+ "adminRoles.permission.blog.write": "Author + publish blog content",
40
+ "adminRoles.permission.carts:read": "View customer carts",
41
+ "adminRoles.permission.carts:reject": "Reject a cart pending organization approval",
42
+ "adminRoles.permission.catalog:read": "View catalog",
43
+ "adminRoles.permission.catalog:write": "Edit catalog",
44
+ "adminRoles.permission.cms.read": "View CMS content",
45
+ "adminRoles.permission.cms.write": "Edit CMS content",
46
+ "adminRoles.permission.comparisons:read": "View product comparisons",
47
+ "adminRoles.permission.credentials:read": "View credential configurations",
48
+ "adminRoles.permission.credentials:write": "Manage credential configurations",
49
+ "adminRoles.permission.credit_limits:manage": "Grant + adjust credit limits",
50
+ "adminRoles.permission.currencies:read": "View currencies",
51
+ "adminRoles.permission.currencies:write": "Configure currencies",
52
+ "adminRoles.permission.custom_fields:read": "View custom fields",
53
+ "adminRoles.permission.custom_fields:write": "Manage custom fields",
54
+ "adminRoles.permission.customer_groups:read": "View customer groups",
55
+ "adminRoles.permission.customer_groups:write": "Manage customer groups",
56
+ "adminRoles.permission.customers:impersonate": "Impersonate customers",
57
+ "adminRoles.permission.customers:manage": "Manage customer organizations",
58
+ "adminRoles.permission.customers:read": "View customers",
59
+ "adminRoles.permission.delivery_methods:read": "View delivery methods",
60
+ "adminRoles.permission.delivery_methods:write": "Configure delivery methods",
61
+ "adminRoles.permission.dictionary.write": "Manage dictionary registry",
62
+ "adminRoles.permission.google_analytics:read": "View Google Analytics configuration",
63
+ "adminRoles.permission.google_analytics:write": "Manage Google Analytics configuration and custom events",
64
+ "adminRoles.permission.integrations:manage": "Manage API keys + webhooks",
65
+ "adminRoles.permission.inventory:read": "View stock and warehouses",
66
+ "adminRoles.permission.inventory:write": "Manage stock and warehouses",
67
+ "adminRoles.permission.invoices:read": "View invoices and download invoice PDFs",
68
+ "adminRoles.permission.invoices:write": "Issue/correct invoices, edit templates, and configure invoicing",
69
+ "adminRoles.permission.linkedin_ads:read": "View LinkedIn Ads configuration",
70
+ "adminRoles.permission.linkedin_ads:write": "Manage LinkedIn Ads configuration and conversion mappings",
71
+ "adminRoles.permission.megamenu.read": "View megamenu",
72
+ "adminRoles.permission.megamenu.write": "Edit megamenu",
73
+ "adminRoles.permission.meta_ads:read": "View Meta Ads configuration",
74
+ "adminRoles.permission.meta_ads:write": "Manage Meta Ads configuration and custom events",
75
+ "adminRoles.permission.newsletter:read": "View newsletter",
76
+ "adminRoles.permission.newsletter:write": "Manage newsletter subscribers, campaigns, automations, and provider",
77
+ "adminRoles.permission.orders:read": "View orders",
78
+ "adminRoles.permission.orders:write": "Edit orders / change status",
79
+ "adminRoles.permission.organizations:assign-sales-rep": "Assign sales representatives to organizations",
80
+ "adminRoles.permission.organizations:rollup": "Act across organization descendants",
81
+ "adminRoles.permission.payment_methods:read": "View payment methods",
82
+ "adminRoles.permission.payment_methods:write": "Configure payment methods",
83
+ "adminRoles.permission.payments:read": "View payments",
84
+ "adminRoles.permission.payments:write": "Record and retry payments",
85
+ "adminRoles.permission.platform.modules.activate": "Switch modules on and off",
86
+ "adminRoles.permission.platform.modules.read": "View module lifecycle",
87
+ "adminRoles.permission.price_lists:read": "View price lists and pricing rules",
88
+ "adminRoles.permission.price_lists:write": "Edit price lists, brackets and display modes",
89
+ "adminRoles.permission.product_feeds:read": "View product feeds",
90
+ "adminRoles.permission.product_feeds:write": "Manage product feeds",
91
+ "adminRoles.permission.promotions:delete": "Delete promotions and rules",
92
+ "adminRoles.permission.promotions:read": "View promotions",
93
+ "adminRoles.permission.promotions:write": "Create + edit promotions and rules",
94
+ "adminRoles.permission.returns:read": "View returns / RMA cases",
95
+ "adminRoles.permission.returns:write": "Manage returns / RMA cases and settlement",
96
+ "adminRoles.permission.rfqs:handle": "Handle quote requests",
97
+ "adminRoles.permission.sales_channels:read": "View sales channels",
98
+ "adminRoles.permission.sales_channels:write": "Manage sales channels",
99
+ "adminRoles.permission.search:write": "Configure search",
100
+ "adminRoles.permission.settings:read": "View settings",
101
+ "adminRoles.permission.settings:write": "Edit settings",
102
+ "adminRoles.permission.taxes:read": "View tax rules",
103
+ "adminRoles.permission.taxes:write": "Configure tax rules",
104
+ "adminRoles.permission.transactional_emails:read": "View transactional emails",
105
+ "adminRoles.permission.transactional_emails:write": "Manage transactional emails, blocks, templates, and branding",
106
+ "adminRoles.permissionsHeading": "Permissions",
107
+ "adminRoles.requires": "needs {codes}",
108
+ "adminRoles.save": "Save",
109
+ "adminRoles.seeded.blog_manager": "Blog Manager",
110
+ "adminRoles.seeded.content_manager": "Content Manager",
111
+ "adminRoles.seeded.platform_admin": "Platform Admin",
112
+ "adminRoles.seeded.read_only": "Read-only Admin",
113
+ "adminRoles.selectHint": "Pick a role on the left or create a new one.",
114
+ "adminRoles.usersLink": "Users",
115
+ "adminRoles.wildcardLocked": "The platform_admin role always has full access and cannot be changed.",
116
+ "adminRoles.wildcardPrefix": "Full access grants every permission via the wildcard.",
117
+ "adminRoles.wildcardSuffix": "Turn it off to select individual permissions below.",
118
+ "adminRoles.wildcardTitle": "Full access",
119
+ "adminRoles.wildcardToggle": "Full access",
120
+ "adminUsers.assignLater": "— assign later —",
121
+ "adminUsers.column.email": "Email",
122
+ "adminUsers.column.lastLogin": "Last login",
123
+ "adminUsers.column.name": "Name",
124
+ "adminUsers.column.role": "Role",
125
+ "adminUsers.column.status": "Status",
126
+ "adminUsers.column.twoFactor": "2FA",
127
+ "adminUsers.confirmRemove": "Remove {email}? They will no longer be able to sign in.",
128
+ "adminUsers.create.title": "Create user",
129
+ "adminUsers.deactivate": "Deactivate",
130
+ "adminUsers.error.create": "Create failed.",
131
+ "adminUsers.error.load": "Failed to load.",
132
+ "adminUsers.error.remove": "Remove failed.",
133
+ "adminUsers.error.resetPassword": "Password reset failed.",
134
+ "adminUsers.error.update": "Update failed.",
135
+ "adminUsers.field.firstName": "First name",
136
+ "adminUsers.field.lastName": "Last name",
137
+ "adminUsers.field.password": "Password (min 12 chars)",
138
+ "adminUsers.loading": "Loading…",
139
+ "adminUsers.page.descriptionPrefix": "Supplier employees with admin access. Manage permission bundles in",
140
+ "adminUsers.page.title": "Users",
141
+ "adminUsers.reactivate": "Reactivate",
142
+ "adminUsers.remove": "Remove",
143
+ "adminUsers.resetPassword.action": "Reset password",
144
+ "adminUsers.resetPassword.cancel": "Cancel",
145
+ "adminUsers.resetPassword.done": "Password reset for {email}. Every session they held was signed out — give them the new password over a channel you trust.",
146
+ "adminUsers.resetPassword.hint": "Sets a new password straight away and signs out every session this user holds, including any impersonation they started.",
147
+ "adminUsers.resetPassword.submit": "Set password",
148
+ "adminUsers.resetPassword.title": "Reset the password for {email}",
149
+ "adminUsers.rolesLink": "Roles",
150
+ "adminUsers.status.active": "Active",
151
+ "adminUsers.status.inactive": "Inactive",
152
+ "adminUsers.twoFactorOn": "on",
153
+ "adminUsers.unassigned": "— unassigned —",
154
+ "apiKeys.action.revoke": "Revoke",
155
+ "apiKeys.action.revokeConfirm": "Revoke this key? Calls using it will start failing immediately.",
156
+ "apiKeys.binding.unbound": "Unbound (platform)",
157
+ "apiKeys.column.binding": "Binding",
158
+ "apiKeys.column.created": "Created",
159
+ "apiKeys.column.expires": "Expires",
160
+ "apiKeys.column.last4": "Last 4",
161
+ "apiKeys.column.lastUsed": "Last used",
162
+ "apiKeys.column.name": "Name",
163
+ "apiKeys.column.scopes": "Scopes",
164
+ "apiKeys.column.status": "Status",
165
+ "apiKeys.create.bindingHelp": "Bind the key to exactly one organization, sales channel, and service account. The binding is permanent — to rebind, revoke and create a new key. Required for order scopes.",
166
+ "apiKeys.create.bindingTitle": "Organization binding (optional)",
167
+ "apiKeys.create.expiresHelp": "After this instant the key stops authenticating. Leave empty for a non-expiring key.",
168
+ "apiKeys.create.expiresLabel": "Expires at (optional)",
169
+ "apiKeys.create.modesHelp": "A key without a binding is a platform credential (PIM sync, channel-default catalog reads). A key bound to an organization acts on its behalf on the /api/v1/external/* namespace — organization prices, pinned sales channel, and every organization restriction (payment/delivery allow-lists, credit limit) applies.",
170
+ "apiKeys.create.nameLabel": "Name",
171
+ "apiKeys.create.namePlaceholder": "e.g. PIM sync",
172
+ "apiKeys.create.organizationLabel": "Organization",
173
+ "apiKeys.create.salesChannelLabel": "Sales channel",
174
+ "apiKeys.create.scopesHelp": "Pick the smallest set that lets the integration work.",
175
+ "apiKeys.create.scopesLabel": "Scopes",
176
+ "apiKeys.create.serviceAccountHelp": "Orders placed with this key belong to this customer account. Pick the organization first.",
177
+ "apiKeys.create.serviceAccountLabel": "Service account",
178
+ "apiKeys.create.submit": "Create key",
179
+ "apiKeys.create.submitting": "Creating…",
180
+ "apiKeys.create.title": "Create new key",
181
+ "apiKeys.empty": "No API keys yet.",
182
+ "apiKeys.error.create": "Failed to create key.",
183
+ "apiKeys.error.load": "Failed to load API keys.",
184
+ "apiKeys.error.revoke": "Failed to revoke key.",
185
+ "apiKeys.page.description": "Bearer tokens for machine-to-machine integrations. The full token is shown once, on creation.",
186
+ "apiKeys.page.title": "API keys",
187
+ "apiKeys.revealed.confirm": "I have stored it",
188
+ "apiKeys.revealed.copied": "Copied!",
189
+ "apiKeys.revealed.copy": "Copy token",
190
+ "apiKeys.revealed.title": "Save this bearer token now — it will not be shown again.",
191
+ "apiKeys.status.active": "Active",
192
+ "apiKeys.status.revoked": "Revoked",
193
+ "apiKeys.validation.bindingIncomplete": "A binding is all-or-none — select the organization, sales channel, and service account, or clear all three.",
194
+ "apiKeys.validation.bindingRequiredForOrders": "Order scopes require a complete binding: organization, sales channel, and service account.",
195
+ "apiKeys.validation.catalogWriteBound": "catalog:write is not allowed on a bound key — PIM writes stay platform-level.",
196
+ "apiKeys.validation.expiryFuture": "The expiry must be in the future.",
197
+ "app.moduleScreenLoading": "Loading the module's screen…",
198
+ "app.notFound": "Page not found. Pick a module from the sidebar.",
199
+ "appShell.brand": "B2B Platform",
200
+ "appShell.brand.dashboardLink": "Go to dashboard",
201
+ "appShell.brand.text": "Endora Commerce",
202
+ "appShell.brand.textPrimary": "Endora",
203
+ "appShell.brand.textAccent": "Commerce",
204
+ "appShell.collapse.collapse": "Collapse",
205
+ "appShell.collapse.expand": "Expand",
206
+ "appShell.crumb.audit": "Audit",
207
+ "appShell.crumb.edit": "Edit",
208
+ "appShell.crumb.editor": "Editor",
209
+ "appShell.crumb.feedRun": "Run",
210
+ "appShell.crumb.import": "Import",
211
+ "appShell.crumb.myProfile": "My profile",
212
+ "appShell.crumb.new": "New",
213
+ "appShell.impersonation.end": "End impersonation",
214
+ "appShell.impersonation.notice": "Every action you take is audit-logged against your admin account.",
215
+ "appShell.impersonation.title": "Impersonating {customer}",
216
+ "appShell.languageIndicator.label": "UI language",
217
+ "appShell.mobileMenu.close": "Close menu",
218
+ "appShell.mobileMenu.open": "Open menu",
219
+ "appShell.mobileMenu.title": "Navigation",
220
+ "appShell.nav.home": "Home",
221
+ "appShell.nav.invoiceTemplates": "Invoice templates",
222
+ "appShell.nav.platformModules": "Modules",
223
+ "appShell.nav.pwa": "PWA",
224
+ "appShell.notifications.empty": "No notifications.",
225
+ "appShell.notifications.markAllRead": "Mark all read",
226
+ "appShell.notifications.title": "Notifications",
227
+ "appShell.palette.group.actions": "Actions",
228
+ "appShell.palette.group.navigate": "Navigate",
229
+ "appShell.palette.sub.dashboard": "Dashboard",
230
+ "appShell.profileMenu.open": "Open profile menu",
231
+ "appShell.profileMenu.profile": "Profile",
232
+ "appShell.profileMenu.signOut": "Sign out",
233
+ "appShell.search.commandPalettePlaceholder": "Search products, organizations, actions…",
234
+ "appShell.search.noMatches": "No matches.",
235
+ "appShell.search.openPalette": "Search (⌘K)",
236
+ "appShell.search.placeholder": "Search…",
237
+ "appShell.search.shortcut": "Ctrl+K",
238
+ "appShell.search.shortcutSymbol": "⌘K",
239
+ "appShell.search.voiceInput": "Dictate (speech-to-text)",
240
+ "appShell.search.voiceInputStop": "Stop dictation",
241
+ "appShell.section.analyticsAds": "Analytics & Ads",
242
+ "appShell.section.catalog": "Catalog",
243
+ "appShell.section.channels": "Channels",
244
+ "appShell.section.content": "Content",
245
+ "appShell.section.customers": "Customers",
246
+ "appShell.section.inventory": "Inventory",
247
+ "appShell.section.main": "Main",
248
+ "appShell.section.messaging": "Messaging",
249
+ "appShell.section.newsletter": "Newsletter",
250
+ "appShell.section.pricing": "Pricing",
251
+ "appShell.section.sales": "Sales",
252
+ "appShell.section.system": "System",
253
+ "appShell.sidebarToggle.collapse": "Collapse sidebar (⌘B)",
254
+ "appShell.sidebarToggle.expand": "Expand sidebar (⌘B)",
255
+ "appShell.skipToContent": "Skip to content",
256
+ "appShell.topbar.help": "Help",
257
+ "appShell.topbar.notifications": "Notifications",
258
+ "auditLog.action.detail": "Detail",
259
+ "auditLog.action.hide": "Hide",
260
+ "auditLog.actor.system": "system",
261
+ "auditLog.api_key.out_of_scope": "API key out of scope",
262
+ "auditLog.column.action": "Action",
263
+ "auditLog.column.actor": "Actor",
264
+ "auditLog.column.object": "Object",
265
+ "auditLog.column.when": "When",
266
+ "auditLog.detail.after": "After",
267
+ "auditLog.detail.before": "Before",
268
+ "auditLog.detail.impersonatedCustomer": "impersonated customer",
269
+ "auditLog.detail.ip": "IP",
270
+ "auditLog.detail.request": "req",
271
+ "auditLog.detail.userAgent": "UA",
272
+ "auditLog.empty": "No entries match the current filter.",
273
+ "auditLog.error.load": "Failed to load audit log.",
274
+ "auditLog.filter.action": "Action",
275
+ "auditLog.filter.actor": "Actor (admin user id)",
276
+ "auditLog.filter.apply": "Apply filters",
277
+ "auditLog.filter.clear": "Clear",
278
+ "auditLog.filter.impersonatedCustomer": "Impersonated customer id",
279
+ "auditLog.filter.objectId": "Object id",
280
+ "auditLog.filter.objectType": "Object type",
281
+ "auditLog.impersonation.end": "Impersonation ended",
282
+ "auditLog.impersonation.start": "Impersonation started",
283
+ "auditLog.module.dependency_blocked": "Module dependency blocked",
284
+ "auditLog.module.disabled": "Module disabled",
285
+ "auditLog.module.enabled": "Module enabled",
286
+ "auditLog.module.install_failed": "Module install failed",
287
+ "auditLog.module.installed": "Module installed",
288
+ "auditLog.module.uninstalled": "Module uninstalled",
289
+ "auditLog.order.place_on_behalf": "Order placed on behalf of customer",
290
+ "auditLog.page.description": "Append-only log of sensitive operations. Read-only.",
291
+ "auditLog.page.title": "Audit log",
292
+ "carts.column.discount": "Discount",
293
+ "categoryTreePicker.aria.treeLabel": "Catalog category tree",
294
+ "categoryTreePicker.collapse": "Collapse branch",
295
+ "categoryTreePicker.empty.noCategories": "No categories in the catalog yet.",
296
+ "categoryTreePicker.empty.noMatches": "No categories match your filter.",
297
+ "categoryTreePicker.expand": "Expand branch",
298
+ "categoryTreePicker.filter.placeholder": "Filter categories…",
299
+ "categoryTreePicker.loading": "Loading categories…",
300
+ "common.action.back": "Back",
301
+ "common.action.cancel": "Cancel",
302
+ "common.action.close": "Close",
303
+ "common.action.confirm": "Confirm",
304
+ "common.action.create": "Create",
305
+ "common.action.delete": "Delete",
306
+ "common.action.edit": "Edit",
307
+ "common.action.retry": "Retry",
308
+ "common.action.save": "Save",
309
+ "common.action.search": "Search",
310
+ "common.action.saveAndExit": "Save and exit",
311
+ "common.field.code": "Code",
312
+ "common.field.name": "Name",
313
+ "common.combobox.clearSelection": "Clear selection",
314
+ "common.pagination.next": "Next",
315
+ "common.pagination.noResults": "No results",
316
+ "common.pagination.pageXofY": "Page {page} of {total}",
317
+ "common.pagination.previous": "Previous",
318
+ "common.pagination.rowsPerPage": "Rows per page:",
319
+ "common.pagination.showingRange": "Showing {start}–{end} of {total}",
320
+ "common.state.empty": "Nothing to show yet.",
321
+ "common.state.error": "Something went wrong.",
322
+ "common.state.loading": "Loading…",
323
+ "common.state.saving": "Saving…",
324
+ "common.toast.deleted": "Deleted.",
325
+ "common.toast.saved": "Saved.",
326
+ "common.validation.invalid": "This value isn't valid.",
327
+ "common.validation.required": "This field is required.",
328
+ "assetPicker.searchPlaceholder": "Search by filename or label…",
329
+ "assetPicker.empty": "No assets match this query yet.",
330
+ "assetPicker.uploadNew": "Or upload a new asset",
331
+ "assetPicker.upload.dropAria": "Drop a file here or click to upload",
332
+ "assetPicker.upload.dropCopy": "Drop a file here, or click to choose one",
333
+ "assetPicker.upload.error.wrongType": "Expected a {expected} file; got \"{actual}\".",
334
+ "assetPicker.upload.trigger": "Upload file",
335
+ "assetPicker.upload.uploading": "Uploading…",
336
+ "contentLanguageTabs.ariaLabel": "Content language",
337
+ "contentLanguageTabs.empty": "No content languages selected.",
338
+ "countryPicker.selectCountry": "Select country",
339
+ "countryPicker.inactiveGroup": "Inactive",
340
+ "countryPicker.inactiveLabel": "{label} (inactive)",
341
+ "currencyPicker.selectCurrency": "Select currency",
342
+ "currencyPicker.inactiveGroup": "Inactive",
343
+ "currencyPicker.inactiveLabel": "{label} ({code}, inactive)",
344
+ "pageBuilder.applyTemplate.button": "Apply template",
345
+ "pageBuilder.applyTemplate.cancel": "Cancel",
346
+ "pageBuilder.applyTemplate.confirm": "Apply template",
347
+ "pageBuilder.applyTemplate.description": "Replace the current canvas with a saved content template layout.",
348
+ "pageBuilder.applyTemplate.empty": "No content templates available.",
349
+ "pageBuilder.applyTemplate.replaceWarning": "The current canvas is not empty — applying a template will replace it.",
350
+ "pageBuilder.applyTemplate.selectLabel": "Template",
351
+ "pageBuilder.applyTemplate.success": "Template applied.",
352
+ "pageBuilder.applyTemplate.title": "Apply content template",
353
+ "pageBuilder.clearCanvas.button": "Clear canvas",
354
+ "pageBuilder.clearCanvas.cancel": "Cancel",
355
+ "pageBuilder.clearCanvas.confirm": "Clear canvas",
356
+ "pageBuilder.clearCanvas.description": "This removes all components from the current language version. You can undo with the editor history while this session is open.",
357
+ "pageBuilder.clearCanvas.title": "Clear canvas?",
358
+ "pageBuilder.copyLanguage.button": "Copy from language",
359
+ "pageBuilder.copyLanguage.cancel": "Cancel",
360
+ "pageBuilder.copyLanguage.confirm": "Copy",
361
+ "pageBuilder.copyLanguage.description": "Replace the current canvas ({target}) with content from another language version.",
362
+ "pageBuilder.copyLanguage.noTargets": "Add another content language in Scope first.",
363
+ "pageBuilder.copyLanguage.sourceLabel": "Source language",
364
+ "pageBuilder.copyLanguage.success": "Content copied from {language}.",
365
+ "pageBuilder.copyLanguage.title": "Copy content from another language",
366
+ "pageBuilder.fullscreen.enter": "Fullscreen",
367
+ "pageBuilder.fullscreen.exit": "Exit fullscreen",
368
+ "pageBuilder.saveAsTemplate.button": "Save as template",
369
+ "pageBuilder.saveAsTemplate.cancel": "Cancel",
370
+ "pageBuilder.saveAsTemplate.confirm": "Save template",
371
+ "pageBuilder.saveAsTemplate.description": "Creates a new content template from the current canvas for the active language.",
372
+ "pageBuilder.saveAsTemplate.emptyCanvas": "Add at least one component before saving as a template.",
373
+ "pageBuilder.saveAsTemplate.missingScope": "Select at least one sales channel and language in Scope first.",
374
+ "pageBuilder.saveAsTemplate.requiredFields": "Name and code are required.",
375
+ "pageBuilder.saveAsTemplate.success": "Template saved.",
376
+ "pageBuilder.saveAsTemplate.title": "Save layout as template",
377
+ "pageBuilder.colorPalette.title": "Color palette",
378
+ "pageBuilder.colorPalette.description": "Global colors available across Page Builder fields.",
379
+ "pageBuilder.colorPalette.close": "Close",
380
+ "pageBuilder.colorPalette.empty": "No saved colors yet.",
381
+ "pageBuilder.colorPalette.delete": "Delete",
382
+ "pageBuilder.colorPalette.deleteConfirm": "Remove this color from the palette?",
383
+ "pageBuilder.colorPalette.addTitle": "Add color",
384
+ "pageBuilder.colorPalette.nameLabel": "Name",
385
+ "pageBuilder.colorPalette.namePlaceholder": "e.g. Brand blue",
386
+ "pageBuilder.colorPalette.colorLabel": "Color",
387
+ "pageBuilder.colorPalette.customColor": "Custom color",
388
+ "pageBuilder.colorPalette.add": "Add to palette",
389
+ "pageBuilder.colorPalette.pickHint": "Click a color to apply it to the field.",
390
+ "pageBuilder.colorPalette.nameRequired": "Enter a name for the color.",
391
+ "pageBuilder.colorPalette.invalidHex": "Enter a valid hex color (#RRGGBB).",
392
+ "productPicker.searchPlaceholder": "Search products by name, SKU, or slug…",
393
+ "productPicker.searching": "Searching…",
394
+ "productPicker.empty": "No matching products.",
395
+ "productPicker.searchFailed": "Search failed.",
396
+ "productPicker.remove": "Remove {label}",
397
+ "countrySelect.empty": "No matching country",
398
+ "countrySelect.error": "Could not load countries",
399
+ "countrySelect.loading": "Loading countries…",
400
+ "countrySelect.placeholder": "Select a country…",
401
+ "creditLimits.action.grant": "Grant",
402
+ "creditLimits.action.lookup": "Look up",
403
+ "creditLimits.action.open": "Open",
404
+ "creditLimits.action.saveAdjust": "Save adjustment",
405
+ "creditLimits.adjust.summary": "Granted {granted} · Available {available} · Reserved {reserved} across {count} order(s).",
406
+ "creditLimits.adjust.title": "Adjust {orgId} ({currency})",
407
+ "creditLimits.column.available": "Available",
408
+ "creditLimits.column.granted": "Granted",
409
+ "creditLimits.column.grantedAt": "Granted at",
410
+ "creditLimits.column.order": "Order",
411
+ "creditLimits.column.organization": "Organization",
412
+ "creditLimits.column.reservations": "Reservations",
413
+ "creditLimits.column.reserved": "Reserved",
414
+ "creditLimits.column.since": "Since",
415
+ "creditLimits.editor.title": "Per-organization editor",
416
+ "creditLimits.empty": "No credit limits granted yet.",
417
+ "creditLimits.error.adjust": "Adjust failed.",
418
+ "creditLimits.error.grant": "Grant failed.",
419
+ "creditLimits.error.load": "Failed to load.",
420
+ "creditLimits.error.lookup": "Lookup failed.",
421
+ "creditLimits.field.allowOverAllocation": "Allow reduction below active reservations (override)",
422
+ "creditLimits.field.currency": "Currency",
423
+ "creditLimits.field.grantedAmount": "Granted amount",
424
+ "creditLimits.field.newGranted": "New granted amount ({currency})",
425
+ "creditLimits.field.orgId": "Organization id",
426
+ "creditLimits.field.reasonAudit": "Reason (optional, kept on the audit log)",
427
+ "creditLimits.field.reasonOptional": "Reason (optional)",
428
+ "creditLimits.grant.notGrantedYet": "No credit limit is granted for this organization yet.",
429
+ "creditLimits.grant.title": "Grant credit limit to {orgId}",
430
+ "creditLimits.loading": "Loading…",
431
+ "creditLimits.page.description": "Grant and adjust deferred-payment limits per organization. Adjustments below the active-reservations sum are rejected unless explicitly overridden.",
432
+ "creditLimits.page.title": "Credit limits",
433
+ "creditLimits.placeholder.uuid": "UUID",
434
+ "creditLimits.success.adjust": "Adjusted credit limit for {orgId}.",
435
+ "creditLimits.success.grant": "Granted {amount} {currency} to {orgId}.",
436
+ "customFields.save": "Save custom fields",
437
+ "customFields.title": "Custom Fields",
438
+ "defaultPreferences.billingAddress": "Default billing address",
439
+ "defaultPreferences.deliveryMethod": "Default delivery method",
440
+ "defaultPreferences.description": "Default payment / delivery method and billing / shipping address applied when ordering. Leave a field empty to keep no default.",
441
+ "defaultPreferences.inherit": "— Inherit from organization —",
442
+ "defaultPreferences.loadError": "Could not load preferences.",
443
+ "defaultPreferences.none": "— None —",
444
+ "defaultPreferences.paymentMethod": "Default payment method",
445
+ "defaultPreferences.save": "Save preferences",
446
+ "defaultPreferences.saveError": "Could not save preferences.",
447
+ "defaultPreferences.saved": "Preferences saved.",
448
+ "defaultPreferences.shippingAddress": "Default shipping address",
449
+ "defaultPreferences.title": "Default ordering preferences",
450
+ "errors.CURRENT_PASSWORD_INVALID": "Current Password Invalid.",
451
+ "errors.EMAIL_ALREADY_REGISTERED": "Email Already Registered.",
452
+ "errors.FORBIDDEN": "You do not have permission to perform this action.",
453
+ "errors.FORBIDDEN.organization_cannot_transact": "Your organization cannot place orders in its current status. Contact your account manager to restore ordering.",
454
+ "errors.FORBIDDEN.customer_outside_assignment_scope": "You may only create or price orders for customers in the organizations assigned to you.",
455
+ "errors.INTERNAL": "Internal server error.",
456
+ "errors.INVALID_CREDENTIALS": "Invalid email or password. Please try again.",
457
+ "errors.INVALID_TRANSITION": "This status change is not allowed.",
458
+ "errors.MODULE_DISABLED": "The \"{module}\" module is off, so this action was refused. Check its state on the Modules screen.",
459
+ "errors.NOT_FOUND": "Resource not found.",
460
+ "errors.RATE_LIMITED": "Too many requests.",
461
+ "errors.TERMS_VERSION_STALE": "Terms Version Stale.",
462
+ "errors.TOKEN_INVALID_OR_EXPIRED": "Token Invalid Or Expired.",
463
+ "errors.UNAUTHORIZED": "Authentication is required.",
464
+ "errors.VALIDATION_FAILED": "Request failed validation.",
465
+ "errors.VERSION_CONFLICT": "The resource was changed by another process.",
466
+ "form.unsavedChanges.confirm": "You have unsaved changes. Leave this page without saving?",
467
+ "fulfilment.hint": "How warehouses are picked to fulfil order lines. Precedence: product → organization → sales channel → platform default.",
468
+ "fulfilment.inherit": "Inherit (channel / default)",
469
+ "fulfilment.label": "Warehouse-picking strategy",
470
+ "fulfilment.orgTitle": "Fulfilment strategy",
471
+ "fulfilment.save": "Save",
472
+ "fulfilment.saveError": "Could not save the fulfilment strategy.",
473
+ "fulfilment.saving": "Saving…",
474
+ "fulfilment.strategy.any": "Any warehouse",
475
+ "fulfilment.strategy.default_first": "Default warehouse first, then any",
476
+ "fulfilment.strategy.defined_order": "Defined order",
477
+ "fulfilment.strategy.highest_stock_first": "Warehouse with the highest stock",
478
+ "fulfilment.strategy.lowest_stock_first": "Warehouse with the lowest stock",
479
+ "fulfilment.warehouseOrder.add": "Add a warehouse…",
480
+ "fulfilment.warehouseOrder.down": "Move down",
481
+ "fulfilment.warehouseOrder.empty": "No warehouses added yet.",
482
+ "fulfilment.warehouseOrder.remove": "Remove",
483
+ "fulfilment.warehouseOrder.title": "Warehouse order",
484
+ "fulfilment.warehouseOrder.up": "Move up",
485
+ "home.activity.empty": "No recent activity yet — your changes will appear here.",
486
+ "home.activity.error": "Couldn't load recent activity.",
487
+ "home.activity.retry": "Retry",
488
+ "home.activity.time.daysAgo": "{count} days ago",
489
+ "home.activity.time.hoursAgo": "{count}h ago",
490
+ "home.activity.time.justNow": "just now",
491
+ "home.activity.time.minutesAgo": "{count}m ago",
492
+ "home.activity.time.yesterday": "yesterday",
493
+ "home.activity.verb.unknown": "performed an action on",
494
+ "home.activity.viewAll": "View all",
495
+ "home.defaultName": "there",
496
+ "home.kpi.activeProducts": "Active products",
497
+ "home.kpi.openOrders": "Open orders",
498
+ "home.kpi.outOfStock": "Out of stock",
499
+ "home.kpi.pendingQuotes": "Pending quotes",
500
+ "home.quickActions.convertQuote": "Convert quote to order",
501
+ "home.quickActions.editPricing": "Edit pricing",
502
+ "home.quickActions.importInventory": "Import inventory",
503
+ "home.quickActions.newProduct": "New product",
504
+ "home.quickActions.title": "Quick actions",
505
+ "home.recentActivity.subtitle": "Across catalog, pricing, and inventory",
506
+ "home.recentActivity.title": "Recent activity",
507
+ "home.stockAlerts.empty": "No products are currently low on stock.",
508
+ "home.stockAlerts.left": "{qty} left",
509
+ "home.stockAlerts.out": "Out",
510
+ "home.stockAlerts.seeAll": "See all",
511
+ "home.stockAlerts.subtitle": "At or below low-stock threshold",
512
+ "home.stockAlerts.title": "Stock alerts",
513
+ "home.subtitle": "Here's what's happening across your B2B catalog today",
514
+ "home.welcomeBack": "Welcome back",
515
+ "inventory.action.editStock": "Edit stock",
516
+ "inventory.action.import": "Import stock",
517
+ "inventory.availability.cancel": "Cancel",
518
+ "inventory.availability.column.email": "Email",
519
+ "inventory.availability.column.notified": "Notified",
520
+ "inventory.availability.column.queued": "Queued",
521
+ "inventory.availability.column.status": "Status",
522
+ "inventory.availability.confirmCancel": "Cancel this subscription? The customer will no longer receive a back-in-stock email.",
523
+ "inventory.availability.description": "Customer subscriptions for back-in-stock alerts. Restock fan-out fires automatically when cumulative on-hand crosses 0 → > 0.",
524
+ "inventory.availability.empty": "No subscriptions match the current filters",
525
+ "inventory.availability.error.cancel": "Cancel failed.",
526
+ "inventory.availability.error.load": "Failed to load.",
527
+ "inventory.availability.info.cancelled": "Subscription cancelled.",
528
+ "inventory.availability.searchPlaceholder": "Search SKU, product, or email…",
529
+ "inventory.availability.status.all": "all",
530
+ "inventory.availability.status.cancelled": "cancelled",
531
+ "inventory.availability.status.notified": "notified",
532
+ "inventory.availability.status.queued": "queued",
533
+ "inventory.availability.title": "Notify-when-available",
534
+ "inventory.column.cumulativeOnHand": "Cumulative on hand",
535
+ "inventory.column.displayBand": "Display band",
536
+ "inventory.column.perWarehouse": "Per warehouse",
537
+ "inventory.column.product": "Product",
538
+ "inventory.column.sku": "SKU",
539
+ "inventory.column.threshold": "Threshold",
540
+ "inventory.empty": "No stock rows match the current filters",
541
+ "inventory.error.load": "Failed to load.",
542
+ "inventory.import.applied": "Applied",
543
+ "inventory.import.back": "Back to Inventory",
544
+ "inventory.import.commit": "Commit",
545
+ "inventory.import.committed": "Committed",
546
+ "inventory.import.dryRunSummary": "Dry-run summary",
547
+ "inventory.import.error.import": "Import failed.",
548
+ "inventory.import.error.loadWarehouses": "Failed to load warehouses.",
549
+ "inventory.import.errors.reason": "Reason",
550
+ "inventory.import.errors.row": "Row",
551
+ "inventory.import.errors.sku": "SKU",
552
+ "inventory.import.errorsCount": "Errors ({count}):",
553
+ "inventory.import.errorsTruncated": "Showing first 50 errors of {total}.",
554
+ "inventory.import.loadedPrefix": "Loaded",
555
+ "inventory.import.loadedSuffix": "({count} lines).",
556
+ "inventory.import.pasteDirectly": "Or paste CSV directly:",
557
+ "inventory.import.previewDryRun": "Preview (dry run)",
558
+ "inventory.import.rowsRead": "Rows read",
559
+ "inventory.import.skipped": "Skipped",
560
+ "inventory.import.step1": "1 · Pick a warehouse",
561
+ "inventory.import.step2": "2 · Provide the file",
562
+ "inventory.import.step3": "3 · Preview + commit",
563
+ "inventory.import.subPrefix": "CSV with header",
564
+ "inventory.import.subSuffix": ". Preview first, then commit.",
565
+ "inventory.import.title": "Import stock",
566
+ "inventory.import.working": "Working…",
567
+ "inventory.loading": "Loading…",
568
+ "inventory.lowStock.description": "Products with cumulative on-hand at or below their threshold. Configure thresholds per product or globally under Inventory settings.",
569
+ "inventory.lowStock.empty": "No products are currently low on stock",
570
+ "inventory.lowStock.emptyHintPrefix": "Set",
571
+ "inventory.lowStock.emptyHintSuffix": "on a product (Inventory tab) to surface it here when stock crosses the line.",
572
+ "inventory.lowStock.error.load": "Failed to load.",
573
+ "inventory.lowStock.title": "Low stock",
574
+ "inventory.page.subPrefix": "Stock per product per warehouse · KPIs are computed live from",
575
+ "inventory.page.subSuffix": ".",
576
+ "inventory.noPermission": "You do not have permission to view stock and warehouses.",
577
+ "inventory.page.title": "Inventory",
578
+ "inventory.perWarehouseTotals": "Per-warehouse totals",
579
+ "inventory.search.placeholder": "Search SKU, product name, or ID…",
580
+ "inventory.stat.lowStock": "Low stock",
581
+ "inventory.stat.outOfStock": "Out of stock",
582
+ "inventory.stat.totalOnHand": "Total on hand",
583
+ "inventory.stat.tracked": "Products tracked",
584
+ "invoiceDetail.action.downloadPdf": "Download PDF",
585
+ "invoiceDetail.action.regeneratePdf": "Regenerate PDF",
586
+ "invoiceDetail.action.resendEmail": "Resend email",
587
+ "invoiceDetail.back": "Invoices",
588
+ "invoiceDetail.col.gross": "Gross",
589
+ "invoiceDetail.col.name": "Name",
590
+ "invoiceDetail.col.net": "Net",
591
+ "invoiceDetail.col.no": "No.",
592
+ "invoiceDetail.col.qty": "Qty",
593
+ "invoiceDetail.col.taxRate": "VAT",
594
+ "invoiceDetail.col.unit": "Unit",
595
+ "invoiceDetail.col.unitNet": "Unit net",
596
+ "invoiceDetail.error.load": "Could not load the invoice.",
597
+ "invoiceDetail.field.issuedAt": "Issued at",
598
+ "invoiceDetail.field.kind": "Kind",
599
+ "invoiceDetail.field.ksefNumber": "KSeF number",
600
+ "invoiceDetail.field.order": "Order",
601
+ "invoiceDetail.field.paymentDueDate": "Payment due",
602
+ "invoiceDetail.field.paymentMethod": "Payment method",
603
+ "invoiceDetail.field.saleDate": "Sale date",
604
+ "invoiceDetail.field.status": "Status",
605
+ "invoiceDetail.field.taxId": "Tax ID",
606
+ "invoiceDetail.notFound": "Invoice not found.",
607
+ "invoiceDetail.pdfNotReady": "The PDF is not ready yet. Regenerate it to enable the download.",
608
+ "invoiceDetail.regenerateError": "Could not regenerate the PDF.",
609
+ "invoiceDetail.regenerated": "Invoice PDF regenerated.",
610
+ "invoiceDetail.section.buyer": "Buyer",
611
+ "invoiceDetail.section.details": "Details",
612
+ "invoiceDetail.section.lines": "Lines",
613
+ "invoiceDetail.section.parties": "Parties",
614
+ "invoiceDetail.section.seller": "Seller",
615
+ "invoiceDetail.section.totals": "Totals",
616
+ "invoiceDetail.section.vatSummary": "VAT summary",
617
+ "invoiceDetail.title": "Invoice {number}",
618
+ "invoiceDetail.totals.due": "Amount due",
619
+ "invoiceDetail.totals.gross": "Gross total",
620
+ "invoiceDetail.totals.net": "Net total",
621
+ "invoiceDetail.totals.paid": "Paid",
622
+ "invoiceDetail.totals.tax": "VAT total",
623
+ "invoiceTabs.invoices": "Invoices",
624
+ "invoiceTabs.templates": "Invoice templates",
625
+ "invoiceTemplates.active": "active",
626
+ "invoiceTemplates.clearCanvas": "Clear canvas",
627
+ "invoiceTemplates.columns.active": "Active",
628
+ "invoiceTemplates.columns.name": "Name",
629
+ "invoiceTemplates.columns.scope": "Scope",
630
+ "invoiceTemplates.create": "Create template",
631
+ "invoiceTemplates.description": "Customize the invoice PDF layout (WYSIWYG), globally or per sales channel.",
632
+ "invoiceTemplates.describedBlock.placeholder": "This block belongs to module {owner}, which is not available on this instance. It is kept in the template and not printed.",
633
+ "invoiceTemplates.describedBlock.placeholderNoOwner": "This block ({name}) is not available on this instance. It is kept in the template and not printed.",
634
+ "invoiceTemplates.describedBlock.standIn": "{label} is drawn on the PDF by module {owner}. Use Preview PDF to see it.",
635
+ "invoiceTemplates.editDescription": "Arrange the invoice sections; preview renders a sample invoice.",
636
+ "invoiceTemplates.editTitle": "Invoice template",
637
+ "invoiceTemplates.fields.channel": "Sales channel ID",
638
+ "invoiceTemplates.fields.channelHint": "blank = global",
639
+ "invoiceTemplates.fields.code": "Code",
640
+ "invoiceTemplates.fields.name": "Name",
641
+ "invoiceTemplates.fullscreen.enter": "Fullscreen",
642
+ "invoiceTemplates.fullscreen.exit": "Exit fullscreen",
643
+ "invoiceTemplates.global": "Global",
644
+ "invoiceTemplates.loading": "Loading template…",
645
+ "invoiceTemplates.preview": "Preview PDF",
646
+ "invoiceTemplates.previewEmpty": "No preview available yet.",
647
+ "invoiceTemplates.previewError": "Failed to load the preview.",
648
+ "invoiceTemplates.previewLoading": "Generating preview…",
649
+ "invoiceTemplates.previewRefresh": "Refresh preview",
650
+ "invoiceTemplates.previewTitle": "Current template preview",
651
+ "invoiceTemplates.saved": "Template saved.",
652
+ "invoiceTemplates.title": "Invoice templates",
653
+ "invoices.columns.issued": "Issued",
654
+ "invoices.columns.kind": "Kind",
655
+ "invoices.columns.number": "Number",
656
+ "invoices.columns.order": "Order",
657
+ "invoices.columns.status": "Status",
658
+ "invoices.columns.total": "Total",
659
+ "invoices.description": "Read-only. Generation is driven by order events; PDF re-download is per-order.",
660
+ "invoices.emailNotSent.deactivated": "the invoice email is switched off",
661
+ "invoices.emailNotSent.failed": "the send failed",
662
+ "invoices.emailNotSent.invoice_not_found": "the invoice could not be loaded",
663
+ "invoices.emailNotSent.no_definition": "there is no invoice email template",
664
+ "invoices.emailNotSent.no_recipient": "the order has no email address",
665
+ "invoices.emailNotSent.no_sender": "no email sender is configured",
666
+ "invoices.emailNotSent.no_transport": "no mail transport is configured",
667
+ "invoices.emailNotSentNotice": "The invoice email was not sent: {reason}.",
668
+ "invoices.emailSent": "Invoice email sent.",
669
+ "invoices.empty": "No invoices match the current filter.",
670
+ "invoices.fields.issuedFrom": "Issued from",
671
+ "invoices.fields.issuedTo": "Issued to",
672
+ "invoices.fields.kind": "Kind",
673
+ "invoices.fields.orderNumber": "Order number",
674
+ "invoices.fields.status": "Status",
675
+ "invoices.fields.totalMax": "Total to",
676
+ "invoices.fields.totalMin": "Total from",
677
+ "invoices.filters.clear": "Clear filters",
678
+ "invoices.filters.orderNumberPlaceholder": "e.g. ORD-2026-…",
679
+ "invoices.kind.all": "All",
680
+ "invoices.kind.correction": "correction",
681
+ "invoices.kind.invoice": "invoice",
682
+ "invoices.kind.proforma": "proforma",
683
+ "invoices.pdfNotReady": "not ready",
684
+ "invoices.resendEmail": "Resend email",
685
+ "invoices.status.all": "All",
686
+ "invoices.status.cancelled": "cancelled",
687
+ "invoices.status.pending": "pending",
688
+ "invoices.status.ready": "ready",
689
+ "invoices.title": "Invoices",
690
+ "legacyMethods.action.new": "Add method",
691
+ "legacyMethods.availability.moduleOff": "The \"{module}\" module is switched off.",
692
+ "legacyMethods.availability.moduleUnavailable": "The \"{module}\" module is not available on this deployment.",
693
+ "legacyMethods.availability.noAdapter": "No module provides the \"{adapter}\" adapter.",
694
+ "legacyMethods.availability.unavailable": "Not offered to buyers",
695
+ "legacyMethods.columns.adapter": "Adapter",
696
+ "legacyMethods.columns.code": "Code",
697
+ "legacyMethods.columns.cost": "Cost",
698
+ "legacyMethods.columns.kind": "Kind",
699
+ "legacyMethods.columns.name": "Name",
700
+ "legacyMethods.columns.status": "Status",
701
+ "legacyMethods.delivery.deleteConfirm": "Delete this delivery method?",
702
+ "legacyMethods.delivery.description": "Cost is captured per-order at placement; later edits don't rewrite history.",
703
+ "legacyMethods.delivery.editTitle": "Edit method {code}",
704
+ "legacyMethods.delivery.empty": "No delivery methods yet.",
705
+ "legacyMethods.delivery.noPermission": "You do not have permission to view delivery methods.",
706
+ "legacyMethods.delivery.title": "Delivery methods",
707
+ "legacyMethods.editTitle": "Edit method {code}",
708
+ "legacyMethods.errors.delete": "Delete failed.",
709
+ "legacyMethods.errors.save": "Save failed.",
710
+ "legacyMethods.fields.adapter": "Adapter",
711
+ "legacyMethods.fields.additionalPrice": "Additional price",
712
+ "legacyMethods.fields.code": "Code",
713
+ "legacyMethods.fields.cost": "Cost",
714
+ "legacyMethods.fields.currency": "Currency",
715
+ "legacyMethods.fields.kind": "Kind",
716
+ "legacyMethods.fields.nameEn": "Name [en-US]",
717
+ "legacyMethods.fields.namePl": "Name [pl-PL]",
718
+ "legacyMethods.fields.status": "Status",
719
+ "legacyMethods.fields.statusOnFailure": "Order status — payment failed",
720
+ "legacyMethods.fields.statusOnPending": "Order status — awaiting payment",
721
+ "legacyMethods.fields.statusOnSuccess": "Order status — payment succeeded",
722
+ "legacyMethods.formTitle": "New / update method",
723
+ "legacyMethods.integrations.configure": "Configure",
724
+ "legacyMethods.integrations.description": "Installed payment integrations. Open one to configure it.",
725
+ "legacyMethods.integrations.shippingDescription": "Installed shipping integrations. Open one to configure it.",
726
+ "legacyMethods.integrations.title": "Integrations",
727
+ "legacyMethods.messages.saved": "Saved {code}.",
728
+ "legacyMethods.payment.deleteConfirm": "Delete this payment method?",
729
+ "legacyMethods.payment.description": "The kind picks the backend driver; gateway adapters ship in follow-up specs.",
730
+ "legacyMethods.payment.empty": "No payment methods yet.",
731
+ "legacyMethods.payment.kind.bank_transfer": "bank transfer",
732
+ "legacyMethods.payment.kind.credit_limit": "credit limit",
733
+ "legacyMethods.payment.kind.gateway": "gateway",
734
+ "legacyMethods.payment.kind.pickup": "pickup",
735
+ "legacyMethods.payment.noPermission": "You do not have permission to view payment methods.",
736
+ "legacyMethods.payment.title": "Payment methods",
737
+ "legacyMethods.status.active": "active",
738
+ "legacyMethods.status.inactive": "inactive",
739
+ "limits.global": "Global limit",
740
+ "limits.perCustomer": "Per customer",
741
+ "limits.perOrganization": "Per organization",
742
+ "loginPage.email.label": "Email address",
743
+ "loginPage.email.placeholder": "you@company.com",
744
+ "loginPage.error.generic": "Sign-in failed. Please try again.",
745
+ "loginPage.error.invalid": "Invalid email or password.",
746
+ "loginPage.footer.noAccount.prefix": "No account yet? Run",
747
+ "loginPage.footer.noAccount.suffix": "from the repository root.",
748
+ "loginPage.heading": "B2B Admin · sign in",
749
+ "loginPage.password.label": "Password",
750
+ "loginPage.password.placeholder": "Your password",
751
+ "loginPage.subheading": "Use the email and password issued by your platform administrator.",
752
+ "loginPage.submit": "Sign in",
753
+ "loginPage.submitting": "Signing in…",
754
+ "loginPage.title": "Sign in to the admin panel",
755
+ "orderCreate.addItem": "Add item",
756
+ "orderCreate.address.billingHeading": "Billing address",
757
+ "orderCreate.address.copyFromBilling": "Copy from billing address",
758
+ "orderCreate.address.copyFromDelivery": "Copy from delivery address",
759
+ "orderCreate.address.deliveryHeading": "Delivery address",
760
+ "orderCreate.address.field.city": "City",
761
+ "orderCreate.address.field.country": "Country",
762
+ "orderCreate.address.field.phone": "Phone",
763
+ "orderCreate.address.field.postalCode": "Postal code",
764
+ "orderCreate.address.field.recipientName": "Recipient",
765
+ "orderCreate.address.field.street": "Street",
766
+ "orderCreate.address.group.organization": "Organization",
767
+ "orderCreate.address.group.personal": "Personal",
768
+ "orderCreate.address.mode.existing": "Pick existing",
769
+ "orderCreate.address.mode.new": "Enter new",
770
+ "orderCreate.address.none": "This customer has no saved addresses",
771
+ "orderCreate.address.saveToBook": "Save to address book for reuse",
772
+ "orderCreate.address.selectCustomerFirst": "Select a customer first",
773
+ "orderCreate.description": "Create an order on behalf of a customer",
774
+ "orderCreate.empty.customers": "No matching customers",
775
+ "orderCreate.empty.options": "No results",
776
+ "orderCreate.error": "Could not create the order",
777
+ "orderCreate.field.billingAddress": "Billing address",
778
+ "orderCreate.field.customer": "Customer",
779
+ "orderCreate.field.deliveryAddress": "Delivery address",
780
+ "orderCreate.field.deliveryMethod": "Delivery method",
781
+ "orderCreate.field.note": "Customer note",
782
+ "orderCreate.field.paymentMethod": "Payment method",
783
+ "orderCreate.field.product": "Product",
784
+ "orderCreate.field.quantity": "Quantity",
785
+ "orderCreate.field.salesChannel": "Sales channel",
786
+ "orderCreate.line.lineTotal": "Line total",
787
+ "orderCreate.line.unavailable": "No price",
788
+ "orderCreate.line.unitPrice": "Unit price",
789
+ "orderCreate.loadError": "Could not load options",
790
+ "orderCreate.loading": "Loading…",
791
+ "orderCreate.notice.unavailableLines": "Some products have no price for this customer and sales channel and are excluded from the total. Remove them or change the configuration before creating the order.",
792
+ "orderCreate.placeholder.address": "Select an address…",
793
+ "orderCreate.placeholder.customer": "Search by name or email…",
794
+ "orderCreate.placeholder.product": "Search by name, SKU, or slug…",
795
+ "orderCreate.placeholder.select": "Select…",
796
+ "orderCreate.preview.error": "Could not calculate prices",
797
+ "orderCreate.section.items": "Items",
798
+ "orderCreate.section.parties": "Customer & methods",
799
+ "orderCreate.submit": "Create order",
800
+ "orderCreate.summary.delivery": "Delivery",
801
+ "orderCreate.summary.discount": "Discount",
802
+ "orderCreate.summary.paymentSurcharge": "Payment surcharge",
803
+ "orderCreate.summary.subtotal": "Subtotal",
804
+ "orderCreate.summary.tax": "Tax (23%)",
805
+ "orderCreate.summary.title": "Order summary",
806
+ "orderCreate.summary.total": "Total",
807
+ "orderCreate.title": "Create order",
808
+ "orderDetail.cloneToQuote.action": "Clone to quote",
809
+ "orderDetail.cloneToQuote.done": "A quote request was created from this order.",
810
+ "orderDetail.cloneToQuote.error": "Could not clone this order to a quote.",
811
+ "orderDetail.columns.line": "Line",
812
+ "orderDetail.columns.product": "Product",
813
+ "orderDetail.columns.qty": "Qty",
814
+ "orderDetail.columns.tax": "Tax",
815
+ "orderDetail.columns.unit": "Unit",
816
+ "orderDetail.comments.add": "Add comment",
817
+ "orderDetail.comments.byCustomer": "Customer",
818
+ "orderDetail.comments.byStaff": "Staff",
819
+ "orderDetail.comments.customerVisible": "Visible to customer",
820
+ "orderDetail.comments.empty": "No comments yet.",
821
+ "orderDetail.comments.error": "Could not add the comment.",
822
+ "orderDetail.comments.internal": "Internal",
823
+ "orderDetail.comments.notify": "Notify customer",
824
+ "orderDetail.comments.placeholder": "Write a comment…",
825
+ "orderDetail.copied": "Copied order number #{id}",
826
+ "orderDetail.copyError": "Could not copy the order number.",
827
+ "orderDetail.copyHint": "Click to copy the order number",
828
+ "orderDetail.deliveryVia": "via",
829
+ "orderDetail.errors.paymentChange": "Payment change failed.",
830
+ "orderDetail.errors.statusChange": "Status change failed.",
831
+ "orderDetail.fields.orderStatus": "Order status",
832
+ "orderDetail.fields.paymentStatus": "Payment status",
833
+ "orderDetail.invoicePdf": "Invoice PDF",
834
+ "orderDetail.invoices.columns.issuedAt": "Issued",
835
+ "orderDetail.invoices.columns.kind": "Type",
836
+ "orderDetail.invoices.columns.number": "Number",
837
+ "orderDetail.invoices.columns.status": "Status",
838
+ "orderDetail.invoices.columns.total": "Total",
839
+ "orderDetail.invoices.download": "Download PDF",
840
+ "orderDetail.invoices.empty": "No invoices yet.",
841
+ "orderDetail.invoices.kind.correction": "Correction",
842
+ "orderDetail.invoices.kind.invoice": "Invoice",
843
+ "orderDetail.invoices.kind.proforma": "Proforma",
844
+ "orderDetail.invoices.status.cancelled": "cancelled",
845
+ "orderDetail.invoices.status.pending": "pending",
846
+ "orderDetail.invoices.status.ready": "ready",
847
+ "orderDetail.invoices.title": "Invoices",
848
+ "orderDetail.issueInvoice.action": "Issue invoice",
849
+ "orderDetail.issueInvoice.done": "Invoice issued.",
850
+ "orderDetail.issueInvoice.doneEmailNotSent": "Invoice issued, but no email was sent: {reason}.",
851
+ "orderDetail.issueInvoice.doneEmailSent": "Invoice issued and emailed to the customer.",
852
+ "orderDetail.issueInvoice.error": "Could not issue an invoice for this order.",
853
+ "orderDetail.messages.orderMoved": "Order moved to {status}.",
854
+ "orderDetail.messages.paymentMoved": "Payment moved to {status}.",
855
+ "orderDetail.notFound": "Order not found.",
856
+ "orderDetail.orderStatus.cancelled": "cancelled",
857
+ "orderDetail.orderStatus.completed": "completed",
858
+ "orderDetail.orderStatus.confirmed": "confirmed",
859
+ "orderDetail.orderStatus.in_fulfilment": "in fulfilment",
860
+ "orderDetail.orderStatus.new": "new",
861
+ "orderDetail.orderStatus.shipped": "shipped",
862
+ "orderDetail.org.taxId": "Tax ID",
863
+ "orderDetail.org.vat": "VAT status",
864
+ "orderDetail.paidBy": "paid by",
865
+ "orderDetail.paymentStatus.awaiting_payment": "awaiting payment",
866
+ "orderDetail.paymentStatus.deferred": "deferred",
867
+ "orderDetail.paymentStatus.failed": "failed",
868
+ "orderDetail.paymentStatus.paid": "paid",
869
+ "orderDetail.paymentStatus.partially_refunded": "partially refunded",
870
+ "orderDetail.paymentStatus.refunded": "refunded",
871
+ "orderDetail.payments.columns.actionDate": "Action date",
872
+ "orderDetail.payments.columns.amount": "Amount",
873
+ "orderDetail.payments.columns.attempt": "Attempt",
874
+ "orderDetail.payments.columns.failure": "Failure reason",
875
+ "orderDetail.payments.columns.paidAt": "Paid at",
876
+ "orderDetail.payments.columns.reference": "Reference",
877
+ "orderDetail.payments.columns.status": "Status",
878
+ "orderDetail.payments.empty": "No payments yet.",
879
+ "orderDetail.payments.title": "Payments",
880
+ "orderDetail.placedAt": "placed {date}",
881
+ "orderDetail.reorder.action": "Reorder",
882
+ "orderDetail.reorder.done": "A new cart was created from this order.",
883
+ "orderDetail.reorder.doneWithSkips": "A new cart was created; {count} item(s) were unavailable and skipped.",
884
+ "orderDetail.reorder.error": "Could not reorder this order.",
885
+ "orderDetail.sections.billing": "Billing",
886
+ "orderDetail.sections.buyerNote": "Note from buyer",
887
+ "orderDetail.sections.comments": "Comments",
888
+ "orderDetail.sections.customer": "Customer",
889
+ "orderDetail.sections.delivery": "Delivery",
890
+ "orderDetail.sections.items": "Items",
891
+ "orderDetail.sections.organization": "Organization",
892
+ "orderDetail.sections.status": "Status",
893
+ "orderDetail.shipments.carrierNotContacted.body": "This shipment was opened, but the module that handles its carrier is not switched on, so no label, tracking number or pickup was ever requested. Switch the module back on and generate the shipment again.",
894
+ "orderDetail.shipments.carrierNotContacted.title": "The carrier was not contacted",
895
+ "orderDetail.shipments.columns.attempt": "Attempt",
896
+ "orderDetail.shipments.columns.createdAt": "Created",
897
+ "orderDetail.shipments.columns.failure": "Failure reason",
898
+ "orderDetail.shipments.columns.status": "Status",
899
+ "orderDetail.shipments.columns.tracking": "Tracking / reference",
900
+ "orderDetail.shipments.empty": "No shipments yet.",
901
+ "orderDetail.shipments.generate": "Generate shipment",
902
+ "orderDetail.shipments.generate.again": "Generate shipment again",
903
+ "orderDetail.shipments.generate.busy": "Generating…",
904
+ "orderDetail.shipments.generate.error": "Could not generate the shipment.",
905
+ "orderDetail.shipments.status.failure": "failed",
906
+ "orderDetail.shipments.status.pending": "pending",
907
+ "orderDetail.shipments.status.pending_manual": "awaiting a person",
908
+ "orderDetail.shipments.status.success": "success",
909
+ "orderDetail.shipments.title": "Shipments",
910
+ "orderDetail.tabs.comments": "Comments",
911
+ "orderDetail.tabs.delivery": "Delivery",
912
+ "orderDetail.tabs.overview": "Overview",
913
+ "orderDetail.tabs.payment": "Payment",
914
+ "orderDetail.taxId": "Tax ID",
915
+ "orderDetail.title": "Order #{id}",
916
+ "orderDetail.totals.delivery": "Delivery",
917
+ "orderDetail.totals.discount": "Discount",
918
+ "orderDetail.totals.subtotal": "Subtotal",
919
+ "orderDetail.totals.tax": "Tax",
920
+ "orderDetail.totals.total": "Total",
921
+ "orderDetail.vatStatus.reverse_charge": "Reverse charge",
922
+ "orderDetail.vatStatus.vat_exempt": "VAT exempt",
923
+ "orderDetail.vatStatus.vat_payer": "VAT payer",
924
+ "orderStatusConfig.addStatus": "Add status",
925
+ "orderStatusConfig.addTransition": "Add transition",
926
+ "orderStatusConfig.col.code": "Code",
927
+ "orderStatusConfig.col.flags": "Flags",
928
+ "orderStatusConfig.col.from": "From",
929
+ "orderStatusConfig.col.inUse": "In use",
930
+ "orderStatusConfig.col.name": "Name",
931
+ "orderStatusConfig.col.to": "To",
932
+ "orderStatusConfig.color.custom": "Custom color",
933
+ "orderStatusConfig.deleteConfirm.body": "Are you sure you want to delete the status \"{name}\"? This action cannot be undone.",
934
+ "orderStatusConfig.deleteConfirm.title": "Delete status?",
935
+ "orderStatusConfig.description": "Configure the order status lifecycle and allowed transitions",
936
+ "orderStatusConfig.field.color": "Color",
937
+ "orderStatusConfig.field.defaultName": "Default name",
938
+ "orderStatusConfig.flag.initial": "Initial",
939
+ "orderStatusConfig.flag.system": "System",
940
+ "orderStatusConfig.flag.terminal": "Terminal",
941
+ "orderStatusConfig.graph.connectMode": "Connect",
942
+ "orderStatusConfig.graph.empty": "No statuses yet. Add a status to start drawing transitions.",
943
+ "orderStatusConfig.graph.layoutCircular": "Circular",
944
+ "orderStatusConfig.graph.layoutForce": "Force",
945
+ "orderStatusConfig.graph.layoutNone": "None",
946
+ "orderStatusConfig.graph.legendNormal": "Intermediate",
947
+ "orderStatusConfig.graph.pickSource": "Click the source status…",
948
+ "orderStatusConfig.graph.pickTarget": "Source: {from} — now click the target status",
949
+ "orderStatusConfig.graph.removeTransition": "Remove transition",
950
+ "orderStatusConfig.graph.selected": "Selected transition",
951
+ "orderStatusConfig.statuses": "Statuses",
952
+ "orderStatusConfig.title": "Order statuses",
953
+ "orderStatusConfig.transitions": "Transitions",
954
+ "orders.action.exportCsv": "Export CSV",
955
+ "orders.bulk.apply": "Apply",
956
+ "orders.bulk.changeStatus": "Change status",
957
+ "orders.bulk.dialogTitle": "Change status for {count} orders",
958
+ "orders.bulk.error": "Could not change status",
959
+ "orders.bulk.printInvoices": "Print invoices",
960
+ "orders.bulk.result": "{changed} changed, {skipped} skipped",
961
+ "orders.bulk.selected": "{count} selected",
962
+ "orders.bulk.targetStatus": "Target status",
963
+ "orders.column.billTo": "Bill-to",
964
+ "orders.column.customer": "Customer",
965
+ "orders.column.deliveryMethod": "Delivery method",
966
+ "orders.column.order": "Order",
967
+ "orders.column.org": "Organization",
968
+ "orders.column.payment": "Payment",
969
+ "orders.column.paymentMethod": "Payment method",
970
+ "orders.column.placedAt": "Purchase date",
971
+ "orders.column.salesChannel": "Sales channel",
972
+ "orders.column.shipTo": "Ship-to",
973
+ "orders.column.status": "Status",
974
+ "orders.column.total": "Total",
975
+ "orders.columns.label": "Columns",
976
+ "orders.empty": "No orders found",
977
+ "orders.error.load": "Could not load orders",
978
+ "orders.error.print": "Could not print invoices",
979
+ "orders.field.customerName": "Customer",
980
+ "orders.field.dateFrom": "From",
981
+ "orders.field.dateTo": "To",
982
+ "orders.field.deliveryMethod": "Delivery method",
983
+ "orders.field.orgName": "Organization",
984
+ "orders.field.paymentMethod": "Payment method",
985
+ "orders.field.paymentStatus": "Payment status",
986
+ "orders.field.salesChannel": "Sales channel",
987
+ "orders.field.search": "Search",
988
+ "orders.field.sort": "Sort",
989
+ "orders.field.status": "Status",
990
+ "orders.field.totalMax": "Total ≤",
991
+ "orders.field.totalMin": "Total ≥",
992
+ "orders.filter.all": "All statuses",
993
+ "orders.filter.clearAll": "Clear all",
994
+ "orders.filter.toggle": "Filters",
995
+ "orders.loading": "Loading orders…",
996
+ "orders.open": "Open",
997
+ "orders.page.description": "View and manage customer orders",
998
+ "orders.page.title": "Orders",
999
+ "orders.search.placeholder": "Order number, customer…",
1000
+ "orders.sort.idAsc": "Order number",
1001
+ "orders.sort.newest": "Newest first",
1002
+ "orders.sort.oldest": "Oldest first",
1003
+ "orders.sort.totalDesc": "Highest total",
1004
+ "orders.views.label": "Saved views",
1005
+ "orders.views.namePrompt": "Name for this view",
1006
+ "orders.views.none": "— Select a view —",
1007
+ "orders.views.sharedPrompt": "Share this view with other admins?",
1008
+ "organizations.action.open": "Open",
1009
+ "organizations.applicablePriceLists.column.name": "Price list",
1010
+ "organizations.applicablePriceLists.column.priority": "Priority",
1011
+ "organizations.applicablePriceLists.column.reasons": "Reasons",
1012
+ "organizations.applicablePriceLists.empty": "No price lists apply to this Organization yet.",
1013
+ "organizations.applicablePriceLists.error.load": "Failed to load applicable price lists.",
1014
+ "organizations.applicablePriceLists.reason.customer_group_match": "Customer group",
1015
+ "organizations.applicablePriceLists.reason.direct_organization_match": "Direct organization",
1016
+ "organizations.applicablePriceLists.reason.sales_channel_inheritance": "Sales channel",
1017
+ "organizations.applicablePriceLists.reason.segment_rule_match": "Segment rule",
1018
+ "organizations.applicablePriceLists.title": "Applicable price lists",
1019
+ "organizations.column.name": "Name",
1020
+ "organizations.column.registered": "Registered",
1021
+ "organizations.column.status": "Status",
1022
+ "organizations.column.taxId": "Tax ID",
1023
+ "organizations.column.vat": "VAT",
1024
+ "organizations.detail.accountStatus": "Account status",
1025
+ "organizations.detail.actions": "Actions",
1026
+ "organizations.detail.back": "Back",
1027
+ "organizations.detail.cancel": "Cancel",
1028
+ "organizations.detail.changeEmailHint": "Changing email clears verified status until the user verifies again.",
1029
+ "organizations.detail.createMember": "Create member",
1030
+ "organizations.detail.directAddCard": "Direct add member",
1031
+ "organizations.detail.edit": "Edit",
1032
+ "organizations.detail.editMember": "Edit member",
1033
+ "organizations.detail.email": "Email",
1034
+ "organizations.detail.emailPlaceholder": "colleague@company.com",
1035
+ "organizations.detail.error.create": "Create failed.",
1036
+ "organizations.detail.error.invite": "Invite failed.",
1037
+ "organizations.detail.error.load": "Failed to load.",
1038
+ "organizations.detail.error.remove": "Remove failed.",
1039
+ "organizations.detail.error.roleUpdate": "Role update failed.",
1040
+ "organizations.detail.error.save": "Save failed.",
1041
+ "organizations.detail.error.versionConflictMember": "Member was modified concurrently. Refreshing…",
1042
+ "organizations.detail.error.versionConflictOrg": "Organization was modified elsewhere. Refreshing…",
1043
+ "organizations.detail.firstName": "First name",
1044
+ "organizations.detail.hierarchyAncestors": "Parent chain",
1045
+ "organizations.detail.hierarchyCard": "Organization hierarchy",
1046
+ "organizations.detail.hierarchyError": "Could not update the organization parent.",
1047
+ "organizations.detail.hierarchyNoChildren": "This organization has no sub-organizations.",
1048
+ "organizations.detail.hierarchyParentHint": "Nest this organization under a parent, or leave empty to keep it a top-level (root) organization.",
1049
+ "organizations.detail.hierarchyParentLabel": "Parent organization",
1050
+ "organizations.detail.hierarchyRoot": "This organization is a top-level (root) organization.",
1051
+ "organizations.detail.hierarchySaved": "Organization parent updated.",
1052
+ "organizations.detail.hierarchySubtree": "Sub-organizations",
1053
+ "organizations.detail.info.invited": "Invitation sent.",
1054
+ "organizations.detail.info.memberCreated": "Member created.",
1055
+ "organizations.detail.info.memberRemoved": "Member removed.",
1056
+ "organizations.detail.info.memberUpdated": "Member updated.",
1057
+ "organizations.detail.info.profileSaved": "Member profile saved.",
1058
+ "organizations.detail.info.saved": "Saved.",
1059
+ "organizations.detail.inviteCard": "Invite member",
1060
+ "organizations.detail.lastLogin": "Last login",
1061
+ "organizations.detail.lastName": "Last name",
1062
+ "organizations.detail.membersCard": "Members",
1063
+ "organizations.detail.nameCol": "Name",
1064
+ "organizations.detail.notFound": "Organization not found.",
1065
+ "organizations.detail.registeredAddress": "Registered address",
1066
+ "organizations.detail.remove": "Remove",
1067
+ "organizations.detail.role": "Role",
1068
+ "organizations.detail.roleForLabel": "Role for {email}",
1069
+ "organizations.detail.save": "Save",
1070
+ "organizations.detail.sendInvite": "Send invite",
1071
+ "organizations.detail.statusCard": "Status",
1072
+ "organizations.detail.taxIdLabel": "Tax ID",
1073
+ "organizations.detail.tempPassword": "Temporary password (≥12)",
1074
+ "organizations.detail.twoFactor": "2FA",
1075
+ "organizations.detail.twoFactorOn": "on",
1076
+ "organizations.detail.updatedLabel": "Updated",
1077
+ "organizations.detail.vatStatus": "VAT status",
1078
+ "organizations.detail.verified": "Verified",
1079
+ "organizations.empty": "No organizations match the current filter.",
1080
+ "organizations.error.load": "Failed to load.",
1081
+ "organizations.field.search": "Search (name / tax id)",
1082
+ "organizations.field.status": "Status",
1083
+ "organizations.filter.all": "All",
1084
+ "organizations.loading": "Loading…",
1085
+ "organizations.moderation.action.approve": "Approve",
1086
+ "organizations.moderation.action.block": "Block",
1087
+ "organizations.moderation.action.reject": "Reject",
1088
+ "organizations.moderation.action.unblock": "Unblock",
1089
+ "organizations.moderation.blockedReasonLabel": "Block reason",
1090
+ "organizations.moderation.error.conflict": "Organization changed since you opened this page. Refresh and retry.",
1091
+ "organizations.moderation.error.reasonRequired": "A reason is required.",
1092
+ "organizations.moderation.error.unknown": "The action could not be completed. Please try again.",
1093
+ "organizations.moderation.error.wrongStatus": "Cannot perform this action in the current status.",
1094
+ "organizations.moderation.modal.approve.confirm": "Approve",
1095
+ "organizations.moderation.modal.approve.description": "The Organization will become Active and its members will be able to place Orders and Quote Requests.",
1096
+ "organizations.moderation.modal.approve.title": "Approve Organization?",
1097
+ "organizations.moderation.modal.block.confirm": "Block",
1098
+ "organizations.moderation.modal.block.description": "The Organization will stop being able to place Orders or Quote Requests. You may add an internal reason that operators can see.",
1099
+ "organizations.moderation.modal.block.title": "Block Organization?",
1100
+ "organizations.moderation.modal.reasonOptional": "Internal reason (optional)",
1101
+ "organizations.moderation.modal.reasonRequired": "Reason (required)",
1102
+ "organizations.moderation.modal.reject.confirm": "Reject",
1103
+ "organizations.moderation.modal.reject.description": "Provide a reason — it will be included in the email sent to the registering Customer.",
1104
+ "organizations.moderation.modal.reject.title": "Reject Organization?",
1105
+ "organizations.moderation.modal.unblock.confirm": "Unblock",
1106
+ "organizations.moderation.modal.unblock.description": "The Organization will be able to transact again.",
1107
+ "organizations.moderation.modal.unblock.title": "Unblock Organization?",
1108
+ "organizations.moderation.rejectedReasonLabel": "Rejection reason",
1109
+ "organizations.moderation.success.approve": "Organization approved.",
1110
+ "organizations.moderation.success.block": "Organization blocked.",
1111
+ "organizations.moderation.success.reject": "Organization rejected.",
1112
+ "organizations.moderation.success.unblock": "Organization unblocked.",
1113
+ "organizations.moderation.title": "Moderation",
1114
+ "organizations.page.description": "Customer organizations registered on the platform.",
1115
+ "organizations.page.title": "Organizations",
1116
+ "organizations.restrictions.action.save": "Save restrictions",
1117
+ "organizations.restrictions.deliveryMethods.title": "Allowed delivery methods",
1118
+ "organizations.restrictions.emptyHint": "Empty list ⇒ platform defaults apply (every active method offered at checkout).",
1119
+ "organizations.restrictions.error.conflict": "Organization changed since you opened this page. Refresh and retry.",
1120
+ "organizations.restrictions.error.load": "Failed to load restrictions.",
1121
+ "organizations.restrictions.error.save": "Failed to save restrictions.",
1122
+ "organizations.restrictions.paymentMethods.title": "Allowed payment methods",
1123
+ "organizations.restrictions.success.save": "Restrictions saved.",
1124
+ "organizations.restrictions.title": "Allowed payment / delivery / warehouses",
1125
+ "organizations.restrictions.warehouses.title": "Assigned warehouses",
1126
+ "organizations.restrictions.warehousesEmptyHint": "Empty list ⇒ platform default warehouses apply (no per-org stock scoping).",
1127
+ "organizations.salesReps.assign": "Assign",
1128
+ "organizations.salesReps.assignLabel": "Assign new sales rep",
1129
+ "organizations.salesReps.column.assignedAt": "Assigned at",
1130
+ "organizations.salesReps.column.email": "Email",
1131
+ "organizations.salesReps.column.name": "Name",
1132
+ "organizations.salesReps.empty": "No sales reps assigned. Quote Requests from this organization are visible to every sales rep (unassigned-org fallback).",
1133
+ "organizations.salesReps.error.assign": "Assign failed.",
1134
+ "organizations.salesReps.error.load": "Failed to load.",
1135
+ "organizations.salesReps.error.search": "Search failed.",
1136
+ "organizations.salesReps.error.unassign": "Unassign failed.",
1137
+ "organizations.salesReps.info.assigned": "Sales rep assigned.",
1138
+ "organizations.salesReps.info.unassigned": "Sales rep unassigned.",
1139
+ "organizations.salesReps.noMatch": "No matching admin user.",
1140
+ "organizations.salesReps.searchPlaceholder": "Search by name or email…",
1141
+ "organizations.salesReps.searching": "Searching…",
1142
+ "organizations.salesReps.title": "Sales representatives",
1143
+ "organizations.vatValidation.action.autoFillHint": "Available only after a successful validation that returned a legal name.",
1144
+ "organizations.vatValidation.action.validateAndAutoFill": "Validate + apply legal name",
1145
+ "organizations.vatValidation.action.validateNow": "Validate now",
1146
+ "organizations.vatValidation.column.error": "Error",
1147
+ "organizations.vatValidation.column.legalName": "Legal name",
1148
+ "organizations.vatValidation.column.outcome": "Outcome",
1149
+ "organizations.vatValidation.column.provider": "Provider",
1150
+ "organizations.vatValidation.column.when": "When",
1151
+ "organizations.vatValidation.error.load": "Failed to load validation history.",
1152
+ "organizations.vatValidation.error.trigger": "Failed to trigger validation.",
1153
+ "organizations.vatValidation.historyTitle": "Validation history",
1154
+ "organizations.vatValidation.lastResult": "Last result",
1155
+ "organizations.vatValidation.outcome.deferred": "Deferred",
1156
+ "organizations.vatValidation.outcome.failed": "Failed",
1157
+ "organizations.vatValidation.outcome.unverified": "Unverified",
1158
+ "organizations.vatValidation.outcome.validated": "Validated",
1159
+ "organizations.vatValidation.provider.format_only": "Format-only",
1160
+ "organizations.vatValidation.provider.mf_pl": "Ministerstwo Finansów",
1161
+ "organizations.vatValidation.provider.vies": "VIES",
1162
+ "organizations.vatValidation.success.deferred": "Validation deferred — provider was unavailable. Retry later.",
1163
+ "organizations.vatValidation.success.failed": "Validation finished — the identifier was rejected.",
1164
+ "organizations.vatValidation.success.unverified": "Validation completed in format-only mode.",
1165
+ "organizations.vatValidation.success.validated": "Validation succeeded.",
1166
+ "organizations.vatValidation.title": "VAT-ID validation",
1167
+ "paymentMethodAvailability.state.active": "Offered",
1168
+ "paymentMethodAvailability.state.inactive": "Not offered",
1169
+ "paymentMethodAvailability.manage": "Manage availability",
1170
+ "paymentMethodAvailability.caption": "Whether this method is offered to buyers is set in Payment methods. The rules below apply whenever it is offered.",
1171
+ "paymentMethodAvailability.notOffered": "Not currently offered to buyers: {codes}. You can still configure the rules — they apply as soon as the method is switched on.",
1172
+ "platform.modules.action.confirmDisable": "Switch \"{name}\" off? Its screens, API and background work stop. No data or configuration is deleted, and switching it back on restores everything.",
1173
+ "platform.modules.action.disable": "Switch off",
1174
+ "platform.modules.action.enable": "Switch on",
1175
+ "platform.modules.activation.alwaysOn": "Always on",
1176
+ "platform.modules.activation.alwaysOnReason": "The health probes are this module's only surface and they are never gated, so there is no switch to offer.",
1177
+ "platform.modules.activation.locked": "Cannot be switched off",
1178
+ "platform.modules.activation.off": "Switched off",
1179
+ "platform.modules.activation.on": "On",
1180
+ "platform.modules.cliHint": "Whether a module is installed on this deployment is set with the deployment tooling. Switching a capability on or off for your business is done here.",
1181
+ "platform.modules.column.actions": "Actions",
1182
+ "platform.modules.column.activation": "Your business",
1183
+ "platform.modules.column.flags": "Warnings",
1184
+ "platform.modules.column.module": "Module",
1185
+ "platform.modules.column.platform": "Deployment",
1186
+ "platform.modules.column.version": "Version",
1187
+ "platform.modules.degraded": "This list may be a few seconds out of date — the server lost its live update channel and is re-reading on a timer.",
1188
+ "platform.modules.description": "What this deployment offers, and what your business has switched on.",
1189
+ "platform.modules.empty": "No modules to show.",
1190
+ "platform.modules.error.dependenciesAbsent": "\"{name}\" cannot be switched on while everything it needs is not: {modules}. Switch those on first.",
1191
+ "platform.modules.error.dependentsPresent": "\"{name}\" cannot be switched off while these modules need it: {modules}. Switch them off first.",
1192
+ "platform.modules.error.pimConnectorAlreadyActive": "\"{name}\" cannot be switched on while another PIM connector is active ({activeModuleId}). Switch that connector off first.",
1193
+ "platform.modules.error.erpConnectorAlreadyActive": "\"{name}\" cannot be switched on while another ERP connector is active ({activeModuleId}). Switch that connector off first.",
1194
+ "platform.modules.flag.depDisabled": "Dependency disabled",
1195
+ "platform.modules.flag.depMissing": "Dependency missing",
1196
+ "platform.modules.flag.orphan": "No code on disk",
1197
+ "platform.modules.flag.pendingUpgrade": "Pending upgrade",
1198
+ "platform.modules.state.disabled": "Disabled on this deployment",
1199
+ "platform.modules.state.installed": "Available",
1200
+ "platform.modules.state.installing": "Installing",
1201
+ "platform.modules.state.notInstalled": "Not installed here",
1202
+ "platform.modules.state.uninstalled": "Removed",
1203
+ "platform.modules.title": "Modules",
1204
+ "platform.modules.versionDrift": "registered → on disk",
1205
+ "priceLists.action.displayModes": "Display modes",
1206
+ "priceLists.action.newPriceList": "New price list",
1207
+ "priceLists.bracket.addBracket": "Add bracket",
1208
+ "priceLists.bracket.addCurrency": "Add currency",
1209
+ "priceLists.bracket.column.maxQty": "Max qty",
1210
+ "priceLists.bracket.column.minQty": "Min qty",
1211
+ "priceLists.bracket.column.unitPrice": "Unit price ({code})",
1212
+ "priceLists.bracket.confirmRemoveCurrency": "Remove every {code} bracket from this product?",
1213
+ "priceLists.bracket.copy.cancel": "Cancel",
1214
+ "priceLists.bracket.copy.confirmPlural": "Copy to {count} currencies",
1215
+ "priceLists.bracket.copy.confirmSingle": "Copy to {count} currency",
1216
+ "priceLists.bracket.copy.description": "Server-side identity copy — the target currencies receive the same min/max/amount rows as the source. Targets that already have brackets will be replaced.",
1217
+ "priceLists.bracket.copy.noOthers": "No other currencies available.",
1218
+ "priceLists.bracket.copy.title": "Copy {source} brackets",
1219
+ "priceLists.bracket.copyFrom": "Copy {code} →",
1220
+ "priceLists.bracket.discard": "Discard",
1221
+ "priceLists.bracket.emptyForCurrency": "No brackets yet for {code}. Add one to start pricing.",
1222
+ "priceLists.bracket.error.copy": "Copy failed.",
1223
+ "priceLists.bracket.error.save": "Save failed.",
1224
+ "priceLists.bracket.help": "Add brackets per currency. Brackets cannot overlap; the last row should normally have no upper bound.",
1225
+ "priceLists.bracket.info.copied": "Copied {source} brackets to {targets}.",
1226
+ "priceLists.bracket.info.saved": "Saved.",
1227
+ "priceLists.bracket.noCurrencies": "No currencies yet — add one to start pricing.",
1228
+ "priceLists.bracket.removeCurrency": "Remove {code}",
1229
+ "priceLists.bracket.save": "Save brackets",
1230
+ "priceLists.bracket.saving": "Saving…",
1231
+ "priceLists.column.activeWindow": "Active window",
1232
+ "priceLists.column.lastModified": "Last modified",
1233
+ "priceLists.column.name": "Name",
1234
+ "priceLists.column.status": "Status",
1235
+ "priceLists.column.type": "Type",
1236
+ "priceLists.create.cancel": "Cancel",
1237
+ "priceLists.create.creating": "Creating…",
1238
+ "priceLists.create.description": "Lists start as Draft. Add products, brackets, and an application rule on the editor; activate when ready.",
1239
+ "priceLists.create.endsAt": "Ends at (optional)",
1240
+ "priceLists.create.name": "Name",
1241
+ "priceLists.create.nameHelp": "Shown to admins; not exposed to customers.",
1242
+ "priceLists.create.namePlaceholder": "Spring promotion 2026",
1243
+ "priceLists.create.startsAt": "Starts at (optional)",
1244
+ "priceLists.create.submit": "Create price list",
1245
+ "priceLists.create.title": "New price list",
1246
+ "priceLists.create.type": "Type",
1247
+ "priceLists.create.typeBaseOption": "Base — replaces the catalogue price",
1248
+ "priceLists.create.typeSaleOption": "Sale — Special Price shown alongside the Base",
1249
+ "priceLists.create.windowHint": "When a window is set, the list moves to Scheduled on activate and flips to Active at startsAt; it auto-expires after endsAt.",
1250
+ "priceLists.detail.activate": "Activate",
1251
+ "priceLists.detail.confirmDelete": "Delete this price list? This cannot be undone.",
1252
+ "priceLists.detail.delete": "Delete",
1253
+ "priceLists.detail.duplicate": "Duplicate",
1254
+ "priceLists.detail.error.activate": "Activate failed.",
1255
+ "priceLists.detail.error.delete": "Delete failed.",
1256
+ "priceLists.detail.error.draftify": "Draftify failed.",
1257
+ "priceLists.detail.error.duplicate": "Duplicate failed.",
1258
+ "priceLists.detail.error.load": "Failed to load.",
1259
+ "priceLists.detail.error.save": "Save failed.",
1260
+ "priceLists.detail.field.endsAt": "Ends at",
1261
+ "priceLists.detail.field.name": "Name",
1262
+ "priceLists.detail.field.startsAt": "Starts at",
1263
+ "priceLists.detail.field.type": "Type",
1264
+ "priceLists.detail.field.typeHelp": "Base lists replace the catalogue price; Sale lists render alongside the Base as a Special Price.",
1265
+ "priceLists.detail.info.saved": "Saved.",
1266
+ "priceLists.detail.info.statusChanged": "Status → {status}.",
1267
+ "priceLists.detail.info.statusDraft": "Status → Draft.",
1268
+ "priceLists.detail.modifiedAt": "Modified {date}",
1269
+ "priceLists.detail.moveToDraft": "Move to draft",
1270
+ "priceLists.detail.notFound": "Not found.",
1271
+ "priceLists.detail.picker.cancel": "Cancel",
1272
+ "priceLists.detail.picker.empty": "No matching products.",
1273
+ "priceLists.detail.picker.error.load": "Failed to load.",
1274
+ "priceLists.detail.picker.searchPlaceholder": "Search by name or SKU…",
1275
+ "priceLists.detail.picker.subtitle": "Pick a product to add to this price list. Each product can only appear once per list.",
1276
+ "priceLists.detail.picker.title": "Add product",
1277
+ "priceLists.detail.products.add": "Add",
1278
+ "priceLists.detail.products.confirmRemove": "Remove this product from the price list? Its brackets will be deleted.",
1279
+ "priceLists.detail.products.currencyCount": "{count} cur.",
1280
+ "priceLists.detail.products.empty": "No products yet. Add one to start pricing.",
1281
+ "priceLists.detail.products.error.add": "Add failed.",
1282
+ "priceLists.detail.products.error.load": "Failed to load.",
1283
+ "priceLists.detail.products.error.remove": "Remove failed.",
1284
+ "priceLists.detail.products.loadingProduct": "Loading product…",
1285
+ "priceLists.detail.products.noPrices": "no prices",
1286
+ "priceLists.detail.products.removeFromList": "Remove from price list",
1287
+ "priceLists.detail.products.selectHint": "Select a product on the left to edit its brackets.",
1288
+ "priceLists.detail.products.systemNotice": "The Default list's roster is seeded from the legacy defaultPrice attribute by migration 031. Products and brackets are read-only here; manage non-Default lists for any price overrides.",
1289
+ "priceLists.detail.products.title": "Products ({count})",
1290
+ "priceLists.detail.rule.discard": "Discard",
1291
+ "priceLists.detail.rule.save": "Save rule",
1292
+ "priceLists.detail.rule.systemNotice": "The seeded Default list always matches and cannot carry a rule (FR-005). The backend refuses any non-empty rule attached to it.",
1293
+ "priceLists.detail.rule.title": "Application rule",
1294
+ "priceLists.detail.saveChanges": "Save changes",
1295
+ "priceLists.detail.saving": "Saving…",
1296
+ "priceLists.detail.systemDeleteLocked": "System list cannot be deleted.",
1297
+ "priceLists.detail.systemNotice": "This is the seeded Default price list. Its name and type cannot be changed; lifecycle, delete, and rule edits are refused by the backend (FR-005, FR-006).",
1298
+ "priceLists.detail.systemStateLocked": "System list cannot change state.",
1299
+ "priceLists.detail.tab.details": "Details",
1300
+ "priceLists.detail.tab.products": "Products & brackets",
1301
+ "priceLists.detail.tab.rule": "Application rule",
1302
+ "priceLists.dismiss": "Dismiss",
1303
+ "priceLists.displayMode.both": "Both columns",
1304
+ "priceLists.displayMode.grossOnly": "Gross only",
1305
+ "priceLists.displayMode.inherit": "Inherit (use parent in chain)",
1306
+ "priceLists.displayMode.netOnly": "Net only",
1307
+ "priceLists.displayMode.none": "None — quote only",
1308
+ "priceLists.displayMode.rowLabel": "Price display mode override",
1309
+ "priceLists.displayMode.savedSuffix": "· saved",
1310
+ "priceLists.displayModes.addDialog.cancel": "Cancel",
1311
+ "priceLists.displayModes.addDialog.modeLabel": "Override mode",
1312
+ "priceLists.displayModes.addDialog.noMore": "No more {scope}s available.",
1313
+ "priceLists.displayModes.addDialog.noneHint": "Customers will not see a price; Add-to-cart is replaced by Add-to-Quote.",
1314
+ "priceLists.displayModes.addDialog.save": "Save override",
1315
+ "priceLists.displayModes.addDialog.subtitle": "Pick the {scope} and the mode that should override the inherited value.",
1316
+ "priceLists.displayModes.addDialog.title": "Add display-mode override",
1317
+ "priceLists.displayModes.addOverride": "Add override",
1318
+ "priceLists.displayModes.column.mode": "Mode",
1319
+ "priceLists.displayModes.column.updated": "Updated",
1320
+ "priceLists.displayModes.description": "Resolution chain: Settings → Organization → Category → Product; the most specific override wins. none hides every price element and routes purchase intent into Quote Requests.",
1321
+ "priceLists.displayModes.empty.filtered": "No {scope} overrides match your search.",
1322
+ "priceLists.displayModes.empty.none": "No {scope} overrides yet.",
1323
+ "priceLists.displayModes.empty.subtitle": "Without an override, this scope inherits its parent in the resolution chain.",
1324
+ "priceLists.displayModes.error.load": "Failed to load.",
1325
+ "priceLists.displayModes.error.save": "Save failed.",
1326
+ "priceLists.displayModes.info.removed": "Override removed.",
1327
+ "priceLists.displayModes.info.saved": "Override saved.",
1328
+ "priceLists.displayModes.remove": "Remove",
1329
+ "priceLists.displayModes.scope.category": "Category",
1330
+ "priceLists.displayModes.scope.organization": "Organization",
1331
+ "priceLists.displayModes.scope.product": "Product",
1332
+ "priceLists.displayModes.searchPlaceholder": "Search {scope}…",
1333
+ "priceLists.displayModes.settings.defaultLabel": "Default display mode (signed-in customers)",
1334
+ "priceLists.displayModes.settings.info.saved": "Setting saved.",
1335
+ "priceLists.displayModes.settings.subtitle": "— platform-wide defaults consumed by the resolver chain",
1336
+ "priceLists.displayModes.settings.title": "Pricing settings",
1337
+ "priceLists.displayModes.settings.unauthLabel": "Unauthenticated display mode (anonymous visitors)",
1338
+ "priceLists.displayModes.title": "Price display modes",
1339
+ "priceLists.empty.filtered": "No price lists match the current filters.",
1340
+ "priceLists.empty.none": "No price lists yet",
1341
+ "priceLists.empty.subtitle": "Create one to override the Default catalog price for a customer group, an organization, a sales channel, or a category.",
1342
+ "priceLists.error.create": "Create failed.",
1343
+ "priceLists.error.load": "Failed to load.",
1344
+ "priceLists.filter.status": "Status",
1345
+ "priceLists.filter.type": "Type",
1346
+ "priceLists.info.created": "Created “{name}”.",
1347
+ "priceLists.linked.emptyDescription": "Add this product to a price list to start setting per-currency brackets. The Default list seeded by migration 031 should always include it once prices have been migrated.",
1348
+ "priceLists.linked.emptyTitle": "Not yet on any price list.",
1349
+ "priceLists.linked.error.load": "Failed to load.",
1350
+ "priceLists.linked.helpText": "Bracket prices live on the price-list editor — click a row to jump there with this product pre-selected.",
1351
+ "priceLists.linked.loading": "Loading…",
1352
+ "priceLists.linked.noBracketsYet": "No bracket prices yet for this list.",
1353
+ "priceLists.linked.open": "Open",
1354
+ "priceLists.linked.openEditor": "Open price list editor",
1355
+ "priceLists.linked.system": "System",
1356
+ "priceLists.loading": "Loading…",
1357
+ "priceLists.page.description": "B2B pricing engine — Base + Sale lists, multi-bracket per-currency prices, application rules, and lifecycle status. The seeded Default list is the terminal-fallback price source.",
1358
+ "priceLists.page.title": "Price lists",
1359
+ "priceLists.rule.add": "Add",
1360
+ "priceLists.rule.addCodePlaceholder": "Add code (e.g. PLN)",
1361
+ "priceLists.rule.addCriterion": "Add criterion",
1362
+ "priceLists.rule.addSubgroup": "Add subgroup",
1363
+ "priceLists.rule.alwaysMatch": "Always match",
1364
+ "priceLists.rule.alwaysMatchHint": "— the list applies to every customer / channel / organization. Only valid on the seeded Default list.",
1365
+ "priceLists.rule.apply": "Apply ({count})",
1366
+ "priceLists.rule.cancel": "Cancel",
1367
+ "priceLists.rule.child": "child",
1368
+ "priceLists.rule.children": "children",
1369
+ "priceLists.rule.criterion.category": "Category",
1370
+ "priceLists.rule.criterion.currency": "Currency",
1371
+ "priceLists.rule.criterion.customerGroup": "Customer group",
1372
+ "priceLists.rule.criterion.organization": "Organization",
1373
+ "priceLists.rule.criterion.salesChannel": "Sales channel",
1374
+ "priceLists.rule.currencyHint": "Currencies are uppercased on save; unknown IDs are refused.",
1375
+ "priceLists.rule.depthCapReached": "Depth {cap} cap reached",
1376
+ "priceLists.rule.depthLimit": "Depth limit: {cap}.",
1377
+ "priceLists.rule.emptyGroupHint": "Empty group — will collapse to \"Always match\" on save unless you add a criterion or subgroup.",
1378
+ "priceLists.rule.error.load": "Failed to load.",
1379
+ "priceLists.rule.groupSummary": "{count} {label} · depth {depth} / {cap}",
1380
+ "priceLists.rule.intro": "Build the rule that decides which customer/organization/channel sees this price list. Empty rule (always-match) is allowed only on the seeded Default list.",
1381
+ "priceLists.rule.moreSuffix": " (+{count} more)",
1382
+ "priceLists.rule.moveDown": "Move down",
1383
+ "priceLists.rule.moveUp": "Move up",
1384
+ "priceLists.rule.noOptions": "No options.",
1385
+ "priceLists.rule.pickPlaceholder": "Pick {label}…",
1386
+ "priceLists.rule.removeCriterion": "Remove this criterion",
1387
+ "priceLists.rule.removeGroup": "Remove this group",
1388
+ "priceLists.rule.searchLoading": "Loading…",
1389
+ "priceLists.rule.searchPlaceholder": "Search…",
1390
+ "priceLists.search.placeholder": "Search by name…",
1391
+ "priceLists.stat.active": "Active",
1392
+ "priceLists.stat.sale": "Sale lists",
1393
+ "priceLists.stat.scheduled": "Scheduled",
1394
+ "priceLists.stat.total": "Total price lists",
1395
+ "priceLists.status.active": "Active",
1396
+ "priceLists.status.draft": "Draft",
1397
+ "priceLists.status.expired": "Expired",
1398
+ "priceLists.status.scheduled": "Scheduled",
1399
+ "priceLists.systemBadge": "System",
1400
+ "priceLists.type.base": "Base",
1401
+ "priceLists.type.sale": "Sale",
1402
+ "priceLists.window.always": "Always",
1403
+ "profile.changePassword": "Change password",
1404
+ "profile.emailHelp": "Contact an administrator if you need to change your email.",
1405
+ "profile.error.save": "Save failed.",
1406
+ "profile.field.email": "Email",
1407
+ "profile.field.firstName": "First name",
1408
+ "profile.field.lastName": "Last name",
1409
+ "profile.field.newPassword": "New password",
1410
+ "profile.field.newPasswordHelp": "Minimum 12 characters. Leave blank to keep your current password.",
1411
+ "profile.field.newPasswordPlaceholder": "Leave empty to keep current password",
1412
+ "profile.field.role": "Role",
1413
+ "profile.identityTitle": "Identity",
1414
+ "profile.info.nothingToSave": "Nothing to save.",
1415
+ "profile.info.updated": "Profile updated.",
1416
+ "profile.loading": "Loading…",
1417
+ "profile.page.descriptionPrefix": "Edit your name and rotate your password. Role and status are managed by an administrator with the",
1418
+ "profile.page.descriptionSuffix": "permission.",
1419
+ "profile.page.title": "My profile",
1420
+ "profile.saveChanges": "Save changes",
1421
+ "profile.saving": "Saving…",
1422
+ "profilePage.language.action.save": "Save language",
1423
+ "profilePage.language.failed": "Could not save language preference. Please try again.",
1424
+ "profilePage.language.option.en": "English",
1425
+ "profilePage.language.option.pl": "Polish",
1426
+ "profilePage.language.saved": "Language preference saved.",
1427
+ "profilePage.section.account": "Account",
1428
+ "profilePage.section.language": "Language",
1429
+ "profilePage.section.language.help": "Choose the language used by every Admin UI screen for your account. The default is English.",
1430
+ "profilePage.title": "Profile",
1431
+ "promotionRules.create.save": "Save rule",
1432
+ "promotionRules.create.title": "New rule",
1433
+ "promotionRules.empty": "No saved rules yet.",
1434
+ "promotionRules.field.name": "Rule name",
1435
+ "promotionRules.page.description": "Reusable named rules. Build once, apply across many promotions.",
1436
+ "promotionRules.page.title": "Promotion rules",
1437
+ "promotionStats.breakdown": "Breakdown",
1438
+ "promotionStats.description": "Usage and granted discount, overall and by dimension.",
1439
+ "promotionStats.discount": "Discount",
1440
+ "promotionStats.groupBy": "Group by",
1441
+ "promotionStats.title": "Statistics",
1442
+ "promotionStats.totalDiscount": "Total discount",
1443
+ "promotionStats.totalUses": "Total uses",
1444
+ "promotions.action.create": "Create",
1445
+ "promotions.action.delete": "Delete",
1446
+ "promotions.active.no": "no",
1447
+ "promotions.active.yes": "yes",
1448
+ "promotions.column.active": "Active",
1449
+ "promotions.column.code": "Code",
1450
+ "promotions.column.criteria": "Criteria",
1451
+ "promotions.column.kind": "Kind",
1452
+ "promotions.column.minCart": "Min cart",
1453
+ "promotions.column.name": "Name",
1454
+ "promotions.column.valid": "Valid",
1455
+ "promotions.column.value": "Value",
1456
+ "promotions.coupons.activate": "Activate",
1457
+ "promotions.coupons.active": "Active",
1458
+ "promotions.coupons.add": "Add coupon",
1459
+ "promotions.coupons.code": "Coupon code",
1460
+ "promotions.coupons.colCode": "Code",
1461
+ "promotions.coupons.colScope": "Scope",
1462
+ "promotions.coupons.colStatus": "Status",
1463
+ "promotions.coupons.copied": "Copied",
1464
+ "promotions.coupons.copyCode": "Copy code",
1465
+ "promotions.coupons.deactivate": "Deactivate",
1466
+ "promotions.coupons.empty": "No coupons yet. Add a single code or generate a batch.",
1467
+ "promotions.coupons.inactive": "Inactive",
1468
+ "promotions.coupons.saveFirst": "Save the promotion first to add coupon codes or generate a batch.",
1469
+ "promotions.coupons.selectedCount": "{count} selected",
1470
+ "promotions.coupons.title": "Coupons",
1471
+ "promotions.create.title": "Create promotion",
1472
+ "promotions.criteria.add": "Add criterion",
1473
+ "promotions.criteria.empty": "No criteria configured. The promotion applies to every cart line that passes the existing flat scope.",
1474
+ "promotions.criteria.loading": "Loading promo-eligible attributes…",
1475
+ "promotions.criteria.noAttributes": "No attribute is flagged as a promo rule yet. Flip the flag in Catalog → Attributes to expose it here.",
1476
+ "promotions.criteria.title": "Criteria (attribute-based)",
1477
+ "promotions.criterion.unknownAttribute": "(unknown attribute)",
1478
+ "promotions.deleteConfirm": "Delete this promotion?",
1479
+ "promotions.edit.action": "Action",
1480
+ "promotions.edit.actionType": "Action type",
1481
+ "promotions.edit.cancel": "Cancel",
1482
+ "promotions.edit.description": "Define the rule that makes this promotion apply and the action it performs.",
1483
+ "promotions.edit.general": "General",
1484
+ "promotions.edit.limits": "Usage limits",
1485
+ "promotions.edit.noConfig": "This action has no extra configuration.",
1486
+ "promotions.edit.rule": "Rule",
1487
+ "promotions.edit.ruleCopyFrom": "Copy from saved rule…",
1488
+ "promotions.edit.ruleCopyHint": "Selecting a saved rule copies its definition into the builder below. Later changes to the saved rule will not affect this promotion.",
1489
+ "promotions.edit.save": "Save",
1490
+ "promotions.edit.titleEdit": "Edit",
1491
+ "promotions.edit.titleNew": "New promotion",
1492
+ "promotions.empty": "No promotions yet.",
1493
+ "promotions.error.delete": "Delete failed.",
1494
+ "promotions.error.load": "Failed to load.",
1495
+ "promotions.error.loadAttributes": "Failed to load attributes.",
1496
+ "promotions.error.save": "Save failed.",
1497
+ "promotions.field.active": "Active",
1498
+ "promotions.field.code": "Code (optional)",
1499
+ "promotions.field.currency": "Currency",
1500
+ "promotions.field.description": "Description",
1501
+ "promotions.field.kind": "Kind",
1502
+ "promotions.field.name": "Display name",
1503
+ "promotions.field.priority": "Priority",
1504
+ "promotions.field.stopFurther": "Stop further promotions",
1505
+ "promotions.field.value": "Value",
1506
+ "promotions.field.valueIgnored": "Value (ignored)",
1507
+ "promotions.field.valuePercent": "Value (%)",
1508
+ "promotions.generator.count": "Number of coupons",
1509
+ "promotions.generator.dashEvery": "Dash every N chars (0 = none)",
1510
+ "promotions.generator.export": "Download CSV",
1511
+ "promotions.generator.format": "Character format",
1512
+ "promotions.generator.generate": "Generate",
1513
+ "promotions.generator.length": "Code length",
1514
+ "promotions.generator.limitScope": "Limit scope",
1515
+ "promotions.generator.prefix": "Prefix",
1516
+ "promotions.generator.suffix": "Suffix",
1517
+ "promotions.generator.title": "Generate a batch",
1518
+ "promotions.loading": "Loading…",
1519
+ "promotions.page.description": "Cart-level discounts. Percentage values are 0..100; amount-off requires a currency.",
1520
+ "promotions.page.title": "Promotions",
1521
+ "promotions.placeholder.csv": "comma-separated values",
1522
+ "promotions.placeholder.value": "value",
1523
+ "promotions.range.max": "max",
1524
+ "promotions.range.min": "min",
1525
+ "promotions.success.create": "Promotion {name} created.",
1526
+ "promotions.value.freeDelivery": "free delivery",
1527
+ "reorder.groupLabel": "Reorder",
1528
+ "reorder.moveDown": "Move down",
1529
+ "reorder.moveUp": "Move up",
1530
+ "reorder.saving": "Saving order…",
1531
+ "returns.action.exportCsv": "Export CSV",
1532
+ "returns.action.open": "Open",
1533
+ "returns.bulk.authorize": "Authorize {count} selected",
1534
+ "returns.bulk.result": "{authorized} authorized, {skipped} skipped",
1535
+ "returns.bulk.selected": "{count} selected",
1536
+ "returns.col.customer": "Customer",
1537
+ "returns.col.kind": "Kind",
1538
+ "returns.col.org": "Organization",
1539
+ "returns.col.refund": "Refund",
1540
+ "returns.col.rma": "RMA",
1541
+ "returns.col.status": "Status",
1542
+ "returns.col.submitted": "Submitted",
1543
+ "returns.description": "Manage return and complaint cases.",
1544
+ "returns.detail.actionFailed": "Action failed.",
1545
+ "returns.detail.col.approved": "Approved",
1546
+ "returns.detail.col.product": "Product",
1547
+ "returns.detail.correctiveInvoice.issued": "Issued",
1548
+ "returns.detail.correctiveInvoice.notDue.order_not_invoiced": "No corrective invoice was due: the order was never invoiced, so there is no document to correct.",
1549
+ "returns.detail.correctiveInvoice.notRequested": "No corrective invoice was requested for this settlement.",
1550
+ "returns.detail.correctiveInvoice.open": "Open the corrective invoice",
1551
+ "returns.detail.correctiveInvoice.title": "Corrective invoice",
1552
+ "returns.detail.resolution.credit": "Credit toward future orders",
1553
+ "returns.detail.resolution.refund": "Refund money",
1554
+ "returns.detail.resolution.repair": "Repair",
1555
+ "returns.detail.resolution.replacement": "Replacement",
1556
+ "returns.detail.settlement.createCorrectiveInvoice": "Issue a corrective invoice",
1557
+ "returns.detail.settlement.done": "Settled.",
1558
+ "returns.detail.settlement.gatewayRejected": "Payment gateway rejected the refund.",
1559
+ "returns.detail.settlement.maxPaid": "Max (paid)",
1560
+ "returns.detail.settlement.paymentMethodId": "Refund payment method id",
1561
+ "returns.detail.settlement.resolution": "Resolution",
1562
+ "returns.detail.settlement.settle": "Settle case",
1563
+ "returns.detail.settlement.title": "Settlement",
1564
+ "returns.detail.title": "Return case",
1565
+ "returns.empty": "No return cases.",
1566
+ "returns.error.bulk": "Bulk action failed",
1567
+ "returns.error.load": "Could not load returns",
1568
+ "returns.field.search": "Search",
1569
+ "returns.field.sort": "Sort",
1570
+ "returns.filter.all": "All",
1571
+ "returns.filter.clearAll": "Clear all",
1572
+ "returns.filter.kind": "Kind",
1573
+ "returns.filter.rmaNumber": "RMA number",
1574
+ "returns.filter.status": "Status",
1575
+ "returns.kind.complaint": "Complaint",
1576
+ "returns.kind.return": "Return",
1577
+ "returns.loading": "Loading returns…",
1578
+ "returns.methods.description": "Methods and cost (0 = free / shop-paid) usable for return shipments.",
1579
+ "returns.methods.title": "Return delivery methods",
1580
+ "returns.nav.csv": "CSV",
1581
+ "returns.nav.reasons": "Reasons",
1582
+ "returns.nav.returnMethods": "Return methods",
1583
+ "returns.nav.workflow": "Workflow",
1584
+ "returns.reasons.description": "Reasons offered on the storefront return form.",
1585
+ "returns.reasons.title": "Return reasons",
1586
+ "returns.search.placeholder": "RMA number…",
1587
+ "returns.sort.newest": "Newest first",
1588
+ "returns.sort.oldest": "Oldest first",
1589
+ "returns.sort.rmaAsc": "RMA ascending",
1590
+ "returns.sort.rmaDesc": "RMA descending",
1591
+ "returns.statuses.description": "Configure the return/complaint lifecycle and transitions.",
1592
+ "returns.statuses.title": "Return statuses",
1593
+ "returns.title": "Returns / RMA",
1594
+ "rfq.detail.actions": "Actions",
1595
+ "rfq.detail.approve": "Approve",
1596
+ "rfq.detail.approveDescription": "Approving locks the agreed prices and lets the customer convert the quote into an order.",
1597
+ "rfq.detail.backToList": "Back to list",
1598
+ "rfq.detail.badge.awaitingRevision": "Awaiting customer acceptance of revision",
1599
+ "rfq.detail.badge.cancelReason": "Cancel reason: {reason}",
1600
+ "rfq.detail.badge.validityEnded": "Validity ended",
1601
+ "rfq.detail.cancelDialog.confirm": "Confirm cancellation",
1602
+ "rfq.detail.cancelDialog.dismiss": "Keep RFQ",
1603
+ "rfq.detail.cancelDialog.title": "Cancel this Quote Request?",
1604
+ "rfq.detail.cancelReason": "Cancellation reason (optional)",
1605
+ "rfq.detail.cancelReasonPlaceholder": "What should we tell the customer?",
1606
+ "rfq.detail.cancelRfq": "Cancel RFQ",
1607
+ "rfq.detail.column.agreed": "Agreed",
1608
+ "rfq.detail.column.desired": "Desired",
1609
+ "rfq.detail.column.lineTotal": "Line total",
1610
+ "rfq.detail.column.product": "Product",
1611
+ "rfq.detail.column.qty": "Qty",
1612
+ "rfq.detail.convert.description": "Loads the negotiated lines into the customer's cart at the agreed unit prices and opens checkout. The Quote Request flips to Completed once the order is placed.",
1613
+ "rfq.detail.convert.error": "Convert failed.",
1614
+ "rfq.detail.convert.placeOrder": "Place order from this quote",
1615
+ "rfq.detail.convert.success": "Cart prepared: {cartId} — open {url}",
1616
+ "rfq.detail.convert.title": "Convert to order",
1617
+ "rfq.detail.copied": "Copied {id}",
1618
+ "rfq.detail.copyError": "Copy failed.",
1619
+ "rfq.detail.copyHint": "Copy ID",
1620
+ "rfq.detail.description": "Organization {orgId} · Customer {customerId}",
1621
+ "rfq.detail.error.approve": "Approve failed.",
1622
+ "rfq.detail.error.cancel": "Cancel failed.",
1623
+ "rfq.detail.error.load": "Failed to load.",
1624
+ "rfq.detail.grossLabel": "Gross total",
1625
+ "rfq.detail.headerNote": "Header note",
1626
+ "rfq.detail.history.empty": "No events.",
1627
+ "rfq.detail.history.title": "Change history",
1628
+ "rfq.detail.info.approved": "Quote Request approved.",
1629
+ "rfq.detail.info.canceled": "Quote Request canceled.",
1630
+ "rfq.detail.lineItems": "Line items ({count})",
1631
+ "rfq.detail.loading": "Loading…",
1632
+ "rfq.detail.meta.created": "Created {date}",
1633
+ "rfq.detail.meta.expired": "expired {date}",
1634
+ "rfq.detail.meta.expires": "expires {date}",
1635
+ "rfq.detail.meta.submitted": "submitted {date}",
1636
+ "rfq.detail.meta.validityEnded": "validity ended {date}",
1637
+ "rfq.detail.modify.addLine": "+ Add line",
1638
+ "rfq.detail.modify.agreedUnitPrice": "Agreed unit price",
1639
+ "rfq.detail.modify.desiredPrice": "Desired price",
1640
+ "rfq.detail.modify.error.atLeastOneLine": "At least one line is required.",
1641
+ "rfq.detail.modify.error.save": "Modify failed.",
1642
+ "rfq.detail.modify.headerNote": "Header note",
1643
+ "rfq.detail.modify.info.saved": "Quote Request modified — customer notified.",
1644
+ "rfq.detail.modify.lineTotal": "Line total",
1645
+ "rfq.detail.modify.productId": "Product id",
1646
+ "rfq.detail.modify.quantity": "Quantity",
1647
+ "rfq.detail.modify.remove": "Remove",
1648
+ "rfq.detail.modify.saveRevision": "Save revision (notifies customer)",
1649
+ "rfq.detail.modify.title": "Modify (negotiation)",
1650
+ "rfq.detail.netLabel": "Net total",
1651
+ "rfq.detail.notFound": "Quote Request not found.",
1652
+ "rfq.detail.org.taxId": "Tax ID",
1653
+ "rfq.detail.org.vat": "VAT status",
1654
+ "rfq.detail.sections.buyerNote": "Buyer note",
1655
+ "rfq.detail.sections.customer": "Customer",
1656
+ "rfq.detail.sections.items": "Line items",
1657
+ "rfq.detail.sections.organization": "Organization",
1658
+ "rfq.detail.sections.status": "Status & actions",
1659
+ "rfq.detail.tabs.history": "History",
1660
+ "rfq.detail.tabs.modify": "Modify",
1661
+ "rfq.detail.tabs.overview": "Overview",
1662
+ "rfq.detail.taxLabel": "VAT ({rate}%)",
1663
+ "rfq.detail.title": "Quote Request {id}",
1664
+ "rfq.detail.totalLabel": "Total",
1665
+ "rfq.detail.validity.error.days": "Enter a whole number of days — 0 or more.",
1666
+ "rfq.detail.validity.field": "Valid for (days from today)",
1667
+ "rfq.detail.validity.help.keepActive": "Leave blank to keep the current deadline, {date}.",
1668
+ "rfq.detail.validity.help.keepLapsed": "Leave blank to keep the deadline that has already passed, {date} — the customer stays refused.",
1669
+ "rfq.detail.validity.help.keepNone": "No deadline is set. Leave blank to keep it that way — nothing refuses the customer.",
1670
+ "rfq.detail.validity.help.preview": "Saving sets the deadline to {date}, which the customer sees.",
1671
+ "rfq.detail.validity.help.previewImmediate": "0 days ends validity immediately ({date}): the customer can no longer accept or order this quote.",
1672
+ "rfq.detail.validity.lapsed.headline": "This quote's validity ended on {date}.",
1673
+ "rfq.detail.validity.lapsed.remedyEditable": "The customer is refused when accepting the revision, and approving is held back because an approved quote can no longer be re-dated. Set a new deadline under Modify and save the revision — the customer is notified.",
1674
+ "rfq.detail.validity.lapsed.remedyLocked": "The customer is refused when placing the order, and an approved quote can no longer be modified — its deadline cannot be moved. Ask the customer to resubmit the request.",
1675
+ "rfq.detail.validity.lapsed.setNewDeadline": "Set a new deadline",
1676
+ "rfq.detail.validity.placeholder": "Unchanged",
1677
+ "rfq.detail.vatStatus.reverse_charge": "Reverse charge",
1678
+ "rfq.detail.vatStatus.vat_exempt": "VAT exempt",
1679
+ "rfq.detail.vatStatus.vat_payer": "VAT payer",
1680
+ "rfq.list.badge.awaitingCustomer": "Awaiting customer",
1681
+ "rfq.list.column.customer": "Customer",
1682
+ "rfq.list.column.lines": "Lines",
1683
+ "rfq.list.column.org": "Organization",
1684
+ "rfq.list.column.organization": "Organization",
1685
+ "rfq.list.column.rfq": "RFQ",
1686
+ "rfq.list.column.status": "Status",
1687
+ "rfq.list.column.total": "Total",
1688
+ "rfq.list.column.updated": "Updated",
1689
+ "rfq.list.columns.label": "Columns",
1690
+ "rfq.list.create": "Create quote request",
1691
+ "rfq.list.description": "Customer enquiries waiting on a response.",
1692
+ "rfq.list.empty": "No Quote Requests match the current filter.",
1693
+ "rfq.list.error.load": "Failed to load.",
1694
+ "rfq.list.field.organizationId": "Organization id (optional)",
1695
+ "rfq.list.field.search": "Search",
1696
+ "rfq.list.field.sort": "Sort",
1697
+ "rfq.list.field.status": "Status",
1698
+ "rfq.list.field.uuid": "UUID",
1699
+ "rfq.list.field.visibility": "Visibility",
1700
+ "rfq.list.filter.clearAll": "Clear all",
1701
+ "rfq.list.filter.toggle": "Filters",
1702
+ "rfq.list.loading": "Loading…",
1703
+ "rfq.list.open": "Open",
1704
+ "rfq.list.refresh": "Refresh",
1705
+ "rfq.list.scope.all": "All (platform admin)",
1706
+ "rfq.list.scope.mine": "My organizations",
1707
+ "rfq.list.scope.unassigned": "Unassigned organizations",
1708
+ "rfq.list.search.placeholder": "Search by ID, organization, or customer…",
1709
+ "rfq.list.sort.newest": "Newest",
1710
+ "rfq.list.sort.oldest": "Oldest",
1711
+ "rfq.list.sort.totalDesc": "Highest total",
1712
+ "rfq.list.statusFilter.all": "All",
1713
+ "rfq.list.statusFilter.approved": "Approved",
1714
+ "rfq.list.statusFilter.canceled": "Canceled",
1715
+ "rfq.list.statusFilter.completed": "Completed",
1716
+ "rfq.list.statusFilter.createdFromAdmin": "Created from admin",
1717
+ "rfq.list.statusFilter.expired": "Expired",
1718
+ "rfq.list.statusFilter.pending": "Pending",
1719
+ "rfq.list.title": "Quote Requests",
1720
+ "rfqCreate.addItem": "Add line",
1721
+ "rfqCreate.back": "Back to quote requests",
1722
+ "rfqCreate.description": "Create a quote request on behalf of a customer",
1723
+ "rfqCreate.empty.customers": "No matching customers",
1724
+ "rfqCreate.error": "Could not create the quote request",
1725
+ "rfqCreate.field.agreedUnitPrice": "Agreed unit price",
1726
+ "rfqCreate.field.customer": "Customer",
1727
+ "rfqCreate.field.expiresInDays": "Expires in (days)",
1728
+ "rfqCreate.field.headerNote": "Header note",
1729
+ "rfqCreate.field.product": "Product",
1730
+ "rfqCreate.field.quantity": "Qty",
1731
+ "rfqCreate.loading": "Loading…",
1732
+ "rfqCreate.noOrgWarning": "This customer is not attached to an organization. Quote requests require an organization.",
1733
+ "rfqCreate.placeholder.customer": "Search by name or email…",
1734
+ "rfqCreate.placeholder.expiresInDays": "No expiry",
1735
+ "rfqCreate.placeholder.headerNote": "Optional note shown to the customer",
1736
+ "rfqCreate.placeholder.product": "Search by name, SKU, or slug…",
1737
+ "rfqCreate.section.customer": "Customer",
1738
+ "rfqCreate.section.items": "Line items",
1739
+ "rfqCreate.section.options": "Options",
1740
+ "rfqCreate.submit": "Create quote request",
1741
+ "rfqCreate.submitting": "Creating…",
1742
+ "rfqCreate.title": "Create quote request",
1743
+ "rfqCreate.total": "Total",
1744
+ "ruleBuilder.values.label": "Value",
1745
+ "ruleBuilder.values.placeholder": "Any value",
1746
+ "ruleBuilder.values.search": "Search values…",
1747
+ "scopeNotice.organizationAttributionPending.title": "These records are not assigned to an organization yet",
1748
+ "scopeNotice.organizationAttributionPending.body": "You see records belonging to the organizations you work with. None of these records names an organization yet, so none of them can appear here. Nothing has gone missing and nothing is wrong with your account — this is how these records are stored today, and someone whose access is not limited to particular organizations can still see them.",
1749
+ "scopePicker.languages": "Languages",
1750
+ "scopePicker.loadingLanguages": "Loading channel languages…",
1751
+ "scopePicker.selectChannel": "Select at least one channel.",
1752
+ "scopePicker.title": "Scope",
1753
+ "seo.meta.error.load": "Failed to load meta.",
1754
+ "seo.meta.error.save": "Save failed.",
1755
+ "seo.meta.field.description": "Description",
1756
+ "seo.meta.field.entityUuid": "Entity UUID",
1757
+ "seo.meta.field.locale": "locale",
1758
+ "seo.meta.field.ogDescription": "OG description",
1759
+ "seo.meta.field.ogImage": "OG image",
1760
+ "seo.meta.field.ogImageUrl": "OG image URL",
1761
+ "seo.meta.field.ogTitle": "OG title",
1762
+ "seo.meta.field.title": "Title",
1763
+ "seo.meta.info.saved": "Override saved.",
1764
+ "seo.meta.load": "Load",
1765
+ "seo.meta.overrideHeading": "Override (leave blank to fall back to rule)",
1766
+ "seo.meta.resolvedTitle": "Resolved (source: {source})",
1767
+ "seo.meta.saveOverride": "Save override",
1768
+ "seo.meta.saving": "Saving…",
1769
+ "seo.meta.title": "Meta-tag overrides",
1770
+ "seo.page.description": "Per-channel sitemap generation and meta-tag overrides.",
1771
+ "seo.page.title": "SEO",
1772
+ "seo.sitemap.column.actions": "Actions",
1773
+ "seo.sitemap.column.channel": "Sales channel",
1774
+ "seo.sitemap.column.lastGenerated": "Last generated",
1775
+ "seo.sitemap.column.size": "Size",
1776
+ "seo.sitemap.column.storefrontUrl": "Storefront URL",
1777
+ "seo.sitemap.column.urls": "URLs",
1778
+ "seo.sitemap.download": "Download",
1779
+ "seo.sitemap.empty": "No active sales channels.",
1780
+ "seo.sitemap.error.download": "Download failed.",
1781
+ "seo.sitemap.error.load": "Failed to load sitemap status.",
1782
+ "seo.sitemap.error.popupBlocked": "Popup was blocked — allow popups for this site to preview the sitemap.",
1783
+ "seo.sitemap.error.preview": "Preview failed.",
1784
+ "seo.sitemap.error.regenerate": "Regenerate failed.",
1785
+ "seo.sitemap.help.middle": "setting. Configure it in Settings → Sales Channels for each channel; empty falls back to the",
1786
+ "seo.sitemap.help.prefix": "Storefront URL is read from the per-channel",
1787
+ "seo.sitemap.help.suffix": "environment variable.",
1788
+ "seo.sitemap.loading": "Loading…",
1789
+ "seo.sitemap.preview": "Preview",
1790
+ "seo.sitemap.regenerate": "Regenerate",
1791
+ "seo.sitemap.regenerated": "Regenerated sitemap for \"{code}\" — {count} URLs ({size}).",
1792
+ "seo.sitemap.sourcePrefix": "source:",
1793
+ "seo.sitemap.title": "Sitemap",
1794
+ "taxes.action.delete": "Delete",
1795
+ "taxes.action.save": "Save",
1796
+ "taxes.badge.default": "default",
1797
+ "taxes.column.code": "Code",
1798
+ "taxes.column.country": "Country",
1799
+ "taxes.column.default": "Default",
1800
+ "taxes.column.name": "Name",
1801
+ "taxes.column.priority": "Priority",
1802
+ "taxes.column.productType": "Product type",
1803
+ "taxes.column.rate": "Rate",
1804
+ "taxes.column.vatStatuses": "VAT statuses",
1805
+ "taxes.deleteConfirm": "Delete this tax rule?",
1806
+ "taxes.empty": "No tax rules yet.",
1807
+ "taxes.error.delete": "Delete failed.",
1808
+ "taxes.error.load": "Failed to load.",
1809
+ "taxes.error.save": "Save failed.",
1810
+ "taxes.field.code": "Code",
1811
+ "taxes.field.country": "Country (ISO-2, blank = any)",
1812
+ "taxes.field.isDefault": "Default fallback rule",
1813
+ "taxes.field.name": "Display name",
1814
+ "taxes.field.priority": "Priority (higher wins on ties)",
1815
+ "taxes.field.productType": "Product type (blank = any)",
1816
+ "taxes.field.rate": "Rate (decimal — 0.23 = 23%)",
1817
+ "taxes.field.vatStatuses": "Applies to VAT statuses (none = any)",
1818
+ "taxes.loading": "Loading…",
1819
+ "taxes.noPermission": "You do not have permission to view tax rules.",
1820
+ "taxes.option.any": "— any —",
1821
+ "taxes.page.description": "Per-rule rates narrowed by country, product type, and buyer VAT status.",
1822
+ "taxes.page.title": "Taxes",
1823
+ "taxes.success.save": "Saved tax {code}.",
1824
+ "taxes.upsert.title": "New / update tax rule",
1825
+ "warehouses.action.cancel": "Cancel",
1826
+ "warehouses.action.create": "Create warehouse",
1827
+ "warehouses.action.delete": "Delete",
1828
+ "warehouses.action.new": "New warehouse",
1829
+ "warehouses.action.saveChanges": "Save changes",
1830
+ "warehouses.action.saving": "Saving…",
1831
+ "warehouses.channel.action.add": "Add",
1832
+ "warehouses.channel.action.adding": "Adding…",
1833
+ "warehouses.channel.action.makeDefault": "Make default",
1834
+ "warehouses.channel.action.unassign": "Unassign",
1835
+ "warehouses.channel.addTitle": "Add warehouse",
1836
+ "warehouses.channel.alert.promoteFirst": "Promote another warehouse to default before unassigning the current default.",
1837
+ "warehouses.channel.column.code": "Code",
1838
+ "warehouses.channel.column.default": "Default",
1839
+ "warehouses.channel.column.sort": "Sort",
1840
+ "warehouses.channel.column.warehouse": "Warehouse",
1841
+ "warehouses.channel.confirm.unassign": "Unassign this warehouse from the channel?",
1842
+ "warehouses.channel.defaultBadge": "Default",
1843
+ "warehouses.channel.empty": "No warehouses bound to this channel yet.",
1844
+ "warehouses.channel.error.assign": "Assign failed.",
1845
+ "warehouses.channel.error.load": "Failed to load.",
1846
+ "warehouses.channel.error.unassign": "Unassign failed.",
1847
+ "warehouses.channel.error.update": "Update failed.",
1848
+ "warehouses.channel.field.pickOne": "— pick one —",
1849
+ "warehouses.channel.field.warehouse": "Warehouse",
1850
+ "warehouses.channel.info.assigned": "Warehouse assigned.",
1851
+ "warehouses.channel.info.defaultChanged": "Default warehouse changed.",
1852
+ "warehouses.channel.info.removed": "Assignment removed.",
1853
+ "warehouses.channel.loading": "Loading channel warehouses…",
1854
+ "warehouses.channel.title": "Warehouses for this channel",
1855
+ "warehouses.column.code": "Code",
1856
+ "warehouses.column.defaultFor": "Default for",
1857
+ "warehouses.column.name": "Name",
1858
+ "warehouses.column.onHand": "On hand",
1859
+ "warehouses.column.products": "Products",
1860
+ "warehouses.column.status": "Status",
1861
+ "warehouses.column.updated": "Updated",
1862
+ "warehouses.editor.addressTitle": "Address (optional)",
1863
+ "warehouses.editor.backToList": "All warehouses",
1864
+ "warehouses.editor.channelDefaultsSuffix": "{count} channel default(s)",
1865
+ "warehouses.editor.contactTitle": "Contact (optional)",
1866
+ "warehouses.editor.deleteConfirm": "Delete warehouse \"{name}\"? This cannot be undone.",
1867
+ "warehouses.editor.error.delete": "Delete failed.",
1868
+ "warehouses.editor.error.load": "Failed to load warehouse.",
1869
+ "warehouses.editor.error.save": "Save failed.",
1870
+ "warehouses.editor.fallbackTitle": "Warehouse",
1871
+ "warehouses.editor.field.active": "Active",
1872
+ "warehouses.editor.field.city": "City",
1873
+ "warehouses.editor.field.code": "Code",
1874
+ "warehouses.editor.field.codeHelp": "Lowercase, digits, dashes, underscores. Immutable after creation.",
1875
+ "warehouses.editor.field.contactEmail": "Email",
1876
+ "warehouses.editor.field.contactName": "Name",
1877
+ "warehouses.editor.field.contactPhone": "Phone",
1878
+ "warehouses.editor.field.countryCode": "Country code",
1879
+ "warehouses.editor.field.countryNone": "— none —",
1880
+ "warehouses.editor.field.defaultLowStockThreshold": "Default low-stock threshold",
1881
+ "warehouses.editor.field.defaultLowStockThresholdHelp": "Applies to products without their own threshold. The system picks the highest such value across warehouses holding stock for the product.",
1882
+ "warehouses.editor.field.defaultLowStockThresholdPlaceholder": "Leave empty for no warehouse-level default",
1883
+ "warehouses.editor.field.description": "Description",
1884
+ "warehouses.editor.field.name": "Name",
1885
+ "warehouses.editor.field.postalCode": "Postal code",
1886
+ "warehouses.editor.field.street": "Street",
1887
+ "warehouses.editor.identityTitle": "Identity",
1888
+ "warehouses.editor.lowStockTitle": "Low-stock threshold (optional)",
1889
+ "warehouses.editor.newTitle": "New warehouse",
1890
+ "warehouses.editor.systemDefaultSuffix": " · system default",
1891
+ "warehouses.empty": "No warehouses match the current filters",
1892
+ "warehouses.error.load": "Failed to load.",
1893
+ "warehouses.filter.activeOnly": "Active only",
1894
+ "warehouses.loading": "Loading…",
1895
+ "warehouses.page.sub.prefix": "Stocking locations · The seeded",
1896
+ "warehouses.page.sub.suffix": "warehouse cannot be deleted while it backs sales channels.",
1897
+ "warehouses.page.title": "Warehouses",
1898
+ "warehouses.search.placeholder": "Search code or name…",
1899
+ "warehouses.status.active": "Active",
1900
+ "warehouses.status.inactive": "Inactive",
1901
+ "webhooks.action.delete": "Delete",
1902
+ "webhooks.action.deleteConfirm": "Delete this webhook? Pending deliveries will continue but no new ones will be enqueued.",
1903
+ "webhooks.action.pause": "Pause",
1904
+ "webhooks.action.refresh": "Refresh",
1905
+ "webhooks.action.replay": "Replay",
1906
+ "webhooks.action.resume": "Resume",
1907
+ "webhooks.column.events": "Events",
1908
+ "webhooks.column.name": "Name",
1909
+ "webhooks.column.organization": "Organization",
1910
+ "webhooks.column.status": "Status",
1911
+ "webhooks.column.url": "URL",
1912
+ "webhooks.create.eventsLabel": "Events",
1913
+ "webhooks.create.nameLabel": "Name",
1914
+ "webhooks.create.namePlaceholder": "e.g. ERP order sync",
1915
+ "webhooks.create.organizationHelp": "Leave empty for a platform-wide subscription that receives every organization's events. Bind an organization to deliver only that organization's order events.",
1916
+ "webhooks.create.organizationLabel": "Organization (optional)",
1917
+ "webhooks.create.submit": "Subscribe",
1918
+ "webhooks.create.submitting": "Creating…",
1919
+ "webhooks.create.success": "Webhook created.",
1920
+ "webhooks.create.title": "Subscribe to events",
1921
+ "webhooks.create.urlLabel": "Receiver URL",
1922
+ "webhooks.create.urlPlaceholder": "https://example.com/hooks",
1923
+ "webhooks.deliveries.column.attempts": "Attempts",
1924
+ "webhooks.deliveries.column.created": "Created",
1925
+ "webhooks.deliveries.column.event": "Event",
1926
+ "webhooks.deliveries.column.lastError": "Last error",
1927
+ "webhooks.deliveries.column.lastResponse": "Last response",
1928
+ "webhooks.deliveries.column.status": "Status",
1929
+ "webhooks.deliveries.column.webhook": "Webhook",
1930
+ "webhooks.deliveries.empty": "No deliveries match this filter.",
1931
+ "webhooks.deliveries.filter.all": "All statuses",
1932
+ "webhooks.deliveries.filter.deadLettered": "Dead-lettered",
1933
+ "webhooks.deliveries.filter.failed": "Failed",
1934
+ "webhooks.deliveries.replayQueued": "Replay queued — a new delivery row is now pending.",
1935
+ "webhooks.deliveries.title": "Recent deliveries",
1936
+ "webhooks.delivery.replayQueued": "Replay queued — a new delivery row is now pending.",
1937
+ "webhooks.empty": "No subscriptions yet.",
1938
+ "webhooks.error.create": "Failed to create webhook.",
1939
+ "webhooks.error.delete": "Failed to delete webhook.",
1940
+ "webhooks.error.load": "Failed to load webhooks.",
1941
+ "webhooks.error.loadDeliveries": "Failed to load deliveries.",
1942
+ "webhooks.error.replay": "Replay failed.",
1943
+ "webhooks.error.update": "Failed to update webhook.",
1944
+ "webhooks.list.title": "Subscriptions",
1945
+ "webhooks.organization.platformWide": "Platform-wide",
1946
+ "webhooks.page.description": "HMAC-signed outbound notifications. Receivers must be idempotent on event id.",
1947
+ "webhooks.page.title": "Webhooks",
1948
+ "webhooks.revealed.confirm": "I have stored it",
1949
+ "webhooks.revealed.copied": "Copied!",
1950
+ "webhooks.revealed.copy": "Copy secret",
1951
+ "webhooks.revealed.title": "Copy this signing secret now — it will not be shown again. Share it with the receiver so it can verify the X-Webhook-Signature-256 HMAC header.",
1952
+ "webhooks.status.active": "Active",
1953
+ "webhooks.status.paused": "Paused",
1954
+ "platform.modules.recentActivity.shown": "On the dashboard",
1955
+ "platform.modules.recentActivity.hidden": "Not on the dashboard",
1956
+ "platform.modules.recentActivity.hint": "Whether {name}'s entries appear on the home dashboard's Recent Activity card. The audit trail itself is unchanged."
1957
+ }