
Ya se ha escrito mucho sobre la localización (internacionalización) de las aplicaciones de Flutter.
La documentación oficial se centra en este tema con cierto detalle, además de esto, una serie de entusiastas describen una variedad de enfoques .
Este artículo no pretende ser exhaustivo, pero es una descripción de una práctica que, en mi opinión, reduce de manera muy efectiva la entrada manual.
Estamos hablando de localización usando flutter_i18n , un complemento de Android Studio que se puede usar para deshacerse del trabajo de rutina y el código repetitivo.
Preparación
Instale primero el complemento flutter-i18n

Después de reiniciar, los archivos generados / i18n.dart y res / values / strings_en.arb se agregarán automáticamente a la estructura del proyecto

( Agregué manualmente el archivo strings_ru.arb para el idioma ruso)
Tenga en cuenta que Android Studio 3.3.1 - 3.4 contiene algún tipo de jamba, por lo que no se generan archivos de localización. Describí este problema en stackoverflow y obtuve una solución . Otra solución es permanecer temporalmente en AS 3.2, pero este es un aficionado.
También deberá instalar el paquete flutter_localizations para localizar los widgets internos de Flutter (esto se hará por usted en el nivel del sistema).
dev_dependencies: flutter_localizations: sdk: flutter
Después de eso, será suficiente para que usted agregue parámetros de localización al constructor:
return MaterialApp( localizationsDelegates: [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, DefaultCupertinoLocalizations.delegate, ], supportedLocales: S.delegate.supportedLocales,
y no olvides importar el paquete
import 'package:f_latte/generated/i18n.dart';
Localización
Simplemente comience a agregar las líneas necesarias, observando la notación JSON, así:
strings_en.arb:
{ "title": "F-Latte", "greeting": "Hi, $name!", "pushingZero": "You pressed NONE (", "pushingOne": "You pressed once", "pushingTwo": "You pressed twice", "pushingOther": "You pressed $cnt times", }
Por cierto, el complemento implementa la lógica de trabajar con plurales ( plurales ), para esto debe nombrar las claves en los archivos arb de cierta manera. El código de ejemplo te mostrará cómo funciona esto.
Para agregar idiomas, solo agregue los archivos necesarios al mismo paquete y agregue cadenas localizadas con las mismas teclas allí, de esta manera:
strings_ru.arb:
{ "title": "F-", "greeting": ", ${name}!", "pushingZero": " ", "pushingOne": " ", "pushingTwo": " ", "pushingOther": " $cnt ()" }
Con cualquier cambio en estos archivos, el complemento reconstruirá el archivo i18n.dart . Por cierto, recomiendo al menos verlo, mucho se aclarará.
Eso es todo En cualquier lugar donde se requiera acceso a cadenas localizadas, simplemente llame al método del localizador estático:
Así es como se ve

El código con un ejemplo está aquí (rama iter_0001_localiz
).
Fuente de la ilustración.
PS
De acuerdo con Waik
la localización no funcionará con iOS. Para que funcione, debe agregar idiomas a la sección de información en Xcode. De lo contrario, no determina nada y no produce errores.
aqui