language_translator
A lightweight Flutter package for seamlessly integrating multi-language support into your application. This package simplifies translating text and managing locale data for various supported languages, with or without BuildContext
.
Features
- Translate strings with or without
BuildContext
- Custom
Text
widget that auto-translates - Localization delegate setup
- Built-in support for RTL languages
- Singleton-based utilities for managing languages
- Supports 80+ languages out-of-the-box
- Persisted language state with
HydratedLanguageCubit
- UI-only language selection with
LanguageSelectionCubit
- Searchable language picker with modal bottom sheet
- Directionality support with
AppLanguageBuilder
- Clean architecture using
BlocProvider
andget_it
- Simple initialization using
initializeLanguageConfig()
Getting Started
Installation
Add this to your pubspec.yaml
:
dependencies:
language_translator: <latest_version>
Setup
- Add your language JSON files to your assets:
flutter:
assets:
- assets/locale/en.json
- assets/locale/bn.json
# Add more as needed
- Register the localization delegate in your
MaterialApp
:
MaterialApp(
localizationsDelegates: const [
Translate.delegate,
...GlobalMaterialLocalizations.delegates,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: AppLanguage.supportedLanguages,
locale: AppLanguage.defaultLanguage,
// ...
)
Initialize Language Config
Use initializeLanguageConfig()
at app startup to set default and supported languages:
initializeLanguageConfig(
defaultLanguageCode: 'bn',
supportedLocales: [Locale('en'), Locale('bn')],
);
Optional countryCode
is also supported:
initializeLanguageConfig(
defaultLanguageCode: 'en',
countryCode: 'US',
);
Translate Text
Using BuildContext
:
Text('hello_key'.translateTxt(context));
Without BuildContext
:
final String helloTxt = 'hello_key'.translateWithoutContext();
Using AppTranslatedTextView
Widget:
AppTranslatedTextView(
txt: 'hello_key',
style: TextStyle(fontSize: 18),
)
Language State Management
- HydratedLanguageCubit: Persist language setting between app launches.
- LanguageSelectionCubit: Allow temporary language preview/selection in UI.
- Registered via
get_it
for DI. - Provided via
BlocProvider
for clean integration.
BlocProvider<HydratedLanguageCubit>(
create: (_) => sl<HydratedLanguageCubit>(),
),
Directionality
Use AppLanguageBuilder
to wrap your app shell:
AppLanguageBuilder(
child: MyMaterialApp(),
)
Searchable Language Picker
Show a searchable modal bottom sheet:
showModalBottomSheet(
context: context,
builder: (_) => LanguagePickerBottomSheet(),
);
Toggle Between Locales
Use the toggle(Locale a, Locale b)
method from HydratedLanguageCubit
:
context.read<HydratedLanguageCubit>().toggle(Locale('en'), Locale('bn'));
Supported Languages
This package supports 80+ languages, including all officially supported Flutter localizations:
- Afrikaans, Amharic, Arabic, Azerbaijani, Belarusian, Bengali, Bosnian, Catalan, Czech, Welsh, Danish, German, Greek, English (US/UK), Spanish, Estonian, Basque, Persian, Finnish, French, Galician, Gujarati, Hebrew, Hindi, Croatian, Hungarian, Armenian, Indonesian, Icelandic, Italian, Japanese, Georgian, Kazakh, Khmer, Kannada, Korean, Kyrgyz, Lao, Lithuanian, Latvian, Macedonian, Malayalam, Mongolian, Marathi, Malay, Burmese, Nepali, Dutch, Norwegian, Odia, Punjabi, Polish, Pashto, Portuguese (all variants), Romanian, Russian, Sindhi, Sinhala, Slovak, Slovenian, Albanian, Serbian, Swedish, Swahili, Tamil, Telugu, Thai, Turkmen, Turkish, Tatar, Ukrainian, Urdu, Uzbek, Vietnamese, Chinese (Simplified, China, Taiwan), Zulu
File Structure
language_translator/
├── assets/
│ └── supported_locales.dart
├── config/
│ ├── bloc_provider/
│ │ └── language_setting_bloc_provider.dart
│ └── dependency_injection/
│ └── language_setting_get_it_register.dart
├── extension/
│ ├── locale_extensions.dart
│ ├── locale_list_sorting.dart
│ └── translate_string_extension.dart
├── language/
│ ├── app_language.dart
│ ├── app_language_config.dart
│ ├── i_language_config.dart
│ └── initialize_language_config.dart
├── utils/
│ ├── translate.dart
│ ├── app_local_delegate.dart
│ ├── util_load_local_file.dart
│ └── language_label_util.dart
├── view_models/
│ ├── hydrated_language_cubit/
│ │ └── hydrated_language_cubit.dart
│ └── language_selection_cubit/
│ └── language_selection_cubit.dart
├── views/
│ └── screens
│ ├── app_language_builder.dart
│ └── widgets/
│ ├── app_translated_text_view.dart
│ ├── dropdown_language_selector.dart
│ ├── modal_language_selector.dart
│ ├── searchable_language_picker.dart
│ └── toggle_language_button.dart
Contributing
Feel free to open issues or submit PRs for improvements, additional language support, or feature suggestions.
License
Libraries
- assets/supported_locales
- config/bloc_provider/language_setting_bloc_provider
- config/dependency_injection/language_setting_get_it_register
- extensions/locale_extensions
- extensions/locale_list_sorting
- extensions/translate_string_extension
- language/app_language
- language/app_language_config
- language/i_language_config
- language_translator
- utils/app_local_delegate
- utils/initialize_language_config
- utils/language_label_util
- utils/language_name
- utils/translate
- utils/util_load_local_file
- view_models/hydrated_language_cubit/hydrated_language_cubit
- view_models/language_selection_cubit/language_selection_cubit
- view_models/mixins/locale_validator
- views/screens/app_language_builder
- views/widgets/app_translated_text_view
- views/widgets/dropdown_language_selector
- views/widgets/modal_language_selector
- views/widgets/searchable_language_picker