2022-08-29 20:38:28 -06:00
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
2022-09-07 13:54:32 -06:00
|
|
|
import 'package:intl/intl_standalone.dart';
|
2022-09-01 14:45:55 -06:00
|
|
|
import 'package:wonders/common_libs.dart';
|
2022-08-29 20:38:28 -06:00
|
|
|
|
|
|
|
class LocaleLogic {
|
2023-01-01 12:28:13 -07:00
|
|
|
final Locale _defaultLocal = Locale('en');
|
|
|
|
|
2022-08-29 20:38:28 -06:00
|
|
|
AppLocalizations? _strings;
|
|
|
|
AppLocalizations get strings => _strings!;
|
|
|
|
bool get isLoaded => _strings != null;
|
2022-09-06 16:31:22 -06:00
|
|
|
bool get isEnglish => strings.localeName == 'en';
|
|
|
|
|
2022-08-29 20:38:28 -06:00
|
|
|
Future<void> load() async {
|
2023-01-01 12:28:13 -07:00
|
|
|
Locale locale = _defaultLocal;
|
2023-07-11 12:07:40 -06:00
|
|
|
final localeCode = settingsLogic.currentLocale.value ?? await findSystemLocale();
|
|
|
|
locale = Locale(localeCode.split('_')[0]);
|
2022-08-29 20:38:28 -06:00
|
|
|
if (kDebugMode) {
|
2023-01-01 12:28:13 -07:00
|
|
|
// locale = Locale('zh'); // uncomment to test chinese
|
2022-08-29 20:38:28 -06:00
|
|
|
}
|
2022-08-30 09:54:53 -06:00
|
|
|
if (AppLocalizations.supportedLocales.contains(locale) == false) {
|
2023-01-01 12:28:13 -07:00
|
|
|
locale = _defaultLocal;
|
2022-08-30 09:54:53 -06:00
|
|
|
}
|
2023-01-01 12:28:13 -07:00
|
|
|
|
2022-09-01 14:45:55 -06:00
|
|
|
settingsLogic.currentLocale.value = locale.languageCode;
|
2022-08-29 20:38:28 -06:00
|
|
|
_strings = await AppLocalizations.delegate.load(locale);
|
|
|
|
}
|
2022-09-01 14:45:55 -06:00
|
|
|
|
2022-09-08 12:14:28 -06:00
|
|
|
Future<void> loadIfChanged(Locale locale) async {
|
|
|
|
bool didChange = _strings?.localeName != locale.languageCode;
|
|
|
|
if (didChange && AppLocalizations.supportedLocales.contains(locale)) {
|
2022-09-01 14:45:55 -06:00
|
|
|
_strings = await AppLocalizations.delegate.load(locale);
|
|
|
|
}
|
|
|
|
}
|
2022-08-29 20:38:28 -06:00
|
|
|
}
|