Đặ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
Lịch sử phiên bản
- Phiên bản đầu tiênv7.0.61/11/2025
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
Cách quốc tế hóa ứng dụng Next.js của bạn bằng next-i18next trong năm 2026
Mục lục
next-i18next là gì?
next-i18next là một giải pháp quốc tế hóa (i18n) phổ biến cho các ứng dụng Next.js. Trong khi gói next-i18next ban đầu được thiết kế cho Pages Router, hướng dẫn này sẽ chỉ cho bạn cách triển khai i18next với App Router hiện đại bằng cách sử dụng trực tiếp i18next và react-i18next.
Với cách tiếp cận này, bạn có thể:
- Tổ chức các bản dịch bằng cách sử dụng namespace (ví dụ:
common.json,about.json) để quản lý nội dung tốt hơn. - Tải bản dịch hiệu quả bằng cách chỉ tải các namespace cần thiết cho mỗi trang, giảm kích thước gói.
- Hỗ trợ cả thành phần server và client với xử lý SSR và hydration đúng cách.
- Đảm bảo hỗ trợ TypeScript với cấu hình locale và khóa dịch có kiểu an toàn.
- Tối ưu hóa cho SEO với metadata phù hợp, sitemap và quốc tế hóa robots.txt.
Ngoài ra, bạn cũng có thể tham khảo hướng dẫn next-intl, hoặc sử dụng trực tiếp Intlayer.
Xem so sánh tại next-i18next vs next-intl vs Intlayer.
Các thực hành bạn nên tuân theo
Trước khi đi vào triển khai, đây là một số thực hành bạn nên tuân theo:
- Đặt thuộc tính
langvàdircho HTML Trong layout của bạn, tính toándirbằng cách sử dụnggetLocaleDirection(locale)và đặt<html lang={locale} dir={dir}>để đảm bảo khả năng truy cập và SEO đúng cách. - Phân tách thông điệp theo namespace
Tổ chức các file JSON theo locale và namespace (ví dụ:
common.json,about.json) để chỉ tải những gì bạn cần. - Giảm thiểu payload cho client
Trên các trang, chỉ gửi các namespace cần thiết đến
NextIntlClientProvider(ví dụ:pick(messages, ['common', 'about'])). - Ưu tiên các trang tĩnh Sử dụng trang tĩnh càng nhiều càng tốt để cải thiện hiệu suất và SEO.
- I18n trong các component server
Các component server, như các trang hoặc tất cả các component không được đánh dấu là
clientlà tĩnh và có thể được pre-render tại thời điểm build. Vì vậy, chúng ta sẽ phải truyền các hàm dịch cho chúng dưới dạng props. - Thiết lập kiểu TypeScript Để đảm bảo an toàn kiểu cho các locales của bạn trong toàn bộ ứng dụng.
- Proxy cho chuyển hướng Sử dụng proxy để xử lý việc phát hiện locale và định tuyến, đồng thời chuyển hướng người dùng đến URL có tiền tố locale phù hợp.
- Quốc tế hóa metadata, sitemap, robots.txt của bạn
Quốc tế hóa metadata, sitemap, robots.txt bằng cách sử dụng hàm
generateMetadatado Next.js cung cấp để đảm bảo các công cụ tìm kiếm có thể khám phá tốt hơn ở tất cả các locales. - Địa phương hóa các liên kết
Địa phương hóa các liên kết sử dụng component
Linkđể chuyển hướng người dùng đến URL có tiền tố locale phù hợp. Điều này rất quan trọng để đảm bảo các trang của bạn được khám phá ở tất cả các locales. - Tự động hóa kiểm thử và dịch thuật Tự động hóa kiểm thử và dịch thuật giúp tiết kiệm thời gian duy trì ứng dụng đa ngôn ngữ của bạn.
Xem tài liệu của chúng tôi liệt kê mọi thứ bạn cần biết về quốc tế hóa và SEO: Quốc tế hóa (i18n) với next-intl.
Hướng Dẫn Từng Bước Để Thiết Lập i18next Trong Ứng Dụng Next.js
Xem Mẫu Ứng Dụng trên GitHub.
Cấu trúc dự án mà chúng ta sẽ tạo:
Sao chép mã vào clipboard
Cài Đặt Các Phụ Thuộc
Cài đặt các gói cần thiết bằng npm:
bashSao chép mãSao chép mã vào clipboard
- i18next: Framework quốc tế hóa cốt lõi xử lý việc tải và quản lý bản dịch.
- react-i18next: Liên kết React cho i18next cung cấp các hook như
useTranslationcho các component phía client. - i18next-resources-to-backend: Plugin cho phép tải động các file bản dịch, giúp bạn chỉ tải những namespace cần thiết.
Cấu Hình Dự Án Của Bạn
Tạo một file cấu hình để định nghĩa các locale được hỗ trợ, locale mặc định, và các hàm trợ giúp cho việc địa phương hóa URL. File này đóng vai trò là nguồn dữ liệu duy nhất cho thiết lập i18n của bạn và đảm bảo an toàn kiểu trong toàn bộ ứng dụng.
Việc tập trung cấu hình locale giúp tránh sự không nhất quán và dễ dàng thêm hoặc loại bỏ các locale trong tương lai. Các hàm trợ giúp đảm bảo việc tạo URL nhất quán cho SEO và định tuyến.
i18n.config.tsSao chép mãSao chép mã vào clipboard
Tập trung các namespace dịch thuật
Tạo một nguồn dữ liệu duy nhất cho mọi namespace mà ứng dụng của bạn cung cấp. Tái sử dụng danh sách này giúp đồng bộ mã phía server, client và công cụ, đồng thời mở khóa kiểu dữ liệu mạnh cho các hàm hỗ trợ dịch thuật.
src/i18n.namespaces.tsSao chép mãSao chép mã vào clipboard
Định kiểu mạnh cho các khóa dịch với TypeScript
Mở rộng
i18nextđể trỏ tới các file ngôn ngữ chuẩn của bạn (thường là tiếng Anh). TypeScript sẽ suy luận các khóa hợp lệ theo từng namespace, do đó các lời gọi tớit()được kiểm tra toàn diện.src/types/i18next.d.tsSao chép mãSao chép mã vào clipboard
Mẹo: Lưu khai báo này trong thư mục
src/types(tạo thư mục nếu chưa có). Next.js đã bao gồmsrctrongtsconfig.json, vì vậy phần mở rộng này sẽ được tự động nhận diện. Nếu không, hãy thêm đoạn sau vào filetsconfig.jsoncủa bạn:tsconfig.jsonSao chép mãSao chép mã vào clipboard
Với thiết lập này, bạn có thể dựa vào tính năng tự động hoàn thành và kiểm tra lỗi khi biên dịch:
tsxSao chép mãSao chép mã vào clipboard
Thiết lập khởi tạo i18n phía server
Tạo một hàm khởi tạo phía máy chủ để tải các bản dịch cho các thành phần server. Hàm này tạo một instance i18next riêng biệt cho việc render phía server, đảm bảo rằng các bản dịch được tải trước khi render.
Các thành phần server cần có instance i18next riêng vì chúng chạy trong ngữ cảnh khác với các thành phần client. Việc tải trước các bản dịch trên server ngăn chặn hiện tượng nhấp nháy nội dung chưa được dịch và cải thiện SEO bằng cách đảm bảo các công cụ tìm kiếm nhìn thấy nội dung đã được dịch.
src/app/i18n/server.tsSao chép mãSao chép mã vào clipboard
Tạo Provider i18n phía Client
Tạo một component provider phía client bao bọc ứng dụng của bạn với context i18next. Provider này nhận các bản dịch đã được tải sẵn từ server để ngăn chặn hiện tượng flash nội dung chưa dịch (FOUC) và tránh việc tải lặp lại.
Các component phía client cần một instance i18next riêng chạy trong trình duyệt. Bằng cách nhận tài nguyên đã tải sẵn từ server, chúng ta đảm bảo quá trình hydration mượt mà và ngăn chặn hiện tượng nhấp nháy nội dung. Provider cũng quản lý việc thay đổi locale và tải namespace một cách động.
src/components/I18nProvider.tsxSao chép mãSao chép mã vào clipboard
Định nghĩa các tuyến đường động theo locale
Thiết lập routing động cho các locale bằng cách tạo thư mục
[locale]trong thư mục app của bạn. Điều này cho phép Next.js xử lý routing dựa trên locale, trong đó mỗi locale trở thành một phân đoạn URL (ví dụ:/en/about,/fr/about).Việc sử dụng các tuyến đường động cho phép Next.js tạo các trang tĩnh cho tất cả các locale trong quá trình build, cải thiện hiệu suất và SEO. Component layout sẽ thiết lập các thuộc tính HTML
langvàdirdựa trên locale, điều này rất quan trọng cho khả năng truy cập và hiểu biết của công cụ tìm kiếm.src/app/[locale]/layout.tsxSao chép mãSao chép mã vào clipboard
Tạo các tệp dịch của bạn
Tạo các tệp JSON cho mỗi locale và namespace. Cấu trúc này cho phép bạn tổ chức các bản dịch một cách hợp lý và chỉ tải những gì bạn cần cho mỗi trang.
Tổ chức các bản dịch theo namespace (ví dụ:
common.json,about.json) cho phép tách mã và giảm kích thước gói. Bạn chỉ tải các bản dịch cần thiết cho mỗi trang, cải thiện hiệu suất.src/locales/en/common.jsonSao chép mãSao chép mã vào clipboard
src/locales/fr/common.jsonSao chép mãSao chép mã vào clipboard
src/locales/en/home.jsonSao chép mãSao chép mã vào clipboard
src/locales/vi/home.jsonSao chép mãSao chép mã vào clipboard
src/locales/en/about.jsonSao chép mãSao chép mã vào clipboard
src/locales/vi/about.jsonSao chép mãSao chép mã vào clipboard
Sử dụng Bản dịch trong Trang của Bạn
Tạo một component trang khởi tạo i18next trên server và truyền các bản dịch cho cả component server và client. Điều này đảm bảo các bản dịch được tải trước khi render và ngăn chặn hiện tượng nhấp nháy nội dung.
Việc khởi tạo phía server tải các bản dịch trước khi trang được render, cải thiện SEO và ngăn chặn FOUC (Flash of Unstyled Content). Bằng cách truyền tài nguyên đã tải sẵn cho provider phía client, chúng ta tránh việc tải trùng lặp và đảm bảo quá trình hydration mượt mà.
src/app/[locale]/about/index.tsxSao chép mãSao chép mã vào clipboard
Sử dụng Dịch trong Các Component Client
Các component client có thể sử dụng hook
useTranslationđể truy cập bản dịch. Hook này cung cấp hàm dịch và instance i18n, cho phép bạn dịch nội dung và truy cập thông tin locale.Các component client cần React hooks để truy cập bản dịch. Hook
useTranslationtích hợp mượt mà với i18next và cung cấp cập nhật phản ứng khi locale thay đổi.Đảm bảo trang/provider chỉ bao gồm các namespace bạn cần (ví dụ:
about).
Nếu bạn dùng React < 19, hãy memo hóa các bộ định dạng nặng nhưIntl.NumberFormat.src/components/ClientComponent.tsxSao chép mãSao chép mã vào clipboard
Sử dụng bản dịch trong các Server Components
Các server component không thể sử dụng React hooks, vì vậy chúng nhận các bản dịch thông qua props từ các component cha của chúng. Cách tiếp cận này giữ cho server component đồng bộ và cho phép chúng được lồng bên trong các client component.
Các server component có thể được lồng dưới các ranh giới client cần phải đồng bộ. Bằng cách truyền các chuỗi đã dịch và thông tin locale dưới dạng props, chúng ta tránh các thao tác bất đồng bộ và đảm bảo việc render chính xác.
src/components/ServerComponent.tsxSao chép mãSao chép mã vào clipboard
Thay đổi ngôn ngữ nội dung của bạn
Tùy chọnĐể thay đổi ngôn ngữ nội dung trong Next.js, cách được khuyến nghị là sử dụng URL có tiền tố locale và các liên kết Next.js. Ví dụ dưới đây đọc locale hiện tại từ route, loại bỏ nó khỏi pathname, và hiển thị một liên kết cho mỗi locale có sẵn.
src/components/LocaleSwitcher.tsxSao chép mãSao chép mã vào clipboard
Xây dựng một component Link có hỗ trợ đa ngôn ngữ
Tùy chọnTái sử dụng các URL đã được địa phương hóa trong toàn bộ ứng dụng giúp điều hướng nhất quán và thân thiện với SEO. Bao bọc
next/linktrong một helper nhỏ để thêm tiền tố locale đang hoạt động vào các route nội bộ trong khi giữ nguyên các URL bên ngoài.src/components/LocalizedLink.tsxSao chép mãSao chép mã vào clipboard
Mẹo: Vì
LocalizedLinklà một thành phần thay thế trực tiếp, hãy di chuyển dần dần bằng cách thay đổi các import và để thành phần xử lý các URL theo locale cụ thể.Truy cập locale đang hoạt động bên trong Server Actions
Tùy chọnServer Actions thường cần locale hiện tại để gửi email, ghi log hoặc tích hợp với bên thứ ba. Kết hợp cookie locale được proxy của bạn thiết lập với header
Accept-Languagelàm phương án dự phòng.src/app/actions/get-current-locale.tsSao chép mãSao chép mã vào clipboard
Vì helper dựa vào cookies và headers của Next.js, nó hoạt động trong Route Handlers, Server Actions và các ngữ cảnh chỉ dành cho server khác.
Quốc tế hóa Metadata của bạn
Tùy chọnDịch nội dung là quan trọng, nhưng mục tiêu chính của quốc tế hóa là làm cho trang web của bạn trở nên dễ tiếp cận hơn với thế giới. I18n là một đòn bẩy tuyệt vời để cải thiện khả năng hiển thị trang web của bạn thông qua SEO đúng cách.
Metadata được quốc tế hóa đúng cách giúp các công cụ tìm kiếm hiểu được những ngôn ngữ nào có sẵn trên các trang của bạn. Điều này bao gồm việc thiết lập thẻ meta hreflang, dịch tiêu đề và mô tả, và đảm bảo các URL chuẩn (canonical) được thiết lập chính xác cho từng ngôn ngữ.
Dưới đây là danh sách các thực hành tốt liên quan đến SEO đa ngôn ngữ:
- Đặt thẻ meta hreflang trong thẻ
<head>để giúp các công cụ tìm kiếm hiểu được những ngôn ngữ nào có trên trang - Liệt kê tất cả các bản dịch trang trong sitemap.xml sử dụng schema XML
http://www.w3.org/1999/xhtml - Đừng quên loại trừ các trang có tiền tố khỏi robots.txt (ví dụ:
/dashboard,/fr/dashboard,/es/dashboard) - Sử dụng component Link tùy chỉnh để chuyển hướng đến trang được địa phương hóa nhất (ví dụ, bằng tiếng Pháp
<a href="/fr/about">À propos</a>)
Các nhà phát triển thường quên tham chiếu đúng các trang của họ qua các locale. Hãy sửa điều đó:
src/app/[locale]/about/layout.tsxSao chép mãSao chép mã vào clipboard
- Đặt thẻ meta hreflang trong thẻ
Quốc tế hóa Sitemap của bạn
Tùy chọnTạo một sitemap bao gồm tất cả các phiên bản locale của các trang của bạn. Điều này giúp các công cụ tìm kiếm khám phá và lập chỉ mục tất cả các phiên bản ngôn ngữ của nội dung của bạn.
Một sitemap được quốc tế hóa đúng cách đảm bảo các công cụ tìm kiếm có thể tìm thấy và lập chỉ mục tất cả các phiên bản ngôn ngữ của các trang của bạn. Điều này cải thiện khả năng hiển thị trong kết quả tìm kiếm quốc tế.
src/app/sitemap.tsSao chép mãSao chép mã vào clipboard
Quốc tế hóa tệp robots.txt của bạn
Tùy chọnTạo một tệp robots.txt xử lý đúng tất cả các phiên bản ngôn ngữ của các tuyến đường được bảo vệ của bạn. Điều này đảm bảo rằng các công cụ tìm kiếm không lập chỉ mục các trang quản trị hoặc bảng điều khiển bằng bất kỳ ngôn ngữ nào.
Cấu hình đúng robots.txt cho tất cả các ngôn ngữ ngăn các công cụ tìm kiếm lập chỉ mục các trang nhạy cảm bằng bất kỳ ngôn ngữ nào. Điều này rất quan trọng cho bảo mật và quyền riêng tư.
src/app/robots.tsSao chép mãSao chép mã vào clipboard
Thiết lập Middleware cho Định tuyến Ngôn ngữ
Tùy chọnTạo một proxy để tự động phát hiện ngôn ngữ ưu tiên của người dùng và chuyển hướng họ đến URL có tiền tố ngôn ngữ phù hợp. Điều này cải thiện trải nghiệm người dùng bằng cách hiển thị nội dung theo ngôn ngữ họ ưu thích.
Middleware đảm bảo người dùng được tự động chuyển hướng đến ngôn ngữ ưu tiên khi họ truy cập trang web của bạn. Nó cũng lưu trữ lựa chọn ngôn ngữ của người dùng trong cookie cho các lần truy cập sau.
src/proxy.tsSao chép mãSao chép mã vào clipboard
Tự động hóa bản dịch của bạn bằng Intlayer
Tùy chọnIntlayer là một thư viện miễn phí và mã nguồn mở được thiết kế để hỗ trợ quá trình bản địa hóa trong ứng dụng của bạn. Trong khi i18next xử lý việc tải và quản lý bản dịch, Intlayer giúp tự động hóa quy trình làm việc bản dịch.
Việc quản lý bản dịch thủ công có thể tốn nhiều thời gian và dễ xảy ra lỗi. Intlayer tự động hóa việc kiểm thử, tạo và quản lý bản dịch, giúp bạn tiết kiệm thời gian và đảm bảo tính nhất quán trên toàn bộ ứng dụng của bạn.
Intlayer sẽ cho phép bạn:
Khai báo nội dung của bạn ở bất cứ đâu bạn muốn trong codebase Intlayer cho phép khai báo nội dung của bạn ở bất cứ đâu bạn muốn trong codebase bằng cách sử dụng các file
.content.{ts|js|json}. Điều này sẽ giúp tổ chức nội dung tốt hơn, đảm bảo khả năng đọc và bảo trì codebase hiệu quả hơn.Kiểm thử các bản dịch còn thiếu Intlayer cung cấp các hàm kiểm thử có thể tích hợp vào pipeline CI/CD của bạn hoặc trong các unit test. Tìm hiểu thêm về kiểm thử bản dịch của bạn.
Tự động hóa việc dịch của bạn, Intlayer cung cấp một CLI và một tiện ích mở rộng VSCode để tự động hóa việc dịch của bạn. Nó có thể được tích hợp vào pipeline CI/CD của bạn. Tìm hiểu thêm về tự động hóa việc dịch của bạn. Bạn có thể sử dụng khóa API riêng của bạn và nhà cung cấp AI mà bạn chọn. Nó cũng cung cấp các bản dịch nhận biết ngữ cảnh, xem thêm tự động điền nội dung.
- Kết nối nội dung bên ngoài
Tự động hóa việc dịch của bạn,
Intlayer cung cấp một CLI và một tiện ích mở rộng VSCode để tự động hóa việc dịch của bạn. Nó có thể được tích hợp vào pipeline CI/CD của bạn. Tìm hiểu thêm về tự động hóa việc dịch của bạn.
Bạn có thể sử dụng khóa API riêng của bạn và nhà cung cấp AI bạn chọn. Nó cũng cung cấp các bản dịch nhận biết ngữ cảnh, xem thêm tự động điền nội dung.Kết nối nội dung bên ngoài
Intlayer cho phép bạn kết nối nội dung của mình với hệ thống quản lý nội dung bên ngoài (CMS). Để lấy nội dung một cách tối ưu và chèn vào tài nguyên JSON của bạn. Tìm hiểu thêm về lấy nội dung bên ngoài.Trình chỉnh sửa trực quan
Intlayer cung cấp một trình chỉnh sửa trực quan miễn phí để chỉnh sửa nội dung của bạn bằng trình chỉnh sửa trực quan. Tìm hiểu thêm về chỉnh sửa trực quan bản dịch của bạn.
Và còn nhiều hơn nữa. Để khám phá tất cả các tính năng mà Intlayer cung cấp, vui lòng tham khảo Lợi ích của tài liệu Intlayer.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên chia sẻ suy nghĩ của bạn.