# gt-next: General Translation Next.js SDK: Компоненты ветвления URL: https://generaltranslation.com/ru/docs/next/guides/branches.mdx --- title: Компоненты ветвления description: Как использовать компоненты ветвления для условного контента в переводах --- {/* СГЕНЕРИРОВАНО АВТОМАТИЧЕСКИ: Не редактируйте напрямую. Вместо этого изменяйте шаблон в content/docs-templates/. */} Компоненты ветвления позволяют условно отображать содержимое внутри компонентов [``](/docs/next/api/components/t). Они обрабатывают динамическую логику, например конструкции if/else и правила множественного числа, при этом обеспечивая корректный перевод всех вариантов содержимого. ## Доступные компоненты * [``](/docs/next/api/components/branch): Условный контент в зависимости от значений или состояний * [``](/docs/next/api/components/plural): Автоматическая плюрализация по правилам локали ## Краткое руководство Компоненты ветвления работают внутри [``](/docs/next/api/components/t) и позволяют обрабатывать условную логику: ```jsx import { T, Branch, Plural, Num, Var } from 'gt-next'; function NotificationPanel({ user, messageCount }) { return ( {user.name} is currently online

} away={

{user.name} is away

} >

{user.name} status unknown

You have {messageCount} message

} other={

You have {messageCount} messages

} />
); } ``` ## Как работают компоненты ветвления Компоненты ветвления решают задачу условного рендеринга в переводах следующим образом: 1. **Заменяют тернарные операторы** и условную логику внутри [``](/docs/next/api/components/t) 2. **Предоставляют запасной вариант контента**, если условия не соответствуют ожидаемым значениям 3. **Позволяют переводить** все возможные варианты контента 4. **Автоматически применяют правила локали** для образования множественного числа ```jsx // ❌ Это не работает — условная логика внутри

{isActive ? 'User is active' : 'User is inactive'}

// ✅ Это работает — условная логика с ветвлением User is active

} false={

User is inactive

} />
``` ## Руководство по компонентам ### Branch — Условный контент Используйте [``](/docs/next/api/components/branch) для условного рендеринга на основе значений или состояний: ```jsx // Отображение статуса пользователя Administrator Dashboard

} user={

User Dashboard

} guest={

Guest Access

} >

Access level unknown

// Булевы условия Welcome back!

} false={

Please log in

} />
// Уровни подписки Upgrade to unlock premium features

} premium={

Enjoy your premium experience

} enterprise={

Contact support for enterprise solutions

} >

Subscription status unavailable

``` ### Plural — Умная плюрализация Используйте [``](/docs/next/api/components/plural) для контента, который меняется в зависимости от количества: ```jsx // Базовая плюрализация {itemCount} item in cart

} other={

{itemCount} items in cart

} />
// Обработка нулевого значения No new notifications

} one={

{notifications} notification

} other={

{notifications} notifications

} />
// Сложная плюрализация (следует правилам Unicode CLDR) Due today

} one={

Due in {days} day

} few={

Due in {days} days

} many={

Due in {days} days

} other={

Due in {days} days

} />
``` ### Сочетание с переменными компонентами Компоненты ветвления и переменные компоненты легко сочетаются друг с другом: ```jsx Order {order.id} is pending. Total: {order.total}

} shipped={

Order {order.id} shipped on {order.shippedDate}

} delivered={

Order {order.id} was delivered successfully

} >

Order status unknown

``` ## Когда использовать компоненты ветвления ### Замените тернарные операторы Преобразуйте условную логику для использования внутри компонента [``](/docs/next/api/components/t): ```jsx // ❌ Нельзя использовать тернарный оператор в {isActive ?

Active user

:

Inactive user

}
// ✅ Используйте Branch вместо него Active user

} false={

Inactive user

} />
``` ### Обработка нескольких условий Замените конструкции switch или несколько условий if/else: ```jsx // ❌ Сложная условная логика {status === 'loading' ?

Loading...

: status === 'error' ?

Error occurred

: status === 'success' ?

Success!

:

Unknown status

}
// ✅ Чистая логика ветвления Loading...

} error={

Error occurred

} success={

Success!

} >

Unknown status

``` ### Правила плюрализации Замените ручную обработку форм множественного числа: ```jsx // ❌ Ручная плюрализация {count === 1 ?

1 item

:

{count} items

}
// ✅ Автоматическая плюрализация {count} item

} other={

{count} items

} />
``` ## Автономное использование Компоненты ветвления можно использовать вне [``](/docs/next/api/components/t), если нужна только логика, без перевода: ```jsx // Чистый условный рендеринг } light={} > // Чистая плюрализация } other={} /> ``` ## Распространённые проблемы ### Отсутствуют ключи ветвей Всегда указывайте запасной вариант контента для значений, для которых нет совпадения: ```jsx // ❌ Нет запасного варианта контента для неожиданных значений } user={} // Что если userRole равно "moderator"? /> // ✅ Всегда указывайте запасной вариант контента } user={} > {/* Запасной вариант контента для любого другого значения */} ``` ### Неполные формы множественного числа Укажите необходимые формы множественного числа для локали по умолчанию: ```jsx // ❌ Отсутствует форма "other" 1 item

} // А как насчёт 0, 2, 3 и т.д.? /> // ✅ Укажите необходимые формы No items

} one={

1 item

} other={

{count} items

} /> ``` ### Сложная вложенная логика Хотя это работает, мы рекомендуем делать логику ветвления простой и избегать глубокой вложенности: ```jsx // ❌ Сложная вложенная ветвящаяся логика {/* Сложно читать и поддерживать */} // ✅ Упростите логику или используйте несколько компонентов } active-offline={} inactive-online={} > ``` Подробнее о правилах плюрализации см. в [документации Unicode CLDR](https://cldr.unicode.org/index/cldr-spec/plural-rules). ## Следующие шаги * [Руководство по переводу строк](/docs/next/guides/strings) - Переводите обычный текст без JSX * [Руководство по динамическому контенту](/docs/key-concepts/dynamic-content) - Настройте перевод во время выполнения * Справочник API: * [Компонент ``](/docs/next/api/components/branch)