|Labs
Заказать демоПлатформа
React (Lingo Compiler)
Альфа
React (MCP)React (i18n)CLI прежней версии (v0)
Устаревшее

Lingo.dev Compiler

  • Как это работает
  • Настройка
  • Быстрый старт Compiler

Фреймворки

  • Интеграция с Next.js
  • Vite + React

Руководства

  • Переключение локали
  • Автоматическая обработка множественного числа
  • Ручные переопределения
  • Режимы сборки
  • Структура проекта
  • Провайдеры перевода
  • Пользовательские резолверы локали
  • Инструменты для разработки

Справочник

  • Лучшие практики
  • Справочник по конфигурации
  • Устранение неполадок
  • Руководство по миграции
  • Оптимизация
  • Форматы вывода

Автоматическая обработка множественного числа

Альфа

Compiler от Lingo.dev находится в альфа-версии. Он нестабилен, не рекомендуется для использования в production, а API могут меняться от релиза к релизу.

Compiler от Lingo.dev определяет формы множественного числа в JSX-тексте и автоматически преобразует их в ICU MessageFormat. Вместо того чтобы вручную задавать правила множественного числа для каждого языка, просто пишите естественный текст с числовыми значениями, а компилятор с помощью LLM сгенерирует корректные формы.

Как это работает#

1

Compiler определяет числовые паттерны

Во время анализа AST компилятор находит текстовые узлы, в которых интерполированные числа стоят рядом со словами, зависящими от количества. Например, You have {count} items содержит числовую переменную рядом со словом, форма которого меняется в зависимости от числа.

2

LLM классифицирует формы множественного числа

Небольшая и быстрая LLM (настраивается через pluralization.model) анализирует текст и определяет, каким словам нужна форма множественного числа. Затем она подбирает соответствующие категории множественного числа CLDR для каждой целевой локали.

3

Генерируется ICU MessageFormat

Компилятор создаёт строку ICU MessageFormat, которая учитывает все категории множественного числа, необходимые для целевого языка.

Пример#

Исходный JSX:

tsx
<p>You have {count} items in your cart</p>

Сгенерированный результат для английского:

text
{count, plural, one {You have 1 item in your cart} other {You have # items in your cart}}

Сгенерированный результат для русского (в котором четыре категории множественного числа):

text
{count, plural, one {У вас # товар в корзине} few {У вас # товара в корзине} many {У вас # товаров в корзине} other {У вас # товаров в корзине}}

Категории множественного числа CLDR#

В разных языках используются разные подмножества шести категорий множественного числа CLDR. Компилятор генерирует только те категории, которые нужны для каждой целевой локали:

КатегорияОписаниеПримеры языков
zeroНулевое количествоАрабский, латышский
oneЕдинственное числоАнглийский, французский, немецкий, испанский
twoДвойственное числоАрабский, иврит, словенский
fewНесколько / малое количествоРусский, чешский, польский
manyБольшое количествоРусский, арабский, польский
otherОбщая / по умолчанию (всегда обязательна)Все языки

В английском используются one и other. В русском — one, few, many и other. В арабском используются все шесть категорий. Компилятор автоматически учитывает это для каждой локали.

Конфигурация#

Обработка множественного числа включена по умолчанию. Настроить её можно в параметрах компилятора:

ts
{
  pluralization: {
    enabled: true,
    model: "groq:llama-3.1-8b-instant",
  },
}
ПараметрТипПо умолчаниюОписание
pluralization.enabledbooleantrueВключает или отключает автоматическое определение форм множественного числа.
pluralization.modelstring"groq:llama-3.1-8b-instant"Модель LLM для определения форм множественного числа. Достаточно небольшой модели, поскольку эта задача проще, чем перевод.

Чтобы полностью отключить обработку множественного числа:

ts
{
  pluralization: {
    enabled: false,
  },
}

Если отключить обработку множественного числа, компилятор будет переводить текст с числами как обычные строки. В языках со сложными правилами множественного числа итоговый перевод может быть грамматически некорректным для некоторых количественных форм.

Когда применяется обработка множественного числа#

Компилятор определяет паттерны множественного числа в следующих случаях:

  • Текст с интерполированными числовыми переменными: {count} items, {n} messages
  • Текст с числовыми литералами: You have 5 items (реже встречается в динамическом UI)

Компилятор не применяет обработку множественного числа к:

  • Тексту без числовой привязки: Items in cart (нет числа, по которому можно выбрать форму)
  • Тексту, где число не связано напрямую со словом, зависящим от количества

Пишите естественный текст в JSX. Compiler и его LLM сами определят формы множественного числа и сгенерируют ICU-форматирование — вам не нужно изучать синтаксис ICU MessageFormat.

Что дальше#

Справочник по конфигурации
Все параметры обработки множественного числа
Провайдеры перевода
Настройте LLM, используемую для перевода
Ручные переопределения
Переопределяйте отдельные переводы при необходимости
Лучшие практики
Когда стоит включать или отключать обработку множественного числа

Эта страница была полезной?

Max PrilutskiyMax Prilutskiy·Обновлено 4 месяца назад·3 минуты чтения