Skip to content

Commit 8fe70bb

Browse files
committed
feat: fix i18next
1 parent 0d7da0a commit 8fe70bb

File tree

5 files changed

+18
-30
lines changed

5 files changed

+18
-30
lines changed

apps/frontend/src/app/(app)/layout.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@ export default async function AppLayout({ children }: { children: ReactNode }) {
2828
? PlausibleProvider
2929
: Fragment;
3030
return (
31-
<HtmlComponent className={interClass}>
31+
<html className={interClass}>
3232
<head>
3333
<link rel="icon" href="/favicon.ico" sizes="any" />
3434
</head>
3535
<body className={clsx(chakra.className, 'dark text-primary !bg-primary')}>
36+
<HtmlComponent />
3637
<VariableContextComponent
3738
storageProvider={
3839
process.env.STORAGE_PROVIDER! as 'local' | 'cloudflare'
@@ -72,6 +73,6 @@ export default async function AppLayout({ children }: { children: ReactNode }) {
7273
</Plausible>
7374
</VariableContextComponent>
7475
</body>
75-
</HtmlComponent>
76+
</html>
7677
);
7778
}

apps/frontend/src/components/layout/html.component.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22
import { FC, ReactNode, useEffect, useState } from 'react';
33
import { useTranslationSettings } from '@gitroom/react/translation/get.transation.service.client';
44

5-
export const HtmlComponent: FC<{ className: string; children: ReactNode }> = (
6-
props
7-
) => {
8-
const { className } = props;
5+
export const HtmlComponent: FC = () => {
96
const settings = useTranslationSettings();
107
const [dir, setDir] = useState(settings.dir());
118

129
useEffect(() => {
13-
setDir(settings.dir());
1410
settings.on('languageChanged', (lng) => {
1511
setDir(settings.dir());
1612
});
@@ -23,5 +19,5 @@ export const HtmlComponent: FC<{ className: string; children: ReactNode }> = (
2319
}
2420
}, [dir]);
2521

26-
return <html className={className}>{props.children}</html>;
22+
return null;
2723
};

apps/frontend/src/middleware.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,19 @@ export async function middleware(request: NextRequest) {
1818
request.cookies.get('auth') ||
1919
request.headers.get('auth') ||
2020
nextUrl.searchParams.get('loggedAuth');
21-
const lng =
22-
(request.cookies.has(cookieName)
23-
? acceptLanguage.get(request.cookies.get(cookieName).value)
24-
: acceptLanguage.get(request.headers.get('Accept-Language'))) ||
25-
fallbackLng;
21+
const lng = request.cookies.has(cookieName)
22+
? acceptLanguage.get(request.cookies.get(cookieName).value)
23+
: acceptLanguage.get(
24+
request.headers.get('Accept-Language') ||
25+
request.headers.get('accept-language')
26+
);
2627

2728
const headers = new Headers(request.headers);
28-
headers.set(headerName, lng);
29+
30+
if (lng) {
31+
headers.set(headerName, lng);
32+
}
33+
2934
if (
3035
nextUrl.pathname.startsWith('/uploads/') ||
3136
nextUrl.pathname.startsWith('/p/') ||

libraries/react-shared-libraries/src/translation/get.transation.service.client.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ import { useVariables } from '@gitroom/react/helpers/variable.context';
1313

1414
export function useT(ns?: string, options?: UseTranslationOptions<any>) {
1515
const { language } = useVariables();
16-
const [lng] = useCookie(cookieName, language || fallbackLng);
17-
if (typeof lng !== 'string') {
18-
throw new Error('useT is only available inside /app/[lng]');
19-
}
2016
const { t } = useTranslation(ns, options);
2117
return t;
2218
}
@@ -26,16 +22,5 @@ export function useTranslationSettings() {
2622
const [lng] = useCookie(cookieName, language || fallbackLng);
2723
const [savedI18next, setSavedI18next] = useState(i18next);
2824

29-
if (typeof lng !== 'string') {
30-
throw new Error('useT is only available inside /app/[lng]');
31-
}
32-
useEffect(() => {
33-
if (lng !== i18next.resolvedLanguage) {
34-
i18next.changeLanguage(lng).then(() => {
35-
setSavedI18next(i18next);
36-
});
37-
}
38-
}, [lng]);
39-
4025
return savedI18next;
4126
}

libraries/react-shared-libraries/src/translation/i18next.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ i18next
2222
fallbackNS: defaultNS,
2323
defaultNS,
2424
detection: {
25-
order: ['path', 'htmlTag', 'cookie', 'navigator'],
25+
order: ['cookie', 'header'],
2626
},
2727
preload: runsOnServerSide ? languages : [],
2828
});
29+
2930
export default i18next;

0 commit comments

Comments
 (0)