@better-translate/tanstack-router 1.0.2 → 1.1.1
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 +143 -3
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,5 +1,145 @@
|
|
|
1
|
-
#
|
|
1
|
+
# TanStack Router
|
|
2
2
|
|
|
3
|
-
`@better-translate/tanstack-router`
|
|
3
|
+
Use `@better-translate/tanstack-router` when your app uses TanStack Router or TanStack Start and you want locale-aware URLs.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
In most real apps you will pair it with:
|
|
6
|
+
|
|
7
|
+
- `@better-translate/core` for the translator
|
|
8
|
+
- `@better-translate/react` for hooks inside React components
|
|
9
|
+
|
|
10
|
+
## 1. Install the packages
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
npm install @better-translate/core @better-translate/react @better-translate/tanstack-router
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## 2. Create the shared translator
|
|
17
|
+
|
|
18
|
+
Create `src/lib/i18n.ts`:
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { configureTranslations } from "@better-translate/core";
|
|
22
|
+
|
|
23
|
+
const en = {
|
|
24
|
+
home: {
|
|
25
|
+
title: "Hello from TanStack Router",
|
|
26
|
+
},
|
|
27
|
+
} as const;
|
|
28
|
+
|
|
29
|
+
const es = {
|
|
30
|
+
home: {
|
|
31
|
+
title: "Hola desde TanStack Router",
|
|
32
|
+
},
|
|
33
|
+
} as const;
|
|
34
|
+
|
|
35
|
+
export const translator = await configureTranslations({
|
|
36
|
+
availableLocales: ["en", "es"] as const,
|
|
37
|
+
defaultLocale: "en",
|
|
38
|
+
fallbackLocale: "en",
|
|
39
|
+
messages: { en, es },
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 3. Add the locale routing config
|
|
44
|
+
|
|
45
|
+
Create `src/lib/routing.ts`:
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
import { defineRouting } from "@better-translate/tanstack-router";
|
|
49
|
+
|
|
50
|
+
export const routing = defineRouting({
|
|
51
|
+
defaultLocale: "en",
|
|
52
|
+
locales: ["en", "es"] as const,
|
|
53
|
+
routeTemplate: "/$lang",
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 4. Create localized navigation helpers
|
|
58
|
+
|
|
59
|
+
Create `src/lib/navigation.tsx`:
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
import {
|
|
63
|
+
Link,
|
|
64
|
+
useLocation,
|
|
65
|
+
useNavigate,
|
|
66
|
+
useParams,
|
|
67
|
+
useRouter,
|
|
68
|
+
} from "@tanstack/react-router";
|
|
69
|
+
|
|
70
|
+
import { createNavigationFunctions } from "@better-translate/tanstack-router/navigation";
|
|
71
|
+
|
|
72
|
+
import { routing } from "./routing";
|
|
73
|
+
|
|
74
|
+
export const {
|
|
75
|
+
Link: I18nLink,
|
|
76
|
+
useLocale,
|
|
77
|
+
useNavigate: useI18nNavigate,
|
|
78
|
+
usePathname: useI18nPathname,
|
|
79
|
+
} = createNavigationFunctions({
|
|
80
|
+
Link,
|
|
81
|
+
routing,
|
|
82
|
+
useLocation,
|
|
83
|
+
useNavigate,
|
|
84
|
+
useParams,
|
|
85
|
+
useRouter,
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 5. Wrap the app with the React provider
|
|
90
|
+
|
|
91
|
+
Create `src/app.tsx`:
|
|
92
|
+
|
|
93
|
+
```tsx
|
|
94
|
+
import { RouterProvider } from "@tanstack/react-router";
|
|
95
|
+
|
|
96
|
+
import { BetterTranslateProvider } from "@better-translate/react";
|
|
97
|
+
|
|
98
|
+
import { router } from "./router";
|
|
99
|
+
import { translator } from "./lib/i18n";
|
|
100
|
+
|
|
101
|
+
export function App() {
|
|
102
|
+
return (
|
|
103
|
+
<BetterTranslateProvider translator={translator}>
|
|
104
|
+
<RouterProvider router={router} />
|
|
105
|
+
</BetterTranslateProvider>
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 6. Use locale-aware links and translations
|
|
111
|
+
|
|
112
|
+
Create `src/components/header.tsx`:
|
|
113
|
+
|
|
114
|
+
```tsx
|
|
115
|
+
import { useTranslations } from "@better-translate/react";
|
|
116
|
+
|
|
117
|
+
import { translator } from "../lib/i18n";
|
|
118
|
+
import { I18nLink, useLocale } from "../lib/navigation";
|
|
119
|
+
|
|
120
|
+
export function Header() {
|
|
121
|
+
const currentLocale = useLocale();
|
|
122
|
+
const { t } = useTranslations<typeof translator>();
|
|
123
|
+
|
|
124
|
+
return (
|
|
125
|
+
<header>
|
|
126
|
+
<h1>{t("home.title")}</h1>
|
|
127
|
+
<I18nLink to="/" params={{ lang: currentLocale }}>
|
|
128
|
+
Home
|
|
129
|
+
</I18nLink>
|
|
130
|
+
</header>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## TanStack Start
|
|
136
|
+
|
|
137
|
+
If you are using TanStack Start, keep the same routing and navigation setup. Then add the server helpers from `@better-translate/tanstack-router/server` the same way you would add request helpers in Next.js.
|
|
138
|
+
|
|
139
|
+
## Generate locale files automatically
|
|
140
|
+
|
|
141
|
+
Instead of writing every translation by hand, use the CLI to extract strings and generate locale files: [CLI guide](https://better-translate.com/en/docs/cli)
|
|
142
|
+
|
|
143
|
+
## Examples
|
|
144
|
+
|
|
145
|
+
- [tanstack-start-example](https://github.com/jralvarenga/better-translate/tree/main/examples/tanstack-start-example)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@better-translate/tanstack-router",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "TanStack Router integration package for Better Translate.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
"url": "git+https://github.com/jralvarenga/better-translate.git",
|
|
46
46
|
"directory": "packages/tanstack-router"
|
|
47
47
|
},
|
|
48
|
-
"homepage": "https://
|
|
48
|
+
"homepage": "https://better-translate.com",
|
|
49
49
|
"bugs": {
|
|
50
50
|
"url": "https://github.com/jralvarenga/better-translate/issues"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@better-translate/core": "^2.
|
|
53
|
+
"@better-translate/core": "^2.2.1"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@tanstack/react-router": "^1.167.3",
|