i18n: incorporate feedback from AO

This commit is contained in:
Vincent Breitmoser 2019-10-31 14:02:41 +01:00
parent ef5a664827
commit 041385ae4e
No known key found for this signature in database
GPG Key ID: 7BD18320DEADFA11
20 changed files with 169 additions and 166 deletions

View File

@ -21,7 +21,7 @@
<ul>
<li><strong>Identity information</strong> describes the parts of
a key that identify its owner, also known as "User IDs".
A User ID typically includes a name and an e-mail address.
A User ID typically includes a name and an email address.
</li>
<li><strong>Non-identity information</strong> is all the technical
information about the key itself. This includes the large numbers
@ -55,7 +55,7 @@
is only distributed with consent.
It contains personal data, and is not strictly necessary for
a key to be used for encryption or signature verification. Once the
owner gives consent by verifying their e-mail address, the key can
owner gives consent by verifying their email address, the key can
be found by everyone via search by address.
</p>
@ -66,7 +66,7 @@
You can talk to us in
#hagrid on Freenode IRC,
also reachable as #hagrid:stratum0.org on Matrix.
Of course you can also reach us via e-mail,
Of course you can also reach us via email,
at <tt>support at keys dot openpgp dot org</tt>.
The folks who are running this come
from various projects in the OpenPGP ecosystem,

View File

@ -37,9 +37,9 @@
<li>
<tt>GET /vks/v1/by-email/&lt;URI-ENCODED EMAIL-ADDRESS&gt;</tt>
<p>
Retrieves the key with the given <tt>E-Mail Address</tt>.
Retrieves the key with the given <tt>Email Address</tt>.
Only exact matches are accepted.
Lookup by e-mail address requires opt-in by the owner of the e-mail address.
Lookup by email address requires opt-in by the owner of the email address.
The returned key is ASCII Armored, and has a content-type of <code>application/pgp-keys</code>.
</p>
</li>
@ -68,7 +68,7 @@
<code>published</code>,
<code>revoked</code>, or
<code>pending</code>,
indicating the status of this e-mail address.
indicating the status of this email address.
</p>
<div class="example">
@ -99,23 +99,23 @@
<tt>POST /vks/v1/request-verify</tt>
<p>
A key that has been uploaded
can be made discoverable by one or more of its e-mail addresses
can be made discoverable by one or more of its email addresses
by proving ownership of the address
via a verification e-mail.
via a verification email.
This endpoint requests verification
for one or more e-mail addresses.
for one or more email addresses.
</p>
<p>
The body of the request must be <code>application/json</code>.
The JSON data must include the opaque <code>token</code> value
(obtained via <tt>/vks/v1/upload</tt>)
and an <code>addresses</code> field,
which is a list of e-mail addresses (not full User IDs)
which is a list of email addresses (not full User IDs)
to request verification mails for.
It can optionally include a <code>locale</code> field,
which is list of locales,
ordered by preference,
which to use for the verification e-mail.
which to use for the verification email.
The reply will be the same as for the <tt>/vks/v1/upload</tt> endpoint,
with addresses marked as <code>pending</code> where a verification email
has been sent.
@ -194,7 +194,7 @@
per second. Excessive requests are delayed to match this rate. Short
bursts are allowed.
</li>
<li>Requests by e-mail address are limited to one request per minute.
<li>Requests by email address are limited to one request per minute.
Excessive requests will fail with <tt>error 429</tt>. Short bursts are
allowed.
</li>
@ -255,7 +255,7 @@
<code>keytext</code> must be the keys to submit,
which must be ASCII Armored.
More than one key may be submitted in one request.
For verification of e-mail addresses,
For verification of email addresses,
the <tt>/vks/v1/upload</tt> endpoint
must be used instead.
</p>
@ -274,7 +274,7 @@
<ul>
<li>No support for <code>op=vindex</code>,</li>
<li>only exact matches by e-mail address, fingerprint or long key id are
<li>only exact matches by email address, fingerprint or long key id are
returned,</li>
<li>all parameters and options other than <code>op</code> and
<code>search</code> are ignored,</li>

View File

@ -35,7 +35,7 @@
<li>
Federation with open participation requires all data to be public.
This significantly impacts the privacy of our users, because it
allows anyone to scrape a list of all e-mail addresses.
allows anyone to scrape a list of all email addresses.
</li>
<li>
Servers run as a hobby by casual administrators do not meet our
@ -44,25 +44,25 @@
</ol>
<h3 id="non-email-uids"><a href="#non-email-uids">Why is there no support
for identities that aren't e-mail addresses?</a></h3>
for identities that aren't email addresses?</a></h3>
<p>
We require explicit consent to distribute identity information.
Identities that aren't e-mail addresses, such as pictures or website
Identities that aren't email addresses, such as pictures or website
URLs, offer no simple way for us to acquire this consent.
</p>
<p>
Note: Some OpenPGP software creates keys with incorrectly formatted
e-mail addresses. These addresses might not be recognized correctly on
email addresses. These addresses might not be recognized correctly on
<span class="brand">keys.openpgp.org</span>.
</p>
<h3 id="verify-multiple"><a href="#verify-multiple">Can I verify more than
one key for some e-mail address?</a></h3>
one key for some email address?</a></h3>
<p>
An e-mail address can only be associated with a single key.
An email address can only be associated with a single key.
When an address is verified for a new key,
it will no longer appear in any key
for which it was previously verified.
@ -71,16 +71,16 @@
</p>
<p>
This means a search by e-mail address
This means a search by email address
will only return a single key,
not multiple candidates.
This eliminates an impossible choice for the user
("Which key is the right one?"),
and makes key discovery by e-mail much more convenient.
and makes key discovery by email much more convenient.
</p>
<h3 id="email-protection"><a href="#email-protection">What do you do to
protect outgoing verification e-mails?</a></h3>
protect outgoing verification emails?</a></h3>
<p>
We use a modern standard called
@ -88,14 +88,14 @@
combined with
<a href="https://starttls-everywhere.org/" target="_blank">STARTTLS Everywhere</a>
by the EFF,
to make sure verification e-mails are sent out securely.
to make sure verification emails are sent out securely.
This protects against eavesdropping and interception during delivery.
</p>
<p>
The MTA-STS mechanism depends on correctly configured e-mail servers.
The MTA-STS mechanism depends on correctly configured email servers.
You can <a href="https://www.hardenize.com/">run this test</a>
to see if your e-mail provider supports it.
to see if your email provider supports it.
If the "MTA-STS" entry on the left isn't a green checkmark,
please ask your provider to update their configuration.
</p>
@ -190,7 +190,7 @@
</p>
<h3 id="encrypt-verification-emails"><a href="#encrypt-verification-emails">
Why not encrypt verification e-mails?</a></h3>
Why not encrypt verification emails?</a></h3>
Various reasons:
<ol>

View File

@ -35,7 +35,7 @@
<p>
At the time of writing,
more than 70.000 e-mail addresses
more than 70.000 email addresses
have been verified.
<center style="margin-top: 2em; margin-bottom: 2em;">
@ -88,11 +88,11 @@
<p>
One improvement that deserves special mention is
<a href="https://www.hardenize.com/blog/mta-sts">MTA-STS</a>,
which improves the security of outgoing e-mails.
which improves the security of outgoing emails.
<p>
While HTTPS is deployed fairly universally these days,
that sadly isn't the case for E-Mail.
that sadly isn't the case for email.
Many servers don't do encryption at all,
or use a self-signed certificate
instead of a proper one (e.g. from Let's Encrypt).
@ -122,7 +122,7 @@
<p>
You can <a href="https://aykevl.nl/apps/mta-sts/" target="_blank">run a check</a>
to find out whether your e-mail provider
to find out whether your email provider
supports MTA-STS.
If they don't,
please drop them a message and tell them
@ -140,7 +140,7 @@
To make this service more accessible,
we are working with the OTF's
<a href="https://www.opentech.fund/labs/localization-lab/" target="_blank">Localization Lab</a>
to make the website and outgoing e-mails
to make the website and outgoing emails
available in several more languages.
<p>
@ -200,7 +200,7 @@
<li>Precise. Searches return only a single key, which allows for easy key discovery.</li>
<li>Validating. Identities are only published with consent,
while non-identity information is freely distributed.</li>
<li>Deletable. Users can delete personal information with a simple e-mail confirmation.</li>
<li>Deletable. Users can delete personal information with a simple email confirmation.</li>
<li>Built on Rust, powered by <a href="https://sequoia-pgp.org" target="_blank">Sequoia PGP</a> - free and open source, running AGPLv3.</li>
</ul>
@ -240,16 +240,16 @@
that can also be revoked at any time.
<p>
If a new key is verified for some e-mail address,
If a new key is verified for some email address,
it will replace the previous one.
This way,
every e-mail address is only associated with a single key at most.
every email address is only associated with a single key at most.
It can also be removed from the listing
at any time by the owner of the address.
This is very useful for key discovery:
if a search by e-mail address returns a key,
if a search by email address returns a key,
it means this is the single key
that is currently valid for the searched e-mail address.
that is currently valid for the searched email address.
<h4>Support in Enigmail and OpenKeychain</h4>
@ -261,7 +261,7 @@
<a href="https://play.google.com/store/apps/details?id=org.sufficientlysecure.keychain&hl=en">OpenKeychain</a> on Android.
This means users of those implementations will
benefit from the faster response times,
and improved key discovery by e-mail address.
and improved key discovery by email address.
We hope that this will also give us some momentum
to build this project into a bigger community effort.

View File

@ -7,8 +7,8 @@
distributes OpenPGP key data. The specific way in which data is processed
differs by type as follows:
<ul>
<li><b>E-Mail Addresses</b>
<p>E-Mail addresses contained in <abbr title="Packet Tag 13">User
<li><b>Email Addresses</b>
<p>Email addresses contained in <abbr title="Packet Tag 13">User
IDs</abbr> are personally identifiable information (PII).
Special care is taken to make sure they are used only with
consent:
@ -17,9 +17,9 @@
Publishing requires <a target="_blank"
href="https://en.wikipedia.org/wiki/Opt-in_email#Confirmed_opt-in_(COI)_/_Double_opt-in_(DOI)">double
opt-in</a> validation, to prove ownership of the
e-mail address in question.
email address in question.
</li>
<li>Addresses are searchable by exact E-Mail address,
<li>Addresses are searchable by exact email address,
but not by associated name.</li>
<li>Enumeration of addresses is not possible.</li>
<li>Deletion of addresses is possible via simple proof
@ -47,9 +47,9 @@
</p>
</li>
<li><b>Other User ID data</b>
<p>An OpenPGP key may contain personal data other than E-Mail
<p>An OpenPGP key may contain personal data other than email
addresses, such as <abbr title="Packet Tag 13">User IDs</abbr>
that do not contain E-Mail addresses, or <abbr
that do not contain email addresses, or <abbr
title="Packet Tag 17">image attributes</abbr>. This data is stripped
during upload and never stored, processed, or distributed in
any way.

View File

@ -2,10 +2,10 @@
<div class="about">
<center><h2><a href="/about">About</a> | <a href="/about/news">News</a> | <a href="/about/usage">Usage</a> | <a href="/about/faq">FAQ</a> | Stats | <a href="/about/privacy">Privacy</a></h2></center>
<h3>Verified e-mail addresses</h3>
<h3>Verified email addresses</h3>
<p>
A simple statistic of the total number of e-mail addresses that are currently verified. 📈
A simple statistic of the total number of email addresses that are currently verified. 📈
</p>
<p>

View File

@ -24,7 +24,7 @@
<ul>
<li>Keys will be kept up to date automatically.</li>
<li>During key creation, you can optionally upload and verify your key.</li>
<li>Keys can be discovered by e-mail address.</li>
<li>Keys can be discovered by email address.</li>
</ul>
</p>
@ -48,12 +48,12 @@
since July 2019.
<ul>
<li>Keys will be kept up to date automatically.</li>
<li>Keys can be discovered by e-mail address.</li>
<li>Keys can be discovered by email address.</li>
</ul>
</p>
<p>
Note that there is no built-in support for upload and e-mail verification so far.
Note that there is no built-in support for upload and email verification so far.
</p>
<h2>
@ -85,7 +85,7 @@
<p>
Keys can be uploaded with GnuPG's <tt>--send-keys</tt> command, but
identity information can't be verified that way to make the key
searchable by e-mail address (<a href="/about">what's that?</a>).
searchable by email address (<a href="/about">what's that?</a>).
</p>
<ul>

View File

@ -10,7 +10,7 @@
<form action="/manage" method="POST">
<div class="manage">
<input type="text" name="search_term" class="manageEmail" autofocus
placeholder="{{ text "Enter any verified e-mail address of your key" }}">
placeholder="{{ text "Enter any verified email address for your key" }}">
<button type="submit" class="manageButton button">
{{ text "Send link" }}
</button>
@ -18,7 +18,7 @@
</form>
<p>
{{ text "We will send you an e-mail with a link you can use to remove any of your e-mail addresses from search." }}
{{ text "We will send you an email with a link you can use to remove any of your email addresses from search." }}
</p>
{{/with}}

View File

@ -30,7 +30,7 @@
{{else}}
<p style="padding-top: 1em;">
{{ text "Your key is published as only non-identity information. (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)" }}
{{ text "Your key is published as only non-identity information. (<a href=\"/about\" target=\"_blank\">What does this mean?</a>)" }}
</p>
<p>

View File

@ -1,5 +1,5 @@
{{#> layout }}
{{#with page}}
<p>{{ text "This address was already verified." }}</p>
<p>{{ text "This address has already been verified." }}</p>
{{/with}}
{{/layout}}

View File

@ -11,7 +11,7 @@
</ul>
<p>
{{ text "<strong>Note:</strong> To make keys searchable by address, you must upload them individually." }}
{{ text "<strong>Note:</strong> To make keys searchable by email address, you must upload them individually." }}
</p>
{{/with}}
{{/layout}}

View File

@ -8,8 +8,7 @@
{{#if is_revoked}}
<p>
<strong>{{ text "This key is revoked." }}</strong>
{{ text "It is published without identity information and can't be made available for search by e-mail address" }}
(<a href="/about" target="_blank">{{ text "what does this mean?" }}</a>).
{{ text "It is published without identity information and can't be made available for search by email address. (<a href=\"/about\" target=\"_blank\">What does this mean?</a>)" }}
</p>
{{else}}
{{#if email_published}}
@ -24,13 +23,13 @@
{{/each}}
{{else}}
<p style="padding-top: 1em;">
{{ text "This key is now published with only non-identity information (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)" }}
{{ text "This key is now published with only non-identity information. (<a href=\"/about\" target=\"_blank\">What does this mean?</a>)" }}
</p>
{{/if}}
{{#if email_unpublished}}
<p style="padding-top: 1em;">
{{ text "To make the key available for search by e-mail address, you can verify it belongs to you:" }}
{{ text "To make the key available for search by email address, you can verify it belongs to you:" }}
</p>
{{#each email_unpublished}}
<div class="publishedUid">
@ -41,7 +40,7 @@
<form action="/upload/request-verify" method="post">
<input type="hidden" name="token" value="{{../token}}" />
<input type="hidden" name="address" value="{{address}}" />
<input type="submit" class="link" value="{{ text "Send Verification Mail" }}">
<input type="submit" class="link" value="{{ text "Send Verification Email" }}">
</form>
{{/if}}
</div>
@ -49,18 +48,18 @@
</div>
{{/each}}
<p>
{{ text "<strong>Note:</strong> Some providers delay e-mails for up to 15 minutes to prevent spam. Please be patient." }}
{{ text "<strong>Note:</strong> Some providers delay emails for up to 15 minutes to prevent spam. Please be patient." }}
</p>
{{/if}}
{{#if count_unparsed}}
{{#if count_unparsed_one}}
<p style="padding-top: 1em;">
{{ text "This key contains one identity that could not be parsed as an email address.<br /> This identity can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">why?</a>)" }}
{{ text "This key contains one identity that could not be parsed as an email address.<br /> This identity can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">Why?</a>)" }}
</p>
{{else}}
<p style="padding-top: 1em;">
{{ text "This key contains {{ count_unparsed }} identities that could not be parsed as an email address.<br /> These identities can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">why?</a>)" rerender }}
{{ text "This key contains {{ count_unparsed }} identities that could not be parsed as an email address.<br /> These identities can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">Why?</a>)" rerender }}
</p>
{{/if}}
{{/if}}

View File

@ -12,7 +12,7 @@
</form>
<p>
{{ text "Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and <a target=\"_blank\" href=\"/about/usage\">usage guide</a>!" }}
{{ text "Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and <a target=\"_blank\" href=\"/about/usage\">usage guide</a>." }}
</p>
<script src="/assets/js/upload.js" async></script>

View File

@ -7,7 +7,7 @@
<p>
<form method="POST" action="/verify/{{token}}" id="postform">
{{ text "If the process doesn't complete after a few seconds, <input type=\"submit\" class=\"textbutton\" value=\"click here\" />." }}
{{ text "If the process doesn't complete after a few seconds, please <input type=\"submit\" class=\"textbutton\" value=\"click here\" />." }}
</form>
</p>
</div>

View File

@ -12,16 +12,19 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: src/mail.rs:106
msgid "Verify {} for your key on {}"
#: src/mail.rs:107
msgctxt "Subject for verification email"
msgid "Verify {userid} for your key on {domain}"
msgstr ""
#: src/mail.rs:133
msgid "Manage your key on {}"
#: src/mail.rs:140
msgctxt "Subject for manage email"
msgid "Manage your key on {domain}"
msgstr ""
#: src/mail.rs:160
msgid "Your key upload on {}"
#: src/mail.rs:172
msgctxt "Subject for welcome email"
msgid "Your key upload on {domain}"
msgstr ""
#: src/gettext_strings.rs:4
@ -93,7 +96,7 @@ msgid "Manage your key"
msgstr ""
#: src/gettext_strings.rs:21
msgid "Enter any verified e-mail address of your key"
msgid "Enter any verified email address for your key"
msgstr ""
#: src/gettext_strings.rs:22
@ -101,7 +104,7 @@ msgid "Send link"
msgstr ""
#: src/gettext_strings.rs:23
msgid "We will send you an e-mail with a link you can use to remove any of your e-mail addresses from search."
msgid "We will send you an email with a link you can use to remove any of your email addresses from search."
msgstr ""
#: src/gettext_strings.rs:24
@ -121,7 +124,7 @@ msgid "Clicking \"delete\" on any address will remove it from this key. It will
msgstr ""
#: src/gettext_strings.rs:28
msgid "Your key is published as only non-identity information. (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)"
msgid "Your key is published as only non-identity information. (<a href=\"/about\" target=\"_blank\">What does this mean?</a>)"
msgstr ""
#: src/gettext_strings.rs:29
@ -133,7 +136,7 @@ msgid "We have sent an email with further instructions to <span class=\"email\">
msgstr ""
#: src/gettext_strings.rs:31
msgid "This address was already verified."
msgid "This address has already been verified."
msgstr ""
#: src/gettext_strings.rs:32
@ -161,7 +164,7 @@ msgid "Upload"
msgstr ""
#: src/gettext_strings.rs:38
msgid "Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and <a target=\"_blank\" href=\"/about/usage\">usage guide</a>!"
msgid "Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and <a target=\"_blank\" href=\"/about/usage\">usage guide</a>."
msgstr ""
#: src/gettext_strings.rs:39
@ -173,179 +176,167 @@ msgid "This key is revoked."
msgstr ""
#: src/gettext_strings.rs:41
msgid "It is published without identity information and can't be made available for search by e-mail address"
msgid "It is published without identity information and can't be made available for search by email address (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)."
msgstr ""
#: src/gettext_strings.rs:42
msgid "what does this mean?"
msgstr ""
#: src/gettext_strings.rs:43
msgid "This key is now published with the following identity information (<a href=\"/about\" target=\"_blank\">what does this mean?</a>):"
msgstr ""
#: src/gettext_strings.rs:44
#: src/gettext_strings.rs:43
msgid "Published"
msgstr ""
#: src/gettext_strings.rs:45
#: src/gettext_strings.rs:44
msgid "This key is now published with only non-identity information (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)"
msgstr ""
#: src/gettext_strings.rs:46
msgid "To make the key available for search by e-mail address, you can verify it belongs to you:"
#: src/gettext_strings.rs:45
msgid "To make the key available for search by email address, you can verify it belongs to you:"
msgstr ""
#: src/gettext_strings.rs:47
#: src/gettext_strings.rs:46
msgid "Verification Pending"
msgstr ""
#: src/gettext_strings.rs:47
msgid "<strong>Note:</strong> Some providers delay emails for up to 15 minutes to prevent spam. Please be patient."
msgstr ""
#: src/gettext_strings.rs:48
msgid "<strong>Note:</strong> Some providers delay e-mails for up to 15 minutes to prevent spam. Please be patient."
msgid "Send Verification Email"
msgstr ""
#: src/gettext_strings.rs:49
msgid "Send Verification Mail"
msgid "This key contains one identity that could not be parsed as an email address.<br /> This identity can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">Why?</a>)"
msgstr ""
#: src/gettext_strings.rs:50
msgid "This key contains one identity that could not be parsed as an email address.<br /> This identity can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">why?</a>)"
msgid "This key contains {{ count_unparsed }} identities that could not be parsed as an email address.<br /> These identities can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">Why?</a>)"
msgstr ""
#: src/gettext_strings.rs:51
msgid "This key contains {{ count_unparsed }} identities that could not be parsed as an email address.<br /> These identities can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">why?</a>)"
msgstr ""
#: src/gettext_strings.rs:52
msgid "This key contains one revoked identity, which is not published. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
msgstr ""
#: src/gettext_strings.rs:53
#: src/gettext_strings.rs:52
msgid "This key contains {{ count_revoked }} revoked identities, which are not published. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
msgstr ""
#: src/gettext_strings.rs:54
#: src/gettext_strings.rs:53
msgid "Your keys have been successfully uploaded:"
msgstr ""
#: src/gettext_strings.rs:55
msgid "<strong>Note:</strong> To make keys searchable by address, you must upload them individually."
#: src/gettext_strings.rs:54
msgid "<strong>Note:</strong> To make keys searchable by email address, you must upload them individually."
msgstr ""
#: src/gettext_strings.rs:56
#: src/gettext_strings.rs:55
msgid "Verifying your email address…"
msgstr ""
#: src/gettext_strings.rs:57
#: src/gettext_strings.rs:56
msgid "If the process doesn't complete after a few seconds, <input type=\"submit\" class=\"textbutton\" value=\"click here\" />."
msgstr ""
#: src/gettext_strings.rs:59
#: src/gettext_strings.rs:58
msgid "Manage your key on {{domain}}"
msgstr ""
#: src/gettext_strings.rs:61
#: src/gettext_strings.rs:60
msgid "Hi,"
msgstr ""
#: src/gettext_strings.rs:62
#: src/gettext_strings.rs:61
msgid "this is an automated message from <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-decoration:none; color: #333\"><tt>{{ domain }}</tt></a>."
msgstr ""
#: src/gettext_strings.rs:63
#: src/gettext_strings.rs:62
msgid "If you didn't request this message, please ignore it."
msgstr ""
#: src/gettext_strings.rs:64
#: src/gettext_strings.rs:63
msgid "OpenPGP key: <tt>{{ primary_fp }}</tt>"
msgstr ""
#: src/gettext_strings.rs:65
#: src/gettext_strings.rs:64
msgid "To manage and delete listed addresses on this key, please follow the link below:"
msgstr ""
#: src/gettext_strings.rs:66
#: src/gettext_strings.rs:65
msgid "You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/about</a>."
msgstr ""
#: src/gettext_strings.rs:67
#: src/gettext_strings.rs:66
msgid "Greetings from the <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
msgstr ""
#: src/gettext_strings.rs:70
#: src/gettext_strings.rs:69
msgid "this is an automated message from {{domain}}. If you didn't\nrequest this message, please ignore it."
msgstr ""
#: src/gettext_strings.rs:71
#: src/gettext_strings.rs:70
msgid "OpenPGP key: {{primary_fp}}"
msgstr ""
#: src/gettext_strings.rs:72
#: src/gettext_strings.rs:71
msgid "To manage and delete listed addresses on this key, please follow\nthe link below:"
msgstr ""
#: src/gettext_strings.rs:73
#: src/gettext_strings.rs:72
msgid "You can find more info at {{base_uri}}/about"
msgstr ""
#: src/gettext_strings.rs:74
#: src/gettext_strings.rs:73
msgid "Greetings from the keys.openpgp.org team"
msgstr ""
#: src/gettext_strings.rs:76
#: src/gettext_strings.rs:75
msgid "Verify {{userid}} for your key on {{domain}}"
msgstr ""
#: src/gettext_strings.rs:79
#: src/gettext_strings.rs:78
msgid "this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you didn't request this message, please ignore it."
msgstr ""
#: src/gettext_strings.rs:80
#: src/gettext_strings.rs:79
msgid "OpenPGP key: <tt>{{primary_fp}}</tt>"
msgstr ""
#: src/gettext_strings.rs:81
#: src/gettext_strings.rs:80
msgid "To let others find this key from your email address \"<a rel=\"nofollow\" href=\"#\" style=\"text-decoration:none; color: #333\">{{userid}}</a>\", please click the link below:"
msgstr ""
#: src/gettext_strings.rs:82
#: src/gettext_strings.rs:81
msgid "You can find more info at <a href=\"{{base_uri}}/about\">{{domain}}/about</a>."
msgstr ""
#: src/gettext_strings.rs:83
#: src/gettext_strings.rs:82
msgid "Greetings from the <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
msgstr ""
#: src/gettext_strings.rs:88
#: src/gettext_strings.rs:87
msgid "To let others find this key from your email address \"{{userid}}\",\nplease follow the link below:"
msgstr ""
#: src/gettext_strings.rs:92
#: src/gettext_strings.rs:91
msgid "Your key upload on {{domain}}"
msgstr ""
#: src/gettext_strings.rs:95
#: src/gettext_strings.rs:94
msgid "this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you didn't upload your key there, please ignore this message."
msgstr ""
#: src/gettext_strings.rs:97
msgid "This key was just uploaded for the first time, and is now published without identity information. If you want to allow others to find this key by e-mail address, please follow this link:"
#: src/gettext_strings.rs:96
msgid "This key was just uploaded for the first time, and is now published without identity information. If you want to allow others to find this key by email address, please follow this link:"
msgstr ""
#: src/gettext_strings.rs:102
#: src/gettext_strings.rs:101
msgid "this is an automated message from {{domain}}. If you didn't upload your key\nthere, please ignore this message."
msgstr ""
#: src/gettext_strings.rs:104
msgid "This key was just uploaded for the first time, and is now published without\nidentity information. If you want to allow others to find this key by e-mail\naddress, please follow this link:"
msgstr ""
#: src/web/hkp.rs:144
msgid "Upload successful. This is a new key, a welcome mail has been sent!"
msgstr ""
#: src/web/hkp.rs:146
msgid "Upload successful. Note that identity information will only be published after verification! see {}/about/usage#gnupg-upload"
#: src/gettext_strings.rs:103
msgid "This key was just uploaded for the first time, and is now published without\nidentity information. If you want to allow others to find this key by email\naddress, please follow this link:"
msgstr ""
#: src/web/manage.rs:103
@ -353,15 +344,15 @@ msgid "This link is invalid or expired"
msgstr ""
#: src/web/manage.rs:129
msgid "Malformed address: {}"
msgid "Malformed address: {address}"
msgstr ""
#: src/web/manage.rs:136
msgid "No key for address: {}"
msgid "No key for address: {address}"
msgstr ""
#: src/web/manage.rs:152
msgid "A request was already sent for this address recently."
msgid "A request has already been sent for this address recently."
msgstr ""
#: src/web/vks.rs:173

View File

@ -18,43 +18,42 @@ fn _dummy() {
t!("Background image retrieved from <a href=\"https://www.toptal.com/designers/subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0");
t!("Maintenance Mode");
t!("Manage your key");
t!("Enter any verified e-mail address of your key");
t!("Enter any verified email address for your key");
t!("Send link");
t!("We will send you an e-mail with a link you can use to remove any of your e-mail addresses from search.");
t!("We will send you an email with a link you can use to remove any of your email addresses from search.");
t!("Managing the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" target=\"_blank\">{{ key_fpr }}</a></span>.");
t!("Your key is published with the following identity information:");
t!("Delete");
t!("Clicking \"delete\" on any address will remove it from this key. It will no longer appear in a search.<br /> To add another address, <a href=\"/upload\">upload</a> the key again.");
t!("Your key is published as only non-identity information. (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)");
t!("Your key is published as only non-identity information. (<a href=\"/about\" target=\"_blank\">What does this mean?</a>)");
t!("To add an address, <a href=\"/upload\">upload</a> the key again.");
t!("We have sent an email with further instructions to <span class=\"email\">{{ address }}</span>.");
t!("This address was already verified.");
t!("This address has already been verified.");
t!("Your key <span class=\"fingerprint\">{{ key_fpr }}</span> is now published for the identity <a href=\"{{userid_link}}\" target=\"_blank\"><span class=\"email\">{{ userid }}</span></a>.");
t!("Verification failed! Perhaps the link you used was expired?");
t!("You can <a href=\"/upload\">try uploading again</a>.");
t!("Upload your key");
t!("Your public key");
t!("Upload");
t!("Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and <a target=\"_blank\" href=\"/about/usage\">usage guide</a>!");
t!("Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and <a target=\"_blank\" href=\"/about/usage\">usage guide</a>.");
t!("You uploaded the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" target=\"_blank\">{{ key_fpr }}</a></span>.");
t!("This key is revoked.");
t!("It is published without identity information and can't be made available for search by e-mail address");
t!("what does this mean?");
t!("It is published without identity information and can't be made available for search by email address (<a href=\"/about\" target=\"_blank\">what does this mean?</a>).");
t!("This key is now published with the following identity information (<a href=\"/about\" target=\"_blank\">what does this mean?</a>):");
t!("Published");
t!("This key is now published with only non-identity information (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)");
t!("To make the key available for search by e-mail address, you can verify it belongs to you:");
t!("To make the key available for search by email address, you can verify it belongs to you:");
t!("Verification Pending");
t!("<strong>Note:</strong> Some providers delay e-mails for up to 15 minutes to prevent spam. Please be patient.");
t!("Send Verification Mail");
t!("This key contains one identity that could not be parsed as an email address.<br /> This identity can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">why?</a>)");
t!("This key contains {{ count_unparsed }} identities that could not be parsed as an email address.<br /> These identities can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">why?</a>)");
t!("<strong>Note:</strong> Some providers delay emails for up to 15 minutes to prevent spam. Please be patient.");
t!("Send Verification Email");
t!("This key contains one identity that could not be parsed as an email address.<br /> This identity can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">Why?</a>)");
t!("This key contains {{ count_unparsed }} identities that could not be parsed as an email address.<br /> These identities can't be published on <span class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-uids\" target=\"_blank\">Why?</a>)");
t!("This key contains one revoked identity, which is not published. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Why?</a>)");
t!("This key contains {{ count_revoked }} revoked identities, which are not published. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Why?</a>)");
t!("Your keys have been successfully uploaded:");
t!("<strong>Note:</strong> To make keys searchable by address, you must upload them individually.");
t!("<strong>Note:</strong> To make keys searchable by email address, you must upload them individually.");
t!("Verifying your email address…");
t!("If the process doesn't complete after a few seconds, <input type=\"submit\" class=\"textbutton\" value=\"click here\" />.");
t!("If the process doesn't complete after a few seconds, plese <input type=\"submit\" class=\"textbutton\" value=\"click here\" />.");
t!("Manage your key on {{domain}}");
@ -94,14 +93,14 @@ fn _dummy() {
t!("Hi,");
t!("this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you didn't upload your key there, please ignore this message.");
t!("OpenPGP key: <tt>{{primary_fp}}</tt>");
t!("This key was just uploaded for the first time, and is now published without identity information. If you want to allow others to find this key by e-mail address, please follow this link:");
t!("This key was just uploaded for the first time, and is now published without identity information. If you want to allow others to find this key by email address, please follow this link:");
t!("You can find more info at <a href=\"{{base_uri}}/about\">{{domain}}/about</a>.");
t!("Greetings from the <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team");
t!("Hi,");
t!("this is an automated message from {{domain}}. If you didn't upload your key\nthere, please ignore this message.");
t!("OpenPGP key: {{primary_fp}}");
t!("This key was just uploaded for the first time, and is now published without\nidentity information. If you want to allow others to find this key by e-mail\naddress, please follow this link:");
t!("This key was just uploaded for the first time, and is now published without\nidentity information. If you want to allow others to find this key by email\naddress, please follow this link:");
t!("You can find more info at {{base_uri}}/about");
t!("Greetings from the keys.openpgp.org team");
}

View File

@ -103,7 +103,13 @@ impl Service {
self.send(
&vec![userid],
&i18n!(i18n.catalog, "Verify {} for your key on {}"; userid, self.domain),
&i18n!(
i18n.catalog,
context = "Subject for verification email",
"Verify {userid} for your key on {domain}";
userid = userid,
domain = self.domain
),
"verify",
i18n.lang,
ctx,
@ -130,7 +136,12 @@ impl Service {
self.send(
&[recipient],
&i18n!(i18n.catalog, "Manage your key on {}"; self.domain),
&i18n!(
i18n.catalog,
context = "Subject for manage email",
"Manage your key on {domain}";
domain = self.domain
),
"manage",
i18n.lang,
ctx,
@ -157,7 +168,12 @@ impl Service {
self.send(
&vec![userid],
&i18n!(i18n.catalog, "Your key upload on {}"; self.domain),
&i18n!(
i18n.catalog,
context = "Subject for welcome email",
"Your key upload on {domain}";
domain = self.domain
),
"welcome",
i18n.lang,
ctx,

View File

@ -7,8 +7,6 @@ use rocket::request::{self, Request, FromRequest};
use rocket::http::uri::Uri;
use rocket_i18n::I18n;
use gettext_macros::i18n;
use crate::database::{Database, Query, KeyDatabase};
use crate::database::types::{Email, Fingerprint, KeyID};
@ -141,14 +139,14 @@ pub fn pks_add_form(
match vks_web::process_post_form(&db, &tokens_stateless, &rate_limiter, &i18n, data) {
Ok(UploadResponse::Ok { is_new_key, key_fpr, primary_uid, token, .. }) => {
let msg = if is_new_key && send_welcome_mail(&request_origin, &mail_service, &i18n, key_fpr, primary_uid, token) {
i18n!(i18n.catalog, "Upload successful. This is a new key, a welcome mail has been sent!")
format!("Upload successful. This is a new key, a welcome email has been sent.")
} else {
i18n!(i18n.catalog, "Upload successful. Note that identity information will only be published after verification! see {}/about/usage#gnupg-upload"; request_origin.get_base_uri())
format!("Upload successful. Please note that identity information will only be published after verification. See {baseuri}/about/usage#gnupg-upload", baseuri = request_origin.get_base_uri())
};
MyResponse::plain(msg)
}
Ok(_) => {
let msg = i18n!(i18n.catalog, "Upload successful. Note that identity information will only be published after verification! see {}/about/usage#gnupg-upload"; request_origin.get_base_uri());
let msg = format!("Upload successful. Please note that identity information will only be published after verification. See {baseuri}/about/usage#gnupg-upload", baseuri = request_origin.get_base_uri());
MyResponse::plain(msg)
}
Err(err) => MyResponse::ise(err),

View File

@ -126,14 +126,14 @@ pub fn vks_manage_post(
Ok(email) => email,
Err(_) => return MyResponse::not_found(
Some("manage/manage"),
Some(i18n!(i18n.catalog, "Malformed address: {}"; request.search_term)))
Some(i18n!(i18n.catalog, "Malformed address: {address}"; address = request.search_term)))
};
let tpk = match db.lookup(&database::Query::ByEmail(email.clone())) {
Ok(Some(tpk)) => tpk,
Ok(None) => return MyResponse::not_found(
Some("manage/manage"),
Some(i18n!(i18n.catalog, "No key for address: {}"; request.search_term))),
Some(i18n!(i18n.catalog, "No key for address: {address}"; address = request.search_term))),
Err(e) => return MyResponse::ise(e),
};
@ -149,7 +149,7 @@ pub fn vks_manage_post(
if !rate_limiter.action_perform(format!("manage-{}", &email)) {
return MyResponse::not_found(
Some("manage/manage"),
Some(i18n!(i18n.catalog, "A request was already sent for this address recently.")));
Some(i18n!(i18n.catalog, "A request has already been sent for this address recently.")));
}
let fpr: Fingerprint = tpk.fingerprint().try_into().unwrap();

View File

@ -697,7 +697,7 @@ pub mod tests {
let mut response = client.get("/manage").dispatch();
assert_eq!(response.status(), Status::Ok);
assert_eq!(response.content_type(), Some(ContentType::HTML));
assert!(response.body_string().unwrap().contains("any verified e-mail address"));
assert!(response.body_string().unwrap().contains("any verified email address"));
assert_consistency(client.rocket());
}
@ -1180,7 +1180,7 @@ pub mod tests {
let mut response_second = client.post(&confirm_uri).dispatch();
assert_eq!(response_second.status(), Status::BadRequest);
assert!(response_second.body_string().unwrap().contains("already verified"));
assert!(response_second.body_string().unwrap().contains("already been verified"));
}
fn check_mails_and_confirm_deletion(client: &Client, filemail_path: &Path, address: &str) {