# gt-next: General Translation Next.js SDK: Derive URL: https://generaltranslation.com/ru/docs/next/api/components/derive.mdx --- title: Derive description: Справочник по API компонента Derive --- {/* СГЕНЕРИРОВАНО АВТОМАТИЧЕСКИ: не редактируйте напрямую. Вместо этого измените шаблон в content/docs-templates/. */} ## Обзор Компонент `` используется для работы с фрагментацией предложений и повторно используемым содержимым без ущерба для грамматического согласования, спряжения и порядка слов. В следующем примере создаются два отдельных перевода: "Красивый мальчик играет с мячом" и "Красивая девочка играет с мячом". ```jsx function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } The beautiful {getSubject(gender)} plays with the ball. ; ``` Компонент `` указывает CLI-инструменту разыменовать вызов функции и собрать в каталог весь возможный контент, который возвращает эта функция, рассматривая каждый оператор `return` так, как если бы он был обёрнут в компонент ``. **Продвинутое использование:** Компонент `` — это продвинутая возможность, и использовать его следует с осторожностью, так как он может создавать неожиданно большое количество записей перевода. Кроме того, `` накладывает строгое требование: все возможные варианты контента должны поддаваться статическому анализу. Дополнительные сведения см. в примечаниях к выпуску [gt-next@6.8.0](/devlog/gt-next_v6_8_0). *** ## Справка ### Пропсы ### Описание | Prop | Описание | | ---------- | ------------------------------------------------------------------------------------------ | | `children` | Статическое содержимое. CLI-инструмент проанализирует все возможные возвращаемые значения. | ### Возвращает `React.JSX.Element` с содержимым, отрендеренным при вызове функции; для каждого возможного результата создаётся отдельная запись перевода. *** ## Поведение ### Анализ на этапе сборки В процессе сборки CLI-инструмент анализирует дочерние элементы компонентов `` и создает отдельные записи перевода для каждого возможного варианта. Это обеспечивает корректное грамматическое согласование и правильный порядок слов в разных языках. ### Требования Дочерние элементы компонентов `` должны быть определимы на этапе сборки. Поддерживаемый синтаксис включает: * строковые, числовые и логические литералы * JSX-выражения с вложенными компонентами `` и `` * тернарные операторы * вызовы функций (если их результаты можно статически проанализировать) *** ## Примеры ### Базовое использование Используйте ``, чтобы обрабатывать динамическое содержимое, которое влияет на структуру предложения. ```jsx title="BasicExample.jsx" copy import { T, Derive } from 'gt-next'; export default function Example({ gender }) { return ( The {gender === 'male' ? 'boy' : 'girl'} is beautiful. ); } ``` Это создаёт две записи перевода: * "Мальчик красив" * "Девочка красива" ### С вызовами функций Используйте `` для обработки динамического содержимого, которое влияет на структуру предложения при вызове функции. ```jsx title="BasicExample.jsx" copy import { T, Derive } from 'gt-next'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } export default function Example({ gender }) { return ( The {getSubject(gender)} is beautiful. ); } ``` ### С переменными Используйте `` вместе с `` для динамического содержимого в статических результатах функций. ```jsx title="WithVariables.jsx" copy import { T, Derive, Var } from 'gt-next'; function getTitle(title) { return title === 'Mr.' ? 'Mr.' : 'Ms.'; } function getGreeting(title) { return ( <> Hello, {getTitle(title)}. How are you, {name}? ); } export default function Greeting({ title, name }) { return ( {getGreeting(title)} ); } ``` ### Несколько компонентов `` Будьте осторожны при использовании нескольких компонентов ``, поскольку они увеличивают число единиц перевода. ```jsx title="MultipleDerive.jsx" copy import { T, Derive } from 'gt-next'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function getObject(toy) { return toy === 'ball' ? 'ball' : 'crayon'; } export default function PlayExample({ gender, toy }) { return ( {getSubject(gender)} plays with the{' '} {getObject(toy)}. ); } ``` Это создает четыре записи перевода (2 × 2 комбинации): * "мальчик играет с мячом" * "мальчик играет с мелком" * "девочка играет с мячом" * "девочка играет с мелком" ### Поддерживаемые варианты синтаксиса функций ```jsx title="SupportedSyntax.jsx" copy function getExamples(key) { switch (key) { case 'literals': if (condition1) { return 'The boy'; } else if (condition2) { return 22; } else { return true; } case 'jsx': return ( <> Hello, {getTitle(title)}. How are you,{' '} {name}? ); case 'ternary': return condition ? 'The boy' : 'The girl'; case 'function_calls': return otherStaticFunction(); } } ``` *** ## Ограничения ### Влияние на производительность Использование `` может приводить к экспоненциальному росту числа записей перевода. Каждый дополнительный компонент `` увеличивает общее количество вариантов перевода в разы. ### Переменный контент Любой динамический или переменный контент в значениях, возвращаемых статическими функциями, должен быть обёрнут в компоненты ``. ```jsx // Правильно function getContent() { return ( <> Hello, {userName}! ); } // Неправильно — вызовет ошибки сборки function getContent() { return <>Hello, {userName}!; } ``` *** ## Примечания * Компонент `` предназначен для работы с фрагментацией предложений, сохраняя грамматическую точность в разных языках. * Всегда учитывайте влияние на производительность при использовании нескольких компонентов `` в одном переводе. * Рассматривайте каждый оператор return в статических функциях так, как будто он обёрнут в компонент ``. * Используйте `` осмотрительно — по возможности выбирайте более простые структуры перевода. ## Следующие шаги * О работе с переменным контентом в переводах см. компонент [``](/docs/next/api/components/var). * Основной компонент для перевода описан в [``](/docs/next/api/components/t). * О строковом эквиваленте `` см. [`derive`](/docs/next/api/strings/derive).