Đặt câu hỏi và nhận tóm tắt tài liệu bằng cách tham chiếu trang này và nhà cung cấp AI bạn chọn
Nội dung của trang này đã được dịch bằng AI.
Xem phiên bản mới nhất của nội dung gốc bằng tiếng AnhNếu bạn có ý tưởng để cải thiện tài liệu này, vui lòng đóng góp bằng cách gửi pull request trên GitHub.
Liên kết GitHub tới tài liệuSao chép Markdown của tài liệu vào bộ nhớ tạm
Dịch website Next.js 15 sử dụng next-i18next với Intlayer | Quốc tế hóa (i18n)
Hướng dẫn này dành cho ai
- Junior: Làm theo chính xác các bước và sao chép các khối mã. Bạn sẽ có một ứng dụng đa ngôn ngữ hoạt động.
- Mid-level: Sử dụng các danh sách kiểm tra và các lưu ý về thực hành tốt nhất để tránh những sai sót phổ biến.
- Senior: Lướt qua cấu trúc tổng thể, các phần SEO và tự động hóa; bạn sẽ tìm thấy các thiết lập mặc định hợp lý và các điểm mở rộng.
Những gì bạn sẽ xây dựng
- Dự án App Router với các tuyến đường được địa phương hóa (ví dụ:
/,/fr/...) - Cấu hình i18n với các locale, locale mặc định, hỗ trợ RTL
- Khởi tạo i18n phía server và một provider phía client
- Các bản dịch theo namespace được tải theo yêu cầu
- SEO với
hreflang,sitemapvàrobotsđược địa phương hóa - Middleware cho việc định tuyến theo locale
- Tích hợp Intlayer để tự động hóa quy trình dịch thuật (kiểm thử, điền AI, đồng bộ JSON)
Lưu ý: next-i18next được xây dựng dựa trên i18next. Hướng dẫn này sử dụng các primitive của i18next tương thích với next-i18next trong App Router, đồng thời giữ cho kiến trúc đơn giản và sẵn sàng cho môi trường production. Để so sánh rộng hơn, xem next-i18next vs next-intl vs Intlayer.
1) Cấu trúc dự án
Cài đặt các dependencies của next-i18next -
Bắt đầu với một cấu trúc rõ ràng. Giữ các thông điệp được tách theo locale và namespace.
Danh sách kiểm tra (trung cấp/cao cấp):
- Giữ một file JSON cho mỗi namespace mỗi locale
- Không tập trung quá nhiều thông điệp; sử dụng các namespace nhỏ, theo trang/tính năng
- Tránh import tất cả các locale cùng lúc; chỉ tải những gì bạn cần
2) Cài đặt dependencies
Nếu bạn dự định sử dụng các API hoặc cấu hình tương tác của next-i18next, cũng cần:
3) Cấu hình i18n cốt lõi
Định nghĩa các locales, locale mặc định, RTL, và các hàm trợ giúp cho các đường dẫn/URL có địa phương hóa.
Ghi chú chuyên sâu: Nếu bạn sử dụng next-i18next.config.js, hãy giữ cho nó đồng bộ với i18n.config.ts để tránh lệch pha.
4) Khởi tạo i18n phía server
Khởi tạo i18next trên server với backend động chỉ nhập khẩu các JSON locale/namespace cần thiết.
Ghi chú giữa: Giữ danh sách namespace ngắn cho mỗi trang để giới hạn payload. Tránh các gói “bắt tất cả” toàn cục.
5) Provider phía client cho các component React
Bao bọc các component phía client với một provider phản chiếu cấu hình phía server và chỉ tải các namespace được yêu cầu.
Mẹo cho người mới: Bạn không cần phải truyền tất cả các thông điệp đến client. Hãy bắt đầu chỉ với các namespace của trang.
6) Bố cục và đường dẫn địa phương hóa
Đặt ngôn ngữ và hướng, đồng thời tạo trước các đường dẫn theo từng locale để ưu tiên render tĩnh.
7) Ví dụ trang với sử dụng server + client
Bản dịch (mỗi JSON cho một namespace dưới src/locales/...):
Component phía client (chỉ tải namespace cần thiết):
Đảm bảo trang/provider chỉ bao gồm các namespace bạn cần (ví dụ:
about). Nếu bạn sử dụng React < 19, hãy ghi nhớ các bộ định dạng nặng nhưIntl.NumberFormat.
Synchronous server component được nhúng dưới một client boundary:
8) SEO: Metadata, Hreflang, Sitemap, Robots
Dịch nội dung là một cách để mở rộng phạm vi tiếp cận. Thiết lập SEO đa ngôn ngữ một cách kỹ lưỡng.
Các thực hành tốt nhất:
- Đặt
langvàdirtại phần gốc - Thêm
alternates.languagescho mỗi locale (+x-default) - Liệt kê các URL đã dịch trong
sitemap.xmlvà sử dụnghreflang - Loại trừ các khu vực riêng tư đã được địa phương hóa (ví dụ:
/fr/admin) trongrobots.txt
9) Middleware cho định tuyến locale
Phát hiện locale và chuyển hướng đến đường dẫn có locale nếu thiếu.
10) Hiệu suất và các thực hành tốt nhất cho trải nghiệm nhà phát triển (DX)
- Đặt thuộc tính
langvàdircho html: Đã thực hiện trongsrc/app/[locale]/layout.tsx. - Phân tách thông điệp theo namespace: Giữ các gói nhỏ (
common.json,about.json, v.v.). - Giảm thiểu payload phía client: Trên các trang, chỉ truyền các namespace cần thiết cho provider.
- Ưu tiên các trang tĩnh: Sử dụng
export const dynamic = 'force-static'vàgenerateStaticParamscho từng locale. - Đồng bộ các component server: Truyền các chuỗi/định dạng đã tính trước thay vì gọi async khi render.
- Ghi nhớ các thao tác nặng: Đặc biệt trong mã client cho các phiên bản React cũ hơn.
- Bộ nhớ đệm và header: Ưu tiên tĩnh hoặc
revalidatethay vì render động khi có thể.
11) Kiểm thử và CI
- Thêm unit test cho các component sử dụng
tđể đảm bảo các key tồn tại. - Xác thực rằng mỗi namespace có cùng các khóa trên tất cả các locale.
- Hiển thị các khóa còn thiếu trong quá trình CI trước khi triển khai.
Intlayer sẽ tự động hóa phần lớn công việc này (xem phần tiếp theo).
12) Thêm Intlayer lên trên (tự động hóa)
Intlayer giúp bạn giữ đồng bộ các bản dịch JSON, kiểm tra các khóa còn thiếu và điền bằng AI khi cần.
Cài đặt các dependencies của intlayer:
Thêm các script cho package:
Các luồng phổ biến:
pnpm i18n:testtrong CI để làm cho build thất bại khi thiếu keypnpm i18n:fillchạy cục bộ để đề xuất bản dịch AI cho các key mới được thêm vào
Bạn có thể cung cấp các đối số CLI; xem thêm tại Tài liệu CLI của Intlayer.
13) Khắc phục sự cố
- Không tìm thấy khóa: Đảm bảo trang/nhà cung cấp liệt kê đúng các namespace và tệp JSON tồn tại trong
src/locales/<locale>/<namespace>.json. - Ngôn ngữ sai/lỗi nháy tiếng Anh: Kiểm tra kỹ việc phát hiện locale trong
middleware.tsvàlngcủa nhà cung cấp. - Vấn đề bố cục RTL: Xác nhận
dirđược lấy từisRtl(locale)và CSS của bạn tuân thủ[dir="rtl"]. - Thiếu các alternate SEO: Xác nhận
alternates.languagesbao gồm tất cả các locale vàx-default. - Gói quá lớn: Chia nhỏ các namespace hơn nữa và tránh nhập toàn bộ cây
localestrên client.
14) Tiếp theo
- Thêm nhiều locale và namespace hơn khi các tính năng phát triển
- Địa phương hóa các trang lỗi, email và nội dung được điều khiển bởi API
- Mở rộng quy trình làm việc của Intlayer để tự động mở PR cập nhật bản dịch
Nếu bạn muốn một mẫu khởi đầu, hãy thử template: https://github.com/aymericzip/intlayer-next-i18next-template.