i18n: prepare translation of about pages
This commit is contained in:
parent
6236d3bf40
commit
cdc1afb6d1
42
.tx/config
42
.tx/config
|
@ -9,3 +9,45 @@ trans.None = po/hagrid/hagrid.pot
|
||||||
trans.de = po/hagrid/de.po
|
trans.de = po/hagrid/de.po
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
|
[hagrid.about-about]
|
||||||
|
minimum_perc = 100
|
||||||
|
source_file = templates-untranslated/about/about.html.hbs
|
||||||
|
file_filter = templates-translated/<lang>/about/about.html.hbs
|
||||||
|
source_lang = en
|
||||||
|
type = HTML
|
||||||
|
|
||||||
|
[hagrid.about-faq]
|
||||||
|
minimum_perc = 100
|
||||||
|
source_file = templates-untranslated/about/faq.html.hbs
|
||||||
|
file_filter = templates-translated/<lang>/about/faq.html.hbs
|
||||||
|
source_lang = en
|
||||||
|
type = HTML
|
||||||
|
|
||||||
|
[hagrid.about-news]
|
||||||
|
minimum_perc = 100
|
||||||
|
source_file = templates-untranslated/about/news.html.hbs
|
||||||
|
file_filter = templates-translated/<lang>/about/news.html.hbs
|
||||||
|
source_lang = en
|
||||||
|
type = HTML
|
||||||
|
|
||||||
|
[hagrid.about-privacy]
|
||||||
|
minimum_perc = 100
|
||||||
|
source_file = templates-untranslated/about/privacy.html.hbs
|
||||||
|
file_filter = templates-translated/<lang>/about/privacy.html.hbs
|
||||||
|
source_lang = en
|
||||||
|
type = HTML
|
||||||
|
|
||||||
|
[hagrid.about-stats]
|
||||||
|
minimum_perc = 100
|
||||||
|
source_file = templates-untranslated/about/stats.html.hbs
|
||||||
|
file_filter = templates-translated/<lang>/about/stats.html.hbs
|
||||||
|
source_lang = en
|
||||||
|
type = HTML
|
||||||
|
|
||||||
|
[hagrid.about-usage]
|
||||||
|
minimum_perc = 100
|
||||||
|
source_file = templates-untranslated/about/usage.html.hbs
|
||||||
|
file_filter = templates-translated/<lang>/about/usage.html.hbs
|
||||||
|
source_lang = en
|
||||||
|
type = HTML
|
||||||
|
|
||||||
|
|
|
@ -305,5 +305,5 @@
|
||||||
<p>
|
<p>
|
||||||
Cheers!
|
Cheers!
|
||||||
<span style="font-size: x-large;">🍻</span>
|
<span style="font-size: x-large;">🍻</span>
|
||||||
|
</div>
|
||||||
{{/layout}}
|
{{/layout}}
|
||||||
|
|
|
@ -31,4 +31,3 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
{{/layout}}
|
{{/layout}}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
{{#> layout }}
|
{{#> layout }}
|
||||||
{{#with page}}
|
|
||||||
<div class="about usage">
|
<div class="about usage">
|
||||||
<center><h2><a href="/about">About</a> | <a href="/about/news">News</a> | Usage | <a href="/about/faq">FAQ</a> | <a href="/about/stats">Stats</a> | <a href="/about/privacy">Privacy</a></h2></center>
|
<center><h2><a href="/about">About</a> | <a href="/about/news">News</a> | Usage | <a href="/about/faq">FAQ</a> | <a href="/about/stats">Stats</a> | <a href="/about/privacy">Privacy</a></h2></center>
|
||||||
|
|
||||||
|
@ -94,7 +93,7 @@
|
||||||
You can try this shortcut for uploading your key, which outputs
|
You can try this shortcut for uploading your key, which outputs
|
||||||
a direct link to the verification page:
|
a direct link to the verification page:
|
||||||
<blockquote>
|
<blockquote>
|
||||||
gpg --export your_address@example.net | curl -T - {{ ../base_uri }}
|
gpg --export your_address@example.net | curl -T - {{ base_uri }}
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
@ -157,5 +156,4 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{{/with}}
|
|
||||||
{{/layout}}
|
{{/layout}}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<strong>{{ text "News:" }}</strong> <a href="/about/news#2019-09-12-three-months-later">Three months after launch ✨</a> (2019-09-12)
|
<strong>{{ text "News:" }}</strong> {{ text "<a href=\"/about/news#2019-09-12-three-months-later\">Three months after launch ✨</a> (2019-09-12)" }}
|
||||||
</p>
|
</p>
|
||||||
{{/with}}
|
{{/with}}
|
||||||
{{/layout}}
|
{{/layout}}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
for i in dist/templates-translated/**/*.hbs; do
|
||||||
|
local template_path=${${i#dist/templates-translated/}:h}
|
||||||
|
|
||||||
|
if [[ ! -d dist/templates/localized/$template_path ]]; then
|
||||||
|
echo mkdir -p dist/templates/localized/$template_path/
|
||||||
|
mkdir -p dist/templates/localized/$template_path/
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "cat ${i:h}/template-prefix $i ${i:h}/template-suffix >! dist/templates/localized/$template_path/${i:t}"
|
||||||
|
cat ${i:h}/template-prefix $i ${i:h}/template-suffix >! dist/templates/localized/$template_path/${i:t}
|
||||||
|
done
|
144
po/hagrid/de.po
144
po/hagrid/de.po
|
@ -15,15 +15,15 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/mail.rs:105
|
#: src/mail.rs:104
|
||||||
msgid "Verify {} for your key on {}"
|
msgid "Verify {} for your key on {}"
|
||||||
msgstr "Bestätige {} für deinen Schlüssel auf {}"
|
msgstr "Bestätige {} für deinen Schlüssel auf {}"
|
||||||
|
|
||||||
#: src/mail.rs:132
|
#: src/mail.rs:131
|
||||||
msgid "Manage your key on {}"
|
msgid "Manage your key on {}"
|
||||||
msgstr "Schlüssel-Verwaltung auf {}"
|
msgstr "Schlüssel-Verwaltung auf {}"
|
||||||
|
|
||||||
#: src/mail.rs:159
|
#: src/mail.rs:158
|
||||||
msgid "Your key upload on {}"
|
msgid "Your key upload on {}"
|
||||||
msgstr "Hochgeladener Schlüssel auf {}"
|
msgstr "Hochgeladener Schlüssel auf {}"
|
||||||
|
|
||||||
|
@ -82,14 +82,20 @@ msgid "News:"
|
||||||
msgstr "News:"
|
msgstr "News:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:15
|
#: src/gettext_strings.rs:15
|
||||||
|
msgid ""
|
||||||
|
"<a href=\"/about/news#2019-09-12-three-months-later\">Three months after "
|
||||||
|
"launch ✨</a> (2019-09-12)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:16
|
||||||
msgid "v{{ version }} built from"
|
msgid "v{{ version }} built from"
|
||||||
msgstr "v{{ version }}, Revision"
|
msgstr "v{{ version }}, Revision"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:16
|
#: src/gettext_strings.rs:17
|
||||||
msgid "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
msgid "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
||||||
msgstr "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
msgstr "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:17
|
#: src/gettext_strings.rs:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"Background image retrieved from <a href=\"https://www.toptal.com/designers/"
|
"Background image retrieved from <a href=\"https://www.toptal.com/designers/"
|
||||||
"subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0"
|
"subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0"
|
||||||
|
@ -97,23 +103,23 @@ msgstr ""
|
||||||
"Hintergrund von <a href=\"https://www.toptal.com/designers/subtlepatterns/"
|
"Hintergrund von <a href=\"https://www.toptal.com/designers/subtlepatterns/"
|
||||||
"subtle-grey/\">Subtle Patterns</a> unter CC BY-SA 3.0"
|
"subtle-grey/\">Subtle Patterns</a> unter CC BY-SA 3.0"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:18
|
#: src/gettext_strings.rs:19
|
||||||
msgid "Maintenance Mode"
|
msgid "Maintenance Mode"
|
||||||
msgstr "Wartungsarbeiten"
|
msgstr "Wartungsarbeiten"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:19
|
#: src/gettext_strings.rs:20
|
||||||
msgid "Manage your key"
|
msgid "Manage your key"
|
||||||
msgstr "Schlüssel verwalten"
|
msgstr "Schlüssel verwalten"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:20
|
#: src/gettext_strings.rs:21
|
||||||
msgid "Enter any verified e-mail address of your key"
|
msgid "Enter any verified e-mail address of your key"
|
||||||
msgstr "Eine Adresse des zu verwaltenden Schlüssels"
|
msgstr "Eine Adresse des zu verwaltenden Schlüssels"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:21
|
#: src/gettext_strings.rs:22
|
||||||
msgid "Send link"
|
msgid "Send link"
|
||||||
msgstr "Sende Link"
|
msgstr "Sende Link"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:22
|
#: src/gettext_strings.rs:23
|
||||||
msgid ""
|
msgid ""
|
||||||
"We will send you an e-mail with a link you can use to remove any of your e-"
|
"We will send you an e-mail with a link you can use to remove any of your e-"
|
||||||
"mail addresses from search."
|
"mail addresses from search."
|
||||||
|
@ -121,7 +127,7 @@ msgstr ""
|
||||||
"Du wirst eine E-Mail mit einem Link erhalten, der es erlaubt, Adressen aus "
|
"Du wirst eine E-Mail mit einem Link erhalten, der es erlaubt, Adressen aus "
|
||||||
"der Suche zu entfernen."
|
"der Suche zu entfernen."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:23
|
#: src/gettext_strings.rs:24
|
||||||
msgid ""
|
msgid ""
|
||||||
"Managing the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
"Managing the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
||||||
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
||||||
|
@ -129,15 +135,15 @@ msgstr ""
|
||||||
"Verwaltung des Schlüssels <span class=\"fingerprint\"><a href="
|
"Verwaltung des Schlüssels <span class=\"fingerprint\"><a href="
|
||||||
"\"{{ key_link }}\" target=\"_blank\">{{ key_fpr }}</a></span>."
|
"\"{{ key_link }}\" target=\"_blank\">{{ key_fpr }}</a></span>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:24
|
#: src/gettext_strings.rs:25
|
||||||
msgid "Your key is published with the following identity information:"
|
msgid "Your key is published with the following identity information:"
|
||||||
msgstr "Dieser Schlüssel ist veröffentlicht mit diesen Identitäten:"
|
msgstr "Dieser Schlüssel ist veröffentlicht mit diesen Identitäten:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:25
|
#: src/gettext_strings.rs:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:26
|
#: src/gettext_strings.rs:27
|
||||||
msgid ""
|
msgid ""
|
||||||
"Clicking \"delete\" on any address will remove it from this key. It will no "
|
"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"
|
"longer appear in a search.<br /> To add another address, <a href=\"/upload"
|
||||||
|
@ -147,7 +153,7 @@ msgstr ""
|
||||||
"entfernt werden. <br /> Um eine Adresse hinzuzufügen, muss der Schlüssel <a "
|
"entfernt werden. <br /> Um eine Adresse hinzuzufügen, muss der Schlüssel <a "
|
||||||
"href=\"/upload\">erneut hochgeladen</a> werden."
|
"href=\"/upload\">erneut hochgeladen</a> werden."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:27
|
#: src/gettext_strings.rs:28
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your key is published as only non-identity information. (<a href=\"/about\" "
|
"Your key is published as only non-identity information. (<a href=\"/about\" "
|
||||||
"target=\"_blank\">what does this mean?</a>)"
|
"target=\"_blank\">what does this mean?</a>)"
|
||||||
|
@ -155,13 +161,13 @@ msgstr ""
|
||||||
"Dieser Schlüssel ist jetzt ohne Identitäts-Informationen veröffentlicht (<a "
|
"Dieser Schlüssel ist jetzt ohne Identitäts-Informationen veröffentlicht (<a "
|
||||||
"href=\"/about\" target=\"_blank\">was heisst das?</a>)"
|
"href=\"/about\" target=\"_blank\">was heisst das?</a>)"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:28
|
#: src/gettext_strings.rs:29
|
||||||
msgid "To add an address, <a href=\"/upload\">upload</a> the key again."
|
msgid "To add an address, <a href=\"/upload\">upload</a> the key again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Um eine Identität hinzuzufügen, lade den Schlüssel <a href=\"/upload"
|
"Um eine Identität hinzuzufügen, lade den Schlüssel <a href=\"/upload"
|
||||||
"\">erneut hoch</a>."
|
"\">erneut hoch</a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:29
|
#: src/gettext_strings.rs:30
|
||||||
msgid ""
|
msgid ""
|
||||||
"We have sent an email with further instructions to <span class=\"email"
|
"We have sent an email with further instructions to <span class=\"email"
|
||||||
"\">{{ address }}</span>."
|
"\">{{ address }}</span>."
|
||||||
|
@ -169,11 +175,11 @@ msgstr ""
|
||||||
"Eine E-Mail mit den nächsten Schritten wurde an <span class=\"email"
|
"Eine E-Mail mit den nächsten Schritten wurde an <span class=\"email"
|
||||||
"\">{{ address }}</span> gesendet."
|
"\">{{ address }}</span> gesendet."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:30
|
#: src/gettext_strings.rs:31
|
||||||
msgid "This address was already verified."
|
msgid "This address was already verified."
|
||||||
msgstr "Diese Adresse war bereits bestätigt."
|
msgstr "Diese Adresse war bereits bestätigt."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:31
|
#: src/gettext_strings.rs:32
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your key <span class=\"fingerprint\">{{ key_fpr }}</span> is now published "
|
"Your key <span class=\"fingerprint\">{{ key_fpr }}</span> is now published "
|
||||||
"for the identity <a href=\"{{userid_link}}\" target=\"_blank\"><span class="
|
"for the identity <a href=\"{{userid_link}}\" target=\"_blank\"><span class="
|
||||||
|
@ -183,29 +189,29 @@ msgstr ""
|
||||||
"veröffentlicht mit der Identität <a href=\"{{userid_link}}\" target=\"_blank"
|
"veröffentlicht mit der Identität <a href=\"{{userid_link}}\" target=\"_blank"
|
||||||
"\"><span class=\"email\">{{ userid }}</span></a>."
|
"\"><span class=\"email\">{{ userid }}</span></a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:32
|
#: src/gettext_strings.rs:33
|
||||||
msgid "Verification failed! Perhaps the link you used was expired?"
|
msgid "Verification failed! Perhaps the link you used was expired?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Bei der Bestätigung ist ein Fehler aufgetreten! Vielleicht war das Zeitlimit "
|
"Bei der Bestätigung ist ein Fehler aufgetreten! Vielleicht war das Zeitlimit "
|
||||||
"für den Link abgelaufen?"
|
"für den Link abgelaufen?"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:33
|
#: src/gettext_strings.rs:34
|
||||||
msgid "You can <a href=\"/upload\">try uploading again</a>."
|
msgid "You can <a href=\"/upload\">try uploading again</a>."
|
||||||
msgstr "Du kannst den Upload <a href=\"/upload\">erneut versuchen</a>."
|
msgstr "Du kannst den Upload <a href=\"/upload\">erneut versuchen</a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:34
|
#: src/gettext_strings.rs:35
|
||||||
msgid "Upload your key"
|
msgid "Upload your key"
|
||||||
msgstr "Schlüssel hochladen"
|
msgstr "Schlüssel hochladen"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:35
|
#: src/gettext_strings.rs:36
|
||||||
msgid "Your public key"
|
msgid "Your public key"
|
||||||
msgstr "Dein Schlüssel"
|
msgstr "Dein Schlüssel"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:36
|
#: src/gettext_strings.rs:37
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Upload"
|
msgstr "Upload"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:37
|
#: src/gettext_strings.rs:38
|
||||||
msgid ""
|
msgid ""
|
||||||
"Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and "
|
"Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and "
|
||||||
"<a target=\"_blank\" href=\"/about/usage\">usage guide</a>!"
|
"<a target=\"_blank\" href=\"/about/usage\">usage guide</a>!"
|
||||||
|
@ -214,7 +220,7 @@ msgstr ""
|
||||||
"\">Übersicht</a> und <a target=\"_blank\" href=\"/about/usage"
|
"\">Übersicht</a> und <a target=\"_blank\" href=\"/about/usage"
|
||||||
"\">Nutzungshinweise</a>."
|
"\">Nutzungshinweise</a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:38
|
#: src/gettext_strings.rs:39
|
||||||
msgid ""
|
msgid ""
|
||||||
"You uploaded the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
"You uploaded the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
||||||
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
||||||
|
@ -222,11 +228,11 @@ msgstr ""
|
||||||
"Schlüssel <span class=\"fingerprint\"><a href=\"{{ key_link }}\" target="
|
"Schlüssel <span class=\"fingerprint\"><a href=\"{{ key_link }}\" target="
|
||||||
"\"_blank\">{{key_fpr}}</a></span> erfolgreich hochgeladen."
|
"\"_blank\">{{key_fpr}}</a></span> erfolgreich hochgeladen."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:39
|
#: src/gettext_strings.rs:40
|
||||||
msgid "This key is revoked."
|
msgid "This key is revoked."
|
||||||
msgstr "Dieser Schlüssel ist widerrufen."
|
msgstr "Dieser Schlüssel ist widerrufen."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:40
|
#: src/gettext_strings.rs:41
|
||||||
msgid ""
|
msgid ""
|
||||||
"It is published without identity information and can't be made available for "
|
"It is published without identity information and can't be made available for "
|
||||||
"search by e-mail address"
|
"search by e-mail address"
|
||||||
|
@ -234,11 +240,11 @@ msgstr ""
|
||||||
"Er wird veröffentlicht ohne Identitäten, ist aber nicht für eine Suche nach "
|
"Er wird veröffentlicht ohne Identitäten, ist aber nicht für eine Suche nach "
|
||||||
"E-Mail Adresse verfügbar."
|
"E-Mail Adresse verfügbar."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:41
|
#: src/gettext_strings.rs:42
|
||||||
msgid "what does this mean?"
|
msgid "what does this mean?"
|
||||||
msgstr "was heisst das?"
|
msgstr "was heisst das?"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:42
|
#: src/gettext_strings.rs:43
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key is now published with the following identity information (<a href="
|
"This key is now published with the following identity information (<a href="
|
||||||
"\"/about\" target=\"_blank\">what does this mean?</a>):"
|
"\"/about\" target=\"_blank\">what does this mean?</a>):"
|
||||||
|
@ -246,11 +252,11 @@ msgstr ""
|
||||||
"Dieser Schlüssel ist mit folgenden Identitäten veröffentlicht (<a href=\"/"
|
"Dieser Schlüssel ist mit folgenden Identitäten veröffentlicht (<a href=\"/"
|
||||||
"about\" target=\"_blank\">was heisst das?</a>):"
|
"about\" target=\"_blank\">was heisst das?</a>):"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:43
|
#: src/gettext_strings.rs:44
|
||||||
msgid "Published"
|
msgid "Published"
|
||||||
msgstr "Veröffentlicht"
|
msgstr "Veröffentlicht"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:44
|
#: src/gettext_strings.rs:45
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key is now published with only non-identity information (<a href=\"/"
|
"This key is now published with only non-identity information (<a href=\"/"
|
||||||
"about\" target=\"_blank\">what does this mean?</a>)"
|
"about\" target=\"_blank\">what does this mean?</a>)"
|
||||||
|
@ -258,7 +264,7 @@ msgstr ""
|
||||||
"Dieser Schlüssel ist jetzt ohne Identitäts-Informationen veröffentlicht (<a "
|
"Dieser Schlüssel ist jetzt ohne Identitäts-Informationen veröffentlicht (<a "
|
||||||
"href=\"/about\" target=\"_blank\">was heisst das?</a>)"
|
"href=\"/about\" target=\"_blank\">was heisst das?</a>)"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:45
|
#: src/gettext_strings.rs:46
|
||||||
msgid ""
|
msgid ""
|
||||||
"To make the key available for search by e-mail address, you can verify it "
|
"To make the key available for search by e-mail address, you can verify it "
|
||||||
"belongs to you:"
|
"belongs to you:"
|
||||||
|
@ -266,11 +272,11 @@ msgstr ""
|
||||||
"Um den Schlüssel für eine Suche per E-Mail Adresse verfügbar zu machen, muss "
|
"Um den Schlüssel für eine Suche per E-Mail Adresse verfügbar zu machen, muss "
|
||||||
"die entsprechende Adresse bestätigt werden:"
|
"die entsprechende Adresse bestätigt werden:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:46
|
#: src/gettext_strings.rs:47
|
||||||
msgid "Verification Pending"
|
msgid "Verification Pending"
|
||||||
msgstr "Bestätigung wird erwartet"
|
msgstr "Bestätigung wird erwartet"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:47
|
#: src/gettext_strings.rs:48
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>Note:</strong> Some providers delay e-mails for up to 15 minutes to "
|
"<strong>Note:</strong> Some providers delay e-mails for up to 15 minutes to "
|
||||||
"prevent spam. Please be patient."
|
"prevent spam. Please be patient."
|
||||||
|
@ -278,11 +284,11 @@ msgstr ""
|
||||||
"<strong>Hinweis:</strong> Manche Provider verzögern den Empfang von Emails "
|
"<strong>Hinweis:</strong> Manche Provider verzögern den Empfang von Emails "
|
||||||
"um bis zu 15 Minuten, um Spam zu verhindern. Bitte einen Moment Geduld."
|
"um bis zu 15 Minuten, um Spam zu verhindern. Bitte einen Moment Geduld."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:48
|
#: src/gettext_strings.rs:49
|
||||||
msgid "Send Verification Mail"
|
msgid "Send Verification Mail"
|
||||||
msgstr "Bestätigungs-E-Mail senden"
|
msgstr "Bestätigungs-E-Mail senden"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:49
|
#: src/gettext_strings.rs:50
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key contains one identity that could not be parsed as an email address."
|
"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."
|
"<br /> This identity can't be published on <span class=\"brand\">keys."
|
||||||
|
@ -294,7 +300,7 @@ msgstr ""
|
||||||
"\">keys.openpgp.org</span> veröffentlicht werden. (<a href=\"/about/faq#non-"
|
"\">keys.openpgp.org</span> veröffentlicht werden. (<a href=\"/about/faq#non-"
|
||||||
"email-uids\" target=\"_blank\">warum?</a>)"
|
"email-uids\" target=\"_blank\">warum?</a>)"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:50
|
#: src/gettext_strings.rs:51
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key contains {{ count_unparsed }} identities that could not be parsed "
|
"This key contains {{ count_unparsed }} identities that could not be parsed "
|
||||||
"as an email address.<br /> These identities can't be published on <span "
|
"as an email address.<br /> These identities can't be published on <span "
|
||||||
|
@ -306,7 +312,7 @@ msgstr ""
|
||||||
"auf <span class=\"brand\">keys.openpgp.org</span> veröffentlicht werden. (<a "
|
"auf <span class=\"brand\">keys.openpgp.org</span> veröffentlicht werden. (<a "
|
||||||
"href=\"/about/faq#non-email-uids\" target=\"_blank\">warum?</a>)"
|
"href=\"/about/faq#non-email-uids\" target=\"_blank\">warum?</a>)"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:51
|
#: src/gettext_strings.rs:52
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key contains one revoked identity, which is not published. (<a href=\"/"
|
"This key contains one revoked identity, which is not published. (<a href=\"/"
|
||||||
"about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
|
"about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
|
||||||
|
@ -315,7 +321,7 @@ msgstr ""
|
||||||
"veröffentlicht. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Warum?"
|
"veröffentlicht. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Warum?"
|
||||||
"</a>)"
|
"</a>)"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:52
|
#: src/gettext_strings.rs:53
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key contains {{ count_revoked }} revoked identities, which are not "
|
"This key contains {{ count_revoked }} revoked identities, which are not "
|
||||||
"published. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
|
"published. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
|
||||||
|
@ -324,11 +330,11 @@ msgstr ""
|
||||||
"werden nicht veröffentlicht. (<a href=\"/about/faq#revoked-uids\" target="
|
"werden nicht veröffentlicht. (<a href=\"/about/faq#revoked-uids\" target="
|
||||||
"\"_blank\">Warum?</a>)"
|
"\"_blank\">Warum?</a>)"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:53
|
#: src/gettext_strings.rs:54
|
||||||
msgid "Your keys have been successfully uploaded:"
|
msgid "Your keys have been successfully uploaded:"
|
||||||
msgstr "Schlüssel erfolgreich hochgeladen:"
|
msgstr "Schlüssel erfolgreich hochgeladen:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:54
|
#: src/gettext_strings.rs:55
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>Note:</strong> To make keys searchable by address, you must upload "
|
"<strong>Note:</strong> To make keys searchable by address, you must upload "
|
||||||
"them individually."
|
"them individually."
|
||||||
|
@ -336,11 +342,11 @@ msgstr ""
|
||||||
"<strong>Hinweis:</strong> Schlüssel müssen einzeln hochgeladen werden, um "
|
"<strong>Hinweis:</strong> Schlüssel müssen einzeln hochgeladen werden, um "
|
||||||
"sie für die Suche per E-Mail-Adresse zu bestätigen."
|
"sie für die Suche per E-Mail-Adresse zu bestätigen."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:55
|
#: src/gettext_strings.rs:56
|
||||||
msgid "Verifying your email address…"
|
msgid "Verifying your email address…"
|
||||||
msgstr "E-Mail Adresse wird bestätigt..."
|
msgstr "E-Mail Adresse wird bestätigt..."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:56
|
#: src/gettext_strings.rs:57
|
||||||
msgid ""
|
msgid ""
|
||||||
"If the process doesn't complete after a few seconds, <input type=\"submit\" "
|
"If the process doesn't complete after a few seconds, <input type=\"submit\" "
|
||||||
"class=\"textbutton\" value=\"click here\" />."
|
"class=\"textbutton\" value=\"click here\" />."
|
||||||
|
@ -348,15 +354,15 @@ msgstr ""
|
||||||
"Wenn der Vorgang nicht in einigen Sekunden erfolgreich ist, <input type="
|
"Wenn der Vorgang nicht in einigen Sekunden erfolgreich ist, <input type="
|
||||||
"\"submit\" class=\"textbutton\" value=\"klicke hier\"/>."
|
"\"submit\" class=\"textbutton\" value=\"klicke hier\"/>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:58
|
#: src/gettext_strings.rs:59
|
||||||
msgid "Manage your key on {{domain}}"
|
msgid "Manage your key on {{domain}}"
|
||||||
msgstr "Schlüssel-Verwaltung auf {{domain}}"
|
msgstr "Schlüssel-Verwaltung auf {{domain}}"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:60
|
#: src/gettext_strings.rs:61
|
||||||
msgid "Hi,"
|
msgid "Hi,"
|
||||||
msgstr "Hi,"
|
msgstr "Hi,"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:61
|
#: src/gettext_strings.rs:62
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from <a rel=\"nofollow\" href="
|
"this is an automated message from <a rel=\"nofollow\" href="
|
||||||
"\"{{ base_uri }}\" style=\"text-decoration:none; color: "
|
"\"{{ base_uri }}\" style=\"text-decoration:none; color: "
|
||||||
|
@ -366,22 +372,22 @@ msgstr ""
|
||||||
"\"{{ base_uri }}\" style=\"text-decoration:none; color: "
|
"\"{{ base_uri }}\" style=\"text-decoration:none; color: "
|
||||||
"#333\"><tt>{{ domain }}</tt></a>."
|
"#333\"><tt>{{ domain }}</tt></a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:62
|
#: src/gettext_strings.rs:63
|
||||||
msgid "If you didn't request this message, please ignore it."
|
msgid "If you didn't request this message, please ignore it."
|
||||||
msgstr "Falls dies unerwartet ist, bitte die Nachricht ignorieren."
|
msgstr "Falls dies unerwartet ist, bitte die Nachricht ignorieren."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:63
|
#: src/gettext_strings.rs:64
|
||||||
msgid "OpenPGP key: <tt>{{ primary_fp }}</tt>"
|
msgid "OpenPGP key: <tt>{{ primary_fp }}</tt>"
|
||||||
msgstr "OpenPGP Schlüssel: <tt>{{ primary_fp }}</tt>"
|
msgstr "OpenPGP Schlüssel: <tt>{{ primary_fp }}</tt>"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:64
|
#: src/gettext_strings.rs:65
|
||||||
msgid ""
|
msgid ""
|
||||||
"To manage and delete listed addresses on this key, please follow the link "
|
"To manage and delete listed addresses on this key, please follow the link "
|
||||||
"below:"
|
"below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Du kannst die Identitäten dieses Schlüssels unter folgendem Link verwalten:"
|
"Du kannst die Identitäten dieses Schlüssels unter folgendem Link verwalten:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:65
|
#: src/gettext_strings.rs:66
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/"
|
"You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/"
|
||||||
"about</a>."
|
"about</a>."
|
||||||
|
@ -389,7 +395,7 @@ msgstr ""
|
||||||
"Weitere Informationen findest du unter <a href=\"{{base_uri}}/about"
|
"Weitere Informationen findest du unter <a href=\"{{base_uri}}/about"
|
||||||
"\">{{ domain }}/about</a>."
|
"\">{{ domain }}/about</a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:66
|
#: src/gettext_strings.rs:67
|
||||||
msgid ""
|
msgid ""
|
||||||
"Greetings from the <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-"
|
"Greetings from the <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-"
|
||||||
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
||||||
|
@ -397,7 +403,7 @@ msgstr ""
|
||||||
"Das <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-decoration:none; "
|
"Das <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-decoration:none; "
|
||||||
"color: #333\"><tt>keys.openpgp.org</tt></a> Team"
|
"color: #333\"><tt>keys.openpgp.org</tt></a> Team"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:69
|
#: src/gettext_strings.rs:70
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from {{domain}}. If you didn't\n"
|
"this is an automated message from {{domain}}. If you didn't\n"
|
||||||
"request this message, please ignore it."
|
"request this message, please ignore it."
|
||||||
|
@ -405,30 +411,30 @@ msgstr ""
|
||||||
"dies ist eine automatisierte Nachricht von {{domain}}. Falls dies unerwartet "
|
"dies ist eine automatisierte Nachricht von {{domain}}. Falls dies unerwartet "
|
||||||
"ist, bitte die Nachricht ignorieren."
|
"ist, bitte die Nachricht ignorieren."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:70
|
#: src/gettext_strings.rs:71
|
||||||
msgid "OpenPGP key: {{primary_fp}}"
|
msgid "OpenPGP key: {{primary_fp}}"
|
||||||
msgstr "OpenPGP Schlüssel: {{primary_fp}}"
|
msgstr "OpenPGP Schlüssel: {{primary_fp}}"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:71
|
#: src/gettext_strings.rs:72
|
||||||
msgid ""
|
msgid ""
|
||||||
"To manage and delete listed addresses on this key, please follow\n"
|
"To manage and delete listed addresses on this key, please follow\n"
|
||||||
"the link below:"
|
"the link below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Du kannst die Identitäten dieses Schlüssels unter folgendem Link verwalten:"
|
"Du kannst die Identitäten dieses Schlüssels unter folgendem Link verwalten:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:72
|
#: src/gettext_strings.rs:73
|
||||||
msgid "You can find more info at {{base_uri}}/about"
|
msgid "You can find more info at {{base_uri}}/about"
|
||||||
msgstr "Weiter Informationen findest du unter {{base_uri}}/about"
|
msgstr "Weiter Informationen findest du unter {{base_uri}}/about"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:73
|
#: src/gettext_strings.rs:74
|
||||||
msgid "Greetings from the keys.openpgp.org team"
|
msgid "Greetings from the keys.openpgp.org team"
|
||||||
msgstr "Das keys.openpgp.org Team"
|
msgstr "Das keys.openpgp.org Team"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:75
|
#: src/gettext_strings.rs:76
|
||||||
msgid "Verify {{userid}} for your key on {{domain}}"
|
msgid "Verify {{userid}} for your key on {{domain}}"
|
||||||
msgstr "Bestätige {{userid}} für deinen Schlüssel auf {{domain}}"
|
msgstr "Bestätige {{userid}} für deinen Schlüssel auf {{domain}}"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:78
|
#: src/gettext_strings.rs:79
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" "
|
"this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" "
|
||||||
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
||||||
|
@ -439,11 +445,11 @@ msgstr ""
|
||||||
"#333\"><tt>{{ domain }}</tt></a>. Falls dies unerwartet ist, bitte die "
|
"#333\"><tt>{{ domain }}</tt></a>. Falls dies unerwartet ist, bitte die "
|
||||||
"Nachricht ignorieren."
|
"Nachricht ignorieren."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:79
|
#: src/gettext_strings.rs:80
|
||||||
msgid "OpenPGP key: <tt>{{primary_fp}}</tt>"
|
msgid "OpenPGP key: <tt>{{primary_fp}}</tt>"
|
||||||
msgstr "OpenPGP Schlüssel: <tt>{{primary_fp}}</tt>"
|
msgstr "OpenPGP Schlüssel: <tt>{{primary_fp}}</tt>"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:80
|
#: src/gettext_strings.rs:81
|
||||||
msgid ""
|
msgid ""
|
||||||
"To let others find this key from your email address \"<a rel=\"nofollow\" "
|
"To let others find this key from your email address \"<a rel=\"nofollow\" "
|
||||||
"href=\"#\" style=\"text-decoration:none; color: #333\">{{userid}}</a>\", "
|
"href=\"#\" style=\"text-decoration:none; color: #333\">{{userid}}</a>\", "
|
||||||
|
@ -453,7 +459,7 @@ msgstr ""
|
||||||
"\"text-decoration:none; color: #333\">{{userid}}</a>\" verfügbar zu machen, "
|
"\"text-decoration:none; color: #333\">{{userid}}</a>\" verfügbar zu machen, "
|
||||||
"klicke diesen Link:"
|
"klicke diesen Link:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:81
|
#: src/gettext_strings.rs:82
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can find more info at <a href=\"{{base_uri}}/about\">{{domain}}/about</"
|
"You can find more info at <a href=\"{{base_uri}}/about\">{{domain}}/about</"
|
||||||
"a>."
|
"a>."
|
||||||
|
@ -461,7 +467,7 @@ msgstr ""
|
||||||
"Weiter Informationen findest du unter <a href=\"{{base_uri}}/about"
|
"Weiter Informationen findest du unter <a href=\"{{base_uri}}/about"
|
||||||
"\">{{domain}}/about</a>."
|
"\">{{domain}}/about</a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:82
|
#: src/gettext_strings.rs:83
|
||||||
msgid ""
|
msgid ""
|
||||||
"Greetings from the <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-"
|
"Greetings from the <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-"
|
||||||
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
||||||
|
@ -469,7 +475,7 @@ msgstr ""
|
||||||
"Grüße vom <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-decoration:"
|
"Grüße vom <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-decoration:"
|
||||||
"none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
"none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:87
|
#: src/gettext_strings.rs:88
|
||||||
msgid ""
|
msgid ""
|
||||||
"To let others find this key from your email address \"{{userid}}\",\n"
|
"To let others find this key from your email address \"{{userid}}\",\n"
|
||||||
"please follow the link below:"
|
"please follow the link below:"
|
||||||
|
@ -478,11 +484,11 @@ msgstr ""
|
||||||
"machen,\n"
|
"machen,\n"
|
||||||
"klicke diesen Link:"
|
"klicke diesen Link:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:91
|
#: src/gettext_strings.rs:92
|
||||||
msgid "Your key upload on {{domain}}"
|
msgid "Your key upload on {{domain}}"
|
||||||
msgstr "Hochgeladener Schlüssel auf {{domain}}"
|
msgstr "Hochgeladener Schlüssel auf {{domain}}"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:94
|
#: src/gettext_strings.rs:95
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" "
|
"this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" "
|
||||||
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
||||||
|
@ -493,7 +499,7 @@ msgstr ""
|
||||||
"#333\"><tt>{{ domain }}</tt></a>. Falls dies unerwartet ist, bitte die "
|
"#333\"><tt>{{ domain }}</tt></a>. Falls dies unerwartet ist, bitte die "
|
||||||
"Nachricht ignorieren."
|
"Nachricht ignorieren."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:96
|
#: src/gettext_strings.rs:97
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key was just uploaded for the first time, and is now published without "
|
"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 "
|
"identity information. If you want to allow others to find this key by e-mail "
|
||||||
|
@ -503,7 +509,7 @@ msgstr ""
|
||||||
"Identitäten veröffentlicht. Um diesen Schlüssel für eine Suche nach E-Mail "
|
"Identitäten veröffentlicht. Um diesen Schlüssel für eine Suche nach E-Mail "
|
||||||
"Adresse verfügbar zu machen, folge diesem Link:"
|
"Adresse verfügbar zu machen, folge diesem Link:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:101
|
#: src/gettext_strings.rs:102
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from {{domain}}. If you didn't upload your key\n"
|
"this is an automated message from {{domain}}. If you didn't upload your key\n"
|
||||||
"there, please ignore this message."
|
"there, please ignore this message."
|
||||||
|
@ -512,7 +518,7 @@ msgstr ""
|
||||||
"ist,\n"
|
"ist,\n"
|
||||||
"bitte die Nachricht ignorieren."
|
"bitte die Nachricht ignorieren."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:103
|
#: src/gettext_strings.rs:104
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key was just uploaded for the first time, and is now published without\n"
|
"This key was just uploaded for the first time, and is now published without\n"
|
||||||
"identity information. If you want to allow others to find this key by e-"
|
"identity information. If you want to allow others to find this key by e-"
|
||||||
|
|
256
po/hagrid/en.po
256
po/hagrid/en.po
|
@ -12,15 +12,15 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/mail.rs:105
|
#: src/mail.rs:104
|
||||||
msgid "Verify {} for your key on {}"
|
msgid "Verify {} for your key on {}"
|
||||||
msgstr "Verify {} for your key on {}"
|
msgstr "Verify {} for your key on {}"
|
||||||
|
|
||||||
#: src/mail.rs:132
|
#: src/mail.rs:131
|
||||||
msgid "Manage your key on {}"
|
msgid "Manage your key on {}"
|
||||||
msgstr "Manage your key on {}"
|
msgstr "Manage your key on {}"
|
||||||
|
|
||||||
#: src/mail.rs:159
|
#: src/mail.rs:158
|
||||||
msgid "Your key upload on {}"
|
msgid "Your key upload on {}"
|
||||||
msgstr "Your key upload on {}"
|
msgstr "Your key upload on {}"
|
||||||
|
|
||||||
|
@ -76,14 +76,20 @@ msgid "News:"
|
||||||
msgstr "News:"
|
msgstr "News:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:15
|
#: src/gettext_strings.rs:15
|
||||||
|
msgid ""
|
||||||
|
"<a href=\"/about/news#2019-09-12-three-months-later\">Three months after "
|
||||||
|
"launch ✨</a> (2019-09-12)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:16
|
||||||
msgid "v{{ version }} built from"
|
msgid "v{{ version }} built from"
|
||||||
msgstr "v{{ version }} built from"
|
msgstr "v{{ version }} built from"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:16
|
#: src/gettext_strings.rs:17
|
||||||
msgid "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
msgid "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
||||||
msgstr "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
msgstr "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:17
|
#: src/gettext_strings.rs:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"Background image retrieved from <a href=\"https://www.toptal.com/designers/"
|
"Background image retrieved from <a href=\"https://www.toptal.com/designers/"
|
||||||
"subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0"
|
"subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0"
|
||||||
|
@ -91,69 +97,69 @@ msgstr ""
|
||||||
"Background image retrieved from <a href=\"https://www.toptal.com/designers/"
|
"Background image retrieved from <a href=\"https://www.toptal.com/designers/"
|
||||||
"subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0"
|
"subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:18
|
#: src/gettext_strings.rs:19
|
||||||
msgid "Maintenance Mode"
|
msgid "Maintenance Mode"
|
||||||
msgstr "Maintenance Mode"
|
msgstr "Maintenance Mode"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:19
|
#: src/gettext_strings.rs:20
|
||||||
msgid "Manage your key"
|
msgid "Manage your key"
|
||||||
msgstr "Manage your key"
|
msgstr "Manage your key"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:20
|
#: src/gettext_strings.rs:21
|
||||||
msgid "Enter any verified e-mail address of your key"
|
msgid "Enter any verified e-mail address of your key"
|
||||||
msgstr "Enter any verified e-mail address of your key"
|
msgstr "Enter any verified e-mail address of your key"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:21
|
#: src/gettext_strings.rs:22
|
||||||
msgid "Send link"
|
msgid "Send link"
|
||||||
msgstr "Send link"
|
msgstr "Send link"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:22
|
|
||||||
msgid ""
|
|
||||||
"We will send you an e-mail with a link you can use to remove any of your e-"
|
|
||||||
"mail addresses from search."
|
|
||||||
msgstr ""
|
|
||||||
"We will send you an e-mail with a link you can use to remove any of your e-"
|
|
||||||
"mail addresses from search."
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:23
|
#: src/gettext_strings.rs:23
|
||||||
msgid ""
|
msgid ""
|
||||||
|
"We will send you an e-mail with a link you can use to remove any of your e-"
|
||||||
|
"mail addresses from search."
|
||||||
|
msgstr ""
|
||||||
|
"We will send you an e-mail with a link you can use to remove any of your e-"
|
||||||
|
"mail addresses from search."
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:24
|
||||||
|
msgid ""
|
||||||
"Managing the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
"Managing the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
||||||
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Managing the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
"Managing the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
||||||
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:24
|
#: src/gettext_strings.rs:25
|
||||||
msgid "Your key is published with the following identity information:"
|
msgid "Your key is published with the following identity information:"
|
||||||
msgstr "Your key is published with the following identity information:"
|
msgstr "Your key is published with the following identity information:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:25
|
#: src/gettext_strings.rs:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:26
|
|
||||||
msgid ""
|
|
||||||
"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."
|
|
||||||
msgstr ""
|
|
||||||
"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."
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:27
|
#: src/gettext_strings.rs:27
|
||||||
msgid ""
|
msgid ""
|
||||||
|
"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."
|
||||||
|
msgstr ""
|
||||||
|
"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."
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:28
|
||||||
|
msgid ""
|
||||||
"Your key is published as only non-identity information. (<a href=\"/about\" "
|
"Your key is published as only non-identity information. (<a href=\"/about\" "
|
||||||
"target=\"_blank\">what does this mean?</a>)"
|
"target=\"_blank\">what does this mean?</a>)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Your key is published as only non-identity information. (<a href=\"/about\" "
|
"Your key is published as only non-identity information. (<a href=\"/about\" "
|
||||||
"target=\"_blank\">what does this mean?</a>)"
|
"target=\"_blank\">what does this mean?</a>)"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:28
|
#: src/gettext_strings.rs:29
|
||||||
msgid "To add an address, <a href=\"/upload\">upload</a> the key again."
|
msgid "To add an address, <a href=\"/upload\">upload</a> the key again."
|
||||||
msgstr "To add an address, <a href=\"/upload\">upload</a> the key again."
|
msgstr "To add an address, <a href=\"/upload\">upload</a> the key again."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:29
|
#: src/gettext_strings.rs:30
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
"We have sent an email with further instructions to <span class=\"email"
|
"We have sent an email with further instructions to <span class=\"email"
|
||||||
|
@ -162,11 +168,11 @@ msgstr ""
|
||||||
"We have sent an email with further instructions to <span class=\"email"
|
"We have sent an email with further instructions to <span class=\"email"
|
||||||
"\">{{ address }}</span>"
|
"\">{{ address }}</span>"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:30
|
#: src/gettext_strings.rs:31
|
||||||
msgid "This address was already verified."
|
msgid "This address was already verified."
|
||||||
msgstr "This address was already verified."
|
msgstr "This address was already verified."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:31
|
#: src/gettext_strings.rs:32
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your key <span class=\"fingerprint\">{{ key_fpr }}</span> is now published "
|
"Your key <span class=\"fingerprint\">{{ key_fpr }}</span> is now published "
|
||||||
"for the identity <a href=\"{{userid_link}}\" target=\"_blank\"><span class="
|
"for the identity <a href=\"{{userid_link}}\" target=\"_blank\"><span class="
|
||||||
|
@ -176,48 +182,48 @@ msgstr ""
|
||||||
"for the identity <a href=\"{{userid_link}}\" target=\"_blank\"><span class="
|
"for the identity <a href=\"{{userid_link}}\" target=\"_blank\"><span class="
|
||||||
"\"email\">{{ userid }}</span></a>."
|
"\"email\">{{ userid }}</span></a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:32
|
#: src/gettext_strings.rs:33
|
||||||
msgid "Verification failed! Perhaps the link you used was expired?"
|
msgid "Verification failed! Perhaps the link you used was expired?"
|
||||||
msgstr "Verification failed! Perhaps the link you used was expired?"
|
msgstr "Verification failed! Perhaps the link you used was expired?"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:33
|
#: src/gettext_strings.rs:34
|
||||||
msgid "You can <a href=\"/upload\">try uploading again</a>."
|
msgid "You can <a href=\"/upload\">try uploading again</a>."
|
||||||
msgstr "You can <a href=\"/upload\">try uploading again</a>."
|
msgstr "You can <a href=\"/upload\">try uploading again</a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:34
|
#: src/gettext_strings.rs:35
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Upload your key"
|
msgid "Upload your key"
|
||||||
msgstr "Manage your key"
|
msgstr "Manage your key"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:35
|
#: src/gettext_strings.rs:36
|
||||||
msgid "Your public key"
|
msgid "Your public key"
|
||||||
msgstr "Your public key"
|
msgstr "Your public key"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:36
|
#: src/gettext_strings.rs:37
|
||||||
msgid "Upload"
|
msgid "Upload"
|
||||||
msgstr "Upload"
|
msgstr "Upload"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:37
|
|
||||||
msgid ""
|
|
||||||
"Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and "
|
|
||||||
"<a target=\"_blank\" href=\"/about/usage\">usage guide</a>!"
|
|
||||||
msgstr ""
|
|
||||||
"Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and "
|
|
||||||
"<a target=\"_blank\" href=\"/about/usage\">usage guide</a>!"
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:38
|
#: src/gettext_strings.rs:38
|
||||||
msgid ""
|
msgid ""
|
||||||
|
"Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and "
|
||||||
|
"<a target=\"_blank\" href=\"/about/usage\">usage guide</a>!"
|
||||||
|
msgstr ""
|
||||||
|
"Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and "
|
||||||
|
"<a target=\"_blank\" href=\"/about/usage\">usage guide</a>!"
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:39
|
||||||
|
msgid ""
|
||||||
"You uploaded the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
"You uploaded the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
||||||
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"You uploaded the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
"You uploaded the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" "
|
||||||
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
"target=\"_blank\">{{ key_fpr }}</a></span>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:39
|
#: src/gettext_strings.rs:40
|
||||||
msgid "This key is revoked."
|
msgid "This key is revoked."
|
||||||
msgstr "This key is revoked."
|
msgstr "This key is revoked."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:40
|
#: src/gettext_strings.rs:41
|
||||||
msgid ""
|
msgid ""
|
||||||
"It is published without identity information and can't be made available for "
|
"It is published without identity information and can't be made available for "
|
||||||
"search by e-mail address"
|
"search by e-mail address"
|
||||||
|
@ -225,11 +231,11 @@ msgstr ""
|
||||||
"It is published without identity information and can't be made available for "
|
"It is published without identity information and can't be made available for "
|
||||||
"search by e-mail address"
|
"search by e-mail address"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:41
|
#: src/gettext_strings.rs:42
|
||||||
msgid "what does this mean?"
|
msgid "what does this mean?"
|
||||||
msgstr "what does this mean?"
|
msgstr "what does this mean?"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:42
|
#: src/gettext_strings.rs:43
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key is now published with the following identity information (<a href="
|
"This key is now published with the following identity information (<a href="
|
||||||
"\"/about\" target=\"_blank\">what does this mean?</a>):"
|
"\"/about\" target=\"_blank\">what does this mean?</a>):"
|
||||||
|
@ -237,54 +243,54 @@ msgstr ""
|
||||||
"This key is now published with the following identity information (<a href="
|
"This key is now published with the following identity information (<a href="
|
||||||
"\"/about\" target=\"_blank\">what does this mean?</a>):"
|
"\"/about\" target=\"_blank\">what does this mean?</a>):"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:43
|
#: src/gettext_strings.rs:44
|
||||||
msgid "Published"
|
msgid "Published"
|
||||||
msgstr "Published"
|
msgstr "Published"
|
||||||
|
|
||||||
#: 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 ""
|
|
||||||
"This key is now published with only non-identity information (<a href=\"/"
|
|
||||||
"about\" target=\"_blank\">what does this mean?</a>)"
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:45
|
#: src/gettext_strings.rs:45
|
||||||
msgid ""
|
msgid ""
|
||||||
|
"This key is now published with only non-identity information (<a href=\"/"
|
||||||
|
"about\" target=\"_blank\">what does this mean?</a>)"
|
||||||
|
msgstr ""
|
||||||
|
"This key is now published with only non-identity information (<a href=\"/"
|
||||||
|
"about\" target=\"_blank\">what does this mean?</a>)"
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:46
|
||||||
|
msgid ""
|
||||||
"To make the key available for search by e-mail address, you can verify it "
|
"To make the key available for search by e-mail address, you can verify it "
|
||||||
"belongs to you:"
|
"belongs to you:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"To make the key available for search by e-mail address, you can verify it "
|
"To make the key available for search by e-mail address, you can verify it "
|
||||||
"belongs to you:"
|
"belongs to you:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:46
|
#: src/gettext_strings.rs:47
|
||||||
msgid "Verification Pending"
|
msgid "Verification Pending"
|
||||||
msgstr "Verification Pending"
|
msgstr "Verification Pending"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:47
|
#: src/gettext_strings.rs:48
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>Note:</strong> Some providers delay e-mails for up to 15 minutes to "
|
"<strong>Note:</strong> Some providers delay e-mails for up to 15 minutes to "
|
||||||
"prevent spam. Please be patient."
|
"prevent spam. Please be patient."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:48
|
#: src/gettext_strings.rs:49
|
||||||
msgid "Send Verification Mail"
|
msgid "Send Verification Mail"
|
||||||
msgstr "Send Verification Mail"
|
msgstr "Send Verification Mail"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:49
|
|
||||||
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 ""
|
|
||||||
"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>)"
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:50
|
#: src/gettext_strings.rs:50
|
||||||
msgid ""
|
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 ""
|
||||||
|
"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>)"
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:51
|
||||||
|
msgid ""
|
||||||
"This key contains {{ count_unparsed }} identities that could not be parsed "
|
"This key contains {{ count_unparsed }} identities that could not be parsed "
|
||||||
"as an email address.<br /> These identities can't be published on <span "
|
"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-"
|
"class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-"
|
||||||
|
@ -295,14 +301,14 @@ msgstr ""
|
||||||
"class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-"
|
"class=\"brand\">keys.openpgp.org</span>. (<a href=\"/about/faq#non-email-"
|
||||||
"uids\" target=\"_blank\">why?</a>)"
|
"uids\" target=\"_blank\">why?</a>)"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:51
|
#: src/gettext_strings.rs:52
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key contains one revoked identity, which is not published. (<a href=\"/"
|
"This key contains one revoked identity, which is not published. (<a href=\"/"
|
||||||
"about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
|
"about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
|
||||||
msgstr "This key contains one revoked identity, which is not published."
|
msgstr "This key contains one revoked identity, which is not published."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:52
|
#: src/gettext_strings.rs:53
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key contains {{ count_revoked }} revoked identities, which are not "
|
"This key contains {{ count_revoked }} revoked identities, which are not "
|
||||||
|
@ -311,11 +317,11 @@ msgstr ""
|
||||||
"This key contains {{ count_revoked }} revoked identities, which are not "
|
"This key contains {{ count_revoked }} revoked identities, which are not "
|
||||||
"published."
|
"published."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:53
|
#: src/gettext_strings.rs:54
|
||||||
msgid "Your keys have been successfully uploaded:"
|
msgid "Your keys have been successfully uploaded:"
|
||||||
msgstr "Your keys have been successfully uploaded:"
|
msgstr "Your keys have been successfully uploaded:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:54
|
#: src/gettext_strings.rs:55
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>Note:</strong> To make keys searchable by address, you must upload "
|
"<strong>Note:</strong> To make keys searchable by address, you must upload "
|
||||||
"them individually."
|
"them individually."
|
||||||
|
@ -323,11 +329,11 @@ msgstr ""
|
||||||
"<strong>Note:</strong> To make keys searchable by address, you must upload "
|
"<strong>Note:</strong> To make keys searchable by address, you must upload "
|
||||||
"them individually."
|
"them individually."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:55
|
#: src/gettext_strings.rs:56
|
||||||
msgid "Verifying your email address…"
|
msgid "Verifying your email address…"
|
||||||
msgstr "Verifying your email address…"
|
msgstr "Verifying your email address…"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:56
|
#: src/gettext_strings.rs:57
|
||||||
msgid ""
|
msgid ""
|
||||||
"If the process doesn't complete after a few seconds, <input type=\"submit\" "
|
"If the process doesn't complete after a few seconds, <input type=\"submit\" "
|
||||||
"class=\"textbutton\" value=\"click here\" />."
|
"class=\"textbutton\" value=\"click here\" />."
|
||||||
|
@ -335,15 +341,15 @@ msgstr ""
|
||||||
"If the process doesn't complete after a few seconds, <input type=\"submit\" "
|
"If the process doesn't complete after a few seconds, <input type=\"submit\" "
|
||||||
"class=\"textbutton\" value=\"click here\" />."
|
"class=\"textbutton\" value=\"click here\" />."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:58
|
#: src/gettext_strings.rs:59
|
||||||
msgid "Manage your key on {{domain}}"
|
msgid "Manage your key on {{domain}}"
|
||||||
msgstr "Manage your key on {{domain}}"
|
msgstr "Manage your key on {{domain}}"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:60
|
#: src/gettext_strings.rs:61
|
||||||
msgid "Hi,"
|
msgid "Hi,"
|
||||||
msgstr "Hi,"
|
msgstr "Hi,"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:61
|
#: src/gettext_strings.rs:62
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from <a rel=\"nofollow\" href="
|
"this is an automated message from <a rel=\"nofollow\" href="
|
||||||
"\"{{ base_uri }}\" style=\"text-decoration:none; color: "
|
"\"{{ base_uri }}\" style=\"text-decoration:none; color: "
|
||||||
|
@ -353,39 +359,39 @@ msgstr ""
|
||||||
"\"{{ base_uri }}\" style=\"text-decoration:none; color: "
|
"\"{{ base_uri }}\" style=\"text-decoration:none; color: "
|
||||||
"#333\"><tt>{{ domain }}</tt></a>."
|
"#333\"><tt>{{ domain }}</tt></a>."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:62
|
#: src/gettext_strings.rs:63
|
||||||
msgid "If you didn't request this message, please ignore it."
|
msgid "If you didn't request this message, please ignore it."
|
||||||
msgstr "If you didn't request this message, please ignore it."
|
msgstr "If you didn't request this message, please ignore it."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:63
|
#: src/gettext_strings.rs:64
|
||||||
msgid "OpenPGP key: <tt>{{ primary_fp }}</tt>"
|
msgid "OpenPGP key: <tt>{{ primary_fp }}</tt>"
|
||||||
msgstr "OpenPGP key: <tt>{{ primary_fp }}</tt>"
|
msgstr "OpenPGP key: <tt>{{ primary_fp }}</tt>"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:64
|
|
||||||
msgid ""
|
|
||||||
"To manage and delete listed addresses on this key, please follow the link "
|
|
||||||
"below:"
|
|
||||||
msgstr ""
|
|
||||||
"To manage and delete listed addresses on this key, please follow the link "
|
|
||||||
"below:"
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:65
|
#: src/gettext_strings.rs:65
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/"
|
"To manage and delete listed addresses on this key, please follow the link "
|
||||||
"about</a>."
|
"below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/"
|
"To manage and delete listed addresses on this key, please follow the link "
|
||||||
"about</a>."
|
"below:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:66
|
#: src/gettext_strings.rs:66
|
||||||
msgid ""
|
msgid ""
|
||||||
|
"You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/"
|
||||||
|
"about</a>."
|
||||||
|
msgstr ""
|
||||||
|
"You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/"
|
||||||
|
"about</a>."
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:67
|
||||||
|
msgid ""
|
||||||
"Greetings from the <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-"
|
"Greetings from the <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-"
|
||||||
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Greetings from the <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-"
|
"Greetings from the <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-"
|
||||||
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:69
|
#: src/gettext_strings.rs:70
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from {{domain}}. If you didn't\n"
|
"this is an automated message from {{domain}}. If you didn't\n"
|
||||||
|
@ -393,11 +399,11 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"this is an automated message from {{domain}}. If you didn't upload your key"
|
"this is an automated message from {{domain}}. If you didn't upload your key"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:70
|
#: src/gettext_strings.rs:71
|
||||||
msgid "OpenPGP key: {{primary_fp}}"
|
msgid "OpenPGP key: {{primary_fp}}"
|
||||||
msgstr "OpenPGP key: {{primary_fp}}"
|
msgstr "OpenPGP key: {{primary_fp}}"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:71
|
#: src/gettext_strings.rs:72
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
"To manage and delete listed addresses on this key, please follow\n"
|
"To manage and delete listed addresses on this key, please follow\n"
|
||||||
|
@ -406,19 +412,19 @@ msgstr ""
|
||||||
"To manage and delete listed addresses on this key, please follow the link "
|
"To manage and delete listed addresses on this key, please follow the link "
|
||||||
"below:"
|
"below:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:72
|
#: src/gettext_strings.rs:73
|
||||||
msgid "You can find more info at {{base_uri}}/about"
|
msgid "You can find more info at {{base_uri}}/about"
|
||||||
msgstr "You can find more info at {{base_uri}}/about"
|
msgstr "You can find more info at {{base_uri}}/about"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:73
|
#: src/gettext_strings.rs:74
|
||||||
msgid "Greetings from the keys.openpgp.org team"
|
msgid "Greetings from the keys.openpgp.org team"
|
||||||
msgstr "Greetings from the keys.openpgp.org team"
|
msgstr "Greetings from the keys.openpgp.org team"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:75
|
#: src/gettext_strings.rs:76
|
||||||
msgid "Verify {{userid}} for your key on {{domain}}"
|
msgid "Verify {{userid}} for your key on {{domain}}"
|
||||||
msgstr "Verify {{userid}} for your key on {{domain}}"
|
msgstr "Verify {{userid}} for your key on {{domain}}"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:78
|
#: src/gettext_strings.rs:79
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" "
|
"this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" "
|
||||||
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
||||||
|
@ -428,48 +434,48 @@ msgstr ""
|
||||||
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
||||||
"didn't request this message, please ignore it."
|
"didn't request this message, please ignore it."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:79
|
#: src/gettext_strings.rs:80
|
||||||
msgid "OpenPGP key: <tt>{{primary_fp}}</tt>"
|
msgid "OpenPGP key: <tt>{{primary_fp}}</tt>"
|
||||||
msgstr "OpenPGP key: <tt>{{primary_fp}}</tt>"
|
msgstr "OpenPGP key: <tt>{{primary_fp}}</tt>"
|
||||||
|
|
||||||
#: 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 ""
|
|
||||||
"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:"
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:81
|
#: src/gettext_strings.rs:81
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can find more info at <a href=\"{{base_uri}}/about\">{{domain}}/about</"
|
"To let others find this key from your email address \"<a rel=\"nofollow\" "
|
||||||
"a>."
|
"href=\"#\" style=\"text-decoration:none; color: #333\">{{userid}}</a>\", "
|
||||||
|
"please click the link below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"You can find more info at <a href=\"{{base_uri}}/about\">{{domain}}/about</"
|
"To let others find this key from your email address \"<a rel=\"nofollow\" "
|
||||||
"a>."
|
"href=\"#\" style=\"text-decoration:none; color: #333\">{{userid}}</a>\", "
|
||||||
|
"please click the link below:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:82
|
#: src/gettext_strings.rs:82
|
||||||
msgid ""
|
msgid ""
|
||||||
|
"You can find more info at <a href=\"{{base_uri}}/about\">{{domain}}/about</"
|
||||||
|
"a>."
|
||||||
|
msgstr ""
|
||||||
|
"You can find more info at <a href=\"{{base_uri}}/about\">{{domain}}/about</"
|
||||||
|
"a>."
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:83
|
||||||
|
msgid ""
|
||||||
"Greetings from the <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-"
|
"Greetings from the <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-"
|
||||||
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Greetings from the <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-"
|
"Greetings from the <a rel=\"nofollow\" href=\"{{base_uri}}\" style=\"text-"
|
||||||
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
"decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:87
|
#: src/gettext_strings.rs:88
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
"To let others find this key from your email address \"{{userid}}\",\n"
|
"To let others find this key from your email address \"{{userid}}\",\n"
|
||||||
"please follow the link below:"
|
"please follow the link below:"
|
||||||
msgstr "To let others find this key from your email address \"{{userid}}\","
|
msgstr "To let others find this key from your email address \"{{userid}}\","
|
||||||
|
|
||||||
#: src/gettext_strings.rs:91
|
#: src/gettext_strings.rs:92
|
||||||
msgid "Your key upload on {{domain}}"
|
msgid "Your key upload on {{domain}}"
|
||||||
msgstr "Your key upload on {{domain}}"
|
msgstr "Your key upload on {{domain}}"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:94
|
#: src/gettext_strings.rs:95
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" "
|
"this is an automated message from <a rel=\"nofollow\" href=\"{{base_uri}}\" "
|
||||||
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
||||||
|
@ -479,7 +485,7 @@ msgstr ""
|
||||||
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
"style=\"text-decoration:none; color: #333\"><tt>{{domain}}</tt></a>. If you "
|
||||||
"didn't upload your key there, please ignore this message."
|
"didn't upload your key there, please ignore this message."
|
||||||
|
|
||||||
#: src/gettext_strings.rs:96
|
#: src/gettext_strings.rs:97
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key was just uploaded for the first time, and is now published without "
|
"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 "
|
"identity information. If you want to allow others to find this key by e-mail "
|
||||||
|
@ -489,7 +495,7 @@ msgstr ""
|
||||||
"identity information. If you want to allow others to find this key by e-mail "
|
"identity information. If you want to allow others to find this key by e-mail "
|
||||||
"address, please follow this link:"
|
"address, please follow this link:"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:101
|
#: src/gettext_strings.rs:102
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
"this is an automated message from {{domain}}. If you didn't upload your key\n"
|
"this is an automated message from {{domain}}. If you didn't upload your key\n"
|
||||||
|
@ -497,7 +503,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"this is an automated message from {{domain}}. If you didn't upload your key"
|
"this is an automated message from {{domain}}. If you didn't upload your key"
|
||||||
|
|
||||||
#: src/gettext_strings.rs:103
|
#: src/gettext_strings.rs:104
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key was just uploaded for the first time, and is now published without\n"
|
"This key was just uploaded for the first time, and is now published without\n"
|
||||||
|
|
|
@ -12,15 +12,15 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||||
|
|
||||||
#: src/mail.rs:105
|
#: src/mail.rs:104
|
||||||
msgid "Verify {} for your key on {}"
|
msgid "Verify {} for your key on {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/mail.rs:132
|
#: src/mail.rs:131
|
||||||
msgid "Manage your key on {}"
|
msgid "Manage your key on {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/mail.rs:159
|
#: src/mail.rs:158
|
||||||
msgid "Your key upload on {}"
|
msgid "Your key upload on {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -69,270 +69,274 @@ msgid "News:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:15
|
#: src/gettext_strings.rs:15
|
||||||
msgid "v{{ version }} built from"
|
msgid "<a href=\"/about/news#2019-09-12-three-months-later\">Three months after launch ✨</a> (2019-09-12)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:16
|
#: src/gettext_strings.rs:16
|
||||||
msgid "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
msgid "v{{ version }} built from"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:17
|
#: src/gettext_strings.rs:17
|
||||||
msgid "Background image retrieved from <a href=\"https://www.toptal.com/designers/subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0"
|
msgid "Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:18
|
#: src/gettext_strings.rs:18
|
||||||
msgid "Maintenance Mode"
|
msgid "Background image retrieved from <a href=\"https://www.toptal.com/designers/subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:19
|
#: src/gettext_strings.rs:19
|
||||||
msgid "Manage your key"
|
msgid "Maintenance Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:20
|
#: src/gettext_strings.rs:20
|
||||||
msgid "Enter any verified e-mail address of your key"
|
msgid "Manage your key"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:21
|
#: src/gettext_strings.rs:21
|
||||||
msgid "Send link"
|
msgid "Enter any verified e-mail address of your key"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:22
|
#: src/gettext_strings.rs:22
|
||||||
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 "Send link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:23
|
#: src/gettext_strings.rs:23
|
||||||
msgid "Managing the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" target=\"_blank\">{{ key_fpr }}</a></span>."
|
msgid "We will send you an e-mail with a link you can use to remove any of your e-mail addresses from search."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:24
|
#: src/gettext_strings.rs:24
|
||||||
msgid "Your key is published with the following identity information:"
|
msgid "Managing the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" target=\"_blank\">{{ key_fpr }}</a></span>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:25
|
#: src/gettext_strings.rs:25
|
||||||
msgid "Delete"
|
msgid "Your key is published with the following identity information:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:26
|
#: src/gettext_strings.rs:26
|
||||||
msgid "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."
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:27
|
#: src/gettext_strings.rs:27
|
||||||
msgid "Your key is published as only non-identity information. (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)"
|
msgid "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."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:28
|
#: src/gettext_strings.rs:28
|
||||||
msgid "To add an address, <a href=\"/upload\">upload</a> the key again."
|
msgid "Your key is published as only non-identity information. (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:29
|
#: src/gettext_strings.rs:29
|
||||||
msgid "We have sent an email with further instructions to <span class=\"email\">{{ address }}</span>."
|
msgid "To add an address, <a href=\"/upload\">upload</a> the key again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:30
|
#: src/gettext_strings.rs:30
|
||||||
msgid "This address was already verified."
|
msgid "We have sent an email with further instructions to <span class=\"email\">{{ address }}</span>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:31
|
#: src/gettext_strings.rs:31
|
||||||
msgid "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>."
|
msgid "This address was already verified."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:32
|
#: src/gettext_strings.rs:32
|
||||||
msgid "Verification failed! Perhaps the link you used was expired?"
|
msgid "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>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:33
|
#: src/gettext_strings.rs:33
|
||||||
msgid "You can <a href=\"/upload\">try uploading again</a>."
|
msgid "Verification failed! Perhaps the link you used was expired?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:34
|
#: src/gettext_strings.rs:34
|
||||||
msgid "Upload your key"
|
msgid "You can <a href=\"/upload\">try uploading again</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:35
|
#: src/gettext_strings.rs:35
|
||||||
msgid "Your public key"
|
msgid "Upload your key"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:36
|
#: src/gettext_strings.rs:36
|
||||||
msgid "Upload"
|
msgid "Your public key"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:37
|
#: src/gettext_strings.rs:37
|
||||||
msgid "Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and <a target=\"_blank\" href=\"/about/usage\">usage guide</a>!"
|
msgid "Upload"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:38
|
#: src/gettext_strings.rs:38
|
||||||
msgid "You uploaded the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" target=\"_blank\">{{ key_fpr }}</a></span>."
|
msgid "Need more info? Check our <a target=\"_blank\" href=\"/about\">intro</a> and <a target=\"_blank\" href=\"/about/usage\">usage guide</a>!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:39
|
#: src/gettext_strings.rs:39
|
||||||
msgid "This key is revoked."
|
msgid "You uploaded the key <span class=\"fingerprint\"><a href=\"{{ key_link }}\" target=\"_blank\">{{ key_fpr }}</a></span>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:40
|
#: src/gettext_strings.rs:40
|
||||||
msgid "It is published without identity information and can't be made available for search by e-mail address"
|
msgid "This key is revoked."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:41
|
#: src/gettext_strings.rs:41
|
||||||
msgid "what does this mean?"
|
msgid "It is published without identity information and can't be made available for search by e-mail address"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:42
|
#: src/gettext_strings.rs:42
|
||||||
msgid "This key is now published with the following identity information (<a href=\"/about\" target=\"_blank\">what does this mean?</a>):"
|
msgid "what does this mean?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:43
|
#: src/gettext_strings.rs:43
|
||||||
msgid "Published"
|
msgid "This key is now published with the following identity information (<a href=\"/about\" target=\"_blank\">what does this mean?</a>):"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:44
|
#: 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>)"
|
msgid "Published"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:45
|
#: src/gettext_strings.rs:45
|
||||||
msgid "To make the key available for search by e-mail address, you can verify it belongs to you:"
|
msgid "This key is now published with only non-identity information (<a href=\"/about\" target=\"_blank\">what does this mean?</a>)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:46
|
#: src/gettext_strings.rs:46
|
||||||
msgid "Verification Pending"
|
msgid "To make the key available for search by e-mail address, you can verify it belongs to you:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:47
|
#: src/gettext_strings.rs:47
|
||||||
msgid "<strong>Note:</strong> Some providers delay e-mails for up to 15 minutes to prevent spam. Please be patient."
|
msgid "Verification Pending"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:48
|
#: src/gettext_strings.rs:48
|
||||||
msgid "Send Verification Mail"
|
msgid "<strong>Note:</strong> Some providers delay e-mails for up to 15 minutes to prevent spam. Please be patient."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:49
|
#: src/gettext_strings.rs:49
|
||||||
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 "Send Verification Mail"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:50
|
#: src/gettext_strings.rs:50
|
||||||
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>)"
|
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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:51
|
#: src/gettext_strings.rs:51
|
||||||
msgid "This key contains one revoked identity, which is not published. (<a href=\"/about/faq#revoked-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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:52
|
#: 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>)"
|
msgid "This key contains one revoked identity, which is not published. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:53
|
#: src/gettext_strings.rs:53
|
||||||
msgid "Your keys have been successfully uploaded:"
|
msgid "This key contains {{ count_revoked }} revoked identities, which are not published. (<a href=\"/about/faq#revoked-uids\" target=\"_blank\">Why?</a>)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:54
|
#: src/gettext_strings.rs:54
|
||||||
msgid "<strong>Note:</strong> To make keys searchable by address, you must upload them individually."
|
msgid "Your keys have been successfully uploaded:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:55
|
#: src/gettext_strings.rs:55
|
||||||
msgid "Verifying your email address…"
|
msgid "<strong>Note:</strong> To make keys searchable by address, you must upload them individually."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:56
|
#: src/gettext_strings.rs:56
|
||||||
|
msgid "Verifying your email address…"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:57
|
||||||
msgid "If the process doesn't complete after a few seconds, <input type=\"submit\" class=\"textbutton\" value=\"click here\" />."
|
msgid "If the process doesn't complete after a few seconds, <input type=\"submit\" class=\"textbutton\" value=\"click here\" />."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:58
|
#: src/gettext_strings.rs:59
|
||||||
msgid "Manage your key on {{domain}}"
|
msgid "Manage your key on {{domain}}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:60
|
#: src/gettext_strings.rs:61
|
||||||
msgid "Hi,"
|
msgid "Hi,"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:61
|
#: src/gettext_strings.rs:62
|
||||||
msgid "this is an automated message from <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-decoration:none; color: #333\"><tt>{{ domain }}</tt></a>."
|
msgid "this is an automated message from <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-decoration:none; color: #333\"><tt>{{ domain }}</tt></a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:62
|
#: src/gettext_strings.rs:63
|
||||||
msgid "If you didn't request this message, please ignore it."
|
msgid "If you didn't request this message, please ignore it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:63
|
|
||||||
msgid "OpenPGP key: <tt>{{ primary_fp }}</tt>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:64
|
#: src/gettext_strings.rs:64
|
||||||
msgid "To manage and delete listed addresses on this key, please follow the link below:"
|
msgid "OpenPGP key: <tt>{{ primary_fp }}</tt>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:65
|
#: src/gettext_strings.rs:65
|
||||||
msgid "You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/about</a>."
|
msgid "To manage and delete listed addresses on this key, please follow the link below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:66
|
#: 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:69
|
|
||||||
msgid "this is an automated message from {{domain}}. If you didn't\nrequest this message, please ignore it."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:70
|
|
||||||
msgid "OpenPGP key: {{primary_fp}}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: 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:72
|
|
||||||
msgid "You can find more info at {{base_uri}}/about"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:73
|
|
||||||
msgid "Greetings from the keys.openpgp.org team"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/gettext_strings.rs:75
|
|
||||||
msgid "Verify {{userid}} for your key on {{domain}}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: 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:79
|
|
||||||
msgid "OpenPGP key: <tt>{{primary_fp}}</tt>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: 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:81
|
|
||||||
msgid "You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/about</a>."
|
msgid "You can find more info at <a href=\"{{ base_uri }}/about\">{{ domain }}/about</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:82
|
#: src/gettext_strings.rs:67
|
||||||
msgid "Greetings from the <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
msgid "Greetings from the <a rel=\"nofollow\" href=\"{{ base_uri }}\" style=\"text-decoration:none; color: #333\"><tt>keys.openpgp.org</tt></a> team"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:87
|
#: src/gettext_strings.rs:70
|
||||||
|
msgid "this is an automated message from {{domain}}. If you didn't\nrequest this message, please ignore it."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:71
|
||||||
|
msgid "OpenPGP key: {{primary_fp}}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:72
|
||||||
|
msgid "To manage and delete listed addresses on this key, please follow\nthe link below:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:73
|
||||||
|
msgid "You can find more info at {{base_uri}}/about"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:74
|
||||||
|
msgid "Greetings from the keys.openpgp.org team"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:76
|
||||||
|
msgid "Verify {{userid}} for your key on {{domain}}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:79
|
||||||
|
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
|
||||||
|
msgid "OpenPGP key: <tt>{{primary_fp}}</tt>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:81
|
||||||
|
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
|
||||||
|
msgid "You can find more info at <a href=\"{{base_uri}}/about\">{{domain}}/about</a>."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/gettext_strings.rs:83
|
||||||
|
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
|
||||||
msgid "To let others find this key from your email address \"{{userid}}\",\nplease follow the link below:"
|
msgid "To let others find this key from your email address \"{{userid}}\",\nplease follow the link below:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:91
|
#: src/gettext_strings.rs:92
|
||||||
msgid "Your key upload on {{domain}}"
|
msgid "Your key upload on {{domain}}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:94
|
#: src/gettext_strings.rs:95
|
||||||
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."
|
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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:96
|
#: 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:"
|
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:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:101
|
#: src/gettext_strings.rs:102
|
||||||
msgid "this is an automated message from {{domain}}. If you didn't upload your key\nthere, please ignore this message."
|
msgid "this is an automated message from {{domain}}. If you didn't upload your key\nthere, please ignore this message."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/gettext_strings.rs:103
|
#: 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:"
|
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 ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ fn _dummy() {
|
||||||
t!("You can also <a href=\"/upload\">upload</a> or <a href=\"/manage\">manage</a> your key.");
|
t!("You can also <a href=\"/upload\">upload</a> or <a href=\"/manage\">manage</a> your key.");
|
||||||
t!("Find out more <a href=\"/about\">about this service</a>.");
|
t!("Find out more <a href=\"/about\">about this service</a>.");
|
||||||
t!("News:");
|
t!("News:");
|
||||||
|
t!("<a href=\"/about/news#2019-09-12-three-months-later\">Three months after launch ✨</a> (2019-09-12)");
|
||||||
t!("v{{ version }} built from");
|
t!("v{{ version }} built from");
|
||||||
t!("Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>");
|
t!("Powered by <a href=\"https://sequoia-pgp.org\">Sequoia-PGP</a>");
|
||||||
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!("Background image retrieved from <a href=\"https://www.toptal.com/designers/subtlepatterns/subtle-grey/\">Subtle Patterns</a> under CC BY-SA 3.0");
|
||||||
|
|
|
@ -628,6 +628,22 @@ pub mod tests {
|
||||||
db.check_consistency().unwrap();
|
db.check_consistency().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn about_translation() {
|
||||||
|
let (_tmpdir, config) = configuration().unwrap();
|
||||||
|
let rocket = rocket_factory(rocket::custom(config)).unwrap();
|
||||||
|
let client = Client::new(rocket).expect("valid rocket instance");
|
||||||
|
|
||||||
|
// Check that we see the landing page.
|
||||||
|
let mut response = client.get("/about")
|
||||||
|
.header(Header::new("Accept-Language", "de"))
|
||||||
|
.dispatch();
|
||||||
|
assert_eq!(response.status(), Status::Ok);
|
||||||
|
assert_eq!(response.content_type(), Some(ContentType::HTML));
|
||||||
|
// TODO check translation
|
||||||
|
assert!(response.body_string().unwrap().contains("Hagrid"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn basics() {
|
fn basics() {
|
||||||
let (_tmpdir, config) = configuration().unwrap();
|
let (_tmpdir, config) = configuration().unwrap();
|
||||||
|
@ -782,7 +798,7 @@ pub mod tests {
|
||||||
|
|
||||||
check_verify_link(&client, &token, "foo@invalid.example.com", "de, en");
|
check_verify_link(&client, &token, "foo@invalid.example.com", "de, en");
|
||||||
let mail_content = pop_mail(&filemail_into).unwrap().unwrap();
|
let mail_content = pop_mail(&filemail_into).unwrap().unwrap();
|
||||||
assert!(mail_content.contains("dies ist eine automatische Nachricht"))
|
assert!(mail_content.contains("dies ist eine automatisierte Nachricht"))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
<div class="about">
|
||||||
|
<center><h2>About | <a href="/about/news">News</a> | <a href="/about/usage">Usage</a> | <a href="/about/faq">FAQ</a> | <a href="/about/stats">Stats</a> | <a href="/about/privacy">Privacy</a></h2></center>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <tt>keys.openpgp.org</tt> server is a public service for the
|
||||||
|
distribution and discovery of OpenPGP-compatible keys, commonly
|
||||||
|
referred to as a "keyserver".
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>For instructions, see our <a href="/about/usage">usage guide</a>.</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>How it works</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
An OpenPGP key contains two types of information:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<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.
|
||||||
|
</li>
|
||||||
|
<li><strong>Non-identity information</strong> is all the technical
|
||||||
|
information about the key itself. This includes the large numbers
|
||||||
|
used for verifying signatures and encrypting messages.
|
||||||
|
It also includes metadata like date of creation, some expiration
|
||||||
|
dates, and revocation status.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Traditionally, these pieces of information have always been distributed
|
||||||
|
together. On <span class="brand">keys.openpgp.org</span>, they are
|
||||||
|
treated differently. While anyone can upload all parts of any OpenPGP key
|
||||||
|
to <span class="brand">keys.openpgp.org</span>, our keyserver
|
||||||
|
will only retain and publish certain parts under certain
|
||||||
|
conditions:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Any <strong>non-identity information</strong> will be stored and freely
|
||||||
|
redistributed, if it passes a cryptographic integrity check.
|
||||||
|
Anyone can download these parts at any time as they contain only
|
||||||
|
technical data that can't be used to directly identify a person.
|
||||||
|
Good OpenPGP software can use <span class="brand">keys.openpgp.org</span>
|
||||||
|
to keep this information up to date for any key that it knows about.
|
||||||
|
This helps OpenPGP users maintain secure and reliable communication.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <strong>identity information</strong> in an OpenPGP key
|
||||||
|
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
|
||||||
|
be found by everyone via search by address.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 id="community">Community and platform</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This service is run as a community effort.
|
||||||
|
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,
|
||||||
|
at <tt>support at keys dot openpgp dot org</tt>.
|
||||||
|
The folks who are running this come
|
||||||
|
from various projects in the OpenPGP ecosystem,
|
||||||
|
including Sequoia-PGP, OpenKeychain, and Enigmail.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Technically, <tt>keys.openpgp.org</tt> runs on the
|
||||||
|
<a href="https://gitlab.com/hagrid-keyserver/hagrid" target="_blank">Hagrid</a>
|
||||||
|
keyserver software, which is based on
|
||||||
|
<a href="https://sequoia-pgp.org">Sequoia-PGP</a>. We are hosted on the
|
||||||
|
<a href="https://eclips.is" target="_blank">eclips.is</a> platform,
|
||||||
|
a hosting provider focused on Internet Freedom projects, run by
|
||||||
|
<a href="https://greenhost.net/" target="_blank">Greenhost</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
|
@ -0,0 +1,222 @@
|
||||||
|
<div class="about">
|
||||||
|
<center><h2><a href="/about">About</a> | <a href="/about/news">News</a> | <a href="/about/usage">Usage</a> | FAQ | <a href="/about/stats">Stats</a> | <a href="/about/privacy">Privacy</a></h2></center>
|
||||||
|
|
||||||
|
<h3 id="sks-pool"><a href="#sks-pool">Is this server part of the "SKS" pool?</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
No. The federation model of the SKS pool has various problems in terms
|
||||||
|
of reliability, abuse-resistance, privacy, and usability. We might do
|
||||||
|
something similar to it, but <span class="brand">keys.openpgp.org</span>
|
||||||
|
will never be part of the SKS pool itself.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 id="federation"><a href="#federation">Is keys.openpgp.org federated? Can I help by running an instance?</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
For the moment, no.
|
||||||
|
We do plan to decentralize <span class="brand">keys.openpgp.org</span>
|
||||||
|
at some point.
|
||||||
|
With multiple servers
|
||||||
|
run by independent operators,
|
||||||
|
we can hopefully improve the reliability
|
||||||
|
of this service even further.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Several folks offered to help out
|
||||||
|
by "running a Hagrid server instance".
|
||||||
|
We very much appreciate the offer,
|
||||||
|
but we will probably never have an "open" federation model like SKS,
|
||||||
|
where everyone can run an instance and become part of a "pool".
|
||||||
|
This is for two reasons:
|
||||||
|
</p>
|
||||||
|
<ol>
|
||||||
|
<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.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Servers run as a hobby by casual administrators do not meet our
|
||||||
|
standards for reliability and performance.
|
||||||
|
</li>
|
||||||
|
</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>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We require explicit consent to distribute identity information.
|
||||||
|
Identities that aren't e-mail 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
|
||||||
|
<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>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
An e-mail 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.
|
||||||
|
<a href="/about">Non-identity information</a> will still be distributed
|
||||||
|
for all keys.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This means a search by e-mail 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.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 id="email-protection"><a href="#email-protection">What do you do to
|
||||||
|
protect outgoing verification e-mails?</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We use a modern standard called
|
||||||
|
<a href="https://www.hardenize.com/blog/mta-sts" target="_blank">MTA-STS</a>,
|
||||||
|
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.
|
||||||
|
This protects against eavesdropping and interception during delivery.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The MTA-STS mechanism depends on correctly configured e-mail servers.
|
||||||
|
You can <a href="https://www.hardenize.com/">run this test</a>
|
||||||
|
to see if your e-mail 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>
|
||||||
|
|
||||||
|
<h3 id="third-party-signatures"><a href="#third-party-signatures">
|
||||||
|
Do you distribute "third party signatures"?</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Short answer: No.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A "third party signature" is a signature on a key
|
||||||
|
that was made by some other key.
|
||||||
|
Most commonly,
|
||||||
|
those are the signatures produced when "signing someone's key",
|
||||||
|
which are the basis for
|
||||||
|
the "<a href="https://en.wikipedia.org/wiki/Web_of_trust" target="_blank">Web of Trust</a>".
|
||||||
|
For a number of reasons,
|
||||||
|
those signatures are not currently distributed
|
||||||
|
via <span class="brand">keys.openpgp.org</span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The killer reason is <strong>spam</strong>.
|
||||||
|
Third party signatures allow attaching arbitrary data to anyone's key,
|
||||||
|
and nothing stops a malicious user from
|
||||||
|
attaching so many megabytes of bloat to a key
|
||||||
|
that it becomes practically unusable.
|
||||||
|
Even worse,
|
||||||
|
they could attach offensive or illegal content.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
There are ideas to resolve this issue.
|
||||||
|
For example, signatures could be distributed with the signer,
|
||||||
|
rather than the signee.
|
||||||
|
Alternatively, we could require
|
||||||
|
cross-signing by the signee before distribution
|
||||||
|
to support a
|
||||||
|
<a href="https://wiki.debian.org/caff" target="_blank">caff-style</a>
|
||||||
|
workflow.
|
||||||
|
If there is enough interest,
|
||||||
|
we are open to working with other OpenPGP projects
|
||||||
|
on a solution.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 id="no-sign-verified"><a href="#no-sign-verified">Why not sign keys
|
||||||
|
after verification?</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <span class="brand">keys.openpgp.org</span> service is meant for key
|
||||||
|
distribution and discovery, not as a de-facto CA. Client implementations
|
||||||
|
that want to offer verified communication should rely on their own trust
|
||||||
|
model.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 id="revoked-uids"><a href="#revoked-uids">Why are revoked identities not
|
||||||
|
distributed as such?</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When an OpenPGP key marks one of its identities as revoked, this
|
||||||
|
identity should no longer be considered valid for the key. And this
|
||||||
|
information should ideally be distributed to all OpenPGP clients that
|
||||||
|
already know about the newly revoked identity.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Unfortunately, there is currently no good way to distribute revocations,
|
||||||
|
that doesn't also reveal the revoked identity itself. We don't want to
|
||||||
|
distribute revoked identities, so we can't distribute the identity at
|
||||||
|
all.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
There are proposed solutions to this issue, that allow the distribution
|
||||||
|
of revocations without also revealing the identity itself. But so far
|
||||||
|
there is no final specification, or support in any OpenPGP software. We
|
||||||
|
hope that a solution will be established in the near future, and will
|
||||||
|
add support on <span class="brand">keys.openpgp.org</span> as soon as
|
||||||
|
we can.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 id="tor"><a href="#tor">Do you support Tor?</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Of course!
|
||||||
|
If you have Tor installed,
|
||||||
|
you can reach <span class="brand">keys.openpgp.org</span> anonymously
|
||||||
|
as an
|
||||||
|
<a href="https://en.wikipedia.org/wiki/Tor_(anonymity_network)#Onion_services" target="_blank">onion service</a>:
|
||||||
|
<br />
|
||||||
|
<a href="http://zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad.onion">zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad.onion</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 id="encrypt-verification-emails"><a href="#encrypt-verification-emails">
|
||||||
|
Why not encrypt verification e-mails?</a></h3>
|
||||||
|
|
||||||
|
Various reasons:
|
||||||
|
<ol>
|
||||||
|
<li>It is more complicated, both for our users and for us.</li>
|
||||||
|
<li>It doesn't prevent attacks - an attacker gains nothing from
|
||||||
|
uploading a key they don't have access to.</li>
|
||||||
|
<li>Deletion would still have to be possible even when a key is
|
||||||
|
lost.</li>
|
||||||
|
<li>It would require a different (and more complicated) mechanism to
|
||||||
|
upload keys that can only sign.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<h3 id="older-gnupg"><a href="#older-gnupg">
|
||||||
|
I have trouble updating some keys with GnuPG. Is there a bug?
|
||||||
|
</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is a problem with current versions of GnuPG. If you attempt to
|
||||||
|
update a key from <span class="brand">keys.openpgp.org</span> that
|
||||||
|
contains no <a href="/about">identity information</a>, GnuPG will refuse
|
||||||
|
to process the key:
|
||||||
|
</p>
|
||||||
|
<blockquote>
|
||||||
|
$ gpg --receive-keys A2604867523C7ED8<br />
|
||||||
|
gpg: key A2604867523C7ED8: no user ID
|
||||||
|
</blockquote>
|
||||||
|
<p>
|
||||||
|
We are working with the GnuPG team to resolve this problem.
|
||||||
|
</p>
|
||||||
|
</div>
|
|
@ -0,0 +1,307 @@
|
||||||
|
<div class="about">
|
||||||
|
<center><h2><a href="/about">About</a> | News | <a href="/about/usage">Usage</a> | <a href="/about/faq">FAQ</a> | <a href="/about/stats">Stats</a> | <a href="/about/privacy">Privacy</a></h2></center>
|
||||||
|
|
||||||
|
<h2 id="2019-09-12-three-months-later">
|
||||||
|
<div style="float: right; font-size: small; line-height: 2em;">2019-09-12 📅</div>
|
||||||
|
<a style="color: black;" href="/about/news#2019-09-12-three-months-later">Three months after launch ✨</a>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
It has been three months now
|
||||||
|
<a href="/about/news#2019-06-12-launch">since we launched</a>
|
||||||
|
<span class="brand">keys.openpgp.org</span>.
|
||||||
|
We are happy to report:
|
||||||
|
It has been a resounding success!
|
||||||
|
🥳
|
||||||
|
|
||||||
|
<h4>Adoption in clients</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The
|
||||||
|
<span class="brand">keys.openpgp.org</span>
|
||||||
|
keyserver has been received very well by users,
|
||||||
|
and clients are adopting it rapidly.
|
||||||
|
It is now used by default in
|
||||||
|
<a href="https://gpgtools.org/" target="_blank">GPGTools</a>,
|
||||||
|
<a href="https://enigmail.net/" target="_blank">Enigmail</a>,
|
||||||
|
<a href="https://www.openkeychain.org/" target="_blank">OpenKeychain</a>,
|
||||||
|
<a href="https://github.com/firstlookmedia/gpgsync" target="_blank">GPGSync</a>,
|
||||||
|
Debian,
|
||||||
|
NixOS,
|
||||||
|
and others.
|
||||||
|
Many tutorials have also been updated,
|
||||||
|
pointing users our way.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
At the time of writing,
|
||||||
|
more than 70.000 e-mail addresses
|
||||||
|
have been verified.
|
||||||
|
|
||||||
|
<center style="margin-top: 2em; margin-bottom: 2em;">
|
||||||
|
<img src="/assets/img/stats-addresses-2019-09-12.png" style="padding: 1px; border: 1px solid gray;" /><br />
|
||||||
|
<span style="font-size: smaller;">If that isn't a promising curve, I don't know what is :)</span>
|
||||||
|
</center>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A special shout-out here goes to GPGTools for macOS.
|
||||||
|
They implemented the update process so smoothly,
|
||||||
|
the number of verified addresses completely exploded
|
||||||
|
when they released their update.
|
||||||
|
|
||||||
|
<h4>All's good in operations</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
There is not a lot to report operationally,
|
||||||
|
and no news is good news in this case!
|
||||||
|
Since launch,
|
||||||
|
there was nearly zero downtime,
|
||||||
|
only a single bug came up
|
||||||
|
that briefly caused issues during upload,
|
||||||
|
and support volume has been comfortably low.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Our traffic is currently
|
||||||
|
at about ten requests per second
|
||||||
|
(more during the day, less on the weekend),
|
||||||
|
and we delivered roughly 100.000 mails
|
||||||
|
in the last month.
|
||||||
|
No sweat.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We made several small operational improvements
|
||||||
|
including deployment of
|
||||||
|
<a href="http://dnsviz.net/d/keys.openpgp.org/dnssec/" target="_blank">DNSSEC</a>,
|
||||||
|
implementing some
|
||||||
|
<a href="/about/api#rate-limiting" target="_blank">rate-limiting</a>,
|
||||||
|
nailing down our
|
||||||
|
<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP">content security policy</a>
|
||||||
|
headers,
|
||||||
|
and enabling
|
||||||
|
<a href="https://blog.torproject.org/whats-new-tor-0298" target="_blank">single-hop</a>
|
||||||
|
mode on our Tor Onion Service.
|
||||||
|
You can find a more complete list
|
||||||
|
<a href="https://gitlab.com/hagrid-keyserver/hagrid/merge_requests?scope=all&utf8=%E2%9C%93&state=merged" target="_blank">here</a>.
|
||||||
|
|
||||||
|
<h4>Secure mail delivery with MTA-STS</h4>
|
||||||
|
|
||||||
|
<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.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
While HTTPS is deployed fairly universally these days,
|
||||||
|
that sadly isn't the case for E-Mail.
|
||||||
|
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).
|
||||||
|
But delivery failures upset customers more
|
||||||
|
than reduced security,
|
||||||
|
and many mails are still delivered without encryption.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
With MTA-STS, domain operators can indicate
|
||||||
|
(via HTTPS)
|
||||||
|
that their mail server <em>does</em> support encryption.
|
||||||
|
When a secure connection can't be established
|
||||||
|
to such a server,
|
||||||
|
message delivery will be postponed
|
||||||
|
or eventually bounce,
|
||||||
|
instead of proceeding insecurely.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is extremely useful for service like
|
||||||
|
<span class="brand">keys.openpgp.org</span>.
|
||||||
|
If encryption isn't reliable,
|
||||||
|
attackers can intercept verification mails relatively easily.
|
||||||
|
But for providers who have MTA-STS deployed,
|
||||||
|
we can be sure that
|
||||||
|
every message is delivered securely,
|
||||||
|
and to the right server.
|
||||||
|
|
||||||
|
<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
|
||||||
|
supports MTA-STS.
|
||||||
|
If they don't,
|
||||||
|
please drop them a message and tell them
|
||||||
|
to step up their security game!
|
||||||
|
|
||||||
|
<h4>Work in progress</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We are working on two features:
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The first is <strong>localization</strong>.
|
||||||
|
Most people do not speak English,
|
||||||
|
but so far that is the only language we support.
|
||||||
|
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
|
||||||
|
available in several more languages.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The second is to bring back
|
||||||
|
<strong>third-party signatures</strong>.
|
||||||
|
As <a href="/about/faq#third-party-signatures">mentioned in our FAQ</a>,
|
||||||
|
we currently don't support these due to spam and potential for abuse.
|
||||||
|
The idea is to require
|
||||||
|
<a href="https://gitlab.com/openpgp-wg/rfc4880bis/merge_requests/20/diffs" target="_blank">cross-signatures</a>,
|
||||||
|
which allow each key to choose for itself
|
||||||
|
which signatures from other people it wants to distribute.
|
||||||
|
Despite this extra step,
|
||||||
|
this is fairly compatible with existing software.
|
||||||
|
It also nicely stays out of the way of users
|
||||||
|
who don't care about signatures.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Although work is in progress for both of those features,
|
||||||
|
neither have a planned time of release yet.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Regarding the "<tt>no user ID</tt>" issue with GnuPG
|
||||||
|
(mentioned in our
|
||||||
|
<a href="/about/news#2019-06-12-launch-challenges">last news post</a>
|
||||||
|
and our
|
||||||
|
<a href="/about/faq#older-gnupg" target="_blank">FAQ</a>),
|
||||||
|
a patch that fixes this problem is now carried by Debian,
|
||||||
|
as well as GPGTools for macOS.
|
||||||
|
GnuPG upstream has not merged the patch so far.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
That's it!
|
||||||
|
Thanks for your interest!
|
||||||
|
<span style="font-size: x-large;">👋</span>
|
||||||
|
|
||||||
|
<hr style="margin-top: 2em; margin-bottom: 2em;" />
|
||||||
|
|
||||||
|
<h2 id="2019-06-12-launch">
|
||||||
|
<div style="float: right; font-size: small; line-height: 2em;">2019-06-12 📅</div>
|
||||||
|
<a href="/about/news#2019-06-12-launch" style="color: black;">Launching a new keyserver! 🚀</a>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
From a community effort by
|
||||||
|
<a href="https://enigmail.net" target="_blank">Enigmail</a>,
|
||||||
|
<a href="https://openkeychain.org" target="_blank">OpenKeychain</a>,
|
||||||
|
and <a href="https://sequoia-pgp.org">Sequoia PGP</a>,
|
||||||
|
we are pleased to announce
|
||||||
|
the launch of the new public OpenPGP keyserver
|
||||||
|
<span class="brand">keys.openpgp.org</span>!
|
||||||
|
Hurray! 🎉
|
||||||
|
|
||||||
|
<h4>Give me the short story!</h4>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Fast and reliable. No wait times, no downtimes, no inconsistencies.</li>
|
||||||
|
<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>Built on Rust, powered by <a href="https://sequoia-pgp.org" target="_blank">Sequoia PGP</a> - free and open source, running AGPLv3.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
Get started right now by <a href="/upload">uploading your key</a>!
|
||||||
|
|
||||||
|
<h4>Why a new keyserver?</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We created <span class="brand">keys.openpgp.org</span>
|
||||||
|
to provide an alternative to the SKS Keyserver pool,
|
||||||
|
which is the default in many applications today.
|
||||||
|
This distributed network of keyservers has been struggling with
|
||||||
|
<a target="_blank" href="https://medium.com/@mdrahony/are-sks-keyservers-safe-do-we-need-them-7056b495101c">abuse</a>,
|
||||||
|
<a target="_blank" href="https://en.wikipedia.org/wiki/Key_server_(cryptographic)#Problems_with_keyservers">performance</a>,
|
||||||
|
as well as <a href="http://www.openwall.com/lists/oss-security/2017/12/10/1">privacy issues</a>,
|
||||||
|
and more recently also
|
||||||
|
<a target="_blank" href="http://nongnu.13855.n7.nabble.com/SKS-apocalypse-mitigation-td228252.html">GDPR</a>
|
||||||
|
compliance questions.
|
||||||
|
Kristian Fiskerstrand has done a stellar job maintaining the pool for
|
||||||
|
<a target="_blank" href="https://blog.sumptuouscapital.com/2016/12/10-year-anniversary-for-sks-keyservers-net/">more than ten years</a>,
|
||||||
|
but at this point development activity seems to have
|
||||||
|
<a target="_blank" href="https://bitbucket.org/skskeyserver/sks-keyserver/pull-requests/60/clean-build-with-405">mostly ceased</a>.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We thought it time to consider a fresh approach to solve these problems.
|
||||||
|
|
||||||
|
<h4>Identity and non-identity information</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <span class="brand">keys.openpgp.org</span> keyserver splits up
|
||||||
|
identity and non-identity information in keys.
|
||||||
|
You can find more details on our <a href="/about" target="_blank">about page</a>:
|
||||||
|
The gist is that non-identity information (keys, revocations, and so on)
|
||||||
|
is freely distributed,
|
||||||
|
while identity information
|
||||||
|
is only distributed with consent
|
||||||
|
that can also be revoked at any time.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If a new key is verified for some e-mail address,
|
||||||
|
it will replace the previous one.
|
||||||
|
This way,
|
||||||
|
every e-mail 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,
|
||||||
|
it means this is the single key
|
||||||
|
that is currently valid for the searched e-mail address.
|
||||||
|
|
||||||
|
<h4>Support in Enigmail and OpenKeychain</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <span class="brand">keys.openpgp.org</span> keysever
|
||||||
|
will receive first-party support in upcoming releases of
|
||||||
|
<a href="https://enigmail.net" target="_blank">Enigmail</a> for Thunderbird,
|
||||||
|
as well as
|
||||||
|
<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.
|
||||||
|
We hope that this will also give us some momentum
|
||||||
|
to build this project into a bigger community effort.
|
||||||
|
|
||||||
|
<h4 id="2019-06-12-launch-challenges">Current challenges</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Privacy-preserving techniques in keyservers are still new,
|
||||||
|
and sadly there are still a few compatibility issues
|
||||||
|
caused by splitting out identity information.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
In particular, when GnuPG (as of this writing, version 2.2.16) encounters
|
||||||
|
an OpenPGP key without identities,
|
||||||
|
it throws an error "no user ID"
|
||||||
|
and does not process new non-identity information
|
||||||
|
(like revocation certificates)
|
||||||
|
even if it is cryptographically valid.
|
||||||
|
We are actively engaged in
|
||||||
|
providing fixes for these issues.
|
||||||
|
|
||||||
|
<h4>The future</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Privacy-preserving techniques in keyservers are still new,
|
||||||
|
and we have more ideas for reducing the metadata.
|
||||||
|
But for now, our plan is only to
|
||||||
|
keep <span class="brand">keys.openpgp.org</span> reliable and fast 🐇,
|
||||||
|
fix any upcoming bugs 🐞,
|
||||||
|
and <a href="/about#community">listen to feedback</a> from the community. 👂
|
||||||
|
|
||||||
|
<p>
|
||||||
|
For more info, head on over to
|
||||||
|
our <a target="_blank" href="/about">about page</a>
|
||||||
|
and <a target="_blank" href="/about/faq">FAQ</a> pages.
|
||||||
|
You can get started right away
|
||||||
|
by <a href="/upload" target="_blank">uploading your your key</a>!
|
||||||
|
Beyond that there is more cool stuff to discover,
|
||||||
|
like our <a target="_blank" href="/about/api">API</a>,
|
||||||
|
and an <a target="_blank" href="/about/faq#tor">Onion Service</a>!
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Cheers!
|
||||||
|
<span style="font-size: x-large;">🍻</span>
|
||||||
|
</div>
|
|
@ -0,0 +1,66 @@
|
||||||
|
<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> | <a href="/about/stats">Stats</a> | Privacy</h2></center>
|
||||||
|
|
||||||
|
<p style="text-align: left;">
|
||||||
|
The public keyserver running on keys.openpgp.org processes, stores and
|
||||||
|
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
|
||||||
|
IDs</abbr> are personally identifiable information (PII).
|
||||||
|
Special care is taken to make sure they are used only with
|
||||||
|
consent:
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
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.
|
||||||
|
</li>
|
||||||
|
<li>Addresses are searchable by exact E-Mail address,
|
||||||
|
but not by associated name.</li>
|
||||||
|
<li>Enumeration of addresses is not possible.</li>
|
||||||
|
<li>Deletion of addresses is possible via simple proof
|
||||||
|
of ownership in an automated fashion, similar to
|
||||||
|
publication. To unlist an address where this isn't
|
||||||
|
possible, write to support at keys dot openpgp dot
|
||||||
|
org.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
<p>This data is never handed collectively ("as a dump") to third
|
||||||
|
parties.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li><b>Public Key Data</b>
|
||||||
|
<p>The cryptographic content of OpenPGP keys is not considered personally
|
||||||
|
identifiable information. This includes specifically
|
||||||
|
<abbr title="Packet Tags 6 and 14">public key material</abbr>,
|
||||||
|
<abbr title="Packet Tag 2, Signature types 0x10-0x13, 0x18, 0x19, 0x1F">self-signatures</abbr>, and
|
||||||
|
<abbr title="Packet Tag 2, Signature types 0x20, 0x28, 0x30">revocation signatures</abbr>.
|
||||||
|
</p>
|
||||||
|
<p>This data is not usually collectively available ("as
|
||||||
|
a dump"), but may be handed upon request to third
|
||||||
|
parties for purposes of development or research.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li><b>Other User ID data</b>
|
||||||
|
<p>An OpenPGP key may contain personal data other than E-Mail
|
||||||
|
addresses, such as <abbr title="Packet Tag 13">User IDs</abbr>
|
||||||
|
that do not contain E-Mail 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.
|
||||||
|
</p>
|
||||||
|
<p>OpenPGP packet types that were not specifically mentioned above are
|
||||||
|
stripped during upload and never stored, processed or
|
||||||
|
distributed in any way.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p style="text-align: left">Data is never relayed to third parties outside of
|
||||||
|
what is available from the <a href="/about/api">public API interfaces</a>,
|
||||||
|
and what is described in this policy.
|
||||||
|
</p>
|
||||||
|
</div>
|
|
@ -0,0 +1,31 @@
|
||||||
|
<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>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A simple statistic of the total number of e-mail addresses that are currently verified. 📈
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<center><img src="/about/stats/week.png" /></center>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<center><img src="/about/stats/month.png" /></center>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Load Average</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The "load average" of a server is a statistic of how busy it is. Simply put:
|
||||||
|
<ul>
|
||||||
|
<li>0.0 means the <span class="brand">keys.openpgp.org</span> host is completely idle</li>
|
||||||
|
<li>1.0 is fairly busy</li>
|
||||||
|
<li>4.0 and above means it's on fire 🔥</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<center><img src="/about/stats/load_week.png" /></center>
|
||||||
|
</p>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
{{#> layout }}
|
|
@ -0,0 +1 @@
|
||||||
|
{{/layout}}
|
|
@ -0,0 +1,157 @@
|
||||||
|
<div class="about usage">
|
||||||
|
<center><h2><a href="/about">About</a> | <a href="/about/news">News</a> | Usage | <a href="/about/faq">FAQ</a> | <a href="/about/stats">Stats</a> | <a href="/about/privacy">Privacy</a></h2></center>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
On this page, we collect information on how to use
|
||||||
|
<span class="brand">keys.openpgp.org</span> with different OpenPGP
|
||||||
|
software products.<br />
|
||||||
|
We are still in the process of adding more. If you are missing some, please
|
||||||
|
write to us and we'll try to add it.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<div><img src="/assets/img/enigmail.svg"></div>
|
||||||
|
Enigmail
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
<a href="https://enigmail.net" target="_blank">Enigmail</a> for Thunderbird
|
||||||
|
uses <span class="brand">keys.openpgp.org</span> by default since
|
||||||
|
version 2.0.12.
|
||||||
|
</p>
|
||||||
|
<p>Full support is available since Enigmail 2.1
|
||||||
|
(for <a href="https://www.thunderbird.net/en-US/thunderbird/68.0beta/releasenotes/" target="_blank">Thunderbird 68</a> or newer):
|
||||||
|
<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>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<div><img src="/assets/img/gpgtools.png"></div>
|
||||||
|
GPG Suite
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
<a href="https://gpgtools.org/">GPG Suite</a> for macOS
|
||||||
|
uses <span class="brand">keys.openpgp.org</span> by default
|
||||||
|
since August 2019.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<div><img src="/assets/img/openkeychain.svg"></div>
|
||||||
|
OpenKeychain
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
<a href="https://www.openkeychain.org/">OpenKeychain</a> for Android
|
||||||
|
uses <span class="brand">keys.openpgp.org</span> by default
|
||||||
|
since July 2019.
|
||||||
|
<ul>
|
||||||
|
<li>Keys will be kept up to date automatically.</li>
|
||||||
|
<li>Keys can be discovered by e-mail address.</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Note that there is no built-in support for upload and e-mail verification so far.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<div><img src="/assets/img/gnupg.svg" /></div>
|
||||||
|
GnuPG
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To configure <a href="https://gnupg.org">GnuPG</a>
|
||||||
|
to use <span class="brand">keys.openpgp.org</span> as keyserver,
|
||||||
|
add this line to your <tt>gpg.conf</tt> file:
|
||||||
|
<blockquote>
|
||||||
|
keyserver hkps://keys.openpgp.org
|
||||||
|
</blockquote>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h4 id="gnupg-retrieve"><a href="#gnupg-retrieve">Retrieving keys</a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
To locate the key of a user, by email address:
|
||||||
|
<blockquote>gpg --auto-key-locate keyserver --locate-keys user@example.net</blockquote>
|
||||||
|
</li>
|
||||||
|
<li>To refresh all your keys (e.g. new revocation certificates and subkeys):
|
||||||
|
<blockquote>gpg --refresh-keys</blockquote>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h4 id="gnupg-upload"><a href="#gnupg-upload">Uploading your key</a></h4>
|
||||||
|
<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>).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
You can try this shortcut for uploading your key, which outputs
|
||||||
|
a direct link to the verification page:
|
||||||
|
<blockquote>
|
||||||
|
gpg --export your_address@example.net | curl -T - {{ base_uri }}
|
||||||
|
</blockquote>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Alternatively, you can export them to a file and enter that into the
|
||||||
|
<a href="/upload" target="_blank">upload</a> page:
|
||||||
|
<blockquote>
|
||||||
|
gpg --export your_address@example.net > my_key.pub
|
||||||
|
</blockquote>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h4 id="gnupg-troubleshooting"><a href="#gnupg-troubleshooting">Troubleshooting</a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Some old <tt>~/gnupg/dirmngr.conf</tt> files contain a line like this:
|
||||||
|
<blockquote>
|
||||||
|
hkp-cacert ~/.gnupg/sks-keyservers.netCA.pem
|
||||||
|
</blockquote>
|
||||||
|
<p>
|
||||||
|
This configuration is no longer necessary,
|
||||||
|
but prevents regular certificates from working.
|
||||||
|
It is recommended to simply remove this line from the configuration.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
While refreshing keys, you may see errors like the following:
|
||||||
|
<blockquote>gpg: key A2604867523C7ED8: no user ID</blockquote>
|
||||||
|
This is a <a href="https://dev.gnupg.org/T4393" target="_blank">known problem in GnuPG</a>.
|
||||||
|
We are working with the GnuPG team to resolve this issue.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h4 id="gnupg-tor"><a href="#gnupg-tor">Usage via Tor</a></h4>
|
||||||
|
<p>
|
||||||
|
For users who want to be extra-careful,
|
||||||
|
<span class="brand">keys.openpgp.org</span> can be reached anonymously as an
|
||||||
|
<a href="https://en.wikipedia.org/wiki/Tor_(anonymity_network)#Onion_services" target="_blank">onion service</a>.
|
||||||
|
If you have
|
||||||
|
<a href="https://www.torproject.org/" target="_blank">Tor</a>
|
||||||
|
installed, use the following configuration:
|
||||||
|
<blockquote>
|
||||||
|
keyserver hkp://zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad.onion
|
||||||
|
</blockquote>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 style="margin-left: 3%;">API</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We offer an API for integrated support in OpenPGP applications. Check
|
||||||
|
out our <a href="/about/api">API documentation</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 style="margin-left: 3%;">Others</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Missing a guide for your favorite implementation? This site is
|
||||||
|
a work-in-progress, and we are looking to improve. Drop us a line at
|
||||||
|
<span class="email">support at keys dot openpgp dot org</span> if you
|
||||||
|
want to help out!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
Loading…
Reference in New Issue