Files
thoughtsync/android/app/src/main/res/values/strings.xml
T
bvandeusen 1e2b42af25
Desktop (Tauri) / Windows installer (cross-compiled) (push) Successful in 3m29s
Android / Kotlin + Rust (APK) (push) Failing after 5m39s
Desktop (Tauri) / Tauri desktop (Linux) (push) Successful in 6m30s
Desktop (Tauri) / Update manifest (push) Successful in 4s
android: say nothing until the update is downloaded, and only fetch on wifi
Both corrections to what I built, and the second changes the first.

NAG ONLY WHEN READY. The banner is now gated on the bytes being on disk. I had it
appearing as soon as a build was FOUND, with Install downloading on demand — which
turns one tap into an unplanned download, and is exactly the surprise the wifi gate
was meant to avoid. Off wifi the app now stays quiet and picks it up later.

ONLY ON WIFI, and both halves of that. `isActiveNetworkMetered` alone would download
over an unmetered cellular plan, which is not what "on wifi" means. TRANSPORT_WIFI
alone would download over a tethered hotspot, which is mobile data wearing a
different hat and the precise bill this avoids. It now requires both.

Found while making the first change: gating the nag on `ready` broke the nag. The
background path returns early once a build is fetched, so `nagDismissed` would never
be cleared again and a single "Later" would have silenced the update permanently —
the exact "lost" this whole path exists to prevent. Coming forward with a fetched
build now clears the dismissal instead of returning.

Also: a build found off wifi retries its FETCH on the next foreground rather than
waiting out the six-hour check interval. Found on the train, downloaded at home.

The banner loses its two-state text with the change, and BoardUpdate loses `ready` —
it is implied now. It stays visible while installing, deliberately: that is the one
moment it has something to report, and hiding it would look like the tap did nothing.
2026-08-26 09:53:40 -04:00

197 lines
12 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ThoughtSync</string>
<!-- Search bar -->
<string name="search_hint">Search your notes</string>
<string name="search_clear">Clear search</string>
<string name="nav_open">Open navigation</string>
<string name="nav_labels">Labels</string>
<!-- Compose sheet -->
<string name="compose_open">New note</string>
<!-- Board -->
<string name="board_empty_note">Empty note</string>
<!-- Empty states. Each destination says something true of ITSELF; a single
"nothing here" reads as encouragement on the board and as a fault in Trash. -->
<string name="board_empty_title">Nothing here yet</string>
<string name="board_empty_body">Tap + to start a note or a list. Everything stays on this device until you connect a server.</string>
<string name="empty_search_title">No matches</string>
<string name="empty_search_body">Nothing matched “%1$s”.</string>
<string name="empty_trash_title">Trash is empty</string>
<string name="empty_trash_body">Deleted notes wait here before they are removed for good.</string>
<string name="empty_archive_title">Nothing archived</string>
<string name="empty_archive_body">Archived notes leave the board but stay searchable.</string>
<string name="empty_reminders_title">No reminders</string>
<string name="empty_reminders_body">Notes with a reminder set will appear here.</string>
<!-- Editor -->
<string name="board_open_note">Open note</string>
<string name="editor_back">Back to notes</string>
<string name="editor_add_checklist">Add a checklist</string>
<string name="editor_body_hint">Take a note…</string>
<string name="editor_add_item">Add item</string>
<string name="editor_remove_item">Remove item</string>
<string name="editor_remove_label">Remove label</string>
<string name="editor_reminder">Set a reminder</string>
<string name="editor_more">More actions</string>
<string name="editor_saving">Saving…</string>
<string name="editor_unsaved">Not saved yet</string>
<string name="editor_edited">Edited %1$s</string>
<string name="editor_just_now">just now</string>
<string name="editor_done">Done</string>
<string name="editor_pin">Pin</string>
<string name="editor_unpin">Unpin</string>
<string name="editor_labels">Labels…</string>
<string name="editor_archive">Archive</string>
<string name="editor_unarchive">Unarchive</string>
<string name="editor_trash">Move to trash</string>
<string name="editor_restore">Restore</string>
<string name="editor_cancel">Cancel</string>
<!-- Deleting for good is the only thing in the app that cannot be undone, so
the copy says exactly that rather than asking "Are you sure?". -->
<string name="editor_delete_forever">Delete forever</string>
<string name="editor_delete_forever_title">Delete this note?</string>
<string name="editor_delete_forever_body">It will be removed from this device and from every device you sync with. This cannot be undone.</string>
<string name="editor_delete_forever_confirm">Delete</string>
<!-- Pickers -->
<string name="color_picker_title">Color</string>
<string name="label_picker_title">Labels</string>
<string name="label_new_hint">Type a label and press enter</string>
<string name="label_from_tag">from #tag</string>
<string name="label_none_body">No labels yet. Type one above, or write a #tag in a note and it becomes one.</string>
<string name="picker_next">Next</string>
<string name="picker_set">Set</string>
<string name="picker_time_title">Pick a time</string>
<!-- Reminders -->
<string name="reminder_title">Remind me</string>
<string name="reminder_later_today">Later today</string>
<string name="reminder_tomorrow">Tomorrow</string>
<string name="reminder_next_week">Next week</string>
<string name="reminder_pick">Pick a date &amp; time</string>
<string name="reminder_clear">Remove reminder</string>
<string name="reminder_done">Done</string>
<string name="reminder_snooze_hour">Snooze 1h</string>
<string name="reminder_snooze_day">Snooze 1d</string>
<string name="recurrence_none">Once</string>
<string name="recurrence_daily">Daily</string>
<string name="recurrence_weekly">Weekly</string>
<string name="recurrence_monthly">Monthly</string>
<string name="recurrence_yearly">Yearly</string>
<!-- Store failure -->
<string name="store_unavailable_title">Your notes couldn\'t be opened</string>
<string name="store_unavailable_body">The note store on this device could not be read. Reinstalling will start a fresh one, but anything not synced to a server would be lost.</string>
<!-- Sync. Opt-in, and the copy has to carry that: being unlinked is the
normal resting state of a local-first app, not unfinished setup. -->
<string name="sync_title">Sync</string>
<string name="sync_badge_on">On</string>
<string name="sync_badge_unsent">Unsent</string>
<!-- Linked -->
<string name="sync_connected_to">Connected to</string>
<string name="sync_linked_as">as %1$s</string>
<string name="sync_last_synced">Last synced %1$s</string>
<string name="sync_never">never</string>
<string name="sync_unsent">This device has changes that haven\'t been sent yet.</string>
<string name="sync_now">Sync now</string>
<string name="sync_disconnect">Disconnect</string>
<string name="sync_disconnect_title">Stop syncing with this server?</string>
<string name="sync_disconnect_body">Your notes stay on this device, and the copy on the server is left alone. This device\'s access token is revoked, so it can\'t be used to reach the server again.</string>
<string name="reminder_channel">Reminders</string>
<string name="reminder_channel_description">Notifies you when a note\'s reminder is due.</string>
<string name="reminder_notifications_blocked_title">Reminders can\'t notify you</string>
<string name="reminder_notifications_blocked_body">Notifications are turned off for ThoughtSync, so reminders will only show here on the board.</string>
<string name="reminder_open_settings">Open settings</string>
<string name="reminder_inexact_title">Reminders may arrive late</string>
<string name="reminder_inexact_body">Without permission for exact alarms, Android delivers reminders when it next wakes the phone — usually within a few minutes, sometimes longer.</string>
<string name="reminder_allow_exact">Allow exact timing</string>
<string name="sync_automatic">Sync automatically</string>
<string name="sync_automatic_on">Checks about every 15 minutes, and whenever you open the app.</string>
<string name="sync_automatic_off">Only when you pull the board down or tap Sync now.</string>
<string name="update_installed_version">This app is build %1$d.</string>
<string name="update_available">Build %1$s is available (%2$d MB).</string>
<string name="update_current">You\'re on the newest build this server has.</string>
<string name="update_check">Check for an update</string>
<string name="update_install">Update</string>
<string name="update_banner_ready">Build %1$s is downloaded and ready.</string>
<string name="update_later">Later</string>
<string name="update_failed_title">The update didn\'t install</string>
<string name="update_permission_title">Android needs your permission</string>
<string name="update_permission_body">ThoughtSync has to be allowed to install apps before it can update itself. This is a one-time setting.</string>
<string name="update_permission_action">Allow installing</string>
<string name="update_needs_server">App updates come from a server you connect. Until then, install new builds yourself.</string>
<string name="sync_footer">Your notes live on this device either way — syncing just keeps a server copy in step, so your other devices can catch up.</string>
<string name="sync_failed_title">Sync failed</string>
<string name="sync_rejected_title">The server wouldn\'t accept some changes</string>
<plurals name="sync_rejected_body">
<item quantity="one">%1$d change was rejected: %2$s</item>
<item quantity="other">%1$d changes were rejected: %2$s</item>
</plurals>
<string name="sync_degraded_title">Some features aren\'t available here</string>
<string name="sync_degraded_body">This server doesn\'t support: %1$s. Everything else syncs normally.</string>
<!-- Unlinked -->
<string name="sync_offline_title">Working offline on this device</string>
<string name="sync_offline_body">Everything works without a server — your notes are stored on this phone. Connect a ThoughtSync server if you want them to reach your other devices.</string>
<string name="sync_address_label">Server address</string>
<string name="sync_address_hint">notes.example.com</string>
<string name="sync_address_help">Uses https unless you type http:// yourself.</string>
<string name="sync_check">Check</string>
<string name="sync_probe_failed">Couldn\'t reach that server</string>
<string name="sync_link_failed">Couldn\'t connect</string>
<string name="sync_server_generic">ThoughtSync server</string>
<string name="sync_server_version">v%1$s</string>
<string name="sync_compat_ok">Fully compatible.</string>
<string name="sync_compat_degraded">Compatible, but these features aren\'t available on this server: %1$s.</string>
<!-- Shown before any credential field, whenever the probed address is http://.
Android blocks cleartext by default and this app allows it so that a
self-hosted server on a LAN works at all; this is the other half of
that trade. -->
<string name="sync_insecure_title">This connection isn\'t encrypted</string>
<string name="sync_insecure_body">You\'re about to sign in over plain http. Anyone on the same network can read your password and your notes. Use https unless this is a server you control, on a network you trust.</string>
<string name="sync_signin">Sign in</string>
<string name="sync_mode_password">Email and password</string>
<string name="sync_mode_token">Device token</string>
<string name="sync_email">Email</string>
<string name="sync_password">Password</string>
<string name="sync_token">Paste a device token</string>
<string name="sync_token_help">Create one in the web app under Account → Linked devices.</string>
<string name="sync_device_name">Name for this device</string>
<string name="sync_device_name_help">Shown in your account\'s list of linked devices.</string>
<string name="sync_connect">Connect and sync</string>
<!-- An unlink whose server-side revoke didn\'t land leaves a live credential.
Never a transient message: someone disconnecting to retire a phone has to
still find this when they come back to check. -->
<string name="sync_revoke_title">This device\'s token is still valid on the server</string>
<string name="sync_revoke_unsupported">This server is older than in-app sign-out, so this device\'s token had to be left in place. Revoke it in the web app under Account → Linked devices.</string>
<string name="sync_revoke_failed">%1$s Until it\'s revoked, this device\'s token still works — you can revoke it in the web app under Account → Linked devices.</string>
<!-- What a sync did. Counts what MOVED; batches, pages and cursors are real
numbers that answer nobody\'s question. -->
<string name="sync_summary">Synced — %1$s.</string>
<string name="sync_summary_sent">sent %1$d</string>
<string name="sync_summary_received">received %1$d</string>
<string name="sync_summary_uptodate">Already up to date.</string>
<plurals name="sync_summary_attachments">
<item quantity="one">%d attachment</item>
<item quantity="other">%d attachments</item>
</plurals>
<plurals name="sync_summary_attachments_failed">
<item quantity="one">%d attachment didn\'t download — it\'ll retry on the next sync.</item>
<item quantity="other">%d attachments didn\'t download — they\'ll retry on the next sync.</item>
</plurals>
<!-- Errors -->
<string name="error_dismiss">Dismiss</string>
</resources>