feat(shared): polish beta UX copy and friendly errors

Map snackbars to stable user-facing strings, rewrite transfer-oriented
empty states and settings copy, and resource-back progress/status labels.
This commit is contained in:
2026-07-15 03:53:24 +02:00
parent bf81661667
commit 7cd125053c
21 changed files with 562 additions and 245 deletions

View File

@@ -3,9 +3,9 @@
<string name="nav_receive">Receive</string>
<string name="nav_settings">Settings</string>
<string name="send_title">Send</string>
<string name="send_subtitle">Files you have made available from this device.</string>
<string name="send_empty_title">Share your first file</string>
<string name="send_empty_body">Choose a file, decide who can receive it, then share it directly from this device.</string>
<string name="send_subtitle">Transfers youre sharing from this device.</string>
<string name="send_empty_title">Nothing shared yet</string>
<string name="send_empty_body">Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file.</string>
<string name="button_create_new_transfer">New transfer</string>
<string name="send_transfers_title">Your transfers</string>
<string name="send_new_transfer_title">New transfer</string>
@@ -21,8 +21,8 @@
<string name="send_access_approval">Ask before each download</string>
<string name="send_access_approval_description">You approve or refuse every new receiver.</string>
<string name="send_access_anyone">Anyone with this transfer</string>
<string name="send_access_anyone_description">No approval is required. Only use this for files you are comfortable sharing.</string>
<string name="send_access_anyone_warning">Anyone who has the ticket can download until you stop the share. Do not use this for private or sensitive files.</string>
<string name="send_access_anyone_description">No approval is required. Only use this for items you are comfortable sharing.</string>
<string name="send_access_anyone_warning">Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items.</string>
<string name="send_file_size_unknown">Size unavailable</string>
<string name="send_transfer_created">Transfer created.</string>
<string name="send_transfer_details_title">Transfer details</string>
@@ -53,8 +53,8 @@
<string name="transfer_nfc_waiting">Hold your device near a writable NFC tag.</string>
<string name="transfer_invitation_saved">Invitation saved.</string>
<string name="transfer_nfc_written">Invitation written to the NFC tag.</string>
<string name="transfer_event_preparing">Preparing the selected files</string>
<string name="transfer_event_ready">Transfer ready to share</string>
<string name="transfer_event_preparing">Preparing your transfer</string>
<string name="transfer_event_ready">Ready to share</string>
<string name="transfer_event_requested">A receiver requested access</string>
<string name="transfer_event_approved">Receiver access approved</string>
<string name="transfer_event_refused">Receiver access refused</string>
@@ -62,34 +62,21 @@
<string name="transfer_event_stopped">Sharing stopped</string>
<string name="transfer_event_failed">The transfer encountered a problem</string>
<string name="transfer_event_updated">Transfer updated</string>
<string name="button_choose_file">Choose file</string>
<string name="button_change_file">Change file</string>
<string name="button_share_file">Share files</string>
<string name="button_share_file">Start sharing</string>
<string name="button_sharing_file">Preparing transfer…</string>
<string name="button_copy_ticket">Copy transfer link</string>
<string name="send_new_transfer_description">Create a new transfer</string>
<string name="source_title">Source</string>
<string name="send_source_empty">Select a file to start a share. The app keeps bytes in Rust and platform file handles.</string>
<string name="button_select_file">Select file</string>
<string name="button_clear">Clear</string>
<string name="transfer_details_title">Transfer details</string>
<string name="field_transfer_name">Transfer name</string>
<string name="field_sender_name">Sender name</string>
<string name="button_create_share">Create share</string>
<string name="button_creating_share">Creating share...</string>
<string name="share_details_title">Share details</string>
<string name="receiver_requests_title">Receiver requests</string>
<string name="button_copy">Copy</string>
<string name="button_use_locally">Use locally</string>
<string name="button_refresh">Refresh</string>
<string name="button_refuse">Refuse</string>
<string name="button_approve">Approve</string>
<string name="receive_title">Receive</string>
<string name="receive_new_subtitle">Files received directly on this device.</string>
<string name="receive_empty_title">Receive your first file</string>
<string name="receive_empty_body">Open a VniDrop invitation, scan its QR code, or read a nearby NFC tag.</string>
<string name="button_receive_files">Receive files</string>
<string name="receive_history_title">Received files</string>
<string name="receive_new_subtitle">Transfers youve received on this device.</string>
<string name="receive_empty_title">Nothing received yet</string>
<string name="receive_empty_body">Open a VniDrop invitation, scan a QR code, or hold near an NFC tag.</string>
<string name="button_receive_files">Start receiving</string>
<string name="receive_history_title">History</string>
<string name="receive_clear_history">Clear history</string>
<string name="receive_delete_history_item">Delete from receive history</string>
<string name="receive_delete_history_title">Remove from history?</string>
@@ -109,54 +96,66 @@
<string name="receive_review_title">Review transfer</string>
<string name="receive_unknown_transfer">VniDrop transfer</string>
<string name="receive_completed">Transfer received.</string>
<string name="receive_subtitle">Inspect a ticket, request access, and stream files into the output directory.</string>
<string name="ticket_card_title">Ticket</string>
<string name="field_ticket">Ticket</string>
<string name="field_output_directory">Output directory</string>
<string name="field_receiver_name">Receiver name</string>
<string name="button_inspect_ticket">Inspect ticket</string>
<string name="button_receive">Receive</string>
<string name="button_receiving">Receiving...</string>
<string name="button_retry">Retry</string>
<string name="button_stop_sharing">Stop sharing</string>
<string name="button_cancel_receive">Cancel receive</string>
<string name="progress_receiving">Receiving files</string>
<string name="progress_preparing">Preparing transfer</string>
<string name="button_cancel_receive">Cancel</string>
<string name="progress_receiving">Receiving</string>
<string name="progress_preparing">Preparing</string>
<string name="progress_ready">Ready</string>
<string name="progress_share_ready">Ready to share</string>
<string name="progress_connecting">Connecting</string>
<string name="progress_connected">Connected</string>
<string name="progress_requesting_access">Requesting access</string>
<string name="progress_getting_ready">Getting ready</string>
<string name="progress_downloading">Downloading</string>
<string name="progress_saving">Saving</string>
<string name="progress_sending">Sending</string>
<string name="progress_completed">Completed</string>
<string name="progress_cancelled">Cancelled</string>
<string name="progress_failed">Failed</string>
<string name="progress_interrupted">Transfer interrupted</string>
<string name="progress_working">Working…</string>
<string name="status_preparing">Preparing</string>
<string name="status_available">Available</string>
<string name="status_receiving">Receiving</string>
<string name="status_completed">Completed</string>
<string name="status_cancelled">Cancelled</string>
<string name="status_stopped">Stopped</string>
<string name="status_failed">Failed</string>
<string name="transfer_receivers_pending">%1$d waiting</string>
<string name="transfer_receivers_completed_count">%1$d completed</string>
<string name="transfer_receiver_sending">Sending</string>
<string name="transfer_event_downloading">Downloading files</string>
<string name="transfer_event_saving">Saving files</string>
<string name="transfer_event_downloading">Downloading</string>
<string name="transfer_event_saving">Saving</string>
<string name="transfer_event_connecting">Connecting to sender</string>
<string name="ticket_details_title">Ticket details</string>
<string name="transfer_file_count_one">%1$d file</string>
<string name="transfer_file_count_other">%1$d files</string>
<string name="settings_title">Settings</string>
<string name="settings_subtitle">Configure the local node and app appearance.</string>
<string name="node_title">Node</string>
<string name="settings_subtitle">Your name, where transfers are saved, appearance, and notifications.</string>
<string name="appearance_title">Appearance</string>
<string name="preferences_title">Preferences</string>
<string name="field_username">Username</string>
<string name="preferences_receive_folder_title">Receive folder</string>
<string name="field_username">Display name</string>
<string name="preferences_receive_folder_title">Save received transfers to</string>
<string name="button_choose_folder">Choose folder</string>
<string name="button_reset_default">Reset default</string>
<string name="button_reset_default">Use default</string>
<string name="button_back">Back</string>
<string name="button_close">Close</string>
<string name="button_cancel">Cancel</string>
<string name="button_delete_transfer">Delete transfer</string>
<string name="folder_status_writable">Writable</string>
<string name="folder_status_permission_required">Permission required</string>
<string name="folder_status_writable">Ready</string>
<string name="folder_status_permission_required">Permission needed</string>
<string name="folder_status_unavailable">Unavailable</string>
<string name="folder_status_validating">Checking folder...</string>
<string name="appearance_mode_title">Display mode</string>
<string name="folder_status_validating">Checking folder</string>
<string name="appearance_system_mode">System</string>
<string name="appearance_dark_mode">Dark mode</string>
<string name="appearance_light_mode">Light mode</string>
<string name="appearance_auto_description">VniDrop follows the theme selected on this device.</string>
<string name="appearance_auto_description">Match this devices light or dark appearance.</string>
<string name="about_title">About</string>
<string name="about_privacy">Privacy policy</string>
<string name="about_bug_report">Report a bug</string>
<string name="diagnostics_title">Share diagnostics</string>
<string name="diagnostics_description">Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Tickets, file paths, and transfer contents are never included.</string>
<string name="diagnostics_description">Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included.</string>
<string name="diagnostics_enabled_message">Diagnostics sharing is on.</string>
<string name="diagnostics_disabled_message">Diagnostics sharing is off.</string>
<string name="bug_report_description">Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted).</string>
@@ -183,36 +182,35 @@
<string name="value_unavailable">Not available</string>
<string name="notifications_title">Notifications</string>
<string name="notifications_local_title">Allow notifications</string>
<string name="notifications_description">Let VniDrop notify you about new connection requests while the app is running in the background.</string>
<string name="notifications_description">Get notified about new receive requests while VniDrop is in the background.</string>
<string name="notifications_permission_denied">Notifications are turned off for VniDrop. You can enable them in Settings.</string>
<string name="notifications_unsupported">Notifications are not available on this device.</string>
<string name="notifications_enabled_message">Notifications enabled.</string>
<string name="notifications_settings_open_failed">Could not open notification settings.</string>
<string name="button_open_settings">Open Settings</string>
<string name="snackbar_dismiss">Dismiss</string>
<string name="value_on">On</string>
<string name="value_off">Off</string>
<string name="approval_connection_request">Connection request</string>
<string name="approval_endpoint_id">Endpoint ID: %1$s</string>
<string name="approval_pending_count">%1$d requests are waiting</string>
<string name="core_status_ready">Ready</string>
<string name="event_log_title">Event log</string>
<string name="no_events">No events have been emitted yet.</string>
<string name="progress_title">Progress</string>
<string name="not_initialized">Not initialized</string>
<string name="unknown_sender">Unknown</string>
<string name="metadata_name">Name</string>
<string name="metadata_source">Source</string>
<string name="metadata_transfer">Transfer</string>
<string name="approval_connection_request">Receive request</string>
<string name="approval_request_body">%1$s wants to receive “%2$s”.</string>
<string name="approval_nearby_device">A nearby device</string>
<string name="approval_endpoint_id">Device ID: %1$s</string>
<string name="approval_pending_count">%1$d requests waiting</string>
<string name="metadata_size">Size</string>
<string name="metadata_kind">Kind</string>
<string name="metadata_sender">Sender</string>
<string name="metadata_files">Files</string>
<string name="metadata_hash">Hash</string>
<string name="metadata_platform">Platform</string>
<string name="metadata_status">Status</string>
<string name="error_invalid_ticket">The ticket could not be read. Check that the full ticket was copied.</string>
<string name="error_permission">The transfer is waiting for approval or was refused by the sender.</string>
<string name="error_generic">Something went wrong. Try again.</string>
<string name="error_starting_up">VniDrop is still starting. Open the invitation again in a moment.</string>
<string name="error_invalid_ticket">This invitation could not be read. Ask the sender for a new one.</string>
<string name="error_invitation_empty">That invitation is empty. Try opening it again.</string>
<string name="error_permission">The sender has not approved this transfer, or it was refused.</string>
<string name="error_filesystem">VniDrop could not access the selected files or folder. Check permissions and try again.</string>
<string name="error_transfer">The transfer could not be completed. Check your connection and try again.</string>
<string name="error_repository">VniDrop could not save transfer data on this device.</string>
<string name="error_initialization">VniDrop could not finish starting up. Close the app and try again.</string>
<string name="error_socket_bind">VniDrop could not open its network sockets on this device.</string>
<string name="error_missing_native_library">The native VniDrop library is missing from this build.</string>
<string name="error_selection_failed">Could not open the selected item. Try choosing it again.</string>
<string name="error_device_info">Could not load device information.</string>
<string name="error_nfc">This NFC tag could not be used. Try another tag.</string>
<string name="error_camera">Camera access is required to scan a QR code.</string>
<string name="error_share_empty">Select at least one item to share.</string>
</resources>