@better-i18n/use-intl 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -7
- package/dist/provider.d.ts +3 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +9 -5
- package/dist/provider.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -20,7 +20,50 @@ bun add @better-i18n/use-intl use-intl
|
|
|
20
20
|
|
|
21
21
|
## Quick Start
|
|
22
22
|
|
|
23
|
-
###
|
|
23
|
+
### Vite App (Recommended — Zero Config)
|
|
24
|
+
|
|
25
|
+
Pair with [`@better-i18n/vite`](https://www.npmjs.com/package/@better-i18n/vite) for the best experience — zero FOUC, automatic locale detection, no props needed:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @better-i18n/vite @better-i18n/use-intl use-intl
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
// vite.config.ts
|
|
33
|
+
import { betterI18n } from "@better-i18n/vite";
|
|
34
|
+
|
|
35
|
+
export default defineConfig({
|
|
36
|
+
plugins: [
|
|
37
|
+
betterI18n({ project: "acme/dashboard", localeCookie: "locale" }),
|
|
38
|
+
react(),
|
|
39
|
+
],
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
// App.tsx — no project/locale/messages props needed
|
|
45
|
+
import { BetterI18nProvider, useTranslations, LocaleDropdown } from "@better-i18n/use-intl";
|
|
46
|
+
|
|
47
|
+
function App() {
|
|
48
|
+
return (
|
|
49
|
+
<BetterI18nProvider>
|
|
50
|
+
<LocaleDropdown />
|
|
51
|
+
<HomePage />
|
|
52
|
+
</BetterI18nProvider>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function HomePage() {
|
|
57
|
+
const t = useTranslations("home");
|
|
58
|
+
return <h1>{t("title")}</h1>;
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The Vite plugin injects project, locale, messages, languages, and cookie config into the HTML — the provider reads it all automatically.
|
|
63
|
+
|
|
64
|
+
### Client-Side (Manual Config)
|
|
65
|
+
|
|
66
|
+
Without the Vite plugin, pass `project` and `locale` as props:
|
|
24
67
|
|
|
25
68
|
```tsx
|
|
26
69
|
import { BetterI18nProvider, useTranslations } from '@better-i18n/use-intl'
|
|
@@ -215,13 +258,109 @@ function LanguageSwitcher() {
|
|
|
215
258
|
}
|
|
216
259
|
```
|
|
217
260
|
|
|
218
|
-
##
|
|
261
|
+
## Router Integration
|
|
262
|
+
|
|
263
|
+
### TanStack Router
|
|
264
|
+
|
|
265
|
+
Detected automatically. `useLocaleRouter()` uses TanStack Router's `router.navigate()` for SPA navigation — no extra setup needed.
|
|
266
|
+
|
|
267
|
+
See our [TanStack Start guide](https://docs.better-i18n.com/frameworks/tanstack-start) for a complete example with locale middleware, URL-based locale detection, SEO-friendly routing, and hydration without mismatches.
|
|
268
|
+
|
|
269
|
+
### React Router (`react-router-dom`)
|
|
270
|
+
|
|
271
|
+
The provider's built-in URL update uses `history.replaceState`, which doesn't notify React Router. Add a `LocaleSync` component to bridge locale state with the router:
|
|
272
|
+
|
|
273
|
+
```tsx
|
|
274
|
+
import { useEffect } from "react";
|
|
275
|
+
import { BrowserRouter, Routes, Route, useNavigate, useLocation } from "react-router-dom";
|
|
276
|
+
import { BetterI18nProvider, useLocale } from "@better-i18n/use-intl";
|
|
277
|
+
|
|
278
|
+
// Syncs locale state → URL using react-router-dom's navigate
|
|
279
|
+
function LocaleSync() {
|
|
280
|
+
const { locale } = useLocale();
|
|
281
|
+
const navigate = useNavigate();
|
|
282
|
+
const location = useLocation();
|
|
283
|
+
|
|
284
|
+
useEffect(() => {
|
|
285
|
+
const segments = location.pathname.split("/").filter(Boolean);
|
|
286
|
+
const first = segments[0];
|
|
287
|
+
if (first && /^[a-z]{2}$/i.test(first) && first !== locale) {
|
|
288
|
+
segments[0] = locale;
|
|
289
|
+
navigate("/" + segments.join("/"), { replace: true });
|
|
290
|
+
}
|
|
291
|
+
}, [locale, location.pathname, navigate]);
|
|
292
|
+
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export default function App() {
|
|
297
|
+
return (
|
|
298
|
+
<BrowserRouter>
|
|
299
|
+
<BetterI18nProvider>
|
|
300
|
+
<LocaleSync />
|
|
301
|
+
<Routes>
|
|
302
|
+
<Route path="/:locale" element={<HomePage />} />
|
|
303
|
+
</Routes>
|
|
304
|
+
</BetterI18nProvider>
|
|
305
|
+
</BrowserRouter>
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### No Router (Plain SPA)
|
|
311
|
+
|
|
312
|
+
Works out of the box. On locale switch, the provider calls `history.replaceState` to update the URL prefix automatically.
|
|
313
|
+
|
|
314
|
+
## Locale Prefix Strategy
|
|
315
|
+
|
|
316
|
+
Control how locale codes appear in URLs via the `localePrefix` prop:
|
|
317
|
+
|
|
318
|
+
```tsx
|
|
319
|
+
<BetterI18nProvider localePrefix="always">
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
| Strategy | Default Locale | Other Locales | Best For |
|
|
323
|
+
|----------|---------------|---------------|----------|
|
|
324
|
+
| `"as-needed"` (default) | `/about` (no prefix) | `/tr/about` | SEO — default locale has clean URLs |
|
|
325
|
+
| `"always"` | `/en/about` | `/tr/about` | Apps with `/:locale` route pattern |
|
|
326
|
+
|
|
327
|
+
**`"as-needed"`** — Default locale has no URL prefix. Non-default locales get a prefix. Best for SEO because your primary language has clean URLs.
|
|
328
|
+
|
|
329
|
+
**`"always"`** — Every locale gets a prefix, including the default. Use this when your router has a `/:locale` parameter in every route (e.g., TanStack Router's `$locale/` layout routes or React Router's `/:locale/*` pattern).
|
|
330
|
+
|
|
331
|
+
## Components
|
|
332
|
+
|
|
333
|
+
### `<LocaleDropdown />`
|
|
334
|
+
|
|
335
|
+
Pre-built, styled locale switcher with flags, keyboard navigation, and dark mode support.
|
|
336
|
+
|
|
337
|
+
```tsx
|
|
338
|
+
import { LocaleDropdown } from "@better-i18n/use-intl";
|
|
339
|
+
|
|
340
|
+
// Zero config — styled mode
|
|
341
|
+
<LocaleDropdown />
|
|
342
|
+
|
|
343
|
+
// Unstyled mode for full custom styling via data attributes
|
|
344
|
+
<LocaleDropdown variant="unstyled" className="my-dropdown" />
|
|
345
|
+
|
|
346
|
+
// Custom placement
|
|
347
|
+
<LocaleDropdown placement="top" />
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Customizable via CSS custom properties:
|
|
351
|
+
|
|
352
|
+
| Property | Controls |
|
|
353
|
+
|----------|----------|
|
|
354
|
+
| `--better-locale-text` | Text color |
|
|
355
|
+
| `--better-locale-menu-bg` | Menu background |
|
|
356
|
+
| `--better-locale-border` | Border color |
|
|
357
|
+
| `--better-locale-hover-bg` | Hover state |
|
|
358
|
+
| `--better-locale-trigger-bg` | Trigger background |
|
|
359
|
+
| `--better-locale-accent` | Checkmark/accent color |
|
|
360
|
+
|
|
361
|
+
## Documentation
|
|
219
362
|
|
|
220
|
-
|
|
221
|
-
- Locale middleware
|
|
222
|
-
- URL-based locale detection
|
|
223
|
-
- SEO-friendly routing
|
|
224
|
-
- Hydration without mismatches
|
|
363
|
+
Full documentation at [docs.better-i18n.com/frameworks/vite](https://docs.better-i18n.com/frameworks/vite)
|
|
225
364
|
|
|
226
365
|
## License
|
|
227
366
|
|
package/dist/provider.d.ts
CHANGED
|
@@ -19,9 +19,11 @@ export interface BetterI18nProviderProps extends Omit<BetterI18nProviderConfig,
|
|
|
19
19
|
* URL prefix strategy for locale codes.
|
|
20
20
|
* - `"as-needed"` (default): default locale has no URL prefix
|
|
21
21
|
* - `"always"`: all locales get a URL prefix (e.g., TanStack Router `$locale/` routes)
|
|
22
|
+
* - `"never"`: no locale prefix in URL for any locale. Locale is stored only in cookie.
|
|
23
|
+
* Ideal for dashboards and apps where URL structure shouldn't change per locale.
|
|
22
24
|
* @default "as-needed"
|
|
23
25
|
*/
|
|
24
|
-
localePrefix?: "always" | "as-needed";
|
|
26
|
+
localePrefix?: "always" | "as-needed" | "never";
|
|
25
27
|
/** Custom fallback when a message key is missing */
|
|
26
28
|
getMessageFallback?: (info: {
|
|
27
29
|
error: Error;
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlF,OAAO,KAAK,EAAE,wBAAwB,EAAY,MAAM,YAAY,CAAC;AAkCrE,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,wBAAwB,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5D,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IACpC
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlF,OAAO,KAAK,EAAE,wBAAwB,EAAY,MAAM,YAAY,CAAC;AAkCrE,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,wBAAwB,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5D,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IACpC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;IAChD,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,KAAK,MAAM,CAAC;IACb;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EACR,GAAG,EACH,OAAO,EACP,UAAU,EACV,KAAK,EACL,QAAQ,EACR,KAAK,EAAE,WAAW,EAClB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAAE,oBAAoB,EACtC,YAA0B,EAC1B,kBAAkB,EAAE,wBAAwB,EAC5C,cAAc,GACf,EAAE,uBAAuB,2CAyNzB"}
|
package/dist/provider.js
CHANGED
|
@@ -85,13 +85,17 @@ export function BetterI18nProvider({ children, project: propProject, locale: pro
|
|
|
85
85
|
if (localeCookie && typeof document !== "undefined") {
|
|
86
86
|
document.cookie = `${localeCookie}=${newLocale};path=/;max-age=${60 * 60 * 24 * 365};SameSite=Lax`;
|
|
87
87
|
}
|
|
88
|
-
//
|
|
89
|
-
// When onLocaleChange is provided, the consumer (e.g., react-router navigate())
|
|
90
|
-
// is responsible for URL updates. Running both causes dual-write race conditions.
|
|
88
|
+
// Notify consumer (e.g., router navigation)
|
|
91
89
|
if (onLocaleChange) {
|
|
92
90
|
onLocaleChange(newLocale);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// "never" mode: locale is cookie-only, don't touch the URL at all
|
|
94
|
+
if (localePrefix === "never") {
|
|
95
|
+
return;
|
|
93
96
|
}
|
|
94
|
-
|
|
97
|
+
// Update URL locale prefix — fallback when no external router handles it.
|
|
98
|
+
if (typeof window !== "undefined" && window.location) {
|
|
95
99
|
const path = window.location.pathname;
|
|
96
100
|
const segments = path.split("/").filter(Boolean);
|
|
97
101
|
const firstSegment = segments[0];
|
|
@@ -106,7 +110,7 @@ export function BetterI18nProvider({ children, project: propProject, locale: pro
|
|
|
106
110
|
}
|
|
107
111
|
window.history.replaceState(null, "", "/" + segments.join("/") + window.location.search);
|
|
108
112
|
}
|
|
109
|
-
}, [onLocaleChange, localeCookie]);
|
|
113
|
+
}, [onLocaleChange, localeCookie, localePrefix]);
|
|
110
114
|
// ─── Messages State ───────────────────────────────────────────────
|
|
111
115
|
// Track the locale that initial messages were **actually built for**.
|
|
112
116
|
// When messages come from SSR (vite plugin), their locale is ssrData.locale.
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAiBjD;;;;GAIG;AACH,SAAS,WAAW;IAClB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,EAAE,EAAE,WAAW;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -69,8 +69,9 @@ export interface BetterI18nContextValue {
|
|
|
69
69
|
* URL prefix strategy for locale codes.
|
|
70
70
|
* - `"as-needed"`: default locale has no URL prefix
|
|
71
71
|
* - `"always"`: all locales get a URL prefix (e.g., TanStack Router `$locale/`)
|
|
72
|
+
* - `"never"`: no locale prefix in URL for any locale (cookie-only, ideal for dashboards)
|
|
72
73
|
*/
|
|
73
|
-
localePrefix: "always" | "as-needed";
|
|
74
|
+
localePrefix: "always" | "as-needed" | "never";
|
|
74
75
|
}
|
|
75
76
|
/**
|
|
76
77
|
* Server-side configuration for getMessages
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,wBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC;IAC7C;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,IAAI,CAAC;IAEX;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;CAC1D;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC;;OAEG;IACH,SAAS,EAAE,cAAc,EAAE,CAAC;IAE5B;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,wBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC;IAC7C;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,IAAI,CAAC;IAEX;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;CAC1D;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC;;OAEG;IACH,SAAS,EAAE,cAAc,EAAE,CAAC;IAE5B;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,YAAY,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@better-i18n/use-intl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Better i18n integration for use-intl (React, TanStack Start)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"prepublishOnly": "bun run build"
|
|
63
63
|
},
|
|
64
64
|
"dependencies": {
|
|
65
|
-
"@better-i18n/core": "^0.
|
|
65
|
+
"@better-i18n/core": "^0.5.0",
|
|
66
66
|
"@floating-ui/react": "^0.27.19"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|