Catch a template-built i18n key that next-intl cannot reach

Testkamo-internal
Shipped
August 14, 2026 at 11:25 PM UTC
Author
kamo
Commit
6fd464c

The catalogue's keys contain dots, and they were written into en.json as literal flat keys. next-intl resolves by splitting on dots, so every one of the 46 event titles and descriptions rendered as a missing-key fallback on all three settings pages. Verified against the installed next-intl, not assumed: createTranslator returns MISSING for the flat form and the value for the nested one. check-i18n-keys did not catch it and structurally could not — for a key built by template it can only verify the static prefix (`events.`) resolves to an object, and the dynamic tail is invisible to it. That is the gap: every dynamic key in this module lives behind a prefix that resolves fine. So the tail is checked here, where the value set is known. Two tests walk every catalogued event key, every tone, every category and every layer name through the same dot-splitting lookup next-intl performs. Both skip when messages/ is absent, since it is gitignored and populated from the dictionary at build time. The data fix is in kamo-translation-dictionary (pushed first, as always).

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing