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:
@@ -62,7 +62,7 @@
|
||||
<app-input type="search" [ngModel]="facade.filters().search" (ngModelChange)="facade.updateFilters({ search: $event })" [placeholder]="'adminOrders.search' | translate" />
|
||||
<select [attr.aria-label]="'adminMonitoring.category' | translate" [ngModel]="facade.filters().category" (ngModelChange)="facade.updateFilters({ category: $event })">
|
||||
@for (category of categories; track category) {
|
||||
<option [value]="category">{{ ('adminMonitoring.category.' + category) | translate }}</option>
|
||||
<option [value]="category">{{ ('adminMonitoring.categoryValue.' + category) | translate }}</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
@@ -88,8 +88,8 @@
|
||||
<tbody>
|
||||
@for (event of facade.events(); track event.id) {
|
||||
<tr>
|
||||
<td>{{ ('adminMonitoring.category.' + event.category) | translate }}</td>
|
||||
<td><app-badge [variant]="event.level === 'error' ? 'danger' : event.level === 'warning' ? 'warning' : 'neutral'">{{ event.level }}</app-badge></td>
|
||||
<td>{{ ('adminMonitoring.categoryValue.' + event.category) | translate }}</td>
|
||||
<td><app-badge [variant]="event.level === 'error' ? 'danger' : event.level === 'warning' ? 'warning' : 'neutral'">{{ ('adminMonitoring.levelValue.' + event.level) | translate }}</app-badge></td>
|
||||
<td>{{ event.message }}</td>
|
||||
<td>{{ event.actor }}</td>
|
||||
<td>{{ event.timestamp | date:'short' }}</td>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</select>
|
||||
<select [attr.aria-label]="'adminTransactions.type' | translate" [ngModel]="facade.filters().type" (ngModelChange)="facade.updateFilters({ type: $event })">
|
||||
@for (type of types; track type) {
|
||||
<option [value]="type">{{ ('adminTransactions.type.' + type) | translate }}</option>
|
||||
<option [value]="type">{{ ('adminTransactions.typeValue.' + type) | translate }}</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
@@ -39,7 +39,7 @@
|
||||
@for (tx of facade.transactions(); track tx.id) {
|
||||
<tr>
|
||||
<td>{{ tx.orderNumber }}</td>
|
||||
<td>{{ ('adminTransactions.type.' + tx.type) | translate }}</td>
|
||||
<td>{{ ('adminTransactions.typeValue.' + tx.type) | translate }}</td>
|
||||
<td>{{ tx.method }}</td>
|
||||
<td><app-badge [variant]="tx.status === 'success' ? 'success' : tx.status === 'failed' ? 'danger' : 'neutral'">{{ ('adminTransactions.status.' + tx.status) | translate }}</app-badge></td>
|
||||
<td>{{ tx.amount }} {{ tx.currency }}</td>
|
||||
|
||||
Reference in New Issue
Block a user