localize_and_translate

Flutter Localization In Human Way

Screenshots

screenshot screenshot

Methods

MethodJob
currentLanguageactive language code
localeactive Locale
init()initialize things, before runApp()
translate('word')word translation
setNewLanguage(context,'en',restart: true, remember: true,)change language
locals()locales list
isDirectionRTL()is Direction RTL check

How To Use

  1. add localize_and_translate: <latest> as dependency in pubspec.yaml
  2. run flutter pub get into app folder
  3. add .json translation files as assets
  • For example : 'assets/langs/ar.json' | 'assets/langs/en.json'
  • structure should look like
{
  "appTitle" : "Example",
  "buttonTitle": "العربية", 
  "textArea" : "Thisi is just a test text",
}
{
  "appTitle" : "تجربة",
  "buttonTitle": "English", 
  "textArea" : "هذا مجرد نموذج للتأكد من اداء الاداة",
}
  • define them as assets in pubspec.yaml
flutter:
  assets:
    - assets/langs/en.json
    - assets/langs/ar.json

  • run flutter pub get
  1. add imports to main.dart
import 'package:flutter/material.dart';
import 'package:localize_and_translate/localize_and_translate.dart';
  1. wrap app entry into LocalizedApp() ** make sure you define it's child into different place "NOT INSIDE" **
  2. convert your main() method to async, we will need next
  3. add WidgetsFlutterBinding.ensureInitialized(); at very first of main()
  4. inside main() define: Languages + Root dir, then call await translator.init();
  • so now your main() should look like this
Future<void> main() async {
  // if your flutter > 1.7.8 :  ensure flutter activated
  WidgetsFlutterBinding.ensureInitialized();

  LIST_OF_LANGS = ['ar', 'en']; // define languages
  LANGS_DIR = 'assets/langs/'; // define directory
  await translator.init(); // intialize

  runApp(
    LocalizedApp(
      child: MyApp(),
    ),
  );
}
  1. define your LocalizedApp() child as MaterialApp() like this
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Home(), // re Route
      localizationsDelegates: translator.delegates, // Android + iOS Delegates
      locale: translator.locale, // active locale
      supportedLocales: translator.locals(), // locals list
    );
  }
}
  1. Enjoy
  • we use translate("appTitle")
  • setNewLanguage("en") : and it's parameters
class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: Drawer(),
      appBar: AppBar(
        title: Text(translator.translate('appTitle')),
        // centerTitle: true,
      ),
      body: Container(
        width: double.infinity,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            SizedBox(height: 50),
            Text(
              translator.translate('textArea'), // Translation
              style: TextStyle(fontSize: 35),
            ),
            SizedBox(height: 150),
            OutlineButton(
              onPressed: () { // setNewLanguage 'ar'
                translator.setNewLanguage(
                  context,
                  newLanguage: 'ar',
                  remember: true,
                  restart: true,
                );
              },
              child: Text('العربية'),
            ),
            OutlineButton(
              onPressed: () { // setNewLanguage 'en'
                translator.setNewLanguage(
                  context,
                  newLanguage: 'en',
                  remember: true,
                  restart: true,
                );
              },
              child: Text('English'),
            ),
          ],
        ),
      ),
    );
  }
}

Complete Example

Known Issues

  • Not working with flutter version < 1.12.13

Author

Mohamed Sayed

  • Fork   Star   Watches
  • Plugin   Example

My Plugins

Libraries

localize_and_translate