localizex 1.0.0 copy "localizex: ^1.0.0" to clipboard
localizex: ^1.0.0 copied to clipboard

A lightweight and efficient Flutter package for managing application localization with support for dynamic locale switching and easy string retrieval.

localizex #

Pub Version License: MIT

A lightweight and efficient Flutter package for managing application localization with support for dynamic locale switching and easy string retrieval.

Features #

  • Simple Integration: Easy to set up and use with minimal boilerplate code
  • Dynamic Locale Switching: Change app language at runtime without restart
  • Automatic Fallback: Falls back to English for missing translations
  • Type-Safe: Retrieve localized strings with compile-time safety
  • Extension Method: Convenient .tr() extension on String for quick translations
  • 80+ Languages: Built-in support for 80+ ISO language codes with metadata
  • Language Metadata: Access language flags, native names, and English names
  • Singleton Pattern: Efficient memory usage with singleton instance

Installation #

Add localizex to your pubspec.yaml:

dependencies:
  localizex: ^1.0.0

Then run:

flutter pub get

Quick Start #

import 'package:localizex/localizex.dart';

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

  // 1. Initialize with your strings
  await AppStringLocalizations.initialize(
    strings: {
      "en": {"hello": "Hello", "welcome": "Welcome"},
      "hi": {"hello": "नमस्ते", "welcome": "स्वागत है"},
    },
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // 2. Add delegates
      localizationsDelegates: [
        StringLocalizationsDelegate(),
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      // 3. Define supported locales
      supportedLocales: [Locale("en"), Locale("hi")],
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 4. Use translations
    return Scaffold(
      body: Center(child: Text("hello".tr())),
    );
  }
}

Usage #

Translation Methods #

Extension Method (Recommended)

The simplest way to translate strings:

Text("hello".tr())  // Returns "Hello" or "नमस्ते" based on current locale

Using getString()

Direct method call:

Text(AppStringLocalizations.instance.getString("hello"))

Using of(context)

Get instance from BuildContext:

Text(AppStringLocalizations.of(context).getString("welcome"))

Dynamic Locale Switching #

Change language at runtime:

ElevatedButton(
  onPressed: () {
    setState(() {
      AppStringLocalizations.load(Locale("hi"));
    });
  },
  child: Text("Switch to Hindi"),
)

Language Metadata #

Access language information:

// Get language details
var language = LanguageLocale.getDisplayLanguage("hi");
print(language["EnglishName"]);  // "हिंदी (Hindi)"
print(language["Flag"]);          // "🇮🇳"
print(language["NativeName"]);    // "हिन्दी"

// Get just the English name
String name = LanguageLocale.getDisplayLanguageName("en");
print(name);  // "English"

Advanced Usage #

For better type safety and IDE autocomplete, use the StringKeys pattern demonstrated in the example app.

How it works:

  1. StringStore - Centralized string storage
  2. StringKeys - Auto-generated constants
  3. generate_string_keys.sh - Script to generate StringKeys

StringStore (example/lib/localization/string_store.dart)

Centralized storage for all localization strings:

class StringStore {
  static const Map<String, Map<String, String>> stringsFallback = {
    "en": {
      "appTitle": "Localizex Demo",
      "welcome": "Welcome to Localizex",
    },
    "hi": {
      "appTitle": "लोकलाइज़एक्स डेमो",
      "welcome": "लोकलाइज़एक्स में आपका स्वागत है",
    },
  };

  static Map<String, Map<String, String>> strings = stringsFallback;
}

StringKeys (Auto-generated)

Type-safe constants for all translation keys:

// GENERATED FILE — DO NOT MODIFY MANUALLY
class StringKeys {
  static const String appTitle = "appTitle";
  static const String welcome = "welcome";
}

Usage with StringKeys:

Text(StringKeys.welcome.tr())  // ✅ Type-safe, autocomplete enabled
Text("welcome".tr())            // ⚠️ Works but prone to typos

Benefits:

  • Compile-time safety - Catch typos before runtime
  • IDE autocomplete - See all available keys
  • Refactoring support - Rename keys safely
  • Single source of truth - All keys in one place

Generating StringKeys:

Run the provided script to auto-generate StringKeys from StringStore:

cd example/script
chmod +x generate_string_keys.sh  # First time only
./generate_string_keys.sh

The script extracts all keys from the English locale and generates the StringKeys class automatically.

Custom Locale Override #

Force a specific locale using SpecifiedLocalizationDelegate:

MaterialApp(
  localizationsDelegates: [
    SpecifiedLocalizationDelegate(Locale("hi")),
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
  ],
  // ...
)

Check Locale Support #

Verify if a language code is supported:

bool isSupported = AppStringLocalizations.isSupported("hi");
print(isSupported);  // true

Example App #

Check out the example app for a complete demo featuring:

  • ✅ Dynamic locale switching between English and Hindi
  • ✅ Beautiful Material Design 3 UI with animations
  • ✅ Type-safe StringKeys implementation
  • ✅ Language metadata display

Run the example:

cd example
flutter run

Supported Languages #

The package includes metadata for 80+ languages including:

English, Hindi, Spanish, French, German, Chinese, Japanese, Korean, Arabic, Russian, Portuguese, Italian, Dutch, Turkish, Vietnamese, Thai, Indonesian, Polish, Czech, Swedish, Norwegian, Danish, Finnish, Greek, Hebrew, and many more.

API Reference #

AppStringLocalizations #

Method Description
initialize({required Map<String, Map<String, String>> strings}) Initialize localized strings
load(Locale locale) Load a specific locale
of(BuildContext context) Get instance from context
getString(String resId) Get localized string for a key
isSupported(String languageCode) Check if language is supported
instance Get singleton instance

LanguageLocale #

Method Description
getDisplayLanguage(String key) Get language details map (Code, EnglishName, NativeName, Flag)
getDisplayLanguageName(String key) Get English name of language
isoLangs List of all supported language metadata

LocalizationExtension #

Method Description
String.tr() Extension method to translate current string

Additional Information #

License: This package is released under the MIT License. See LICENSE file for details.

0
likes
160
points
121
downloads

Publisher

unverified uploader

Weekly Downloads

A lightweight and efficient Flutter package for managing application localization with support for dynamic locale switching and easy string retrieval.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_localizations, intl

More

Packages that depend on localizex