Files
mantra-kmp/composeApp/src/commonMain/composeResources/values/strings.xml
Kgothatso Ngako 347cf26d83 feat(sign-in): ask the relays that would know, and say when none of them did
Phase 5 of docs/nsec-sign-in.md. Not nsec-specific: a restored recovery phrase
whose profile was never published, or a device offline at sign-in, sat on the
same spinner. An imported nsec is the first path that hits it routinely --
many nostr keys are made in a client that never wrote a kind 0.

Ask the relays that would know. The sign-in sync fanned its REQ out over
Relays.DefaultDMRelayList, which is listOf(ephemeral): our own relay, alone.
The right answer for a profile this app created; an identity that has lived
on Damus for three years has never heard of it. SignInSync now holds the one
definition three call sites want -- the kinds, the request builder and the
bootstrap set, which is every indexer relay plus ours. Indexer relays exist
to hold everyone's kinds 0, 3 and 10002; that is exactly what the sync asks
for.

Then follow the answer, once. When a level-0 sign-in request brings back the
user's own kind 10002, the sync pump queues the same request at level 1 at
the relays that list says they write to, less the bootstrap set already
asked. The outbox model doing what it is for: the indexers know *where* the
user publishes, and the user's own relays are where the rest of their lists
are authoritative. Write relays, not read relays -- asking a user's inbox for
their own events is the mistake the split exists to name. One hop per
account per session, because every bootstrap relay that holds the list
answers with it; and a level-1 request never re-enters, because past the
user's own relays lies the feed, not the profile.

Say when none of them did. A request went pending -> sent when its REQ was
dispatched and sent -> processed only if an event arrived for it; a relay
that answered with EOSE and nothing else left its row at `sent` for good, so
"still searching" and "searched, found nothing" were the same row and the
screen waiting on the sync had no way to say the second thing. The pump's
finally block -- every exit: EOSE, CLOSED, the bounded timeout -- now records
`complete`, conditionally in SQL on the row still being `sent`, because the
event handler that writes `processed` runs in its own coroutine and can land
after the subscription has closed, and a completion that overwrote it would
turn "found" back into "found nothing".

UnsyncedProfileViewModel reads that. Its one decision, `decide`, is a pure
function of the account: a kind 0 indexed or a Profile row means the route is
about to move, so still searching; any request still pending or sent is a
relay that has not finished; only when every request has finished and
nothing came is the answer not-found. The screen's not-found state offers
two exits. Try again re-queues the bootstrap, and the new in-flight requests
put the screen back to searching on their own. Set up a profile is the
six-event bootstrap a fresh key gets, without a fresh key:
setUpProfileForExistingKey writes the kind 0 *over* the placeholder row,
under its own id with signedAt back to null, rather than beside it --
getLocalAccounts is every kind-0 row, and two for one pubkey would be two
accounts disagreeing about which is this one. The rows change under
observeLocalAccount, NavigationViewModel sees an unsigned kind 0, and the
notary, which already holds this key, signs it. createNewProfile now builds
its events through the same bootstrapUnsignedEvents.

Tests. SignInSyncTest pins the bootstrap set (every indexer, ours, no
duplicates, more than one) and the outbox reading of a relay list: write and
unmarked relays in, read relays and malformed tags out, already-asked
removed. UnsyncedProfileDecisionTest walks pending -> sent -> complete and
asserts the answer flips only on the last, that a request answered with
something other than a profile still counts as finished, that an arrived
kind 0 is never not-found. SynchronizeNostrEventRequestCompletionJvmTest
pins the conditional update against a real Room database: sent becomes
complete, processed and pending are left alone. SetUpProfileForExistingKeyJvmTest
runs signInToProfile then the set-up against the repository and asserts one
kind-0 row, the same id, unsigned, carrying the name, with five events beside
it.

Verified with :composeApp:compileDebugKotlinAndroid, :composeApp:jvmTest (895
tests) and :composeApp:m3Audit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Pulled-From: curated/curated@d61d3560a0
2026-09-13 12:00:19 +02:00

599 lines
49 KiB
XML

<resources>
<!--
The app's own string catalogue. Nearly empty, for now.
This file previously held 1101 strings inherited from the phoenix wallet fork
(notification channel titles, electrum server settings, swap timeouts), and
app_name was "Machankura". Nothing referenced any of them: the only two
stringResource calls in the tree were both commented out, and one of them named an
R.string, which does not exist in a Compose Multiplatform resource set at all.
Keeping 1101 dead strings made this look like the app's catalogue while the app's
actual 334 strings sat inside composables.
The launcher label is a separate resource, in androidMain/res/values/strings.xml,
which is what AndroidManifest.xml points at. It already said "Mantra".
Externalising the 334 is the rest of phase 4 in
docs/material-design-conformance.md. They land here.
Note for whoever edits this: XML forbids a double hyphen inside a comment, so use
an em dash or a comma. The compose resources plugin reports that only as
"XML file ... is not valid. Check the file content."
-->
<string name="app_name">Mantra</string>
<string name="add_a_dialect_the_group_can_translate_into">Add a dialect the group can translate into</string>
<string name="add_artifact_to_library">Add artifact to library</string>
<string name="add_artifact_to_the_group_library">Add artifact to the group library</string>
<string name="add_chapter">Add chapter</string>
<string name="add_dialect">Add dialect</string>
<string name="add_to_group">Add to group</string>
<string name="add_translation">Add translation</string>
<string name="after_this_there_is_no_turning_back">After this there is no turning back.</string>
<string name="all_broadcasts_are_queued_so_that_we_can">All broadcasts are queued so that we can manage data usage on metered connections.</string>
<string name="any_amount">Any amount</string>
<string name="article">ARTICLE</string>
<string name="artifact_detail">Artifact detail</string>
<string name="as_long_as_you_control_your_keys_there_can">As long as you control your keys there can be no dispute about who YOU actually is.</string>
<string name="back">Back</string>
<string name="backup_confirmation">Backup confirmation</string>
<string name="be_sure_to_keep_this_nsec_safe">Be sure to keep this nsec safe.</string>
<string name="be_the_first_to_comment">Be the first to comment.</string>
<string name="bio">Bio</string>
<string name="bip39_seed_with_the_standard_bip84">BIP39 seed with the standard BIP84 derivation path. The profile\'s nostr key comes off the same seed, so these 12 words restore both.</string>
<string name="block_user">Block user</string>
<string name="cancel">Cancel</string>
<string name="change_account">Change account</string>
<string name="chapter_detail">Chapter detail</string>
<string name="chapter_name">Chapter name</string>
<string name="chapter_translation">Chapter translation</string>
<string name="chapters">Chapters</string>
<string name="choose_who_to_chat_with">Choose who to chat with</string>
<string name="close">Close</string>
<string name="cloud_backup">Cloud backup</string>
<string name="copy_url">Copy URL</string>
<string name="could_not_unlock_your_phrase_please_try">Could not unlock your phrase. Please try again.</string>
<string name="country">Country</string>
<string name="create_chat">Create chat</string>
<string name="create_new_chat">Create new chat</string>
<string name="create_profile">Create profile</string>
<string name="create_project">Create project</string>
<string name="create_the_admin_room">Create the admin room</string>
<string name="agree_the_groups_signing_key">Agree the group's signing key</string>
<string name="the_group_is_agreeing_what_the_admin_room">The group is agreeing what the admin room will sign with. It takes %1$s of %2$s members, and the request is in this chat.</string>
<string name="the_group_has_agreed_what_the_admin_room">The group has agreed what the admin room will sign with.</string>
<string name="the_group_could_not_agree_what_the_admin">The group could not agree what the admin room will sign with. Ask again — a fresh request is the only safe way to retry.</string>
<string name="before_the_room_exists_the_group_signs">Before the room exists, the group signs a statement of which key it will sign with. The room is then created already knowing it.</string>
<string name="creating_new_chat">Creating new chat.</string>
<string name="currently_no_contacts_please_search_and_chat">Currently no contacts. Please search and chat with a few people.</string>
<string name="currently_no_messages_have_been_shared">Currently no messages have been shared.\nBreak the ice.</string>
<string name="delete_group">Delete group</string>
<string name="details">Details</string>
<string name="dialect_name">Dialect name</string>
<string name="dialects">Dialects</string>
<string name="direct_message_detail">Direct message detail</string>
<string name="direct_message_functionality_will_be_here">Direct message functionality will be here.</string>
<string name="direct_message_via_npub">Direct message via npub</string>
<string name="display_recovery_phrase">Display recovery phrase</string>
<string name="don_t_sign">Don't sign</string>
<string name="download">Download</string>
<string name="download_and_securely_store_everything">Download and securely store everything needed to recover this profile and the coins it holds.</string>
<string name="edit_profile">Edit profile</string>
<string name="eg_chapter_1_the_beginning">eg. Chapter 1 — The Beginning</string>
<string name="eg_first_edition">eg. First Edition</string>
<string name="eg_https_harper_com_2_kill_bird">eg. https://harper.com/2-kill-Bird</string>
<string name="eg_lesotho">eg. Lesotho</string>
<string name="eg_sesotho">eg. Sesotho</string>
<string name="eg_st">eg. st</string>
<string name="eg_to_kill_a_mocking_bird">eg. To Kill a Mocking Bird</string>
<string name="emergency_kit">Emergency kit</string>
<string name="end_this">end this</string>
<string name="ended">ENDED</string>
<string name="encrypt_and_back_your_recovery_information">Encrypt and back your recovery information up to your Google Drive or iCloud.</string>
<string name="enter_the_name_you_want_to_use_for_your">Enter the name you want to use for your group</string>
<string name="enter_the_name_you_want_to_use_for_your_2">Enter the name you want to use for your profile</string>
<string name="enter_the_translation_for_this_chunk">Enter the translation for this chunk</string>
<string name="events_are_indexed_so_that_we_can_deliver_a">Events are indexed so that we can deliver a premium local first experience.</string>
<string name="everything_else">Everything else</string>
<string name="everything_is_cryptographical_sound_just">Everything is cryptographical sound. Just announcing your profile to the world.</string>
<string name="everything_is_cryptographical_sound_just_2">Everything is cryptographical sound. Just indexing your profile on the device.</string>
<string name="everything_is_cryptographical_sound_just_3">Everything is cryptographical sound. Just need to queue your profile and announce it to the world.</string>
<string name="expired">Expired</string>
<string name="failed">✗ Failed</string>
<string name="follow">follow</string>
<string name="follow_back">follow back</string>
<string name="functionality_coming_soon">functionality coming soon.</string>
<string name="has_not_taken_part_yet">Has not taken part yet</string>
<string name="hide">Hide</string>
<string name="how_many_admins_have_to_approve_a_change">How many admins have to approve a change?</string>
<string name="how_many_members_will_it_take_to_sign">How many members will it take to sign?</string>
<string name="i_have_saved_my_recovery_phrase_somewhere">I have saved my recovery phrase somewhere safe.</string>
<string name="i_understand_that_if_i_lose_this_phone_and">I understand that if I lose this phone and my recovery phrase, I lose this profile and the funds in its wallet.</string>
<string name="if_you_are_new_to_torch_or_just_want_to">If you are new to Mantra or just want to create a fresh profile</string>
<string name="initial_version_label">Initial version label</string>
<string name="input_npub_or_nip05">Input npub... or nip05</string>
<string name="introduce_yourself">Introduce yourself</string>
<string name="invite">Invite</string>
<string name="invite_a_friend">Invite a friend</string>
<string name="invite_new_member">Invite new member</string>
<string name="it_is_cryptographical_secure_and">It is cryptographical secure, and decentralized, putting you in total control of your digital profile</string>
<string name="just_you_for_now">Just you for now</string>
<string name="keep_the_feed_alive">Keep the feed alive.</string>
<string name="keep_this_phrase_safe_do_not_share_it">Keep this phrase safe.\nDo not share it.</string>
<string name="key">Key</string>
<string name="key_package_management">Key package management</string>
<string name="key_recovery">Key recovery</string>
<string name="language">Language</string>
<string name="learn_more">Learn more</string>
<string name="leave_group">Leave group</string>
<string name="library">Library</string>
<string name="lightning_invoice">Lightning invoice</string>
<string name="live">LIVE</string>
<string name="live_stream">Live stream</string>
<string name="loading">Loading</string>
<string name="loading_article">Loading article...</string>
<string name="loading_author_information">Loading author information</string>
<string name="loading_author_information_2">Loading author information...</string>
<string name="loading_information">loading information...</string>
<string name="loading_note">Loading note...</string>
<string name="loading_stream">Loading stream...</string>
<string name="loading_preferences">Loading preferences…</string>
<string name="lose_this_phone_before_you_do_and_the">Lose this phone before you do, and the profile goes with it.</string>
<string name="lock_prompt_coming_soon">Lock prompt coming soon.</string>
<string name="malformed_note">Malformed note</string>
<string name="mantra">Mantra</string>
<string name="members">Members</string>
<string name="members_2">members</string>
<string name="name">Name</string>
<string name="name_eg_alan_turing">Name (eg. Alan Turing)</string>
<string name="name_eg_group_discussions">Name (eg. Group Discussions)</string>
<string name="name_of_artifact">Name of artifact</string>
<string name="network_relays">Network relays</string>
<string name="no_wallet_is_open_on_this_device_so_there">No wallet is open on this device, so there is no phrase to show.</string>
<string name="not_backed_up_yet">Not backed up yet</string>
<string name="new_chat">New chat</string>
<string name="next">Next</string>
<string name="no_artifacts_exists_in_this_groups_library">No artifacts exists in this groups library.</string>
<string name="no_chapters">No chapters.</string>
<string name="no_chapters_yet">No chapters yet.</string>
<string name="no_chat_message_relays_were_found_for_this">No chat message relays were found for this user.</string>
<string name="no_chunks">No chunks.</string>
<string name="no_dialects_have_been_defined_in_this_group">No dialects have been defined in this group yet. Add one from the group's detail screen first.</string>
<string name="no_dialects_have_been_defined_in_this_group_2">No dialects have been defined in this group.</string>
<string name="no_messages_go_to_a_profile_and_send_them_a">No messages. Go to a profile and send them a message.</string>
<string name="no_one_selected_yet">No one selected yet</string>
<string name="no_one_to_add_yet">No one to add yet.</string>
<string name="no_projects_exists_in_this_group">No projects exists in this group.</string>
<string name="no_translations_yet">No translations yet.</string>
<string name="no_versions">No versions.</string>
<string name="not_now">Not now</string>
<string name="nothing_was_created_and_no_key_exists_it_is">Nothing was created and no key exists. It is safe to run it again.</string>
<string name="open_chat">Open chat</string>
<string name="original">Original</string>
<string name="original_text">Original text</string>
<string name="original_text_markdown">Original text (markdown)</string>
<string name="paid">✓ Paid</string>
<string name="paste_the_chapter_s_markdown_blank_lines">Paste the chapter's markdown. Blank lines separate paragraphs into chunks.</string>
<string name="pay">Pay</string>
<string name="pay_now">Pay now</string>
<string name="post">Post</string>
<string name="post_functionality_coming_soon">post functionality coming soon.</string>
<string name="private_to_you">Private to you</string>
<string name="messages">Messages</string>
<string name="profile">Profile</string>
<string name="pick_a_conversation_to_read_it_here">Pick a conversation to read it here.</string>
<string name="profile_is_ready">Profile is ready</string>
<string name="profiles">Profiles</string>
<string name="projects">Projects</string>
<string name="proposals">Proposals</string>
<string name="propose">Propose</string>
<string name="propose_artifact">Propose artifact</string>
<string name="propose_chapter">Propose chapter</string>
<string name="propose_dialect">Propose dialect</string>
<string name="propose_translation">Propose translation</string>
<string name="publish_new_key_package">Publish new key package</string>
<string name="re_broadcast">Re-broadcast</string>
<string name="read_to_the_end_of_the_list_to_sign">Read to the end of the list to sign.</string>
<string name="recovery_phrase">Recovery phrase</string>
<string name="ready_to_sign">Ready to sign</string>
<string name="recents">Recents</string>
<string name="reindex_events">Reindex events</string>
<string name="reposted">reposted</string>
<string name="review">Review</string>
<string name="review_and_confirm">Review and confirm</string>
<string name="review_and_contribute">Review and contribute</string>
<string name="review_and_join">Review and join</string>
<string name="say_what_now">Say what now?</string>
<string name="search">Search</string>
<string name="search_for_people_and_chat_with_them_first">Search for people and chat with them first — everyone you know locally shows up here.</string>
<string name="search_hashtags">Search hashtags</string>
<string name="search_member_functionality">Search member functionality</string>
<string name="search_message_functionality_will_be_here">Search message functionality will be here.</string>
<string name="see_how_deep_the_rabbit_hole_goes">See how deep the rabbit hole goes</string>
<string name="select_a_wallet">Select a wallet</string>
<string name="send_message">Send message</string>
<string name="share_profile">Share profile</string>
<string name="shared_key">Shared key</string>
<string name="signing_key">Signing key</string>
<string name="the_key_this_room_signs_as">The key this room signs as, and the ceremony it came from.</string>
<string name="what_the_group_signed">What the group signed</string>
<string name="this_room_signs_as">This room signs as</string>
<string name="derivation_path">Derivation path</string>
<string name="key_ceremony">Key ceremony</string>
<string name="agreed_on">Agreed on</string>
<string name="the_signed_event">The signed event</string>
<string name="copy_the_signed_event">Copy the signed event</string>
<string name="copied_the_signed_event">Copied the signed event</string>
<string name="this_device_does_not_hold_the_event">This device holds the group's reading of this, but not the signed event itself. Nothing here can be checked against a signature.</string>
<string name="sign">Sign</string>
<string name="sign_in">Sign in</string>
<string name="sign_out">Sign out</string>
<string name="sign_with_the_group_s_key">Sign with the group's key</string>
<string name="signed_their_part">Signed their part</string>
<string name="skip_for_now">Skip for now</string>
<string name="something_went_wrong">Something went wrong</string>
<string name="something_went_wrong_and_we_were_unable_to">Something went wrong and we were unable to sign in to your provided profile. Please try again later.</string>
<string name="something_went_wrong_and_we_were_unable_to_2">Something went wrong and we were unable to sign you up. Please try again later.</string>
<string name="something_went_wrong_and_we_were_unable_to_3">Something went wrong and we were unable to write a new note. Please try again later.</string>
<string name="source_dialect">Source dialect</string>
<string name="start">Start</string>
<string name="start_a_group_chat">Start a group chat</string>
<string name="start_chat">Start chat</string>
<string name="start_chat_via_npub_or_nip05">Start chat via npub or nip05</string>
<string name="start_key_ceremony">Start key ceremony</string>
<string name="startup_error">Startup error</string>
<string name="taking_part_with_these_members">Taking part with these members</string>
<string name="tap_to_load">Tap to load</string>
<string name="tell_friends_to_join_you_so_your_feed_stays">Tell friends to join you so your feed stays lively and fresh.</string>
<string name="the_above_will_be_your_new_note">The above will be your new note.</string>
<string name="the_above_will_be_your_profile">The above will be your profile.</string>
<string name="the_ceremony_was_abandoned">The ceremony was abandoned.</string>
<string name="the_group_can_hold_one_key_together_split_so">The group can hold one key together, split so that no single member holds it. Signing with it takes a quorum.</string>
<string name="the_group_has_a_shared_key">The group has a shared key.</string>
<string name="the_recovery_phrase_sometimes_called_a_seed">The recovery phrase (sometimes called a seed) is a list of 12 English words. It is the only way back to this profile: the key that signs as you, and the wallet that holds your coins, are both derived from it.\n\nOnly you have this phrase. Keep it private — nobody from mantra will ever ask you for it.\n\nDo not lose it. Write it down and keep it somewhere safe that is not this phone. If you lose both the phone and the phrase, this profile and its funds are gone for good.</string>
<string name="these_are_your_keys_keep_them_safe_so_they">These are your keys. Keep them safe so they can keep unlocking this profile and its coins, even when you lose or change your phone.</string>
<string name="this_artifact_has_no_version_for_a">This artifact has no version for a translation to be of.</string>
<string name="this_artifact_has_no_version_for_a_chapter">This artifact has no version for a chapter to attach to.</string>
<string name="this_chapter_has_no_chunks">This chapter has no chunks.</string>
<string name="this_device_holds_no_phrase_for_the_profile">This device holds no phrase for the profile that is signed in.</string>
<string name="this_decides_who_can_change_the_group_later">This decides who can change the group later. You can't switch afterwards.</string>
<string name="this_group_has_no_shared_key_so_it_cannot">This group has no shared key, so it cannot sign them in.</string>
<string name="this_group_has_not_been_asked_to_sign">This group has not been asked to sign anything yet.</string>
<string name="this_is_fixed_once_the_ceremony_runs">This is fixed once the ceremony runs. Changing it later means generating a new key.</string>
<string name="this_is_the_last_thing_the_ceremony_needs">This is the last thing the ceremony needs from you.</string>
<string name="this_will_be_shown_when_people_open_the_chat">This will be shown when people open the chat for more details.</string>
<string name="this_will_be_shown_when_people_open_your">This will be shown when people open your profile.</string>
<string name="this_will_be_the_display_name_for_this_chat">This will be the display name for this chat room.</string>
<string name="this_will_be_the_display_name_for_your">This will be the display name for your profile and also important for search.</string>
<string name="this_will_give_you_read_only_access_to_the">This will give you read only access to the profile.</string>
<string name="this_will_give_you_write_access_to_the">This will give you write access to the profile.</string>
<string name="torch_will_be_broadcast_what_you_publish_to">Mantra broadcasts what you publish to a distributed set of relays, so it stays decentralised.</string>
<string name="translate_chunk">Translate chunk</string>
<string name="translate_into_which_dialect">Translate into which dialect?</string>
<string name="translated_text">Translated text</string>
<string name="translation">Translation</string>
<string name="translation_detail">Translation detail</string>
<string name="translations">Translations</string>
<string name="transmit_note">Transmit note</string>
<string name="trending_notes_functionality_coming_soon_in">Trending notes functionality coming soon. In the meantime search for what you are looking for.</string>
<string name="try_again">Try again</string>
<string name="type_out_what_you_would_like_to_publish">Type out what you would like to publish</string>
<string name="unfollow">Unfollow</string>
<string name="unlocking_your_phrase">Unlocking your phrase…</string>
<string name="unsupported_event_kind">Unsupported event kind</string>
<string name="untitled_article">Untitled article</string>
<string name="url">Url</string>
<string name="version">Version</string>
<string name="versions">Versions</string>
<string name="view_and_accept_invites_you_may_have">View and accept invites you may have received to stay connected with others.</string>
<string name="view_invites">View invites</string>
<string name="waiting_for_you">Waiting for you</string>
<string name="waiting_for_your_signature">Waiting for your signature</string>
<string name="we_are_looking_for_your_profile_on_as_many">We are looking for your profile on as many relays as possible. Nostr aims to be decentralized by distributing data to multiple nodse.</string>
<string name="we_are_searching_the_internet_to_find_your">We are searching the internet to find your profile and complete sign in.</string>
<string name="we_couldn_t_find_the_local_profile_please">We couldn't find the local profile. Please try again later.</string>
<string name="we_couldn_t_find_your_nostr_event_please_try">We couldn't find your nostr event. Please try again later.</string>
<string name="what_s_your_comment_on_the_below">What's your comment on the below</string>
<string name="what_s_your_reply_to_the_above">What's your reply to the above</string>
<string name="what_should_people_know_about_you">What should people know about you?</string>
<string name="what_vibrations_do_you_want_to_send_out">What vibrations do you want to send out?</string>
<string name="what_will_be_discussed_in_this_chat_room">What will be discussed in this chat room.</string>
<string name="write_down_and_secure_the_12_word_phrase">Write down and secure the 12 word phrase that this profile and its wallet are derived from.</string>
<string name="who_will_you_be_passing_the_aux_to">Who will you be passing the aux to?</string>
<string name="you">You</string>
<string name="you_and_1_other">You and 1 other</string>
<string name="you_are_about_to_create_a_nostr_profile">You are about to create a NOSTR profile.</string>
<string name="you_can_still_carry_on_and_invite_people">You can still carry on and invite people later.</string>
<string name="you_have_not_backed_up_your_recovery_phrase">You have not backed up your recovery phrase</string>
<string name="you_only_live_once_lose_this_phone_and_the">You only live once. Lose this phone and the profile goes with it, along with anything it holds.</string>
<string name="you_said_you_wrote_it_down">You said you wrote it down</string>
<string name="yolo">YOLO</string>
<string name="you_will_be_in_full_control_of_this_profile">You will be in full control of this profile. If you would like to use it for the long term please remember to backup the profile/keys.</string>
<string name="your_profile_is_almost_ready_just_getting_it">Your profile is almost ready... just getting it's first cryptographic signature together.</string>
<string name="your_share_of_it_is_on_this_device_only_your">Your share of it is on this device only. Your wallet backup restores it — nobody else's share can.</string>
<string name="add_chapter_to">Add chapter to %1$s</string>
<string name="add_people_to">Add people to %1$s</string>
<string name="chapter">Chapter %1$s</string>
<string name="chapter_words_characters">Chapter %1$s · %2$s words · %3$s characters</string>
<string name="chunk">Chunk %1$s</string>
<string name="chunks">Chunks (%1$s)</string>
<string name="chunks_translated">%1$s/%2$s chunks translated</string>
<string name="event_s_still_unreadable">%1$s event(s) still unreadable%2$s</string>
<string name="events_signed_together">%1$s events, signed together</string>
<string name="everyone_has_to_be_online_at_the_same_time">Everyone has to be online at the same time — the ceremony can only finish once all %1$s of you have taken part.</string>
<string name="functionality_coming_soon_2">"%1$s" functionality coming soon</string>
<string name="how_should_be_run">How should %1$s be run?</string>
<string name="invite_2">Invite %1$s</string>
<string name="key_packages">%1$s key packages</string>
<string name="next_with">Next with %1$s</string>
<string name="nostr">nostr:%1$s..</string>
<string name="nostr_2">nostr:%1$s...</string>
<string name="of">%1$s of %2$s</string>
<string name="of_members_will_be_needed_to_sign_with_this">%1$s of %2$s members will be needed to sign with this key.</string>
<string name="of_them_could_not_be_read">%1$s of them could not be read</string>
<string name="once_invited_will_be_able_to_receive_and">Once invited will be able to receive and send private message sent to all the %1$s members in the chat room.</string>
<string name="private_message_to">Private message to %1$s</string>
<string name="private_to">Private to %1$s</string>
<string name="proposals_are_waiting_for_your_signature">%1$s proposals are waiting for your signature</string>
<string name="recovered_of_event_s">Recovered %1$s of %2$s event(s)%3$s</string>
<string name="recovered_of_still_unreadable">Recovered %1$s of %2$s · %3$s still unreadable%4$s</string>
<string name="reply_privately_to">Reply privately to %1$s</string>
<string name="reply_to">Reply to %1$s</string>
<string name="replying_to">Replying to %1$s</string>
<string name="searching_for_on">Searching for %1$s on "%2$s"</string>
<string name="selected">%1$s selected</string>
<string name="sent_a_private_message_to">%1$s sent a private message to %2$s</string>
<string name="shared_key_for">Shared key for %1$s</string>
<string name="to_join_the_chat_room">to join the %1$s chat room.</string>
<string name="translate">Translate %1$s</string>
<string name="unsupported_event_kind_2">Unsupported event kind: %1$s</string>
<string name="was_created_but_couldn_t_be_added_yet_invite">%1$s was created, but %2$s couldn't be added yet. Invite them again from the chat once they're on Mantra.</string>
<string name="was_created_but_its_shared_key_ceremony">%1$s was created, but its shared key ceremony couldn't be started. Open the chat and start it from the group's details — until then the group has no key of its own.</string>
<string name="words_characters">%1$s words · %2$s characters</string>
<string name="word_position">#%1$s</string>
<string name="you_and_others">You and %1$s others</string>
<string name="not_following_anyone_yet">You aren't following anyone yet.</string>
<string name="nobody_following_you_yet">Nobody is following you yet.</string>
<string name="nothing_in_this_feed_yet">Nothing in this feed yet.</string>
<string name="no_replies_to_this_yet">No replies to this yet.</string>
<string name="nothing_matched_that_search">Nothing matched that search.</string>
<string name="key_package_published">Key package published</string>
<string name="key_package_rotated">Key package rotated</string>
<string name="subgroups">Subgroups</string>
<string name="add_subgroup">Add subgroup</string>
<string name="no_subgroups_have_been_made_by_this_group">No subgroups have been made by this group.</string>
<string name="certified_not_yet_created">Certified, not created yet</string>
<string name="created_you_are_not_a_member">Created, you aren't a member</string>
<string name="a_subgroup">A subgroup</string>
<string name="parent_group">Parent group</string>
<string name="the_group_this_one_is_a_subgroup_of">The group this one is a subgroup of</string>
<string name="run_by_members">Run by %1$s members</string>
<string name="new_subgroup">New subgroup</string>
<string name="what_is_the_subgroup_called">What is the subgroup called?</string>
<string name="who_runs_the_subgroup">Who runs the subgroup?</string>
<string name="a_subgroup_needs_at_least_three_admins">A subgroup needs at least three admins, you included, so pick at least two more people.</string>
<string name="anyone_in_this_group_can_run_a_subgroup">Anyone in this group can run a subgroup, whether or not they administer this one.</string>
<string name="has_no_key_package_yet">Has no key package yet</string>
<string name="admin_of_this_group">Admin of this group</string>
<string name="you_coordinate_this_subgroup">You coordinate this subgroup</string>
<string name="start_the_key_ceremony">Start the key ceremony</string>
<string name="checking_who_can_be_added">Checking who can be added…</string>
<string name="the_parent_group_has_certified_this_subgroup">The parent group has certified this subgroup</string>
<string name="the_parent_group_could_not_certify_this_subgroup">The parent group could not certify this subgroup</string>
<string name="the_parent_group_is_certifying_this_subgroup">The parent group is certifying this subgroup — %1$s of %2$s admins have to sign</string>
<string name="before_the_subgroup_exists_its_parent_signs">Before the subgroup exists, its parent signs for it. That signature is what lets anyone check where this group came from.</string>
<string name="ask_the_parent_group_to_certify">Ask the parent group to certify this subgroup</string>
<string name="create_the_subgroup">Create the subgroup</string>
<string name="the_key_ceremony_needs_you">The key ceremony needs you</string>
<string name="the_subgroups_key_ceremony_needs_you">The subgroup's key ceremony needs you</string>
<string name="ceremonies_need_you">%1$s key ceremonies need you</string>
<string name="join_the_ceremony_by_publishing_your_key">Join it by publishing your device's key</string>
<string name="send_your_contribution_to_the_key">Send your contribution to the key</string>
<string name="check_the_combined_result">Check the combined result and confirm it</string>
<string name="the_group_has_its_key_finish_setting_it_up">The group has its key — finish setting it up</string>
<string name="open">Open</string>
<string name="nostr_profile">Nostr profile</string>
<string name="this_group_has_not_said_anything_about_itself">This group hasn't said anything about itself on Nostr yet.</string>
<string name="edit_nostr_profile">Edit Nostr profile</string>
<string name="propose_nostr_profile">Propose Nostr profile</string>
<string name="what_the_group_says_about_itself_on_nostr">What the group says about itself on Nostr</string>
<string name="the_group_signs_its_profile_so_it_takes_a_quorum">The group signs this, so it takes a quorum. An empty field unsays what the group had said.</string>
<string name="this_group_has_no_shared_key_to_sign_a_profile">This group has no shared key, so it cannot sign a profile. Run a shared key ceremony first.</string>
<string name="signed_by_the_group_on">Signed by the group on %1$s</string>
<string name="no_name_on_this_profile">No name on this profile</string>
<string name="about">About</string>
<string name="picture_url">Picture url</string>
<string name="website">Website</string>
<string name="nostr_address">Nostr address</string>
<string name="lightning_address">Lightning address</string>
<string name="eg_translation_collective">eg. Translation collective</string>
<string name="eg_a_group_translating_hard_books">eg. A group translating hard books into Sesotho</string>
<string name="eg_https_example_com_group_png">eg. https://example.com/group.png</string>
<string name="eg_https_example_com">eg. https://example.com</string>
<string name="eg_group_example_com">eg. group@example.com</string>
<string name="eg_group_getalby_com">eg. group@getalby.com</string>
<string name="could_not_ask_the_group_to_sign_this_profile">Couldn't ask the group to sign this profile.</string>
<string name="relays">Relays</string>
<string name="edit_relays">Edit relays</string>
<string name="not_set_yet">Not set yet</string>
<string name="no_relays_in_this_list">No relays in this list</string>
<string name="where_the_group_lives_on_nostr">Where the group lives on Nostr</string>
<string name="the_group_signs_each_list_so_it_takes_a_quorum">The group signs each list, so it takes a quorum. Only the lists you change are proposed.</string>
<string name="this_group_has_no_shared_key_to_sign_relays">This group has no shared key, so it cannot sign a relay list. Run a shared key ceremony first.</string>
<string name="relay_url">Relay url</string>
<string name="eg_wss_relay_example_com">eg. wss://relay.example.com</string>
<string name="add_relay">Add relay</string>
<string name="that_is_not_a_relay_address">That isn't a relay address. Relays start with wss:// and cannot be on this device.</string>
<string name="that_relay_is_already_in_this_list">That relay is already in this list.</string>
<string name="propose_relays">Propose relays</string>
<string name="nothing_has_changed_to_propose">Nothing has changed, so there is nothing to propose.</string>
<string name="could_not_ask_the_group_to_sign_these_relays">Couldn't ask the group to sign these relays.</string>
<string name="relay_read">Read</string>
<string name="relay_write">Write</string>
<string name="relay_set_general">General</string>
<string name="relay_set_messages">Messages</string>
<string name="relay_set_search">Search</string>
<string name="relay_set_blocked">Blocked</string>
<string name="relay_set_general_purpose">Where the group publishes, and where a reader should look for it.</string>
<string name="relay_set_messages_purpose">Where a message addressed to the group should be sent.</string>
<string name="relay_set_search_purpose">The relays a search of the group's work runs against.</string>
<string name="relay_set_blocked_purpose">Relays the group will not talk to.</string>
<string name="relays_are_public_a_group_cannot_encrypt">A group signs and cannot decrypt, so every list here is public — including the blocked one, which most clients keep private.</string>
<string name="signed_by_the_group_on_short">Signed %1$s</string>
<string name="posts">Posts</string>
<string name="add_post">Add post</string>
<string name="propose_post">Propose post</string>
<string name="this_group_has_not_posted_anything_yet">This group hasn't posted anything yet.</string>
<string name="what_should_the_group_say">What should the group say?</string>
<string name="the_group_signs_a_post_so_it_takes_a_quorum">The group signs a post, so it takes a quorum. It goes out in the group's name, not yours.</string>
<string name="this_group_has_no_shared_key_to_sign_a_post">This group has no shared key, so it cannot sign a post. Run a shared key ceremony first.</string>
<string name="a_post_needs_something_to_say">A post needs something to say.</string>
<string name="could_not_ask_the_group_to_sign_this_post">Couldn't ask the group to sign this post.</string>
<string name="posted_on">Posted %1$s</string>
<string name="a_reply">A reply</string>
<string name="curated_schemas">Curated schemas</string>
<string name="this_group_has_not_published_a_curated_schema_yet">This group hasn't published a curated schema yet. A schema defines a list anyone can suggest entries to and only the group can curate.</string>
<string name="add_schema">Add schema</string>
<string name="edit_schema">Edit schema</string>
<string name="propose_schema">Propose schema</string>
<string name="fields_colon">Fields: %1$s</string>
<string name="visibility_public">Public</string>
<string name="visibility_closed">Closed</string>
<string name="visibility_private">Private</string>
<string name="visibility_public_purpose">Anyone may suggest an entry, and anyone may read the list.</string>
<string name="visibility_closed_purpose">Only the group and the suggesters below may suggest. Anyone may read the list.</string>
<string name="visibility_private_purpose">Only the group and the suggesters below may suggest, and clients show the list to them alone. Relays are open, so this is a convention rather than a secret.</string>
<string name="what_an_entry_in_this_list_may_contain">What an entry in this list may contain, and who may suggest one</string>
<string name="the_group_signs_a_schema_so_it_takes_a_quorum">The group signs a curated schema, so it takes a quorum. Suggestions reply to it, and only the group can accept them into the list.</string>
<string name="this_group_has_no_shared_key_to_sign_a_schema">This group has no shared key, so it cannot sign a curated schema. Run a shared key ceremony first.</string>
<string name="could_not_ask_the_group_to_sign_this_schema">Couldn't ask the group to sign this schema.</string>
<string name="identifier">Identifier</string>
<string name="eg_bitcoin_mov">eg. bitcoin.mov</string>
<string name="the_identifier_names_this_list_in_every_reply">The identifier names this list in every reply to it, so it can't change. Add a schema to start another list.</string>
<string name="title">Title</string>
<string name="eg_bitcoin_mov_suggestion">eg. bitcoin.mov suggestion</string>
<string name="description">Description</string>
<string name="eg_fields_for_a_bitcoin_mov_entry">eg. Fields for a bitcoin.mov entry: a film, with at least one link to watch it</string>
<string name="visibility">Visibility</string>
<string name="domain">Domain</string>
<string name="eg_example_com">eg. example.com</string>
<string name="a_domain_replaces_the_name_wherever_the_list_is_shown">A domain replaces the name wherever the list is shown. It's a claim rather than proof, so only set one the group controls.</string>
<string name="fields">Fields</string>
<string name="add_field">Add field</string>
<string name="required">Required</string>
<string name="optional">Optional</string>
<string name="derived">Derived</string>
<string name="at_least_one_of">At least one of</string>
<string name="add_rule">Add rule</string>
<string name="pick_two_or_more_fields_at_least_one_of_which_an_entry_must_have">Pick two or more fields, at least one of which an entry must have. A rule with fewer than two is dropped.</string>
<string name="suggesters">Suggesters</string>
<string name="pubkeys_besides_the_group_that_may_suggest_to_this_list">Pubkeys besides the group that may suggest to this list.</string>
<string name="npub_or_hex_pubkey">npub or hex pubkey</string>
<string name="add_suggester">Add suggester</string>
<string name="that_is_not_a_pubkey">That isn't a pubkey. Paste an npub or 64 hex characters.</string>
<string name="that_pubkey_is_already_a_suggester">That pubkey is already a suggester.</string>
<string name="where_suggestions_to_this_list_are_published">Where suggestions and entries are published to and read from. Signed into the schema, so a reply can't be sent anywhere else.</string>
<string name="no_relays_named_so_a_client_will_pick_its_own">No relays named, so a client will pick its own.</string>
<string name="new_field">New field</string>
<string name="edit_field">Edit field</string>
<string name="field_name">Field name</string>
<string name="eg_watchurl">eg. watchUrl</string>
<string name="label">Label</string>
<string name="eg_watch_reference_url">eg. Watch / reference url</string>
<string name="placeholder">Placeholder</string>
<string name="eg_https_youtube_com_watch">eg. https://youtube.com/watch?v=…</string>
<string name="type">Type</string>
<string name="an_entry_must_have_this_field">An entry must have this field</string>
<string name="writes_to_tag">Writes to tag</string>
<string name="defaults_to_the_field_name_content_means_the_body">Defaults to the field name. "content" means the event's body.</string>
<string name="marker">Marker</string>
<string name="eg_watch">eg. watch</string>
<string name="the_tag_s_third_element_which_tells_fields_sharing_a_tag_apart">The tag's third element, which tells fields sharing a tag apart.</string>
<string name="maximum_characters">Maximum characters</string>
<string name="maximum_value">Maximum value</string>
<string name="minimum_value">Minimum value</string>
<string name="options">Options</string>
<string name="one_per_line_or_separated_by_commas">One per line, or separated by commas.</string>
<string name="https_only">https only</string>
<string name="may_appear_more_than_once">May appear more than once</string>
<string name="pattern">Pattern</string>
<string name="a_regular_expression_the_whole_value_must_match">A regular expression the whole value must match.</string>
<string name="filled_in_by_the_app_never_asked_for">Filled in by the app, never asked for</string>
<string name="hint">Hint</string>
<string name="helper_text_under_the_input">Helper text under the input.</string>
<string name="done">Done</string>
<string name="remove_field">Remove field</string>
<string name="a_field_needs_a_name">A field needs a name.</string>
<string name="a_field_name_is_one_word">A field name is one word, with no spaces.</string>
<string name="a_field_named_that_already_exists">A field named that already exists.</string>
<string name="an_identifier_is_required">An identifier is required.</string>
<string name="the_identifier_must_be_at_most_n_characters">The identifier must be at most %1$s characters.</string>
<string name="a_title_is_required">A title is required.</string>
<string name="the_title_must_be_at_most_n_characters">The title must be at most %1$s characters.</string>
<string name="a_name_is_required">A name is required.</string>
<string name="the_name_must_be_at_most_n_characters">The name must be at most %1$s characters.</string>
<string name="a_description_is_required">A description is required.</string>
<string name="the_description_must_be_at_most_n_characters">The description must be at most %1$s characters.</string>
<string name="say_who_may_suggest_to_this_list">Say who may suggest to this list.</string>
<string name="the_picture_must_be_an_https_url">The picture must be an https url.</string>
<string name="that_is_not_a_domain_name">That isn't a domain name.</string>
<string name="a_schema_needs_at_least_one_field">A schema needs at least one field.</string>
<string name="one_of_the_relays_is_not_a_relay_address">One of the relays isn't a relay address.</string>
<string name="eg_2100">eg. 2100</string>
<string name="eg_200">eg. 200</string>
<string name="eg_1900">eg. 1900</string>
<string name="eg_movie_documentary_short">eg. movie, documentary, short</string>
<string name="eg_a_za_z_2_8">eg. [A-Za-z]{2,8}</string>
<string name="field_type_text">Text</string>
<string name="field_type_longtext">Long text</string>
<string name="field_type_token">Token</string>
<string name="field_type_url">Url</string>
<string name="field_type_image">Image</string>
<string name="field_type_enum">One of a list</string>
<string name="field_type_year">Year</string>
<string name="field_type_duration">Duration in seconds</string>
<string name="field_type_number">Number</string>
<string name="propose_event">Propose event</string>
<string name="paste_an_unsigned_event_for_the_group_to_sign">Paste an unsigned Nostr event for the group to sign. It is filed by kind: a profile (kind 0), a post (kind 1), a relay list, or a curated schema (kind 31889).</string>
<string name="the_group_signs_an_event_so_it_takes_a_quorum">The group signs it, so it takes a quorum. The author is the group and the time is now, whatever the paste says about either.</string>
<string name="this_group_has_no_shared_key_to_sign_an_event">This group has no shared key, so it cannot sign an event. Run a shared key ceremony first.</string>
<string name="could_not_ask_the_group_to_sign_this_event">Couldn't ask the group to sign this event.</string>
<string name="unsigned_event">Unsigned event</string>
<string name="eg_kind_1_tags_content">{"kind": 1, "tags": [], "content": "…"}</string>
<string name="what_the_group_would_sign">What the group would sign</string>
<string name="kind_n">Kind %1$s</string>
<string name="that_is_not_json">That isn't JSON.</string>
<string name="an_event_is_a_json_object">An event is a JSON object with a kind, tags and content.</string>
<string name="an_event_needs_a_kind">An event needs a kind.</string>
<string name="kind_n_has_nowhere_to_go_on_this_screen">Kind %1$s has nowhere to go on the group's screen. It can file kinds %2$s.</string>
<string name="tags_must_be_a_list_of_lists_of_strings">Tags must be a list of lists of strings.</string>
<string name="content_must_be_text">Content must be text.</string>
<string name="the_content_is_not_a_profile">The content isn't a profile. A kind 0 carries a JSON object of profile fields.</string>
<string name="this_schema_cannot_be_signed_as_it_is">This schema can't be signed as it is:</string>
<!-- Sign in: docs/nsec-sign-in.md, phase 4. -->
<string name="a_password_protected_key_ncryptsec_is_not">A password-protected key (ncryptsec) is not supported yet. Decrypt it in the app it came from and paste the nsec.</string>
<string name="an_npub_is_a_public_key_mantra_needs_the">An npub is a public key. Mantra needs the secret key, the nsec, to sign as you.</string>
<string name="enter_a_recovery_phrase_or_an_nsec_to_sign_in">Enter a recovery phrase or an nsec to sign in.</string>
<string name="paste">Paste</string>
<string name="recognised_as_a_nostr_secret_key_no_wallet">Recognised as a nostr secret key. No wallet comes with it.</string>
<string name="recognised_as_a_recovery_phrase_it_also">Recognised as a recovery phrase. It also restores the wallet.</string>
<string name="recovery_phrase_or_nsec">Recovery phrase or nsec</string>
<string name="sign_in_with_a_recovery_phrase_or_an_nsec">Sign in with a recovery phrase or an nsec</string>
<string name="signed_in">Signed in</string>
<string name="signing_you_in">Signing you in…</string>
<string name="that_is_not_a_recovery_phrase_or_a_nostr_key">That is not a recovery phrase or a nostr key.</string>
<string name="that_nostr_secret_key_is_not_valid">That nostr secret key is not valid.</string>
<string name="that_recovery_phrase_is_not_valid_check">That recovery phrase is not valid. Check each word and the order.</string>
<string name="the_key_could_not_be_saved_on_this_device">The key could not be saved on this device.</string>
<string name="the_words_or_the_key_never_leave_this_device">Whatever you paste stays on this device. Mantra checks it, shows you the profile it opens, and writes nothing until you confirm.</string>
<string name="this_key_is_already_on_this_device">This key is already on this device.</string>
<string name="twelve_words_or_nsec1">Twelve words, or nsec1…</string>
<string name="use_a_different_key">Use a different key</string>
<string name="you_are_signing_in_as">You are signing in as</string>
<!-- Sign in: the search that found nothing, docs/nsec-sign-in.md, phase 5. -->
<string name="enter_a_name_for_the_profile">Enter a name for the profile.</string>
<string name="it_may_be_new_or_it_may_live_on_relays_we">It may be new, or it may live on relays we do not know about. Ask again, or set one up now and publish it from here.</string>
<string name="set_up_a_profile">Set up a profile</string>
<string name="we_could_not_find_a_profile_for_this_key">We could not find a profile for this key on the relays we asked.</string>
</resources>