diff --git a/mobile/assets/i18n/en-US.json b/mobile/assets/i18n/en-US.json index 139c5895b1..7b473d704f 100644 --- a/mobile/assets/i18n/en-US.json +++ b/mobile/assets/i18n/en-US.json @@ -3,6 +3,8 @@ "action_common_cancel": "Cancel", "action_common_clear": "Clear", "action_common_confirm": "Confirm", + "action_common_save": "Save", + "action_common_select": "Select", "action_common_update": "Update", "add_to_album_bottom_sheet_added": "Added to {album}", "add_to_album_bottom_sheet_already_exists": "Already in {album}", @@ -146,6 +148,7 @@ "common_create_new_album": "Create new album", "common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.", "common_shared": "Shared", + "contextual_search": "Sunrise on the beach", "control_bottom_app_bar_add_to_album": "Add to album", "control_bottom_app_bar_album_info": "{} items", "control_bottom_app_bar_album_info_shared": "{} items ยท Shared", @@ -203,6 +206,7 @@ "experimental_settings_title": "Experimental", "favorites_page_no_favorites": "No favorite assets found", "favorites_page_title": "Favorites", + "filename_search": "File name or extension", "haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_title": "Haptic Feedback", "header_settings_add_header_tip": "Add Header", @@ -230,6 +234,8 @@ "image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_success": "Download Success", "image_viewer_page_state_provider_share_error": "Share Error", + "invalid_date": "Invalid date", + "invalid_date_format": "Invalid date format", "library_page_albums": "Albums", "library_page_archive": "Archive", "library_page_device_albums": "Albums on Device", @@ -311,6 +317,7 @@ "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "no_assets_to_show": "No assets to show", + "no_name": "No name", "notification_permission_dialog_cancel": "Cancel", "notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.", "notification_permission_dialog_settings": "Settings", @@ -354,17 +361,30 @@ "scaffold_body_error_occurred": "Error occurred", "search_bar_hint": "Search your photos", "search_filter_apply": "Apply filter", + "search_filter_camera": "Camera", "search_filter_camera_make": "Make", "search_filter_camera_model": "Model", + "search_filter_camera_title": "Select camera type", + "search_filter_date": "Date", + "search_filter_date_interval": "{start} to {end}", + "search_filter_date_title": "Select a date range", "search_filter_display_option_archive": "Archive", "search_filter_display_option_favorite": "Favorite", "search_filter_display_option_not_in_album": "Not in album", + "search_filter_display_options": "Display Options", + "search_filter_display_options_title": "Display options", + "search_filter_location": "Location", "search_filter_location_city": "City", "search_filter_location_country": "Country", "search_filter_location_state": "State", + "search_filter_location_title": "Select location", + "search_filter_media_type": "Media Type", "search_filter_media_type_all": "All", "search_filter_media_type_image": "Image", + "search_filter_media_type_title": "Select media type", "search_filter_media_type_video": "Video", + "search_filter_people": "People", + "search_filter_people_title": "Select people", "search_page_categories": "Categories", "search_page_favorites": "Favorites", "search_page_motion_photos": "Motion Photos", @@ -418,15 +438,18 @@ "setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)", "setting_notifications_total_progress_title": "Show background backup total progress", "setting_pages_app_bar_settings": "Settings", - "settings_require_restart": "Please restart Immich to apply this setting", "setting_video_viewer_looping_subtitle": "Enable to automatically loop a video in the detail viewer.", "setting_video_viewer_looping_title": "Looping", "setting_video_viewer_title": "Videos", + "settings_require_restart": "Please restart Immich to apply this setting", "share_add": "Add", "share_add_photos": "Add photos", "share_add_title": "Add a title", "share_assets_selected": "{} selected", "share_create_album": "Create album", + "share_dialog_preparing": "Preparing...", + "share_done": "Done", + "share_invite": "Invite to album", "shared_album_activities_input_disable": "Comment is disabled", "shared_album_activities_input_hint": "Say something", "shared_album_activity_remove_content": "Do you want to delete this activity?", @@ -438,7 +461,6 @@ "shared_album_section_people_action_remove_user": "Remove user from album", "shared_album_section_people_owner_label": "Owner", "shared_album_section_people_title": "PEOPLE", - "share_dialog_preparing": "Preparing...", "shared_link_app_bar_title": "Shared Links", "shared_link_clipboard_copied_massage": "Copied to clipboard", "shared_link_clipboard_text": "Link: {}\nPassword: {}", @@ -484,14 +506,12 @@ "shared_link_info_chip_upload": "Upload", "shared_link_manage_links": "Manage Shared links", "shared_link_public_album": "Public album", - "share_done": "Done", - "share_invite": "Invite to album", "sharing_page_album": "Shared albums", "sharing_page_description": "Create shared albums to share photos and videos with people in your network.", "sharing_page_empty_list": "EMPTY LIST", "sharing_silver_appbar_create_shared_album": "New shared album", - "sharing_silver_appbar_shared_links": "Shared links", "sharing_silver_appbar_share_partner": "Share with partner", + "sharing_silver_appbar_shared_links": "Shared links", "tab_controller_nav_library": "Library", "tab_controller_nav_photos": "Photos", "tab_controller_nav_search": "Search", diff --git a/mobile/lib/pages/search/search_input.page.dart b/mobile/lib/pages/search/search_input.page.dart index 6f8df7b482..1f90f2929c 100644 --- a/mobile/lib/pages/search/search_input.page.dart +++ b/mobile/lib/pages/search/search_input.page.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:auto_route/auto_route.dart'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; @@ -114,7 +115,7 @@ class SearchInputPage extends HookConsumerWidget { ); peopleCurrentFilterWidget.value = Text( - value.map((e) => e.name != '' ? e.name : "No name").join(', '), + value.map((e) => e.name != '' ? e.name : 'no_name'.tr()).join(', '), style: context.textTheme.labelLarge, ); } @@ -134,7 +135,7 @@ class SearchInputPage extends HookConsumerWidget { child: FractionallySizedBox( heightFactor: 0.8, child: FilterBottomSheetScaffold( - title: 'Select people', + title: 'search_filter_people_title'.tr(), expanded: true, onSearch: search, onClear: handleClear, @@ -190,7 +191,7 @@ class SearchInputPage extends HookConsumerWidget { isScrollControlled: true, isDismissible: false, child: FilterBottomSheetScaffold( - title: 'Select location', + title: 'search_filter_location_title'.tr(), onSearch: search, onClear: handleClear, child: Padding( @@ -241,7 +242,7 @@ class SearchInputPage extends HookConsumerWidget { isScrollControlled: true, isDismissible: false, child: FilterBottomSheetScaffold( - title: 'Select camera type', + title: 'search_filter_camera_title'.tr(), onSearch: search, onClear: handleClear, child: Padding( @@ -268,14 +269,14 @@ class SearchInputPage extends HookConsumerWidget { start: filter.value.date.takenAfter ?? lastDate, end: filter.value.date.takenBefore ?? lastDate, ), - helpText: 'Select a date range', - cancelText: 'Cancel', - confirmText: 'Select', - saveText: 'Save', - errorFormatText: 'Invalid date format', - errorInvalidText: 'Invalid date', - fieldStartHintText: 'Start date', - fieldEndHintText: 'End date', + helpText: 'search_filter_date_title'.tr(), + cancelText: 'action_common_cancel'.tr(), + confirmText: 'action_common_select'.tr(), + saveText: 'action_common_save'.tr(), + errorFormatText: 'invalid_date_format'.tr(), + errorInvalidText: 'invalid_date'.tr(), + fieldStartHintText: 'start_date'.tr(), + fieldEndHintText: 'end_date'.tr(), initialEntryMode: DatePickerEntryMode.input, ); @@ -305,12 +306,17 @@ class SearchInputPage extends HookConsumerWidget { // If date range is less than 24 hours, set the end date to the end of the day if (date.end.difference(date.start).inHours < 24) { dateRangeCurrentFilterWidget.value = Text( - date.start.toLocal().toIso8601String().split('T').first, + DateFormat.yMMMd().format(date.start.toLocal()), style: context.textTheme.labelLarge, ); } else { dateRangeCurrentFilterWidget.value = Text( - '${date.start.toLocal().toIso8601String().split('T').first} to ${date.end.toLocal().toIso8601String().split('T').first}', + 'search_filter_date_interval'.tr( + namedArgs: { + "start": DateFormat.yMMMd().format(date.start.toLocal()), + "end": DateFormat.yMMMd().format(date.end.toLocal()), + }, + ), style: context.textTheme.labelLarge, ); } @@ -326,7 +332,11 @@ class SearchInputPage extends HookConsumerWidget { ); mediaTypeCurrentFilterWidget.value = Text( - assetType == AssetType.image ? 'Image' : 'Video', + assetType == AssetType.image + ? 'search_filter_media_type_image'.tr() + : assetType == AssetType.video + ? 'search_filter_media_type_video'.tr() + : 'search_filter_media_type_all'.tr(), style: context.textTheme.labelLarge, ); } @@ -343,7 +353,7 @@ class SearchInputPage extends HookConsumerWidget { showFilterBottomSheet( context: context, child: FilterBottomSheetScaffold( - title: 'Select media type', + title: 'search_filter_media_type_title'.tr(), onSearch: search, onClear: handleClear, child: MediaTypePicker( @@ -367,7 +377,10 @@ class SearchInputPage extends HookConsumerWidget { isNotInAlbum: value, ), ); - if (value) filterText.add('Not in album'); + if (value) { + filterText + .add('search_filter_display_option_not_in_album'.tr()); + } break; case DisplayOption.archive: filter.value = filter.value.copyWith( @@ -375,7 +388,9 @@ class SearchInputPage extends HookConsumerWidget { isArchive: value, ), ); - if (value) filterText.add('Archive'); + if (value) { + filterText.add('search_filter_display_option_archive'.tr()); + } break; case DisplayOption.favorite: filter.value = filter.value.copyWith( @@ -383,7 +398,9 @@ class SearchInputPage extends HookConsumerWidget { isFavorite: value, ), ); - if (value) filterText.add('Favorite'); + if (value) { + filterText.add('search_filter_display_option_favorite'.tr()); + } break; } }); @@ -410,7 +427,7 @@ class SearchInputPage extends HookConsumerWidget { showFilterBottomSheet( context: context, child: FilterBottomSheetScaffold( - title: 'Display options', + title: 'search_filter_display_options_title'.tr(), onSearch: search, onClear: handleClear, child: DisplayOptionPicker( @@ -489,8 +506,8 @@ class SearchInputPage extends HookConsumerWidget { controller: textSearchController, decoration: InputDecoration( hintText: isContextualSearch.value - ? 'Sunrise on the beach' - : 'File name or extension', + ? 'contextual_search'.tr() + : 'filename_search'.tr(), hintStyle: context.textTheme.bodyLarge?.copyWith( color: context.themeData.colorScheme.onSurface.withOpacity(0.75), fontWeight: FontWeight.w500, @@ -519,37 +536,37 @@ class SearchInputPage extends HookConsumerWidget { SearchFilterChip( icon: Icons.people_alt_rounded, onTap: showPeoplePicker, - label: 'People', + label: 'search_filter_people'.tr(), currentFilter: peopleCurrentFilterWidget.value, ), SearchFilterChip( icon: Icons.location_pin, onTap: showLocationPicker, - label: 'Location', + label: 'search_filter_location'.tr(), currentFilter: locationCurrentFilterWidget.value, ), SearchFilterChip( icon: Icons.camera_alt_rounded, onTap: showCameraPicker, - label: 'Camera', + label: 'search_filter_camera'.tr(), currentFilter: cameraCurrentFilterWidget.value, ), SearchFilterChip( icon: Icons.date_range_rounded, onTap: showDatePicker, - label: 'Date', + label: 'search_filter_date'.tr(), currentFilter: dateRangeCurrentFilterWidget.value, ), SearchFilterChip( icon: Icons.video_collection_outlined, onTap: showMediaTypePicker, - label: 'Media Type', + label: 'search_filter_media_type'.tr(), currentFilter: mediaTypeCurrentFilterWidget.value, ), SearchFilterChip( icon: Icons.display_settings_outlined, onTap: showDisplayOptionPicker, - label: 'Display Options', + label: 'search_filter_display_options'.tr(), currentFilter: displayOptionCurrentFilterWidget.value, ), ],