# General Translation React SDKs (gt-react, gt-next, gt-react-native): derive
URL: https://generaltranslation.com/ru/docs/react/reference/functions/derive.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Помечайте фиксированные варианты контента внутри строкового перевода для извлечения. Справочник по API derive.

Функция `derive` позволяет использовать статические вызовы функций и выражения переменных внутри строкового перевода. Это строковый эквивалент компонента [`<Derive>`](/docs/react/reference/components/derive), полезный для переиспользуемого кода, интернационализации предложений, разбитых на фрагменты, и сохранения согласования слов.

*Доступно в `gt-react`, `gt-next`, `gt-tanstack-start` и `gt-react-native`.*

## Обзор [#overview]

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

```tsx
const getDisplayName = (condition) => (condition ? 'User' : 'Admin');

gt(`${derive(getDisplayName(condition))} says hello.`);
// Создаёт две записи:
// "User says hello."  -> "Usuario dice hola."
// "Admin says hello." -> "Administrador dice hola."
```

*Примечание: `derive` создает отдельную запись перевода для каждого возможного варианта результата, что может значительно увеличить количество переводов. Используйте его с осторожностью; если число вариантов становится слишком большим, лучше отдавать предпочтение выражениям ICU select.*

## Как это работает [#how-it-works]

* **Анализ на этапе сборки.** CLI анализирует обернутое выражение, определяет все возможные статические значения, которые оно может вернуть, и создает отдельную запись перевода для каждого. Это сохраняет согласование слов, спряжение и порядок слов в разных языках.
* **Без изменений во время выполнения.** `derive` возвращает свой аргумент без изменений во время выполнения; деривация влияет только на извлечение. Запустите [`gt validate`](/docs/cli/reference/commands/validate) после добавления или изменения вызовов `derive`, чтобы убедиться, что CLI может корректно обработать каждое выражение.
* **Требование статичности.** Деривация возможна только для контента, известного на этапе сборки. Оберните любой динамический контент с помощью [`declareVar`](/docs/react/reference/functions/declare-var).
* **Производительность.** Как и [`<Derive>`](/docs/react/reference/components/derive), несколько вызовов `derive` в одной строке увеличивают общее количество записей.

## Параметры [#parameters]

| Параметр              | Описание                                                    | Тип                                                | Необязательный | По умолчанию |
| --------------------- | ----------------------------------------------------------- | -------------------------------------------------- | -------------- | ------------ |
| [`content`](#content) | Статическое выражение, возвращающее переводимое содержимое. | `string \| boolean \| number \| null \| undefined` | Нет            | —            |

### `content` [#content]

**Тип** `string | boolean | number | null | undefined` · **Обязательно**

Статический вызов функции или выражение, все возможные результаты которого можно определить на этапе сборки.

## Возвращает [#returns]

**Тип** [`T`](/docs/react/reference/components/t)

Возвращает `content` без изменений, сохраняя тип [`T`](/docs/react/reference/components/t).

## Примеры [#examples]

*В примерах импорт выполняется из `gt-react`; вместо этого импортируйте из пакета вашего фреймворка.*

```tsx title="FragmentedSentence.tsx"
import { derive, gt } from 'gt-react';

function getSubject(gender) {
  return gender === 'male' ? 'boy' : 'girl';
}

function Component({ gender }) {
  const translation = gt(`The ${derive(getSubject(gender))} is playing.`);
  return <p>{translation}</p>;
}
// "The boy is playing"  -> "El niño está jugando"
// "The girl is playing" -> "La niña está jugando"
```

```tsx title="WithVariables.tsx"
import { derive, declareVar, gt } from 'gt-react';

function getGreeting(name) {
  return name ? `Hello, ${declareVar(name)}` : 'Hello, stranger';
}

function Component({ name }) {
  const translation = gt(`${derive(getGreeting(name))}! How are you?`);
  return <p>{translation}</p>;
}
```

```tsx title="ComplexFunction.tsx"
import { derive, gt } from 'gt-react';

function getStatusMessage(status, priority) {
  if (status === 'complete') {
    return priority === 'high' ? 'Urgent task completed' : 'Task completed';
  } else if (status === 'pending') {
    return priority === 'high' ? 'Urgent task pending' : 'Task pending';
  }
  return 'Task status unknown';
}

function Component({ status, priority }) {
  const message = gt(`${derive(getStatusMessage(status, priority))}.`);
  return <p>{message}</p>;
}
```

```tsx title="InlineExpression.tsx"
import { derive, gt } from 'gt-react';

function Component({ gender }) {
  const message = gt(`The ${derive(gender === 'male' ? 'boy' : 'girl')} is playing.`);
  return <p>{message}</p>;
}
```

## Заметки [#notes]

* Используйте `derive` с осторожностью — это может экспоненциально увеличить количество записей перевода.
* Все возможные результаты должны поддаваться статическому анализу на этапе сборки.
* Оборачивайте динамические значения внутри функций с `derive` в [`declareVar`](/docs/react/reference/functions/declare-var).
* Для формы JSX см. компонент [`<Derive>`](/docs/react/reference/components/derive).

## Sitemap

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