{translation1} {translation2} {translation3}
; } ``` ### Frases fragmentadas Puedes usar `derive` para manejar frases fragmentadas con llamadas a funciones. ```jsx copy import { derive, gt } from 'gt-next'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function Component({ gender }) { const translation = gt(`The ${derive(getSubject(gender))} is playing.`); return{translation}
; } ``` ### Concordancia Sin `derive`, traducir la concordancia resulta sintácticamente engorroso. Tienes que añadir una sentencia `select` para manejar la concordancia (pluralidad, género, etc.). Luego, también debes enumerar cada resultado posible. ```jsx copy import { gt } from 'gt-next'; 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}
; } ``` Con `derive`, la concordancia se vuelve trivial. No se requiere ninguna sentencia `select` ni tienes que especificar cada resultado. ```jsx copy import { derive, declareVar, gt } from 'gt-next'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function Component({ gender }) { const translation = gt(`The ${derive(getSubject(gender))} is playing.`); return{translation}
; } ``` Al usar `derive`, la herramienta CLI detecta que `getSubject` tiene dos resultados posibles y crea una entrada de traducción para cada uno. Así, la concordancia se resuelve automáticamente. * "The boy is playing" -> "*El* niño está jugando" * "The girl is playing" -> "*La* niña está jugando" ### Con variables Puedes combinar `derive` con `declareVar` para manejar contenido dinámico. ```jsx copy import { derive, declareVar, gt } from 'gt-next'; function getGreeting(name) { return name ? `Hello, ${declareVar(name)}` : 'Hello, stranger'; } function Component({ name }) { const translation = gt(`${derive(getGreeting(name))}! How are you?`); return{translation}
; } ``` ### Funciones complejas Las funciones pueden contener múltiples ramas condicionales y varias instrucciones `return`. ```jsx copy import { derive, gt } from 'gt-next'; 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}
; } ``` ### Expresiones y lógica en línea Puedes incrustar lógica directamente en la llamada a `derive`. ```jsx copy import { derive, gt } from 'gt-next'; function Component({ gender }) { const message = gt(`The ${derive(gender === 'male' ? 'boy' : 'girl')} is playing.`); return{message}
; } ``` *** ## Notas * Usa `derive` con prudencia, ya que puede aumentar exponencialmente las entradas de traducción * Todos los resultados posibles deben poder analizarse de forma estática en tiempo de compilación * Las variables dentro de las funciones estáticas deben envolverse con `declareVar` ## Próximos pasos * Consulta [`declareVar`](/docs/next/api/strings/declare-var) para marcar contenido dinámico dentro de funciones estáticas * Consulta [`decodeVars`](/docs/next/api/strings/decode-vars) para extraer los valores originales de las variables declaradas * Consulta [`