A minimal CSV localization package for Flutter.
Store translations for multiple languages in a single CSV file. One language per column. One translation per row.
See example.
Add to your pubspec.yaml
dependencies:
csv_localizations:Add a single CSV file as an asset and describe it in your pubspec.yaml
flutter:
assets:
- assets/translations.csvkey,en,nb,en-GB,en-US
Hi,Hi,Hei,Hi GB,Hi US
my_img,assets/en.png,assets/nb.png,assets/en.png,assets/en.png
Multiline,"This is a
multiline string","Denne teksten går over
flere linjer","This is a
multiline string","This is a
multiline string"Tip: keys can point to local assets like images etc.
| key | en-GB | en | nb |
|---|---|---|---|
| Hi | Hi | Hi | Hei |
| Bike | Bike | Bike | Sykkel |
| Dog | Dog | Dog | Hund |
First row lists supported language/country codes.
First column are keys for localized values.
You can wrap multiline strings in quotation marks.
Translate strings using:
CsvLocalizations.instance.string('Hi')Or add a String extension:
Let's keep the API simple and not pollute the String API
extension LocalizedString on String {
String tr(BuildContext context) => CsvLocalizations.instance.string(this);
}We use \n as the default eol (end-of-line) char, but you can set this via
CsvLocalizations.instance.eol.
Check if the translation file is loaded using CsvLocalizations.instance.loaded.
Only necessary if called before initializing the global localizationDelegates.
Add CsvLocalizationsDelegate to MaterialApp and set supportedLocales using
language codes.
MaterialApp(
localizationsDelegates: [
... // global delegates
CsvLocalizationsDelegate('assets/translations.csv'),
],
supportedLocales: [
Locale('en', 'GB'),
Locale('en', 'US'),
Locale('en'),
Locale('nb'),
],
}
Add supported languages to ios/Runner/Info.plist as described
here.
Example:
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>en-US</string>
<string>en-GB</string>
<string>nb</string>
</array>