RichStyle becomes a sealed interface (Bold/Italic/Underline/Strikethrough + FontFamily/FontSize/FontColor/Highlight); RichTextContent gains alignments, images, and baseStyle channels. The HTML serializer emits merged <span style> runs, text-align on <p>/<li> (splitting merged paragraphs at alignment boundaries), <img src="cid:…"> over the visible [image: name] token, and a single outer <div style> for the base style. The parser is a faithful inverse and additionally tolerates <del>/<strike>, px font sizes, #rgb colors, and start/end alignment synonyms; unknown CSS is ignored without dropping text. hasFormatting() covers every new channel so ComposeViewModel.normalizedHtml() never silently drops serialized formatting. The editor carries parameterized style identity via string annotations (libremail:style / libremail:image), maps alignment onto ParagraphStyle ranges, holds baseStyle in separate field state, and RichTextEditing.toggleStyle now replaces a different value of the same kind while styleAt() answers "current value over the selection" for pickers. ColorSwatchRow is added for the upcoming color/highlight dialogs. No UI change. Closes #70 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
273 lines
17 KiB
XML
273 lines
17 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
|
|
<resources>
|
|
<string name="app_name">LibreMail</string>
|
|
|
|
<!-- Destinations -->
|
|
<string name="title_mailbox">Inbox</string>
|
|
<string name="title_reader">Message</string>
|
|
<string name="reader_star">Star</string>
|
|
<string name="reader_delete">Delete</string>
|
|
<string name="reader_empty">This message has no text content</string>
|
|
<string name="reader_images_blocked">Remote images are blocked</string>
|
|
<string name="reader_show_images">Show images</string>
|
|
<string name="title_compose">Compose</string>
|
|
<string name="title_settings">Settings</string>
|
|
<string name="title_account_setup">Add account</string>
|
|
|
|
<!-- Navigation / actions -->
|
|
<string name="nav_mailbox">Mail</string>
|
|
<string name="nav_settings">Settings</string>
|
|
<string name="action_compose">Compose</string>
|
|
<string name="action_back">Back</string>
|
|
<string name="action_send">Send</string>
|
|
|
|
<!-- Mailbox -->
|
|
<string name="mailbox_empty">No messages yet</string>
|
|
<string name="mailbox_all_accounts">All</string>
|
|
<string name="search">Search</string>
|
|
<string name="search_close">Close search</string>
|
|
<string name="search_hint">Search mail</string>
|
|
<string name="search_no_results">No results</string>
|
|
<string name="mailbox_pull_to_refresh">Pull down to refresh</string>
|
|
|
|
<!-- Mailbox multi-select contextual action bar -->
|
|
<string name="cab_selected_count">%1$d selected</string>
|
|
<string name="cab_close">Clear selection</string>
|
|
<string name="action_archive">Archive</string>
|
|
<string name="action_delete">Delete</string>
|
|
<string name="action_spam">Spam</string>
|
|
<string name="action_move">Move</string>
|
|
<string name="action_reply">Reply</string>
|
|
<string name="action_reply_all">Reply all</string>
|
|
<string name="action_forward">Forward</string>
|
|
<string name="action_select_all">Select all</string>
|
|
<string name="action_more">More options</string>
|
|
<string name="move_picker_title">Move to</string>
|
|
<string name="cancel">Cancel</string>
|
|
<string name="confirm_spam_title">Move to Spam?</string>
|
|
<string name="confirm_spam_text">Move %1$d message(s) to the Spam folder?</string>
|
|
<string name="confirm_trash_title">Move to Trash?</string>
|
|
<string name="confirm_trash_text">Move %1$d message(s) to Trash?</string>
|
|
<string name="confirm_delete_title">Delete permanently?</string>
|
|
<string name="confirm_delete_text">This permanently deletes %1$d message(s) and can\'t be undone.</string>
|
|
<string name="confirm_reply_all_title">Reply to all?</string>
|
|
<string name="confirm_reply_all_text">Reply to everyone included on this message?</string>
|
|
|
|
<!-- Folder navigation drawer -->
|
|
<string name="drawer_open">Show folders</string>
|
|
<string name="drawer_switch_account">Switch account</string>
|
|
<string name="folder_all_inboxes">All Inboxes</string>
|
|
<string name="folder_inbox">Inbox</string>
|
|
<string name="folder_sent">Sent</string>
|
|
<string name="folder_drafts">Drafts</string>
|
|
<string name="folder_archive">Archive</string>
|
|
<string name="folder_spam">Spam</string>
|
|
<string name="folder_trash">Trash</string>
|
|
|
|
<!-- Compose -->
|
|
<string name="compose_from">From</string>
|
|
<string name="compose_to">To</string>
|
|
<string name="compose_cc">Cc</string>
|
|
<string name="compose_bcc">Bcc</string>
|
|
<string name="compose_subject">Subject</string>
|
|
<string name="compose_body">Message</string>
|
|
<string name="compose_no_account">Add an account before composing</string>
|
|
<string name="compose_attach">Attach file</string>
|
|
<string name="compose_attachment_remove">Remove attachment</string>
|
|
|
|
<!-- Compose formatting toolbar -->
|
|
<string name="format_bold">Bold</string>
|
|
<string name="format_italic">Italic</string>
|
|
<string name="format_underline">Underline</string>
|
|
<string name="format_bullet_list">Bulleted list</string>
|
|
<string name="format_numbered_list">Numbered list</string>
|
|
<string name="format_quote">Block quote</string>
|
|
<string name="format_link">Insert link</string>
|
|
<string name="format_link_title">Insert link</string>
|
|
<string name="format_link_url">Link address</string>
|
|
<string name="format_link_apply">Link</string>
|
|
<string name="format_link_needs_selection">Select some text first, then add a link.</string>
|
|
<string name="format_color_none">No color</string>
|
|
|
|
<!-- Drafts -->
|
|
<string name="drafts_title">Drafts</string>
|
|
<string name="drafts_empty">No drafts</string>
|
|
<string name="drafts_count">Drafts (%1$d)</string>
|
|
<string name="draft_no_subject">(no subject)</string>
|
|
<string name="draft_no_recipient">(no recipient)</string>
|
|
<string name="draft_delete">Delete draft</string>
|
|
|
|
<!-- Outbox -->
|
|
<string name="outbox_title">Outbox</string>
|
|
<string name="outbox_empty">Outbox is empty</string>
|
|
<string name="outbox_count">Outbox (%1$d)</string>
|
|
<string name="outbox_status_queued">Queued</string>
|
|
<string name="outbox_status_failed">Couldn\'t send — will retry</string>
|
|
<string name="outbox_cancel">Cancel send</string>
|
|
<string name="outbox_retry">Retry</string>
|
|
|
|
<!-- Reader -->
|
|
<string name="reader_reply">Reply</string>
|
|
<string name="attachments_title">Attachments</string>
|
|
<string name="attachment_downloaded">Downloaded</string>
|
|
<string name="message_available_offline">Available offline</string>
|
|
<string name="attachment_download_failed">Couldn\'t download %1$s</string>
|
|
<string name="attachment_no_app">No app can open this file</string>
|
|
|
|
<!-- Onboarding -->
|
|
<string name="onboarding_welcome_title">Welcome to LibreMail</string>
|
|
<string name="onboarding_welcome_subtitle">A private, open-source home for all your email. Add your first account to get started.</string>
|
|
<string name="onboarding_add_account">Add an email account</string>
|
|
<string name="onboarding_account_added_title">Account added</string>
|
|
<string name="onboarding_add_another_prompt">Would you like to add another email account?</string>
|
|
<string name="onboarding_add_another_yes">Add another account</string>
|
|
<string name="onboarding_add_another_no">No, take me to my inbox</string>
|
|
|
|
<!-- Onboarding: unrestricted background/battery opt-in (#49) -->
|
|
<string name="onboarding_battery_title">Get mail the instant it arrives</string>
|
|
<string name="onboarding_battery_body">LibreMail keeps a lightweight connection open to deliver mail the moment it lands. Android\'s battery optimization can pause or close that connection, so messages may show up late — or only when you open the app.</string>
|
|
<string name="onboarding_battery_guidance">On the next screen, open Battery and choose “Unrestricted”.</string>
|
|
<string name="onboarding_battery_take_me">Take me there</string>
|
|
<string name="onboarding_battery_not_now">Not now</string>
|
|
<string name="onboarding_battery_done_title">You\'re all set</string>
|
|
<string name="onboarding_battery_done_body">Background usage is unrestricted — new mail will arrive instantly.</string>
|
|
<string name="onboarding_battery_continue">Continue to inbox</string>
|
|
|
|
<!-- Account setup (vendor picker) -->
|
|
<string name="account_setup_outlook">Outlook or Hotmail</string>
|
|
<string name="account_setup_other">Other (IMAP/SMTP)</string>
|
|
<string name="account_setup_subtitle">Choose your email provider to get started.</string>
|
|
|
|
<!-- App-password guided setup (Gmail/Yahoo/iCloud) -->
|
|
<string name="app_password_title">Connect %1$s</string>
|
|
<string name="app_password_unknown_provider">Unknown email provider.</string>
|
|
<string name="app_password_intro_gmail">To connect Gmail, create an app password in your Google Account. Gmail requires 2-Step Verification to be turned on before you can create one.</string>
|
|
<string name="app_password_intro_yahoo">To connect Yahoo Mail, generate an app password from your Yahoo Account security settings.</string>
|
|
<string name="app_password_intro_icloud">To connect iCloud Mail, create an app-specific password from your Apple ID account page.</string>
|
|
<string name="app_password_what_is">An app password is a one-off password that lets an app sign in to your account without your main password or a two-factor code.</string>
|
|
<string name="app_password_warning">Store this app password carefully — it grants full access to your email. LibreMail keeps it only on this device.</string>
|
|
<string name="app_password_open_page">Create an app password for %1$s</string>
|
|
<string name="app_password_open_failed">Couldn\'t open your browser</string>
|
|
<string name="app_password_email">Email address</string>
|
|
<string name="app_password_field">App password</string>
|
|
<string name="app_password_show_servers">Server settings</string>
|
|
<string name="app_password_server_imap">Incoming (IMAP): %1$s:%2$d (%3$s)</string>
|
|
<string name="app_password_server_smtp">Outgoing (SMTP): %1$s:%2$d (%3$s)</string>
|
|
<string name="app_password_test_and_add">Test & add account</string>
|
|
|
|
<!-- Manual IMAP/SMTP setup -->
|
|
<string name="manual_setup_title">IMAP / SMTP</string>
|
|
<string name="manual_email">Email address</string>
|
|
<string name="manual_password">Password or app password</string>
|
|
<string name="manual_incoming">Incoming mail (IMAP)</string>
|
|
<string name="manual_outgoing">Outgoing mail (SMTP)</string>
|
|
<string name="manual_imap_server">IMAP server</string>
|
|
<string name="manual_smtp_server">SMTP server</string>
|
|
<string name="manual_imap_port">IMAP port</string>
|
|
<string name="manual_smtp_port">SMTP port</string>
|
|
<string name="manual_imap_security">IMAP security</string>
|
|
<string name="manual_smtp_security">SMTP security</string>
|
|
<string name="manual_test_and_add">Test & add account</string>
|
|
|
|
<!-- Notifications -->
|
|
<string name="notif_channel_new_mail">New mail</string>
|
|
<string name="notif_new_mail_count">%1$d new messages</string>
|
|
<string name="notif_channel_push_status">Push (IMAP IDLE)</string>
|
|
<string name="notif_push_status_title">Watching for new mail</string>
|
|
<string name="notif_push_status_text">Connected for instant delivery</string>
|
|
|
|
<!-- Settings -->
|
|
<string name="settings_accounts">Accounts</string>
|
|
<string name="settings_downloading">Message downloading</string>
|
|
<string name="fetch_always">Always fetch all</string>
|
|
<string name="fetch_always_summary">Download full messages and attachments as they sync, on any connection.</string>
|
|
<string name="fetch_wifi">Fetch all on Wi-Fi</string>
|
|
<string name="fetch_wifi_summary">Download full messages and attachments only on Wi-Fi or other unmetered networks; otherwise fetch them when you open a message.</string>
|
|
<string name="fetch_on_demand">Always on-demand</string>
|
|
<string name="fetch_on_demand_summary">Sync only message headers; download a message\'s content when you open it.</string>
|
|
<string name="settings_notifications">Notifications</string>
|
|
<string name="settings_new_mail">New-mail notifications</string>
|
|
<string name="settings_new_mail_summary">Show a notification when new mail arrives</string>
|
|
<string name="settings_no_accounts">No accounts yet</string>
|
|
<string name="account_remove">Remove account</string>
|
|
|
|
<!-- Backup -->
|
|
<string name="settings_backup">Backup</string>
|
|
<string name="settings_backup_include">Include settings in Android Backup</string>
|
|
<string name="settings_backup_include_summary">Let Android back up your LibreMail preferences (Google Auto Backup) so they restore when you set up a new device. Your mail, accounts, passwords, and encryption keys are never backed up — only app settings. Off by default; uses Google infrastructure.</string>
|
|
|
|
<!-- Per-account settings -->
|
|
<string name="settings_account_title">Account</string>
|
|
<string name="settings_signature">Signature</string>
|
|
<string name="settings_signature_enable">Append signature automatically</string>
|
|
<string name="settings_signature_hint">Your signature</string>
|
|
<string name="settings_signatures_manage">Manage signatures</string>
|
|
<string name="settings_signatures_summary_none">No signatures yet</string>
|
|
<string name="settings_signatures_summary">%1$d signature(s), default: %2$s</string>
|
|
|
|
<!-- Signatures management -->
|
|
<string name="signatures_title">Signatures</string>
|
|
<string name="signatures_empty">No signatures yet. Add one to append it to your messages.</string>
|
|
<string name="signatures_add">Add signature</string>
|
|
<string name="signature_new_title">New signature</string>
|
|
<string name="signature_edit_title">Edit signature</string>
|
|
<string name="signature_name">Name</string>
|
|
<string name="signature_content">Signature</string>
|
|
<string name="signature_save">Save</string>
|
|
<string name="signature_delete">Delete signature</string>
|
|
<string name="signature_default">Default</string>
|
|
<string name="signature_make_default">Set as default</string>
|
|
<string name="signature_default_badge">Default</string>
|
|
<string name="settings_account_notifications">Notifications</string>
|
|
<string name="settings_account_new_mail">New mail notifications</string>
|
|
<string name="settings_account_new_mail_summary">Show notifications for this account</string>
|
|
<string name="settings_account_system_notif">Sound & vibration</string>
|
|
<string name="settings_account_system_notif_summary">Manage sound, vibration, and importance in Android settings</string>
|
|
<string name="settings_appearance">Appearance</string>
|
|
<string name="settings_dynamic_color">Use wallpaper colors</string>
|
|
<string name="settings_dynamic_color_summary">Material You dynamic theming (Android 12+)</string>
|
|
<string name="settings_add_account">Add account</string>
|
|
<string name="settings_advanced">Advanced Settings</string>
|
|
<string name="settings_advanced_summary">Power-user options for sync and connections</string>
|
|
<string name="settings_adv_idle">Push mail (IMAP IDLE)</string>
|
|
<string name="settings_adv_starttls">Allow insecure STARTTLS fallback</string>
|
|
<string name="settings_adv_starttls_summary">Connect even when the server can\'t upgrade to an encrypted (STARTTLS) connection. Leave this off unless a specific server requires it — while on, your username and password may be sent unencrypted.</string>
|
|
<string name="settings_adv_remote_images">Load remote images by default</string>
|
|
<string name="settings_adv_encrypt_cache">Encrypt local cache</string>
|
|
<string name="settings_adv_encrypt_cache_summary">Encrypt cached mail stored on this device, using a key held in the Android Keystore. Applies the next time you open LibreMail.</string>
|
|
<string name="settings_adv_battery">Background battery usage</string>
|
|
<string name="settings_adv_battery_unrestricted">Unrestricted — instant background mail is allowed.</string>
|
|
<string name="settings_adv_battery_optimized">Optimized by Android — new mail may be delayed. Tap to allow unrestricted background usage.</string>
|
|
|
|
<!-- Diagnostics / debug reporting -->
|
|
<string name="settings_diagnostics">Diagnostics</string>
|
|
<string name="settings_report_problem">Report a problem</string>
|
|
<string name="settings_report_problem_summary">Capture diagnostics you can review and optionally send</string>
|
|
<string name="reports_title">Problem reports</string>
|
|
<string name="reports_empty">No problem reports yet</string>
|
|
<string name="reports_create">Create a report</string>
|
|
<string name="report_kind_crash">Crash report</string>
|
|
<string name="report_kind_manual">Manual report</string>
|
|
<string name="report_review_title">Review report</string>
|
|
<string name="report_pii_disclaimer_title">May contain personal information</string>
|
|
<string name="report_pii_disclaimer">This report can include email addresses, server names, and other details from your device. Read the whole thing below before sending. Nothing is sent unless you tap Submit.</string>
|
|
<string name="report_comment_label">What went wrong? (optional)</string>
|
|
<string name="report_payload_label">Exactly what will be sent</string>
|
|
<string name="report_submit">Submit</string>
|
|
<string name="report_discard">Discard report</string>
|
|
<string name="report_copy">Copy</string>
|
|
<string name="report_save">Save to file</string>
|
|
<string name="report_submitting">Submitting…</string>
|
|
<string name="report_submitted">Report sent. Thank you!</string>
|
|
<string name="report_submit_failed">Couldn\'t send — it will be retried.</string>
|
|
<string name="report_submit_unavailable">Online submission isn\'t available in this build. Use Copy or Save to share the report.</string>
|
|
<string name="report_copied">Copied to clipboard</string>
|
|
<string name="report_saved">Saved</string>
|
|
<string name="crash_prompt_title">LibreMail closed unexpectedly</string>
|
|
<string name="crash_prompt_message">A problem report from the last crash is ready for you to review. Nothing is sent automatically.</string>
|
|
<string name="crash_prompt_review">Review</string>
|
|
<string name="crash_prompt_later">Not now</string>
|
|
<string name="crash_prompt_discard">Discard</string>
|
|
</resources>
|