From 8fe70bbf2884680a6228ae7c5cc083738aeaa846 Mon Sep 17 00:00:00 2001 From: Nevo David Date: Sun, 1 Jun 2025 18:15:40 +0700 Subject: [PATCH] feat: fix i18next --- apps/frontend/src/app/(app)/layout.tsx | 5 +++-- .../src/components/layout/html.component.tsx | 8 ++------ apps/frontend/src/middleware.ts | 17 +++++++++++------ .../get.transation.service.client.ts | 15 --------------- .../src/translation/i18next.ts | 3 ++- 5 files changed, 18 insertions(+), 30 deletions(-) diff --git a/apps/frontend/src/app/(app)/layout.tsx b/apps/frontend/src/app/(app)/layout.tsx index 3f8176a0..4e1e4947 100644 --- a/apps/frontend/src/app/(app)/layout.tsx +++ b/apps/frontend/src/app/(app)/layout.tsx @@ -28,11 +28,12 @@ export default async function AppLayout({ children }: { children: ReactNode }) { ? PlausibleProvider : Fragment; return ( - + + - + ); } diff --git a/apps/frontend/src/components/layout/html.component.tsx b/apps/frontend/src/components/layout/html.component.tsx index ad44e157..8f9c8b6d 100644 --- a/apps/frontend/src/components/layout/html.component.tsx +++ b/apps/frontend/src/components/layout/html.component.tsx @@ -2,15 +2,11 @@ import { FC, ReactNode, useEffect, useState } from 'react'; import { useTranslationSettings } from '@gitroom/react/translation/get.transation.service.client'; -export const HtmlComponent: FC<{ className: string; children: ReactNode }> = ( - props -) => { - const { className } = props; +export const HtmlComponent: FC = () => { const settings = useTranslationSettings(); const [dir, setDir] = useState(settings.dir()); useEffect(() => { - setDir(settings.dir()); settings.on('languageChanged', (lng) => { setDir(settings.dir()); }); @@ -23,5 +19,5 @@ export const HtmlComponent: FC<{ className: string; children: ReactNode }> = ( } }, [dir]); - return {props.children}; + return null; }; diff --git a/apps/frontend/src/middleware.ts b/apps/frontend/src/middleware.ts index a79c30ae..de3ad3e3 100644 --- a/apps/frontend/src/middleware.ts +++ b/apps/frontend/src/middleware.ts @@ -18,14 +18,19 @@ export async function middleware(request: NextRequest) { request.cookies.get('auth') || request.headers.get('auth') || nextUrl.searchParams.get('loggedAuth'); - const lng = - (request.cookies.has(cookieName) - ? acceptLanguage.get(request.cookies.get(cookieName).value) - : acceptLanguage.get(request.headers.get('Accept-Language'))) || - fallbackLng; + const lng = request.cookies.has(cookieName) + ? acceptLanguage.get(request.cookies.get(cookieName).value) + : acceptLanguage.get( + request.headers.get('Accept-Language') || + request.headers.get('accept-language') + ); const headers = new Headers(request.headers); - headers.set(headerName, lng); + + if (lng) { + headers.set(headerName, lng); + } + if ( nextUrl.pathname.startsWith('/uploads/') || nextUrl.pathname.startsWith('/p/') || diff --git a/libraries/react-shared-libraries/src/translation/get.transation.service.client.ts b/libraries/react-shared-libraries/src/translation/get.transation.service.client.ts index 00db9bcb..71fd2968 100644 --- a/libraries/react-shared-libraries/src/translation/get.transation.service.client.ts +++ b/libraries/react-shared-libraries/src/translation/get.transation.service.client.ts @@ -13,10 +13,6 @@ import { useVariables } from '@gitroom/react/helpers/variable.context'; export function useT(ns?: string, options?: UseTranslationOptions) { const { language } = useVariables(); - const [lng] = useCookie(cookieName, language || fallbackLng); - if (typeof lng !== 'string') { - throw new Error('useT is only available inside /app/[lng]'); - } const { t } = useTranslation(ns, options); return t; } @@ -26,16 +22,5 @@ export function useTranslationSettings() { const [lng] = useCookie(cookieName, language || fallbackLng); const [savedI18next, setSavedI18next] = useState(i18next); - if (typeof lng !== 'string') { - throw new Error('useT is only available inside /app/[lng]'); - } - useEffect(() => { - if (lng !== i18next.resolvedLanguage) { - i18next.changeLanguage(lng).then(() => { - setSavedI18next(i18next); - }); - } - }, [lng]); - return savedI18next; } diff --git a/libraries/react-shared-libraries/src/translation/i18next.ts b/libraries/react-shared-libraries/src/translation/i18next.ts index 9077b0ca..8739027a 100644 --- a/libraries/react-shared-libraries/src/translation/i18next.ts +++ b/libraries/react-shared-libraries/src/translation/i18next.ts @@ -22,8 +22,9 @@ i18next fallbackNS: defaultNS, defaultNS, detection: { - order: ['path', 'htmlTag', 'cookie', 'navigator'], + order: ['cookie', 'header'], }, preload: runsOnServerSide ? languages : [], }); + export default i18next;