localize.dev

Documenti / Flutter

Localizzazione Flutter con file ARB, automatizzata

Localizza un'app Flutter: le stringhe Text() e hintText diventano lookup AppLocalizations con file ARB, plurali ICU e metadati dei segnaposto, e gen-l10n è configurato.

Come funziona

Text('…') e argomenti come hintText:, labelText: e tooltip: diventano AppLocalizations.of(context)!.key, con argomenti di metodo per i segnaposto.

const viene rimosso solo dai widget che ora contengono un lookup; le stringhe senza un BuildContext nello scope vengono segnalate, non modificate.

Prima e dopo

L'output effettivo del motore per questo file. In un'esecuzione reale, il modello ospitato nomina le chiavi dal contesto.

lib/screens/cart_screen.dart · prima
import 'package:flutter/material.dart';

class CartScreen extends StatelessWidget {
  const CartScreen({super.key, required this.name});
  final String name;

  @override
  Widget build(BuildContext context) {
    return Column(children: [
      const Text('Your cart'),
      Text('Welcome back, $name!'),
    ]);
  }
}
lib/screens/cart_screen.dart · dopo
import 'package:flutter/material.dart';

class CartScreen extends StatelessWidget {
  const CartScreen({super.key, required this.name});
  final String name;

  @override
  Widget build(BuildContext context) {
    return Column(children: [
      Text(AppLocalizations.of(context)!.cartScreenYourCart),
      Text(AppLocalizations.of(context)!.cartScreenWelcomeBack(name)),
    ]);
  }
}
lib/l10n/app_en.arb
{
  "cartScreenYourCart": "Your cart",
  "cartScreenWelcomeBack": "Welcome back, {name}!"
}

Cosa aggiunge la configurazione

La prima esecuzione imposta flutter_localizations e gen-l10n se il progetto non lo ha ancora:

  • flutter_localizations, intl e generate: true in pubspec.yaml
  • l10n.yaml e lib/l10n/app_<locale>.arb
  • MaterialApp delega ai locali supportati e alla lista delle lingue iOS

Eseguilo

La CLI richiede Node.js 22 o versioni successive, nient'altro: npx lo esegue senza aggiungere un package.json al progetto. Non hai Node sulla tua macchina? La GitHub Action qui sotto lo esegue per te.

npx localize-dev login

# Preview, then write the changes
npx localize-dev run --dry-run -l es,fr,de
npx localize-dev run -l es,fr,de

# Or open a pull request instead
npx localize-dev pr -l es,fr,de

Oppure aggiungi la GitHub Action e ottieni una pull request a ogni push. Provalo prima sul tuo codice nel playground.