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:
Alex 2025-04-15 10:54:26 -05:00 committed by GitHub
parent 17e720440d
commit b2c903c000
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
156 changed files with 25537 additions and 30968 deletions

View file

@ -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,

View file

@ -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),

View file

@ -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(

View file

@ -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: [

View file

@ -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!]);
}

View file

@ -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,

View file

@ -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(),
),

View file

@ -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,
),

View file

@ -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,

View file

@ -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,

View file

@ -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,
);
}

View file

@ -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(),
},
];

View file

@ -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,

View file

@ -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],

View file

@ -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(),
),

View file

@ -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,

View file

@ -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",
});

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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),
),
);

View file

@ -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(

View file

@ -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(),
);

View file

@ -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(),
),
],
),

View file

@ -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(

View file

@ -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,

View file

@ -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,

View file

@ -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) {

View file

@ -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 = {

View file

@ -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(

View file

@ -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();

View file

@ -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!;

View file

@ -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(

View file

@ -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(

View file

@ -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(

View file

@ -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(),
),
],
),

View file

@ -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(),

View file

@ -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()),
),
],
),

View file

@ -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()),
],