Fix languages issues

This commit is contained in:
Luke Vella 2025-04-26 19:34:17 +01:00
parent 88d255da1b
commit 403b2aa1b0
No known key found for this signature in database
GPG key ID: 469CAD687F0D784C
7 changed files with 34 additions and 8 deletions

View file

@ -19,7 +19,10 @@ export async function middleware(request: NextRequest) {
return; return;
} }
const locale = getPreferredLocale(request); const locale = getPreferredLocale({
acceptLanguageHeader: request.headers.get("accept-language") ?? undefined,
});
request.nextUrl.pathname = `/${locale}${pathname}`; request.nextUrl.pathname = `/${locale}${pathname}`;
if (locale === "en") { if (locale === "en") {

View file

@ -19,7 +19,12 @@ export const middleware = withAuth(async (req) => {
return NextResponse.redirect(newUrl); 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)) { if (supportedLocales.includes(locale)) {
newUrl.pathname = `/${locale}${pathname}`; newUrl.pathname = `/${locale}${pathname}`;
} }

View file

@ -20,6 +20,7 @@
"stripe": "^13.2.0" "stripe": "^13.2.0"
}, },
"devDependencies": { "devDependencies": {
"@rallly/eslint-config": "workspace:*" "@rallly/eslint-config": "workspace:*",
"@rallly/tsconfig": "workspace:*"
} }
} }

View file

@ -11,6 +11,7 @@
"negotiator": "^1.0.0" "negotiator": "^1.0.0"
}, },
"devDependencies": { "devDependencies": {
"@rallly/tsconfig": "workspace:*",
"@types/negotiator": "^0.6.3" "@types/negotiator": "^0.6.3"
} }
} }

View file

@ -1,14 +1,21 @@
import languages, { defaultLocale } from "./index"; import languages, { defaultLocale } from "./index";
import Negotiator from "negotiator"; import Negotiator from "negotiator";
import { match } from "@formatjs/intl-localematcher"; import { match } from "@formatjs/intl-localematcher";
import type { NextRequest } from "next/server";
const locales = Object.keys(languages); const locales = Object.keys(languages);
export function getPreferredLocale(req: NextRequest) { export function getPreferredLocale({
acceptLanguageHeader,
}: {
acceptLanguageHeader?: string;
}) {
if (!acceptLanguageHeader) {
return defaultLocale;
}
const preferredLanguages = new Negotiator({ const preferredLanguages = new Negotiator({
headers: { headers: {
"accept-language": req.headers.get("accept-language") ?? "", "accept-language": acceptLanguageHeader,
}, },
}) })
.languages() .languages()

View file

@ -1,5 +1,5 @@
{ {
"extends": "@rallly/tsconfig/react.json", "extends": "@rallly/tsconfig/node.json",
"include": ["**/*.ts"], "include": ["src/**/*.ts"],
"exclude": ["node_modules"] "exclude": ["node_modules"]
} }

9
pnpm-lock.yaml generated
View file

@ -219,6 +219,9 @@ importers:
'@rallly/ui': '@rallly/ui':
specifier: workspace:* specifier: workspace:*
version: link:../../packages/ui version: link:../../packages/ui
'@rallly/utils':
specifier: workspace:*
version: link:../../packages/utils
'@sentry/nextjs': '@sentry/nextjs':
specifier: ^8.49.0 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)) 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': '@rallly/eslint-config':
specifier: workspace:* specifier: workspace:*
version: link:../eslint-config version: link:../eslint-config
'@rallly/tsconfig':
specifier: workspace:*
version: link:../tsconfig
packages/database: packages/database:
dependencies: dependencies:
@ -557,6 +563,9 @@ importers:
specifier: ^1.0.0 specifier: ^1.0.0
version: 1.0.0 version: 1.0.0
devDependencies: devDependencies:
'@rallly/tsconfig':
specifier: workspace:*
version: link:../tsconfig
'@types/negotiator': '@types/negotiator':
specifier: ^0.6.3 specifier: ^0.6.3
version: 0.6.3 version: 0.6.3