Можно ли комбинировать типы узлов? (напр. несколько множественных чисел в одном предложении)
Да, типы узлов в 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({
ru: insert("{{files}} в {{folders}}"),
en: insert("{{files}} in {{folders}}"),
fr: insert("{{files}} dans {{folders}}"),
ja: insert("{{folders}}の中に{{files}}"), // Специальный порядок слов для японского языка
}),
files: t({
ru: 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({
ru: 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можно переиспользовать в других частях пользовательского интерфейса.