docs: add license, third-party notices, AI declaration, and a download section
This commit is contained in:
parent
433573693c
commit
6172df3e00
6 changed files with 1485 additions and 42 deletions
|
|
@ -42,6 +42,11 @@ fetch-result-note-rejected = { $total } fetched, { $stored } stored, { $rejected
|
|||
fetch-result-note-cancelled = { $total } fetched, { $stored } stored (cancelled)
|
||||
fetch-result-note-rejected-cancelled = { $total } fetched, { $stored } stored, { $rejected } rejected (cancelled)
|
||||
fetch-result-note-plain = { $total } fetched, { $stored } stored
|
||||
mail-envelope-id-mismatch-error = id does not match the envelope
|
||||
mail-fetch-summary-counts = { $stored } new, { $rejected } rejected
|
||||
mail-fetch-summary-verified-one = { $verified } sender verified from a signed Reply-To
|
||||
mail-fetch-summary-verified-other = { $verified } senders verified from a signed Reply-To
|
||||
mail-fetch-summary-left-on-server = left on the server
|
||||
|
||||
## Send — the status note after a send completes
|
||||
##
|
||||
|
|
@ -59,6 +64,8 @@ send-result-note-tofu-token = Sent to { $address } ({ $bytes } bytes), accept to
|
|||
send-result-note-rotated = Sent to { $address } ({ $bytes } bytes); contact rotated to a new key (chain verified)
|
||||
send-result-note-rotated-token = Sent to { $address } ({ $bytes } bytes), accept token attached; contact rotated to a new key (chain verified)
|
||||
send-result-note-plain = Sent to { $address } ({ $bytes } bytes)
|
||||
mail-sent-note = sent to { $address }
|
||||
mail-sent-note-accepted = sent to { $address } (accepted)
|
||||
|
||||
## Background-operation status notes
|
||||
##
|
||||
|
|
@ -71,6 +78,13 @@ status-deleted-note = Deleted
|
|||
status-accepted-note = Accepted { $address }
|
||||
status-blocked-note = Blocked { $address }
|
||||
status-not-blocked-note = { $address } was not blocked
|
||||
contacts-no-key-error = no key for { $address } yet
|
||||
# Split from one selector into flat siblings for the token count, matching
|
||||
# this file's existing convention (see fetch-result-note-* above).
|
||||
contacts-accepted-note-one = { $address } accepted; server now holds { $held } accept token
|
||||
contacts-accepted-note-other = { $address } accepted; server now holds { $held } accept tokens
|
||||
contacts-blocked-note-one = { $address } blocked; server now holds { $held } accept token
|
||||
contacts-blocked-note-other = { $address } blocked; server now holds { $held } accept tokens
|
||||
status-imported-note = Imported { $address } (verified)
|
||||
status-rotated-note = Rotated to index { $index }; new key { $key_prefix }…
|
||||
|
||||
|
|
@ -95,6 +109,11 @@ seed-restored-note = Seed restored. Bind a username or recall an address.
|
|||
|
||||
signup-enter-host-error = Enter the server host first.
|
||||
signup-enter-user-host-error = Enter the user and host.
|
||||
# A pin is keyed by bare host, so these two catch the mistakes that would
|
||||
# otherwise silently pin a string nothing looks up again: a whole address,
|
||||
# or a host with its port still attached.
|
||||
signup-host-looks-like-address-error = "{ $host }" looks like an address, not a server — the part after the @ goes here
|
||||
signup-host-has-port-error = "{ $host }": a pin is by host only, no port — just the part before the colon
|
||||
|
||||
## Compose
|
||||
|
||||
|
|
@ -110,6 +129,19 @@ contacts-reply-address-invalid-error = The sender's reply address isn't in the r
|
|||
contacts-sender-key-invalid-error = The sender's key isn't in the right format.
|
||||
contacts-accept-no-address-error = This sender left no address to accept.
|
||||
contacts-block-no-address-error = This sender left no address to block.
|
||||
contacts-sender-key-mismatch-error = that address carries a different key than this message's sender
|
||||
# A pinned, conflicting Reply-To claim is refused outright rather than asked
|
||||
# about — see saveContactChecked's dialog for the softer self-certifying case.
|
||||
contacts-reply-key-conflict-error = { $address } is already known with a different key — verify out of band before replying
|
||||
# Shown when a typed address or a smol:// link would overwrite an address
|
||||
# already saved under a different key, and the user declined the prompt
|
||||
# that showed both fingerprints and asked.
|
||||
contacts-key-kept-note = kept the existing key for { $address }
|
||||
contacts-sender-saved-note-verified = { $address } saved for this sender (verified key)
|
||||
contacts-sender-saved-note-unverified = { $address } saved for this sender
|
||||
# Richer than status-imported-note: this client shows the imported key and
|
||||
# its fingerprint alongside the confirmation.
|
||||
contacts-import-detail-note = imported { $address } { $key } (verified){"\u000A"}fingerprint: { $fingerprint }
|
||||
|
||||
## Common — short words reused verbatim across several buttons/dialogs
|
||||
|
||||
|
|
@ -124,6 +156,11 @@ action-delete = Delete
|
|||
# the compose's pin card, the signup server step, and the contact detail
|
||||
# body when a key was fetched for that contact.
|
||||
trust-fingerprint-hint = If the server operator published a key or fingerprint, make sure it matches before trusting it.
|
||||
# Reused wherever an action needs an identity that doesn't exist yet
|
||||
# (sending, fetching, pushing accept tokens).
|
||||
identity-missing-error = no identity yet
|
||||
account-not-registered-fetch-warning = not registered yet — claim an address in settings
|
||||
account-not-registered-tokens-note = not registered; the set will be pushed with your first fetch
|
||||
|
||||
## Sidebar
|
||||
|
||||
|
|
@ -134,10 +171,19 @@ folder-requests = Requests
|
|||
folder-sent = Sent
|
||||
folder-drafts = Drafts
|
||||
settings-nav-label = Settings
|
||||
settings-close-aria-label = close settings
|
||||
settings-close-tooltip = close
|
||||
identity-you-caption = you
|
||||
contacts-caption = contacts
|
||||
contacts-import-placeholder = Import a smol:// address
|
||||
contacts-import-button = Import
|
||||
# "Follow the system" is a real preference, not the absence of one, so it
|
||||
# gets its own label rather than defaulting silently to one of the other two.
|
||||
theme-auto-label = theme: following the system
|
||||
theme-light-label = theme: light
|
||||
theme-dark-label = theme: dark
|
||||
account-not-registered-value = not registered
|
||||
mail-search-placeholder = search { $folder }
|
||||
|
||||
## Mail — the open-message meta line
|
||||
##
|
||||
|
|
@ -151,6 +197,24 @@ mail-meta-line-yes = { $label } { $from } · { $time } UTC · id { $id }… · a
|
|||
mail-no-subject = (no subject)
|
||||
mail-no-reply-address = no reply address: can't accept or block
|
||||
contacts-empty-hint = no contacts
|
||||
# The §4/§8 trust chip on an open message: a signature always verifies, or
|
||||
# unseal() would have thrown already — what varies is the binding between
|
||||
# the key that signed it and an address.
|
||||
mail-back-to-list-button = messages
|
||||
mail-meta-sent = to: { $recipient }{"\u000A"}id: { $id }{"\u000A"}sent: { $time }
|
||||
mail-meta-received = from: { $from }{"\u000A"}id: { $id }{"\u000A"}date: { $time }
|
||||
mail-trust-own-copy = your own sealed copy
|
||||
mail-trust-verified-sender = verified sender key
|
||||
mail-trust-tofu-sender = key pinned on first use
|
||||
mail-trust-unbound-sender = key bound to no address
|
||||
mail-sender-unbound-tooltip = sender key not bound to an address
|
||||
mail-signed-reply-hint = this message carries the sender's signed address: { $address }
|
||||
mail-save-sender-reply-button = save sender & reply
|
||||
mail-name-sender-button = name sender & reply
|
||||
mail-unknown-sender-hint = The wire carries no sender name, only this signed key. To reply, give the sender's address — it is checked against this key:
|
||||
mail-delete-not-registered-error = not registered; cannot reach the server to delete this message
|
||||
mail-request-unaccepted-hint = unsolicited mail from { $address }, not yet accepted into your main tier
|
||||
mail-accept-button = accept — future mail lands in your main tier
|
||||
|
||||
## Mail list — empty-folder messages, and the own-identity detail
|
||||
|
||||
|
|
@ -172,6 +236,11 @@ mail-empty-description = Pick a message from the list above to read it.
|
|||
mail-empty-hint = Fetching removes mail from the server once it's stored here. Turn on "Leave mail on server" in Settings to keep it there instead.
|
||||
detail-qr-tooltip = Show the address as a QR code
|
||||
detail-copy-tooltip = Copy the address
|
||||
mail-row-unreadable-error = <unreadable: { $error }>
|
||||
mail-contacts-reader-hint = contacts and their keys are listed alongside
|
||||
mail-list-count-one = { $count } message
|
||||
mail-list-count-other = { $count } messages
|
||||
mail-list-shown-of-total = { $shown } of { $total }
|
||||
|
||||
## Compose
|
||||
|
||||
|
|
@ -181,6 +250,8 @@ compose-add-header-button = + header
|
|||
compose-send-button = Send
|
||||
compose-header-placeholder = Key: value
|
||||
compose-header-remove-tooltip = Remove this header
|
||||
compose-body-placeholder = message
|
||||
compose-anonymous-label = anonymous — omit my address
|
||||
|
||||
## Contacts — trust state shown in the sidebar and the detail pane
|
||||
|
||||
|
|
@ -201,8 +272,20 @@ contact-meta-line-no = { $state } · server not pinned
|
|||
|
||||
detail-key-label = key
|
||||
detail-fingerprint-label = fingerprint
|
||||
detail-address-label = address
|
||||
detail-server-label = server
|
||||
contact-server-key-offered = this server presents
|
||||
contacts-server-pinned-badge = pinned
|
||||
contacts-server-not-pinned-badge = not pinned
|
||||
contacts-history-badge = { $count } previous
|
||||
contacts-import-empty-hint = no contacts yet — import a smol:// address above, or write to someone
|
||||
contacts-refresh-button = re-resolve
|
||||
contacts-accept-token-title = accept token
|
||||
contacts-accepted-hint = This contact's mail lands in your main tier.
|
||||
contacts-unaccepted-hint = This contact's mail lands in requests until accepted.
|
||||
contacts-history-title = previous keys ({ $count })
|
||||
contacts-history-hint = Replaced by a signed rotation chain. Mail signed with these was sent before the change; rotation is not revocation, so a stolen key can still rotate onward.
|
||||
contacts-history-replaced = replaced { $time }
|
||||
|
||||
## Settings — tab switcher labels
|
||||
|
||||
|
|
@ -219,9 +302,18 @@ settings-field-fingerprint = Fingerprint
|
|||
settings-field-uri = URI
|
||||
property-row-copy-tooltip = Copy the { $field }
|
||||
settings-recovery-secret-title = Recovery secret
|
||||
settings-secret-reveal-button = reveal
|
||||
settings-secret-hide-button = hide
|
||||
settings-secret-reveal-tooltip = Reveal the recovery secret
|
||||
settings-secret-hide-tooltip = Hide the recovery secret
|
||||
settings-secret-copy-tooltip = Copy the recovery secret
|
||||
settings-secret-warning = Anyone who holds this can read your mail and write as you, and losing it loses the address with it — there is no reset. Keep it in a password manager.
|
||||
# A copy button's own label, flashed on click instead of a toast.
|
||||
copy-button-idle = copy
|
||||
copy-button-success = copied
|
||||
copy-button-failed = failed
|
||||
settings-not-registered-value = not registered yet
|
||||
settings-uri-claim-hint = claim an address to get one
|
||||
|
||||
## Settings — Server tab
|
||||
|
||||
|
|
@ -247,10 +339,12 @@ backup-import-dialog-title = Import backup
|
|||
|
||||
## Settings — Advanced tab
|
||||
|
||||
advanced-trust-section-title = trust
|
||||
advanced-rotations-title = Rotations
|
||||
advanced-rotations-description = Issues a fresh key from your secret with a signed certificate proving it replaces this one. Contacts accept the change from that chain, and the old key stays readable. Rotation is not revocation.
|
||||
advanced-rotations-completed = Completed
|
||||
advanced-rotate-button = Rotate identity
|
||||
advanced-rotate-needs-account-error = rotate needs a registered account
|
||||
advanced-first-contact-title = First contact
|
||||
advanced-first-contact-description = A recipient who isn't a contact yet, and whose address carries no key, has to be looked up on their own server. That answer is only as good as the server: one with no pinned key can return a key of its own and read what you send.
|
||||
advanced-strict-pinning-title = Require a pinned server
|
||||
|
|
@ -264,6 +358,8 @@ advanced-logout-button = Sign out and delete all data
|
|||
## The app name itself ("carrier") is a brand, not translated prose, and
|
||||
## is left as a literal in code — see the extraction report.
|
||||
|
||||
onboard-welcome-title = welcome
|
||||
onboard-welcome-description = Encrypted mail with no account and no password. Your identity is one secret, kept in this browser and nowhere else.
|
||||
onboard-tagline = smolmail: one seed, sealed mail, five operations
|
||||
onboard-create-button = Create a new identity
|
||||
onboard-restore-button = Restore an existing identity from a seed
|
||||
|
|
@ -271,12 +367,14 @@ onboard-created-title = Write this seed down
|
|||
onboard-created-description = It's the only secret, and it's shown once.
|
||||
onboard-saved-button = I saved it
|
||||
onboard-restore-title = Restore from a seed
|
||||
onboard-restore-description = Paste the secret you saved. Your keys come back from it — it is all this client needs.
|
||||
onboard-seed-entry-title = Seed: 32 bytes, base32 or hex
|
||||
onboard-restore-go-button = Restore
|
||||
|
||||
## Signup
|
||||
|
||||
signup-server-title = Set up the server
|
||||
signup-host-label = host
|
||||
signup-fetch-key-button = Fetch the server's key
|
||||
signup-continue-button = Continue
|
||||
signup-start-over-button = Start over
|
||||
|
|
@ -302,7 +400,9 @@ delete-dialog-body-kept = Deleting it here leaves the server's copy in place. De
|
|||
delete-dialog-body-gone = This removes the only copy, which is sealed and stored on this device.
|
||||
delete-dialog-everywhere-button = Delete everywhere
|
||||
rotate-dialog-title = Rotate the identity?
|
||||
rotate-dialog-confirm-button = Rotate
|
||||
reset-dialog-title = Sign out and delete all data?
|
||||
reset-dialog-confirm-button = Sign Out
|
||||
# `$list` is the sender's own frontmatter rows, already typed by a human
|
||||
# and reproduced verbatim — not translatable prose itself, just data
|
||||
# interpolated into this one sentence.
|
||||
|
|
@ -327,6 +427,7 @@ status-busy-fetching = fetching…
|
|||
status-busy-refreshing = refreshing…
|
||||
status-busy-registering = registering…
|
||||
status-busy-restoring = restoring…
|
||||
status-busy-rotating = rotating…
|
||||
status-fetching-progress = fetching… { $count } in inbox
|
||||
|
||||
## First contact / server trust
|
||||
|
|
@ -335,3 +436,14 @@ first-contact-blocked-error = { $address } isn't a contact yet, and { $host } is
|
|||
server-key-offered-note = The server presented this key. Pin it only if the fingerprint matches what the operator published.
|
||||
server-key-already-pinned-note = This server's key is already pinned.
|
||||
server-key-pinned-note = Server key pinned
|
||||
connect-unpinned-warning = { $host } is not pinned; its key is { $key }.{"\u000A"}Lookups from this session are UNVERIFIED.
|
||||
recall-rotation-not-found-error = the key bound to { $address } is not derived from this master within { $max } rotations
|
||||
contacts-refresh-embedded-key-error = that address already carries a key; use import instead
|
||||
# Shared by a first send to a never-before-seen recipient and a contact's
|
||||
# own "re-resolve" button — both land here the same way, by RESOLVE finding
|
||||
# no existing key for the address.
|
||||
contacts-resolved-note = { $address } pinned (trust on first use)
|
||||
contacts-resolved-note-unverified = { $address } pinned (trust on first use, UNVERIFIED server)
|
||||
contacts-refresh-unchanged-note = { $address }: key unchanged
|
||||
contacts-refresh-rotated-note = { $address } rotated its key; a signed chain confirms it.{"\u000A"}now { $key }
|
||||
contacts-refresh-no-chain-warning = { $address } presents a different key with no valid rotation chain.{"\u000A"}Verify out of band, then import the new smol:// address.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue