Maps a caries surface identifier to its existing i18n surface-label key,
so the popup header can read e.g. "Caries details – Buccal". Falls back to
the raw surface string for any (unexpected) unmapped value.
When toothNo is given and is an anterior tooth (incisor/canine), the
"occlusal" surface DISPLAYS as "incisal" (surface.incisal) instead of
surface.occlusal — the stored surface value is unaffected, this only
changes which i18n key the label resolves to.
Arch/anterior-aware for ALL of occlusal/buccal/lingual, gated on the
surfaceNotation setting. In "full" mode (default): occlusal -> incisal
(anterior), buccal -> labial
(anterior), lingual -> palatal (upper) / lingual (lower, a NEW key
separate from the combined surface.lingualPalatal). In "simple" mode
the generic, tooth-independent keys are always used
(buccal/occlusal/lingualPalatal). Exported so it can be unit-tested
directly.
Maps a caries surface identifier to its existing i18n surface-label key, so the popup header can read e.g. "Caries details – Buccal". Falls back to the raw surface string for any (unexpected) unmapped value.
When
toothNois given and is an anterior tooth (incisor/canine), the "occlusal" surface DISPLAYS as "incisal" (surface.incisal) instead ofsurface.occlusal— the stored surface value is unaffected, this only changes which i18n key the label resolves to.Arch/anterior-aware for ALL of occlusal/buccal/lingual, gated on the
surfaceNotationsetting. In "full" mode (default): occlusal -> incisal (anterior), buccal -> labial (anterior), lingual -> palatal (upper) / lingual (lower, a NEW key separate from the combinedsurface.lingualPalatal). In "simple" mode the generic, tooth-independent keys are always used (buccal/occlusal/lingualPalatal). Exported so it can be unit-tested directly.