External validation
Codegen always writes dictionary-schema.generated.ts under codegenPath/. Use it to validate unknown CMS/API payloads against the ICU contract before writing authoring files and calling regenerateNamespaces. Validation is not a runtime patch API.
import { formatIssues } from "@xndrjs/i18n/validation";import { validateExternalKey } from "./i18n/generated/dictionary-schema.generated.js";
const raw: unknown = await loadTranslations();const result = validateExternalKey("billing", "invoice_summary", raw);
if (!result.ok) { console.error(formatIssues(result.issues)); return;}
// write authoring file, then regenerateNamespaces({ namespaces: ["billing"], … })Codegen emits validateExternalDictionaryPartial(), validateExternalNamespacePartial(), and validateExternalKey().
Validation runs in two phases:
- Normalize — parse ICU templates, extract variables, check required keys (missing keys fail; extra keys ignored; partial locales OK).
- Validate — compare extracted arguments against the static
Paramsschema via Zod.
Low-level helpers are also exported from @xndrjs/i18n/validation for custom wiring. See Errors & exports.