Чи можна комбінувати типи вузлів? (напр. кілька множин в одному реченні)
Так, типи вузлів в Intlayer можна комбінувати. Наприклад, ви можете вкласти один plural() всередину іншого plural(), або скомбінувати plural() з insert().
Коли вам потрібно виразити дві незалежні змінні множини в одному реченні (наприклад: "1 файл у 2 папках" проти "3 файли в 1 папці"), є два основних підходи:
- Використання
insert()з окремими ключамиplural()(Рекомендовано): Чисто, зручно в підтримці та зберігає правильний порядок слів для різних мов. - Вкладення
plural()уplural()(Пряма композиція): Допустимий синтаксис, але може призвести до комбінаторного вибуху гілок для мов зі складними правилами множини.
Композиція insert() з plural()
Найбільш гнучкий та ідіоматичний підхід полягає в оголошенні окремих ключів plural для кожного терміна та їх поєднанні за допомогою шаблону insert().
1. Оголошення вмісту
src/fileSummary.content.ts
Копіювати код
Скопіюйте код у буфер обміну
import { insert, plural, t, type Dictionary } from "intlayer";
const fileSummaryContent = {
key: "file_summary",
content: {
// Шаблон вставки визначає структуру речення для кожної мови
summary: t({
uk: insert("{{files}} у {{folders}}"),
en: insert("{{files}} in {{folders}}"),
fr: insert("{{files}} dans {{folders}}"),
ja: insert("{{folders}}の中に{{files}}"), // Спеціальний порядок слів для японської мови
}),
files: t({
uk: plural({
one: "{{count}} файл",
few: "{{count}} файли",
many: "{{count}} файлів",
}),
en: plural({
one: "{{count}} file",
other: "{{count}} files",
}),
fr: plural({
one: "{{count}} fichier",
other: "{{count}} fichiers",
}),
ja: plural({
other: "{{count}} 個のファイル",
}),
}),
folders: t({
uk: plural({
one: "{{count}} папка",
few: "{{count}} папки",
many: "{{count}} папок",
}),
en: plural({
one: "{{count}} folder",
other: "{{count}} folders",
}),
fr: plural({
one: "{{count}} dossier",
other: "{{count}} dossiers",
}),
ja: plural({
other: "{{count}} 個のフォルダー",
}),
}),
},
} satisfies Dictionary;
export default fileSummaryContent;
2. Використання в компоненті
src/components/FileSummary.tsx
Копіювати код
Скопіюйте код у буфер обміну
src/components/FileSummary.vue
Копіювати код
Скопіюйте код у буфер обміну
src/components/FileSummary.svelte
Копіювати код
Скопіюйте код у буфер обміну
Чому цей підхід рекомендований
- Структура речення та порядок слів: Різні мови розташовують прикметники, кількісні показники та іменники в різному порядку (наприклад, у японській чи німецькій порядок файлів і папок може змінюватися). Шаблон
insert()надає перекладачам повний контроль над порядком слів без порушення правил множини. - Запобігає комбінаторному вибуху: Якщо мова A має 2 форми множини (англійська:
one,other), а мова B має 4 форми (українська або російська:one,few,many,other), вкладення одногоplural()в інший вимагає $4 \times 4 = 16$ гілок. З окремими ключами оголошується лише $4 + 4 = 8$ гілок. - Повторне використання: Ви можете перевикористовувати визначення множини
filesабоfoldersв інших частинах інтерфейсу користувача.