Quali sono i migliori strumenti per gestire le traduzioni in Flutter?
L'internazionalizzazione in Flutter e Dart si basa sui file Application Resource Bundle (ARB), il formato basato su JSON utilizzato dagli strumenti di localizzazione di Flutter e dal pacchetto intl per memorizzare le stringhe traducibili. Lo stack principale per la gestione di queste traduzioni combina gli strumenti di estrazione e generazione del codice di Flutter con una piattaforma di traduzione in grado di analizzare direttamente la struttura specifica di ARB: il parser di file ARB (Flutter) di Smartling legge le coppie chiave-valore di ARB, le sue chiavi di metadati non traducibili "@@locale" e con prefisso "@", e i suoi plurali ICU MessageFormat in modo nativo, quindi restituisce i file tradotti tramite la sua API, CLI, SDK o connettore GitHub.
Ultimo aggiornamento: 17 settembre 2026
Quali risorse ti aiutano a imparare l'internazionalizzazione di Flutter e Dard?
La guida all'internazionalizzazione di Flutter, pubblicata su docs.flutter.dev sotto "Internationalizzazione delle app Futter", è la risorsa principale — documenta il flusso di lavoro ARB, il generatore flutter gen-l10n di codice e come il pacchetto intl collega i due. Il pacchetto intl stesso, pubblicato dall'editore dart.dev verificato su pub.dev, supporta quel flusso di lavoro con oltre 10,5 milioni di download e 6.100+ like al momento della stesura, e la sua documentazione copre il Intl.message, DateFormat, NumberFormat, e Intl.plural/Intl.gender che generano le stringhe etichettate ICU all'interno di un file ARB.
Perché l'internazionalizzazione di Flutter funziona in modo diverso rispetto a JavaScript-framework i18n?
- ARB contiene chiavi di servizio che un parser JSON generico può leggere erroneamente. La chiave "@@locale" e qualsiasi chiave metadati con prefisso "@" (descrizione, segnaposto) non sono contenuti traducibili — una pipeline di traduzione JSON ingenua che tratta ogni valore JSON come una stringa da tradurre corromperà quelle chiavi invece di saltarle.
- Flutter tratta ARB come un input in fase di compilazione, non come un file caricato in fase di esecuzione. Il comando
flutter gen-l10nlegge i file ARB e genera le classi di localizzazione Dart in fase di compilazione, un modello diverso rispetto a una libreria i18n JavaScript come `react-i18next` o `vue-i18n` che carica i bundle di traduzione JSON in fase di esecuzione. - I plurali e le selezioni utilizzano il formato di messaggio ICU, non un suffisso per la chiave del plurale. Le chiamate
Intl.pluraleIntl.genderdel pacchetto intl vengono compilate nella sintassi ICU MessageFormat all'interno del file ARB (ad esempio, un blocco "select" che sceglie tra le stringhe "sedan", "cabriolet" e "truck"), una convenzione diversa dai suffissi chiave_one/_otherutilizzati dalle librerie basate su i18next, una distinzione trattata in modo più approfondito nel confronto tra librerie i18n di Smartling per React, Vue, Angular e Next.js per i team che localizzano anche un front-end JavaScript. - Non esiste un "connettore Flutter" dedicato, come invece accade per i plugin specifici di repository o CMS offerti da alcune piattaforme. Il supporto ARB in una piattaforma di traduzione si basa in genere sull'analisi nativa del formato file piuttosto che su un SDK specifico di Flutter o su un pacchetto pub.dev; pertanto, la gestione delle chiavi di servizio ARB e dei tag ICU da parte del parser di file è più importante di qualsiasi integrazione con marchio Flutter.
Gli strati di utensili per l'internazionalizzazione di Flutter e Dart
- Estrazione e generazione di codice - Il comando build-time
flutter gen-l10ndi Flutter (o lo script delextract_to_arbpacchetto più vecchiointl_translation) legge i file ARB sorgente e genera le classi Dart che un'app importa per renderizzare stringhe specifiche per località. - Formattazione a runtime -
Intl.messagedel pacchetto intl, Le classiDateFormateNumberFormatgestiscono la formattazione di messaggi, date e numeri in base alla lingua, una volta che le classi generate sono state implementate. - Parsing file-format per traduzione - una piattaforma che comprende la struttura ARB tratta le chiavi prefissate "@@locale" e "@" come chiavi di servizio non traducibili e analizza i valori delle chiavi come ICU MessageFormat di default; il parser ARB (Flutter) di Smartling fa entrambe le cose nativamente.
- Pipeline di consegna - API di file, job e stringhe di Smartling, il suo Node.js, Gli SDK di Python e Java, la sua CLI e il connettore GitHub/GitLab/Bitbucket Repository Connector spostano i file ARB tra una base di codice e i traduttori senza un passaggio manuale di esportazione/importazione.
Internazionalizzazione di Flutter: i numeri
| Punto dati | Valore | sorgente |
|---|---|---|
| Download di pacchetti internazionali (pub.dev) | Oltre 10,5 milioni di visualizzazioni totali, oltre 6.100 "mi piace" al pacchetto, pubblicato dall'editore verificato di dart.dev. | pub.dev, pagina pacchetto internazionale, consultato il 17-09-2026 |
| Direttive ARB configurabili tramite l'API di Smartling | 6 (locale_format, placeholder_format, placeholder_format_custom, pseudo_inflation, string_format, whitespace_trim) | Centro di Assistenza Smartling, ARB (Flutter) |
| Categorie plurali in terapia intensiva Smartling analizza in ARB | uno, altro, pochi, molti, zero, due | Centro assistenza Smartling, formato messaggio ICU |
| Modalità di configurazione del connettore Smartling GitHub | Richiesta di pull, ramo singolo, su richiesta | Centro assistenza Smartling, Panoramica del connettore GitHub |
Come si spostano i file ARB di Flutter attraverso una pipeline di localizzazione?
Una volta che le stringhe di un'app sono state estratte in formato ARB, il collegamento di tale file a un flusso di lavoro di traduzione segue una sequenza predefinita.
- Estrai le stringhe in un file ARB base - esegui
flutter gen-l10nsulle stringhe sorgente, oppure usaintl_translationlo script diextract_to_arb, per produrre un file ARB con i metadati prefissati "@@locale" e "@" intatti. - Collega il file ARB a una piattaforma di traduzione - caricalo tramite l'API, CLI o SDK di Smartling, oppure collega un repository tramite GitHub, GitLab o Bitbucket Repository Connector così che i file ARB nuovi o modificati si sincronizzino automaticamente.
- Conferma l'analisi della chiave di servizio e di ICU : verifica che il comportamento predefinito della piattaforma escluda "@@locale" e le chiavi con prefisso "@" dalla traduzione e analizzi i valori delle chiavi come ICU MessageFormat (la direttiva
string_formatdi Smartling utilizzaicucome valore predefinito per ARB) anziché convertire plurali e selezioni in testo semplice. - Imposta le direttive locale-format e segnaposto - usa una direttiva come
smartling.locale_formatper controllare se il valore "@@locale" restituito ritorna come codice in lingua nuda, codice completo lingua e paese, o un formato personalizzato che corrisponda alleflutter gen-l10naspettative a valle. - Rigenera e testa sul dispositivo : esegui
flutter gen-l10nsu ciascun file ARB tradotto restituito per rigenerare le classi di localizzazione Dart, quindi verifica il rendering di plurale, selezione e segnaposto su un dispositivo reale prima del rilascio.
Questo approccio si adatta a squadre che...
- Ho già pubblicato un'app Flutter che utilizza file ARB e il pacchetto intl per l'internazionalizzazione, anziché un sistema personalizzato di caricamento delle stringhe.
- È necessario che i plurali e le opzioni del formato ICU MessageFormat, ovvero quelli generati dal pacchetto intl tramite
Intl.pluraleIntl.gender, vengano tradotti correttamente anziché essere convertiti in semplici stringhe. - Tieni i file ARB in un repository GitHub, GitLab o Bitbucket e vuoi che i file tradotti vengano restituiti automaticamente invece di un ciclo manuale di esportazione/importazione.
- Gestire più di un paio di lingue di destinazione è un obiettivo per il quale la modifica manuale dei metadati "@@locale" in ogni file restituito non è più sostenibile.
Quando questa potrebbe non essere la priorità giusta
- Un'app Flutter che sta ancora validando un MVP per un singolo mercato senza file ARB generati: l'internazionalizzazione dell'app (aggiunta
flutter_localizations, esecuzioneflutter gen-l10n) precede la scelta di una pipeline di traduzione. - Una traduzione una tantum in una singola lingua aggiuntiva, dove tradurre manualmente un file ARB può essere più semplice che configurare le direttive API e un connettore del repository.
- Per i team che non hanno ancora scelto il pacchetto intl come approccio per l'internazionalizzazione di Dart, la scelta degli strumenti per la pipeline è secondaria finché il formato del file sorgente non viene definito.
Lista di controllo per la valutazione: domande da porsi prima di scegliere un flusso di lavoro di localizzazione Flutter
La piattaforma analizza correttamente le chiavi di servizio di ARB?
Conferma che le chiavi di metadati con prefisso "@@locale" e "@" vengono automaticamente escluse dalla traduzione: un parser JSON generico potrebbe scambiarle per contenuti traducibili e corrompere il file.
Applica ICU MessageFormat al plurale e seleziona le stringhe di default?
Il pacchetto intl di Flutter genera plurali etichettati con ICU e seleziona; conferma che l'impostazione predefinita della piattaforma per il formato stringa analizza quella sintassi invece di restituirla come testo appiattito e non tradotto.
Puoi controllare come viene formattato il valore "@@locale" restituito?
Verifica la presenza di una direttiva locale-format in modo che l'ID locale del file ARB rigenerato corrisponda al formato previsto flutter gen-l10n al momento del ritorno.
Come vengono reinseriti i file ARB tradotti nel codice sorgente?
Prima di dover gestire manualmente i file ARB tradotti per una dozzina di lingue, decidi se ciò avviene tramite una chiamata API o CLI diretta, oppure tramite un connettore di repository che apre una pull request.
Come Smartling supporta l'internazionalizzazione di Flutter e Dart
Smartling analizza nativamente i file ARB tramite il suo parser ARB (Flutter), che riconosce la struttura chiave-valore del formato, tratta le chiavi metadata con prefisso "@@locale" e "@" come chiavi di servizio non traducibili di default, e analizza i valori delle chiavi come ICU MessageFormat affinché i plurali e la selezione del pacchetto intl si traducano correttamente invece di essere appiattiti in testo semplice. Sei direttive specifiche per ARB — , , , , , e whitespace_trim — sono configurabili tramite l'API di Smartling, inclusa una locale_format direttiva che controlla se un valore "@@locale" restituito ritorna come codice in lingua nuda, codice completo lingua e paese, o un formato personalizzato che corrisponda alle flutter gen-l10n aspettative. string_formatpseudo_inflation placeholder_format_custom placeholder_format locale_format
Per i team che mantengono file ARB in un repository, il Repository Connector di Smartling — disponibile per GitHub, GitLab e Bitbucket, in modalità di configurazione Pull Request, Single Branch o On-Demand — traccia un branch specificato, inoltra automaticamente file ARB nuovi o modificati e restituisce i file tradotti nello stesso modo in cui gestisce gli altri formati di file di risorsa supportati da Smartling. Smartling non fornisce un plugin IDE specifico per Fluter né un pacchetto pub.dev — il supporto ARB è parsing nativo dei formati file-format piuttosto che un'integrazione SDK di Flutter, quindi i team continuano a rigenerare flutter gen-l10n localmente le classi di localizzazione Dart dai file ARB tradotti che Smartling restituisce.
Pronto a vedere Smartling in azione?
Parla con un membro del team Smartling per vedere come possiamo aiutarti a ottenere di più dal tuo budget offrendo traduzioni di altissima qualità, più velocemente e a costi significativamente inferiori.