{translation1} {translation2} {translation3}
; } ``` ### Фрагментированные предложения Вы можете использовать `derive` для работы с фрагментированными предложениями при вызове функций. ```jsx copy 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}
; } ``` ### Согласование Без `derive` реализовать перевод с согласованием синтаксически громоздко. Нужно добавить оператор select, чтобы учесть согласование (число, род и т. д.). Затем нужно также перечислить все возможные варианты. ```jsx copy import { gt } from 'gt-react'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function Component({ gender }) { const translation = gt( '{gender, select, boy {The boy is playing.} girl {The girl is playing.} other {}}', { gender: getSubject(gender) , }, ); return{translation}
; } ``` С деривацией грамматическое согласование больше не вызывает трудностей. Не нужен ни оператор select, ни явное перечисление всех вариантов. ```jsx copy import { derive, declareVar, 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}
; } ``` При использовании `derive` CLI-инструмент определяет, что у `getSubject` есть два возможных варианта результата, и создает отдельную запись перевода для каждого из них. Благодаря этому согласование выполняется автоматически. * "Мальчик играет" -> "*El* niño está jugando" * "Девочка играет" -> "*La* niña está jugando" ### С переменными Вы можете использовать `derive` вместе с `declareVar` для работы с динамическим содержимым. ```jsx copy 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}
; } ``` ### Сложные функции Функции могут содержать несколько условных ветвей и операторов `return`. ```jsx copy 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}
; } ``` ### Встроенные выражения и логика Вы можете встраивать логику прямо в вызов `derive`. ```jsx copy import { derive, gt } from 'gt-react'; function Component({ gender }) { const message = gt(`The ${derive(gender === 'male' ? 'boy' : 'girl')} is playing.`); return{message}
; } ``` *** ## Примечания * Используйте `derive` с осторожностью, так как это может экспоненциально увеличить число записей перевода * Все возможные результаты должны поддаваться статическому анализу на этапе сборки * Переменные внутри статических функций должны быть обёрнуты в `declareVar` ## Следующие шаги * См. [`declareVar`](/docs/react/api/strings/declare-var), чтобы помечать динамическое содержимое в статических функциях * См. [`decodeVars`](/docs/react/api/strings/decode-vars), чтобы извлекать исходные значения из объявленных переменных * См. [`