7bf10b6a12
- project.inlang/settings.json with locales [de, en], baseLocale de.
- messages/{de,en}.json hold the strings (tagline, blog labels, etc.).
- vite.config.ts: paraglideVitePlugin compiles to src/paraglide/
(gitignored) on dev/build. Strategy: url → cookie →
preferredLanguage → baseLocale. URL pattern keeps German at /:path
(unprefixed) and English at /en/:path so existing URLs stay valid.
- server.tsx wraps the handler in paraglideMiddleware so AsyncLocalStorage
carries the per-request locale into SSR.
- router.tsx adds rewrite { input: deLocalizeUrl, output: localizeUrl }
so route matching stays locale-agnostic — the router sees /blog while
URLs show /en/blog.
- cms.ts narrows getLocale()'s union back to the de|en pair the CMS
supports, used as the default for find/findGlobal calls.
- Components/routes switch to m.foo() for user-visible strings; date
formatting picks de-DE / en-GB from getLocale().
- Root html lang reads getLocale() so the document language flips per
request.
Known minor: TanStack Start's { title } meta entry still serves the base
locale value (og:title and the description meta are localized correctly).
Will track separately.
12 lines
287 B
JSON
12 lines
287 B
JSON
{
|
|
"$schema": "https://inlang.com/schema/project-settings",
|
|
"baseLocale": "de",
|
|
"locales": ["de", "en"],
|
|
"modules": [
|
|
"https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js"
|
|
],
|
|
"plugin.inlang.messageFormat": {
|
|
"pathPattern": "./messages/{locale}.json"
|
|
}
|
|
}
|