From 94eccbd2f10109bf7e8a6efdffc4784e4c08f184 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sun, 21 Apr 2024 18:59:08 +0200 Subject: [PATCH] #960 option to force using western arabic numerals for dates --- CHANGELOG.md | 1 + lib/l10n/app_en.arb | 1 + lib/model/settings/modules/app.dart | 4 + lib/model/settings/settings.dart | 1 + lib/widgets/aves_app.dart | 30 +---- lib/widgets/settings/language/language.dart | 13 +++ plugins/aves_model/lib/src/settings/keys.dart | 1 + untranslated.json | 105 ++++++++++++++++-- 8 files changed, 118 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 016901ae0..2daf492f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file. ### Added - Cataloguing: identify Apple variant of HDR images +- option to force using western arabic numerals for dates ### Changed diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 935fe211b..f8e52b25f 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -933,6 +933,7 @@ "settingsCoordinateFormatDialogTitle": "Coordinate Format", "settingsUnitSystemTile": "Units", "settingsUnitSystemDialogTitle": "Units", + "settingsForceWesternArabicNumeralsTile": "Force Arabic numerals", "settingsScreenSaverPageTitle": "Screen Saver", diff --git a/lib/model/settings/modules/app.dart b/lib/model/settings/modules/app.dart index 347541582..e3bb24f23 100644 --- a/lib/model/settings/modules/app.dart +++ b/lib/model/settings/modules/app.dart @@ -79,6 +79,10 @@ mixin AppSettings on SettingsAccess { return _appliedLocale!; } + bool get forceWesternArabicNumerals => getBool(SettingKeys.forceWesternArabicNumeralsKey) ?? false; + + set forceWesternArabicNumerals(bool newValue) => set(SettingKeys.forceWesternArabicNumeralsKey, newValue); + int get catalogTimeZoneRawOffsetMillis => getInt(SettingKeys.catalogTimeZoneRawOffsetMillisKey) ?? 0; set catalogTimeZoneRawOffsetMillis(int newValue) => set(SettingKeys.catalogTimeZoneRawOffsetMillisKey, newValue); diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart index a8a96a74b..5e05948ff 100644 --- a/lib/model/settings/settings.dart +++ b/lib/model/settings/settings.dart @@ -375,6 +375,7 @@ class Settings with ChangeNotifier, SettingsAccess, AppSettings, DisplaySettings } case SettingKeys.isInstalledAppAccessAllowedKey: case SettingKeys.isErrorReportingAllowedKey: + case SettingKeys.forceWesternArabicNumeralsKey: case SettingKeys.enableDynamicColorKey: case SettingKeys.enableBlurEffectKey: case SettingKeys.enableBottomNavigationBarKey: diff --git a/lib/widgets/aves_app.dart b/lib/widgets/aves_app.dart index 7abe47c43..5b8d36bc2 100644 --- a/lib/widgets/aves_app.dart +++ b/lib/widgets/aves_app.dart @@ -161,7 +161,6 @@ class _AvesAppState extends State with WidgetsBindingObserver { final ValueNotifier _pageTransitionsBuilderNotifier = ValueNotifier(defaultPageTransitionsBuilder); final ValueNotifier _tvMediaQueryModifierNotifier = ValueNotifier(null); final ValueNotifier _appModeNotifier = ValueNotifier(AppMode.main); - final ValueNotifier _localeOverridesNotifier = ValueNotifier(LocaleOverrides.none); // observers are not registered when using the same list object with different items // the list itself needs to be reassigned @@ -221,7 +220,6 @@ class _AvesAppState extends State with WidgetsBindingObserver { Provider.value(value: _tvRailController), DurationsProvider(), HighlightInfoProvider(), - ListenableProvider>.value(value: _localeOverridesNotifier), ], child: OverlaySupport( child: FutureBuilder( @@ -429,14 +427,9 @@ class _AvesAppState extends State with WidgetsBindingObserver { countrifiedLocale = WidgetsBinding.instance.platformDispatcher.locales.firstWhereOrNull((v) => v.languageCode == languageCode); } - if (appliedLocale.languageCode == 'ar') { - final useNativeDigits = shouldUseNativeDigits(countrifiedLocale); - DateFormat.useNativeDigitsByDefaultFor(appliedLocale.toString(), useNativeDigits); - DateFormat.useNativeDigitsByDefaultFor(countrifiedLocale.toString(), useNativeDigits); - } - _localeOverridesNotifier.value = LocaleOverrides( - countrifiedLocale: countrifiedLocale, - ); + final useNativeDigits = !settings.forceWesternArabicNumerals && shouldUseNativeDigits(countrifiedLocale); + DateFormat.useNativeDigitsByDefaultFor(appliedLocale.toString(), useNativeDigits); + DateFormat.useNativeDigitsByDefaultFor(countrifiedLocale.toString(), useNativeDigits); } Widget _getFirstPage({Map? intentData}) => settings.hasAcceptedTerms ? HomePage(intentData: intentData) : const WelcomePage(); @@ -574,7 +567,7 @@ class _AvesAppState extends State with WidgetsBindingObserver { final settingStream = settings.updateStream; // app settingStream.where((event) => event.key == SettingKeys.isInstalledAppAccessAllowedKey).listen((_) => _applyIsInstalledAppAccessAllowed()); - settingStream.where((event) => event.key == SettingKeys.localeKey).listen((_) => _applyLocale()); + settingStream.where((event) => event.key == SettingKeys.localeKey || event.key == SettingKeys.forceWesternArabicNumeralsKey).listen((_) => _applyLocale()); // display settingStream.where((event) => event.key == SettingKeys.displayRefreshRateModeKey).listen((_) => _applyDisplayRefreshRateMode()); settingStream.where((event) => event.key == SettingKeys.maxBrightnessKey).listen((_) => _applyMaxBrightness()); @@ -654,18 +647,3 @@ class AvesScrollBehavior extends MaterialScrollBehavior { } typedef TvMediaQueryModifier = MediaQueryData Function(MediaQueryData); - -class LocaleOverrides extends Equatable { - final Locale? countrifiedLocale; - - @override - List get props => [countrifiedLocale]; - - const LocaleOverrides({ - required this.countrifiedLocale, - }); - - static const LocaleOverrides none = LocaleOverrides( - countrifiedLocale: null, - ); -} diff --git a/lib/widgets/settings/language/language.dart b/lib/widgets/settings/language/language.dart index f866c9bea..b0e6730b1 100644 --- a/lib/widgets/settings/language/language.dart +++ b/lib/widgets/settings/language/language.dart @@ -33,6 +33,7 @@ class LanguageSection extends SettingsSection { SettingsTileLanguageLocale(), SettingsTileLanguageCoordinateFormat(), SettingsTileLanguageUnitSystem(), + SettingsTileLanguageNumerals(), ]; } @@ -74,3 +75,15 @@ class SettingsTileLanguageUnitSystem extends SettingsTile { dialogTitle: context.l10n.settingsUnitSystemDialogTitle, ); } + +class SettingsTileLanguageNumerals extends SettingsTile { + @override + String title(BuildContext context) => context.l10n.settingsForceWesternArabicNumeralsTile; + + @override + Widget build(BuildContext context) => SettingsSwitchListTile( + selector: (context, s) => s.forceWesternArabicNumerals, + onChanged: (v) => settings.forceWesternArabicNumerals = v, + title: title(context), + ); +} diff --git a/plugins/aves_model/lib/src/settings/keys.dart b/plugins/aves_model/lib/src/settings/keys.dart index e3a7b42c1..4517d18d9 100644 --- a/plugins/aves_model/lib/src/settings/keys.dart +++ b/plugins/aves_model/lib/src/settings/keys.dart @@ -20,6 +20,7 @@ class SettingKeys { static const isInstalledAppAccessAllowedKey = 'is_installed_app_access_allowed'; static const isErrorReportingAllowedKey = 'is_crashlytics_enabled'; static const localeKey = 'locale'; + static const forceWesternArabicNumeralsKey = 'force_western_arabic_numerals'; static const catalogTimeZoneRawOffsetMillisKey = 'catalog_time_zone_raw_offset_millis'; static const tileExtentPrefixKey = 'tile_extent_'; static const tileLayoutPrefixKey = 'tile_layout_'; diff --git a/untranslated.json b/untranslated.json index 86443a233..6713af573 100644 --- a/untranslated.json +++ b/untranslated.json @@ -1,4 +1,12 @@ { + "ar": [ + "settingsForceWesternArabicNumeralsTile" + ], + + "be": [ + "settingsForceWesternArabicNumeralsTile" + ], + "bn": [ "itemCount", "columnCount", @@ -593,6 +601,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -667,7 +676,8 @@ "stopTooltip", "videoActionABRepeat", "videoRepeatActionSetStart", - "videoRepeatActionSetEnd" + "videoRepeatActionSetEnd", + "settingsForceWesternArabicNumeralsTile" ], "ckb": [ @@ -1143,6 +1153,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -1220,7 +1231,8 @@ "videoRepeatActionSetEnd", "collectionActionSetHome", "setHomeCustomCollection", - "settingsThumbnailShowHdrIcon" + "settingsThumbnailShowHdrIcon", + "settingsForceWesternArabicNumeralsTile" ], "da": [ @@ -1842,6 +1854,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -1916,7 +1929,8 @@ "stopTooltip", "videoActionABRepeat", "videoRepeatActionSetStart", - "videoRepeatActionSetEnd" + "videoRepeatActionSetEnd", + "settingsForceWesternArabicNumeralsTile" ], "el": [ @@ -1937,14 +1951,20 @@ "collectionActionSetHome", "setHomeCustomCollection", "settingsThumbnailShowHdrIcon", - "settingsViewerShowHistogram" + "settingsViewerShowHistogram", + "settingsForceWesternArabicNumeralsTile" + ], + + "es": [ + "settingsForceWesternArabicNumeralsTile" ], "eu": [ "stopTooltip", "videoActionABRepeat", "videoRepeatActionSetStart", - "videoRepeatActionSetEnd" + "videoRepeatActionSetEnd", + "settingsForceWesternArabicNumeralsTile" ], "fa": [ @@ -2320,6 +2340,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -2866,6 +2887,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -2936,6 +2958,10 @@ "filePickerUseThisFolder" ], + "fr": [ + "settingsForceWesternArabicNumeralsTile" + ], + "gl": [ "columnCount", "saveCopyButtonLabel", @@ -3423,6 +3449,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -4108,6 +4135,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -4759,6 +4787,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -4829,11 +4858,20 @@ "filePickerUseThisFolder" ], + "hu": [ + "settingsForceWesternArabicNumeralsTile" + ], + + "id": [ + "settingsForceWesternArabicNumeralsTile" + ], + "is": [ "stopTooltip", "videoActionABRepeat", "videoRepeatActionSetStart", - "videoRepeatActionSetEnd" + "videoRepeatActionSetEnd", + "settingsForceWesternArabicNumeralsTile" ], "it": [ @@ -4843,7 +4881,8 @@ "videoRepeatActionSetEnd", "collectionActionSetHome", "setHomeCustomCollection", - "settingsThumbnailShowHdrIcon" + "settingsThumbnailShowHdrIcon", + "settingsForceWesternArabicNumeralsTile" ], "ja": [ @@ -4899,6 +4938,7 @@ "settingsDisablingBinWarningDialogMessage", "settingsAccessibilityShowPinchGestureAlternatives", "settingsDisplayUseTvInterface", + "settingsForceWesternArabicNumeralsTile", "settingsWidgetDisplayedItem", "statsTopStatesSectionTitle", "tagEditorDiscardDialogMessage" @@ -5492,6 +5532,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -5562,6 +5603,10 @@ "filePickerUseThisFolder" ], + "ko": [ + "settingsForceWesternArabicNumeralsTile" + ], + "lt": [ "columnCount", "saveCopyButtonLabel", @@ -5654,6 +5699,7 @@ "settingsDisablingBinWarningDialogMessage", "settingsAccessibilityShowPinchGestureAlternatives", "settingsDisplayUseTvInterface", + "settingsForceWesternArabicNumeralsTile", "statsTopStatesSectionTitle", "tagEditorDiscardDialogMessage", "tagPlaceholderState" @@ -6278,6 +6324,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -6397,6 +6444,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -6494,6 +6542,7 @@ "settingsCollectionBurstPatternsTile", "settingsCollectionBurstPatternsNone", "settingsViewerShowHistogram", + "settingsForceWesternArabicNumeralsTile", "statsTopStatesSectionTitle" ], @@ -6585,6 +6634,7 @@ "settingsDisablingBinWarningDialogMessage", "settingsAccessibilityShowPinchGestureAlternatives", "settingsDisplayUseTvInterface", + "settingsForceWesternArabicNumeralsTile", "settingsWidgetDisplayedItem", "statsTopStatesSectionTitle", "tagEditorDiscardDialogMessage" @@ -6632,6 +6682,7 @@ "settingsHiddenFiltersEmpty", "settingsRemoveAnimationsTile", "settingsRemoveAnimationsDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsWidgetOpenPage", "viewerInfoSearchSuggestionDimensions", "wallpaperUseScrollEffect" @@ -7183,6 +7234,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -7253,11 +7305,24 @@ "filePickerUseThisFolder" ], + "pl": [ + "settingsForceWesternArabicNumeralsTile" + ], + + "pt": [ + "settingsForceWesternArabicNumeralsTile" + ], + "ro": [ "stopTooltip", "videoActionABRepeat", "videoRepeatActionSetStart", - "videoRepeatActionSetEnd" + "videoRepeatActionSetEnd", + "settingsForceWesternArabicNumeralsTile" + ], + + "ru": [ + "settingsForceWesternArabicNumeralsTile" ], "sat": [ @@ -7877,6 +7942,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -7951,7 +8017,8 @@ "stopTooltip", "videoActionABRepeat", "videoRepeatActionSetStart", - "videoRepeatActionSetEnd" + "videoRepeatActionSetEnd", + "settingsForceWesternArabicNumeralsTile" ], "sl": [ @@ -8569,6 +8636,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -8881,6 +8949,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -9289,6 +9358,7 @@ "settingsCoordinateFormatDialogTitle", "settingsUnitSystemTile", "settingsUnitSystemDialogTitle", + "settingsForceWesternArabicNumeralsTile", "settingsScreenSaverPageTitle", "settingsWidgetPageTitle", "settingsWidgetShowOutline", @@ -9359,24 +9429,35 @@ "filePickerUseThisFolder" ], + "tr": [ + "settingsForceWesternArabicNumeralsTile" + ], + + "uk": [ + "settingsForceWesternArabicNumeralsTile" + ], + "vi": [ "stopTooltip", "videoActionABRepeat", "videoRepeatActionSetStart", - "videoRepeatActionSetEnd" + "videoRepeatActionSetEnd", + "settingsForceWesternArabicNumeralsTile" ], "zh": [ "stopTooltip", "videoActionABRepeat", "videoRepeatActionSetStart", - "videoRepeatActionSetEnd" + "videoRepeatActionSetEnd", + "settingsForceWesternArabicNumeralsTile" ], "zh_Hant": [ "stopTooltip", "videoActionABRepeat", "videoRepeatActionSetStart", - "videoRepeatActionSetEnd" + "videoRepeatActionSetEnd", + "settingsForceWesternArabicNumeralsTile" ] }