{translation1} {translation2} {translation3}
; } ``` ### Frasi frammentate Puoi usare `derive` per gestire le frasi frammentate nelle chiamate di funzione. ```jsx copy import { derive, gt } from 'gt-react-native'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function Component({ gender }) { const translation = gt(`The ${derive(getSubject(gender))} is playing.`); return{translation}
; } ``` ### Concordanza Senza `derive`, tradurre la concordanza è sintatticamente complesso. Devi aggiungere un'istruzione `select` per gestire la concordanza (numero, genere, ecc.). Poi devi anche elencare tutti i possibili risultati. ```jsx copy import { gt } from 'gt-react-native'; 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 concordanza diventa semplice. Non serve alcuna istruzione `select`, né devi specificare ogni possibile esito. ```jsx copy import { derive, declareVar, gt } from 'gt-react-native'; function getSubject(gender) { return gender === 'male' ? 'boy' : 'girl'; } function Component({ gender }) { const translation = gt(`The ${derive(getSubject(gender))} is playing.`); return{translation}
; } ``` Usando `derive`, lo strumento CLI rileva che `getSubject` ha due possibili esiti e crea una voce di traduzione per ciascuno. In questo modo, la concordanza viene gestita automaticamente. * "Il ragazzo sta giocando" -> "*El* niño está jugando" * "La ragazza sta giocando" -> "*La* niña está jugando" ### Con variabili Puoi combinare `derive` con `declareVar` per gestire contenuti dinamici. ```jsx copy import { derive, declareVar, gt } from 'gt-react-native'; function getGreeting(name) { return name ? `Hello, ${declareVar(name)}` : 'Hello, stranger'; } function Component({ name }) { const translation = gt(`${derive(getGreeting(name))}! How are you?`); return{translation}
; } ``` ### Funzioni complesse Le funzioni possono contenere più rami condizionali e istruzioni `return`. ```jsx copy import { derive, gt } from 'gt-react-native'; 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}
; } ``` ### Espressioni e logica inline Puoi incorporare la logica direttamente nella chiamata `derive`. ```jsx copy import { derive, gt } from 'gt-react-native'; function Component({ gender }) { const message = gt(`The ${derive(gender === 'male' ? 'boy' : 'girl')} is playing.`); return{message}
; } ``` *** ## Note * Usa `derive` con giudizio, perché può aumentare esponenzialmente il numero di voci di traduzione * Tutti i possibili risultati devono essere analizzabili staticamente in fase di build * Le variabili all'interno di funzioni statiche devono essere racchiuse in `declareVar` ## Passaggi successivi * Vedi [`declareVar`](/docs/react-native/api/strings/declare-var) per contrassegnare il contenuto dinamico all'interno di funzioni statiche * Vedi [`decodeVars`](/docs/react-native/api/strings/decode-vars) per estrarre i valori originali dalle variabili dichiarate * Vedi [`