Last updated:
0 purchases
localized
localized #
String extensions for localization and a translation utility
Features #
A script for creating your json localization files (see Localization)
A String extension function localized
A translation utility (see Translation)
Getting Started #
Go inside pubspec.yaml file
Add this to your package's pubspec.yaml file:
dependencies:
localized: ^2.1.1
copied to clipboard
Get dependencies
flutter pub get
copied to clipboard
How to use #
Localization #
The package generates assets with i18n empty content as JSON files for future localized strings.
First think about the localization you want to use and run the script (as an example EN, DE, RU are provided)
specifying the localizations in a line separated with commas
flutter pub run localized:main -c -l en,de,ru
copied to clipboard
(see list of Parameters)
As a result this will be added to the project tree:
- assets
- i18n
- de.json
- en.json
- ru.json
copied to clipboard
In addition, you can specify the directory where the files
will be created
flutter pub run localized:main -c -l en,de,ru -d res/localizations
copied to clipboard
(see list of Parameters)
For now the result this will:
- res
- localizations
- de.json
- en.json
- ru.json
copied to clipboard
Next step is to add these assets in a pubspec.yaml file
flutter:
assets:
- assets/i18n/
copied to clipboard
Or your custom:
flutter:
assets:
- res/localizations/
copied to clipboard
The algorithm will check if you have already created the localization files
and will ask you if you want to overwrite them. If you select Y in the
command line, the files and the content will be overwritten. In case of N
nothing will change. If you enter other character the function will call itself
recursively until you provide a valid input.
Next is to do some coding
Import the library
import 'package:localized/localized.dart';
copied to clipboard
Create a set of Locales
final locales = [
Locale('de', 'DE'),
Locale('en', 'EN'),
Locale('ru', 'RU'),
];
copied to clipboard
In your MateralApp widget set the created supportedLocales with the created set
supportedLocales: locales,
copied to clipboard
In your MateralApp widget set the list of localizationsDelegates
localizationsDelegates: [
LocalizationService.delegate(locales),
],
copied to clipboard
Result:
class MyApp extends StatelessWidget {
final locales = [
// TODO: add new lang in array
Locale('de', 'DE'),
Locale('en', 'EN'),
Locale('ru', 'RU'),
];
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
supportedLocales: locales,
localizationsDelegates: [
GlobalCupertinoLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
LocalizationService.delegate(locales: locales),
],
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(),
);
}
}
copied to clipboard
The settings finished, next is to try to localise strings.
appBar: AppBar(
title: Text('title'.localized(context)), // Home page (en), Startseite (de), Домашняя страница (ru)
),
copied to clipboard
Depending on the localization currently installed on the phone or the simulator, the appropriate value for the string will be called.
For instance if the current localization is en-EN, then en.json file will be used.
Here is the full example
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:localized/localized.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final locales = [
// TODO: add new lang in array
Locale('de', 'DE'),
Locale('en', 'EN'),
Locale('ru', 'RU'),
];
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
supportedLocales: locales,
localizationsDelegates: [
LocalizationService.delegate(locales: locales),
],
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('title'.localized(context)),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'amount_of_clicks'.localized(context),
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'increase'.localized(context),
child: Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
copied to clipboard
Translation #
This library supports translation of every string in your localized json files.
The APIs:
Google Cloud Translator
Yandex Translator
Microsoft Translator
When you have created your json files, you may want to translate all your strings to desired languages.
The translation utility will check for existing keys in json files and if there is no translation for that key
the utility will handle this.
For Google:
flutter pub run localized:main -t -l ru,en,de -p Google -k YOUR_GOOGLE_API_KEY -n MAXIMUM_BUFFER_NUMBER
copied to clipboard
For Yandex:
flutter pub run localized:main -t -l ru,en,de -p Yandex -f YOUR_YANDEX_FOLDER_ID -n MAXIMUM_BUFFER_NUMBER -i YOUR_YANDEX_IAM_TOKEN
copied to clipboard
For Microsoft:
flutter pub run localized:main -t -l ru,en,de -p Microsoft -m YOUR_MICROSOFT_KEY -r YOUR_REGION -n 100
copied to clipboard
(see list of Parameters)
The algorithm checks the amount of localization files you have and requires at least two of them.
It compares the amount of key-value pairs in several JSON files and lets translation
running for those JSON files, which don't have the actual translated key-value pairs. It will not
overwrite the already existing translation.
Please pay attention to MAXIMUM_BUFFER_NUMBER parameter. This parameter shows how many strings are allowed to be translated in one request.
By default, the parameter value is set to 1 and generally it will take much longer time for the translation.
The known limits are:
Google: 25 strings limit
Yandex: 100 string limit
Microsoft: 100 string limit
Parameters
General:
-c Create sample localization files
-t Translate localization files
-l Language codes
-d i18n files directory. ("assets/i18n" by default)
-p Provider of translation API
-n The number of strings to translate in one request ("1" by default)
Google only:
-k Google Project API key
Yandex only:
-f Yandex Folder ID
-i Yandex IAM token
Microsoft only:
-m Microsoft key
-e Microsoft endpoint. ("https://api.cognitive.microsofttranslator.com/" by default)
-r Microsoft multi-service or regional translator resource. It is required when using a multi-service subscription key.
License #
Under MIT License
Donation #
If you think that this repo helped you to solve the issues you struggle with, please don't be shy and donate :-)
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.