// App-local message extensions, deep-merged over @vmall/shared locales. // Each domain module owns its own namespace; register new domains below. // (Never edit the shared locale files from an app agent.) import shell from "./locales/shell"; import home from "./locales/home"; import search from "./locales/search"; import product from "./locales/product"; import cart from "./locales/cart"; import checkout from "./locales/checkout"; import auth from "./locales/auth"; import user from "./locales/user"; import stores from "./locales/stores"; import marketing from "./locales/marketing"; type Tree = Record; function deepMerge(base: T, extra: Tree): T { const out: Tree = { ...base }; for (const [k, v] of Object.entries(extra)) { const b = out[k]; out[k] = b && v && typeof b === "object" && typeof v === "object" ? deepMerge(b as Tree, v as Tree) : v; } return out as T; } // Keys referenced by retained shared components (PriceText) and generic handlers. const legacyEn: Tree = { mall: { notAvailable: "—", loadFailed: "Unable to load data", }, }; const legacyZh: Tree = { mall: { notAvailable: "—", loadFailed: "加载失败", }, }; const domains = [shell, home, search, product, cart, checkout, auth, user, stores, marketing]; export const enExtra: Tree = domains.reduce( (acc, m) => deepMerge(acc, m.en as Tree), legacyEn, ); export const zhExtra: Tree = domains.reduce( (acc, m) => deepMerge(acc, m.zh as Tree), legacyZh, );