diff --git a/lib/ui/views/settings/settingsFragment/settings_update_language.dart b/lib/ui/views/settings/settingsFragment/settings_update_language.dart index f7b4a2f2..2494a6f4 100644 --- a/lib/ui/views/settings/settingsFragment/settings_update_language.dart +++ b/lib/ui/views/settings/settingsFragment/settings_update_language.dart @@ -34,17 +34,18 @@ class SUpdateLanguage extends BaseViewModel { } Future showLanguagesDialog(BuildContext parentContext) { - final ValueNotifier selectedLanguageCode = ValueNotifier( - '${LocaleSettings.currentLocale.languageCode}-${LocaleSettings.currentLocale.countryCode}', + final ValueNotifier selectedLanguageCode = ValueNotifier( + LocaleSettings.currentLocale, ); - LanguageCodes getLanguageCode(locale) { - return LanguageCodes.fromCode( - '${locale.languageCode}_${locale.countryCode}', + LanguageCodes getLanguageCode(Locale locale) { + return LanguageCodes.fromLocale( + locale, orElse: () => LanguageCodes.fromCode(locale.languageCode), ); } - final currentlyUsedLanguage = getLanguageCode(LocaleSettings.currentLocale); + final currentlyUsedLanguage = + getLanguageCode(LocaleSettings.currentLocale.flutterLocale); // initLang(); // Return a dialog with list for each language supported by the application. @@ -63,38 +64,34 @@ class SUpdateLanguage extends BaseViewModel { child: ListBody( children: [ RadioListTile( - // TODO(Someone): There must've been a better way to do this. title: Text(currentlyUsedLanguage.englishName), subtitle: Text( - '${currentlyUsedLanguage.nativeName} (${LocaleSettings.currentLocale.languageCode}${LocaleSettings.currentLocale.countryCode != null ? '-${LocaleSettings.currentLocale.countryCode}' : ''})', + '${currentlyUsedLanguage.nativeName}\n' + '(${LocaleSettings.currentLocale.languageTag})', ), - value: - '${LocaleSettings.currentLocale.languageCode}-${LocaleSettings.currentLocale.countryCode}' == - selectedLanguageCode.value, + value: LocaleSettings.currentLocale == + selectedLanguageCode.value, groupValue: true, onChanged: (value) { - selectedLanguageCode.value = - '${LocaleSettings.currentLocale.languageCode}-${LocaleSettings.currentLocale.countryCode}'; + selectedLanguageCode.value = LocaleSettings.currentLocale; }, ), ...AppLocale.values .where( - (locale) => - locale.languageCode != currentlyUsedLanguage.code, + (locale) => locale != LocaleSettings.currentLocale, ) .map((locale) { - final languageCode = getLanguageCode(locale); + final languageCode = getLanguageCode(locale.flutterLocale); return RadioListTile( title: Text(languageCode.englishName), subtitle: Text( - '${languageCode.nativeName} (${locale.languageCode}${locale.countryCode != null ? '-${locale.countryCode}' : ''})', + '${languageCode.nativeName}\n' + '(${locale.languageTag})', ), - value: '${locale.languageCode}-${locale.countryCode}' == - selectedLanguageCode.value, + value: locale == selectedLanguageCode.value, groupValue: true, onChanged: (value) { - selectedLanguageCode.value = - '${locale.languageCode}-${locale.countryCode}'; + selectedLanguageCode.value = locale; }, ); }), @@ -113,7 +110,7 @@ class SUpdateLanguage extends BaseViewModel { TextButton( onPressed: () { // TODO(nullcube): Translation will not update until we refresh the page. - updateLocale(selectedLanguageCode.value); + updateLocale(selectedLanguageCode.value.languageTag); Navigator.of(context).pop(); }, child: Text(t.okButton), @@ -133,7 +130,7 @@ class SUpdateLanguageUI extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 20.0), title: t.settingsView.languageLabel, subtitle: - LanguageCodes.fromCode(LocaleSettings.currentLocale.languageCode) + LanguageCodes.fromLocale(LocaleSettings.currentLocale.flutterLocale) .nativeName, onTap: () => _settingViewModel.sUpdateLanguage.showLanguagesDialog(context), diff --git a/pubspec.yaml b/pubspec.yaml index 3c8f0eb3..4ec89a46 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,7 +41,7 @@ dependencies: injectable: ^2.1.1 intl: ^0.18.0 json_annotation: ^4.8.1 - language_code: ^0.4.2 + language_code: ^0.5.1 logcat: git: url: https://github.com/BenjaminHalko/logcat