You've already forked immich
mirror of
https://github.com/immich-app/immich.git
synced 2025-08-10 23:22:22 +02:00
feat(mobile): use Weblate for i18n (2) (#17620)
* feat(mobile): use Weblate for i18n (2) * remove old translation files * dedup keys * remove migration report * chore * remove localizely.yml
This commit is contained in:
@@ -2,51 +2,44 @@ import 'dart:ui';
|
||||
|
||||
const Map<String, Locale> locales = {
|
||||
// Default locale
|
||||
'English (en_US)': Locale('en', 'US'),
|
||||
'English (en)': Locale('en'),
|
||||
// Additional locales
|
||||
'Arabic (ar_JO)': Locale('ar', 'JO'),
|
||||
'Arabic (ar)': Locale('ar'),
|
||||
'Catalan (ca)': Locale('ca'),
|
||||
'Chinese Simplified (zh_CN)': Locale('zh', 'CN'),
|
||||
'Chinese Traditional (zh_TW)': Locale('zh', 'TW'),
|
||||
'Czech (cs_CZ)': Locale('cs', 'CZ'),
|
||||
'Danish (da_DK)': Locale('da', 'DK'),
|
||||
'Dutch (nl_NL)': Locale('nl', 'NL'),
|
||||
'Finnish (fi_FI)': Locale('fi', 'FI'),
|
||||
'French (fr_CA)': Locale('fr', 'CA'),
|
||||
'French (fr_FR)': Locale('fr', 'FR'),
|
||||
'Galician (gl_ES)': Locale('gl', 'ES'),
|
||||
'German (de_DE)': Locale('de', 'DE'),
|
||||
'Greek (el_GR)': Locale('el', 'GR'),
|
||||
'Hebrew (he_IL)': Locale('he', 'IL'),
|
||||
'Hindi (hi_IN)': Locale('hi', 'IN'),
|
||||
'Hungarian (hu_HU)': Locale('hu', 'HU'),
|
||||
'Indonesian (id_ID)': Locale('id', 'ID'),
|
||||
'Italian (it_IT)': Locale('it', 'IT'),
|
||||
'Irish (ga_IE)': Locale('ga', 'IE'),
|
||||
'Japanese (ja_JP)': Locale('ja', 'JP'),
|
||||
'Korean (ko_KR)': Locale('ko', 'KR'),
|
||||
'Latvian (lv_LV)': Locale('lv', 'LV'),
|
||||
'Lithuanian (lt_LT)': Locale('lt', 'LT'),
|
||||
'Mongolian (mn_MN)': Locale('mn', 'MN'),
|
||||
'Chinese Simplified (zh_CN)': Locale('zh', 'SIMPLIFIED'),
|
||||
'Chinese Traditional (zh_TW)': Locale('zh', 'Hant'),
|
||||
'Czech (cs)': Locale('cs'),
|
||||
'Danish (da)': Locale('da'),
|
||||
'Dutch (nl)': Locale('nl'),
|
||||
'Finnish (fi)': Locale('fi'),
|
||||
'French (fr)': Locale('fr'),
|
||||
'Galician (gl)': Locale('gl'),
|
||||
'German (de)': Locale('de'),
|
||||
'Greek (el)': Locale('el'),
|
||||
'Hebrew (he)': Locale('he'),
|
||||
'Hindi (hi)': Locale('hi'),
|
||||
'Hungarian (hu)': Locale('hu'),
|
||||
'Indonesian (id)': Locale('id'),
|
||||
'Italian (it)': Locale('it'),
|
||||
'Japanese (ja)': Locale('ja'),
|
||||
'Korean (ko)': Locale('ko'),
|
||||
'Latvian (lv)': Locale('lv'),
|
||||
'Lithuanian (lt)': Locale('lt'),
|
||||
'Mongolian (mn)': Locale('mn'),
|
||||
'Norwegian Bokmål (nb_NO)': Locale('nb', 'NO'),
|
||||
'Polish (pl_PL)': Locale('pl', 'PL'),
|
||||
'Portuguese (pt_PT)': Locale('pt', 'PT'),
|
||||
'Romanian (ro_RO)': Locale('ro', 'RO'),
|
||||
'Russian (ru_RU)': Locale('ru', 'RU'),
|
||||
'Polish (pl)': Locale('pl'),
|
||||
'Portuguese (pt)': Locale('pt'),
|
||||
'Romanian (ro)': Locale('ro'),
|
||||
'Russian (ru)': Locale('ru'),
|
||||
'Serbian Cyrillic (sr_Cyrl)': Locale('sr', 'Cyrl'),
|
||||
'Serbian Latin (sr_Latn)': Locale('sr', 'Latn'),
|
||||
'Slovak (sk_SK)': Locale('sk', 'SK'),
|
||||
'Slovenian (sl_SI)': Locale('sl', 'SI'),
|
||||
'Spanish (es_ES)': Locale('es', 'ES'),
|
||||
'Spanish (es_MX)': Locale('es', 'MX'),
|
||||
'Spanish (es_PE)': Locale('es', 'PE'),
|
||||
'Spanish (es_US)': Locale('es', 'US'),
|
||||
'Swedish (sv_FI)': Locale('sv', 'FI'),
|
||||
'Swedish (sv_SE)': Locale('sv', 'SE'),
|
||||
'Thai (th_TH)': Locale('th', 'TH'),
|
||||
'Turkish (tr_TR)': Locale('tr', 'TR'),
|
||||
'Ukrainian (uk_UA)': Locale('uk', 'UA'),
|
||||
'Vietnamese (vi_VN)': Locale('vi', 'VN'),
|
||||
'Slovak (sk)': Locale('sk'),
|
||||
'Slovenian (sl)': Locale('sl'),
|
||||
'Spanish (es)': Locale('es'),
|
||||
'Thai (th)': Locale('th'),
|
||||
'Turkish (tr)': Locale('tr'),
|
||||
'Ukrainian (uk)': Locale('uk'),
|
||||
'Vietnamese (vi)': Locale('vi'),
|
||||
};
|
||||
|
||||
const String translationsPath = 'assets/i18n';
|
||||
|
@@ -34,7 +34,6 @@ import 'package:timezone/data/latest.dart';
|
||||
import 'package:immich_mobile/generated/codegen_loader.g.dart';
|
||||
|
||||
void main() async {
|
||||
EasyLocalization.logger.enableBuildModes = [];
|
||||
ImmichWidgetsBinding();
|
||||
final db = await Bootstrap.initIsar();
|
||||
await Bootstrap.initDomain(db);
|
||||
|
@@ -73,7 +73,7 @@ class AlbumAdditionalSharedUserSelectionPage extends HookConsumerWidget {
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Text(
|
||||
'select_additional_user_for_sharing_page_suggestions'.tr(),
|
||||
'suggestions'.tr(),
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.grey,
|
||||
@@ -126,7 +126,7 @@ class AlbumAdditionalSharedUserSelectionPage extends HookConsumerWidget {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text(
|
||||
'share_invite',
|
||||
'invite_to_album',
|
||||
).tr(),
|
||||
elevation: 0,
|
||||
centerTitle: false,
|
||||
@@ -141,7 +141,7 @@ class AlbumAdditionalSharedUserSelectionPage extends HookConsumerWidget {
|
||||
onPressed:
|
||||
sharedUsersList.value.isEmpty ? null : addNewUsersHandler,
|
||||
child: const Text(
|
||||
"share_add",
|
||||
"add",
|
||||
style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
),
|
||||
|
@@ -53,7 +53,7 @@ class AlbumAssetSelectionPage extends HookConsumerWidget {
|
||||
),
|
||||
title: selected.value.isEmpty
|
||||
? const Text(
|
||||
'share_add_photos',
|
||||
'add_photos',
|
||||
style: TextStyle(fontSize: 18),
|
||||
).tr()
|
||||
: const Text(
|
||||
@@ -71,7 +71,7 @@ class AlbumAssetSelectionPage extends HookConsumerWidget {
|
||||
.popForced<AssetSelectionPageResult>(payload);
|
||||
},
|
||||
child: Text(
|
||||
canDeselect ? "share_done" : "share_add",
|
||||
canDeselect ? "done" : "add",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: context.primaryColor,
|
||||
|
@@ -36,7 +36,7 @@ class AlbumControlButton extends ConsumerWidget {
|
||||
key: const ValueKey('add_photos_button'),
|
||||
iconData: Icons.add_photo_alternate_outlined,
|
||||
onPressed: onAddPhotosPressed,
|
||||
labelText: "share_add_photos".tr(),
|
||||
labelText: "add_photos".tr(),
|
||||
),
|
||||
if (isOwner)
|
||||
AlbumActionFilledButton(
|
||||
|
@@ -140,7 +140,7 @@ class AlbumOptionsPage extends HookConsumerWidget {
|
||||
style: TextStyle(color: context.colorScheme.onSurfaceSecondary),
|
||||
),
|
||||
trailing: Text(
|
||||
"shared_album_section_people_owner_label",
|
||||
"owner",
|
||||
style: context.textTheme.labelLarge,
|
||||
).tr(),
|
||||
);
|
||||
@@ -195,7 +195,7 @@ class AlbumOptionsPage extends HookConsumerWidget {
|
||||
onPressed: () => context.maybePop(null),
|
||||
),
|
||||
centerTitle: true,
|
||||
title: Text("translated_text_options".tr()),
|
||||
title: Text("options".tr()),
|
||||
),
|
||||
body: ListView(
|
||||
children: [
|
||||
@@ -215,12 +215,12 @@ class AlbumOptionsPage extends HookConsumerWidget {
|
||||
: context.themeData.disabledColor,
|
||||
dense: true,
|
||||
title: Text(
|
||||
"shared_album_activity_setting_title",
|
||||
"comments_and_likes",
|
||||
style: context.textTheme.titleMedium
|
||||
?.copyWith(fontWeight: FontWeight.w500),
|
||||
).tr(),
|
||||
subtitle: Text(
|
||||
"shared_album_activity_setting_subtitle",
|
||||
"let_others_respond",
|
||||
style: context.textTheme.labelLarge?.copyWith(
|
||||
color: context.colorScheme.onSurfaceSecondary,
|
||||
),
|
||||
|
@@ -93,7 +93,7 @@ class AlbumSharedUserSelectionPage extends HookConsumerWidget {
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: const Text(
|
||||
'select_user_for_sharing_page_share_suggestions',
|
||||
'suggestions',
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.grey,
|
||||
@@ -139,7 +139,7 @@ class AlbumSharedUserSelectionPage extends HookConsumerWidget {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(
|
||||
'share_invite',
|
||||
'invite_to_album',
|
||||
style: TextStyle(color: context.primaryColor),
|
||||
).tr(),
|
||||
elevation: 0,
|
||||
@@ -157,7 +157,7 @@ class AlbumSharedUserSelectionPage extends HookConsumerWidget {
|
||||
),
|
||||
onPressed: sharedUsersList.value.isEmpty ? null : createSharedAlbum,
|
||||
child: const Text(
|
||||
"share_create_album",
|
||||
"create_album",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
@@ -233,7 +233,7 @@ class AlbumsPage extends HookConsumerWidget {
|
||||
args: ['${sorted[index].assetCount}'],
|
||||
) : 'album_thumbnail_card_items'.tr(
|
||||
args: ['${sorted[index].assetCount}'],
|
||||
))} • ${sorted[index].ownerId != userId ? 'album_thumbnail_shared_by'.tr(args: [sorted[index].ownerName!]) : 'album_thumbnail_owned'.tr()}',
|
||||
))} • ${sorted[index].ownerId != userId ? 'album_thumbnail_shared_by'.tr(args: [sorted[index].ownerName!]) : 'owned'.tr()}',
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style:
|
||||
context.textTheme.bodyMedium?.copyWith(
|
||||
|
@@ -91,7 +91,7 @@ class BackupControllerPage extends HookConsumerWidget {
|
||||
if (albums.isNotEmpty) {
|
||||
for (var album in albums) {
|
||||
if (album.name == "Recent" || album.name == "Recents") {
|
||||
text += "${album.name} (${'backup_all'.tr()}), ";
|
||||
text += "${album.name} (${'all'.tr()}), ";
|
||||
} else {
|
||||
text += "${album.name}, ";
|
||||
}
|
||||
@@ -188,7 +188,7 @@ class BackupControllerPage extends HookConsumerWidget {
|
||||
ref.read(albumProvider.notifier).refreshDeviceAlbums();
|
||||
},
|
||||
child: const Text(
|
||||
"backup_controller_page_select",
|
||||
"select",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
@@ -231,7 +231,7 @@ class BackupControllerPage extends HookConsumerWidget {
|
||||
}
|
||||
},
|
||||
child: const Text(
|
||||
"backup_controller_page_cancel",
|
||||
"cancel",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -309,7 +309,7 @@ class BackupControllerPage extends HookConsumerWidget {
|
||||
? [
|
||||
buildFolderSelectionTile(),
|
||||
BackupInfoCard(
|
||||
title: "backup_controller_page_total".tr(),
|
||||
title: "total".tr(),
|
||||
subtitle: "backup_controller_page_total_sub".tr(),
|
||||
info: ref.watch(backupProvider).availableAlbums.isEmpty
|
||||
? "..."
|
||||
|
@@ -142,7 +142,7 @@ class CreateAlbumPage extends HookConsumerWidget {
|
||||
AlbumActionFilledButton(
|
||||
iconData: Icons.add_photo_alternate_outlined,
|
||||
onPressed: onSelectPhotosButtonPressed,
|
||||
labelText: "share_add_photos".tr(),
|
||||
labelText: "add_photos".tr(),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -207,7 +207,7 @@ class CreateAlbumPage extends HookConsumerWidget {
|
||||
icon: const Icon(Icons.close_rounded),
|
||||
),
|
||||
title: const Text(
|
||||
'share_create_album',
|
||||
'create_album',
|
||||
).tr(),
|
||||
actions: [
|
||||
TextButton(
|
||||
@@ -215,7 +215,7 @@ class CreateAlbumPage extends HookConsumerWidget {
|
||||
? createNonSharedAlbum
|
||||
: null,
|
||||
child: Text(
|
||||
'create_shared_album_page_create'.tr(),
|
||||
'create'.tr(),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: albumTitleController.text.isNotEmpty
|
||||
|
@@ -60,7 +60,7 @@ class HeaderSettingsPage extends HookConsumerWidget {
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('header_settings_page_title').tr(),
|
||||
title: const Text('advanced_settings_proxy_headers_title').tr(),
|
||||
centerTitle: false,
|
||||
actions: [
|
||||
IconButton(
|
||||
|
@@ -15,7 +15,7 @@ import 'package:immich_mobile/routing/router.dart';
|
||||
|
||||
enum SettingSection {
|
||||
advanced(
|
||||
'advanced_settings_tile_title',
|
||||
'advanced',
|
||||
Icons.build_outlined,
|
||||
"advanced_settings_tile_subtitle",
|
||||
),
|
||||
@@ -40,7 +40,7 @@ enum SettingSection {
|
||||
"networking_subtitle",
|
||||
),
|
||||
notifications(
|
||||
'setting_notifications_title',
|
||||
'notifications',
|
||||
Icons.notifications_none_rounded,
|
||||
"setting_notifications_subtitle",
|
||||
),
|
||||
@@ -83,7 +83,7 @@ class SettingsPage extends StatelessWidget {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
centerTitle: false,
|
||||
title: const Text('setting_pages_app_bar_settings').tr(),
|
||||
title: const Text('settings').tr(),
|
||||
),
|
||||
body: context.isMobile ? _MobileLayout() : _TabletLayout(),
|
||||
);
|
||||
|
@@ -65,7 +65,7 @@ class TabControllerPage extends HookConsumerWidget {
|
||||
|
||||
final navigationDestinations = [
|
||||
NavigationDestination(
|
||||
label: 'tab_controller_nav_photos'.tr(),
|
||||
label: 'photos'.tr(),
|
||||
icon: const Icon(
|
||||
Icons.photo_library_outlined,
|
||||
),
|
||||
@@ -78,7 +78,7 @@ class TabControllerPage extends HookConsumerWidget {
|
||||
),
|
||||
),
|
||||
NavigationDestination(
|
||||
label: 'tab_controller_nav_search'.tr(),
|
||||
label: 'search'.tr(),
|
||||
icon: const Icon(
|
||||
Icons.search_rounded,
|
||||
),
|
||||
|
@@ -91,7 +91,7 @@ class EditImagePage extends ConsumerWidget {
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text("edit_image_title".tr()),
|
||||
title: Text("edit".tr()),
|
||||
backgroundColor: context.scaffoldBackgroundColor,
|
||||
leading: IconButton(
|
||||
icon: Icon(
|
||||
|
@@ -21,7 +21,7 @@ class FavoritesPage extends HookConsumerWidget {
|
||||
centerTitle: true,
|
||||
automaticallyImplyLeading: false,
|
||||
title: const Text(
|
||||
'favorites_page_title',
|
||||
'favorites',
|
||||
).tr(),
|
||||
);
|
||||
}
|
||||
|
@@ -72,7 +72,7 @@ class PartnerPage extends HookConsumerWidget {
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return ConfirmDialog(
|
||||
title: "partner_page_stop_sharing_title",
|
||||
title: "stop_photo_sharing",
|
||||
content: "partner_page_stop_sharing_content".tr(args: [u.name]),
|
||||
onOk: () => ref.read(partnerServiceProvider).removePartner(u),
|
||||
);
|
||||
@@ -131,7 +131,7 @@ class PartnerPage extends HookConsumerWidget {
|
||||
data: (data) => addNewUsersHandler,
|
||||
),
|
||||
icon: const Icon(Icons.person_add),
|
||||
label: const Text("partner_page_add_partner").tr(),
|
||||
label: const Text("add_partner").tr(),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -151,7 +151,7 @@ class PartnerPage extends HookConsumerWidget {
|
||||
onPressed:
|
||||
availableUsers.whenOrNull(data: (data) => addNewUsersHandler),
|
||||
icon: const Icon(Icons.person_add),
|
||||
tooltip: "partner_page_add_partner".tr(),
|
||||
tooltip: "add_partner".tr(),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@@ -81,7 +81,7 @@ class PeopleCollectionPage extends HookConsumerWidget {
|
||||
Icons.search_rounded,
|
||||
color: context.colorScheme.primary,
|
||||
),
|
||||
hintText: 'search_filter_people_hint'.tr(),
|
||||
hintText: 'filter_people'.tr(),
|
||||
),
|
||||
autofocus: true,
|
||||
)
|
||||
|
@@ -48,7 +48,7 @@ class SharedLinkPage extends HookConsumerWidget {
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 10),
|
||||
child: const Text(
|
||||
"shared_link_empty",
|
||||
"you_dont_have_any_shared_links",
|
||||
style: TextStyle(fontSize: 14),
|
||||
).tr(),
|
||||
),
|
||||
|
@@ -49,7 +49,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
return Row(
|
||||
children: [
|
||||
const Text(
|
||||
'shared_link_public_album',
|
||||
'public_album',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
const Text(
|
||||
@@ -94,7 +94,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
}
|
||||
|
||||
return const Text(
|
||||
"shared_link_create_info",
|
||||
"create_link_to_share_description",
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
).tr();
|
||||
}
|
||||
@@ -107,7 +107,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
textInputAction: TextInputAction.done,
|
||||
autofocus: false,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'shared_link_edit_description'.tr(),
|
||||
labelText: 'description'.tr(),
|
||||
labelStyle: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: colorScheme.primary,
|
||||
@@ -133,7 +133,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
enabled: newShareLink.value.isEmpty,
|
||||
autofocus: false,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'shared_link_edit_password'.tr(),
|
||||
labelText: 'password'.tr(),
|
||||
labelStyle: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: colorScheme.primary,
|
||||
@@ -161,7 +161,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
activeColor: colorScheme.primary,
|
||||
dense: true,
|
||||
title: Text(
|
||||
"shared_link_edit_show_meta",
|
||||
"show_metadata",
|
||||
style: themeData.textTheme.labelLarge
|
||||
?.copyWith(fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
@@ -177,7 +177,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
activeColor: colorScheme.primary,
|
||||
dense: true,
|
||||
title: Text(
|
||||
"shared_link_edit_allow_download",
|
||||
"allow_public_user_to_download",
|
||||
style: themeData.textTheme.labelLarge
|
||||
?.copyWith(fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
@@ -193,7 +193,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
activeColor: colorScheme.primary,
|
||||
dense: true,
|
||||
title: Text(
|
||||
"shared_link_edit_allow_upload",
|
||||
"allow_public_user_to_upload",
|
||||
style: themeData.textTheme.labelLarge
|
||||
?.copyWith(fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
@@ -209,7 +209,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
activeColor: colorScheme.primary,
|
||||
dense: true,
|
||||
title: Text(
|
||||
"shared_link_edit_change_expiry",
|
||||
"change_expiration_time",
|
||||
style: themeData.textTheme.labelLarge
|
||||
?.copyWith(fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
@@ -219,7 +219,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
Widget buildExpiryAfterButton() {
|
||||
return DropdownMenu(
|
||||
label: Text(
|
||||
"shared_link_edit_expire_after",
|
||||
"expire_after",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: colorScheme.primary,
|
||||
@@ -237,7 +237,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
dropdownMenuEntries: [
|
||||
DropdownMenuEntry(
|
||||
value: 0,
|
||||
label: "shared_link_edit_expire_after_option_never".tr(),
|
||||
label: "never".tr(),
|
||||
),
|
||||
DropdownMenuEntry(
|
||||
value: 30,
|
||||
@@ -324,7 +324,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
context.maybePop();
|
||||
},
|
||||
child: const Text(
|
||||
"share_done",
|
||||
"done",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -430,9 +430,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(
|
||||
existingLink == null
|
||||
? "shared_link_create_app_bar_title"
|
||||
: "shared_link_edit_app_bar_title",
|
||||
existingLink == null ? "create_link_to_share" : "edit_link",
|
||||
).tr(),
|
||||
elevation: 0,
|
||||
leading: const CloseButton(),
|
||||
@@ -505,7 +503,7 @@ class SharedLinkEditPage extends HookConsumerWidget {
|
||||
child: Text(
|
||||
existingLink != null
|
||||
? "shared_link_edit_submit_button"
|
||||
: "shared_link_create_submit_button",
|
||||
: "create_link",
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
@@ -57,8 +57,8 @@ class TrashPage extends HookConsumerWidget {
|
||||
context: context,
|
||||
builder: (context) => ConfirmDialog(
|
||||
onOk: () => onEmptyTrash(),
|
||||
title: "trash_page_empty_trash_btn".tr(),
|
||||
ok: "trash_page_empty_trash_dialog_ok".tr(),
|
||||
title: "empty_trash".tr(),
|
||||
ok: "ok".tr(),
|
||||
content: "trash_page_empty_trash_dialog_content".tr(),
|
||||
),
|
||||
);
|
||||
@@ -161,11 +161,11 @@ class TrashPage extends HookConsumerWidget {
|
||||
return [
|
||||
PopupMenuItem(
|
||||
value: () => selectionEnabledHook.value = true,
|
||||
child: const Text('trash_page_select_btn').tr(),
|
||||
child: const Text('select').tr(),
|
||||
),
|
||||
PopupMenuItem(
|
||||
value: handleEmptyTrash,
|
||||
child: const Text('trash_page_empty_trash_btn').tr(),
|
||||
child: const Text('empty_trash').tr(),
|
||||
),
|
||||
];
|
||||
},
|
||||
@@ -194,7 +194,7 @@ class TrashPage extends HookConsumerWidget {
|
||||
label: Text(
|
||||
selection.value.isEmpty
|
||||
? 'trash_page_delete_all'.tr()
|
||||
: 'trash_page_delete'.tr(),
|
||||
: 'delete'.tr(),
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Colors.red[400],
|
||||
@@ -214,7 +214,7 @@ class TrashPage extends HookConsumerWidget {
|
||||
label: Text(
|
||||
selection.value.isEmpty
|
||||
? 'trash_page_restore_all'.tr()
|
||||
: 'trash_page_restore'.tr(),
|
||||
: 'restore'.tr(),
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
@@ -44,7 +44,7 @@ class PermissionOnboardingPage extends HookConsumerWidget {
|
||||
}
|
||||
}),
|
||||
child: const Text(
|
||||
'permission_onboarding_grant_permission',
|
||||
'grant_permission',
|
||||
).tr(),
|
||||
),
|
||||
],
|
||||
@@ -168,7 +168,7 @@ class PermissionOnboardingPage extends HookConsumerWidget {
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
child: const Text('permission_onboarding_back').tr(),
|
||||
child: const Text('back').tr(),
|
||||
onPressed: () => context.maybePop(),
|
||||
),
|
||||
],
|
||||
|
@@ -16,7 +16,7 @@ class AllMotionPhotosPage extends HookConsumerWidget {
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('motion_photos_page_title').tr(),
|
||||
title: const Text('search_page_motion_photos').tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
|
@@ -18,7 +18,7 @@ class AllPeoplePage extends HookConsumerWidget {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text(
|
||||
'all_people_page_title',
|
||||
'people',
|
||||
).tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.maybePop(),
|
||||
|
@@ -19,7 +19,7 @@ class AllPlacesPage extends HookConsumerWidget {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text(
|
||||
'curated_location_page_title',
|
||||
'places',
|
||||
).tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.maybePop(),
|
||||
|
@@ -13,7 +13,7 @@ class AllVideosPage extends HookConsumerWidget {
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('all_videos_page_title').tr(),
|
||||
title: const Text('videos').tr(),
|
||||
leading: IconButton(
|
||||
onPressed: () => context.maybePop(),
|
||||
icon: const Icon(Icons.arrow_back_ios_rounded),
|
||||
|
@@ -55,7 +55,7 @@ class PersonResultPage extends HookConsumerWidget {
|
||||
ListTile(
|
||||
leading: const Icon(Icons.edit_outlined),
|
||||
title: const Text(
|
||||
'search_page_person_edit_name',
|
||||
'edit_name',
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
onTap: showEditNameDialog,
|
||||
@@ -75,13 +75,13 @@ class PersonResultPage extends HookConsumerWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'search_page_person_add_name_title',
|
||||
'add_a_name',
|
||||
style: context.textTheme.titleMedium?.copyWith(
|
||||
color: context.primaryColor,
|
||||
),
|
||||
).tr(),
|
||||
Text(
|
||||
'search_page_person_add_name_subtitle',
|
||||
'find_them_fast',
|
||||
style: context.textTheme.labelLarge,
|
||||
).tr(),
|
||||
],
|
||||
|
@@ -33,7 +33,7 @@ class SearchPage extends HookConsumerWidget {
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final textSearchType = useState<TextSearchType>(TextSearchType.context);
|
||||
final searchHintText = useState<String>('contextual_search'.tr());
|
||||
final searchHintText = useState<String>('sunrise_on_the_beach'.tr());
|
||||
final textSearchController = useTextEditingController();
|
||||
final filter = useState<SearchFilter>(
|
||||
SearchFilter(
|
||||
@@ -308,9 +308,9 @@ class SearchPage extends HookConsumerWidget {
|
||||
end: filter.value.date.takenBefore ?? lastDate,
|
||||
),
|
||||
helpText: 'search_filter_date_title'.tr(),
|
||||
cancelText: 'action_common_cancel'.tr(),
|
||||
confirmText: 'action_common_select'.tr(),
|
||||
saveText: 'action_common_save'.tr(),
|
||||
cancelText: 'cancel'.tr(),
|
||||
confirmText: 'select'.tr(),
|
||||
saveText: 'save'.tr(),
|
||||
errorFormatText: 'invalid_date_format'.tr(),
|
||||
errorInvalidText: 'invalid_date'.tr(),
|
||||
fieldStartHintText: 'start_date'.tr(),
|
||||
@@ -372,10 +372,10 @@ class SearchPage extends HookConsumerWidget {
|
||||
|
||||
mediaTypeCurrentFilterWidget.value = Text(
|
||||
assetType == AssetType.image
|
||||
? 'search_filter_media_type_image'.tr()
|
||||
? 'image'.tr()
|
||||
: assetType == AssetType.video
|
||||
? 'search_filter_media_type_video'.tr()
|
||||
: 'search_filter_media_type_all'.tr(),
|
||||
? 'video'.tr()
|
||||
: 'all'.tr(),
|
||||
style: context.textTheme.labelLarge,
|
||||
);
|
||||
}
|
||||
@@ -427,7 +427,7 @@ class SearchPage extends HookConsumerWidget {
|
||||
),
|
||||
);
|
||||
if (value) {
|
||||
filterText.add('search_filter_display_option_archive'.tr());
|
||||
filterText.add('archive'.tr());
|
||||
}
|
||||
break;
|
||||
case DisplayOption.favorite:
|
||||
@@ -437,7 +437,7 @@ class SearchPage extends HookConsumerWidget {
|
||||
),
|
||||
);
|
||||
if (value) {
|
||||
filterText.add('search_filter_display_option_favorite'.tr());
|
||||
filterText.add('favorite'.tr());
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -470,7 +470,7 @@ class SearchPage extends HookConsumerWidget {
|
||||
showFilterBottomSheet(
|
||||
context: context,
|
||||
child: FilterBottomSheetScaffold(
|
||||
title: 'search_filter_display_options_title'.tr(),
|
||||
title: 'display_options'.tr(),
|
||||
onSearch: search,
|
||||
onClear: handleClear,
|
||||
child: DisplayOptionPicker(
|
||||
@@ -563,7 +563,7 @@ class SearchPage extends HookConsumerWidget {
|
||||
child: ListTile(
|
||||
leading: const Icon(Icons.image_search_rounded),
|
||||
title: Text(
|
||||
'search_filter_contextual'.tr(),
|
||||
'search_by_context'.tr(),
|
||||
style: context.textTheme.bodyLarge?.copyWith(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: textSearchType.value == TextSearchType.context
|
||||
@@ -576,7 +576,7 @@ class SearchPage extends HookConsumerWidget {
|
||||
),
|
||||
onPressed: () {
|
||||
textSearchType.value = TextSearchType.context;
|
||||
searchHintText.value = 'contextual_search'.tr();
|
||||
searchHintText.value = 'sunrise_on_the_beach'.tr();
|
||||
},
|
||||
),
|
||||
MenuItemButton(
|
||||
@@ -596,14 +596,14 @@ class SearchPage extends HookConsumerWidget {
|
||||
),
|
||||
onPressed: () {
|
||||
textSearchType.value = TextSearchType.filename;
|
||||
searchHintText.value = 'filename_search'.tr();
|
||||
searchHintText.value = 'file_name_or_extension'.tr();
|
||||
},
|
||||
),
|
||||
MenuItemButton(
|
||||
child: ListTile(
|
||||
leading: const Icon(Icons.text_snippet_outlined),
|
||||
title: Text(
|
||||
'search_filter_description'.tr(),
|
||||
'search_by_description'.tr(),
|
||||
style: context.textTheme.bodyLarge?.copyWith(
|
||||
fontWeight: FontWeight.w500,
|
||||
color:
|
||||
@@ -618,7 +618,7 @@ class SearchPage extends HookConsumerWidget {
|
||||
),
|
||||
onPressed: () {
|
||||
textSearchType.value = TextSearchType.description;
|
||||
searchHintText.value = 'description_search'.tr();
|
||||
searchHintText.value = 'search_by_description_example'.tr();
|
||||
},
|
||||
),
|
||||
],
|
||||
@@ -675,7 +675,7 @@ class SearchPage extends HookConsumerWidget {
|
||||
SearchFilterChip(
|
||||
icon: Icons.people_alt_outlined,
|
||||
onTap: showPeoplePicker,
|
||||
label: 'search_filter_people'.tr(),
|
||||
label: 'people'.tr(),
|
||||
currentFilter: peopleCurrentFilterWidget.value,
|
||||
),
|
||||
SearchFilterChip(
|
||||
@@ -687,7 +687,7 @@ class SearchPage extends HookConsumerWidget {
|
||||
SearchFilterChip(
|
||||
icon: Icons.camera_alt_outlined,
|
||||
onTap: showCameraPicker,
|
||||
label: 'search_filter_camera'.tr(),
|
||||
label: 'camera'.tr(),
|
||||
currentFilter: cameraCurrentFilterWidget.value,
|
||||
),
|
||||
SearchFilterChip(
|
||||
|
@@ -84,12 +84,12 @@ enum AlbumSortMode {
|
||||
created(0, "library_page_sort_created", _AlbumSortHandlers.created),
|
||||
mostRecent(
|
||||
2,
|
||||
"library_page_sort_most_recent_photo",
|
||||
"sort_recent",
|
||||
_AlbumSortHandlers.mostRecent,
|
||||
),
|
||||
mostOldest(
|
||||
5,
|
||||
"library_page_sort_most_oldest_photo",
|
||||
"sort_oldest",
|
||||
_AlbumSortHandlers.mostOldest,
|
||||
);
|
||||
|
||||
|
@@ -301,7 +301,7 @@ class ManualUploadNotifier extends StateNotifier<ManualUploadState> {
|
||||
(!ok && !state.cancelToken.isCancelled)) {
|
||||
await _localNotificationService.showOrUpdateManualUploadStatus(
|
||||
"backup_manual_title".tr(),
|
||||
"backup_manual_failed".tr(),
|
||||
"failed".tr(),
|
||||
presentBanner: true,
|
||||
);
|
||||
hasErrors = true;
|
||||
@@ -370,7 +370,7 @@ class ManualUploadNotifier extends StateNotifier<ManualUploadState> {
|
||||
debugPrint("[uploadAssets] could not acquire lock, exiting");
|
||||
ImmichToast.show(
|
||||
context: context,
|
||||
msg: "backup_manual_failed".tr(),
|
||||
msg: "failed".tr(),
|
||||
toastType: ToastType.info,
|
||||
gravity: ToastGravity.BOTTOM,
|
||||
durationInSecond: 3,
|
||||
|
@@ -117,8 +117,8 @@ class _LocationServiceDisabledDialog extends ConfirmDialog {
|
||||
: super(
|
||||
title: 'map_location_service_disabled_title'.tr(),
|
||||
content: 'map_location_service_disabled_content'.tr(),
|
||||
cancel: 'map_location_dialog_cancel'.tr(),
|
||||
ok: 'map_location_dialog_yes'.tr(),
|
||||
cancel: 'cancel'.tr(),
|
||||
ok: 'yes'.tr(),
|
||||
onOk: () async {
|
||||
await Geolocator.openLocationSettings();
|
||||
},
|
||||
@@ -130,8 +130,8 @@ class _LocationPermissionDisabledDialog extends ConfirmDialog {
|
||||
: super(
|
||||
title: 'map_no_location_permission_title'.tr(),
|
||||
content: 'map_no_location_permission_content'.tr(),
|
||||
cancel: 'map_location_dialog_cancel'.tr(),
|
||||
ok: 'map_location_dialog_yes'.tr(),
|
||||
cancel: 'cancel'.tr(),
|
||||
ok: 'yes'.tr(),
|
||||
onOk: () {},
|
||||
);
|
||||
}
|
||||
|
@@ -90,7 +90,7 @@ class ActivityTextField extends HookConsumerWidget {
|
||||
suffixIconColor: liked ? Colors.red[700] : null,
|
||||
hintText: !isEnabled
|
||||
? 'shared_album_activities_input_disable'.tr()
|
||||
: 'shared_album_activities_input_hint'.tr(),
|
||||
: 'say_something'.tr(),
|
||||
hintStyle: TextStyle(
|
||||
fontWeight: FontWeight.normal,
|
||||
fontSize: 14,
|
||||
|
@@ -30,7 +30,7 @@ class DismissibleActivity extends StatelessWidget {
|
||||
onOk: () {},
|
||||
title: "shared_album_activity_remove_title",
|
||||
content: "shared_album_activity_remove_content",
|
||||
ok: "delete_dialog_ok",
|
||||
ok: "delete",
|
||||
),
|
||||
)
|
||||
: Future.value(false),
|
||||
|
@@ -89,7 +89,7 @@ class AddToAlbumBottomSheet extends HookConsumerWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'common_add_to_album'.tr(),
|
||||
'add_to_album'.tr(),
|
||||
style: context.textTheme.displayMedium,
|
||||
),
|
||||
TextButton.icon(
|
||||
|
@@ -37,7 +37,7 @@ class AddToAlbumSliverList extends HookConsumerWidget {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 8),
|
||||
child: ExpansionTile(
|
||||
title: Text('common_shared'.tr()),
|
||||
title: Text('shared'.tr()),
|
||||
tilePadding: const EdgeInsets.symmetric(horizontal: 10.0),
|
||||
leading: const Icon(Icons.group),
|
||||
children: [
|
||||
|
@@ -59,7 +59,7 @@ class AlbumThumbnailCard extends ConsumerWidget {
|
||||
String? owner;
|
||||
if (showOwner) {
|
||||
if (album.ownerId == ref.read(currentUserProvider)?.id) {
|
||||
owner = 'album_thumbnail_owned'.tr();
|
||||
owner = 'owned'.tr();
|
||||
} else if (album.ownerName != null) {
|
||||
owner = 'album_thumbnail_shared_by'.tr(args: [album.ownerName!]);
|
||||
}
|
||||
|
@@ -67,7 +67,7 @@ class AlbumTitleTextField extends ConsumerWidget {
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
hintText: 'share_add_title'.tr(),
|
||||
hintText: 'add_a_title'.tr(),
|
||||
hintStyle: context.themeData.inputDecorationTheme.hintStyle?.copyWith(
|
||||
fontSize: 28,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
@@ -76,13 +76,13 @@ class AlbumViewerAppbar extends HookConsumerWidget
|
||||
barrierDismissible: false, // user must tap button!
|
||||
builder: (BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: const Text('album_viewer_appbar_share_delete').tr(),
|
||||
title: const Text('delete_album').tr(),
|
||||
content: const Text('album_viewer_appbar_delete_confirm').tr(),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: () => context.pop('Cancel'),
|
||||
child: Text(
|
||||
'action_common_cancel',
|
||||
'cancel',
|
||||
style: TextStyle(
|
||||
color: context.primaryColor,
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -95,7 +95,7 @@ class AlbumViewerAppbar extends HookConsumerWidget
|
||||
deleteAlbum();
|
||||
},
|
||||
child: Text(
|
||||
'action_common_confirm',
|
||||
'confirm',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: context.colorScheme.error,
|
||||
@@ -131,7 +131,7 @@ class AlbumViewerAppbar extends HookConsumerWidget
|
||||
? ListTile(
|
||||
leading: const Icon(Icons.delete_forever_rounded),
|
||||
title: const Text(
|
||||
'album_viewer_appbar_share_delete',
|
||||
'delete_album',
|
||||
style: TextStyle(fontWeight: FontWeight.w500),
|
||||
).tr(),
|
||||
onTap: onDeleteAlbumPressed,
|
||||
@@ -203,7 +203,7 @@ class AlbumViewerAppbar extends HookConsumerWidget
|
||||
leading: const Icon(Icons.settings_rounded),
|
||||
onTap: () => context.navigateTo(const AlbumOptionsRoute()),
|
||||
title: const Text(
|
||||
"translated_text_options",
|
||||
"options",
|
||||
style: TextStyle(fontWeight: FontWeight.w500),
|
||||
).tr(),
|
||||
),
|
||||
@@ -220,7 +220,7 @@ class AlbumViewerAppbar extends HookConsumerWidget
|
||||
}
|
||||
},
|
||||
title: const Text(
|
||||
"share_add_photos",
|
||||
"add_photos",
|
||||
style: TextStyle(fontWeight: FontWeight.w500),
|
||||
).tr(),
|
||||
),
|
||||
|
@@ -88,7 +88,7 @@ class AlbumViewerEditableTitle extends HookConsumerWidget {
|
||||
focusColor: Colors.grey[300],
|
||||
fillColor: context.scaffoldBackgroundColor,
|
||||
filled: titleFocusNode.hasFocus,
|
||||
hintText: 'share_add_title'.tr(),
|
||||
hintText: 'add_a_title'.tr(),
|
||||
hintStyle: context.themeData.inputDecorationTheme.hintStyle?.copyWith(
|
||||
fontSize: 28,
|
||||
),
|
||||
|
@@ -130,7 +130,7 @@ class ControlBottomAppBar extends HookConsumerWidget {
|
||||
iconData: Platform.isAndroid
|
||||
? Icons.share_rounded
|
||||
: Icons.ios_share_rounded,
|
||||
label: "control_bottom_app_bar_share".tr(),
|
||||
label: "share".tr(),
|
||||
onPressed: enabled ? () => onShare(true) : null,
|
||||
),
|
||||
ControlBoxButton(
|
||||
@@ -142,10 +142,7 @@ class ControlBottomAppBar extends HookConsumerWidget {
|
||||
ControlBoxButton(
|
||||
iconData:
|
||||
unarchive ? Icons.unarchive_outlined : Icons.archive_outlined,
|
||||
label: (unarchive
|
||||
? "control_bottom_app_bar_unarchive"
|
||||
: "control_bottom_app_bar_archive")
|
||||
.tr(),
|
||||
label: (unarchive ? "unarchive" : "archive").tr(),
|
||||
onPressed: enabled ? onArchive : null,
|
||||
),
|
||||
if (hasRemote && onFavorite != null)
|
||||
@@ -153,10 +150,7 @@ class ControlBottomAppBar extends HookConsumerWidget {
|
||||
iconData: unfavorite
|
||||
? Icons.favorite_border_rounded
|
||||
: Icons.favorite_rounded,
|
||||
label: (unfavorite
|
||||
? "control_bottom_app_bar_unfavorite"
|
||||
: "control_bottom_app_bar_favorite")
|
||||
.tr(),
|
||||
label: (unfavorite ? "unfavorite" : "favorite").tr(),
|
||||
onPressed: enabled ? onFavorite : null,
|
||||
),
|
||||
if (hasLocal && hasRemote && onDelete != null)
|
||||
@@ -164,7 +158,7 @@ class ControlBottomAppBar extends HookConsumerWidget {
|
||||
constraints: const BoxConstraints(maxWidth: 90),
|
||||
child: ControlBoxButton(
|
||||
iconData: Icons.delete_sweep_outlined,
|
||||
label: "control_bottom_app_bar_delete".tr(),
|
||||
label: "delete".tr(),
|
||||
onPressed: enabled
|
||||
? () => handleRemoteDelete(!trashEnabled, onDelete!)
|
||||
: null,
|
||||
@@ -244,7 +238,7 @@ class ControlBottomAppBar extends HookConsumerWidget {
|
||||
constraints: const BoxConstraints(maxWidth: 90),
|
||||
child: ControlBoxButton(
|
||||
iconData: Icons.filter_none_rounded,
|
||||
label: "control_bottom_app_bar_stack".tr(),
|
||||
label: "stack".tr(),
|
||||
onPressed: enabled ? onStack : null,
|
||||
),
|
||||
),
|
||||
@@ -253,14 +247,14 @@ class ControlBottomAppBar extends HookConsumerWidget {
|
||||
constraints: const BoxConstraints(maxWidth: 90),
|
||||
child: ControlBoxButton(
|
||||
iconData: Icons.remove_circle_outline,
|
||||
label: 'album_viewer_appbar_share_remove'.tr(),
|
||||
label: 'remove_from_album'.tr(),
|
||||
onPressed: enabled ? onRemoveFromAlbum : null,
|
||||
),
|
||||
),
|
||||
if (selectionAssetState.hasLocal)
|
||||
ControlBoxButton(
|
||||
iconData: Icons.backup_outlined,
|
||||
label: "control_bottom_app_bar_upload".tr(),
|
||||
label: "upload".tr(),
|
||||
onPressed: enabled
|
||||
? () => showDialog(
|
||||
context: context,
|
||||
@@ -359,7 +353,7 @@ class _AddToAlbumTitleRow extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
const Text(
|
||||
"common_add_to_album",
|
||||
"add_to_album",
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
@@ -10,8 +10,8 @@ class DeleteDialog extends ConfirmDialog {
|
||||
: super(
|
||||
title: "delete_dialog_title",
|
||||
content: alert ?? "delete_dialog_alert",
|
||||
cancel: "delete_dialog_cancel",
|
||||
ok: "delete_dialog_ok",
|
||||
cancel: "cancel",
|
||||
ok: "delete",
|
||||
onOk: onDelete,
|
||||
);
|
||||
}
|
||||
@@ -46,7 +46,7 @@ class DeleteLocalOnlyDialog extends StatelessWidget {
|
||||
TextButton(
|
||||
onPressed: () => context.pop(),
|
||||
child: Text(
|
||||
"delete_dialog_cancel",
|
||||
"cancel",
|
||||
style: TextStyle(
|
||||
color: context.primaryColor,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
@@ -7,8 +7,8 @@ class UploadDialog extends ConfirmDialog {
|
||||
: super(
|
||||
title: 'upload_dialog_title',
|
||||
content: 'upload_dialog_info',
|
||||
cancel: 'upload_dialog_cancel',
|
||||
ok: 'upload_dialog_ok',
|
||||
cancel: 'cancel',
|
||||
ok: 'upload',
|
||||
onOk: onUpload,
|
||||
);
|
||||
}
|
||||
|
@@ -273,16 +273,16 @@ class BottomGalleryBar extends ConsumerWidget {
|
||||
icon: Icon(
|
||||
Platform.isAndroid ? Icons.share_rounded : Icons.ios_share_rounded,
|
||||
),
|
||||
label: 'control_bottom_app_bar_share'.tr(),
|
||||
tooltip: 'control_bottom_app_bar_share'.tr(),
|
||||
label: 'share'.tr(),
|
||||
tooltip: 'share'.tr(),
|
||||
): (_) => shareAsset(),
|
||||
},
|
||||
if (asset.isImage)
|
||||
{
|
||||
BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.tune_outlined),
|
||||
label: 'control_bottom_app_bar_edit'.tr(),
|
||||
tooltip: 'control_bottom_app_bar_edit'.tr(),
|
||||
label: 'edit'.tr(),
|
||||
tooltip: 'edit'.tr(),
|
||||
): (_) => handleEdit(),
|
||||
},
|
||||
if (isOwner)
|
||||
@@ -290,45 +290,45 @@ class BottomGalleryBar extends ConsumerWidget {
|
||||
asset.isArchived
|
||||
? BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.unarchive_rounded),
|
||||
label: 'control_bottom_app_bar_unarchive'.tr(),
|
||||
tooltip: 'control_bottom_app_bar_unarchive'.tr(),
|
||||
label: 'unarchive'.tr(),
|
||||
tooltip: 'unarchive'.tr(),
|
||||
)
|
||||
: BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.archive_outlined),
|
||||
label: 'control_bottom_app_bar_archive'.tr(),
|
||||
tooltip: 'control_bottom_app_bar_archive'.tr(),
|
||||
label: 'archive'.tr(),
|
||||
tooltip: 'archive'.tr(),
|
||||
): (_) => handleArchive(),
|
||||
},
|
||||
if (isOwner && asset.stackCount > 0)
|
||||
{
|
||||
BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.burst_mode_outlined),
|
||||
label: 'control_bottom_app_bar_stack'.tr(),
|
||||
tooltip: 'control_bottom_app_bar_stack'.tr(),
|
||||
label: 'stack'.tr(),
|
||||
tooltip: 'stack'.tr(),
|
||||
): (_) => showStackActionItems(),
|
||||
},
|
||||
if (isOwner && !isInAlbum)
|
||||
{
|
||||
BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.delete_outline),
|
||||
label: 'control_bottom_app_bar_delete'.tr(),
|
||||
tooltip: 'control_bottom_app_bar_delete'.tr(),
|
||||
label: 'delete'.tr(),
|
||||
tooltip: 'delete'.tr(),
|
||||
): (_) => handleDelete(),
|
||||
},
|
||||
if (!isOwner)
|
||||
{
|
||||
BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.download_outlined),
|
||||
label: 'control_bottom_app_bar_download'.tr(),
|
||||
tooltip: 'control_bottom_app_bar_download'.tr(),
|
||||
label: 'download'.tr(),
|
||||
tooltip: 'download'.tr(),
|
||||
): (_) => handleDownload(),
|
||||
},
|
||||
if (isInAlbum)
|
||||
{
|
||||
BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.remove_circle_outline),
|
||||
label: 'album_viewer_appbar_share_remove'.tr(),
|
||||
tooltip: 'album_viewer_appbar_share_remove'.tr(),
|
||||
label: 'remove_from_album'.tr(),
|
||||
tooltip: 'remove_from_album'.tr(),
|
||||
): (_) => handleRemoveFromAlbum(),
|
||||
},
|
||||
];
|
||||
|
@@ -34,7 +34,7 @@ class AssetLocation extends HookConsumerWidget {
|
||||
contentPadding: const EdgeInsets.all(0),
|
||||
leading: const Icon(Icons.location_on),
|
||||
title: Text(
|
||||
"exif_bottom_sheet_location_add",
|
||||
"add_a_location",
|
||||
style: context.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: context.primaryColor,
|
||||
|
@@ -185,7 +185,7 @@ class AlbumInfoCard extends HookConsumerWidget {
|
||||
padding: const EdgeInsets.only(top: 2.0),
|
||||
child: Text(
|
||||
album.assetCount.toString() +
|
||||
(album.isAll ? " (${'backup_all'.tr()})" : ""),
|
||||
(album.isAll ? " (${'all'.tr()})" : ""),
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
color: Colors.grey[600],
|
||||
|
@@ -96,7 +96,7 @@ class ImmichAppBarDialog extends HookConsumerWidget {
|
||||
buildSettingButton() {
|
||||
return buildActionButton(
|
||||
Icons.settings_outlined,
|
||||
"profile_drawer_settings",
|
||||
"settings",
|
||||
() => context.pushRoute(const SettingsRoute()),
|
||||
);
|
||||
}
|
||||
@@ -112,7 +112,7 @@ class ImmichAppBarDialog extends HookConsumerWidget {
|
||||
buildSignOutButton() {
|
||||
return buildActionButton(
|
||||
Icons.logout_rounded,
|
||||
"profile_drawer_sign_out",
|
||||
"sign_out",
|
||||
() async {
|
||||
if (isLoggingOut.value) {
|
||||
return;
|
||||
@@ -124,7 +124,7 @@ class ImmichAppBarDialog extends HookConsumerWidget {
|
||||
return ConfirmDialog(
|
||||
title: "app_bar_signout_dialog_title",
|
||||
content: "app_bar_signout_dialog_content",
|
||||
ok: "app_bar_signout_dialog_ok",
|
||||
ok: "yes",
|
||||
onOk: () async {
|
||||
isLoggingOut.value = true;
|
||||
await ref
|
||||
@@ -229,7 +229,7 @@ class ImmichAppBarDialog extends HookConsumerWidget {
|
||||
);
|
||||
},
|
||||
child: Text(
|
||||
"profile_drawer_documentation",
|
||||
"documentation",
|
||||
style: context.textTheme.bodySmall,
|
||||
).tr(),
|
||||
),
|
||||
|
@@ -115,7 +115,7 @@ class AppBarServerInfo extends HookConsumerWidget {
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(left: 10.0),
|
||||
child: Text(
|
||||
"server_info_box_server_version".tr(),
|
||||
"server_version".tr(),
|
||||
style: TextStyle(
|
||||
fontSize: titleFontSize,
|
||||
color: context.textTheme.labelSmall?.color,
|
||||
@@ -218,7 +218,7 @@ class AppBarServerInfo extends HookConsumerWidget {
|
||||
),
|
||||
),
|
||||
Text(
|
||||
"server_info_box_latest_release".tr(),
|
||||
"latest_version".tr(),
|
||||
style: TextStyle(
|
||||
fontSize: titleFontSize,
|
||||
color: context.textTheme.labelSmall?.color,
|
||||
|
@@ -14,7 +14,7 @@ class ConfirmDialog extends StatelessWidget {
|
||||
required this.onOk,
|
||||
required this.title,
|
||||
required this.content,
|
||||
this.cancel = "delete_dialog_cancel",
|
||||
this.cancel = "cancel",
|
||||
this.ok = "backup_controller_page_background_battery_info_ok",
|
||||
});
|
||||
|
||||
|
@@ -139,7 +139,7 @@ class _DateTimePicker extends HookWidget {
|
||||
TextButton(
|
||||
onPressed: () => context.pop(),
|
||||
child: Text(
|
||||
"action_common_cancel",
|
||||
"cancel",
|
||||
style: context.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: context.colorScheme.error,
|
||||
@@ -162,7 +162,7 @@ class _DateTimePicker extends HookWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const Text(
|
||||
"edit_date_time_dialog_date_time",
|
||||
"date_and_time",
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w600,
|
||||
@@ -197,8 +197,8 @@ class _DateTimePicker extends HookWidget {
|
||||
Icons.arrow_drop_down,
|
||||
color: context.primaryColor,
|
||||
),
|
||||
hintText: "edit_date_time_dialog_timezone".tr(),
|
||||
label: const Text('edit_date_time_dialog_timezone').tr(),
|
||||
hintText: "timezone".tr(),
|
||||
label: const Text('timezone').tr(),
|
||||
textStyle: context.textTheme.bodyMedium,
|
||||
onSelected: (value) => tzOffset.value = value,
|
||||
initialSelection: tzOffset.value,
|
||||
|
@@ -94,7 +94,7 @@ class DropdownSearchMenu<T> extends HookWidget {
|
||||
focusNode: focusNode,
|
||||
controller: textEditingController,
|
||||
decoration: inputDecoration.copyWith(
|
||||
hintText: "edit_date_time_dialog_search_timezone".tr(),
|
||||
hintText: "search_timezone".tr(),
|
||||
),
|
||||
maxLines: 1,
|
||||
style: context.textTheme.bodyMedium,
|
||||
|
@@ -71,7 +71,7 @@ class _LocationPicker extends HookWidget {
|
||||
TextButton(
|
||||
onPressed: () => context.pop(),
|
||||
child: Text(
|
||||
"action_common_cancel",
|
||||
"cancel",
|
||||
style: context.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: context.colorScheme.error,
|
||||
@@ -203,7 +203,7 @@ class _ManualPicker extends HookWidget {
|
||||
const SizedBox(height: 12),
|
||||
_ManualPickerInput(
|
||||
initialValue: latlng.latitude.toStringAsFixed(4),
|
||||
decorationText: "location_picker_latitude",
|
||||
decorationText: "latitude",
|
||||
hintText: "location_picker_latitude_hint",
|
||||
errorText: "location_picker_latitude_error",
|
||||
focusNode: latitiudeFocusNode,
|
||||
@@ -213,7 +213,7 @@ class _ManualPicker extends HookWidget {
|
||||
const SizedBox(height: 24),
|
||||
_ManualPickerInput(
|
||||
initialValue: latlng.longitude.toStringAsFixed(4),
|
||||
decorationText: "location_picker_longitude",
|
||||
decorationText: "longitude",
|
||||
hintText: "location_picker_longitude_hint",
|
||||
errorText: "location_picker_longitude_error",
|
||||
focusNode: longitudeFocusNode,
|
||||
|
@@ -34,7 +34,7 @@ class ChangePasswordForm extends HookConsumerWidget {
|
||||
alignment: WrapAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'common_change_password'.tr(),
|
||||
'change_password'.tr(),
|
||||
style: TextStyle(
|
||||
fontSize: 24,
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -110,7 +110,7 @@ class ChangePasswordForm extends HookConsumerWidget {
|
||||
TextButton.icon(
|
||||
icon: const Icon(Icons.arrow_back),
|
||||
onPressed: () => AutoRouter.of(context).back(),
|
||||
label: const Text('action_common_back').tr(),
|
||||
label: const Text('back').tr(),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -193,7 +193,7 @@ class ChangePasswordButton extends ConsumerWidget {
|
||||
),
|
||||
onPressed: onPressed,
|
||||
child: Text(
|
||||
'common_change_password'.tr(),
|
||||
'change_password'.tr(),
|
||||
style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
|
||||
),
|
||||
);
|
||||
|
@@ -29,7 +29,7 @@ class EmailInput extends StatelessWidget {
|
||||
autofocus: true,
|
||||
controller: controller,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'login_form_label_email'.tr(),
|
||||
labelText: 'email'.tr(),
|
||||
border: const OutlineInputBorder(),
|
||||
hintText: 'login_form_email_hint'.tr(),
|
||||
hintStyle: const TextStyle(
|
||||
|
@@ -19,7 +19,7 @@ class LoginButton extends ConsumerWidget {
|
||||
onPressed: onPressed,
|
||||
icon: const Icon(Icons.login_rounded),
|
||||
label: const Text(
|
||||
"login_form_button_text",
|
||||
"login",
|
||||
style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
);
|
||||
|
@@ -323,7 +323,7 @@ class LoginForm extends HookConsumerWidget {
|
||||
isLoadingServer.value ? null : getServerAuthSettings,
|
||||
icon: const Icon(Icons.arrow_forward_rounded),
|
||||
label: const Text(
|
||||
'login_form_next_button',
|
||||
'next',
|
||||
style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
),
|
||||
@@ -430,7 +430,7 @@ class LoginForm extends HookConsumerWidget {
|
||||
TextButton.icon(
|
||||
icon: const Icon(Icons.arrow_back),
|
||||
onPressed: () => serverEndpoint.value = null,
|
||||
label: const Text('login_form_back_button_text').tr(),
|
||||
label: const Text('back').tr(),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@@ -23,7 +23,7 @@ class PasswordInput extends HookConsumerWidget {
|
||||
obscureText: !isPasswordVisible.value,
|
||||
controller: controller,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'login_form_label_password'.tr(),
|
||||
labelText: 'password'.tr(),
|
||||
border: const OutlineInputBorder(),
|
||||
hintText: 'login_form_password_hint'.tr(),
|
||||
hintStyle: const TextStyle(
|
||||
|
@@ -21,7 +21,7 @@ class MapTimeDropDown extends StatelessWidget {
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(bottom: 20),
|
||||
child: Text(
|
||||
"map_settings_only_relative_range".tr(),
|
||||
"date_range".tr(),
|
||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
@@ -35,7 +35,7 @@ class MapTimeDropDown extends StatelessWidget {
|
||||
dropdownMenuEntries: [
|
||||
DropdownMenuEntry(
|
||||
value: 0,
|
||||
label: "map_settings_date_range_option_all".tr(),
|
||||
label: "all".tr(),
|
||||
),
|
||||
DropdownMenuEntry(
|
||||
value: 1,
|
||||
|
@@ -29,7 +29,7 @@ class PersonNameEditForm extends HookConsumerWidget {
|
||||
|
||||
return AlertDialog(
|
||||
title: const Text(
|
||||
"search_page_person_add_name_dialog_title",
|
||||
"add_a_name",
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
).tr(),
|
||||
content: SingleChildScrollView(
|
||||
@@ -37,7 +37,7 @@ class PersonNameEditForm extends HookConsumerWidget {
|
||||
controller: controller,
|
||||
autofocus: true,
|
||||
decoration: InputDecoration(
|
||||
hintText: 'search_page_person_add_name_dialog_hint'.tr(),
|
||||
hintText: 'name'.tr(),
|
||||
border: const OutlineInputBorder(),
|
||||
errorText: isError.value ? 'Error occured' : null,
|
||||
),
|
||||
@@ -49,7 +49,7 @@ class PersonNameEditForm extends HookConsumerWidget {
|
||||
PersonNameEditFormResult(false, ''),
|
||||
),
|
||||
child: Text(
|
||||
"search_page_person_add_name_dialog_cancel",
|
||||
"cancel",
|
||||
style: TextStyle(
|
||||
color: Colors.red[300],
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -68,7 +68,7 @@ class PersonNameEditForm extends HookConsumerWidget {
|
||||
}
|
||||
},
|
||||
child: Text(
|
||||
"search_page_person_add_name_dialog_save",
|
||||
"save",
|
||||
style: TextStyle(
|
||||
color: context.primaryColor,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
@@ -47,7 +47,7 @@ class CameraPicker extends HookConsumerWidget {
|
||||
.toList(),
|
||||
_ => [],
|
||||
},
|
||||
label: const Text('search_filter_camera_make').tr(),
|
||||
label: const Text('make').tr(),
|
||||
controller: makeTextController,
|
||||
leadingIcon: const Icon(Icons.photo_camera_rounded),
|
||||
onSelected: (value) {
|
||||
@@ -76,7 +76,7 @@ class CameraPicker extends HookConsumerWidget {
|
||||
.toList(),
|
||||
_ => [],
|
||||
},
|
||||
label: const Text('search_filter_camera_model').tr(),
|
||||
label: const Text('model').tr(),
|
||||
controller: modelTextController,
|
||||
leadingIcon: const Icon(Icons.camera),
|
||||
onSelected: (value) {
|
||||
|
@@ -42,7 +42,7 @@ class DisplayOptionPicker extends HookWidget {
|
||||
},
|
||||
),
|
||||
CheckboxListTile(
|
||||
title: const Text('search_filter_display_option_favorite').tr(),
|
||||
title: const Text('favorite').tr(),
|
||||
value: options.value[DisplayOption.favorite],
|
||||
onChanged: (value) {
|
||||
options.value = {
|
||||
@@ -53,7 +53,7 @@ class DisplayOptionPicker extends HookWidget {
|
||||
},
|
||||
),
|
||||
CheckboxListTile(
|
||||
title: const Text('search_filter_display_option_archive').tr(),
|
||||
title: const Text('archive').tr(),
|
||||
value: options.value[DisplayOption.archive],
|
||||
onChanged: (value) {
|
||||
options.value = {
|
||||
|
@@ -49,7 +49,7 @@ class FilterBottomSheetScaffold extends StatelessWidget {
|
||||
onClear();
|
||||
context.pop();
|
||||
},
|
||||
child: const Text('action_common_clear').tr(),
|
||||
child: const Text('clear').tr(),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
ElevatedButton(
|
||||
|
@@ -63,7 +63,7 @@ class LocationPicker extends HookConsumerWidget {
|
||||
.toList(),
|
||||
_ => [],
|
||||
},
|
||||
label: const Text('search_filter_location_country').tr(),
|
||||
label: const Text('country').tr(),
|
||||
controller: countryTextController,
|
||||
onSelected: (value) {
|
||||
if (value.toString() == selectedCountry.value) {
|
||||
@@ -95,7 +95,7 @@ class LocationPicker extends HookConsumerWidget {
|
||||
.toList(),
|
||||
_ => [],
|
||||
},
|
||||
label: const Text('search_filter_location_state').tr(),
|
||||
label: const Text('state').tr(),
|
||||
controller: stateTextController,
|
||||
onSelected: (value) {
|
||||
if (value.toString() == selectedState.value) {
|
||||
@@ -126,7 +126,7 @@ class LocationPicker extends HookConsumerWidget {
|
||||
.toList(),
|
||||
_ => [],
|
||||
},
|
||||
label: const Text('search_filter_location_city').tr(),
|
||||
label: const Text('city').tr(),
|
||||
controller: cityTextController,
|
||||
onSelected: (value) {
|
||||
selectedCity.value = value.toString();
|
||||
|
@@ -17,8 +17,8 @@ class MediaTypePicker extends HookWidget {
|
||||
shrinkWrap: true,
|
||||
children: [
|
||||
RadioListTile(
|
||||
key: const Key("search_filter_media_type_all"),
|
||||
title: const Text("search_filter_media_type_all").tr(),
|
||||
key: const Key("all"),
|
||||
title: const Text("all").tr(),
|
||||
value: AssetType.other,
|
||||
onChanged: (value) {
|
||||
selectedMediaType.value = value!;
|
||||
@@ -27,8 +27,8 @@ class MediaTypePicker extends HookWidget {
|
||||
groupValue: selectedMediaType.value,
|
||||
),
|
||||
RadioListTile(
|
||||
key: const Key("search_filter_media_type_image"),
|
||||
title: const Text("search_filter_media_type_image").tr(),
|
||||
key: const Key("image"),
|
||||
title: const Text("image").tr(),
|
||||
value: AssetType.image,
|
||||
onChanged: (value) {
|
||||
selectedMediaType.value = value!;
|
||||
@@ -37,8 +37,8 @@ class MediaTypePicker extends HookWidget {
|
||||
groupValue: selectedMediaType.value,
|
||||
),
|
||||
RadioListTile(
|
||||
key: const Key("search_filter_media_type_video"),
|
||||
title: const Text("search_filter_media_type_video").tr(),
|
||||
key: const Key("video"),
|
||||
title: const Text("video").tr(),
|
||||
value: AssetType.video,
|
||||
onChanged: (value) {
|
||||
selectedMediaType.value = value!;
|
||||
|
@@ -35,7 +35,7 @@ class PeoplePicker extends HookConsumerWidget {
|
||||
onChanged: (value) => searchQuery.value = value,
|
||||
onTapOutside: (_) => formFocus.unfocus(),
|
||||
filled: true,
|
||||
hintText: 'search_filter_people_hint'.tr(),
|
||||
hintText: 'filter_people'.tr(),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
|
@@ -40,7 +40,7 @@ class GroupSettings extends HookConsumerWidget {
|
||||
value: GroupAssetsBy.day,
|
||||
),
|
||||
SettingsRadioGroup(
|
||||
title: 'asset_list_layout_settings_group_by_month'.tr(),
|
||||
title: 'month'.tr(),
|
||||
value: GroupAssetsBy.month,
|
||||
),
|
||||
SettingsRadioGroup(
|
||||
|
@@ -21,11 +21,11 @@ class VideoViewerSettings extends HookConsumerWidget {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SettingsSubTitle(title: "setting_video_viewer_title".tr()),
|
||||
SettingsSubTitle(title: "videos".tr()),
|
||||
SettingsSwitchListTile(
|
||||
valueNotifier: useLoopVideo,
|
||||
title: "setting_video_viewer_looping_title".tr(),
|
||||
subtitle: "setting_video_viewer_looping_subtitle".tr(),
|
||||
subtitle: "loop_videos_description".tr(),
|
||||
onChanged: (_) => ref.invalidate(appSettingsServiceProvider),
|
||||
),
|
||||
SettingsSwitchListTile(
|
||||
|
@@ -43,12 +43,12 @@ class NotificationSetting extends HookConsumerWidget {
|
||||
content: const Text('notification_permission_dialog_content').tr(),
|
||||
actions: [
|
||||
TextButton(
|
||||
child: const Text('notification_permission_dialog_cancel').tr(),
|
||||
child: const Text('cancel').tr(),
|
||||
onPressed: () => ctx.pop(),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () => openAppNotificationSettings(ctx),
|
||||
child: const Text('notification_permission_dialog_settings').tr(),
|
||||
child: const Text('settings').tr(),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@@ -81,7 +81,7 @@ class ThemeSetting extends HookConsumerWidget {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SettingsSubTitle(title: "theme_setting_theme_title".tr()),
|
||||
SettingsSubTitle(title: "theme".tr()),
|
||||
SettingsSwitchListTile(
|
||||
valueNotifier: isSystemTheme,
|
||||
title: 'theme_setting_system_theme_switch'.tr(),
|
||||
@@ -90,7 +90,7 @@ class ThemeSetting extends HookConsumerWidget {
|
||||
if (currentTheme.value != ThemeMode.system)
|
||||
SettingsSwitchListTile(
|
||||
valueNotifier: isDarkTheme,
|
||||
title: 'theme_setting_dark_mode_switch'.tr(),
|
||||
title: 'map_settings_dark_mode'.tr(),
|
||||
onChanged: onThemeChange,
|
||||
),
|
||||
const PrimaryColorSetting(),
|
||||
|
@@ -64,7 +64,7 @@ class _SslClientCertSettingsState extends State<SslClientCertSettings> {
|
||||
onPressed: widget.isLoggedIn || !isCertExist
|
||||
? null
|
||||
: () => removeCert(context),
|
||||
child: Text("client_cert_remove".tr()),
|
||||
child: Text("remove".tr()),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@@ -33,7 +33,7 @@ class SharedLinkItem extends ConsumerWidget {
|
||||
if (sharedLink.expiresAt != null) {
|
||||
if (isExpired()) {
|
||||
return Text(
|
||||
"shared_link_expired",
|
||||
"expired",
|
||||
style: TextStyle(color: Colors.red[300]),
|
||||
).tr();
|
||||
}
|
||||
@@ -114,7 +114,7 @@ class SharedLinkItem extends ConsumerWidget {
|
||||
builder: (BuildContext context) {
|
||||
return ConfirmDialog(
|
||||
title: "delete_shared_link_dialog_title",
|
||||
content: "delete_shared_link_dialog_content",
|
||||
content: "confirm_delete_shared_link",
|
||||
onOk: () => ref
|
||||
.read(sharedLinksStateProvider.notifier)
|
||||
.deleteLink(sharedLink.id),
|
||||
@@ -178,10 +178,8 @@ class SharedLinkItem extends ConsumerWidget {
|
||||
Widget buildBottomInfo() {
|
||||
return Row(
|
||||
children: [
|
||||
if (sharedLink.allowUpload)
|
||||
buildInfoChip("shared_link_info_chip_upload".tr()),
|
||||
if (sharedLink.allowDownload)
|
||||
buildInfoChip("shared_link_info_chip_download".tr()),
|
||||
if (sharedLink.allowUpload) buildInfoChip("upload".tr()),
|
||||
if (sharedLink.allowDownload) buildInfoChip("download".tr()),
|
||||
if (sharedLink.showMetadata)
|
||||
buildInfoChip("shared_link_info_chip_metadata".tr()),
|
||||
],
|
||||
|
Reference in New Issue
Block a user