Comment changer dynamiquement de langue de l’application.

My helpful screenshot

Mise en place de la traduction

Suivre la procédure du post globalization simplifié.

Mise en place de LocaleListener

Initialisation de l’instance

Tout d’abord il faut initialiser le langage de départ de l’application et permettre à l’écouteur d’accéder à la méthode d’initialisation des messages que nous avons généré dans l’étape “mise en place de la traduction”.

Plusieurs possibilités s’offrent à nous, dans le main, dans la surcharge de initState de votre widget qui contient MaterialApp, …

Pour être sûr d’être au plus haut dans la hierarchie nous l’installerons lors du main comme dans le code suivant.

void main() {
  LocaleNotifier.init(
      locale: new Locale('fr', 'FR'), initializeMessages: initializeMessages);
  ...
}

Ajout d’un écouteur pour rafraichir l’application

Nous devons maintenant être alerté que l’application a changé de langue. C’est là que l’écouteur devient utile. Si ce n’est pas le cas vous devrez transformer votre Widget de départ (celui avec MaterialApp) en StateFullWidget.

Dans la méthode initState, nous allons ajouter le code suivant.

@override
void initState() {
  super.initState();
  LocaleNotifier.instance.addListener(() {
    setState(() {});
  });
}

Ajout d’un bouton pour changer de langue

Nous allons maintenant ajouter un bouton pour changer de langue. Nous allons par exemple ajouter un FloatingActionButton à notre page. L’exemple est assez basique, il passe de français à anglais et vice versa…

@override
Widget build(BuildContext context) {
  return new Scaffold(
...
    floatingActionButton: new FloatingActionButton(
      child: new Text(localeName),
      onPressed: _toggleLocale,
    )
  )
}

Il ne nous reste plus qu’a gérer le changement de langue.

 void _toggleLocale() {
  if (LocaleNotifier.instance.locale.languageCode == 'fr') {
    LocaleNotifier.instance.update(new Locale('en', 'US'));
  } else {
    LocaleNotifier.instance.update(new Locale('fr', 'FR'));
  }
}

Et voilà …

Sources

Plugins et exemples : intl_helpers