From 148e5c1231397e6fb2642e01e8dbdef549951697 Mon Sep 17 00:00:00 2001 From: zarzet Date: Sat, 2 May 2026 00:32:41 +0700 Subject: [PATCH] fix: fallback unsupported locales to English Fixes #327 --- lib/app.dart | 54 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index cf0ec25b..c6b12ec0 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -42,6 +42,39 @@ final _routerProvider = Provider((ref) { ); }); +Locale _fallbackLocale(Iterable supportedLocales) { + for (final supportedLocale in supportedLocales) { + if (supportedLocale.languageCode == 'en') { + return supportedLocale; + } + } + return supportedLocales.first; +} + +Locale _resolveSupportedLocale( + Locale? requestedLocale, + Iterable supportedLocales, +) { + if (requestedLocale == null) { + return _fallbackLocale(supportedLocales); + } + + for (final supportedLocale in supportedLocales) { + if (supportedLocale.languageCode == requestedLocale.languageCode && + supportedLocale.countryCode == requestedLocale.countryCode) { + return supportedLocale; + } + } + + for (final supportedLocale in supportedLocales) { + if (supportedLocale.languageCode == requestedLocale.languageCode) { + return supportedLocale; + } + } + + return _fallbackLocale(supportedLocales); +} + class SpotiFLACApp extends ConsumerWidget { final bool disableOverscrollEffects; @@ -83,23 +116,10 @@ class SpotiFLACApp extends ConsumerWidget { routerConfig: router, locale: locale, localeResolutionCallback: (deviceLocale, supportedLocales) { - if (locale != null) return locale; - if (deviceLocale == null) return supportedLocales.first; - - for (var supportedLocale in supportedLocales) { - if (supportedLocale.languageCode == deviceLocale.languageCode && - supportedLocale.countryCode == deviceLocale.countryCode) { - return supportedLocale; - } - } - - for (var supportedLocale in supportedLocales) { - if (supportedLocale.languageCode == deviceLocale.languageCode) { - return supportedLocale; - } - } - - return supportedLocales.first; + return _resolveSupportedLocale( + locale ?? deviceLocale, + supportedLocales, + ); }, localizationsDelegates: const [ AppLocalizations.delegate,