From b6050edfb83f653872033b676f2fafe76da3533f Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sat, 5 Nov 2022 19:33:11 +0100 Subject: [PATCH] minor fixes --- l10n.yaml | 4 ++- lib/model/filters/coordinate.dart | 3 ++- lib/model/settings/settings.dart | 4 +-- lib/widgets/aves_app.dart | 5 +++- lib/widgets/settings/language/locale.dart | 4 +-- test/model/video/metadata_test.dart | 8 ++++-- test/utils/file_utils_test.dart | 3 ++- test/utils/geo_utils_test.dart | 3 ++- test/utils/time_utils_test.dart | 14 ++++++---- untranslated.json | 32 +++-------------------- 10 files changed, 35 insertions(+), 45 deletions(-) diff --git a/l10n.yaml b/l10n.yaml index 9b7cfce0e..e01189e57 100644 --- a/l10n.yaml +++ b/l10n.yaml @@ -1,4 +1,6 @@ -# cf guide: http://flutter.dev/go/i18n-user-guide +# cf guides: +# http://flutter.dev/go/i18n-user-guide +# https://docs.flutter.dev/development/accessibility-and-localization/internationalization # use defaults to: # - parse ARB files from `lib/l10n` diff --git a/lib/model/filters/coordinate.dart b/lib/model/filters/coordinate.dart index 20dff71da..a10e715be 100644 --- a/lib/model/filters/coordinate.dart +++ b/lib/model/filters/coordinate.dart @@ -4,6 +4,7 @@ import 'package:aves/model/settings/enums/coordinate_format.dart'; import 'package:aves/model/settings/enums/enums.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/theme/icons.dart'; +import 'package:aves/widgets/aves_app.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves_map/aves_map.dart'; import 'package:flutter/material.dart'; @@ -59,7 +60,7 @@ class CoordinateFilter extends CollectionFilter { bool get exclusiveProp => false; @override - String get universalLabel => _formatBounds(lookupAppLocalizations(AppLocalizations.supportedLocales.first), CoordinateFormat.decimal); + String get universalLabel => _formatBounds(lookupAppLocalizations(AvesApp.supportedLocales.first), CoordinateFormat.decimal); @override String getLabel(BuildContext context) => _formatBounds(context.l10n, context.read().coordinateFormat); diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart index b993c6bbf..b90c4d9e6 100644 --- a/lib/model/settings/settings.dart +++ b/lib/model/settings/settings.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'dart:convert'; import 'dart:math'; -import 'package:aves/l10n/l10n.dart'; import 'package:aves/model/actions/entry_actions.dart'; import 'package:aves/model/actions/entry_set_actions.dart'; import 'package:aves/model/filters/filters.dart'; @@ -12,6 +11,7 @@ import 'package:aves/model/settings/enums/map_style.dart'; import 'package:aves/model/source/enums/enums.dart'; import 'package:aves/services/common/optional_event_channel.dart'; import 'package:aves/services/common/services.dart'; +import 'package:aves/widgets/aves_app.dart'; import 'package:aves_map/aves_map.dart'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; @@ -283,7 +283,7 @@ class Settings extends ChangeNotifier { preferredLocales.addAll(_systemLocalesFallback); } } - _appliedLocale = basicLocaleListResolution(preferredLocales, AppLocalizations.supportedLocales); + _appliedLocale = basicLocaleListResolution(preferredLocales, AvesApp.supportedLocales); } return _appliedLocale!; } diff --git a/lib/widgets/aves_app.dart b/lib/widgets/aves_app.dart index d551d1823..915dc4160 100644 --- a/lib/widgets/aves_app.dart +++ b/lib/widgets/aves_app.dart @@ -48,6 +48,9 @@ import 'package:tuple/tuple.dart'; class AvesApp extends StatefulWidget { final AppFlavor flavor; + // temporary exclude locales not ready yet for prime time + static final _unsupportedLocales = {'fa', 'gl', 'nb', 'pl'}.map(Locale.new).toSet(); + static final List supportedLocales = AppLocalizations.supportedLocales.where((v) => !_unsupportedLocales.contains(v)).toList(); static final GlobalKey navigatorKey = GlobalKey(debugLabel: 'app-navigator'); // do not monitor all `ModalRoute`s, which would include popup menus, @@ -225,7 +228,7 @@ class _AvesAppState extends State with WidgetsBindingObserver { themeMode: themeBrightness.appThemeMode, locale: settingsLocale, localizationsDelegates: AppLocalizations.localizationsDelegates, - supportedLocales: AppLocalizations.supportedLocales, + supportedLocales: AvesApp.supportedLocales, // TODO TLAD remove custom scroll behavior when this is fixed: https://github.com/flutter/flutter/issues/82906 scrollBehavior: StretchMaterialScrollBehavior(), ); diff --git a/lib/widgets/settings/language/locale.dart b/lib/widgets/settings/language/locale.dart index 5b04d3e97..1c59db036 100644 --- a/lib/widgets/settings/language/locale.dart +++ b/lib/widgets/settings/language/locale.dart @@ -1,8 +1,8 @@ import 'dart:collection'; -import 'package:aves/l10n/l10n.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/theme/durations.dart'; +import 'package:aves/widgets/aves_app.dart'; import 'package:aves/widgets/common/basic/query_bar.dart'; import 'package:aves/widgets/common/basic/reselectable_radio_list_tile.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; @@ -123,7 +123,7 @@ class _LocaleSelectionPageState extends State { } LinkedHashMap _getLocaleOptions(BuildContext context) { - final displayLocales = AppLocalizations.supportedLocales.map((locale) => MapEntry(locale, LocaleTile.getLocaleName(locale))).toList()..sort((a, b) => compareAsciiUpperCase(a.value, b.value)); + final displayLocales = AvesApp.supportedLocales.map((locale) => MapEntry(locale, LocaleTile.getLocaleName(locale))).toList()..sort((a, b) => compareAsciiUpperCase(a.value, b.value)); return LinkedHashMap.of({ LocaleTile.systemLocaleOption: context.l10n.settingsSystemDefault, diff --git a/test/model/video/metadata_test.dart b/test/model/video/metadata_test.dart index 833621c23..4423b775b 100644 --- a/test/model/video/metadata_test.dart +++ b/test/model/video/metadata_test.dart @@ -3,9 +3,13 @@ import 'package:test/test.dart'; void main() { test('Video date parsing', () { - final localOffset = DateTime.now().timeZoneOffset; + DateTime shiftTimeZoneOffset(DateTime date) { + // local time zone offset may not be the same across time (because of DST), + // so we cannot reliably use `DateTime.now().timeZoneOffset` + return date.add(date.timeZoneOffset); + } - expect(VideoMetadataFormatter.parseVideoDate('2011-05-08T03:46+09:00'), DateTime(2011, 5, 7, 18, 46).add(localOffset).millisecondsSinceEpoch); + expect(VideoMetadataFormatter.parseVideoDate('2011-05-08T03:46+09:00'), shiftTimeZoneOffset(DateTime(2011, 5, 7, 18, 46)).millisecondsSinceEpoch); expect(VideoMetadataFormatter.parseVideoDate('UTC 2021-05-30 19:14:21'), DateTime(2021, 5, 30, 19, 14, 21).millisecondsSinceEpoch); expect(VideoMetadataFormatter.parseVideoDate('2021/10/31 21:23:17'), DateTime(2021, 10, 31, 21, 23, 17).millisecondsSinceEpoch); expect(VideoMetadataFormatter.parseVideoDate('2021-09-10T7:14:49 pmZ'), DateTime(2021, 9, 10, 19, 14, 49).millisecondsSinceEpoch); diff --git a/test/utils/file_utils_test.dart b/test/utils/file_utils_test.dart index 3c6043579..6dea8bdcc 100644 --- a/test/utils/file_utils_test.dart +++ b/test/utils/file_utils_test.dart @@ -1,10 +1,11 @@ import 'package:aves/l10n/l10n.dart'; import 'package:aves/utils/file_utils.dart'; +import 'package:aves/widgets/aves_app.dart'; import 'package:test/test.dart'; void main() { test('format file size', () { - final l10n = lookupAppLocalizations(AppLocalizations.supportedLocales.first); + final l10n = lookupAppLocalizations(AvesApp.supportedLocales.first); final locale = l10n.localeName; expect(formatFileSize(locale, 1024), '1.00 KB'); expect(formatFileSize(locale, 1536), '1.50 KB'); diff --git a/test/utils/geo_utils_test.dart b/test/utils/geo_utils_test.dart index d1ef6c306..8fe3fef49 100644 --- a/test/utils/geo_utils_test.dart +++ b/test/utils/geo_utils_test.dart @@ -1,12 +1,13 @@ import 'package:aves/l10n/l10n.dart'; import 'package:aves/model/settings/enums/coordinate_format.dart'; +import 'package:aves/widgets/aves_app.dart'; import 'package:aves_map/aves_map.dart'; import 'package:latlong2/latlong.dart'; import 'package:test/test.dart'; void main() { test('Decimal degrees to DMS (sexagesimal)', () { - final l10n = lookupAppLocalizations(AppLocalizations.supportedLocales.first); + final l10n = lookupAppLocalizations(AvesApp.supportedLocales.first); expect(ExtraCoordinateFormat.toDMS(l10n, LatLng(37.496667, 127.0275)), ['37° 29′ 48.00″ N', '127° 1′ 39.00″ E']); // Gangnam expect(ExtraCoordinateFormat.toDMS(l10n, LatLng(78.9243503, 11.9230465)), ['78° 55′ 27.66″ N', '11° 55′ 22.97″ E']); // Ny-Ålesund expect(ExtraCoordinateFormat.toDMS(l10n, LatLng(-38.6965891, 175.9830047)), ['38° 41′ 47.72″ S', '175° 58′ 58.82″ E']); // Taupo diff --git a/test/utils/time_utils_test.dart b/test/utils/time_utils_test.dart index 4bc33f228..b3b6c6b87 100644 --- a/test/utils/time_utils_test.dart +++ b/test/utils/time_utils_test.dart @@ -17,13 +17,17 @@ void main() { }); test('Parse dates', () { - final localOffset = DateTime.now().timeZoneOffset; + DateTime shiftTimeZoneOffset(DateTime date) { + // local time zone offset may not be the same across time (because of DST), + // so we cannot reliably use `DateTime.now().timeZoneOffset` + return date.add(date.timeZoneOffset); + } - expect(parseUnknownDateFormat('1600995564713'), DateTime(2020, 9, 25, 0, 59, 24, 713).add(localOffset)); - expect(parseUnknownDateFormat('pre1600995564713suf'), DateTime(2020, 9, 25, 0, 59, 24, 713).add(localOffset)); + expect(parseUnknownDateFormat('1600995564713'), shiftTimeZoneOffset(DateTime(2020, 9, 25, 0, 59, 24, 713))); + expect(parseUnknownDateFormat('pre1600995564713suf'), shiftTimeZoneOffset(DateTime(2020, 9, 25, 0, 59, 24, 713))); - expect(parseUnknownDateFormat('1600995564'), DateTime(2020, 9, 25, 0, 59, 24, 0).add(localOffset)); - expect(parseUnknownDateFormat('pre1600995564suf'), DateTime(2020, 9, 25, 0, 59, 24, 0).add(localOffset)); + expect(parseUnknownDateFormat('1600995564'), shiftTimeZoneOffset(DateTime(2020, 9, 25, 0, 59, 24, 0))); + expect(parseUnknownDateFormat('pre1600995564suf'), shiftTimeZoneOffset(DateTime(2020, 9, 25, 0, 59, 24, 0))); expect(parseUnknownDateFormat('IMG_20210901_142523_783'), DateTime(2021, 9, 1, 14, 25, 23, 783)); expect(parseUnknownDateFormat('Screenshot_20211028-115056_Aves'), DateTime(2021, 10, 28, 11, 50, 56, 0)); diff --git a/untranslated.json b/untranslated.json index 287980953..49894b809 100644 --- a/untranslated.json +++ b/untranslated.json @@ -16,14 +16,7 @@ ], "es": [ - "widgetOpenPageHome", - "widgetOpenPageCollection", - "widgetOpenPageViewer", - "editEntryLocationDialogSetCustom", - "settingsAllowMediaManagement", - "tagEditorSectionPlaceholders", - "tagPlaceholderCountry", - "tagPlaceholderPlace" + "settingsAllowMediaManagement" ], "fa": [ @@ -608,14 +601,6 @@ "filePickerUseThisFolder" ], - "fr": [ - "editEntryLocationDialogSetCustom", - "settingsAllowMediaManagement", - "tagEditorSectionPlaceholders", - "tagPlaceholderCountry", - "tagPlaceholderPlace" - ], - "gl": [ "accessibilityAnimationsRemove", "accessibilityAnimationsKeep", @@ -1089,6 +1074,7 @@ ], "it": [ + "widgetOpenPageCollection", "editEntryLocationDialogSetCustom", "settingsAllowMediaManagement", "tagEditorSectionPlaceholders", @@ -1136,14 +1122,6 @@ "tagPlaceholderPlace" ], - "ko": [ - "editEntryLocationDialogSetCustom", - "settingsAllowMediaManagement", - "tagEditorSectionPlaceholders", - "tagPlaceholderCountry", - "tagPlaceholderPlace" - ], - "nb": [ "videoActionCaptureFrame", "videoActionSelectStreams", @@ -1768,11 +1746,7 @@ ], "ru": [ - "editEntryLocationDialogSetCustom", - "settingsAllowMediaManagement", - "tagEditorSectionPlaceholders", - "tagPlaceholderCountry", - "tagPlaceholderPlace" + "settingsAllowMediaManagement" ], "tr": [