localize.dev

Documentación / Flutter

Localización de Flutter con archivos ARB, automatizado

Localiza una app de Flutter: Text() y cadenas estilo hintText se convierten en búsquedas de AppLocalizations con archivos ARB, plurales ICU y metadatos de marcadores de posición, y gen-l10n está configurado.

Cómo funciona

Text('…') y argumentos como hintText:, labelText: y tooltip: se convierten en AppLocalizations.of(context)!.key, con argumentos de método para marcadores de posición.

const se elimina solo de los widgets que ahora contienen una búsqueda; los strings sin un BuildContext en alcance se reportan, no se cambian.

Antes y después

La salida real del motor para este archivo. En una ejecución real, el modelo alojado nombra las claves a partir del contexto.

lib/screens/cart_screen.dart · antes
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 · después
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}!"
}

Lo que añade la configuración

La primera ejecución configura flutter_localizations y gen-l10n si el proyecto aún no lo tiene:

  • flutter_localizations, intl y generate: true en pubspec.yaml
  • l10n.yaml y lib/l10n/app_<locale>.arb
  • Delegados de MaterialApp y locales soportados, y la lista de idiomas en iOS

Ejecutarlo

La CLI necesita Node.js 22 o posterior, nada más: npx lo ejecuta sin añadir un package.json al proyecto. ¿No tienes Node en tu máquina? La GitHub Action de abajo la ejecuta por ti.

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

O añade la GitHub Action y obtén una pull request en cada push. Pruébalo primero en tu propio código en el playground.