Bilingual parity — EN · VI string registry

The enforcement gate for the v3 bilingual doctrine (owner: all components/artifacts bilingual). Reads the central registry components/_i18n/strings.js and fails if any component (a) lacks an en or vi table, (b) has mismatched key sets across en/vi (missing or extra keys), or (c) has any empty value. As Batch 1 wires each component to i18n.js and registers its built-in strings here, this gate keeps EN and VI in lockstep — no half-translated component ships. window.__bilingual.pass must be true.

running…