# Vue: Обработка форм множественного числа и ветвлений
URL: https://generaltranslation.com/ru/docs/vue/guides/handling-plurals-and-branches.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Как переводить Vue-контент, зависящий от количества и условий, с помощью `<Plural>` и `<Branch>`.

Для разных локалей могут требоваться разные формы множественного числа и разные формулировки в зависимости от условия. Помещайте каждый конечный вариант в именованный слот, чтобы CLI мог извлечь каждую фразу целиком.

Используйте [`<Plural>`](/docs/vue/reference/components/plural), когда формулировка зависит от числа. Используйте [`<Branch>`](/docs/vue/reference/components/branch) для статусов, тарифов, логических и других именованных значений.

## Выберите формы множественного числа или ветви [#choose]

* Используйте [`<Plural>`](/docs/vue/reference/components/plural), когда выбор фразы зависит от count.
* Используйте [`<Branch>`](/docs/vue/reference/components/branch), когда выбор фразы зависит от другого значения.
* Поместите любой из этих компонентов внутрь [`<T>`](/docs/vue/reference/components/t), чтобы все именованные слоты относились к переведённой записи.
* Используйте слот по умолчанию как резервный вариант для нераспознанной категории или ветви.
* Оборачивайте значения времени выполнения в каждой фразе в [`<Num>`](/docs/vue/reference/components/num), [`<Var>`](/docs/vue/reference/components/var) или другой компонент форматирования.

## Склонение с помощью `<Plural>` [#plural]

Передайте количество через `:n` и укажите именованные слоты для категорий, используемых в исходной локали:

```vue
<script setup lang="ts">
import { Num, Plural, T } from 'gt-vue';

defineProps<{ count: number }>();
</script>

<template>
  <T>
    <Plural :n="count">
      <template #one>
        You have <Num :value="count" /> message.
      </template>
      <template #other>
        You have <Num :value="count" /> messages.
      </template>
      <template #default>
        You have new messages.
      </template>
    </Plural>
  </T>
</template>
```

[`<Plural>`](/docs/vue/reference/components/plural) объединяет числовые переопределения для абсолютных значений `0`, `1` и `2` с [правилами множественного числа Unicode CLDR](https://cldr.unicode.org/index/cldr-spec/plural-rules) активной локали. В английском обычно используются категории `one` и `other`; в переводах на целевые языки могут быть и дополнительные категории, например `zero`, `two`, `few` и `many`.

Не моделируйте формы множественного числа с помощью `count === 1` или добавления суффикса. Такие упрощения учитывают правила языка-источника, а не активной локали.

## Ветвление по значению с именем [#branch]

Передайте строку, число или логическое значение через `:branch`, затем используйте статически именованный слот для каждого ожидаемого значения:

```vue
<script setup lang="ts">
import { Branch, T } from 'gt-vue';

defineProps<{ plan: 'free' | 'pro' | 'enterprise' }>();
</script>

<template>
  <T>
    <Branch :branch="plan">
      <template #free>Upgrade to unlock more.</template>
      <template #pro>Thanks for going Pro!</template>
      <template #enterprise>Contact your account manager.</template>
      <template #default>Welcome.</template>
    </Branch>
  </T>
</template>
```

Каждый слот включается в окружающий элемент [`<T>`](/docs/vue/reference/components/t), но отображается только активная ветка. Если ни один именованный слот не подходит, [`<Branch>`](/docs/vue/reference/components/branch) отображает слот по умолчанию.

## Замените встроенные условные операторы [#conditionals]

Встроенный `v-if` изменяет структуру перевода во время выполнения. Вместо этого перенесите конечное число вариантов в [`<Branch>`](/docs/vue/reference/components/branch):

```vue
<!-- ❌ Структура определяется во время выполнения и скрыта от перевода -->
<T>
  <span v-if="isActive">Active</span>
  <span v-else>Inactive</span>
</T>

<!-- ✅ Каждая фраза видна при извлечении -->
<T>
  <Branch :branch="isActive ? 'active' : 'inactive'">
    <template #active>Active</template>
    <template #inactive>Inactive</template>
  </Branch>
</T>
```

Имена слотов должны быть статическими и безусловными. Если набор альтернатив невозможно определить на этапе сборки, оставьте это содержимое времени выполнения за пределами [`<T>`](/docs/vue/reference/components/t) или сохраните его как непрозрачный [`<Var>`](/docs/vue/reference/components/var).

## Next steps

- /docs/vue/guides/formatting-variables
- /docs/vue/guides/translating-content
- /docs/vue/guides/translating-strings
- /docs/vue/guides/managing-locales

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
