☝️Toàn bộ giải thích Triển khai i18next ở pages

C:\Users\Administrator\Desktop\study\next-i18next

34KB
Open
Hydration failed because the server rendered HTML didn't match the client...
+ about_title
- Giới thiệu

có nghĩa là SSR (server-side rendering) đã render một nội dung, nhưng client-side sau khi tải lại render nội dung khác — gây ra mismatch. Trong trường hợp của bạn, có vẻ như server render ra about_title (chưa dịch) nhưng client lại hiển thị "Giới thiệu" (bản dịch đúng).


🧠 Nguyên nhân phổ biến trong dự án next-i18next + [lang] dynamic

  1. Bạn dùng useTranslation() nhưng chưa inject bản dịch đúng ở getStaticProps.

  2. Bạn quên truyền i18n từ serverSideTranslations() vào.

  3. Bạn không sử dụng namespacesRequired đúng.

  4. Bạn dùng I18nextProvider thủ công (không cần nữa nếu đã cấu hình next-i18next).

  5. Bạn dùng i18n.changeLanguage() không đúng lúc — gây rehydrate sai.


✅ Cách sửa chính xác

1. Đảm bảo bạn có getStaticProps đúng:

Không cần truyền i18n.changeLanguage() thủ công trong component nữa nếu đã dùng [lang] route.


2. Gọi useTranslation() đúng namespacelang đến từ URL


3. Đảm bảo bạn không dùng I18nextProvider thủ công trong _app.tsx

next-i18next tự động inject provider qua appWithTranslation(App) — bạn nên dùng như sau:


4. Đảm bảo translation.json có key:

Đặt tại:


✅ Mẫu about.tsx đúng chuẩn


Nếu bạn muốn, mình có thể kiểm tra tận gốc trong dự án bạn vừa zip hoặc gửi bản mẫu 100% đúng mà bạn chỉ cần copy vào là chạy được luôn.

Bạn muốn mình gửi bản mẫu không?

Last updated

Was this helpful?