Triển khai i18next client, server component (ok)
Step 1: Thực hiện 1 trang ở app
app\[lang]\layout.tsx
import { ReactNode } from 'react';
import LanguageSwitcher from '@/src/components/LanguageSwitcher'
interface RootLayoutProps {
children: ReactNode;
}
export default async function RootLayout({ children }: RootLayoutProps) {
return (
<>
<header className="flex justify-end p-4">
<LanguageSwitcher />
</header>
{children}
</>
);
}app\[lang]\page.tsx
import ClientComponent from '@/src/components/ClientComponent';
import initI18next from '@/src/lib/i18n/server';
import { fallbackLng, languages } from '@/src/lib/i18n/settings';
export default async function Page({ params }: { params: { lang: string } }) {
const {lang} = await params;
const glang = languages.includes(lang) ? lang : fallbackLng;
const i18n = await initI18next(glang, 'common');
const t = i18n.getFixedT(lang, 'common');
console.log('Server: lang=', glang, 't(hello)=', t('hello'));
return (
<>
<ClientComponent lang={glang} />
<h1>{t('hello')}</h1>
</>
);
}app\layout.tsx
src\components\ClientComponent.tsx
src\components\LanguageSwitcher.tsx
src\lib\i18n\client.ts
src\lib\i18n\server.ts
src\lib\i18n\settings.ts
next.config.ts
src\locales\en\common.json
src\locales\vi\common.json
Step 2: Thực hiện 1 trang ở pages
app\[lang]\layout.tsx
app\[lang]\page.tsx
pages\[lang]\new-page.tsx
src\components\ClientComponent.tsx
src\components\LanguageSwitcher.tsx
src\lib\i18n\client.ts
src\lib\i18n\server.ts
src\lib\i18n\settings.ts
Source code (kiểm tra đã hoạt động tốt app và pages)
Step 3: Để tạo một ClientComponent không sử dụng 'use client' mà vẫn hỗ trợ đa ngôn ngữ (i18n)
'use client' mà vẫn hỗ trợ đa ngôn ngữ (i18n)Để tạo một ClientComponent không sử dụng 'use client' mà vẫn hỗ trợ đa ngôn ngữ (i18n), bạn cần:
Không sử dụng hook như
useTranslation()(vì hook chỉ dùng trong client component).Truyền dữ liệu dịch (
t) từ server xuống dưới dạng prop.Hoặc tạo một function component async (server component) mà không cần hook.
src\components\TranslatedComponent.tsx
app\[lang]\page.tsx
Cách chuyển localhost:3000 sang localhost:3000/en
app\page.tsx
Last updated
Was this helpful?