i18n: paraglide setup mirroring played/plaza, de unprefixed + /en/ prefixed
- 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.
This commit is contained in:
+19
-3
@@ -1,3 +1,4 @@
|
||||
import { paraglideVitePlugin } from "@inlang/paraglide-js";
|
||||
import tailwindcss from "@tailwindcss/vite";
|
||||
import { tanstackStart } from "@tanstack/react-start/plugin/vite";
|
||||
import viteReact from "@vitejs/plugin-react";
|
||||
@@ -10,11 +11,26 @@ export default defineConfig({
|
||||
dedupe: ["react", "react-dom"],
|
||||
},
|
||||
plugins: [
|
||||
paraglideVitePlugin({
|
||||
project: "./project.inlang",
|
||||
outdir: "./src/paraglide",
|
||||
// Prefer the URL prefix (so /en/* loads English), fall back to a
|
||||
// persisted cookie, then the browser language, then the base locale (de).
|
||||
strategy: ["url", "cookie", "preferredLanguage", "baseLocale"],
|
||||
// German lives at /:path (unprefixed), English under /en/:path.
|
||||
urlPatterns: [
|
||||
{
|
||||
pattern: "/:path(.*)?",
|
||||
localized: [
|
||||
["en", "/en/:path(.*)?"],
|
||||
["de", "/:path(.*)?"],
|
||||
],
|
||||
},
|
||||
],
|
||||
}),
|
||||
tailwindcss(),
|
||||
tanstackStart(),
|
||||
nitro({
|
||||
preset: "bun",
|
||||
}),
|
||||
nitro({ preset: "bun" }),
|
||||
viteReact(),
|
||||
],
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user