Flattern: Anwendungslokalisierung mit Android Studio


Über die Lokalisierung (Internationalisierung) von Flutter-Anwendungen wurde bereits viel geschrieben.
In der offiziellen Dokumentation wird dieses Thema ausführlich behandelt. Darüber hinaus beschreiben eine Reihe von Enthusiasten verschiedene Ansätze .


Dieser Artikel erhebt keinen Anspruch auf Vollständigkeit, sondern beschreibt eine Praxis, die meiner Meinung nach die manuelle Eingabe sehr effektiv reduziert.


Wir sprechen über die Lokalisierung mit flutter_i18n , einem Android Studio-Plugin, mit dem Routinearbeiten und Code auf dem Boilerplate entfernt werden können.


Vorbereitung


Installieren Sie zuerst das Flutter-i18n- Plugin


Bild


Nach dem Neustart werden die generierten Dateien / i18n.dart und res / values ​​/ strings_en.arb automatisch zur Projektstruktur hinzugefügt


Bild


(Ich habe die Datei strings_ru.arb für die russische Sprache manuell hinzugefügt.)


Bitte beachten Sie, dass Android Studio 3.3.1 - 3.4 eine Art Pfosten enthält, aufgrund dessen keine Lokalisierungsdateien generiert werden. Ich habe dieses Problem beim Stackoverflow beschrieben und eine Lösung gefunden . Eine andere Lösung besteht darin, vorübergehend auf AS 3.2 zu bleiben, dies ist jedoch ein Amateur.


Sie müssen auch das Paket flutter_localizations installieren, um die internen Flutter-Widgets zu lokalisieren (dies wird auf Systemebene für Sie erledigt).


dev_dependencies: flutter_localizations: sdk: flutter 

Danach reicht es aus, dem Konstruktor Lokalisierungsparameter hinzuzufügen:


  return MaterialApp( localizationsDelegates: [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, DefaultCupertinoLocalizations.delegate, ], supportedLocales: S.delegate.supportedLocales, 

und vergessen Sie nicht, das Paket zu importieren


 import 'package:f_latte/generated/i18n.dart'; 

Lokalisierung


Fügen Sie einfach die erforderlichen Zeilen hinzu und beachten Sie dabei die JSON-Notation:


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", } 

Das Plugin implementiert übrigens die Logik der Arbeit mit Pluralformen ( Pluralformen ). Dazu sollten Sie Schlüssel in Arb-Dateien auf eine bestimmte Weise benennen. Wie dies funktioniert, wird Ihnen anhand des Beispielcodes klar.


Um Sprachen hinzuzufügen, fügen Sie einfach die erforderlichen Dateien zum selben Paket hinzu und fügen Sie dort lokalisierte Zeichenfolgen mit denselben Schlüsseln hinzu:


strings_ru.arb:


 { "title": "F-", "greeting": ", ${name}!", "pushingZero": "  ", "pushingOne": " ", "pushingTwo": " ", "pushingOther": " $cnt ()" } 

Bei Änderungen an diesen Dateien erstellt das Plugin die Datei i18n.dart neu . Übrigens empfehle ich es zumindest anzusehen, vieles wird klarer.


Das ist alles. Rufen Sie an jedem Ort, an dem Zugriff auf lokalisierte Zeichenfolgen erforderlich ist, einfach die statische Lokalisierungsmethode auf:


 ///  title: Text(S.of(context).title), ... ///   Text(S.of(context).greeting('User'), ), ... ///    Text( S.of(context).pushing(_counter), style: Theme.of(context).textTheme.display1, , 

So sieht es aus


Der Code mit einem Beispiel ist hier (Zweig iter_0001_localiz ).




Quelle der Illustration.




PS
Laut awaik

Die Lokalisierung funktioniert unter iOS nicht. Damit es funktioniert, müssen Sie dem Infobereich in Xcode Sprachen hinzufügen. Andernfalls bestimmt es nichts und erzeugt keine Fehler.

hier

Source: https://habr.com/ru/post/de451556/


All Articles