minor fixes
This commit is contained in:
parent
8d2ab89cb4
commit
b6050edfb8
10 changed files with 35 additions and 45 deletions
|
@ -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:
|
# use defaults to:
|
||||||
# - parse ARB files from `lib/l10n`
|
# - parse ARB files from `lib/l10n`
|
||||||
|
|
|
@ -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/enums/enums.dart';
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/theme/icons.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/widgets/common/extensions/build_context.dart';
|
||||||
import 'package:aves_map/aves_map.dart';
|
import 'package:aves_map/aves_map.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
@ -59,7 +60,7 @@ class CoordinateFilter extends CollectionFilter {
|
||||||
bool get exclusiveProp => false;
|
bool get exclusiveProp => false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get universalLabel => _formatBounds(lookupAppLocalizations(AppLocalizations.supportedLocales.first), CoordinateFormat.decimal);
|
String get universalLabel => _formatBounds(lookupAppLocalizations(AvesApp.supportedLocales.first), CoordinateFormat.decimal);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String getLabel(BuildContext context) => _formatBounds(context.l10n, context.read<Settings>().coordinateFormat);
|
String getLabel(BuildContext context) => _formatBounds(context.l10n, context.read<Settings>().coordinateFormat);
|
||||||
|
|
|
@ -2,7 +2,6 @@ import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:aves/l10n/l10n.dart';
|
|
||||||
import 'package:aves/model/actions/entry_actions.dart';
|
import 'package:aves/model/actions/entry_actions.dart';
|
||||||
import 'package:aves/model/actions/entry_set_actions.dart';
|
import 'package:aves/model/actions/entry_set_actions.dart';
|
||||||
import 'package:aves/model/filters/filters.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/model/source/enums/enums.dart';
|
||||||
import 'package:aves/services/common/optional_event_channel.dart';
|
import 'package:aves/services/common/optional_event_channel.dart';
|
||||||
import 'package:aves/services/common/services.dart';
|
import 'package:aves/services/common/services.dart';
|
||||||
|
import 'package:aves/widgets/aves_app.dart';
|
||||||
import 'package:aves_map/aves_map.dart';
|
import 'package:aves_map/aves_map.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
@ -283,7 +283,7 @@ class Settings extends ChangeNotifier {
|
||||||
preferredLocales.addAll(_systemLocalesFallback);
|
preferredLocales.addAll(_systemLocalesFallback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_appliedLocale = basicLocaleListResolution(preferredLocales, AppLocalizations.supportedLocales);
|
_appliedLocale = basicLocaleListResolution(preferredLocales, AvesApp.supportedLocales);
|
||||||
}
|
}
|
||||||
return _appliedLocale!;
|
return _appliedLocale!;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,9 @@ import 'package:tuple/tuple.dart';
|
||||||
class AvesApp extends StatefulWidget {
|
class AvesApp extends StatefulWidget {
|
||||||
final AppFlavor flavor;
|
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<Locale> supportedLocales = AppLocalizations.supportedLocales.where((v) => !_unsupportedLocales.contains(v)).toList();
|
||||||
static final GlobalKey<NavigatorState> navigatorKey = GlobalKey(debugLabel: 'app-navigator');
|
static final GlobalKey<NavigatorState> navigatorKey = GlobalKey(debugLabel: 'app-navigator');
|
||||||
|
|
||||||
// do not monitor all `ModalRoute`s, which would include popup menus,
|
// do not monitor all `ModalRoute`s, which would include popup menus,
|
||||||
|
@ -225,7 +228,7 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
|
||||||
themeMode: themeBrightness.appThemeMode,
|
themeMode: themeBrightness.appThemeMode,
|
||||||
locale: settingsLocale,
|
locale: settingsLocale,
|
||||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
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
|
// TODO TLAD remove custom scroll behavior when this is fixed: https://github.com/flutter/flutter/issues/82906
|
||||||
scrollBehavior: StretchMaterialScrollBehavior(),
|
scrollBehavior: StretchMaterialScrollBehavior(),
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
|
|
||||||
import 'package:aves/l10n/l10n.dart';
|
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/theme/durations.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/query_bar.dart';
|
||||||
import 'package:aves/widgets/common/basic/reselectable_radio_list_tile.dart';
|
import 'package:aves/widgets/common/basic/reselectable_radio_list_tile.dart';
|
||||||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
|
@ -123,7 +123,7 @@ class _LocaleSelectionPageState extends State<LocaleSelectionPage> {
|
||||||
}
|
}
|
||||||
|
|
||||||
LinkedHashMap<Locale, String> _getLocaleOptions(BuildContext context) {
|
LinkedHashMap<Locale, String> _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({
|
return LinkedHashMap.of({
|
||||||
LocaleTile.systemLocaleOption: context.l10n.settingsSystemDefault,
|
LocaleTile.systemLocaleOption: context.l10n.settingsSystemDefault,
|
||||||
|
|
|
@ -3,9 +3,13 @@ import 'package:test/test.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
test('Video date parsing', () {
|
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('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/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);
|
expect(VideoMetadataFormatter.parseVideoDate('2021-09-10T7:14:49 pmZ'), DateTime(2021, 9, 10, 19, 14, 49).millisecondsSinceEpoch);
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import 'package:aves/l10n/l10n.dart';
|
import 'package:aves/l10n/l10n.dart';
|
||||||
import 'package:aves/utils/file_utils.dart';
|
import 'package:aves/utils/file_utils.dart';
|
||||||
|
import 'package:aves/widgets/aves_app.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
test('format file size', () {
|
test('format file size', () {
|
||||||
final l10n = lookupAppLocalizations(AppLocalizations.supportedLocales.first);
|
final l10n = lookupAppLocalizations(AvesApp.supportedLocales.first);
|
||||||
final locale = l10n.localeName;
|
final locale = l10n.localeName;
|
||||||
expect(formatFileSize(locale, 1024), '1.00 KB');
|
expect(formatFileSize(locale, 1024), '1.00 KB');
|
||||||
expect(formatFileSize(locale, 1536), '1.50 KB');
|
expect(formatFileSize(locale, 1536), '1.50 KB');
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
import 'package:aves/l10n/l10n.dart';
|
import 'package:aves/l10n/l10n.dart';
|
||||||
import 'package:aves/model/settings/enums/coordinate_format.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:aves_map/aves_map.dart';
|
||||||
import 'package:latlong2/latlong.dart';
|
import 'package:latlong2/latlong.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
test('Decimal degrees to DMS (sexagesimal)', () {
|
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(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(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
|
expect(ExtraCoordinateFormat.toDMS(l10n, LatLng(-38.6965891, 175.9830047)), ['38° 41′ 47.72″ S', '175° 58′ 58.82″ E']); // Taupo
|
||||||
|
|
|
@ -17,13 +17,17 @@ void main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Parse dates', () {
|
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('1600995564713'), shiftTimeZoneOffset(DateTime(2020, 9, 25, 0, 59, 24, 713)));
|
||||||
expect(parseUnknownDateFormat('pre1600995564713suf'), DateTime(2020, 9, 25, 0, 59, 24, 713).add(localOffset));
|
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('1600995564'), shiftTimeZoneOffset(DateTime(2020, 9, 25, 0, 59, 24, 0)));
|
||||||
expect(parseUnknownDateFormat('pre1600995564suf'), DateTime(2020, 9, 25, 0, 59, 24, 0).add(localOffset));
|
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('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));
|
expect(parseUnknownDateFormat('Screenshot_20211028-115056_Aves'), DateTime(2021, 10, 28, 11, 50, 56, 0));
|
||||||
|
|
|
@ -16,14 +16,7 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
"es": [
|
"es": [
|
||||||
"widgetOpenPageHome",
|
"settingsAllowMediaManagement"
|
||||||
"widgetOpenPageCollection",
|
|
||||||
"widgetOpenPageViewer",
|
|
||||||
"editEntryLocationDialogSetCustom",
|
|
||||||
"settingsAllowMediaManagement",
|
|
||||||
"tagEditorSectionPlaceholders",
|
|
||||||
"tagPlaceholderCountry",
|
|
||||||
"tagPlaceholderPlace"
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"fa": [
|
"fa": [
|
||||||
|
@ -608,14 +601,6 @@
|
||||||
"filePickerUseThisFolder"
|
"filePickerUseThisFolder"
|
||||||
],
|
],
|
||||||
|
|
||||||
"fr": [
|
|
||||||
"editEntryLocationDialogSetCustom",
|
|
||||||
"settingsAllowMediaManagement",
|
|
||||||
"tagEditorSectionPlaceholders",
|
|
||||||
"tagPlaceholderCountry",
|
|
||||||
"tagPlaceholderPlace"
|
|
||||||
],
|
|
||||||
|
|
||||||
"gl": [
|
"gl": [
|
||||||
"accessibilityAnimationsRemove",
|
"accessibilityAnimationsRemove",
|
||||||
"accessibilityAnimationsKeep",
|
"accessibilityAnimationsKeep",
|
||||||
|
@ -1089,6 +1074,7 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
"it": [
|
"it": [
|
||||||
|
"widgetOpenPageCollection",
|
||||||
"editEntryLocationDialogSetCustom",
|
"editEntryLocationDialogSetCustom",
|
||||||
"settingsAllowMediaManagement",
|
"settingsAllowMediaManagement",
|
||||||
"tagEditorSectionPlaceholders",
|
"tagEditorSectionPlaceholders",
|
||||||
|
@ -1136,14 +1122,6 @@
|
||||||
"tagPlaceholderPlace"
|
"tagPlaceholderPlace"
|
||||||
],
|
],
|
||||||
|
|
||||||
"ko": [
|
|
||||||
"editEntryLocationDialogSetCustom",
|
|
||||||
"settingsAllowMediaManagement",
|
|
||||||
"tagEditorSectionPlaceholders",
|
|
||||||
"tagPlaceholderCountry",
|
|
||||||
"tagPlaceholderPlace"
|
|
||||||
],
|
|
||||||
|
|
||||||
"nb": [
|
"nb": [
|
||||||
"videoActionCaptureFrame",
|
"videoActionCaptureFrame",
|
||||||
"videoActionSelectStreams",
|
"videoActionSelectStreams",
|
||||||
|
@ -1768,11 +1746,7 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
"ru": [
|
"ru": [
|
||||||
"editEntryLocationDialogSetCustom",
|
"settingsAllowMediaManagement"
|
||||||
"settingsAllowMediaManagement",
|
|
||||||
"tagEditorSectionPlaceholders",
|
|
||||||
"tagPlaceholderCountry",
|
|
||||||
"tagPlaceholderPlace"
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"tr": [
|
"tr": [
|
||||||
|
|
Loading…
Reference in a new issue