Perché il plurale cambia da una lingua all'altra
Le categorie zero, one, two, few, many e other seguono le regole CLDR di ogni lingua. In inglese e in italiano one indica solo 1; in francese copre 0 e 1; russo e polacco aggiungono few e many; l'arabo le usa tutte e sei; il giapponese ne ha una sola, other. Un messaggio a due rami scritto per l'inglese è quindi incompleto non appena lo traduci.
Lo strumento legge queste regole nel browser (Intl.PluralRules): le categorie e i numeri di esempio mostrati sono quelli della lingua, senza tabelle da mantenere.
La trappola di =1 con gen-l10n
Un ramo =1 diventa la categoria one nel codice generato da flutter gen-l10n. In francese quella categoria si applica anche allo zero: con count = 0 comparirebbe "1 article restant". Preferisci la categoria one con il numero nel testo, oppure aggiungi un ramo =0: lo strumento lo propone come casella di controllo. Dettagli nella guida su plurali e placeholder ICU.
Come usare il risultato
- Copia la riga
"key": "{count, plural, …}" di ogni lingua nel file app_xx.arb corrispondente.
- Aggiungi i metadati
@key una sola volta, nel file template.
- Esegui
flutter gen-l10n: un ramo other mancante o una parentesi graffa non chiusa interrompe la generazione indicando il nome del file.
Per verificare poi che nessuna traduzione abbia perso o rinominato il suo placeholder, usa la verifica delle chiavi mancanti ARB.
Limiti dello strumento
Lo strumento genera la struttura, non la traduzione: il testo di ogni forma lo scrivi tu. Non gestisce messaggi select né plurali annidati, e non raddoppia gli apostrofi se hai attivato use-escaping in l10n.yaml.