Skip to content

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:

  1. Normalize — parse ICU templates, extract variables, check required keys (missing keys fail; extra keys ignored; partial locales OK).
  2. Validate — compare extracted arguments against the static Params schema via Zod.

Low-level helpers are also exported from @xndrjs/i18n/validation for custom wiring. See Errors & exports.