import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class CountryLocalizations { final Locale locale; CountryLocalizations(this.locale); static CountryLocalizations of(BuildContext context) { return Localizations.of( context, CountryLocalizations, ); } static const LocalizationsDelegate delegate = _CountryLocalizationsDelegate(); Map _localizedStrings; Future load() async { print('locale.languageCode: ${locale.languageCode}'); String jsonString = await rootBundle.loadString( 'packages/country_code_picker/i18n/${locale.languageCode}.json'); Map jsonMap = json.decode(jsonString); _localizedStrings = jsonMap.map((key, value) { return MapEntry(key, value.toString()); }); return true; } String translate(String key) { return _localizedStrings[key]; } } class _CountryLocalizationsDelegate extends LocalizationsDelegate { const _CountryLocalizationsDelegate(); @override bool isSupported(Locale locale) { return [ 'en', 'it', 'fr', ].contains(locale.languageCode); } @override Future load(Locale locale) async { CountryLocalizations localizations = new CountryLocalizations(locale); await localizations.load(); return localizations; } @override bool shouldReload(_CountryLocalizationsDelegate old) => false; }