flutter_localization_agent 1.0.1 copy "flutter_localization_agent: ^1.0.1" to clipboard
flutter_localization_agent: ^1.0.1 copied to clipboard

Package for in-app localization using Language Models (LLMs) to translate the base language into multiple supported languages.

Flutter Localization Agent #

A powerful localization package for Flutter that utilizes LLM-based translation services to dynamically translate text while caching translations for offline use.

Video demo #

Features #

  • Supports multiple languages dynamically
  • Caches translations for offline use
  • Uses LLM-based translators (e.g., Gemini)
  • Provides automatic language switching
  • Seamless integration with Flutter apps

Installation #

To use flutter_localization_agent, add the following dependency to your pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  flutter_localization_agent: latest_version
  provider: latest_version # you can use any state management library of your choice
copied to clipboard

Then, run:

flutter pub get
copied to clipboard

Usage #

1. Initialize the Localization Service #

In your main.dart file, set up the translation service before running the app:

import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_localization_agent/flutter_localization_agent.dart';
import 'package:provider/provider.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  final translator = LLMTranslatorFactory.createTranslator(
    LLM.gemini,
    'YOUR_API_KEY_HERE',
  );

  final supportedLanguages = [
    Language(code: 'en', name: 'English'),
    Language(code: 'es', name: 'Spanish'),
    Language(code: 'fr', name: 'French'),
    Language(code: 'it', name: 'Italian'),
    Language(code: 'ar', name: 'Arabic'),
  ];

  final initialLanguage = supportedLanguages[0];

  final translationService = TranslationService(
    translator: translator,
    supportedLanguages: supportedLanguages,
    initialLanguage: initialLanguage,
  );

  await translationService.loadBaseTranslations({
    'hello': 'Hello friend',
    'goodbye': 'Goodbye',
    'dangerous': 'Dangerous',
  });

  runApp(
    MultiProvider(
      providers: [ChangeNotifierProvider.value(value: translationService)],
      child: MyApp(),
    ),
  );
}
copied to clipboard

2. Create the Main Application #

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    final service = Provider.of<TranslationService>(context);

    return MaterialApp(
      locale: service.currentLanguage.toLocale(),
      supportedLocales: service.supportedLocales,
      localizationsDelegates: [
        TranslationLocalizationsDelegate(service),
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      home: MyHomePage(),
    );
  }
}
copied to clipboard

3. Using Translations in the UI #

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    final translations = TranslationLocalizations.of(context);

    return Scaffold(
      appBar: AppBar(title: Text(translations.translate('hello'))),
      body: Center(
        child: translations.isLoading
            ? CircularProgressIndicator()
            : Text(translations.translate('dangerous')),
      ),
      floatingActionButton: Consumer<TranslationService>(
        builder: (context, service, _) => DropdownButton<Language>(
          value: service.currentLanguage,
          items: service.supportedLanguages
              .map(
                (lang) => DropdownMenuItem(
                  value: lang,
                  child: Text(lang.name),
                ),
              )
              .toList(),
          onChanged: (newLang) {
            if (newLang != null) {
              service.changeLanguage(newLang).then((context) => log('Changed'))
              .catchError((e) {
                if (context.mounted) {
                  ScaffoldMessenger.of(context)
                      .showSnackBar(SnackBar(content: Text('Error: $e')));
                }
              });
            }
          },
        ),
      ),
    );
  }
}
copied to clipboard

How the Package Works #

TranslationService #

  • Manages translations and caching using SharedPreferences
  • Loads base translations and dynamically fetches new translations
  • Detects language changes and updates the UI accordingly

Caching Mechanism #

  • Stores translations locally for offline use
  • Uses _needsRefresh() to determine if translations need to be updated

Fetching Translations #

  • Calls the LLMTranslator to get translations dynamically
  • Updates the _cache with new translations

API Reference #

TranslationService #

Method Description
loadBaseTranslations() Loads the initial language's translations.
changeLanguage() Changes the current language and updates UI.
getTranslation() Fetches the translated string for a given key.
_fetchTranslations() Calls the LLM API to fetch new translations.
_saveToCache() Stores translations in SharedPreferences.
_loadFromCache() Loads cached translations when the app starts.

TranslationLocalizations #

Method Description
translate(key) Retrieves the translated text.
isLoading Returns whether translations are loading.

Language #

Property Description
code Language code (e.g., en).
name Human-readable name (e.g., English).

Contributing #

Feel free to submit issues or contribute to the project by opening pull requests.

9
likes
160
points
94
downloads
screenshot

Publisher

unverified uploader

Weekly Downloads

2024.09.11 - 2025.03.26

Package for in-app localization using Language Models (LLMs) to translate the base language into multiple supported languages.

Repository (GitHub)
View/report issues

Topics

#localization #flutter #translation

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_localizations, http, shared_preferences

More

Packages that depend on flutter_localization_agent