// Base catalog — the source of truth for this app's UI strings. Every key here // MUST be mirrored in `de.ts` (and any other locale); `defineLocale()` // enforces that parity at build time, so a missing translation fails typecheck // rather than silently falling back. // // Messages use ICU syntax: `{name}` placeholders, `{n, plural, …}`, and rich // tags like `` (rendered by passing a matching function to // ` {c} }} />`). import { defineCatalog } from '@voltro/i18n' export default defineCatalog({ // Browser tab titles — locale-aware via each page's `meta({ locale })`. 'meta.notes.title': 'Reactive notes', 'meta.schemaUi.title': 'Schema-driven UI', // ---- Layout shell (pages/layout.tsx) ---- 'nav.notes': 'Notes', 'nav.schemaUi': 'Schema UI', 'nav.tagline': 'fullstack · reactive end-to-end', 'lang.label': 'Language', // ---- Notes page (pages/index.tsx) ---- 'notes.heading': 'Reactive notes', 'notes.status.tenant': 'Tenant {tenant} · revision {revision}', 'notes.status.delta': ' · last delta {time}', 'notes.status.pending': ' · {count} pending', 'notes.status.loading': ' · loading…', 'notes.error': 'subscription error — is the api running? {error}', 'notes.field.title': 'Title', 'notes.field.body': 'Body (optional)', 'notes.add': 'Add note', 'notes.adding': 'Adding…', 'notes.empty': 'No notes yet — add one above and watch it appear instantly.', // ---- Schema-driven UI page (pages/schema-ui.tsx) ---- 'schemaUi.heading': 'Schema-driven UI', 'schemaUi.intro': 'The same notes as the home page — but the form + table here are bound to descriptors, not hand-wired. Fields come from notes.create’s input schema; columns from notes.list’s output schema. Live + optimistic, zero glue.', 'schemaUi.createHeading': 'Create (bound to notes.create)', 'schemaUi.listHeading': 'List (bound to notes.list)', 'schemaUi.submitLabel': 'Add note', 'schemaUi.emptyText': 'No notes yet — add one above.', } as const)