2.0 KiB
2.0 KiB
Commercial i18n Report
Date: 2026-07-29
Status: PASS
Single translation layer
Commercial translations are centralized in frontend/modules/commercial/presentation.ts.
The layer owns:
- Registry presentation dictionary
- Registry aliases
- Field labels and field groups
- Status, visibility, lifecycle, pricing-model, interval, and currency labels
- Entity reference resolution
- Product, bundle, pricing, plan, and capability naming
- Money and date formatting
- Business descriptions
- Recommendation reasons
- Friendly error normalization
- Technical-field suppression
- Nested value presentation
No component-level registry label dictionaries remain. Admin resource bindings import the presentation definition instead of duplicating copy.
Presentation rules
- Persian metadata supplied by the runtime is preserved.
- Known technical identifiers are converted into business names.
- English runtime descriptions are replaced by the Persian registry description.
- Unknown technical enum values are never echoed to users.
- Internal identifiers, stable codes, route fields, raw payloads, and trace fields are suppressed.
- Arrays render as chips or structured cards.
- Nested objects render as labeled expandable sections.
Quality-gate results
| Gate | Result |
|---|---|
Commercial Item |
PASS — not visible |
گزینه تجاری |
PASS — removed |
Unknown Item / visible Unknown |
PASS — not visible |
| Raw registry identifier examples | PASS — not visible |
Direct display_name rendering |
PASS — all routed through presentation resolver |
Raw stable_code / payload rendering |
PASS — suppressed |
[object Object] |
PASS — recursive renderer |
| English visible copy in Commercial JSX | PASS |
| TypeScript | PASS |
| Scoped ESLint | PASS, zero warnings |
Notes
Technical terms may still exist in TypeScript types, internal adapter variables, API bindings, comments, and lookup keys. These are not presentation output and are required for runtime integration.