# python: Использование derive URL: https://generaltranslation.com/ru/docs/python/tutorials/derive.mdx --- title: Использование derive description: Как использовать derive для грамматического согласования, переиспользуемого контента и статического анализа --- ## Что такое `derive`? [`derive`](/docs/python/api/derive) — это тождественная функция, которая помечает содержимое для статического анализа в CLI GT. Когда CLI сканирует ваш код, он распознаёт вызовы `derive(...)` и определяет все возможные возвращаемые значения, создавая отдельную запись перевода для каждого из них. Это полезно для: * Сохранения **грамматического согласования** в разных языках (род, число, падеж) * **Переиспользуемого контента** с вызовами функций внутри переводимых строк * **Фрагментированных предложений**, в которых часть строки имеет заранее известный набор возможных вариантов *** ## Сохранение грамматического согласования В языках действуют грамматические правила (род, число, падеж), которые влияют на связанные слова. Без `derive` одна запись перевода не может учитывать согласование: ```python # Без derive — один вариант перевода, согласование невозможно message = t(f"The {get_subject(gender)} is playing.") # "The boy is playing." и "The girl is playing." имеют один общий перевод ``` При использовании `derive` CLI создает отдельные записи для каждого результата: ```python from gt_flask import derive, t def get_subject(gender: str) -> str: return "boy" if gender == "male" else "girl" message = t(f"The {derive(get_subject(gender))} is playing.") ``` В результате создаются две записи перевода: * `"The boy is playing."` → `"El niño está jugando."` * `"The girl is playing."` → `"La niña está jugando."` Обратите внимание: в испанском используется "El" или "La" в зависимости от подлежащего — согласование определяется автоматически. *** ## Как это работает 1. **На этапе сборки** CLI GT анализирует выражения, обёрнутые в `derive` 2. Он определяет все возможные возвращаемые значения (они должны поддаваться статическому анализу) 3. Он создаёт отдельные записи перевода для каждого уникального результата 4. **Во время выполнения** `derive` — это просто тождественная функция: она возвращает аргумент без изменений *** ## Примеры ### Встроенные выражения Вы можете добавлять логику прямо в `derive`: ```python from gt_flask import derive, t message = t(f"The {derive('boy' if gender == 'male' else 'girl')} is playing.") ``` ### Вызовы функций Оборачивайте вызовы функций с заранее известным набором возвращаемых значений: ```python from gt_flask import derive, t def get_status_label(status: str) -> str: if status == "complete": return "completed" elif status == "pending": return "pending" return "unknown" message = t(f"Task is {derive(get_status_label(status))}.") ``` ### Переиспользуемый контент ```python from gt_flask import derive, t def get_subject() -> str: return "boy" translation1 = t(f"The {derive(get_subject())} is playing.") translation2 = t(f"The {derive(get_subject())} is having fun.") ``` ### С `declare_var` Используйте `derive` вместе с [`declare_var`](/docs/python/api/declare-var), когда внутри статического выражения нужен динамический контент: ```python from gt_flask import derive, declare_var, t def get_greeting(name: str | None) -> str: if name: return f"Hello, {declare_var(name, name='user')}" return "Hello, stranger" message = t(f"{derive(get_greeting(name))}! How are you?") ``` *** ## Особенности производительности `derive` увеличивает количество записей перевода. Каждый вызов с N возможными результатами создает N записей, а несколько вызовов `derive` в одной строке дают экспоненциальный рост. Используйте с осторожностью.