import 'ru/ru_translations.dart'; import 'en_us/en_us_translations.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/cupertino.dart'; import '../core/app_export.dart'; class AppLocalization { AppLocalization(this.locale); Locale locale; static final Map> _localizedValues = {'ru': ru}; static final Map> __localizedValues = { 'en': enUs }; static AppLocalization of() { return Localizations.of( NavigatorService.navigatorKey.currentContext!, AppLocalization)!; } static List languages() => _localizedValues.keys.toList(); String getString(String text) => _localizedValues[locale.languageCode]![text] ?? text; } class AppLocalizationDelegate extends LocalizationsDelegate { const AppLocalizationDelegate(); @override bool isSupported(Locale locale) => AppLocalization.languages().contains(locale.languageCode); //Returning a SynchronousFuture here because an async "load" operation //cause an async "load" operation @override Future load(Locale locale) { return SynchronousFuture(AppLocalization(locale)); } @override bool shouldReload(AppLocalizationDelegate old) => false; } extension LocalizationExtension on String { String get tr => AppLocalization.of().getString(this); }