Đặ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
Tài liệu này đã lỗi thời, phiên bản gốc đã được cập nhật vào 22 tháng 8, 2026.
Xem tài liệu tiếng AnhLịch sử phiên bản
- "Thêm điều hướng ngôn ngữ dựa trên tên miền thông qua cấu hình routing.domains."v8.5.02/4/2026
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
Tên miền tùy chỉnh
Intlayer hỗ trợ điều hướng ngôn ngữ dựa trên tên miền, cho phép bạn phục vụ các ngôn ngữ cụ thể từ các tên miền riêng biệt. Ví dụ: khách truy cập từ Trung Quốc có thể được điều hướng đến intlayer.zh thay vì intlayer.org/zh.
Cách thức hoạt động
Bản đồ domains trong routing liên kết mỗi ngôn ngữ với một tên miền. Intlayer sử dụng bản đồ này ở hai nơi:
- Tạo URL (
getLocalizedUrl): khi ngôn ngữ mục tiêu nằm trên một tên miền khác với trang hiện tại, một URL tuyệt đối sẽ được trả về (ví dụ:https://intlayer.zh/about). Khi cả hai tên miền khớp nhau, một URL tương đối sẽ được trả về (ví dụ:/fr/about). - Proxy máy chủ (Next.js & Vite): Các yêu cầu đến sẽ được chuyển hướng hoặc ghi lại dựa trên tên miền mà chúng đến.
Tên miền độc quyền vs Tên miền chung
Sự khác biệt chính là tính độc quyền:
- Tên miền độc quyền - Chỉ một ngôn ngữ ánh xạ tới tên miền đó (ví dụ:
zh → intlayer.zh). Bản thân tên miền đó xác định ngôn ngữ, vì vậy không có tiền tố ngôn ngữ nào được thêm vào đường dẫn.https://intlayer.zh/aboutphục vụ nội dung tiếng Trung. - Tên miền chung - Nhiều ngôn ngữ ánh xạ tới cùng một tên miền (ví dụ: cả
envàfrđều ánh xạ tớiintlayer.org). Điều hướng dựa trên tiền tố thông thường sẽ được áp dụng.intlayer.org/fr/aboutphục vụ nội dung tiếng Pháp.
Cấu hình
Sao chép mã vào clipboard
Các ngôn ngữ không được liệt kê trong domains tiếp tục sử dụng điều hướng tiền tố tiêu chuẩn mà không có bất kỳ ghi đè tên miền nào.
Tạo URL
getLocalizedUrl tự động tạo loại URL chính xác dựa trên ngữ cảnh cuộc gọi.
Ngôn ngữ cùng tên miền (URL tương đối)
Sao chép mã vào clipboard
Ngôn ngữ khác tên miền (URL tuyệt đối)
Sao chép mã vào clipboard
Phục vụ từ chính tên miền của ngôn ngữ
Sao chép mã vào clipboard
Tự động phát hiện tên miền hiện tại
currentDomain là tùy chọn. Khi được bỏ qua, getLocalizedUrl sẽ giải quyết nó theo thứ tự này:
- Tên miền của một URL đầu vào tuyệt đối (ví dụ:
https://intlayer.org/about→intlayer.org). window.location.hostnametrong môi trường trình duyệt.- Nếu không có cái nào khả dụng (SSR không có tùy chọn rõ ràng), một URL tương đối sẽ được trả về cho các ngôn ngữ cùng tên miền và không có URL tuyệt đối nào được tạo - đây là phương án dự phòng an toàn.
Sao chép mã vào clipboard
getMultilingualUrls với tên miền
getMultilingualUrls gọi getLocalizedUrl cho mọi ngôn ngữ, vì vậy nó tạo ra sự kết hợp giữa URL tương đối và tuyệt đối tùy thuộc vào tên miền của người gọi:
Sao chép mã vào clipboard
Các URL tuyệt đối này đã sẵn sàng để sử dụng trong các thẻ <link rel="alternate" hreflang="..."> cho SEO.
Suy luận kiểu dữ liệu
routing.domains được serialize vào module augmentation được tạo, do đó
getLocalizedUrl và getLocalizedPath thu hẹp kiểu trả về của chúng thành URL chính xác
mà một locale được định tuyến theo domain sẽ phân giải thành — bao gồm cả việc loại bỏ prefix.
Sao chép mã vào clipboard
Kiểu URL là union của hai giá trị mà hàm có thể trả về: URL tuyệt đối trên domain của locale,
và URL tương đối mà nó trả về khi trang đang được render đã nằm trên domain đó. getLocalizedPath không có sự
mơ hồ như vậy - nó không bao giờ phát ra một origin - do đó nó vẫn là một literal duy nhất.
Các locale chia sẻ một domain sẽ giữ prefix bình thường của chúng trong kiểu như sau:
Sao chép mã vào clipboard
Tái tạo các kiểu dữ liệu (
npx intlayer build, hoặc bất kỳ lần chạy dev server nào) sau khi thay đổirouting.domains- việc thu hẹp đến từ__RoutingRegistryđược tạo, chứ không phải từ chính tệp cấu hình.
Hành vi Proxy
Next.js
Phần mềm trung gian intlayerProxy tự động xử lý điều hướng tên miền. Thêm nó vào middleware.ts của bạn:
Sao chép mã vào clipboard
Chuyển hướng - yêu cầu đến sai tên miền cho một tiền tố ngôn ngữ nhất định:
Sao chép mã vào clipboard
Ghi lại (Rewrite) - yêu cầu đến tên miền độc quyền của ngôn ngữ mà không có tiền tố:
Sao chép mã vào clipboard
Vite
Plugin Vite intlayerProxy áp dụng logic tương tự trong quá trình phát triển:
Kể từ Intlayer v9,intlayerProxy()được đóng gói trực tiếp vào pluginintlayer()và được bật mặc định thông qua tùy chọnrouting.enableProxy(truetheo mặc định). Đăng ký nó riêng biệt như hiển thị bên dưới hiện là tùy chọn — nó được giữ lại để tương thích ngược và cho các thiết lập cần kiểm soát thứ tự plugin. Đặtrouting.enableProxy: falseđể từ chối. Xem ghi chú phát hành v9.
Sao chép mã vào clipboard
Lưu ý: trong quá trình phát triển cục bộ, bạn thường ởlocalhost, vì vậy các chuyển hướng xuyên tên miền sẽ trỏ đến các tên miền trực tiếp thay vì một cổng cục bộ khác. Sử dụng ghi đè tệp hosts (ví dụ:127.0.0.1 intlayer.zh) hoặc một proxy ngược nếu bạn cần kiểm tra điều hướng đa tên miền cục bộ.
Trình chuyển đổi ngôn ngữ (Locale Switcher)
Hook useLocale từ next-intlayer tự động xử lý điều hướng nhận biết tên miền. Khi người dùng chuyển sang một ngôn ngữ trên một tên miền khác, hook thực hiện điều hướng toàn bộ trang (window.location.href) thay vì đẩy bộ định tuyến phía máy khách, vì bộ định tuyến Next.js không thể xuyên suốt các nguồn (origins).
Sao chép mã vào clipboard
Không cần cấu hình thêm - useLocale tự động phát hiện window.location.hostname bên trong và quyết định giữa router.replace (cùng tên miền) và window.location.href (khác tên miền).
SEO: hreflang Liên kết thay thế
Điều hướng dựa trên tên miền thường được sử dụng cùng với hreflang để thông báo cho các công cụ tìm kiếm biết URL nào nên lập chỉ mục cho mỗi ngôn ngữ. Sử dụng getMultilingualUrls để tạo bộ URL thay thế đầy đủ:
Sao chép mã vào clipboard
Điều này tạo ra:
Sao chép mã vào clipboard
Các tiện ích cốt lõi
Mở bảng trong một cửa sổ bật lên để xem toàn bộ nội dung dữ liệu một cách rõ ràng
| Tiện ích | Mô tả |
|---|---|
getLocalizedUrl(url, locale, { currentDomain }) | Trả về URL tương đối hoặc tuyệt đối tùy thuộc vào việc ngôn ngữ mục tiêu có nằm trên tên miền hiện tại hay không. |
getMultilingualUrls(url, { currentDomain }) | Trả về một bản đồ các URL được bản địa hóa theo khóa ngôn ngữ, kết hợp tương đối và tuyệt đối khi cần thiết. |
getPrefix(locale, { domains }) | Trả về một tiền tố trống cho các ngôn ngữ thuộc tên miền độc quyền, tiền tố bình thường nếu ngược lại. |
