TorbatYar/docs/commercial-i18n-report.md

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.