diff --git a/apps/landing/src/middleware.ts b/apps/landing/src/middleware.ts index 1ad265764..99a543cd3 100644 --- a/apps/landing/src/middleware.ts +++ b/apps/landing/src/middleware.ts @@ -19,7 +19,10 @@ export async function middleware(request: NextRequest) { return; } - const locale = getPreferredLocale(request); + const locale = getPreferredLocale({ + acceptLanguageHeader: request.headers.get("accept-language") ?? undefined, + }); + request.nextUrl.pathname = `/${locale}${pathname}`; if (locale === "en") { diff --git a/apps/web/src/middleware.ts b/apps/web/src/middleware.ts index c90fefbe7..a9aab9965 100644 --- a/apps/web/src/middleware.ts +++ b/apps/web/src/middleware.ts @@ -19,7 +19,12 @@ export const middleware = withAuth(async (req) => { return NextResponse.redirect(newUrl); } - const locale = req.auth?.user?.locale || getPreferredLocale(req); + const locale = + req.auth?.user?.locale || + getPreferredLocale({ + acceptLanguageHeader: req.headers.get("accept-language") ?? undefined, + }); + if (supportedLocales.includes(locale)) { newUrl.pathname = `/${locale}${pathname}`; } diff --git a/packages/billing/package.json b/packages/billing/package.json index e5b6eec3d..66089b979 100644 --- a/packages/billing/package.json +++ b/packages/billing/package.json @@ -20,6 +20,7 @@ "stripe": "^13.2.0" }, "devDependencies": { - "@rallly/eslint-config": "workspace:*" + "@rallly/eslint-config": "workspace:*", + "@rallly/tsconfig": "workspace:*" } } diff --git a/packages/languages/package.json b/packages/languages/package.json index d8e9bfe13..d2f5d4096 100644 --- a/packages/languages/package.json +++ b/packages/languages/package.json @@ -11,6 +11,7 @@ "negotiator": "^1.0.0" }, "devDependencies": { + "@rallly/tsconfig": "workspace:*", "@types/negotiator": "^0.6.3" } } diff --git a/packages/languages/src/get-preferred-locale.ts b/packages/languages/src/get-preferred-locale.ts index 66094430a..ca31989ad 100644 --- a/packages/languages/src/get-preferred-locale.ts +++ b/packages/languages/src/get-preferred-locale.ts @@ -1,14 +1,21 @@ import languages, { defaultLocale } from "./index"; import Negotiator from "negotiator"; import { match } from "@formatjs/intl-localematcher"; -import type { NextRequest } from "next/server"; const locales = Object.keys(languages); -export function getPreferredLocale(req: NextRequest) { +export function getPreferredLocale({ + acceptLanguageHeader, +}: { + acceptLanguageHeader?: string; +}) { + if (!acceptLanguageHeader) { + return defaultLocale; + } + const preferredLanguages = new Negotiator({ headers: { - "accept-language": req.headers.get("accept-language") ?? "", + "accept-language": acceptLanguageHeader, }, }) .languages() diff --git a/packages/languages/tsconfig.json b/packages/languages/tsconfig.json index a920fbfd9..419f67910 100644 --- a/packages/languages/tsconfig.json +++ b/packages/languages/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@rallly/tsconfig/react.json", - "include": ["**/*.ts"], + "extends": "@rallly/tsconfig/node.json", + "include": ["src/**/*.ts"], "exclude": ["node_modules"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30d2ac4e6..3b697f87e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -219,6 +219,9 @@ importers: '@rallly/ui': specifier: workspace:* version: link:../../packages/ui + '@rallly/utils': + specifier: workspace:* + version: link:../../packages/utils '@sentry/nextjs': specifier: ^8.49.0 version: 8.55.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@14.2.28(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.99.7(esbuild@0.25.3)) @@ -428,6 +431,9 @@ importers: '@rallly/eslint-config': specifier: workspace:* version: link:../eslint-config + '@rallly/tsconfig': + specifier: workspace:* + version: link:../tsconfig packages/database: dependencies: @@ -557,6 +563,9 @@ importers: specifier: ^1.0.0 version: 1.0.0 devDependencies: + '@rallly/tsconfig': + specifier: workspace:* + version: link:../tsconfig '@types/negotiator': specifier: ^0.6.3 version: 0.6.3