diff --git a/lib/locale.dart b/lib/locale.dart index dfd4873a9..b1fa71c74 100644 --- a/lib/locale.dart +++ b/lib/locale.dart @@ -22,11 +22,20 @@ Locale localResolutionCallBack(locales, supportedLocales) { } Future getLocale() async { - final String? savedLocale = + final String? savedValue = (await SharedPreferences.getInstance()).getString('locale'); - if (savedLocale != null && - appSupportedLocales.contains(Locale(savedLocale))) { - return Locale(savedLocale); + // if savedLocale is not null and is supported by the app, return it + if (savedValue != null) { + late Locale savedLocale; + if (savedValue.contains('_')) { + final List parts = savedValue.split('_'); + savedLocale = Locale(parts[0], parts[1]); + } else { + savedLocale = Locale(savedValue); + } + if (appSupportedLocales.contains(savedLocale)) { + return savedLocale; + } } return const Locale('en'); } @@ -35,6 +44,11 @@ Future setLocale(Locale locale) async { if (!appSupportedLocales.contains(locale)) { throw Exception('Locale $locale is not supported by the app'); } + final StringBuffer out = StringBuffer(locale.languageCode); + if (locale.countryCode != null && locale.countryCode!.isNotEmpty) { + out.write('_'); + out.write(locale.countryCode); + } await (await SharedPreferences.getInstance()) - .setString('locale', locale.languageCode); + .setString('locale', out.toString()); }