EzLocalization
Localize your flutter application quickly and easily.
Install / Use
/learn @Skyost/EzLocalizationREADME
EzLocalization
This package allows you to setup a powerful localization system with ease and in only a few minutes.
Features
Here are some features:
- Easy, lightweight, open-source.
- MIT licensed.
- Easily extensible.
Getting started
It only takes a few steps in order to get EzLocalization to work !
First, add the following code to your MaterialApp definition (usually in main.dart) :
EzLocalizationDelegate ezLocalization = EzLocalizationDelegate(supportedLocales: [Locale('en'), Locale('fr')]); // The first language is your default language.
return MaterialApp(
// ...
localizationsDelegates: ezLocalization.localizationDelegates,
supportedLocales: ezLocalization.supportedLocales,
localeResolutionCallback: ezLocalization.localeResolutionCallback,
);
Then you create a folder named languages in your assets directory with the defined languages in it.
An example structure could be :
assets
└── languages
├── en.json
└── fr.json
Here's an example of en.json :
{
"hello": "Hello !"
}
And a translated fr.json :
{
"hello": "Bonjour !"
}
Don't forget to add the assets in your pubspec.yml :
flutter:
# ...
assets:
- "assets/languages/"
That's it ! To get your string you only have to call EzLocalization.of(context)!.get('hello').
Advanced
Extension method
With the extension method, it's even easier to get a localized string !
The only thing you have to do is to replace EzLocalization.of(context)!.get('key') by context.getString('key').
You may have to manually import EzLocalization in your file.
Builder widget
EzLocalization provides a builder widget called EzLocalizationBuilder. You can use it as such :
const EzLocalizationBuilder(
delegate: EzLocalizationDelegate(
supportedLocales: [
Locale('en'),
Locale('fr'),
Locale('es'),
],
),
builder: (context, localizationDelegate) => MaterialApp(
title: 'Beautifully localized app',
home: MyMainWidget(),
localizationsDelegates: localizationDelegate.localizationDelegates,
supportedLocales: localizationDelegate.supportedLocales,
localeResolutionCallback: localizationDelegate.localeResolutionCallback,
),
);
It has two advantages :
- It helps reducing boilerplate.
- You can dynamically change the current locale using
EzLocalizationBuilder.of(context)!.changeLocale(yourLocale).
Nested strings
You can nest translation strings as such :
{
"tabs": {
"home": "Home"
}
}
And it can be access using EzLocalization.of(context)!.get('tabs.home').
Format arguments
In your translation string, you may add arguments using {} :
{
"greeting": "Hello {target}, my name is {me} !"
}
You can then fill them with EzLocalization.of(context)!.get('greeting', {'target': 'John', 'me': 'Bob'}).
Also, instead of a map you can pass a list and get your arguments by their indexes.
Change the files path
You can change from the default path of assets/languages/$languageCode.json by passing getPathFunction
to EzLocalizationDelegate. You will then have to provide a valid asset path according to the specified locale.
Don't forget to update your assets entry in your pubspec !
Updating the iOS app bundle
See the official flutter.dev documentation about updating the iOS app bundle.
Contributing
You have a lot of options to contribute to this project ! You can :
Related Skills
node-connect
343.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
90.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
343.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
