← Concetti

Concordanza di genere

Alcune lingue flettono verbi e aggettivi in base al genere della persona di cui parla la frase. L'inglese per lo più no, quindi una frase che scrivi come {username} has been invited è una sola frase in inglese e due o tre in spagnolo, francese o russo. Langsys se ne occupa durante la traduzione, come fa per le forme plurali, e tu passi un solo argomento.

Guarda · 0:39 Concordanza di genere

Cosa produce la pipeline

Quando una lingua di destinazione richiede la concordanza, Langsys riscrive la stringa di quella lingua nei rami necessari: un select ICU. La tua frase di origine non cambia mai e non devi scrivere i rami a mano.

Non lo scrivi mai tu: ci pensa la pipeline
// Your source phrase, unchanged:
"{username} has been invited"

// What the Spanish translation becomes — note invitado / invitada:
"{username_gender, select, male {{username} ha sido invitado} \
female {{username} ha sido invitada} \
other {{username} ha sido invitado/a}}"

Due conseguenze da tenere bene a mente. L'argomento prende il nome della variabile a cui si riferisce, con _gender aggiunto: {username} produce username_gender, e i rami sono sempre male, female, other. Inoltre compare solo nelle lingue che ne hanno bisogno: è un aspetto che passa inosservato finché qualcuno non carica l'app in una lingua con distinzione di genere.

Come passarlo

Passa l'argomento ogni volta che lo conosci, e chi legge otterrà la frase con la flessione corretta:

// The argument is named after the variable it inflects, + _gender.
// Branches are always male / female / other.
t('{username} has been invited', 'Team', {
  username: user.name,
  username_gender: user.gender ?? 'other',
});

Non conosci il genere? Passa 'other' in modo esplicito: è il ramo neutro. Cosa viene mostrato quando manca un argomento varia a seconda dell'SDK; lo indica ogni pagina dedicata. Ogni pagina SDK mostra inoltre la chiamata nel suo stile idiomatico.

Quali frasi ne hanno bisogno?

Dal tuo codice non puoi capirlo, ed è una caratteristica intrinseca: l'argomento viene aggiunto durante la traduzione, per ciascuna lingua di destinazione, quindi nulla nella frase di origine o nel tuo codice lo lascia intuire. Ecco tre modi per scoprirlo.

Leggi il catalogo. Le traduzioni che la tua app recupera sono le stringhe promosse, quindi la risposta è già sul client. Scarica il catalogo per una lingua che supporti (ogni SDK lo espone) e cerca le voci che contengono , select,. Così ottieni le frasi esatte e i nomi degli argomenti, e l'operazione è abbastanza leggera da poter essere eseguita in CI per ogni lingua che rilasci.

// The catalog your app fetches IS the promoted strings — grep it.
const wanting = Object.entries(catalog)
  .filter(([, translation]) => translation.includes(', select,'))
  .map(([phrase]) => phrase);
// → every phrase (and, from the string, every argument) this locale needs

Attiva il debug (SDK JavaScript). Passa debug: true nella configurazione di init e naviga nell'app in una lingua con generi grammaticali: l'SDK registra un Langsys Warning per ogni frase la cui traduzione richiede un argomento che non hai fornito, indicando il nome dell'argomento. Una sola volta per frase e per lingua, e in modo silenzioso in produzione. Un'insidia: all'interno dei componenti per blocchi di contenuto e per frasi, un _gender passato in via precauzionale viene segnalato a sua volta come parametro non corrispondente, perché il controllo viene eseguito sul testo sorgente, dove select non compare mai.

In caso di dubbio, passalo. Un valore per un argomento che la stringa non prevede viene ignorato al momento del rendering, quindi inviare _gender per ogni variabile che rappresenta una persona è sicuro e copre anche le lingue che non hai ancora controllato.

Una variabile per frase. Solo una variabile può determinare la concordanza. Una stringa in cui ce ne sono due, ad esempio un numero e un genere, viene lasciata invariata anziché trasformata in ICU annidato, quindi viene tradotta come un'unica frase piatta.

Cerca nella documentazione e nel Learning Center