locale_switcher

A widget for switching the locale of your application.

codecov

Content

About

This package allows you to add locale-switching functionality to your app with just 2 lines of code.

This is NOT a localization package, it is just a few useful widgets that extend functionality of localization systems, such as: intl, easy_localization, etc...

Note: This package is already small, but if you still want to further reduce its size, you can use locale_switcher_dev package, which allow you to control what flags are included (or none) and which packages it depend on (or none).

Features

Usage

  1. Wrap MaterialApp or CupertinoApp with LocaleManager (example for intl package):
  @override
Widget build(BuildContext context, WidgetRef ref) {
  return LocaleManager(
      child: MaterialApp(
          locale: LocaleSwitcher.localeBestMatch,
          supportedLocales: AppLocalizations.supportedLocales,
          localizationsDelegates: AppLocalizations.localizationsDelegates,
  //...
  1. Add LocaleSwitcher widget anywhere into your app.

Troubleshooting

Note: localization should be set up before you start to use this package, if there some problems - please, check next section and/or documentation of localization system you use, before reporting bug.

Check that intl package is setup correctly:

The following instructions are from intl package, so you probably already did them:

In pubspec.yaml:


dependencies: # in this section
  intl:
  flutter_localizations:
    sdk: flutter
dev_dependencies: # in this section 
  build_runner:
flutter: # in this section 
  generate: true  

Optionally - in l10n.yaml:

arb-dir: lib/src/l10n
template-arb-file: intl_en.arb
output-dir: lib/src/l10n/generated
output-localization-file: app_localizations.dart
untranslated-messages-file: desiredFileName.txt
preferred-supported-locales: [ "en", "vi", "de" ]
nullable-getter: false

Example

With intl package:

Online Example here

Another example code: LocaleSwitcher used without LocaleManager(not recommended).

Example with dynamic option switch: here.

With easy_localization package:

locale_switcher_dev + easy_localization: https://github.com/Alexqwesa/locale_switcher/tree/builder/examples/easy_localization (recommended)

locale_switcher + easy_localization: https://github.com/Alexqwesa/locale_switcher/tree/main/examples/easy_localization

TODO:

  • Test with other localization system (currently: tested intl and easy_localization)
  • Support slang
  • Rectangle and oval flags, not just square and circle

FAQ

- How to change order of languages?

Languages are shown in the same order as they listed in l10n.yaml, or dynamically via LocaleSwitcher.custom.

- How to change flag of language?

Use LocaleManager.reassign parameter like this:

LocaleManager(
  reassign: {'en': ['GB', 'English', <Your_icon_optional>]}
  // (first two options are required, third is optional)
  // first option is the code of country which flag you want to use
...
)

- How to use localization outside of MaterialApp(or CupertinoApp)?

Here is a useful example, although it is not depend on this package:


import 'package:flutter_gen/gen_l10n/app_localizations.dart';

/// Access localization through locale
extension LocaleWithDelegate on Locale {
  /// Get class with translation strings for this locale.
  AppLocalizations get tr => lookupAppLocalizations(this);
}

Locale("en").tr.example
// or 
LocaleManager.locale.value.tr.example

Libraries

locale_switcher
A widget for switching the locale of your application.