← Khái niệm

Hòa hợp về giống

Một số ngôn ngữ biến đổi động từ và tính từ theo giới tính của người mà câu nói đến. Tiếng Anh hầu như không có điều này, nên một cụm từ bạn viết là {username} has been invited chỉ là một câu trong tiếng Anh nhưng thành hai hoặc ba câu trong tiếng Tây Ban Nha, Pháp hay Nga. Langsys xử lý việc đó trong quá trình dịch — giống cách nó tạo các dạng số nhiều — và bạn chỉ cần truyền một đối số.

Xem · 0:39 Hòa hợp về giới

Quy trình xử lý tạo ra những gì

Khi một ngôn ngữ đích cần xử lý sự hòa hợp ngữ pháp, Langsys sẽ viết lại chuỗi của ngôn ngữ đó thành các nhánh cần thiết — một ICU select. Cụm từ nguồn của bạn không bao giờ thay đổi, và bạn không bao giờ phải tự viết các nhánh.

Bạn không bao giờ phải viết phần này — pipeline sẽ làm
// Your source phrase, unchanged:
"{username} has been invited"

// What the Spanish translation becomes — note invitado / invitada:
"{username_gender, select, male {{username} ha sido invitado} \
female {{username} ha sido invitada} \
other {{username} ha sido invitado/a}}"

Có hai hệ quả đáng ghi nhớ. Tên đối số được đặt theo biến mà nó biến đổi, kèm thêm hậu tố _gender — {username} sẽ cho ra username_gender — và các nhánh luôn là male, female, other. Đối số này chỉ xuất hiện ở những ngôn ngữ cần đến nó: bạn sẽ không nhận ra điều này cho đến khi có người mở ứng dụng bằng một ngôn ngữ có phân biệt giống.

Cách truyền vào

Hãy truyền đối số bất cứ khi nào bạn biết, và người đọc sẽ nhận được câu được biến đổi đúng ngữ pháp:

// The argument is named after the variable it inflects, + _gender.
// Branches are always male / female / other.
t('{username} has been invited', 'Team', {
  username: user.name,
  username_gender: user.gender ?? 'other',
});

Không biết giới tính? Hãy truyền 'other' một cách tường minh — đó là nhánh trung lập. Cách hiển thị khi thiếu đối số khác nhau tùy SDK; trang của từng SDK đều có nêu rõ. Mỗi trang SDK cũng cho thấy lời gọi theo đúng phong cách riêng của nó.

Những cụm từ nào cần đến nó?

Bạn không thể biết được từ chính mã nguồn của mình, và điều đó là tất yếu: đối số được thêm vào trong quá trình dịch, theo từng ngôn ngữ đích, nên không có gì trong cụm từ gốc hay codebase của bạn gợi ý về nó. Có ba cách để tìm hiểu.

Đọc danh mục. Các bản dịch mà ứng dụng của bạn tải về chính là các chuỗi đã được đưa lên chính thức, nên câu trả lời đã có sẵn ở phía máy khách. Hãy lấy danh mục của một ngôn ngữ bạn hỗ trợ — SDK nào cũng cung cấp chức năng này — rồi tìm các mục có chứa , select,. Cách này cho bạn biết chính xác các cụm từ và tên đối số, và đủ nhẹ để chạy trong CI đối với từng ngôn ngữ bạn phát hành.

// The catalog your app fetches IS the promoted strings — grep it.
const wanting = Object.entries(catalog)
  .filter(([, translation]) => translation.includes(', select,'))
  .map(([phrase]) => phrase);
// → every phrase (and, from the string, every argument) this locale needs

Bật chế độ gỡ lỗi (SDK JavaScript). Truyền debug: true trong cấu hình khởi tạo và duyệt ứng dụng ở một ngôn ngữ có phân biệt giống: SDK sẽ ghi một Langsys Warning cho mỗi cụm từ có bản dịch cần một đối số mà bạn chưa cung cấp, kèm tên đối số đó. Chỉ ghi một lần cho mỗi cụm từ ở mỗi ngôn ngữ, và im lặng trong môi trường production. Một điểm cần lưu ý: bên trong các component khối nội dung và cụm từ, _gender được truyền vào để phòng ngừa cũng bị báo là tham số không khớp, vì phép kiểm tra đó chạy trên văn bản gốc của bạn — nơi select không bao giờ xuất hiện.

Khi còn phân vân, hãy cứ truyền. Giá trị của một đối số mà chuỗi không có sẽ bị bỏ qua khi hiển thị, vì vậy việc gửi _gender cho mọi biến chỉ người là an toàn và bao quát cả những ngôn ngữ bạn chưa kịp xem xét.

Mỗi cụm từ một biến. Chỉ một biến có thể quyết định sự hòa hợp. Một chuỗi có hai biến — số lượng và giới tính — sẽ được giữ nguyên thay vì chuyển thành ICU lồng nhau, nên được dịch như một câu phẳng duy nhất.

Tìm kiếm trong tài liệu & Trung tâm học tập