Skip to content

Commit ca9620e

Browse files
committed
Use empty messages in init.ts to avoid dependency on compiled catalogs
Pre-initialization only needs to activate a locale, not load real messages. App.tsx loads the real English catalog via i18n.loadAndActivate() in useEffect, and since module-level t calls execute lazily from builder functions (called in useMemo), they'll use the real messages. This eliminates the hard dependency on compiled messages.mjs, allowing dev workflows (pnpm dev, tests, fresh clones) to work without requiring locale:compile to run first. Bundle size: init.js reduced from 5.26 kB to 0.77 kB.
1 parent 09dfe78 commit ca9620e

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

packages/admin/src/locales/init.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
* This ensures i18n is initialized before any module-level t`...` calls
99
* execute, regardless of Astro's island hydration order.
1010
*
11+
* We activate with empty messages here; App.tsx will load the real catalog
12+
* synchronously during render (via useRef). Since t`...` calls in builder
13+
* functions execute lazily (from useMemo), they'll use the real messages.
14+
*
1115
* Side-effect import - modifies global i18n instance.
1216
*/
1317
import { i18n } from "@lingui/core";
1418

15-
import { messages } from "./en/messages.mjs";
16-
1719
if (!i18n.locale) {
18-
i18n.loadAndActivate({ locale: "en", messages });
20+
i18n.loadAndActivate({ locale: "en", messages: {} });
1921
}

0 commit comments

Comments
 (0)