mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-03-05 14:58:54 +01:00
Simplify localized string access
This commit is contained in:
parent
2472f839e8
commit
bbb9eb14be
30 changed files with 250 additions and 301 deletions
8
lib/app_localizations.dart
Normal file
8
lib/app_localizations.dart
Normal file
|
@ -0,0 +1,8 @@
|
|||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
/// Simplify localized string access
|
||||
class L10n {
|
||||
static AppLocalizations of(BuildContext context) =>
|
||||
AppLocalizations.of(context)!;
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/exception.dart';
|
||||
|
||||
/// Convert an exception to a user-facing string
|
||||
|
@ -10,16 +10,16 @@ import 'package:nc_photos/exception.dart';
|
|||
String toUserString(dynamic exception, BuildContext context) {
|
||||
if (exception is ApiException) {
|
||||
if (exception.response.statusCode == 401) {
|
||||
return AppLocalizations.of(context)!.errorUnauthenticated;
|
||||
return L10n.of(context).errorUnauthenticated;
|
||||
} else if (exception.response.statusCode == 423) {
|
||||
return AppLocalizations.of(context)!.errorLocked;
|
||||
return L10n.of(context).errorLocked;
|
||||
} else if (exception.response.statusCode == 500) {
|
||||
return AppLocalizations.of(context)!.errorServerError;
|
||||
return L10n.of(context).errorServerError;
|
||||
}
|
||||
} else if (exception is SocketException) {
|
||||
return AppLocalizations.of(context)!.errorDisconnected;
|
||||
return L10n.of(context).errorDisconnected;
|
||||
} else if (exception is InvalidBaseUrlException) {
|
||||
return AppLocalizations.of(context)!.errorInvalidBaseUrl;
|
||||
return L10n.of(context).errorInvalidBaseUrl;
|
||||
}
|
||||
return exception.toString();
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/exception.dart';
|
||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||
|
@ -23,7 +23,7 @@ class ShareHandler {
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => ProcessingDialog(
|
||||
text: AppLocalizations.of(context)!.shareDownloadingDialogContent),
|
||||
text: L10n.of(context).shareDownloadingDialogContent),
|
||||
);
|
||||
final results = <Tuple2<File, dynamic>>[];
|
||||
for (final f in files) {
|
||||
|
@ -33,8 +33,8 @@ class ShareHandler {
|
|||
} on PermissionException catch (_) {
|
||||
_log.warning("[shareFiles] Permission not granted");
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.downloadFailureNoPermissionNotification),
|
||||
content:
|
||||
Text(L10n.of(context).downloadFailureNoPermissionNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
// dismiss the dialog
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||
import 'package:nc_photos/k.dart' as k;
|
||||
import 'package:nc_photos/pref.dart';
|
||||
|
@ -48,7 +48,7 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
|||
Icons.close,
|
||||
color: AppTheme.getSecondaryTextColor(context),
|
||||
),
|
||||
tooltip: AppLocalizations.of(context)!.deleteTooltip,
|
||||
tooltip: L10n.of(context).deleteTooltip,
|
||||
onPressed: () => _onRemoveItemPressed(a),
|
||||
),
|
||||
),
|
||||
|
@ -63,7 +63,7 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
|||
..pushNamed(SignIn.routeName);
|
||||
},
|
||||
child: Tooltip(
|
||||
message: AppLocalizations.of(context)!.addServerTooltip,
|
||||
message: L10n.of(context).addServerTooltip,
|
||||
child: Center(
|
||||
child: Icon(
|
||||
Icons.add,
|
||||
|
@ -89,7 +89,7 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
|||
Icons.edit,
|
||||
color: AppTheme.getSecondaryTextColor(context),
|
||||
),
|
||||
tooltip: AppLocalizations.of(context)!.editTooltip,
|
||||
tooltip: L10n.of(context).editTooltip,
|
||||
onPressed: () => _onEditPressed(),
|
||||
),
|
||||
),
|
||||
|
@ -112,8 +112,8 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
|||
_accounts = Pref.inst().getAccounts()!;
|
||||
});
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.removeServerSuccessNotification(account.url)),
|
||||
content:
|
||||
Text(L10n.of(context).removeServerSuccessNotification(account.url)),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
} catch (e) {
|
||||
|
@ -143,8 +143,8 @@ class _AccountPickerDialogState extends State<AccountPickerDialog> {
|
|||
// the app passwords are unique to each entry, but just in case
|
||||
Navigator.of(context).pop();
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.editAccountConflictFailureNotification),
|
||||
content:
|
||||
Text(L10n.of(context).editAccountConflictFailureNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
return;
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/iterable_extension.dart';
|
||||
import 'package:nc_photos/k.dart' as k;
|
||||
|
@ -86,7 +86,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
|
|||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
AppLocalizations.of(context)!.albumDirPickerHeaderText,
|
||||
L10n.of(context).albumDirPickerHeaderText,
|
||||
style: Theme.of(context).textTheme.headline5,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
|
@ -94,7 +94,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
|
|||
Align(
|
||||
alignment: AlignmentDirectional.topStart,
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.albumDirPickerSubHeaderText,
|
||||
L10n.of(context).albumDirPickerSubHeaderText,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
@ -117,7 +117,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
|
|||
),
|
||||
ElevatedButton(
|
||||
onPressed: () => _onConfirmPressed(context),
|
||||
child: Text(AppLocalizations.of(context)!.confirmButtonLabel),
|
||||
child: Text(L10n.of(context).confirmButtonLabel),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -131,8 +131,7 @@ class _AlbumDirPickerState extends State<AlbumDirPicker>
|
|||
final picked = getPickedDirs();
|
||||
if (picked.isEmpty) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!.albumDirPickerListEmptyNotification),
|
||||
content: Text(L10n.of(context).albumDirPickerListEmptyNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
} else {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/bloc/list_importable_album.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/album/cover_provider.dart';
|
||||
|
@ -102,7 +102,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
|
|||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
AppLocalizations.of(context)!.albumImporterHeaderText,
|
||||
L10n.of(context).albumImporterHeaderText,
|
||||
style: Theme.of(context).textTheme.headline5,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
|
@ -110,7 +110,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
|
|||
Align(
|
||||
alignment: AlignmentDirectional.topStart,
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.albumImporterSubHeaderText,
|
||||
L10n.of(context).albumImporterSubHeaderText,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
@ -145,7 +145,7 @@ class _AlbumImporterState extends State<AlbumImporter> {
|
|||
),
|
||||
ElevatedButton(
|
||||
onPressed: () => _onImportPressed(context),
|
||||
child: Text(AppLocalizations.of(context)!.importButtonLabel),
|
||||
child: Text(L10n.of(context).importButtonLabel),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -217,8 +217,8 @@ class _AlbumImporterState extends State<AlbumImporter> {
|
|||
showDialog(
|
||||
barrierDismissible: false,
|
||||
context: context,
|
||||
builder: (context) => ProcessingDialog(
|
||||
text: AppLocalizations.of(context)!.albumImporterProgressText),
|
||||
builder: (context) =>
|
||||
ProcessingDialog(text: L10n.of(context).albumImporterProgressText),
|
||||
);
|
||||
try {
|
||||
await _createAllAlbums(context);
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:kiwi/kiwi.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/bloc/list_album.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/album/provider.dart';
|
||||
|
@ -81,7 +81,7 @@ class _AlbumPickerDialogState extends State<AlbumPickerDialog> {
|
|||
SimpleDialogOption(
|
||||
onPressed: () => _onNewAlbumPressed(context),
|
||||
child: Tooltip(
|
||||
message: AppLocalizations.of(context)!.createAlbumTooltip,
|
||||
message: L10n.of(context).createAlbumTooltip,
|
||||
child: Center(
|
||||
child: Icon(
|
||||
Icons.add,
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/bloc/album_search.dart';
|
||||
import 'package:nc_photos/bloc/album_search_suggestion.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
|
@ -17,8 +17,7 @@ import 'package:nc_photos/widget/builder/album_grid_item_builder.dart';
|
|||
class AlbumSearchDelegate extends SearchDelegate {
|
||||
AlbumSearchDelegate(BuildContext context, this.account)
|
||||
: super(
|
||||
searchFieldLabel:
|
||||
AppLocalizations.of(context)!.albumSearchTextFieldHint,
|
||||
searchFieldLabel: L10n.of(context).albumSearchTextFieldHint,
|
||||
) {
|
||||
final fileRepo = FileRepo(FileCachedDataSource());
|
||||
final albumRepo = AlbumRepo(AlbumCachedDataSource());
|
||||
|
@ -38,7 +37,7 @@ class AlbumSearchDelegate extends SearchDelegate {
|
|||
return [
|
||||
IconButton(
|
||||
icon: Icon(Icons.clear),
|
||||
tooltip: AppLocalizations.of(context)!.clearTooltip,
|
||||
tooltip: L10n.of(context).clearTooltip,
|
||||
onPressed: () {
|
||||
query = "";
|
||||
},
|
||||
|
@ -88,7 +87,7 @@ class AlbumSearchDelegate extends SearchDelegate {
|
|||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
AppLocalizations.of(context)!.listNoResultsText,
|
||||
L10n.of(context).listNoResultsText,
|
||||
style: const TextStyle(fontSize: 24),
|
||||
),
|
||||
],
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/album/item.dart';
|
||||
import 'package:nc_photos/entity/album/provider.dart';
|
||||
|
@ -107,8 +107,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
|||
|
||||
if (!SessionStorage().hasShowDragRearrangeNotification) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!.albumEditDragRearrangeNotification),
|
||||
content: Text(L10n.of(context).albumEditDragRearrangeNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
SessionStorage().hasShowDragRearrangeNotification = true;
|
||||
|
@ -230,14 +229,14 @@ class _AlbumViewerState extends State<AlbumViewer>
|
|||
if (platform_k.isAndroid)
|
||||
IconButton(
|
||||
icon: const Icon(Icons.share),
|
||||
tooltip: AppLocalizations.of(context)!.shareSelectedTooltip,
|
||||
tooltip: L10n.of(context).shareSelectedTooltip,
|
||||
onPressed: () {
|
||||
_onSelectionAppBarSharePressed(context);
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.remove),
|
||||
tooltip: AppLocalizations.of(context)!.removeSelectedFromAlbumTooltip,
|
||||
tooltip: L10n.of(context).removeSelectedFromAlbumTooltip,
|
||||
onPressed: () {
|
||||
_onSelectionAppBarRemovePressed();
|
||||
},
|
||||
|
@ -249,12 +248,12 @@ class _AlbumViewerState extends State<AlbumViewer>
|
|||
return buildEditAppBar(context, widget.account, widget.album, actions: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.text_fields),
|
||||
tooltip: AppLocalizations.of(context)!.albumAddTextTooltip,
|
||||
tooltip: L10n.of(context).albumAddTextTooltip,
|
||||
onPressed: _onEditAppBarAddTextPressed,
|
||||
),
|
||||
IconButton(
|
||||
icon: Icon(Icons.sort_by_alpha),
|
||||
tooltip: AppLocalizations.of(context)!.sortTooltip,
|
||||
tooltip: L10n.of(context).sortTooltip,
|
||||
onPressed: _onEditAppBarSortPressed,
|
||||
),
|
||||
]);
|
||||
|
@ -282,8 +281,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
|||
.toList();
|
||||
if (selected.isEmpty) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content:
|
||||
Text(AppLocalizations.of(context)!.shareSelectedEmptyNotification),
|
||||
content: Text(L10n.of(context).shareSelectedEmptyNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
return;
|
||||
|
@ -312,7 +310,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
|||
);
|
||||
UpdateAlbum(albumRepo)(widget.account, newAlbum).then((_) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.removeSelectedFromAlbumSuccessNotification(
|
||||
selectedIndexes.length)),
|
||||
duration: k.snackBarDurationNormal,
|
||||
|
@ -327,7 +325,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
|||
stacktrace);
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
"${AppLocalizations.of(context)!.removeSelectedFromAlbumFailureNotification}: "
|
||||
"${L10n.of(context).removeSelectedFromAlbumFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
|
@ -342,10 +340,10 @@ class _AlbumViewerState extends State<AlbumViewer>
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => FancyOptionPicker(
|
||||
title: AppLocalizations.of(context)!.sortOptionDialogTitle,
|
||||
title: L10n.of(context).sortOptionDialogTitle,
|
||||
items: [
|
||||
FancyOptionPickerItem(
|
||||
label: AppLocalizations.of(context)!.sortOptionTimeAscendingLabel,
|
||||
label: L10n.of(context).sortOptionTimeAscendingLabel,
|
||||
isSelected: sortProvider is AlbumTimeSortProvider &&
|
||||
sortProvider.isAscending,
|
||||
onSelect: () {
|
||||
|
@ -354,7 +352,7 @@ class _AlbumViewerState extends State<AlbumViewer>
|
|||
},
|
||||
),
|
||||
FancyOptionPickerItem(
|
||||
label: AppLocalizations.of(context)!.sortOptionTimeDescendingLabel,
|
||||
label: L10n.of(context).sortOptionTimeDescendingLabel,
|
||||
isSelected: sortProvider is AlbumTimeSortProvider &&
|
||||
!sortProvider.isAscending,
|
||||
onSelect: () {
|
||||
|
@ -878,7 +876,7 @@ class _EditLabelListItem extends _LabelListItem {
|
|||
end: 0,
|
||||
child: IconButton(
|
||||
icon: Icon(Icons.edit),
|
||||
tooltip: AppLocalizations.of(context)!.editTooltip,
|
||||
tooltip: L10n.of(context).editTooltip,
|
||||
onPressed: onEditPressed,
|
||||
),
|
||||
),
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/api/api.dart';
|
||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/pref.dart';
|
||||
|
@ -55,7 +55,7 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
|||
actions: [
|
||||
PopupMenuButton(
|
||||
icon: const Icon(Icons.photo_size_select_large),
|
||||
tooltip: AppLocalizations.of(context)!.zoomTooltip,
|
||||
tooltip: L10n.of(context).zoomTooltip,
|
||||
itemBuilder: (context) => [
|
||||
PopupMenuZoom(
|
||||
initialValue: _thumbZoomLevel,
|
||||
|
@ -76,7 +76,7 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
|||
itemBuilder: (context) => [
|
||||
PopupMenuItem(
|
||||
value: -1,
|
||||
child: Text(AppLocalizations.of(context)!.editAlbumMenuLabel),
|
||||
child: Text(L10n.of(context).editAlbumMenuLabel),
|
||||
),
|
||||
...(menuItemBuilder?.call(context) ?? []),
|
||||
],
|
||||
|
@ -117,8 +117,8 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
|||
});
|
||||
},
|
||||
),
|
||||
title: Text(AppLocalizations.of(context)!
|
||||
.selectionAppBarTitle(selectedListItems.length)),
|
||||
title: Text(
|
||||
L10n.of(context).selectionAppBarTitle(selectedListItems.length)),
|
||||
actions: actions,
|
||||
),
|
||||
);
|
||||
|
@ -138,13 +138,13 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
|||
background: _getAppBarCover(context, account),
|
||||
title: TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText: AppLocalizations.of(context)!.nameInputHint,
|
||||
hintText: L10n.of(context).nameInputHint,
|
||||
),
|
||||
validator: (value) {
|
||||
if (value?.isNotEmpty == true) {
|
||||
return null;
|
||||
} else {
|
||||
return AppLocalizations.of(context)!.albumNameInputInvalidEmpty;
|
||||
return L10n.of(context).albumNameInputInvalidEmpty;
|
||||
}
|
||||
},
|
||||
onSaved: (value) {
|
||||
|
@ -164,7 +164,7 @@ mixin AlbumViewerMixin<T extends StatefulWidget>
|
|||
leading: IconButton(
|
||||
icon: const Icon(Icons.check),
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
tooltip: AppLocalizations.of(context)!.doneButtonTooltip,
|
||||
tooltip: L10n.of(context).doneButtonTooltip,
|
||||
onPressed: () {
|
||||
if (validateEditMode()) {
|
||||
setState(() {
|
||||
|
|
|
@ -2,11 +2,11 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/bloc/scan_dir.dart';
|
||||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/entity/file/data_source.dart';
|
||||
|
@ -148,12 +148,12 @@ class _ArchiveViewerState extends State<ArchiveViewer>
|
|||
});
|
||||
},
|
||||
),
|
||||
title: Text(AppLocalizations.of(context)!
|
||||
.selectionAppBarTitle(selectedListItems.length)),
|
||||
title: Text(
|
||||
L10n.of(context).selectionAppBarTitle(selectedListItems.length)),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.unarchive),
|
||||
tooltip: AppLocalizations.of(context)!.unarchiveSelectedTooltip,
|
||||
tooltip: L10n.of(context).unarchiveSelectedTooltip,
|
||||
onPressed: () {
|
||||
_onSelectionAppBarUnarchivePressed();
|
||||
},
|
||||
|
@ -165,12 +165,12 @@ class _ArchiveViewerState extends State<ArchiveViewer>
|
|||
|
||||
Widget _buildNormalAppBar(BuildContext context) {
|
||||
return SliverAppBar(
|
||||
title: Text(AppLocalizations.of(context)!.albumArchiveLabel),
|
||||
title: Text(L10n.of(context).albumArchiveLabel),
|
||||
floating: true,
|
||||
actions: [
|
||||
PopupMenuButton(
|
||||
icon: const Icon(Icons.photo_size_select_large),
|
||||
tooltip: AppLocalizations.of(context)!.zoomTooltip,
|
||||
tooltip: L10n.of(context).zoomTooltip,
|
||||
itemBuilder: (context) => [
|
||||
PopupMenuZoom(
|
||||
initialValue: _thumbZoomLevel,
|
||||
|
@ -212,7 +212,7 @@ class _ArchiveViewerState extends State<ArchiveViewer>
|
|||
|
||||
Future<void> _onSelectionAppBarUnarchivePressed() async {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.unarchiveSelectedProcessingNotification(selectedListItems.length)),
|
||||
duration: k.snackBarDurationShort,
|
||||
));
|
||||
|
@ -240,13 +240,12 @@ class _ArchiveViewerState extends State<ArchiveViewer>
|
|||
}
|
||||
if (failures.isEmpty) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!.unarchiveSelectedSuccessNotification),
|
||||
content: Text(L10n.of(context).unarchiveSelectedSuccessNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
} else {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.unarchiveSelectedFailureNotification(failures.length)),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/api/api.dart';
|
||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/album/provider.dart';
|
||||
import 'package:nc_photos/theme.dart';
|
||||
|
@ -24,7 +24,7 @@ class AlbumGridItemBuilder {
|
|||
var subtitle = "";
|
||||
String? subtitle2;
|
||||
if (album.provider is AlbumStaticProvider) {
|
||||
subtitle = AppLocalizations.of(context)!
|
||||
subtitle = L10n.of(context)
|
||||
.albumSize(AlbumStaticProvider.of(album).items.length);
|
||||
} else if (album.provider is AlbumDirProvider) {
|
||||
final provider = album.provider as AlbumDirProvider;
|
||||
|
|
|
@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/bloc/app_password_exchange.dart';
|
||||
import 'package:nc_photos/exception.dart';
|
||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||
|
@ -86,8 +86,7 @@ class _ConnectState extends State<Connect> {
|
|||
color: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
Text(
|
||||
AppLocalizations.of(context)!
|
||||
.connectingToServer(widget.account.url),
|
||||
L10n.of(context).connectingToServer(widget.account.url),
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.headline6,
|
||||
)
|
||||
|
@ -110,7 +109,7 @@ class _ConnectState extends State<Connect> {
|
|||
} else if (state.exception is ApiException &&
|
||||
(state.exception as ApiException).response.statusCode == 401) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!.errorWrongPassword),
|
||||
content: Text(L10n.of(context).errorWrongPassword),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
Navigator.of(context).pop(null);
|
||||
|
@ -128,9 +127,8 @@ class _ConnectState extends State<Connect> {
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(AppLocalizations.of(context)!.serverCertErrorDialogTitle),
|
||||
content:
|
||||
Text(AppLocalizations.of(context)!.serverCertErrorDialogContent),
|
||||
title: Text(L10n.of(context).serverCertErrorDialogTitle),
|
||||
content: Text(L10n.of(context).serverCertErrorDialogContent),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
|
@ -142,7 +140,7 @@ class _ConnectState extends State<Connect> {
|
|||
onPressed: () {
|
||||
Navigator.of(context).pop(true);
|
||||
},
|
||||
child: Text(AppLocalizations.of(context)!.advancedButtonLabel),
|
||||
child: Text(L10n.of(context).advancedButtonLabel),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -154,11 +152,10 @@ class _ConnectState extends State<Connect> {
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(AppLocalizations.of(context)!.whitelistCertDialogTitle),
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.whitelistCertDialogContent(
|
||||
SelfSignedCertManager().getLastBadCertHost(),
|
||||
SelfSignedCertManager().getLastBadCertFingerprint())),
|
||||
title: Text(L10n.of(context).whitelistCertDialogTitle),
|
||||
content: Text(L10n.of(context).whitelistCertDialogContent(
|
||||
SelfSignedCertManager().getLastBadCertHost(),
|
||||
SelfSignedCertManager().getLastBadCertFingerprint())),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
|
@ -170,8 +167,7 @@ class _ConnectState extends State<Connect> {
|
|||
onPressed: () {
|
||||
Navigator.of(context).pop(true);
|
||||
},
|
||||
child:
|
||||
Text(AppLocalizations.of(context)!.whitelistCertButtonLabel),
|
||||
child: Text(L10n.of(context).whitelistCertButtonLabel),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/bloc/ls_dir.dart';
|
||||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||
|
@ -99,8 +99,7 @@ mixin DirPickerMixin<T extends StatefulWidget> on State<T> {
|
|||
return ListTile(
|
||||
dense: true,
|
||||
leading: const SizedBox(width: 24),
|
||||
title: Text(
|
||||
AppLocalizations.of(context)!.rootPickerNavigateUpItemText),
|
||||
title: Text(L10n.of(context).rootPickerNavigateUpItemText),
|
||||
onTap: () {
|
||||
try {
|
||||
_navigateInto(File(path: path.dirname(_currentPath)));
|
||||
|
@ -283,8 +282,8 @@ mixin DirPickerMixin<T extends StatefulWidget> on State<T> {
|
|||
_picks.removeWhere((element) => identical(element, parent));
|
||||
} catch (_) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.rootPickerUnpickFailureNotification)));
|
||||
content:
|
||||
Text(L10n.of(context).rootPickerUnpickFailureNotification)));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/album/cover_provider.dart';
|
||||
import 'package:nc_photos/entity/album/item.dart';
|
||||
|
@ -250,7 +250,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
menuItemBuilder: (context) => [
|
||||
PopupMenuItem(
|
||||
value: _menuValueConvertBasic,
|
||||
child: Text(AppLocalizations.of(context)!.convertBasicAlbumMenuLabel),
|
||||
child: Text(L10n.of(context).convertBasicAlbumMenuLabel),
|
||||
),
|
||||
],
|
||||
onSelectedMenuItem: (option) {
|
||||
|
@ -272,7 +272,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
if (platform_k.isAndroid)
|
||||
IconButton(
|
||||
icon: const Icon(Icons.share),
|
||||
tooltip: AppLocalizations.of(context)!.shareSelectedTooltip,
|
||||
tooltip: L10n.of(context).shareSelectedTooltip,
|
||||
onPressed: () {
|
||||
_onSelectionAppBarSharePressed(context);
|
||||
},
|
||||
|
@ -282,7 +282,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
itemBuilder: (context) => [
|
||||
PopupMenuItem(
|
||||
value: _SelectionAppBarOption.delete,
|
||||
child: Text(AppLocalizations.of(context)!.deleteSelectedTooltip),
|
||||
child: Text(L10n.of(context).deleteSelectedTooltip),
|
||||
),
|
||||
],
|
||||
onSelected: (option) {
|
||||
|
@ -298,7 +298,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
return buildEditAppBar(context, widget.account, widget.album, actions: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.sort_by_alpha),
|
||||
tooltip: AppLocalizations.of(context)!.sortTooltip,
|
||||
tooltip: L10n.of(context).sortTooltip,
|
||||
onPressed: _onEditAppBarSortPressed,
|
||||
),
|
||||
]);
|
||||
|
@ -322,10 +322,9 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(AppLocalizations.of(context)!
|
||||
.convertBasicAlbumConfirmationDialogTitle),
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.convertBasicAlbumConfirmationDialogContent),
|
||||
title: Text(L10n.of(context).convertBasicAlbumConfirmationDialogTitle),
|
||||
content:
|
||||
Text(L10n.of(context).convertBasicAlbumConfirmationDialogContent),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
|
@ -356,8 +355,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
),
|
||||
).then((value) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.convertBasicAlbumSuccessNotification),
|
||||
content: Text(L10n.of(context).convertBasicAlbumSuccessNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
if (mounted) {
|
||||
|
@ -391,7 +389,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
|
||||
void _onSelectionAppBarDeletePressed() async {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.deleteSelectedProcessingNotification(selectedListItems.length)),
|
||||
duration: k.snackBarDurationShort,
|
||||
));
|
||||
|
@ -421,13 +419,12 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
|
||||
if (failures.isEmpty) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!.deleteSelectedSuccessNotification),
|
||||
content: Text(L10n.of(context).deleteSelectedSuccessNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
} else {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.deleteSelectedFailureNotification(failures.length)),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
|
@ -448,10 +445,10 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => FancyOptionPicker(
|
||||
title: AppLocalizations.of(context)!.sortOptionDialogTitle,
|
||||
title: L10n.of(context).sortOptionDialogTitle,
|
||||
items: [
|
||||
FancyOptionPickerItem(
|
||||
label: AppLocalizations.of(context)!.sortOptionTimeAscendingLabel,
|
||||
label: L10n.of(context).sortOptionTimeAscendingLabel,
|
||||
isSelected: sortProvider is AlbumTimeSortProvider &&
|
||||
sortProvider.isAscending,
|
||||
onSelect: () {
|
||||
|
@ -460,7 +457,7 @@ class _DynamicAlbumViewerState extends State<DynamicAlbumViewer>
|
|||
},
|
||||
),
|
||||
FancyOptionPickerItem(
|
||||
label: AppLocalizations.of(context)!.sortOptionTimeDescendingLabel,
|
||||
label: L10n.of(context).sortOptionTimeDescendingLabel,
|
||||
isSelected: sortProvider is AlbumTimeSortProvider &&
|
||||
!sortProvider.isAscending,
|
||||
onSelect: () {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/k.dart' as k;
|
||||
import 'package:nc_photos/theme.dart';
|
||||
import 'package:nc_photos/widget/home_albums.dart';
|
||||
|
@ -52,11 +52,11 @@ class _HomeState extends State<Home> {
|
|||
items: <BottomNavigationBarItem>[
|
||||
BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.photo_outlined),
|
||||
label: AppLocalizations.of(context)!.photosTabLabel,
|
||||
label: L10n.of(context).photosTabLabel,
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.photo_album_outlined),
|
||||
label: AppLocalizations.of(context)!.albumsTabLabel,
|
||||
label: L10n.of(context).albumsTabLabel,
|
||||
),
|
||||
],
|
||||
currentIndex: _nextPage,
|
||||
|
|
|
@ -2,11 +2,11 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:kiwi/kiwi.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/bloc/list_album.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/album/provider.dart';
|
||||
|
@ -149,12 +149,12 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
|||
});
|
||||
},
|
||||
),
|
||||
title: Text(AppLocalizations.of(context)!
|
||||
.selectionAppBarTitle(_selectedItems.length)),
|
||||
title:
|
||||
Text(L10n.of(context).selectionAppBarTitle(_selectedItems.length)),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.delete),
|
||||
tooltip: AppLocalizations.of(context)!.deleteSelectedTooltip,
|
||||
tooltip: L10n.of(context).deleteSelectedTooltip,
|
||||
onPressed: () {
|
||||
_onSelectionAppBarDeletePressed();
|
||||
},
|
||||
|
@ -171,13 +171,13 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
|||
IconButton(
|
||||
onPressed: () => _onSearchPressed(context),
|
||||
icon: const Icon(Icons.search),
|
||||
tooltip: AppLocalizations.of(context)!.searchTooltip,
|
||||
tooltip: L10n.of(context).searchTooltip,
|
||||
),
|
||||
],
|
||||
menuActions: [
|
||||
PopupMenuItem(
|
||||
value: _menuValueImport,
|
||||
child: Text(AppLocalizations.of(context)!.importFoldersTooltip),
|
||||
child: Text(L10n.of(context).importFoldersTooltip),
|
||||
),
|
||||
],
|
||||
onSelectedMenuActions: (option) {
|
||||
|
@ -225,7 +225,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
|||
),
|
||||
),
|
||||
),
|
||||
title: AppLocalizations.of(context)!.albumArchiveLabel,
|
||||
title: L10n.of(context).albumArchiveLabel,
|
||||
onTap: () {
|
||||
Navigator.of(context).pushNamed(ArchiveViewer.routeName,
|
||||
arguments: ArchiveViewerArguments(widget.account));
|
||||
|
@ -247,7 +247,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
|||
),
|
||||
),
|
||||
),
|
||||
title: AppLocalizations.of(context)!.createAlbumTooltip,
|
||||
title: L10n.of(context).createAlbumTooltip,
|
||||
onTap: () => _onNewAlbumItemTap(context),
|
||||
);
|
||||
}
|
||||
|
@ -323,8 +323,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
|||
_log.severe(
|
||||
"[_onNewAlbumItemTap] Failed while showDialog", e, stacktrace);
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content:
|
||||
Text(AppLocalizations.of(context)!.createAlbumFailureNotification),
|
||||
content: Text(L10n.of(context).createAlbumFailureNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
});
|
||||
|
@ -337,7 +336,7 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
|||
|
||||
Future<void> _onSelectionAppBarDeletePressed() async {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.deleteSelectedProcessingNotification(_selectedItems.length)),
|
||||
duration: k.snackBarDurationShort,
|
||||
));
|
||||
|
@ -363,13 +362,12 @@ class _HomeAlbumsState extends State<HomeAlbums>
|
|||
}
|
||||
if (failures.isEmpty) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!.deleteSelectedSuccessNotification),
|
||||
content: Text(L10n.of(context).deleteSelectedSuccessNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
} else {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.deleteSelectedFailureNotification(failures.length)),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import 'package:event_bus/event_bus.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:kiwi/kiwi.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/event/event.dart';
|
||||
import 'package:nc_photos/pref.dart';
|
||||
import 'package:nc_photos/theme.dart';
|
||||
|
@ -97,8 +97,7 @@ class HomeSliverAppBar extends StatelessWidget {
|
|||
[
|
||||
PopupMenuItem(
|
||||
value: _menuValueAbout,
|
||||
child:
|
||||
Text(AppLocalizations.of(context)!.settingsMenuLabel),
|
||||
child: Text(L10n.of(context).settingsMenuLabel),
|
||||
),
|
||||
],
|
||||
onSelected: (option) {
|
||||
|
|
|
@ -3,13 +3,13 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:kiwi/kiwi.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/bloc/scan_dir.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/album/item.dart';
|
||||
|
@ -162,20 +162,20 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
});
|
||||
},
|
||||
),
|
||||
title: Text(AppLocalizations.of(context)!
|
||||
.selectionAppBarTitle(selectedListItems.length)),
|
||||
title: Text(
|
||||
L10n.of(context).selectionAppBarTitle(selectedListItems.length)),
|
||||
actions: [
|
||||
if (platform_k.isAndroid)
|
||||
IconButton(
|
||||
icon: const Icon(Icons.share),
|
||||
tooltip: AppLocalizations.of(context)!.shareSelectedTooltip,
|
||||
tooltip: L10n.of(context).shareSelectedTooltip,
|
||||
onPressed: () {
|
||||
_onSelectionAppBarSharePressed(context);
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.playlist_add),
|
||||
tooltip: AppLocalizations.of(context)!.addSelectedToAlbumTooltip,
|
||||
tooltip: L10n.of(context).addSelectedToAlbumTooltip,
|
||||
onPressed: () {
|
||||
_onSelectionAppBarAddToAlbumPressed(context);
|
||||
},
|
||||
|
@ -185,13 +185,11 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
itemBuilder: (context) => [
|
||||
PopupMenuItem(
|
||||
value: _SelectionAppBarMenuOption.archive,
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.archiveSelectedMenuLabel),
|
||||
child: Text(L10n.of(context).archiveSelectedMenuLabel),
|
||||
),
|
||||
PopupMenuItem(
|
||||
value: _SelectionAppBarMenuOption.delete,
|
||||
child:
|
||||
Text(AppLocalizations.of(context)!.deleteSelectedTooltip),
|
||||
child: Text(L10n.of(context).deleteSelectedTooltip),
|
||||
),
|
||||
],
|
||||
onSelected: (option) {
|
||||
|
@ -213,7 +211,7 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
actions: [
|
||||
PopupMenuButton(
|
||||
icon: const Icon(Icons.photo_size_select_large),
|
||||
tooltip: AppLocalizations.of(context)!.zoomTooltip,
|
||||
tooltip: L10n.of(context).zoomTooltip,
|
||||
itemBuilder: (context) => [
|
||||
PopupMenuZoom(
|
||||
initialValue: _thumbZoomLevel,
|
||||
|
@ -232,7 +230,7 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
menuActions: [
|
||||
PopupMenuItem(
|
||||
value: _menuValueRefresh,
|
||||
child: Text(AppLocalizations.of(context)!.refreshMenuLabel),
|
||||
child: Text(L10n.of(context).refreshMenuLabel),
|
||||
),
|
||||
],
|
||||
onSelectedMenuActions: (option) {
|
||||
|
@ -307,15 +305,14 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
clearSelectedItems();
|
||||
});
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.addSelectedToAlbumSuccessNotification(value.name)),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
}).catchError((_) {});
|
||||
} else {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.addSelectedToAlbumFailureNotification),
|
||||
content: Text(L10n.of(context).addSelectedToAlbumFailureNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
}
|
||||
|
@ -325,9 +322,9 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
e,
|
||||
stacktrace);
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
"${AppLocalizations.of(context)!.addSelectedToAlbumFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
content:
|
||||
Text("${L10n.of(context).addSelectedToAlbumFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
});
|
||||
|
@ -355,9 +352,9 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
_log.shout(
|
||||
"[_addSelectedToAlbum] Failed while updating album", e, stacktrace);
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
"${AppLocalizations.of(context)!.addSelectedToAlbumFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
content:
|
||||
Text("${L10n.of(context).addSelectedToAlbumFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
rethrow;
|
||||
|
@ -366,7 +363,7 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
|
||||
Future<void> _onSelectionAppBarDeletePressed(BuildContext context) async {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.deleteSelectedProcessingNotification(selectedListItems.length)),
|
||||
duration: k.snackBarDurationShort,
|
||||
));
|
||||
|
@ -394,13 +391,12 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
}
|
||||
if (failures.isEmpty) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!.deleteSelectedSuccessNotification),
|
||||
content: Text(L10n.of(context).deleteSelectedSuccessNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
} else {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.deleteSelectedFailureNotification(failures.length)),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
|
@ -426,7 +422,7 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
|
||||
Future<void> _onSelectionAppBarArchivePressed(BuildContext context) async {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.archiveSelectedProcessingNotification(selectedListItems.length)),
|
||||
duration: k.snackBarDurationShort,
|
||||
));
|
||||
|
@ -454,13 +450,12 @@ class _HomePhotosState extends State<HomePhotos>
|
|||
}
|
||||
if (failures.isEmpty) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!.archiveSelectedSuccessNotification),
|
||||
content: Text(L10n.of(context).archiveSelectedSuccessNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
} else {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
content: Text(L10n.of(context)
|
||||
.archiveSelectedFailureNotification(failures.length)),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
|
|
|
@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/event/event.dart';
|
||||
import 'package:nc_photos/language_util.dart' as language_util;
|
||||
import 'package:nc_photos/pref.dart';
|
||||
|
@ -45,7 +45,7 @@ class _MyAppState extends State<MyApp> implements SnackBarHandler {
|
|||
@override
|
||||
build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
onGenerateTitle: (context) => AppLocalizations.of(context)!.appTitle,
|
||||
onGenerateTitle: (context) => L10n.of(context).appTitle,
|
||||
theme: _getLightTheme(),
|
||||
darkTheme: _getDarkTheme(),
|
||||
themeMode:
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/album/cover_provider.dart';
|
||||
import 'package:nc_photos/entity/album/provider.dart';
|
||||
|
@ -40,7 +40,7 @@ class _NewAlbumDialogState extends State<NewAlbumDialog> {
|
|||
return Visibility(
|
||||
visible: _isVisible,
|
||||
child: AlertDialog(
|
||||
title: Text(AppLocalizations.of(context)!.createAlbumTooltip),
|
||||
title: Text(L10n.of(context).createAlbumTooltip),
|
||||
content: Form(
|
||||
key: _formKey,
|
||||
child: Container(
|
||||
|
@ -51,12 +51,11 @@ class _NewAlbumDialogState extends State<NewAlbumDialog> {
|
|||
children: [
|
||||
TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText: AppLocalizations.of(context)!.nameInputHint,
|
||||
hintText: L10n.of(context).nameInputHint,
|
||||
),
|
||||
validator: (value) {
|
||||
if (value!.isEmpty) {
|
||||
return AppLocalizations.of(context)!
|
||||
.albumNameInputInvalidEmpty;
|
||||
return L10n.of(context).albumNameInputInvalidEmpty;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
@ -188,10 +187,10 @@ extension on _Provider {
|
|||
String toValueString(BuildContext context) {
|
||||
switch (this) {
|
||||
case _Provider.static:
|
||||
return AppLocalizations.of(context)!.createAlbumDialogBasicLabel;
|
||||
return L10n.of(context).createAlbumDialogBasicLabel;
|
||||
|
||||
case _Provider.dir:
|
||||
return AppLocalizations.of(context)!.createAlbumDialogFolderBasedLabel;
|
||||
return L10n.of(context).createAlbumDialogFolderBasedLabel;
|
||||
|
||||
default:
|
||||
throw StateError("Unknown value: $this");
|
||||
|
@ -201,11 +200,10 @@ extension on _Provider {
|
|||
String toDescription(BuildContext context) {
|
||||
switch (this) {
|
||||
case _Provider.static:
|
||||
return AppLocalizations.of(context)!.createAlbumDialogBasicDescription;
|
||||
return L10n.of(context).createAlbumDialogBasicDescription;
|
||||
|
||||
case _Provider.dir:
|
||||
return AppLocalizations.of(context)!
|
||||
.createAlbumDialogFolderBasedDescription;
|
||||
return L10n.of(context).createAlbumDialogFolderBasedDescription;
|
||||
|
||||
default:
|
||||
throw StateError("Unknown value: $this");
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/num_extension.dart';
|
||||
|
||||
class PhotoDateTimeEditDialog extends StatefulWidget {
|
||||
|
@ -20,7 +20,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
|||
@override
|
||||
build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Text(AppLocalizations.of(context)!.updateDateTimeDialogTitle),
|
||||
title: Text(L10n.of(context).updateDateTimeDialogTitle),
|
||||
content: Form(
|
||||
key: _formKey,
|
||||
child: Container(
|
||||
|
@ -29,7 +29,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
|||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
AppLocalizations.of(context)!.dateSubtitle,
|
||||
L10n.of(context).dateSubtitle,
|
||||
style: Theme.of(context).textTheme.subtitle2,
|
||||
),
|
||||
Row(
|
||||
|
@ -37,8 +37,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
|||
Flexible(
|
||||
child: TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText:
|
||||
AppLocalizations.of(context)!.dateYearInputHint,
|
||||
hintText: L10n.of(context).dateYearInputHint,
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
validator: (value) {
|
||||
|
@ -46,8 +45,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
|||
int.parse(value!);
|
||||
return null;
|
||||
} catch (_) {
|
||||
return AppLocalizations.of(context)!
|
||||
.dateTimeInputInvalid;
|
||||
return L10n.of(context).dateTimeInputInvalid;
|
||||
}
|
||||
},
|
||||
onSaved: (value) {
|
||||
|
@ -61,16 +59,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
|||
Flexible(
|
||||
child: TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText:
|
||||
AppLocalizations.of(context)!.dateMonthInputHint,
|
||||
hintText: L10n.of(context).dateMonthInputHint,
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
validator: (value) {
|
||||
if (int.tryParse(value!)?.inRange(1, 12) == true) {
|
||||
return null;
|
||||
}
|
||||
return AppLocalizations.of(context)!
|
||||
.dateTimeInputInvalid;
|
||||
return L10n.of(context).dateTimeInputInvalid;
|
||||
},
|
||||
onSaved: (value) {
|
||||
_formValue.month = int.parse(value!);
|
||||
|
@ -85,16 +81,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
|||
Flexible(
|
||||
child: TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText:
|
||||
AppLocalizations.of(context)!.dateDayInputHint,
|
||||
hintText: L10n.of(context).dateDayInputHint,
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
validator: (value) {
|
||||
if (int.tryParse(value!)?.inRange(1, 31) == true) {
|
||||
return null;
|
||||
}
|
||||
return AppLocalizations.of(context)!
|
||||
.dateTimeInputInvalid;
|
||||
return L10n.of(context).dateTimeInputInvalid;
|
||||
},
|
||||
onSaved: (value) {
|
||||
_formValue.day = int.parse(value!);
|
||||
|
@ -108,7 +102,7 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
|||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
AppLocalizations.of(context)!.timeSubtitle,
|
||||
L10n.of(context).timeSubtitle,
|
||||
style: Theme.of(context).textTheme.subtitle2,
|
||||
),
|
||||
Row(
|
||||
|
@ -116,16 +110,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
|||
Flexible(
|
||||
child: TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText:
|
||||
AppLocalizations.of(context)!.timeHourInputHint,
|
||||
hintText: L10n.of(context).timeHourInputHint,
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
validator: (value) {
|
||||
if (int.tryParse(value!)?.inRange(0, 23) == true) {
|
||||
return null;
|
||||
}
|
||||
return AppLocalizations.of(context)!
|
||||
.dateTimeInputInvalid;
|
||||
return L10n.of(context).dateTimeInputInvalid;
|
||||
},
|
||||
onSaved: (value) {
|
||||
_formValue.hour = int.parse(value!);
|
||||
|
@ -140,16 +132,14 @@ class _PhotoDateTimeEditDialogState extends State<PhotoDateTimeEditDialog> {
|
|||
Flexible(
|
||||
child: TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText:
|
||||
AppLocalizations.of(context)!.timeMinuteInputHint,
|
||||
hintText: L10n.of(context).timeMinuteInputHint,
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
validator: (value) {
|
||||
if (int.tryParse(value!)?.inRange(0, 59) == true) {
|
||||
return null;
|
||||
}
|
||||
return AppLocalizations.of(context)!
|
||||
.dateTimeInputInvalid;
|
||||
return L10n.of(context).dateTimeInputInvalid;
|
||||
},
|
||||
onSaved: (value) {
|
||||
_formValue.minute = int.parse(value!);
|
||||
|
|
|
@ -2,10 +2,10 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/api/api_util.dart' as api_util;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/entity/file/data_source.dart';
|
||||
import 'package:nc_photos/exception_util.dart' as exception_util;
|
||||
|
@ -105,7 +105,7 @@ class _RootPickerState extends State<RootPicker>
|
|||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
AppLocalizations.of(context)!.rootPickerHeaderText,
|
||||
L10n.of(context).rootPickerHeaderText,
|
||||
style: Theme.of(context).textTheme.headline5,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
|
@ -113,7 +113,7 @@ class _RootPickerState extends State<RootPicker>
|
|||
Align(
|
||||
alignment: AlignmentDirectional.topStart,
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.rootPickerSubHeaderText,
|
||||
L10n.of(context).rootPickerSubHeaderText,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
@ -132,11 +132,11 @@ class _RootPickerState extends State<RootPicker>
|
|||
children: [
|
||||
TextButton(
|
||||
onPressed: () => _onSkipPressed(context),
|
||||
child: Text(AppLocalizations.of(context)!.skipButtonLabel),
|
||||
child: Text(L10n.of(context).skipButtonLabel),
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () => _onConfirmPressed(context),
|
||||
child: Text(AppLocalizations.of(context)!.confirmButtonLabel),
|
||||
child: Text(L10n.of(context).confirmButtonLabel),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -150,8 +150,8 @@ class _RootPickerState extends State<RootPicker>
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.rootPickerSkipConfirmationDialogContent),
|
||||
content: Text(
|
||||
L10n.of(context).rootPickerSkipConfirmationDialogContent),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
|
@ -178,8 +178,7 @@ class _RootPickerState extends State<RootPicker>
|
|||
final roots = getPickedDirs().map((e) => e.strippedPath).toList();
|
||||
if (roots.isEmpty) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content:
|
||||
Text(AppLocalizations.of(context)!.rootPickerListEmptyNotification),
|
||||
content: Text(L10n.of(context).rootPickerListEmptyNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
return;
|
||||
|
@ -199,7 +198,7 @@ class _RootPickerState extends State<RootPicker>
|
|||
barrierDismissible: false,
|
||||
context: context,
|
||||
builder: (context) => ProcessingDialog(
|
||||
text: AppLocalizations.of(context)!.genericProcessingDialogContent),
|
||||
text: L10n.of(context).genericProcessingDialogContent),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -4,9 +4,9 @@ import 'dart:math' as math;
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/iterable_extension.dart';
|
||||
import 'package:nc_photos/k.dart' as k;
|
||||
import 'package:nc_photos/platform/k.dart' as platform_k;
|
||||
|
@ -184,8 +184,8 @@ mixin SelectableItemStreamListMixin<T extends StatefulWidget> on State<T> {
|
|||
if (!SessionStorage().hasShowRangeSelectNotification) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(platform_k.isWeb
|
||||
? AppLocalizations.of(context)!.webSelectRangeNotification
|
||||
: AppLocalizations.of(context)!.mobileSelectRangeNotification),
|
||||
? L10n.of(context).webSelectRangeNotification
|
||||
: L10n.of(context).mobileSelectRangeNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
SessionStorage().hasShowRangeSelectNotification = true;
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import 'package:event_bus/event_bus.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:kiwi/kiwi.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/event/event.dart';
|
||||
import 'package:nc_photos/k.dart' as k;
|
||||
import 'package:nc_photos/language_util.dart' as language_util;
|
||||
|
@ -62,57 +62,51 @@ class _SettingsState extends State<Settings> {
|
|||
}
|
||||
|
||||
Widget _buildContent(BuildContext context) {
|
||||
final translator = AppLocalizations.of(context)!.translator;
|
||||
final translator = L10n.of(context).translator;
|
||||
return CustomScrollView(
|
||||
slivers: [
|
||||
SliverAppBar(
|
||||
pinned: true,
|
||||
title: Text(AppLocalizations.of(context)!.settingsWidgetTitle),
|
||||
title: Text(L10n.of(context).settingsWidgetTitle),
|
||||
),
|
||||
SliverList(
|
||||
delegate: SliverChildListDelegate(
|
||||
[
|
||||
ListTile(
|
||||
title:
|
||||
Text(AppLocalizations.of(context)!.settingsLanguageTitle),
|
||||
title: Text(L10n.of(context).settingsLanguageTitle),
|
||||
subtitle: Text(language_util.getSelectedLanguageName(context)),
|
||||
onTap: () => _onLanguageTap(context),
|
||||
),
|
||||
SwitchListTile(
|
||||
title: Text(
|
||||
AppLocalizations.of(context)!.settingsExifSupportTitle),
|
||||
title: Text(L10n.of(context).settingsExifSupportTitle),
|
||||
subtitle: _isEnableExif
|
||||
? Text(AppLocalizations.of(context)!
|
||||
.settingsExifSupportTrueSubtitle)
|
||||
? Text(L10n.of(context).settingsExifSupportTrueSubtitle)
|
||||
: null,
|
||||
value: _isEnableExif,
|
||||
onChanged: (value) => _onExifSupportChanged(context, value),
|
||||
),
|
||||
_buildCaption(context,
|
||||
AppLocalizations.of(context)!.settingsAboutSectionTitle),
|
||||
_buildCaption(
|
||||
context, L10n.of(context).settingsAboutSectionTitle),
|
||||
ListTile(
|
||||
title: Text(AppLocalizations.of(context)!.settingsVersionTitle),
|
||||
title: Text(L10n.of(context).settingsVersionTitle),
|
||||
subtitle: const Text(k.versionStr),
|
||||
),
|
||||
ListTile(
|
||||
title:
|
||||
Text(AppLocalizations.of(context)!.settingsSourceCodeTitle),
|
||||
title: Text(L10n.of(context).settingsSourceCodeTitle),
|
||||
subtitle: Text(_sourceRepo),
|
||||
onTap: () async {
|
||||
await launch(_sourceRepo);
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
title:
|
||||
Text(AppLocalizations.of(context)!.settingsBugReportTitle),
|
||||
title: Text(L10n.of(context).settingsBugReportTitle),
|
||||
onTap: () {
|
||||
launch(_bugReportUrl);
|
||||
},
|
||||
),
|
||||
if (translator.isNotEmpty)
|
||||
ListTile(
|
||||
title: Text(
|
||||
AppLocalizations.of(context)!.settingsTranslatorTitle),
|
||||
title: Text(L10n.of(context).settingsTranslatorTitle),
|
||||
subtitle: Text(translator),
|
||||
onTap: () {
|
||||
launch(_translationUrl);
|
||||
|
@ -176,9 +170,8 @@ class _SettingsState extends State<Settings> {
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(
|
||||
AppLocalizations.of(context)!.exifSupportConfirmationDialogTitle),
|
||||
content: Text(AppLocalizations.of(context)!.exifSupportDetails),
|
||||
title: Text(L10n.of(context).exifSupportConfirmationDialogTitle),
|
||||
content: Text(L10n.of(context).exifSupportDetails),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
|
@ -190,7 +183,7 @@ class _SettingsState extends State<Settings> {
|
|||
onPressed: () {
|
||||
Navigator.of(context).pop(true);
|
||||
},
|
||||
child: Text(AppLocalizations.of(context)!.enableButtonLabel),
|
||||
child: Text(L10n.of(context).enableButtonLabel),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -219,8 +212,7 @@ class _SettingsState extends State<Settings> {
|
|||
} else {
|
||||
_log.severe("[_setExifSupport] Failed writing pref");
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!.writePreferenceFailureNotification),
|
||||
content: Text(L10n.of(context).writePreferenceFailureNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
setState(() {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/k.dart' as k;
|
||||
import 'package:nc_photos/pref.dart';
|
||||
import 'package:nc_photos/theme.dart';
|
||||
|
@ -31,7 +31,7 @@ class _SetupState extends State<Setup> {
|
|||
|
||||
PreferredSizeWidget _buildAppBar(BuildContext context) {
|
||||
return AppBar(
|
||||
title: Text(AppLocalizations.of(context)!.setupWidgetTitle),
|
||||
title: Text(L10n.of(context).setupWidgetTitle),
|
||||
elevation: 0,
|
||||
);
|
||||
}
|
||||
|
@ -69,8 +69,7 @@ class _SetupState extends State<Setup> {
|
|||
? [
|
||||
ElevatedButton(
|
||||
onPressed: _onDonePressed,
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.doneButtonLabel),
|
||||
child: Text(L10n.of(context).doneButtonLabel),
|
||||
),
|
||||
]
|
||||
: [
|
||||
|
@ -83,8 +82,7 @@ class _SetupState extends State<Setup> {
|
|||
.getPageId());
|
||||
}
|
||||
},
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.nextButtonLabel),
|
||||
child: Text(L10n.of(context).nextButtonLabel),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -148,20 +146,19 @@ class _ExifState extends State<_Exif> {
|
|||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SwitchListTile(
|
||||
title: Text(AppLocalizations.of(context)!.settingsExifSupportTitle),
|
||||
title: Text(L10n.of(context).settingsExifSupportTitle),
|
||||
value: _isEnableExif,
|
||||
onChanged: _onValueChanged,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: Text(AppLocalizations.of(context)!.exifSupportDetails),
|
||||
child: Text(L10n.of(context).exifSupportDetails),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.setupSettingsModifyLaterHint,
|
||||
child: Text(L10n.of(context).setupSettingsModifyLaterHint,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyText2!
|
||||
|
@ -200,8 +197,7 @@ class _HiddenPrefDirNoticeState extends State<_HiddenPrefDirNotice> {
|
|||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.setupHiddenPrefDirNoticeDetail),
|
||||
child: Text(L10n.of(context).setupHiddenPrefDirNoticeDetail),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
Align(
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/list_extension.dart';
|
||||
import 'package:nc_photos/platform/k.dart' as platform_k;
|
||||
import 'package:nc_photos/pref.dart';
|
||||
|
@ -49,7 +49,7 @@ class _SignInState extends State<SignIn> {
|
|||
Padding(
|
||||
padding: const EdgeInsets.all(24),
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.signInHeaderText,
|
||||
L10n.of(context).signInHeaderText,
|
||||
style: Theme.of(context).textTheme.headline5,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
|
@ -70,7 +70,7 @@ class _SignInState extends State<SignIn> {
|
|||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 32, vertical: 16),
|
||||
child: Text(
|
||||
AppLocalizations.of(context)!.signIn2faHintText,
|
||||
L10n.of(context).signIn2faHintText,
|
||||
style: TextStyle(fontStyle: FontStyle.italic),
|
||||
),
|
||||
),
|
||||
|
@ -98,8 +98,7 @@ class _SignInState extends State<SignIn> {
|
|||
_connect();
|
||||
}
|
||||
},
|
||||
child: Text(AppLocalizations.of(context)!
|
||||
.connectButtonLabel),
|
||||
child: Text(L10n.of(context).connectButtonLabel),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -159,14 +158,12 @@ class _SignInState extends State<SignIn> {
|
|||
Expanded(
|
||||
child: TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText:
|
||||
AppLocalizations.of(context)!.serverAddressInputHint,
|
||||
hintText: L10n.of(context).serverAddressInputHint,
|
||||
),
|
||||
keyboardType: TextInputType.url,
|
||||
validator: (value) {
|
||||
if (value!.trim().trimRightAny("/").isEmpty) {
|
||||
return AppLocalizations.of(context)!
|
||||
.serverAddressInputInvalidEmpty;
|
||||
return L10n.of(context).serverAddressInputInvalidEmpty;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
@ -180,11 +177,11 @@ class _SignInState extends State<SignIn> {
|
|||
const SizedBox(height: 8),
|
||||
TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText: AppLocalizations.of(context)!.usernameInputHint,
|
||||
hintText: L10n.of(context).usernameInputHint,
|
||||
),
|
||||
validator: (value) {
|
||||
if (value!.trim().isEmpty) {
|
||||
return AppLocalizations.of(context)!.usernameInputInvalidEmpty;
|
||||
return L10n.of(context).usernameInputInvalidEmpty;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
@ -195,12 +192,12 @@ class _SignInState extends State<SignIn> {
|
|||
const SizedBox(height: 8),
|
||||
TextFormField(
|
||||
decoration: InputDecoration(
|
||||
hintText: AppLocalizations.of(context)!.passwordInputHint,
|
||||
hintText: L10n.of(context).passwordInputHint,
|
||||
),
|
||||
obscureText: true,
|
||||
validator: (value) {
|
||||
if (value!.trim().isEmpty) {
|
||||
return AppLocalizations.of(context)!.passwordInputInvalidEmpty;
|
||||
return L10n.of(context).passwordInputInvalidEmpty;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/changelog.dart' as changelog;
|
||||
import 'package:nc_photos/k.dart' as k;
|
||||
import 'package:nc_photos/pref.dart';
|
||||
|
@ -56,7 +56,7 @@ class _SplashState extends State<Splash> {
|
|||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
AppLocalizations.of(context)!.appTitle,
|
||||
L10n.of(context).appTitle,
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.headline4,
|
||||
)
|
||||
|
@ -94,7 +94,7 @@ class _SplashState extends State<Splash> {
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(AppLocalizations.of(context)!.changelogTitle),
|
||||
title: Text(L10n.of(context).changelogTitle),
|
||||
content: SingleChildScrollView(
|
||||
child: Text(change),
|
||||
),
|
||||
|
|
|
@ -4,9 +4,9 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/entity/file/data_source.dart';
|
||||
|
@ -264,7 +264,7 @@ class _ViewerState extends State<Viewer> {
|
|||
if (!_isDetailPaneActive && _canOpenDetailPane())
|
||||
IconButton(
|
||||
icon: const Icon(Icons.more_vert),
|
||||
tooltip: AppLocalizations.of(context)!.detailsTooltip,
|
||||
tooltip: L10n.of(context).detailsTooltip,
|
||||
onPressed: _onDetailsPressed,
|
||||
),
|
||||
],
|
||||
|
@ -311,7 +311,7 @@ class _ViewerState extends State<Viewer> {
|
|||
Icons.share_outlined,
|
||||
color: Colors.white.withOpacity(.87),
|
||||
),
|
||||
tooltip: AppLocalizations.of(context)!.shareTooltip,
|
||||
tooltip: L10n.of(context).shareTooltip,
|
||||
onPressed: () => _onSharePressed(context),
|
||||
),
|
||||
),
|
||||
|
@ -322,7 +322,7 @@ class _ViewerState extends State<Viewer> {
|
|||
Icons.download_outlined,
|
||||
color: Colors.white.withOpacity(.87),
|
||||
),
|
||||
tooltip: AppLocalizations.of(context)!.downloadTooltip,
|
||||
tooltip: L10n.of(context).downloadTooltip,
|
||||
onPressed: () => _onDownloadPressed(context),
|
||||
),
|
||||
),
|
||||
|
@ -333,7 +333,7 @@ class _ViewerState extends State<Viewer> {
|
|||
Icons.delete_outlined,
|
||||
color: Colors.white.withOpacity(.87),
|
||||
),
|
||||
tooltip: AppLocalizations.of(context)!.deleteTooltip,
|
||||
tooltip: L10n.of(context).deleteTooltip,
|
||||
onPressed: () => _onDeletePressed(context),
|
||||
),
|
||||
),
|
||||
|
@ -571,8 +571,7 @@ class _ViewerState extends State<Viewer> {
|
|||
final file = widget.streamFiles[_pageController.page!.round()];
|
||||
_log.info("[_onDownloadPressed] Downloading file: ${file.path}");
|
||||
var controller = SnackBarManager().showSnackBar(SnackBar(
|
||||
content:
|
||||
Text(AppLocalizations.of(context)!.downloadProcessingNotification),
|
||||
content: Text(L10n.of(context).downloadProcessingNotification),
|
||||
duration: k.snackBarDurationShort,
|
||||
));
|
||||
controller?.closed.whenComplete(() {
|
||||
|
@ -586,8 +585,7 @@ class _ViewerState extends State<Viewer> {
|
|||
_log.warning("[_onDownloadPressed] Permission not granted");
|
||||
controller?.close();
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.downloadFailureNoPermissionNotification),
|
||||
content: Text(L10n.of(context).downloadFailureNoPermissionNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
return;
|
||||
|
@ -596,8 +594,7 @@ class _ViewerState extends State<Viewer> {
|
|||
"[_onDownloadPressed] Failed while downloadFile", e, stacktrace);
|
||||
controller?.close();
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
"${AppLocalizations.of(context)!.downloadFailureNotification}: "
|
||||
content: Text("${L10n.of(context).downloadFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
|
@ -627,7 +624,7 @@ class _ViewerState extends State<Viewer> {
|
|||
|
||||
// fallback
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!.downloadSuccessNotification),
|
||||
content: Text(L10n.of(context).downloadSuccessNotification),
|
||||
duration: k.snackBarDurationShort,
|
||||
));
|
||||
}
|
||||
|
@ -636,7 +633,7 @@ class _ViewerState extends State<Viewer> {
|
|||
final file = widget.streamFiles[_pageController.page!.round()];
|
||||
_log.info("[_onDeletePressed] Removing file: ${file.path}");
|
||||
var controller = SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!.deleteProcessingNotification),
|
||||
content: Text(L10n.of(context).deleteProcessingNotification),
|
||||
duration: k.snackBarDurationShort,
|
||||
));
|
||||
controller?.closed.whenComplete(() {
|
||||
|
@ -647,7 +644,7 @@ class _ViewerState extends State<Viewer> {
|
|||
AlbumRepo(AlbumCachedDataSource()))(widget.account, file);
|
||||
controller?.close();
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!.deleteSuccessNotification),
|
||||
content: Text(L10n.of(context).deleteSuccessNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
Navigator.of(context).pop();
|
||||
|
@ -659,9 +656,8 @@ class _ViewerState extends State<Viewer> {
|
|||
stacktrace);
|
||||
controller?.close();
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content:
|
||||
Text("${AppLocalizations.of(context)!.deleteFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
content: Text("${L10n.of(context).deleteFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
}
|
||||
|
|
|
@ -3,10 +3,10 @@ import 'package:exifdart/exifdart.dart';
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/double_extension.dart';
|
||||
import 'package:nc_photos/entity/album.dart';
|
||||
import 'package:nc_photos/entity/album/item.dart';
|
||||
|
@ -77,8 +77,8 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
widget.file.metadata!.imageHeight!;
|
||||
if (pixelCount >= 500000) {
|
||||
final mpCount = pixelCount / 1000000.0;
|
||||
sizeSubStr += AppLocalizations.of(context)!
|
||||
.megapixelCount(mpCount.toStringAsFixed(1));
|
||||
sizeSubStr +=
|
||||
L10n.of(context).megapixelCount(mpCount.toStringAsFixed(1));
|
||||
sizeSubStr += space;
|
||||
}
|
||||
sizeSubStr += _byteSizeToString(widget.file.contentLength ?? 0);
|
||||
|
@ -89,12 +89,11 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
cameraSubStr += "f/${_fNumber!.toStringAsFixed(1)}$space";
|
||||
}
|
||||
if (_exposureTime != null) {
|
||||
cameraSubStr +=
|
||||
AppLocalizations.of(context)!.secondCountSymbol(_exposureTime!);
|
||||
cameraSubStr += L10n.of(context).secondCountSymbol(_exposureTime!);
|
||||
cameraSubStr += space;
|
||||
}
|
||||
if (_focalLength != null) {
|
||||
cameraSubStr += AppLocalizations.of(context)!
|
||||
cameraSubStr += L10n.of(context)
|
||||
.millimeterCountSymbol(_focalLength!.toStringAsFixedTruncated(2));
|
||||
cameraSubStr += space;
|
||||
}
|
||||
|
@ -112,12 +111,12 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
children: [
|
||||
_DetailPaneButton(
|
||||
icon: Icons.playlist_add_outlined,
|
||||
label: AppLocalizations.of(context)!.addToAlbumTooltip,
|
||||
label: L10n.of(context).addToAlbumTooltip,
|
||||
onPressed: () => _onAddToAlbumPressed(context),
|
||||
),
|
||||
_DetailPaneButton(
|
||||
icon: Icons.delete_outline,
|
||||
label: AppLocalizations.of(context)!.deleteTooltip,
|
||||
label: L10n.of(context).deleteTooltip,
|
||||
onPressed: () => _onDeletePressed(context),
|
||||
),
|
||||
],
|
||||
|
@ -238,15 +237,14 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
_log.info("[_onAddToAlbumPressed] Album picked: ${value.name}");
|
||||
_addToAlbum(context, value).then((_) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!
|
||||
.addToAlbumSuccessNotification(value.name)),
|
||||
content: Text(
|
||||
L10n.of(context).addToAlbumSuccessNotification(value.name)),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
}).catchError((_) {});
|
||||
} else {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content:
|
||||
Text(AppLocalizations.of(context)!.addToAlbumFailureNotification),
|
||||
content: Text(L10n.of(context).addToAlbumFailureNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
}
|
||||
|
@ -254,8 +252,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
_log.severe(
|
||||
"[_onAddToAlbumPressed] Failed while showDialog", e, stacktrace);
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
"${AppLocalizations.of(context)!.addToAlbumFailureNotification}: "
|
||||
content: Text("${L10n.of(context).addToAlbumFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
|
@ -265,7 +262,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
void _onDeletePressed(BuildContext context) async {
|
||||
_log.info("[_onDeletePressed] Removing file: ${widget.file.path}");
|
||||
var controller = SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!.deleteProcessingNotification),
|
||||
content: Text(L10n.of(context).deleteProcessingNotification),
|
||||
duration: k.snackBarDurationShort,
|
||||
));
|
||||
controller?.closed.whenComplete(() {
|
||||
|
@ -276,7 +273,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
AlbumRepo(AlbumCachedDataSource()))(widget.account, widget.file);
|
||||
controller?.close();
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(AppLocalizations.of(context)!.deleteSuccessNotification),
|
||||
content: Text(L10n.of(context).deleteSuccessNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
Navigator.of(context).pop();
|
||||
|
@ -288,9 +285,8 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
stacktrace);
|
||||
controller?.close();
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content:
|
||||
Text("${AppLocalizations.of(context)!.deleteFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
content: Text("${L10n.of(context).deleteFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
}
|
||||
|
@ -328,8 +324,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
e,
|
||||
stacktrace);
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
AppLocalizations.of(context)!.updateDateTimeFailureNotification),
|
||||
content: Text(L10n.of(context).updateDateTimeFailureNotification),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
}
|
||||
|
@ -361,8 +356,8 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
// already added, do nothing
|
||||
_log.info("[_addToAlbum] File already in album: ${widget.file.path}");
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
"${AppLocalizations.of(context)!.addToAlbumAlreadyAddedNotification}"),
|
||||
content:
|
||||
Text("${L10n.of(context).addToAlbumAlreadyAddedNotification}"),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
return Future.error(ArgumentError("File already in album"));
|
||||
|
@ -380,8 +375,7 @@ class _ViewerDetailPaneState extends State<ViewerDetailPane> {
|
|||
} catch (e, stacktrace) {
|
||||
_log.shout("[_addToAlbum] Failed while updating album", e, stacktrace);
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
"${AppLocalizations.of(context)!.addToAlbumFailureNotification}: "
|
||||
content: Text("${L10n.of(context).addToAlbumFailureNotification}: "
|
||||
"${exception_util.toUserString(e, context)}"),
|
||||
duration: k.snackBarDurationNormal,
|
||||
));
|
||||
|
|
Loading…
Reference in a new issue