{ "app_title": "Palm Oil Ripeness AI", "total_scans": "Total Scans", "analyze_gallery_title": "Analyze Gallery", "analyze_gallery_subtitle": "Detect ripeness from photos", "snap_analyze_title": "Snap & Analyze", "snap_analyze_subtitle": "Manual high-res capture", "live_inference_title": "Live Inference", "live_inference_subtitle": "Real-time \"Point-and-Scan\"", "history_vault_title": "History Vault", "history_vault_subtitle": "View previous detections", "theme_label": "Theme", "language_label": "Language", "settings_label": "Settings", "theme_light": "Light", "theme_dark": "Dark", "theme_system": "System", "confidence_label": "Confidence: {percent}%", "health_alert_abnormal": "HEALTH ALERT: Abnormal detected!", "ai_analyzing": "AI is Analyzing...", "retry_button": "Retry", "dismiss_button": "Dismiss", "error_details_label": "Error Details", "done_button": "Done", "analysis_appbar_title": "AI Analysis", "analysis_init_error": "Failed to initialize AI model: {error}", "analysis_select_photo_hint": "Select a photo to start AI analysis", "analysis_pick_button": "Pick Images from Gallery", "analysis_bunches_detected": "{count} bunches detected", "analysis_progress_of": "Analyzing image {current} of {total}", "analysis_progress_stats": "{processed} processed · {skipped} skipped", "analysis_optimizing_hint": "Optimizing detection parameters", "analysis_no_detections_batch": "No palm bunches detected in any selected image.", "camera_permission_denied": "Camera permission denied.", "no_cameras_found": "No cameras found.", "camera_init_error": "Camera init error: {error}", "static_appbar_title": "Capture & Analyze", "static_no_detections": "No palm bunches detected.", "static_capture_error": "Error during capture/analysis: {error}", "result_sheet_title": "Analysis Result", "label_ripeness": "Ripeness", "label_confidence": "Confidence", "health_alert_title": "HEALTH ALERT", "health_alert_message": "Abnormal features detected. Check palm health.", "yield_warning_title": "YIELD WARNING", "yield_warning_message": "Potential Yield Loss due to premature harvest.", "acknowledge_button": "Acknowledge", "live_no_detections_snackbar": "No palm bunches detected in final snap.", "live_state_cooldown": "COOLDOWN", "live_state_locking": "LOCKING", "live_state_searching": "SEARCHING...", "live_resuming_scan": "Resuming scan...", "live_hold_steady_hint": "Hold steady to lock target", "cancel_button": "Cancel", "delete_button": "Delete", "reset_button": "Reset", "clear_filters_button": "Clear Filters", "history_reset_title": "Reset History", "history_reset_message": "Are you sure you want to clear all analysis records? This action is irreversible.", "history_cleared_snackbar": "History cleared successfully.", "history_delete_record_confirm": "Delete this record? This action is irreversible.", "history_delete_batch_confirm": "Delete this batch of {count} scans? This action is irreversible.", "filter_sort_title": "Filter & Sort", "sort_order_label": "Sort Order", "sort_latest_first": "Latest First", "sort_oldest_first": "Oldest First", "date_range_label": "Date Range", "all_dates_label": "All Dates", "clear_date_range_tooltip": "Clear date range", "reset_history_tooltip": "Reset History", "view_toggle_flat_tooltip": "View All Scans", "view_toggle_batches_tooltip": "View by Batch", "history_empty_no_records": "No records found yet.", "history_empty_no_matches": "No records match the selected filters.", "ungrouped_scans_label": "Ungrouped Scans", "batch_scans_label": "Batch • {count} scans", "majority_label": "Majority: {className}\n{timeRange}", "record_conf_timestamp": "Conf: {percent}% | {timestamp}", "class_Ripe": "Ripe", "class_Unripe": "Unripe", "class_Underripe": "Underripe", "class_Overripe": "Overripe", "class_Abnormal": "Abnormal", "class_Empty_Bunch": "Empty Bunch", "na_label": "N/A", "saving_label": "Saving...", "ai_result_label": "AI Result", "added_suffix": " • Added", "batch_report_title": "Batch Report", "batch_no_records": "No records found for this batch.", "kpi_frames": "Frames", "kpi_total_detections": "Total Detections", "kpi_avg_confidence": "Avg Confidence", "kpi_avg_inference": "Avg Inference", "kpi_start": "Start", "kpi_end": "End", "mpob_class_distribution_title": "MPOB Class Distribution", "batch_corrected_label": "Corrected", "no_detections_in_batch": "No detections in this batch.", "frames_corrected_pill": "{count} of {total} frames corrected", "frames_section_title": "Frames ({count})", "frame_of_title": "Frame {current} of {total}", "record_details_title": "Record Details", "your_correction_label": "Your Correction", "tap_to_correct_hint": "Tap a bunch on the photo to correct its grade.", "last_corrected_label": "Last corrected: {timestamp}", "add_missed_bunch_button": "Add Missed Bunch", "correction_reset_snackbar": "Correction reset.", "label_file_name": "File Name", "label_primary_grade": "Primary Grade", "label_inference_time": "Inference Time", "label_timestamp": "Timestamp", "frame_summary_title": "Frame Summary", "analytical_breakdown_title": "Analytical Breakdown", "corrected_breakdown_title": "Corrected Breakdown (tap a bunch above to edit or remove)", "industrial_summary_text": "Industrial Summary: This image has been verified for harvest quality. All detected bunches are categorized according to ripeness standards.", "correct_grade_title": "Correct Grade", "remove_detection_button": "Remove this detection", "undo_tooltip": "Undo", "redo_tooltip": "Redo", "hide_reference_tooltip": "Hide AI reference boxes", "show_reference_tooltip": "Show AI reference boxes", "editor_instruction_text": "Tap anywhere a bunch was missed to place a box, then grade it and drag to fit. Existing detections are dimmed for reference.", "pick_grade_placeholder": "Pick grade", "editor_tap_to_add_hint": "Tap the photo to add a bunch", "editor_bunches_added_singular": "{count} bunch added", "editor_bunches_added_plural": "{count} bunches added", "manual_title": "User Manual", "manual_gallery_title": "Analyze Gallery", "manual_gallery_body": "Pick one or more photos from your gallery to analyze at once. Every photo you select is processed as a single batch — once all photos are done, you'll be taken straight to the Batch Report for that batch, showing every frame's results together.", "manual_snap_title": "Snap & Analyze", "manual_snap_body": "Take one photo at a time with the camera's manual shutter. As soon as the photo is analyzed, a result sheet shows the detected grade and confidence immediately — best for checking a single bunch carefully.", "manual_live_title": "Live Inference", "manual_live_body": "Point the camera at a bunch and hold steady — the app automatically locks on and captures once it's confident, showing the result right away. This is a quick verification tool only: results are not saved to History Vault. If you want to keep a record, use Snap & Analyze instead.", "manual_history_title": "History Vault", "manual_history_body": "Browse every past scan, grouped by batch. Filter by date range, sort latest or oldest first, and swipe left on any entry to delete it. Tap a batch to open its Batch Report, or a single scan to open its Record Details.", "manual_correction_title": "Correcting AI Results", "manual_correction_body": "On any photo's detail screen, tap a detected bunch to change its grade or remove it if the AI was wrong — this never edits the AI's original result, it only adds your correction on top, which you can always undo with Reset. If the AI missed a bunch entirely, use \"Add Missed Bunch\" to place, grade, and size a new box for it. Once you've made any correction, the screen defaults to showing \"Your Correction\" instead of the AI's original result.", "manual_batch_title": "Batch Report", "manual_batch_body": "Shows a summary for an entire batch of scans: frame count, total detections, average confidence and inference time, and a class-distribution bar. If any photos in the batch have been corrected, a second \"Corrected\" distribution bar appears alongside the AI's own, so you can compare them directly.", "manual_classes_title": "MPOB Grading Classes", "manual_class_desc_Ripe": "Ready for harvest — the ideal grade, with the right balance of loose fruit and color for maximum oil yield.", "manual_class_desc_Unripe": "Too early to harvest — dark, unripe fruit with no loose fruit yet. Leave the bunch to mature further.", "manual_class_desc_Underripe": "Close to ready, but not quite there — fewer loose fruit than a fully ripe bunch. Consider waiting a few more days.", "manual_class_desc_Overripe": "Harvested later than ideal — oil quality starts to decline the longer it's left past this point.", "manual_class_desc_Abnormal": "Shows defects such as pest damage, disease, or poor pollination — flagged separately from normal ripeness grading.", "manual_class_desc_Empty_Bunch": "Most of the fruit has already detached from the bunch — little to no yield remains." }