Đặ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
- "Giới thiệu nội dung dựa trên lựa chọn"v9.1.030/7/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 AnhIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Nội dung dựa trên lựa chọn (Select) / Intlayer
Select hoạt động như thế nào
Trong Intlayer, nội dung dựa trên lựa chọn đạt được thông qua hàm select, hàm này ánh xạ các giá trị chuỗi tùy ý tới nội dung tương ứng của chúng. Hàm này tương đương với thông báo ICU {value, select, …}, hoặc giống như một câu lệnh switch trong mã ứng dụng của bạn.
Sử dụng select khi yếu tố phân biệt (discriminant) là một chuỗi dạng tự do: trạng thái (status), gói đăng ký (plan), nền tảng (platform) hoặc vai trò (role). Đối với các yếu tố phân biệt khác, Intlayer cung cấp các nút (nodes) chuyên dụng:
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
| Yếu tố phân biệt (Discriminant) | Nút (Node) |
|---|---|
| Số lượng (Quantity) | enu() |
| Boolean | cond() |
| Giới tính (Gender) | gender() |
| Bất kỳ chuỗi nào khác | select() |
Thiết lập nội dung dựa trên lựa chọn
Để thiết lập nội dung dựa trên lựa chọn trong dự án Intlayer của bạn, hãy tạo một module nội dung bao gồm các định nghĩa lựa chọn (select) của bạn. Dưới đây là ví dụ trong các định dạng khác nhau.
Sao chép mã vào clipboard
import { select, type Dictionary } from "intlayer";
const myPostContent = {
key: "my_key",
content: {
publishStatus: select({
draft: "This post is a draft",
published: "This post is live",
scheduled: "This post is scheduled",
fallback: "Unknown status", // tùy chọn (optional)
}),
},
} satisfies Dictionary;
export default myPostContent;Nếu không cófallbacknào được khai báo, khóa (key) được khai báo cuối cùng sẽ được coi là dự phòng khi giá trị được cung cấp không khớp với bất kỳ trường hợp nào đã được khai báo: giống hệt như thỏa thuận (contract) củacond()vàgender().
An toàn kiểu (Type Safety)
Tham số được chấp nhận được suy luận từ các trường hợp đã được khai báo:
- Nếu không có
fallback, chỉ các trường hợp đã khai báo mới được chấp nhận: việc đánh máy sai sẽ tạo ra một lỗi kiểu (type error). - Nếu có
fallback, bất kỳ chuỗi nào cũng được chấp nhận (bởi vì fallback bao gồm các giá trị không khớp) trong khi các trường hợp đã khai báo vẫn cung cấp tính năng tự động hoàn thành (autocompletion).
Tại sao không sử dụng một đối tượng thông thường?
Sẽ rất hấp dẫn nếu khai báo một đối tượng (object) thông thường và lập chỉ mục (index) vào đó bằng cách sử dụng một giá trị trong thời gian chạy (runtime value):
Sao chép mã vào clipboard
// ❌ Đừng làm điều nàyconst { publishStatus } = useIntlayer("my_key");return <p>{publishStatus[publishType]}</p>;Trình biên dịch (compiler) Intlayer phân tích mã nguồn của bạn để loại bỏ nội dung không sử dụng và thu nhỏ (minify) các khóa còn lại. Việc truy cập được tính toán động (obj[expr]) không thể được giải quyết tĩnh (statically resolved), do đó toàn bộ nhánh sẽ được đánh dấu là mờ (opaque): nó sẽ được giữ lại trong gói (bundle) và các khóa của nó sẽ không được thu nhỏ.
Bằng cách sử dụng select(), việc giải quyết trường hợp (case resolution) diễn ra bên trong một lệnh gọi hàm thay vì là một truy cập thuộc tính (property access). Trình biên dịch coi nó là một truy cập trường tĩnh (static field access) đơn lẻ, và tối ưu hóa nút này một cách chính xác như những gì nó làm với enu(), cond(), hoặc gender():
Sao chép mã vào clipboard
// ✅ Hãy làm điều nàyconst { publishStatus } = useIntlayer("my_key");return <p>{publishStatus(publishType)}</p>;Sử dụng nội dung dựa trên lựa chọn
Để tận dụng nội dung dựa trên lựa chọn trong một component React, hãy nhập khẩu (import) và sử dụng hook useIntlayer từ gói react-intlayer. Hook này lấy (fetch) nội dung cho khóa (key) đã chỉ định và cho phép bạn truyền một giá trị vào để chọn đầu ra thích hợp.
Sao chép mã vào clipboard
import type { FC } from "react";
import { useIntlayer } from "react-intlayer";
const PostStatus: FC = () => {
const { publishStatus } = useIntlayer("my_key");
return (
<div>
<p>
{
/* Đầu ra: This post is a draft */
publishStatus("draft")
}
</p>
<p>
{
/* Đầu ra: This post is live */
publishStatus("published")
}
</p>
<p>
{
/* Đầu ra: Unknown status */
publishStatus("Archived")
}
</p>
</div>
);
};
export default PostStatus;Kết hợp Select với các Nút (Nodes) khác
Bởi vì mỗi trường hợp (case) chứa một nút nội dung đầy đủ (full content node), select có thể được kết hợp với các nút như t(), insert(), md(), v.v.:
Sao chép mã vào clipboard
import { insert, select, t, type Dictionary } from "intlayer";const myPostContent = { key: "my_key", content: { publishStatus: select({ draft: insert( t({ en: "{{name}} saved a draft", fr: "{{name}} a enregistré un brouillon", vi: "{{name}} đã lưu một bản nháp", }) ), published: insert( t({ en: "{{name}} published the post", fr: "{{name}} a publié l’article", vi: "{{name}} đã xuất bản bài viết", }) ), fallback: insert( t({ en: "{{name}} updated the post", fr: "{{name}} a mis à jour l’article", vi: "{{name}} đã cập nhật bài viết", }) ), }), },} satisfies Dictionary;export default myPostContent;Sao chép mã vào clipboard
publishStatus("draft")({ name: "Alice" }); // Đầu ra: Alice đã lưu một bản nhápChuyển đổi từ ICU select
Các thông báo sử dụng tham số select của ICU sẽ được nhập (imported) dưới dạng nút (node) select:
Sao chép mã vào clipboard
{publishType, select, draft {draft} published {published} other {Unknown}}Sẽ trở thành:
Sao chép mã vào clipboard
select( { draft: "draft", published: "published", fallback: "Unknown", }, "publishType");Trường hợp other của ICU được đổi tên thành fallback, tên chuẩn (canonical name) trong Intlayer cho tất cả các trường hợp bao gồm (catch-all cases). Tham số thứ hai lưu lại tên biến ICU để thông báo sẽ biến đổi trở lại thành đúng chuỗi ICU đó khi xuất (export).
Xin lưu ý, thông báo ICUselectnơi các trường hợp là các giá trị giới tính (male/female/other) thay vào đó sẽ được nhập dưới dạng nútgender.
Tài nguyên Bổ sung
Để biết thêm thông tin chi tiết về cấu hình và cách sử dụng, hãy xem các tài nguyên sau:
Các tài nguyên này cung cấp thêm thông tin chi tiết về việc thiết lập và sử dụng Intlayer trong các môi trường và framework khác nhau.