fix(i18n): eliminate all raw translation key leaks across admin pages
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> - Audited every 'key | translate' and translateService.t() usage under features/admin against en/ru/hy; 37 static keys and 8 dynamic namespaces were missing and rendered as raw keys - Added full adminTransactions namespace (was entirely absent), adminUsers table/invite/session keys with scopeValue/statusValue/invitationStatus maps, adminMonitoring section titles and categoryValue/queueStatus/webhookStatus/levelValue maps, adminAnalytics.topProducts, adminProducts.variants/archived - Resolved leaf/object key conflicts: dynamic 'adminMonitoring.category.*' renamed to categoryValue.*, 'adminTransactions.type.*' to typeValue.* so the leaf labels translate correctly - Monitoring event severity now translated (levelValue) instead of raw English enum - Merchant wording over technical: 'Background queues', 'Webhook deliveries', 'Activity log', 'Running smoothly/Slowed down/Stopped' - Verified zero missing keys in en/ru/hy via AST-level key extraction
This commit is contained in:
@@ -1535,6 +1535,8 @@ export const en: Translations = {
|
||||
addVariant: 'Add variant',
|
||||
variantName: 'Variant name',
|
||||
variantsHint: 'Each variant is a purchasable option of this product, e.g. a size or color, with its own price and stock.',
|
||||
variants: 'Variants',
|
||||
archived: 'Archived',
|
||||
seoExplain: 'This is what shows up in search results — a clear title and description help customers find this product.',
|
||||
searchTitle: 'Search title',
|
||||
searchTitleHint: 'The headline shown in search results. Keep it short and descriptive.',
|
||||
@@ -1590,10 +1592,98 @@ export const en: Translations = {
|
||||
emptyTitle: 'No users found',
|
||||
emptyDescription: 'Invite a teammate to get started.',
|
||||
invitationsEmptyTitle: 'No pending invitations',
|
||||
title: 'Team members',
|
||||
name: 'Name',
|
||||
email: 'Email',
|
||||
scope: 'Workspace',
|
||||
role: 'Role',
|
||||
roles: 'Roles',
|
||||
lastLogin: 'Last sign-in',
|
||||
sessions: 'Active sessions',
|
||||
currentSession: 'This session',
|
||||
invite: 'Invite member',
|
||||
sendInvite: 'Send invitation',
|
||||
revoke: 'Revoke',
|
||||
passwordlessHint: 'Team members sign in with Telegram - no passwords to manage.',
|
||||
confirmSuspend: 'Suspend this team member? They will lose access immediately.',
|
||||
scopeValue: {
|
||||
marketplace: 'Storefront',
|
||||
office: 'Back office',
|
||||
},
|
||||
statusValue: {
|
||||
active: 'Active',
|
||||
invited: 'Invited',
|
||||
suspended: 'Suspended',
|
||||
},
|
||||
invitationStatus: {
|
||||
pending: 'Pending',
|
||||
accepted: 'Accepted',
|
||||
expired: 'Expired',
|
||||
revoked: 'Revoked',
|
||||
},
|
||||
},
|
||||
adminTransactions: {
|
||||
search: 'Search transactions',
|
||||
type: 'Type',
|
||||
method: 'Payment method',
|
||||
fraud: 'Fraud check',
|
||||
flagged: 'Flagged',
|
||||
retry: 'Retry',
|
||||
audit: 'History',
|
||||
emptyTitle: 'No transactions found',
|
||||
emptyDescription: 'Try a different filter or search term.',
|
||||
status: {
|
||||
all: 'All statuses',
|
||||
pending: 'Pending',
|
||||
success: 'Successful',
|
||||
failed: 'Failed',
|
||||
retried: 'Retried',
|
||||
},
|
||||
typeValue: {
|
||||
all: 'All types',
|
||||
payment: 'Payment',
|
||||
refund: 'Refund',
|
||||
qr_payment: 'QR payment',
|
||||
},
|
||||
},
|
||||
adminMonitoring: {
|
||||
eventsEmptyTitle: 'No events found',
|
||||
eventsEmptyDescription: 'Try a different category filter or search term.',
|
||||
health: 'Health checks',
|
||||
queues: 'Background queues',
|
||||
depth: 'Waiting',
|
||||
webhooks: 'Webhook deliveries',
|
||||
endpoint: 'Destination',
|
||||
event: 'Event',
|
||||
events: 'Activity log',
|
||||
category: 'Category',
|
||||
level: 'Severity',
|
||||
message: 'Description',
|
||||
categoryValue: {
|
||||
all: 'All categories',
|
||||
audit: 'Admin activity',
|
||||
security: 'Security',
|
||||
login: 'Sign-in',
|
||||
failed_login: 'Failed sign-in',
|
||||
api: 'API',
|
||||
error: 'Error',
|
||||
warning: 'Warning',
|
||||
},
|
||||
queueStatus: {
|
||||
healthy: 'Running smoothly',
|
||||
degraded: 'Slowed down',
|
||||
down: 'Stopped',
|
||||
},
|
||||
webhookStatus: {
|
||||
delivered: 'Delivered',
|
||||
failed: 'Failed',
|
||||
pending: 'Pending',
|
||||
},
|
||||
levelValue: {
|
||||
info: 'Info',
|
||||
warning: 'Warning',
|
||||
error: 'Error',
|
||||
},
|
||||
systemState: 'System state',
|
||||
backendConnectivity: 'Backend',
|
||||
connected: 'Connected',
|
||||
@@ -1608,6 +1698,7 @@ export const en: Translations = {
|
||||
adminAnalytics: {
|
||||
topProductsEmptyTitle: 'No product sales in this period',
|
||||
topProductsEmptyDescription: 'Try a wider date range.',
|
||||
topProducts: 'Top products',
|
||||
print: 'Print',
|
||||
tabsLabel: 'Analytics sections',
|
||||
tab: {
|
||||
|
||||
Reference in New Issue
Block a user