
Beaucoup a déjà été écrit sur la localisation (internationalisation) des applications Flutter.
La documentation officielle s'attarde sur cette question en détail, en plus de cela, un certain nombre de passionnés décrivent une variété d' approches .
Cet article ne prétend pas être exhaustif, mais est une description d'une pratique qui, à mon avis, réduit très efficacement la saisie manuelle.
Nous parlons de localisation à l'aide de flutter_i18n , un plugin Android Studio qui peut être utilisé pour se débarrasser du travail de routine et du code passe-partout.
La préparation
Installez d'abord le plugin flutter-i18n

Après le redémarrage, les fichiers / i18n.dart et res / values / strings_en.arb générés seront automatiquement ajoutés à la structure du projet

(J'ai ajouté manuellement le fichier strings_ru.arb pour la langue russe)
Veuillez noter que Android Studio 3.3.1 - 3.4 contient une sorte de montant, à cause de laquelle les fichiers de localisation ne sont pas générés. J'ai décrit ce problème sur stackoverflow et obtenu une solution . Une autre solution est de rester temporairement sur AS 3.2, mais c'est un amateur.
Vous devrez également installer le package flutter_localizations pour localiser les widgets Flutter internes (cela sera fait pour vous au niveau du système).
dev_dependencies: flutter_localizations: sdk: flutter
Après cela, il vous suffira d'ajouter des paramètres de localisation au constructeur:
return MaterialApp( localizationsDelegates: [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, DefaultCupertinoLocalizations.delegate, ], supportedLocales: S.delegate.supportedLocales,
et n'oubliez pas d'importer le package
import 'package:f_latte/generated/i18n.dart';
Localisation
Commencez simplement à ajouter les lignes nécessaires, en observant la notation JSON, comme ceci:
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", }
Soit dit en passant, le plugin implémente la logique de travailler avec des pluriels ( pluriels ), pour cela, vous devez nommer les clés dans les fichiers arb d'une certaine manière. Comment cela fonctionne deviendra clair pour vous à partir de l'exemple de code.
Pour ajouter des langues, ajoutez simplement les fichiers nécessaires au même package et ajoutez-y des chaînes localisées avec les mêmes clés, comme ceci:
strings_ru.arb:
{ "title": "F-", "greeting": ", ${name}!", "pushingZero": " ", "pushingOne": " ", "pushingTwo": " ", "pushingOther": " $cnt ()" }
Avec toute modification de ces fichiers, le plugin reconstruira le fichier i18n.dart . Soit dit en passant, je recommande au moins de le voir, beaucoup deviendra plus clair.
C’est tout. Dans tous les endroits où l'accès aux chaînes localisées est requis, il suffit d'appeler la méthode du localisateur statique:
Voilà à quoi ça ressemble

Le code avec un exemple est ici (branche iter_0001_localiz
).
Source d'illustration.
PS
Selon awaik
la localisation ne fonctionnera pas sous iOS. Pour le faire fonctionner, vous devez ajouter des langues à la section info de Xcode. Sinon, il ne détermine rien et ne produit pas d'erreurs.
ici