polyglot_flutter_sdk 0.0.2
polyglot_flutter_sdk: ^0.0.2 copied to clipboard

flutter sdk for Polyglot, a localize app api

Polyglot (Dart Client) #

From Developers #

Open Source We make tools to let your products speak all languages.

Let your developers create strings directly from the code using our SDK's.

Translation Management System #

One source of truth for all the translators in your team.

Backed by Google Translate. Deploy Strings on the fly, quick and easy.

Polyglot

Features #

  • fetch localization strings from polyglot api
  • create strings directly from the code ** TODO

Getting started #

You should ensure that you add the router as a dependency in your flutter project.

dependencies:
 polyglot_flutter_sdk: ^0.0.1

Example Project #

There is a pretty sweet example project in the example folder. Check it out. Otherwise, keep reading to get up and running.

Setting up #

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

import 'package:provider/provider.dart';
import 'package:polyglot_flutter_sdk/polyglot_flutter_sdk.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  ///
    /// Initiate polyglot_sdk in your project
    ///
  PolyglotLanguage appLanguage = PolyglotLanguage.instance;
   await appLanguage.init(
      projectUrl:
          'https://d8wlqn7pvlrac.cloudfront.net/c81e728d9d4c2f636f067f89cc14862c/all.json',
      defaultLocale: 'en_US');
  runApp(MyApp(
    appLanguage: appLanguage,
  ));
}

class MyApp extends StatelessWidget {
  final PolyglotLanguage appLanguage;

  MyApp({required this.appLanguage});
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<PolyglotLanguage>(
      create: (_) => appLanguage,
      child: Consumer<PolyglotLanguage>(builder: (context, model, child) {
        return MaterialApp(
          // Set app locale, example using provider package
          locale: model.appLocal,
          title: "POLYGLOT",
          // Add delegates to materialApp
          localizationsDelegates: [
            const PolyLocalizationsDelegate(),
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
            GlobalCupertinoLocalizations.delegate,
            FallbackLocalizationDelegate(),
          ],
          // Set supported languages
          supportedLocales: model.suportedLocales,
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  final String? title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? title;
  String? description;
  PolyglotModel? polyModel;

  _MyHomePageState();

  @override
  Widget build(BuildContext context) {
    //
    var appLanguage = Provider.of<PolyglotLanguage>(context);
    return Scaffold(
      appBar: AppBar(
        title: Text(PolyLocalizations.of(context)
                ?.translate('landing.translationdemo.description') ??
            ""),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(12.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                PolyLocalizations.of(context)?.translate('landing.wemake') ??
                    "",
                textAlign: TextAlign.justify,
                style: TextStyle(fontSize: 18, color: Colors.red),
              ),
              Text(
                PolyLocalizations.of(context)
                        ?.translate('landing.translationdemo.description') ??
                    "",
                textAlign: TextAlign.center,
                style: TextStyle(fontSize: 18, color: Colors.green),
              ),
              Text(
                PolyLocalizations.of(context)?.translate('landing.backedby') ??
                    "",
                textAlign: TextAlign.justify,
                style: TextStyle(fontSize: 18, color: Colors.blue[400]),
              ),
              Padding(
                padding: const EdgeInsets.only(top: 20),
                child: Text(
                  PolyLocalizations.of(context)
                          ?.translate('landing.copyright') ??
                      "",
                  textAlign: TextAlign.center,
                  style: TextStyle(fontSize: 18, color: Colors.teal),
                ),
              ),
              Center(
                child: Wrap(
                  children: [
                    for (var lang in appLanguage.localizedStrings!.langs!.keys)
                      Container(
                        margin: const EdgeInsets.all(12),
                        child: TextButton(
                          child: Text('Polyglot $lang'),
                          onPressed: () {
                            print(lang);
                            appLanguage.changeLanguageFromString(lang);
                          },
                        ),
                      )
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}