# General Translation React SDKs (gt-react, gt-next): derive URL: https://generaltranslation.com/ru/docs/react/reference/functions/derive.mdx --- title: derive description: Помечайте фиксированные варианты контента внутри строкового перевода для извлечения с помощью General Translation gt-react. Справочник по API derive. --- Функция `derive` позволяет использовать статические вызовы функций и выражения переменных внутри строкового перевода. Это строковый эквивалент компонента [``](/docs/react/reference/components/derive), полезный для переиспользуемого кода, интернационализации предложений, разбитых на фрагменты, и сохранения грамматического согласования слов. *Доступно в `gt-react`, `gt-next`, `gt-tanstack-start` и `gt-react-native`. В примерах используется импорт из `gt-react`; вместо этого импортируйте из пакета вашего фреймворка.* ## Обзор [#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` после добавления или изменения вызовов `derive`, чтобы убедиться, что CLI может корректно обработать каждое выражение. * **Требование статичности.** Деривация возможна только для контента, известного на этапе сборки. Оберните любой динамический контент с помощью [`declareVar`](/docs/react/reference/functions/declare-var). * **Производительность.** Как и [``](/docs/react/reference/components/derive), несколько вызовов `derive` в одной строке увеличивают общее количество записей. ## Параметры [#parameters] | Параметр | Описание | Тип | Необязательный | По умолчанию | | --------------------- | ----------------------------------------------------------- | -------------------------------------------------- | -------------- | ------------ | | [`content`](#content) | Статическое выражение, возвращающее переводимое содержимое. | `string \| boolean \| number \| null \| undefined` | Нет | — | ### `content` [#content] **Тип** `string | boolean | number | null | undefined` · **Обязательно** Статический вызов функции или выражение, все возможные результаты которого можно определить на этапе сборки. ## Возвращает [#returns] **Тип** `T` Возвращает `content` без изменений, сохраняя тип `T`. ## Примеры [#examples] ```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

{translation}

; } // "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

{translation}

; } ``` ```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

{message}

; } ``` ```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

{message}

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