nc-photos/lib/language_util.dart

56 lines
1.9 KiB
Dart
Raw Normal View History

2021-06-23 16:15:25 +08:00
import 'package:flutter/widgets.dart';
import 'package:nc_photos/pref.dart';
class AppLanguage {
2021-08-29 04:58:10 +08:00
const AppLanguage(this.langId, this.nativeName, this.isoName, this.locale);
2021-06-23 16:15:25 +08:00
final int langId;
final String nativeName;
2021-08-29 04:58:10 +08:00
final String? isoName;
2021-07-24 04:05:57 +08:00
final Locale? locale;
2021-06-23 16:15:25 +08:00
}
2021-08-29 16:30:37 +08:00
String getSelectedLanguageName() => _getSelectedLanguage().nativeName;
Locale? getSelectedLocale() => _getSelectedLanguage().locale;
2021-06-23 16:15:25 +08:00
final supportedLanguages = {
2021-08-29 04:58:10 +08:00
_AppLanguageEnum.systemDefault.index: AppLanguage(
_AppLanguageEnum.systemDefault.index, "System default", null, null),
2021-08-02 13:53:13 +08:00
// sorted by alphabetic order of their ISO language names
2021-10-02 03:39:36 +08:00
_AppLanguageEnum.czech.index: AppLanguage(
_AppLanguageEnum.czech.index, "čeština", "Czech", const Locale("cs")),
2021-06-23 16:15:25 +08:00
_AppLanguageEnum.english.index: AppLanguage(
2021-08-29 04:58:10 +08:00
_AppLanguageEnum.english.index, "English", "English", const Locale("en")),
2021-08-05 14:59:04 +08:00
_AppLanguageEnum.french.index: AppLanguage(
2021-08-29 04:58:10 +08:00
_AppLanguageEnum.french.index, "français", "French", const Locale("fr")),
2021-09-13 05:26:38 +08:00
_AppLanguageEnum.german.index: AppLanguage(
_AppLanguageEnum.german.index, "Deutsch", "German", const Locale("de")),
2021-08-29 04:58:10 +08:00
_AppLanguageEnum.greek.index: AppLanguage(
_AppLanguageEnum.greek.index, "ελληνικά", "Greek", const Locale("el")),
2021-08-23 05:02:58 +08:00
_AppLanguageEnum.russian.index: AppLanguage(
2021-08-29 04:58:10 +08:00
_AppLanguageEnum.russian.index, "русский", "Russian", const Locale("ru")),
2021-06-23 16:15:25 +08:00
_AppLanguageEnum.spanish.index: AppLanguage(
2021-08-29 04:58:10 +08:00
_AppLanguageEnum.spanish.index, "Español", "Spanish", const Locale("es")),
2021-06-23 16:15:25 +08:00
};
enum _AppLanguageEnum {
// the order must not be changed
systemDefault,
english,
spanish,
2021-08-02 13:53:13 +08:00
greek,
2021-08-05 14:59:04 +08:00
french,
2021-08-23 05:02:58 +08:00
russian,
2021-09-13 05:26:38 +08:00
german,
2021-10-02 03:39:36 +08:00
czech,
2021-06-23 16:15:25 +08:00
}
2021-08-29 16:30:37 +08:00
AppLanguage _getSelectedLanguage() {
2021-06-23 16:15:25 +08:00
try {
2021-10-28 04:40:54 +08:00
final lang = Pref().getLanguageOr(0);
2021-07-24 04:05:57 +08:00
return supportedLanguages[lang]!;
2021-06-23 16:15:25 +08:00
} catch (_) {
2021-07-24 04:05:57 +08:00
return supportedLanguages[_AppLanguageEnum.systemDefault.index]!;
2021-06-23 16:15:25 +08:00
}
}