CI & Build / Python lint (push) Successful in 2s
CI & Build / Build now, or wait for Android? (push) Successful in 2s
Android / Build, or is the channel already serving this? (push) Successful in 3s
Desktop (Tauri) / Build, or is the channel already serving this? (push) Successful in 2s
CI & Build / Web typecheck and unit tests (push) Successful in 8s
CI & Build / Python tests (push) Successful in 10s
CI & Build / integration (push) Failing after 1m21s
CI & Build / Build & push image (push) Skipped
Desktop (Tauri) / Web tests, clippy, Rust tests and rustfmt (push) Successful in 2m47s
Desktop (Tauri) / Windows installer (cross-compiled) (push) Successful in 2m48s
Desktop (Tauri) / Tauri desktop (Linux) (push) Successful in 3m39s
Desktop (Tauri) / Update manifest (push) Successful in 3s
Android / Kotlin + Rust (APK) (push) Successful in 8m37s
From the audit (#5178). Each was unreachable from every client: - Checklist add-item and delete-item: REST POST /items and DELETE /items/<id>, the Tauri commands, the store, rest and local adapters, the core's add_item/delete_item, set_item_text and remove_item, and the FFI exports. Adding, rewording and removing an item are body edits in every editor. The checked toggle stays, and its rewriter is simpler without the drop branch. - Manual unfurl: POST /unfurl and its adapters. Previews arrive in the background after a save (unfurl_queue). - The /api/config `android_client` key, android_release() and the APK_NAME/MANIFEST_NAME aliases. Phones poll /api/client/android. - users.email_verified and users.avatar_path (migration 0037). Nothing set the first or read the second; the SMTP reset never checked verification. - derive::extract_tags (only tests used it; the shared fixture now runs through extract_tag_spans), the unused check and link icons, and the unused editor_add_item string. - The blob scheme is renamed tsblob -> inkblob. URLs are built as notes are read, so nothing stored carries the old one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
303 lines
19 KiB
XML
303 lines
19 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<resources>
|
|
<string name="app_name">Inkwell</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">Tags</string>
|
|
|
|
<!-- Compose sheet -->
|
|
<string name="compose_open">New note</string>
|
|
|
|
<!-- Board -->
|
|
<string name="board_empty_note">Empty note</string>
|
|
|
|
<!-- The long-press menu. Its ITEMS are the editor_* strings, deliberately: a
|
|
note has one vocabulary of things you can do to it, and a board that said
|
|
"Delete" where the editor says "Move to trash" would be describing two
|
|
different apps. Only the wrapper and the undo need words of their own. -->
|
|
<string name="board_note_actions">Note actions</string>
|
|
<string name="board_trashed">Moved to trash</string>
|
|
<string name="board_undo">Undo</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_remove_item">Remove item</string>
|
|
<string name="editor_remove_label">Remove tag</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">Tags…</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>
|
|
<string name="editor_share">Share…</string>
|
|
|
|
<!-- Sharing (#5175). Shares live on the server, so the sheet says so when this
|
|
phone isn't linked to one. -->
|
|
<string name="share_title">Share</string>
|
|
<string name="share_loading">Loading…</string>
|
|
<string name="share_needs_server">Sharing is between people on a server. Link this phone in Sync to share notes.</string>
|
|
<string name="share_none">Not shared with anyone yet.</string>
|
|
<string name="share_everyone">Shared with everyone on this server.</string>
|
|
<string name="share_add">Add someone or a group</string>
|
|
<string name="share_action">Share</string>
|
|
<string name="share_remove">Stop sharing</string>
|
|
<string name="share_can_view">Can view</string>
|
|
<string name="share_can_edit">Can edit</string>
|
|
<string name="share_someone">someone</string>
|
|
<string name="share_by_view_only">Shared by %1$s · view only</string>
|
|
<string name="share_by_can_edit">Shared by %1$s · you can edit the text</string>
|
|
<string name="share_chip_shared">Shared</string>
|
|
<string name="share_chip_by">From %1$s</string>
|
|
<plurals name="share_group_members">
|
|
<item quantity="one">Group · %d person</item>
|
|
<item quantity="other">Group · %d people</item>
|
|
</plurals>
|
|
|
|
<!-- Attachments. A file is stored on the phone at once and uploaded on a later
|
|
sync, so nothing here talks about the network. -->
|
|
<string name="editor_attach">Attach a file</string>
|
|
<string name="attach_remove">Remove attachment</string>
|
|
<string name="attach_unnamed">Unnamed file</string>
|
|
<string name="attach_more">+%1$d more</string>
|
|
<string name="attach_refused">Not uploaded: %1$s</string>
|
|
<string name="attach_too_large">%1$s is over %2$d MB, too large to attach from the phone.</string>
|
|
<string name="attach_unreadable">Couldn\'t read %1$s.</string>
|
|
<string name="attach_not_here">This file hasn\'t downloaded to this phone yet. Sync, then try again.</string>
|
|
<string name="attach_no_app">No app on this phone opens this kind of file.</string>
|
|
<string name="attach_open_failed">Couldn\'t open the file: %1$s</string>
|
|
<string name="preview_remove">Remove link preview</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>
|
|
|
|
<!-- Quick capture from outside the app: the share sheet and the text-selection
|
|
toolbar. "New note" says what happens; the activity's own label would say
|
|
who it happens in. -->
|
|
<string name="capture_process_text">New note</string>
|
|
|
|
<!-- Tag management. The whole vocabulary is "tag" (see Scribe #2966); the
|
|
schema still says Label, and no string here needs to know that. -->
|
|
<string name="tags_manage">Manage tags</string>
|
|
<string name="tags_title">Tags</string>
|
|
<string name="tags_back">Back</string>
|
|
<string name="tags_new_hint">New tag</string>
|
|
<string name="tags_create">Create</string>
|
|
<string name="tags_count">%1$d notes</string>
|
|
<string name="tags_count_one">1 note</string>
|
|
<string name="tags_count_none">No notes yet</string>
|
|
<string name="tags_empty_title">No tags yet</string>
|
|
<string name="tags_empty_body">Create one above, or write a #tag in a note and it becomes one.</string>
|
|
<string name="tags_actions">More actions</string>
|
|
<string name="tags_colour">Colour</string>
|
|
<string name="tags_colour_of">Colour for %1$s</string>
|
|
|
|
<string name="tags_rename">Rename</string>
|
|
<string name="tags_rename_title">Rename %1$s</string>
|
|
<string name="tags_rename_confirm">Rename</string>
|
|
<!-- Renaming onto an existing tag merges the two, older survives (Scribe
|
|
#3324). A merge cannot be undone by repeating it and is reachable here by
|
|
a typo, so it says so before it happens — same reasoning as #2116. -->
|
|
<string name="tags_rename_merges_title">Merge with %1$s?</string>
|
|
<string name="tags_rename_merges_body">A tag called %1$s already exists. Renaming will merge these two into one, carrying every note from both. The notes are kept; one of the two tags stops existing, and that cannot be undone.</string>
|
|
<string name="tags_rename_merges_confirm">Merge</string>
|
|
|
|
<string name="tags_merge">Merge into…</string>
|
|
<string name="tags_merge_title">Merge %1$s into…</string>
|
|
<!-- The survivor is named in the button, not just the title: this is the one
|
|
operation here that repeating does not undo. -->
|
|
<string name="tags_merge_body">Every note tagged %1$s will be tagged with the one you pick instead, and %1$s will stop existing. The notes are kept.</string>
|
|
<string name="tags_merge_none">There is no other tag to merge into.</string>
|
|
|
|
<string name="tags_delete">Delete</string>
|
|
<string name="tags_delete_title">Delete %1$s?</string>
|
|
<string name="tags_delete_body">It will be removed from every note that has it, on every device you sync with. The notes themselves are kept.</string>
|
|
<string name="tags_delete_body_counted">It is on %1$d notes. It will be removed from all of them, on every device you sync with. The notes themselves are kept.</string>
|
|
<string name="tags_delete_confirm">Delete</string>
|
|
<!-- A tag written as #tag in a note's body is owned by that text. Deleting the
|
|
row cannot un-write the word, so it comes back on that note's next edit —
|
|
said here rather than left as a surprise. -->
|
|
<string name="tags_delete_from_text">Tags written as #tag in a note come back when that note is next edited.</string>
|
|
|
|
<string name="tags_cancel">Cancel</string>
|
|
|
|
<!-- Pickers -->
|
|
<string name="label_picker_title">Tags</string>
|
|
<string name="label_new_hint">Type a tag and press enter</string>
|
|
<string name="label_from_tag">from the text</string>
|
|
<string name="label_none_body">No tags 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 & 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 Inkwell, 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">Inkwell 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 an Inkwell 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">Inkwell 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>
|
|
<plurals name="sync_summary_uploaded">
|
|
<item quantity="one">uploaded %d file</item>
|
|
<item quantity="other">uploaded %d files</item>
|
|
</plurals>
|
|
<plurals name="sync_summary_upload_failed">
|
|
<item quantity="one">%d file didn\'t upload. If the server refused it, its note says why; otherwise it\'ll retry.</item>
|
|
<item quantity="other">%d files didn\'t upload. Any the server refused say why on their note; the rest will retry.</item>
|
|
</plurals>
|
|
|
|
<!-- Errors -->
|
|
<string name="error_dismiss">Dismiss</string>
|
|
|
|
<!-- The build, at the foot of Sync. Never blank: an APK with no versionName is
|
|
a real state (a bare `gradlew assembleDebug` with no override) and saying
|
|
so is better than an empty line that reads as a layout bug. -->
|
|
<string name="build_unknown">unknown</string>
|
|
</resources>
|