☝️Toàn bộ giải thích Triển khai i18next ở pages
C:\Users\Administrator\Desktop\study\next-i18next
Hydration failed because the server rendered HTML didn't match the client...
+ about_title
- Giới thiệucó 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
next-i18next + [lang] dynamicBạn dùng
useTranslation()nhưng chưa inject bản dịch đúng ởgetStaticProps.Bạn quên truyền
i18ntừserverSideTranslations()vào.Bạn không sử dụng
namespacesRequiredđúng.Bạn dùng
I18nextProviderthủ công (không cần nữa nếu đã cấu hìnhnext-i18next).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:
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 namespace và lang đến từ URL
useTranslation() đúng namespace và lang đến từ URL3. Đảm bảo bạn không dùng I18nextProvider thủ công trong _app.tsx
I18nextProvider thủ công trong _app.tsxnext-i18next tự động inject provider qua appWithTranslation(App) — bạn nên dùng như sau:
4. Đảm bảo translation.json có key:
translation.json có key:Đặt tại:
✅ Mẫu about.tsx đúng chuẩn
about.tsx đúng chuẩnNế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?