Orientação gerada a partir de informações públicas. Apenas para referência.
Easy_Localization é um pacote do Flutter que simplifica a internacionalização e localização em aplicativos. Ele permite que desenvolvedores gerenciem múltidos idiomas de forma eficiente, fornecendo uma API simples para traduzir strings, formatar datas e números e alternar entre locais em tempo de execução. O pacote suporta todas as principais plataformas, incluindo Android, iOS, Web, macOS, Windows e Linux. Com suporte integrado para arquivos de tradução baseados em JSON, ele reduz o código boilerplate e agiliza o fluxo de trabalho de localização. Ideal para aplicativos voltados para públicos globais, ele melhora a manutenibilidade e escalabilidade do conteúdo multilíngue.
Class loader for localization files. You can use custom loaders from Easy Localization Loader or create your own class.
extraAssetLoaders
false
null
A List of asset loaders, in case of needing assets being loaded from a different module or package. (e.g. adding a package that uses [Easy Localization Loader]).
fallbackLocale
false
Returns the locale when the locale is not in the list supportedLocales.
startLocale
false
Overrides device locale.
saveLocale
false
true
Save locale in device storage.
useFallbackTranslations
false
false
If a localization key is not found in the locale file, try to use the fallbackLocale file.
useFallbackTranslationsForEmptyResources
false
false
If translation is empty in the locale file, try to use the fallbackLocale file. Does not take effect if useFallbackTranslations is false.
useOnlyLangCode
false
false
Trigger for using only language code for reading localization files.
Call EasyLocalization.ensureInitialized() in your main before runApp.
voidmain() async{
// ...// Needs to be called so that we can await for EasyLocalization.ensureInitialized();WidgetsFlutterBinding.ensureInitialized();
awaitEasyLocalization.ensureInitialized();
// ...runApp(....)
// ...
}
🔥 Change or get locale
Easy localization uses extension methods [BuildContext] for access to locale.
It's the easiest way change locale or get parameters 😉.
ℹ️ No breaking changes, you can use old the static method EasyLocalization.of(context)
You can use extension methods of [String] or [Text] widget, you can also use tr() as a static function.
Text(context.tr('title'))
You can also use tr() without [Context] as a static function.
This is not recommend in build methods, because the widget won't rebuild when the language changes.
Text('title').tr() //Text widgetprint('title'.tr()); //Stringvar title = tr('title') //Static function
Arguments:
Name
Type
Description
args
List<String>
List of localized strings. Replaces {} left to right
namedArgs
Map<String, String>
Map of localized strings. Replaces the name keys {key_name} according to its name
gender
String
Gender switcher. Changes the localized string based on gender string
Example:
{"msg":"{} are written in the {} language","msg_named":"Easy localization is written in the {lang} language","msg_mixed":"{} are written in the {lang} language","gender":{"male":"Hi man ;) {}","female":"Hello girl :) {}","other":"Hello {}"}}
You can translate with pluralization.
To insert a number in the translated string, use {}. Number formatting supported, for more information read NumberFormat class documentation.
You can use extension methods of [String] or [Text] widget, you can also use plural() as a static function.
Arguments:
Name
Type
Description
value
num
Number value for pluralization
args
List<String>
List of localized strings. Replaces {} left to right
namedArgs
Map<String, String>
Map of localized strings. Replaces the name keys {key_name} according to its name
name
String
Name of number value. Replaces {$name} to value
format
NumberFormat
Formats a numeric value using a NumberFormat class
Example:
{"day":{"zero":"{} дней","one":"{} день","two":"{} дня","few":"{} дня","many":"{} дней","other":"{} дней"},"money":{"zero":"You not have money","one":"You have {} dollar","many":"You have {} dollars","other":"You have {} dollars"},"money_args":{"zero":"{} has no money","one":"{} has {} dollar","many":"{} has {} dollars","other":"{} has {} dollars"},"money_named_args":{"zero":"{name} has no money","one":"{name} has {money} dollar","many":"{name} has {money} dollars","other":"{name} has {money} dollars"}}
⚠️ Key "other" required!
//Text widget with formatText('money').plural(1000000, format: NumberFormat.compact(locale: context.locale.toString())) // output: You have 1M dollars//Stringprint('day'.plural(21)); // output: 21 день//Static functionvar money = plural('money', 10.23) // output: You have 10.23 dollars//Text widget with plural BuildContext extensionText(context.plural('money', 10.23))
//Static function with argumentsvar money = plural('money_args', 10.23, args: ['John', '10.23']) // output: John has 10.23 dollars//Static function with named argumentsvar money = plural('money_named_args', 10.23, namedArgs: {'name': 'Jane', 'money': '10.23'}) // output: Jane has 10.23 dollarsvar money = plural('money_named_args', 10.23, namedArgs: {'name': 'Jane'}, name: 'money') // output: Jane has 10.23 dollars
⚙️ Configuring Plural Rules with ignorePluralRules
In some languages, pluralization is simple and only involves using zero, one, two, and other forms, without needing to handle the few or many categories.
By default, easy_localization ignores the few and many plural forms and uses just the zero, one, two, and other forms.
If you want to enable the handling of the few and many plural categories for specific languages, you can configure the ignorePluralRules flag to false in the EasyLocalization initialization.
Here’s how to configure it:
EasyLocalization(
ignorePluralRules: false, // Set this line to false to enable 'few' and 'many' plural categories
supportedLocales: [Locale('en', 'US'), Locale('de', 'DE')],
path: 'assets/translations',
fallbackLocale: Locale('en', 'US'),
child: MyApp()
)
Setting ignorePluralRules: false will enable the few and many plural categories, allowing your translations to handle all plural forms, including few and many, for supported languages.
🔥 Linked translations:
If there's a translation key that will always have the same concrete text as another one you can just link to it. To link to another translation key, all you have to do is to prefix its contents with an @: sign followed by the full name of the translation key including the namespace you want to link to.
You can also do nested anonymous and named arguments inside the linked messages.
Example:
{
...
"date":"{currentDate}.","dateLogging":"INFO: the date today is @:date"
...
}
print('dateLogging'.tr(namedArguments: {'currentDate': DateTime.now().toIso8601String()})); //Output: INFO: the date today is 2020-11-27T16:40:42.657.
Formatting linked translations:
Formatting linked locale messages
If the language distinguishes cases of character, you may need to control the case of the linked locale messages. Linked messages can be formatted with modifier @.modifier:key
The below modifiers are available currently.
upper: Uppercase all characters in the linked message.
lower: Lowercase all characters in the linked message.
capitalize: Capitalize the first character in the linked message.
Example:
{
...
"example":{"fullName":"Full Name","emptyNameError":"Please fill in your @.lower:example.fullName"}
...
}
Output:
print('example.emptyNameError'.tr()); //Output: Please fill in your full name
🔥 Linked files:
You can split translations for a single locale into multiple files by using linked files. This helps keep your JSON clean and maintainable.
To link an external file, set the key’s value to a path prefixed with :/, relative to your translations directory. For example, with default path assets/translations and locale en-US:
If you prefer to not generate keys you can see an audit of your translation keys to see the one present in your app code but not in your translations file by running the audit command.
flutter pub run easy_localization:audit
If you are not using the default translations folder path (assets/translations) or the lib folder for your code you can specify your custom paths :
Arguments
Short
Default
Description
--translations-dir
-t
assets/translations
Folder containing localization files
--source-dir
-s
lib
Folder containing the app code files
🖨️ Logger
[Easy Localization] logger based on [Easy Logger]
You can customize logger for you project
Show only lost keys message
Lost translations keys logged like warning messages. Change [Easy Logger] level for display only errors and warnings.
We need your support. Projects like this can not be successful without support from the community. If you find this project useful, and would like to support further development and ongoing maintenance, please consider donating.