You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of the Refine-inspired core simplification effort (#127 ✅, #128, #129, #130 ✅, #131, #133). Refine's i18nProvider + useTranslate pattern: components call t(key, defaultValue), consumers optionally plug in their i18n library. Without a provider, defaults render — zero setup cost.
Scope note: this issue covers the core provider only (phase 1). Converting each plugin's UI strings to t(key, default) is tracked in #136 (phase 2), done during each plugin's sweep.
Problem
All plugin UI strings — buttons, labels, empty states, dialogs, validation and toast messages — are hardcoded English. Non-English consumers cannot localize plugin UIs, and retrofitting keys only gets more expensive as plugins grow.
Context
Part of the Refine-inspired core simplification effort (#127 ✅, #128, #129, #130 ✅, #131, #133). Refine's
i18nProvider+useTranslatepattern: components callt(key, defaultValue), consumers optionally plug in their i18n library. Without a provider, defaults render — zero setup cost.Scope note: this issue covers the core provider only (phase 1). Converting each plugin's UI strings to
t(key, default)is tracked in #136 (phase 2), done during each plugin's sweep.Problem
All plugin UI strings — buttons, labels, empty states, dialogs, validation and toast messages — are hardcoded English. Non-English consumers cannot localize plugin UIs, and retrofitting keys only gets more expensive as plugins grow.
Proposal
An optional
i18nprovider onStackProvider:useTranslate()from@btst/stack/context; without a provider it returns the default value — non-breaking, no consumer setupt("blog.posts.create", "Create Post")t("blog.posts.deleted", "Deleted {{title}}", { title })translateScope (core only)
i18nprop onStackProvider+useTranslate()hook with default-value fallback + interpolationAcceptance criteria
i18nprovider render identical stringstranslatereceives key, default, and params for every call throughuseTranslate()Per-plugin string conversion → #136.