import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; const _kLocaleStorageKey = '__locale_key__'; class FFLocalizations { FFLocalizations(this.locale); final Locale locale; static FFLocalizations of(BuildContext context) => Localizations.of(context, FFLocalizations)!; static List languages() => ['nl', 'en']; static late SharedPreferences _prefs; static Future initialize() async => _prefs = await SharedPreferences.getInstance(); static Future storeLocale(String locale) => _prefs.setString(_kLocaleStorageKey, locale); static Locale? getStoredLocale() { final locale = _prefs.getString(_kLocaleStorageKey); return locale != null && locale.isNotEmpty ? createLocale(locale) : null; } String get languageCode => locale.toString(); String? get languageShortCode => _languagesWithShortCode.contains(locale.toString()) ? '${locale.toString()}_short' : null; int get languageIndex => languages().contains(languageCode) ? languages().indexOf(languageCode) : 0; String getText(String key) => (kTranslationsMap[key] ?? {})[locale.toString()] ?? ''; String getVariableText({ String? nlText = '', String? enText = '', }) => [nlText, enText][languageIndex] ?? ''; static const Set _languagesWithShortCode = { 'ar', 'az', 'ca', 'cs', 'da', 'de', 'dv', 'en', 'es', 'et', 'fi', 'fr', 'gr', 'he', 'hi', 'hu', 'it', 'km', 'ku', 'mn', 'ms', 'no', 'pt', 'ro', 'ru', 'rw', 'sv', 'th', 'uk', 'vi', }; } /// Used if the locale is not supported by GlobalMaterialLocalizations. class FallbackMaterialLocalizationDelegate extends LocalizationsDelegate { const FallbackMaterialLocalizationDelegate(); @override bool isSupported(Locale locale) => _isSupportedLocale(locale); @override Future load(Locale locale) async => SynchronousFuture( const DefaultMaterialLocalizations(), ); @override bool shouldReload(FallbackMaterialLocalizationDelegate old) => false; } /// Used if the locale is not supported by GlobalCupertinoLocalizations. class FallbackCupertinoLocalizationDelegate extends LocalizationsDelegate { const FallbackCupertinoLocalizationDelegate(); @override bool isSupported(Locale locale) => _isSupportedLocale(locale); @override Future load(Locale locale) => SynchronousFuture( const DefaultCupertinoLocalizations(), ); @override bool shouldReload(FallbackCupertinoLocalizationDelegate old) => false; } class FFLocalizationsDelegate extends LocalizationsDelegate { const FFLocalizationsDelegate(); @override bool isSupported(Locale locale) => _isSupportedLocale(locale); @override Future load(Locale locale) => SynchronousFuture(FFLocalizations(locale)); @override bool shouldReload(FFLocalizationsDelegate old) => false; } Locale createLocale(String language) => language.contains('_') ? Locale.fromSubtags( languageCode: language.split('_').first, scriptCode: language.split('_').last, ) : Locale(language); bool _isSupportedLocale(Locale locale) { final language = locale.toString(); return FFLocalizations.languages().contains( language.endsWith('_') ? language.substring(0, language.length - 1) : language, ); } final kTranslationsMap = >>[ // login { 'd507d3b9': { 'nl': 'TextField', 'en': '', }, 't8h5f8ir': { 'nl': 'TextField', 'en': '', }, 'gkx4luhw': { 'nl': 'Inloggen', 'en': 'Inloggen', }, 'utppw2si': { 'nl': 'Wachtwoord vergeten?', 'en': '', }, 'la56ozbq': { 'nl': 'HorecagelegenhedenOverzichtPage', 'en': 'HorecagelegenhedenOverzichtPage', }, 'ropfvhyi': { 'nl': 'selectprovinciegemeent', 'en': 'selectprovinciegemeent', }, 'fts8juzc': { 'nl': 'horecagelegenheid 57897', 'en': '57897', }, '9rijjab8': { 'nl': 'puitgaan', 'en': 'puitgaan', }, 'ym0dczsr': { 'nl': 'kanwegtest', 'en': 'kanwegtest', }, 'bokhk9vk': { 'nl': 'Home', 'en': '', }, }, // horecagelegenheidCurrent { 'pj545url': { 'nl': 'Favoriet', 'en': '', }, 'pedeshok': { 'nl': 'Info', 'en': 'Info', }, 'q5nwrlms': { 'nl': 'Links', 'en': 'Links', }, 's1b6yp7v': { 'nl': 'Bezorgen', 'en': 'Bezorgen', }, 'ukbd1ac9': { 'nl': 'Alle horecagelegenheden', 'en': '', }, '6gfap72a': { 'nl': 'Home', 'en': '', }, }, // home { 'eor4c9rz': { 'nl': 'Uitgaan', 'en': '', }, 'mx7sn4ne': { 'nl': 'Activiteiten', 'en': '', }, 'e6xyyt74': { 'nl': 'Cultuur', 'en': '', }, 'uxy2nfok': { 'nl': 'Films', 'en': '', }, 'lx77xfrn': { 'nl': 'Jeugd', 'en': '', }, 'g8ll2g7i': { 'nl': 'Home', 'en': '', }, }, // selectprovinciegemeente { 's2fmjpdd': { 'nl': 'Select gemeente/provincie', 'en': '', }, 'vg44lbt3': { 'nl': 'Home', 'en': '', }, }, // PUitgaanPage { 'qkpwprwx': { 'nl': 'Home', 'en': '', }, }, // Event { '6gnwjxxh': { 'nl': 'Home', 'en': '', }, }, // EventCurrent { 'z63o5kzf': { 'nl': 'Delen', 'en': '', }, '89l5y9jd': { 'nl': 'Alle evenementen', 'en': '', }, 'n73u305o': { 'nl': '', 'en': '', }, '4qrjs6hg': { 'nl': 'Home', 'en': '', }, }, // HorecagelegenhedenOverzicht { 'cfmj0g86': { 'nl': 'Activiteiten', 'en': 'Activiteiten', }, 'od4c0ph1': { 'nl': 'Cultuur', 'en': 'Cultuur', }, 'i9cdclh1': { 'nl': 'Eetgelegenheden', 'en': 'Eetgelegenheden', }, '9s07bzb1': { 'nl': 'Overnachten', 'en': 'Overnachten', }, 'egcnfi7k': { 'nl': 'Uitgaan', 'en': 'Uitgaan', }, '3i8p2r6z': { 'nl': 'Verhuur, catering', 'en': 'Verhuur, catering', }, '9eldyvgz': { 'nl': 'Home', 'en': '', }, }, // HorecagelegenhedenOverzichtPageDataType { 'mgbxk04v': { 'nl': 'Activiteiten', 'en': 'Activiteiten', }, '7x2d53vo': { 'nl': 'Cultuur', 'en': 'Cultuur', }, '07bu84h3': { 'nl': 'Eetgelegenheden', 'en': 'Eetgelegenheden', }, 'yyib9rhy': { 'nl': 'Overnachten', 'en': 'Overnachten', }, 'ttz76cwu': { 'nl': 'Uitgaan', 'en': 'Uitgaan', }, 'mqz8ig8q': { 'nl': 'Verhuur, catering', 'en': 'Verhuur, catering', }, '3qshlxj5': { 'nl': 'Home', 'en': '', }, }, // HorecagelegenhedenOverzichtSortPage { 't070hi8b': { 'nl': 'Uitgaan', 'en': 'Uitgaan', }, '8hepgmal': { 'nl': 'Select...', 'en': '', }, 'af6l6apy': { 'nl': 'Search...', 'en': '', }, 'ghh8wctj': { 'nl': 'Option 1', 'en': '', }, '4wn3tgt9': { 'nl': 'Option 2', 'en': '', }, 'df6v152s': { 'nl': 'Option 3', 'en': '', }, 'goypqo1h': { 'nl': 'Cultuur', 'en': 'Cultuur', }, 'eorww74c': { 'nl': 'Eetgelegenheden', 'en': 'Eetgelegenheden', }, 'vikrjk5s': { 'nl': 'Overnachten', 'en': 'Overnachten', }, '48955ibf': { 'nl': 'Activiteiten', 'en': 'Activiteiten', }, 'onrokcg9': { 'nl': 'Verhuur, catering', 'en': 'Verhuur, catering', }, 'g70lknj3': { 'nl': 'Home', 'en': '', }, }, // wachtwoordVergeten { 'vrbz9a3l': { 'nl': 'Wachtwoord vergeten', 'en': '', }, '503u6v73': { 'nl': 'Vul je gebruikersnaam of e-mailadres in. Je ontvangt een e-mail om je wachtwoord opnieuw in te stellen.', 'en': '', }, 'ush5uxz1': { 'nl': 'Gebruikersnaam of e-mailadres', 'en': '', }, '0gfuq6i7': { 'nl': 'Verstuur', 'en': '', }, 's7n2u93z': { 'nl': 'Home', 'en': '', }, }, // favorieten { 'txq7zl0f': { 'nl': 'Persoonlijke agenda', 'en': '', }, '1y5w12fr': { 'nl': 'Je persoonlijke agenda met evenementen van je favoriete gelegenheden en gemeenten.', 'en': '', }, '9wq117bv': { 'nl': 'Favoriete gemeenten', 'en': '', }, 'o7pt2vls': { 'nl': 'De gemeentes die je hebt gemarkeerd als favoriet.', 'en': '', }, 'ygk8aifq': { 'nl': 'Favoriete Gelegenheden', 'en': '', }, 'gyuds6ee': { 'nl': 'Hello World', 'en': '', }, 'xyig2ny4': { 'nl': 'Home', 'en': '', }, }, // kanweg { '3f7lzegf': { 'nl': 'Home', 'en': '', }, }, // PUitgaantabelKaartComponent { '4lehigdg': { 'nl': ', ', 'en': ', ', }, }, // SelectStateDropDownComponent { 'duloakue': { 'nl': 'Select...', 'en': '', }, 'suwn4gos': { 'nl': 'Search...', 'en': '', }, 'xtp0toaj': { 'nl': 'Option 1', 'en': '', }, 'sfmdjcb4': { 'nl': 'Option 2', 'en': '', }, 'pbmts7dk': { 'nl': 'Option 3', 'en': '', }, '1rva6d4m': { 'nl': 'Select...', 'en': '', }, 'um0h0p25': { 'nl': 'Search...', 'en': '', }, 'fjaz0tsc': { 'nl': 'Option 1', 'en': '', }, '8hcfb8cu': { 'nl': 'Option 2', 'en': '', }, 'cpdux64t': { 'nl': 'Option 3', 'en': '', }, 'p3ia66ku': { 'nl': 'Toepassen', 'en': '', }, }, // drawerComponent { 'j0ompw01': { 'nl': 'Zoek stad', 'en': 'Zoek stad', }, 'm5il5pqx': { 'nl': '', 'en': '', }, '5xqi2sto': { 'nl': 'Home', 'en': 'Home', }, 'zorwzjtq': { 'nl': '', 'en': '', }, '7pacsyhe': { 'nl': 'Favorieten', 'en': 'Home', }, 'm8h5x9ts': { 'nl': '', 'en': '', }, '4u9vsobq': { 'nl': 'Provincie', 'en': 'Provincie', }, 'scozdjf2': { 'nl': '', 'en': '', }, '8luezemw': { 'nl': 'Uitgaan', 'en': 'Uitgaan', }, 'f2n2zs5x': { 'nl': '', 'en': '', }, 'rb8etfad': { 'nl': 'Activiteiten', 'en': 'Activiteiten', }, '9hgqcibm': { 'nl': '', 'en': '', }, 'l4upasn8': { 'nl': 'Cultuur', 'en': 'Cultuur', }, '5unk9wxy': { 'nl': '', 'en': '', }, '0zbg44er': { 'nl': 'Films', 'en': 'Films', }, 'gy0c8dfg': { 'nl': '', 'en': '', }, 'zguubv8h': { 'nl': 'Jeugd', 'en': 'Jeugd', }, 'bmdhe1w3': { 'nl': '', 'en': '', }, 'mqf3caeh': { 'nl': 'Horeca', 'en': 'Horeca', }, 'ypp8cg7h': { 'nl': '', 'en': '', }, 'qoszyexg': { 'nl': 'Gemeente', 'en': 'Gemeente', }, 'dpn5svdo': { 'nl': '', 'en': '', }, 'f2xucb65': { 'nl': 'Uitgaan', 'en': 'Uitgaan', }, '0rcz22fx': { 'nl': '', 'en': '', }, 'aco5j6v5': { 'nl': 'Activiteiten', 'en': 'Activiteiten', }, 'mkcafscy': { 'nl': '', 'en': '', }, 'u6kma8y1': { 'nl': 'Cultuur', 'en': 'Cultuur', }, '6hdsapmc': { 'nl': '', 'en': '', }, 'hpm7mxhj': { 'nl': 'Films', 'en': 'Films', }, 'wfmu8ldt': { 'nl': '', 'en': '', }, 'clxcjmfh': { 'nl': 'Jeugd', 'en': 'Jeugd', }, 'fuiykay7': { 'nl': '', 'en': '', }, 'mk70rozo': { 'nl': 'Horeca', 'en': 'Horeca', }, 'kknwn00s': { 'nl': '', 'en': '', }, 't46xiboh': { 'nl': 'Thuis bezorgen', 'en': 'Thuis bezorgen', }, '18zxga44': { 'nl': '', 'en': '', }, '0xszp35t': { 'nl': 'Mijn Account', 'en': 'Mijn Account', }, 'vmbtb6ah': { 'nl': 'Terug', 'en': '', }, '7qpu1l01': { 'nl': 'v0001', 'en': 'v0001', }, }, // EvenementComponent { 'nghx1743': { 'nl': 'entreetoelichting', 'en': '', }, 'y02m0qh0': { 'nl': '15 euro', 'en': '', }, 'izrkv2a9': { 'nl': 'Website', 'en': '', }, 'lrjms1by': { 'nl': 'Hello World Contactveld', 'en': '', }, }, // EvenementHorecagelegenheid { 'ubuux42u': { 'nl': 'Info', 'en': 'Info', }, 'lo8ciqtb': { 'nl': 'Entree', 'en': '', }, 'au8x5mei': { 'nl': 'Contact', 'en': '', }, '8tvvqu63': { 'nl': 'Facebook', 'en': '', }, 'kp1lfaac': { 'nl': 'Instagram', 'en': '', }, 'ktqsytma': { 'nl': 'X/Twitter', 'en': '', }, 'vkwayrhq': { 'nl': 'Website', 'en': '', }, 'cxpo1x6d': { 'nl': 'Website', 'en': '', }, 'mlojriz0': { 'nl': 'Openingstijden', 'en': 'Openingstijden', }, 'axwdkgtg': { 'nl': 'Hello World', 'en': '', }, '5tdut8bf': { 'nl': 'Bezorgen', 'en': 'Bezorgen', }, }, // EvenementInfo { 'gpbaiwi9': { 'nl': 'Entree: ', 'en': '', }, 'khjv0wcp': { 'nl': 'Website', 'en': '', }, }, // HorecagelegenheidoverzichtKaart { 'ujd0p09x': { 'nl': 'MessageFavoriet...', 'en': '', }, }, // GeenEvenementenComponent { '0zgufytz': { 'nl': 'Geen evenementen gevonden. Kijk bij de provincie of er iets bij u in de buurt is!', 'en': '', }, }, // HeaderButtonsComponent { '17msrach': { 'nl': 'Menu openen', 'en': '', }, 'f8ay39rg': { 'nl': 'Terug', 'en': '', }, }, // HomeUitgaantabelKaartComponent { 's4nkp0pb': { 'nl': ', ', 'en': ', ', }, }, // Miscellaneous { '95e9zpp5': { 'nl': '', 'en': '', }, 'hi047wuv': { 'nl': '', 'en': '', }, '3vfdatr8': { 'nl': '', 'en': '', }, '00waee4o': { 'nl': '', 'en': '', }, 'pv9kzkyy': { 'nl': '', 'en': '', }, 'pnj7ud5u': { 'nl': '', 'en': '', }, '6gi5ggfb': { 'nl': '', 'en': '', }, 'r2ktdanq': { 'nl': '', 'en': '', }, 'baxrlb7e': { 'nl': '', 'en': '', }, '91wp95hv': { 'nl': '', 'en': '', }, '3g8g1qpr': { 'nl': '', 'en': '', }, 'z7adjbl8': { 'nl': '', 'en': '', }, '4mmqjh9z': { 'nl': '', 'en': '', }, '9fvdbrm6': { 'nl': '', 'en': '', }, 'vtu2d65x': { 'nl': '', 'en': '', }, '6653976d': { 'nl': '', 'en': '', }, '16p7r73f': { 'nl': '', 'en': '', }, '35po7r81': { 'nl': '', 'en': '', }, '87zjalze': { 'nl': '', 'en': '', }, 'fikchxg8': { 'nl': '', 'en': '', }, 'rzevhc69': { 'nl': '', 'en': '', }, '6f0en17o': { 'nl': '', 'en': '', }, '5419dptj': { 'nl': '', 'en': '', }, 'xbrp633k': { 'nl': '', 'en': '', }, 'wqfb29ed': { 'nl': '', 'en': '', }, }, ].reduce((a, b) => a..addAll(b));