From cdc1afb6d1deff9c2c6652e0df267206f1d27182 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Mon, 30 Sep 2019 12:53:20 +0200 Subject: [PATCH] i18n: prepare translation of about pages --- .tx/config | 42 +++ dist/templates/about/news.html.hbs | 2 +- dist/templates/about/stats.html.hbs | 1 - dist/templates/about/usage.html.hbs | 4 +- dist/templates/index.html.hbs | 2 +- make-translated-templates | 13 + po/hagrid/de.po | 144 ++++---- po/hagrid/en.po | 256 ++++++++------- po/hagrid/hagrid.pot | 142 ++++---- src/gettext_strings.rs | 1 + src/web/mod.rs | 18 +- templates-untranslated/about/about.html.hbs | 84 +++++ templates-untranslated/about/faq.html.hbs | 222 +++++++++++++ templates-untranslated/about/news.html.hbs | 307 ++++++++++++++++++ templates-untranslated/about/privacy.html.hbs | 66 ++++ templates-untranslated/about/stats.html.hbs | 31 ++ templates-untranslated/about/template-prefix | 1 + templates-untranslated/about/template-suffix | 1 + templates-untranslated/about/usage.html.hbs | 157 +++++++++ 19 files changed, 1224 insertions(+), 270 deletions(-) create mode 100755 make-translated-templates create mode 100644 templates-untranslated/about/about.html.hbs create mode 100644 templates-untranslated/about/faq.html.hbs create mode 100644 templates-untranslated/about/news.html.hbs create mode 100644 templates-untranslated/about/privacy.html.hbs create mode 100644 templates-untranslated/about/stats.html.hbs create mode 100644 templates-untranslated/about/template-prefix create mode 100644 templates-untranslated/about/template-suffix create mode 100644 templates-untranslated/about/usage.html.hbs diff --git a/.tx/config b/.tx/config index 22bea03..558a698 100644 --- a/.tx/config +++ b/.tx/config @@ -9,3 +9,45 @@ trans.None = po/hagrid/hagrid.pot trans.de = po/hagrid/de.po type = PO +[hagrid.about-about] +minimum_perc = 100 +source_file = templates-untranslated/about/about.html.hbs +file_filter = templates-translated//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//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//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//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//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//about/usage.html.hbs +source_lang = en +type = HTML + diff --git a/dist/templates/about/news.html.hbs b/dist/templates/about/news.html.hbs index db57083..7ef2101 100644 --- a/dist/templates/about/news.html.hbs +++ b/dist/templates/about/news.html.hbs @@ -305,5 +305,5 @@

Cheers! 🍻 - + {{/layout}} diff --git a/dist/templates/about/stats.html.hbs b/dist/templates/about/stats.html.hbs index 7bdba80..5386297 100644 --- a/dist/templates/about/stats.html.hbs +++ b/dist/templates/about/stats.html.hbs @@ -31,4 +31,3 @@

{{/layout}} - diff --git a/dist/templates/about/usage.html.hbs b/dist/templates/about/usage.html.hbs index 53aa2c5..0c1a59c 100644 --- a/dist/templates/about/usage.html.hbs +++ b/dist/templates/about/usage.html.hbs @@ -1,5 +1,4 @@ {{#> layout }} - {{#with page}}

About | News | Usage | FAQ | Stats | Privacy

@@ -94,7 +93,7 @@ You can try this shortcut for uploading your key, which outputs a direct link to the verification page:
- gpg --export your_address@example.net | curl -T - {{ ../base_uri }} + gpg --export your_address@example.net | curl -T - {{ base_uri }}
  • @@ -157,5 +156,4 @@

  • - {{/with}} {{/layout}} diff --git a/dist/templates/index.html.hbs b/dist/templates/index.html.hbs index 061ddfe..d745e98 100644 --- a/dist/templates/index.html.hbs +++ b/dist/templates/index.html.hbs @@ -25,7 +25,7 @@

    - {{ text "News:" }} Three months after launch ✨ (2019-09-12) + {{ text "News:" }} {{ text "Three months after launch ✨ (2019-09-12)" }}

    {{/with}} {{/layout}} diff --git a/make-translated-templates b/make-translated-templates new file mode 100755 index 0000000..97dc332 --- /dev/null +++ b/make-translated-templates @@ -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 diff --git a/po/hagrid/de.po b/po/hagrid/de.po index 4b83403..f2fdd7f 100644 --- a/po/hagrid/de.po +++ b/po/hagrid/de.po @@ -15,15 +15,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/mail.rs:105 +#: src/mail.rs:104 msgid "Verify {} for your key on {}" msgstr "Bestätige {} für deinen Schlüssel auf {}" -#: src/mail.rs:132 +#: src/mail.rs:131 msgid "Manage your key on {}" msgstr "Schlüssel-Verwaltung auf {}" -#: src/mail.rs:159 +#: src/mail.rs:158 msgid "Your key upload on {}" msgstr "Hochgeladener Schlüssel auf {}" @@ -82,14 +82,20 @@ msgid "News:" msgstr "News:" #: src/gettext_strings.rs:15 +msgid "" +"Three months after " +"launch ✨ (2019-09-12)" +msgstr "" + +#: src/gettext_strings.rs:16 msgid "v{{ version }} built from" msgstr "v{{ version }}, Revision" -#: src/gettext_strings.rs:16 +#: src/gettext_strings.rs:17 msgid "Powered by Sequoia-PGP" msgstr "Powered by Sequoia-PGP" -#: src/gettext_strings.rs:17 +#: src/gettext_strings.rs:18 msgid "" "Background image retrieved from Subtle Patterns under CC BY-SA 3.0" @@ -97,23 +103,23 @@ msgstr "" "Hintergrund von Subtle Patterns unter CC BY-SA 3.0" -#: src/gettext_strings.rs:18 +#: src/gettext_strings.rs:19 msgid "Maintenance Mode" msgstr "Wartungsarbeiten" -#: src/gettext_strings.rs:19 +#: src/gettext_strings.rs:20 msgid "Manage your key" msgstr "Schlüssel verwalten" -#: src/gettext_strings.rs:20 +#: src/gettext_strings.rs:21 msgid "Enter any verified e-mail address of your key" msgstr "Eine Adresse des zu verwaltenden Schlüssels" -#: src/gettext_strings.rs:21 +#: src/gettext_strings.rs:22 msgid "Send link" msgstr "Sende Link" -#: src/gettext_strings.rs:22 +#: src/gettext_strings.rs:23 msgid "" "We will send you an e-mail with a link you can use to remove any of your e-" "mail addresses from search." @@ -121,7 +127,7 @@ msgstr "" "Du wirst eine E-Mail mit einem Link erhalten, der es erlaubt, Adressen aus " "der Suche zu entfernen." -#: src/gettext_strings.rs:23 +#: src/gettext_strings.rs:24 msgid "" "Managing the key {{ key_fpr }}." @@ -129,15 +135,15 @@ msgstr "" "Verwaltung des Schlüssels {{ key_fpr }}." -#: src/gettext_strings.rs:24 +#: src/gettext_strings.rs:25 msgid "Your key is published with the following identity information:" msgstr "Dieser Schlüssel ist veröffentlicht mit diesen Identitäten:" -#: src/gettext_strings.rs:25 +#: src/gettext_strings.rs:26 msgid "Delete" msgstr "" -#: src/gettext_strings.rs:26 +#: src/gettext_strings.rs:27 msgid "" "Clicking \"delete\" on any address will remove it from this key. It will no " "longer appear in a search.
    To add another address, Um eine Adresse hinzuzufügen, muss der Schlüssel erneut hochgeladen werden." -#: src/gettext_strings.rs:27 +#: src/gettext_strings.rs:28 msgid "" "Your key is published as only non-identity information. (what does this mean?)" @@ -155,13 +161,13 @@ msgstr "" "Dieser Schlüssel ist jetzt ohne Identitäts-Informationen veröffentlicht (was heisst das?)" -#: src/gettext_strings.rs:28 +#: src/gettext_strings.rs:29 msgid "To add an address, upload the key again." msgstr "" "Um eine Identität hinzuzufügen, lade den Schlüssel erneut hoch." -#: src/gettext_strings.rs:29 +#: src/gettext_strings.rs:30 msgid "" "We have sent an email with further instructions to {{ address }}." @@ -169,11 +175,11 @@ msgstr "" "Eine E-Mail mit den nächsten Schritten wurde an {{ address }} gesendet." -#: src/gettext_strings.rs:30 +#: src/gettext_strings.rs:31 msgid "This address was already verified." msgstr "Diese Adresse war bereits bestätigt." -#: src/gettext_strings.rs:31 +#: src/gettext_strings.rs:32 msgid "" "Your key {{ key_fpr }} is now published " "for the identity {{ userid }}." -#: src/gettext_strings.rs:32 +#: src/gettext_strings.rs:33 msgid "Verification failed! Perhaps the link you used was expired?" msgstr "" "Bei der Bestätigung ist ein Fehler aufgetreten! Vielleicht war das Zeitlimit " "für den Link abgelaufen?" -#: src/gettext_strings.rs:33 +#: src/gettext_strings.rs:34 msgid "You can try uploading again." msgstr "Du kannst den Upload erneut versuchen." -#: src/gettext_strings.rs:34 +#: src/gettext_strings.rs:35 msgid "Upload your key" msgstr "Schlüssel hochladen" -#: src/gettext_strings.rs:35 +#: src/gettext_strings.rs:36 msgid "Your public key" msgstr "Dein Schlüssel" -#: src/gettext_strings.rs:36 +#: src/gettext_strings.rs:37 msgid "Upload" msgstr "Upload" -#: src/gettext_strings.rs:37 +#: src/gettext_strings.rs:38 msgid "" "Need more info? Check our intro and " "usage guide!" @@ -214,7 +220,7 @@ msgstr "" "\">Übersicht und Nutzungshinweise." -#: src/gettext_strings.rs:38 +#: src/gettext_strings.rs:39 msgid "" "You uploaded the key {{ key_fpr }}." @@ -222,11 +228,11 @@ msgstr "" "Schlüssel {{key_fpr}} erfolgreich hochgeladen." -#: src/gettext_strings.rs:39 +#: src/gettext_strings.rs:40 msgid "This key is revoked." msgstr "Dieser Schlüssel ist widerrufen." -#: src/gettext_strings.rs:40 +#: src/gettext_strings.rs:41 msgid "" "It is published without identity information and can't be made available for " "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 " "E-Mail Adresse verfügbar." -#: src/gettext_strings.rs:41 +#: src/gettext_strings.rs:42 msgid "what does this mean?" msgstr "was heisst das?" -#: src/gettext_strings.rs:42 +#: src/gettext_strings.rs:43 msgid "" "This key is now published with the following identity information (what does this mean?):" @@ -246,11 +252,11 @@ msgstr "" "Dieser Schlüssel ist mit folgenden Identitäten veröffentlicht (was heisst das?):" -#: src/gettext_strings.rs:43 +#: src/gettext_strings.rs:44 msgid "Published" msgstr "Veröffentlicht" -#: src/gettext_strings.rs:44 +#: src/gettext_strings.rs:45 msgid "" "This key is now published with only non-identity information (what does this mean?)" @@ -258,7 +264,7 @@ msgstr "" "Dieser Schlüssel ist jetzt ohne Identitäts-Informationen veröffentlicht (was heisst das?)" -#: src/gettext_strings.rs:45 +#: src/gettext_strings.rs:46 msgid "" "To make the key available for search by e-mail address, you can verify it " "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 " "die entsprechende Adresse bestätigt werden:" -#: src/gettext_strings.rs:46 +#: src/gettext_strings.rs:47 msgid "Verification Pending" msgstr "Bestätigung wird erwartet" -#: src/gettext_strings.rs:47 +#: src/gettext_strings.rs:48 msgid "" "Note: Some providers delay e-mails for up to 15 minutes to " "prevent spam. Please be patient." @@ -278,11 +284,11 @@ msgstr "" "Hinweis: Manche Provider verzögern den Empfang von Emails " "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" msgstr "Bestätigungs-E-Mail senden" -#: src/gettext_strings.rs:49 +#: src/gettext_strings.rs:50 msgid "" "This key contains one identity that could not be parsed as an email address." "
    This identity can't be published on keys." @@ -294,7 +300,7 @@ msgstr "" "\">keys.openpgp.org veröffentlicht werden. (warum?)" -#: src/gettext_strings.rs:50 +#: src/gettext_strings.rs:51 msgid "" "This key contains {{ count_unparsed }} identities that could not be parsed " "as an email address.
    These identities can't be published on keys.openpgp.org veröffentlicht werden. (warum?)" -#: src/gettext_strings.rs:51 +#: src/gettext_strings.rs:52 msgid "" "This key contains one revoked identity, which is not published. (Why?)" @@ -315,7 +321,7 @@ msgstr "" "veröffentlicht. (Warum?" ")" -#: src/gettext_strings.rs:52 +#: src/gettext_strings.rs:53 msgid "" "This key contains {{ count_revoked }} revoked identities, which are not " "published. (Why?)" @@ -324,11 +330,11 @@ msgstr "" "werden nicht veröffentlicht. (Warum?)" -#: src/gettext_strings.rs:53 +#: src/gettext_strings.rs:54 msgid "Your keys have been successfully uploaded:" msgstr "Schlüssel erfolgreich hochgeladen:" -#: src/gettext_strings.rs:54 +#: src/gettext_strings.rs:55 msgid "" "Note: To make keys searchable by address, you must upload " "them individually." @@ -336,11 +342,11 @@ msgstr "" "Hinweis: Schlüssel müssen einzeln hochgeladen werden, um " "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…" msgstr "E-Mail Adresse wird bestätigt..." -#: src/gettext_strings.rs:56 +#: src/gettext_strings.rs:57 msgid "" "If the process doesn't complete after a few seconds, ." @@ -348,15 +354,15 @@ msgstr "" "Wenn der Vorgang nicht in einigen Sekunden erfolgreich ist, ." -#: src/gettext_strings.rs:58 +#: src/gettext_strings.rs:59 msgid "Manage your key on {{domain}}" msgstr "Schlüssel-Verwaltung auf {{domain}}" -#: src/gettext_strings.rs:60 +#: src/gettext_strings.rs:61 msgid "Hi," msgstr "Hi," -#: src/gettext_strings.rs:61 +#: src/gettext_strings.rs:62 msgid "" "this is an automated message from {{ domain }}." -#: src/gettext_strings.rs:62 +#: src/gettext_strings.rs:63 msgid "If you didn't request this message, please ignore it." msgstr "Falls dies unerwartet ist, bitte die Nachricht ignorieren." -#: src/gettext_strings.rs:63 +#: src/gettext_strings.rs:64 msgid "OpenPGP key: {{ primary_fp }}" msgstr "OpenPGP Schlüssel: {{ primary_fp }}" -#: src/gettext_strings.rs:64 +#: src/gettext_strings.rs:65 msgid "" "To manage and delete listed addresses on this key, please follow the link " "below:" msgstr "" "Du kannst die Identitäten dieses Schlüssels unter folgendem Link verwalten:" -#: src/gettext_strings.rs:65 +#: src/gettext_strings.rs:66 msgid "" "You can find more info at {{ domain }}/" "about." @@ -389,7 +395,7 @@ msgstr "" "Weitere Informationen findest du unter {{ domain }}/about." -#: src/gettext_strings.rs:66 +#: src/gettext_strings.rs:67 msgid "" "Greetings from the keys.openpgp.org team" @@ -397,7 +403,7 @@ msgstr "" "Das keys.openpgp.org Team" -#: src/gettext_strings.rs:69 +#: src/gettext_strings.rs:70 msgid "" "this is an automated message from {{domain}}. If you didn't\n" "request this message, please ignore it." @@ -405,30 +411,30 @@ msgstr "" "dies ist eine automatisierte Nachricht von {{domain}}. Falls dies unerwartet " "ist, bitte die Nachricht ignorieren." -#: src/gettext_strings.rs:70 +#: src/gettext_strings.rs:71 msgid "OpenPGP key: {{primary_fp}}" msgstr "OpenPGP Schlüssel: {{primary_fp}}" -#: src/gettext_strings.rs:71 +#: src/gettext_strings.rs:72 msgid "" "To manage and delete listed addresses on this key, please follow\n" "the link below:" msgstr "" "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" 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" msgstr "Das keys.openpgp.org Team" -#: src/gettext_strings.rs:75 +#: src/gettext_strings.rs:76 msgid "Verify {{userid}} for your key on {{domain}}" msgstr "Bestätige {{userid}} für deinen Schlüssel auf {{domain}}" -#: src/gettext_strings.rs:78 +#: src/gettext_strings.rs:79 msgid "" "this is an automated message from {{domain}}. If you " @@ -439,11 +445,11 @@ msgstr "" "#333\">{{ domain }}. Falls dies unerwartet ist, bitte die " "Nachricht ignorieren." -#: src/gettext_strings.rs:79 +#: src/gettext_strings.rs:80 msgid "OpenPGP key: {{primary_fp}}" msgstr "OpenPGP Schlüssel: {{primary_fp}}" -#: src/gettext_strings.rs:80 +#: src/gettext_strings.rs:81 msgid "" "To let others find this key from your email address \"{{userid}}\", " @@ -453,7 +459,7 @@ msgstr "" "\"text-decoration:none; color: #333\">{{userid}}\" verfügbar zu machen, " "klicke diesen Link:" -#: src/gettext_strings.rs:81 +#: src/gettext_strings.rs:82 msgid "" "You can find more info at {{domain}}/about." @@ -461,7 +467,7 @@ msgstr "" "Weiter Informationen findest du unter {{domain}}/about." -#: src/gettext_strings.rs:82 +#: src/gettext_strings.rs:83 msgid "" "Greetings from the keys.openpgp.org team" @@ -469,7 +475,7 @@ msgstr "" "Grüße vom keys.openpgp.org team" -#: src/gettext_strings.rs:87 +#: src/gettext_strings.rs:88 msgid "" "To let others find this key from your email address \"{{userid}}\",\n" "please follow the link below:" @@ -478,11 +484,11 @@ msgstr "" "machen,\n" "klicke diesen Link:" -#: src/gettext_strings.rs:91 +#: src/gettext_strings.rs:92 msgid "Your key upload on {{domain}}" msgstr "Hochgeladener Schlüssel auf {{domain}}" -#: src/gettext_strings.rs:94 +#: src/gettext_strings.rs:95 msgid "" "this is an automated message from {{domain}}. If you " @@ -493,7 +499,7 @@ msgstr "" "#333\">{{ domain }}. Falls dies unerwartet ist, bitte die " "Nachricht ignorieren." -#: 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 " @@ -503,7 +509,7 @@ msgstr "" "Identitäten veröffentlicht. Um diesen Schlüssel für eine Suche nach E-Mail " "Adresse verfügbar zu machen, folge diesem Link:" -#: 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\n" "there, please ignore this message." @@ -512,7 +518,7 @@ msgstr "" "ist,\n" "bitte die Nachricht ignorieren." -#: 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\n" "identity information. If you want to allow others to find this key by e-" diff --git a/po/hagrid/en.po b/po/hagrid/en.po index 4490098..a681223 100644 --- a/po/hagrid/en.po +++ b/po/hagrid/en.po @@ -12,15 +12,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/mail.rs:105 +#: src/mail.rs:104 msgid "Verify {} for your key on {}" msgstr "Verify {} for your key on {}" -#: src/mail.rs:132 +#: src/mail.rs:131 msgid "Manage your key on {}" msgstr "Manage your key on {}" -#: src/mail.rs:159 +#: src/mail.rs:158 msgid "Your key upload on {}" msgstr "Your key upload on {}" @@ -76,14 +76,20 @@ msgid "News:" msgstr "News:" #: src/gettext_strings.rs:15 +msgid "" +"Three months after " +"launch ✨ (2019-09-12)" +msgstr "" + +#: src/gettext_strings.rs:16 msgid "v{{ version }} built from" msgstr "v{{ version }} built from" -#: src/gettext_strings.rs:16 +#: src/gettext_strings.rs:17 msgid "Powered by Sequoia-PGP" msgstr "Powered by Sequoia-PGP" -#: src/gettext_strings.rs:17 +#: src/gettext_strings.rs:18 msgid "" "Background image retrieved from Subtle Patterns under CC BY-SA 3.0" @@ -91,69 +97,69 @@ msgstr "" "Background image retrieved from Subtle Patterns under CC BY-SA 3.0" -#: src/gettext_strings.rs:18 +#: src/gettext_strings.rs:19 msgid "Maintenance Mode" msgstr "Maintenance Mode" -#: src/gettext_strings.rs:19 +#: src/gettext_strings.rs:20 msgid "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" msgstr "Enter any verified e-mail address of your key" -#: src/gettext_strings.rs:21 +#: src/gettext_strings.rs:22 msgid "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 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 {{ key_fpr }}." msgstr "" "Managing the key {{ key_fpr }}." -#: src/gettext_strings.rs:24 +#: src/gettext_strings.rs:25 msgid "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" 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.
    To add another address, upload the key again." -msgstr "" -"Clicking \"delete\" on any address will remove it from this key. It will no " -"longer appear in a search.
    To add another address, upload the key again." - #: src/gettext_strings.rs:27 msgid "" +"Clicking \"delete\" on any address will remove it from this key. It will no " +"longer appear in a search.
    To add another address, upload the key again." +msgstr "" +"Clicking \"delete\" on any address will remove it from this key. It will no " +"longer appear in a search.
    To add another address, upload the key again." + +#: src/gettext_strings.rs:28 +msgid "" "Your key is published as only non-identity information. (what does this mean?)" msgstr "" "Your key is published as only non-identity information. (what does this mean?)" -#: src/gettext_strings.rs:28 +#: src/gettext_strings.rs:29 msgid "To add an address, upload the key again." msgstr "To add an address, upload the key again." -#: src/gettext_strings.rs:29 +#: src/gettext_strings.rs:30 #, fuzzy msgid "" "We have sent an email with further instructions to {{ address }}" -#: src/gettext_strings.rs:30 +#: src/gettext_strings.rs:31 msgid "This address was already verified." msgstr "This address was already verified." -#: src/gettext_strings.rs:31 +#: src/gettext_strings.rs:32 msgid "" "Your key {{ key_fpr }} is now published " "for the identity {{ userid }}." -#: src/gettext_strings.rs:32 +#: src/gettext_strings.rs:33 msgid "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 try uploading again." msgstr "You can try uploading again." -#: src/gettext_strings.rs:34 +#: src/gettext_strings.rs:35 #, fuzzy msgid "Upload your key" msgstr "Manage your key" -#: src/gettext_strings.rs:35 +#: src/gettext_strings.rs:36 msgid "Your public key" msgstr "Your public key" -#: src/gettext_strings.rs:36 +#: src/gettext_strings.rs:37 msgid "Upload" msgstr "Upload" -#: src/gettext_strings.rs:37 -msgid "" -"Need more info? Check our intro and " -"usage guide!" -msgstr "" -"Need more info? Check our intro and " -"usage guide!" - #: src/gettext_strings.rs:38 msgid "" +"Need more info? Check our intro and " +"usage guide!" +msgstr "" +"Need more info? Check our intro and " +"usage guide!" + +#: src/gettext_strings.rs:39 +msgid "" "You uploaded the key {{ key_fpr }}." msgstr "" "You uploaded the key {{ key_fpr }}." -#: src/gettext_strings.rs:39 +#: src/gettext_strings.rs:40 msgid "This key is revoked." msgstr "This key is revoked." -#: src/gettext_strings.rs:40 +#: src/gettext_strings.rs:41 msgid "" "It is published without identity information and can't be made available for " "search by e-mail address" @@ -225,11 +231,11 @@ msgstr "" "It is published without identity information and can't be made available for " "search by e-mail address" -#: src/gettext_strings.rs:41 +#: src/gettext_strings.rs:42 msgid "what does this mean?" msgstr "what does this mean?" -#: src/gettext_strings.rs:42 +#: src/gettext_strings.rs:43 msgid "" "This key is now published with the following identity information (what does this mean?):" @@ -237,54 +243,54 @@ msgstr "" "This key is now published with the following identity information (what does this mean?):" -#: src/gettext_strings.rs:43 +#: src/gettext_strings.rs:44 msgid "Published" msgstr "Published" -#: src/gettext_strings.rs:44 -msgid "" -"This key is now published with only non-identity information (what does this mean?)" -msgstr "" -"This key is now published with only non-identity information (what does this mean?)" - #: src/gettext_strings.rs:45 msgid "" +"This key is now published with only non-identity information (what does this mean?)" +msgstr "" +"This key is now published with only non-identity information (what does this mean?)" + +#: src/gettext_strings.rs:46 +msgid "" "To make the key available for search by e-mail address, you can verify it " "belongs to you:" msgstr "" "To make the key available for search by e-mail address, you can verify it " "belongs to you:" -#: src/gettext_strings.rs:46 +#: src/gettext_strings.rs:47 msgid "Verification Pending" msgstr "Verification Pending" -#: src/gettext_strings.rs:47 +#: src/gettext_strings.rs:48 msgid "" "Note: Some providers delay e-mails for up to 15 minutes to " "prevent spam. Please be patient." msgstr "" -#: src/gettext_strings.rs:48 +#: src/gettext_strings.rs:49 msgid "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." -"
    This identity can't be published on keys." -"openpgp.org. (why?)" -msgstr "" -"This key contains one identity that could not be parsed as an email address." -"
    This identity can't be published on keys." -"openpgp.org. (why?)" - #: src/gettext_strings.rs:50 msgid "" +"This key contains one identity that could not be parsed as an email address." +"
    This identity can't be published on keys." +"openpgp.org. (why?)" +msgstr "" +"This key contains one identity that could not be parsed as an email address." +"
    This identity can't be published on keys." +"openpgp.org. (why?)" + +#: src/gettext_strings.rs:51 +msgid "" "This key contains {{ count_unparsed }} identities that could not be parsed " "as an email address.
    These identities can't be published on keys.openpgp.org. (keys.openpgp.org. (why?)" -#: src/gettext_strings.rs:51 +#: src/gettext_strings.rs:52 #, fuzzy msgid "" "This key contains one revoked identity, which is not published. (Why?)" msgstr "This key contains one revoked identity, which is not published." -#: src/gettext_strings.rs:52 +#: src/gettext_strings.rs:53 #, fuzzy msgid "" "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 " "published." -#: src/gettext_strings.rs:53 +#: src/gettext_strings.rs:54 msgid "Your keys have been successfully uploaded:" msgstr "Your keys have been successfully uploaded:" -#: src/gettext_strings.rs:54 +#: src/gettext_strings.rs:55 msgid "" "Note: To make keys searchable by address, you must upload " "them individually." @@ -323,11 +329,11 @@ msgstr "" "Note: To make keys searchable by address, you must upload " "them individually." -#: src/gettext_strings.rs:55 +#: src/gettext_strings.rs:56 msgid "Verifying your email address…" msgstr "Verifying your email address…" -#: src/gettext_strings.rs:56 +#: src/gettext_strings.rs:57 msgid "" "If the process doesn't complete after a few seconds, ." @@ -335,15 +341,15 @@ msgstr "" "If the process doesn't complete after a few seconds, ." -#: src/gettext_strings.rs:58 +#: src/gettext_strings.rs:59 msgid "Manage your key on {{domain}}" msgstr "Manage your key on {{domain}}" -#: src/gettext_strings.rs:60 +#: src/gettext_strings.rs:61 msgid "Hi," msgstr "Hi," -#: src/gettext_strings.rs:61 +#: src/gettext_strings.rs:62 msgid "" "this is an automated message from {{ domain }}." -#: src/gettext_strings.rs:62 +#: src/gettext_strings.rs:63 msgid "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: {{ primary_fp }}" msgstr "OpenPGP key: {{ primary_fp }}" -#: 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 msgid "" -"You can find more info at {{ domain }}/" -"about." +"To manage and delete listed addresses on this key, please follow the link " +"below:" msgstr "" -"You can find more info at {{ domain }}/" -"about." +"To manage and delete listed addresses on this key, please follow the link " +"below:" #: src/gettext_strings.rs:66 msgid "" +"You can find more info at {{ domain }}/" +"about." +msgstr "" +"You can find more info at {{ domain }}/" +"about." + +#: src/gettext_strings.rs:67 +msgid "" "Greetings from the keys.openpgp.org team" msgstr "" "Greetings from the keys.openpgp.org team" -#: src/gettext_strings.rs:69 +#: src/gettext_strings.rs:70 #, fuzzy msgid "" "this is an automated message from {{domain}}. If you didn't\n" @@ -393,11 +399,11 @@ msgid "" msgstr "" "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}}" msgstr "OpenPGP key: {{primary_fp}}" -#: src/gettext_strings.rs:71 +#: src/gettext_strings.rs:72 #, fuzzy msgid "" "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 " "below:" -#: src/gettext_strings.rs:72 +#: src/gettext_strings.rs:73 msgid "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" 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}}" msgstr "Verify {{userid}} for your key on {{domain}}" -#: src/gettext_strings.rs:78 +#: src/gettext_strings.rs:79 msgid "" "this is an automated message from {{domain}}. If you " @@ -428,48 +434,48 @@ msgstr "" "style=\"text-decoration:none; color: #333\">{{domain}}. If you " "didn't request this message, please ignore it." -#: src/gettext_strings.rs:79 +#: src/gettext_strings.rs:80 msgid "OpenPGP key: {{primary_fp}}" msgstr "OpenPGP key: {{primary_fp}}" -#: src/gettext_strings.rs:80 -msgid "" -"To let others find this key from your email address \"{{userid}}\", " -"please click the link below:" -msgstr "" -"To let others find this key from your email address \"{{userid}}\", " -"please click the link below:" - #: src/gettext_strings.rs:81 msgid "" -"You can find more info at {{domain}}/about." +"To let others find this key from your email address \"{{userid}}\", " +"please click the link below:" msgstr "" -"You can find more info at {{domain}}/about." +"To let others find this key from your email address \"{{userid}}\", " +"please click the link below:" #: src/gettext_strings.rs:82 msgid "" +"You can find more info at {{domain}}/about." +msgstr "" +"You can find more info at {{domain}}/about." + +#: src/gettext_strings.rs:83 +msgid "" "Greetings from the keys.openpgp.org team" msgstr "" "Greetings from the keys.openpgp.org team" -#: src/gettext_strings.rs:87 +#: src/gettext_strings.rs:88 #, fuzzy msgid "" "To let others find this key from your email address \"{{userid}}\",\n" "please follow the link below:" 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}}" msgstr "Your key upload on {{domain}}" -#: src/gettext_strings.rs:94 +#: src/gettext_strings.rs:95 msgid "" "this is an automated message from {{domain}}. If you " @@ -479,7 +485,7 @@ msgstr "" "style=\"text-decoration:none; color: #333\">{{domain}}. If you " "didn't upload your key there, please ignore this message." -#: 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 " @@ -489,7 +495,7 @@ msgstr "" "identity information. If you want to allow others to find this key by e-mail " "address, please follow this link:" -#: src/gettext_strings.rs:101 +#: src/gettext_strings.rs:102 #, fuzzy msgid "" "this is an automated message from {{domain}}. If you didn't upload your key\n" @@ -497,7 +503,7 @@ msgid "" msgstr "" "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 msgid "" "This key was just uploaded for the first time, and is now published without\n" diff --git a/po/hagrid/hagrid.pot b/po/hagrid/hagrid.pot index f58633e..f60090e 100644 --- a/po/hagrid/hagrid.pot +++ b/po/hagrid/hagrid.pot @@ -12,15 +12,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: src/mail.rs:105 +#: src/mail.rs:104 msgid "Verify {} for your key on {}" msgstr "" -#: src/mail.rs:132 +#: src/mail.rs:131 msgid "Manage your key on {}" msgstr "" -#: src/mail.rs:159 +#: src/mail.rs:158 msgid "Your key upload on {}" msgstr "" @@ -69,270 +69,274 @@ msgid "News:" msgstr "" #: src/gettext_strings.rs:15 -msgid "v{{ version }} built from" +msgid "Three months after launch ✨ (2019-09-12)" msgstr "" #: src/gettext_strings.rs:16 -msgid "Powered by Sequoia-PGP" +msgid "v{{ version }} built from" msgstr "" #: src/gettext_strings.rs:17 -msgid "Background image retrieved from Subtle Patterns under CC BY-SA 3.0" +msgid "Powered by Sequoia-PGP" msgstr "" #: src/gettext_strings.rs:18 -msgid "Maintenance Mode" +msgid "Background image retrieved from Subtle Patterns under CC BY-SA 3.0" msgstr "" #: src/gettext_strings.rs:19 -msgid "Manage your key" +msgid "Maintenance Mode" msgstr "" #: src/gettext_strings.rs:20 -msgid "Enter any verified e-mail address of your key" +msgid "Manage your key" msgstr "" #: src/gettext_strings.rs:21 -msgid "Send link" +msgid "Enter any verified e-mail address of your key" msgstr "" #: 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 "" #: src/gettext_strings.rs:23 -msgid "Managing the key {{ key_fpr }}." +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 "" #: src/gettext_strings.rs:24 -msgid "Your key is published with the following identity information:" +msgid "Managing the key {{ key_fpr }}." msgstr "" #: src/gettext_strings.rs:25 -msgid "Delete" +msgid "Your key is published with the following identity information:" 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.
    To add another address, upload the key again." +msgid "Delete" msgstr "" #: src/gettext_strings.rs:27 -msgid "Your key is published as only non-identity information. (what does this mean?)" +msgid "Clicking \"delete\" on any address will remove it from this key. It will no longer appear in a search.
    To add another address, upload the key again." msgstr "" #: src/gettext_strings.rs:28 -msgid "To add an address, upload the key again." +msgid "Your key is published as only non-identity information. (what does this mean?)" msgstr "" #: src/gettext_strings.rs:29 -msgid "We have sent an email with further instructions to {{ address }}." +msgid "To add an address, upload the key again." msgstr "" #: src/gettext_strings.rs:30 -msgid "This address was already verified." +msgid "We have sent an email with further instructions to {{ address }}." msgstr "" #: src/gettext_strings.rs:31 -msgid "Your key {{ key_fpr }} is now published for the identity {{ userid }}." +msgid "This address was already verified." msgstr "" #: src/gettext_strings.rs:32 -msgid "Verification failed! Perhaps the link you used was expired?" +msgid "Your key {{ key_fpr }} is now published for the identity {{ userid }}." msgstr "" #: src/gettext_strings.rs:33 -msgid "You can try uploading again." +msgid "Verification failed! Perhaps the link you used was expired?" msgstr "" #: src/gettext_strings.rs:34 -msgid "Upload your key" +msgid "You can try uploading again." msgstr "" #: src/gettext_strings.rs:35 -msgid "Your public key" +msgid "Upload your key" msgstr "" #: src/gettext_strings.rs:36 -msgid "Upload" +msgid "Your public key" msgstr "" #: src/gettext_strings.rs:37 -msgid "Need more info? Check our intro and usage guide!" +msgid "Upload" msgstr "" #: src/gettext_strings.rs:38 -msgid "You uploaded the key {{ key_fpr }}." +msgid "Need more info? Check our intro and usage guide!" msgstr "" #: src/gettext_strings.rs:39 -msgid "This key is revoked." +msgid "You uploaded the key {{ key_fpr }}." msgstr "" #: 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 "" #: 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 "" #: src/gettext_strings.rs:42 -msgid "This key is now published with the following identity information (what does this mean?):" +msgid "what does this mean?" msgstr "" #: src/gettext_strings.rs:43 -msgid "Published" +msgid "This key is now published with the following identity information (what does this mean?):" msgstr "" #: src/gettext_strings.rs:44 -msgid "This key is now published with only non-identity information (what does this mean?)" +msgid "Published" msgstr "" #: 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 (what does this mean?)" msgstr "" #: 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 "" #: src/gettext_strings.rs:47 -msgid "Note: Some providers delay e-mails for up to 15 minutes to prevent spam. Please be patient." +msgid "Verification Pending" msgstr "" #: src/gettext_strings.rs:48 -msgid "Send Verification Mail" +msgid "Note: Some providers delay e-mails for up to 15 minutes to prevent spam. Please be patient." msgstr "" #: src/gettext_strings.rs:49 -msgid "This key contains one identity that could not be parsed as an email address.
    This identity can't be published on keys.openpgp.org. (why?)" +msgid "Send Verification Mail" msgstr "" #: src/gettext_strings.rs:50 -msgid "This key contains {{ count_unparsed }} identities that could not be parsed as an email address.
    These identities can't be published on keys.openpgp.org. (why?)" +msgid "This key contains one identity that could not be parsed as an email address.
    This identity can't be published on keys.openpgp.org. (why?)" msgstr "" #: src/gettext_strings.rs:51 -msgid "This key contains one revoked identity, which is not published. (Why?)" +msgid "This key contains {{ count_unparsed }} identities that could not be parsed as an email address.
    These identities can't be published on keys.openpgp.org. (why?)" msgstr "" #: src/gettext_strings.rs:52 -msgid "This key contains {{ count_revoked }} revoked identities, which are not published. (Why?)" +msgid "This key contains one revoked identity, which is not published. (Why?)" msgstr "" #: src/gettext_strings.rs:53 -msgid "Your keys have been successfully uploaded:" +msgid "This key contains {{ count_revoked }} revoked identities, which are not published. (Why?)" msgstr "" #: src/gettext_strings.rs:54 -msgid "Note: To make keys searchable by address, you must upload them individually." +msgid "Your keys have been successfully uploaded:" msgstr "" #: src/gettext_strings.rs:55 -msgid "Verifying your email address…" +msgid "Note: To make keys searchable by address, you must upload them individually." msgstr "" #: 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, ." msgstr "" -#: src/gettext_strings.rs:58 +#: src/gettext_strings.rs:59 msgid "Manage your key on {{domain}}" msgstr "" -#: src/gettext_strings.rs:60 +#: src/gettext_strings.rs:61 msgid "Hi," msgstr "" -#: src/gettext_strings.rs:61 +#: src/gettext_strings.rs:62 msgid "this is an automated message from {{ domain }}." msgstr "" -#: src/gettext_strings.rs:62 +#: src/gettext_strings.rs:63 msgid "If you didn't request this message, please ignore it." msgstr "" -#: src/gettext_strings.rs:63 +#: src/gettext_strings.rs:64 msgid "OpenPGP key: {{ primary_fp }}" msgstr "" -#: src/gettext_strings.rs:64 +#: src/gettext_strings.rs:65 msgid "To manage and delete listed addresses on this key, please follow the link below:" msgstr "" -#: src/gettext_strings.rs:65 +#: src/gettext_strings.rs:66 msgid "You can find more info at {{ domain }}/about." msgstr "" -#: src/gettext_strings.rs:66 +#: src/gettext_strings.rs:67 msgid "Greetings from the keys.openpgp.org team" msgstr "" -#: src/gettext_strings.rs:69 +#: 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:70 +#: src/gettext_strings.rs:71 msgid "OpenPGP key: {{primary_fp}}" msgstr "" -#: src/gettext_strings.rs:71 +#: 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:72 +#: src/gettext_strings.rs:73 msgid "You can find more info at {{base_uri}}/about" msgstr "" -#: src/gettext_strings.rs:73 +#: src/gettext_strings.rs:74 msgid "Greetings from the keys.openpgp.org team" msgstr "" -#: src/gettext_strings.rs:75 +#: src/gettext_strings.rs:76 msgid "Verify {{userid}} for your key on {{domain}}" msgstr "" -#: src/gettext_strings.rs:78 +#: src/gettext_strings.rs:79 msgid "this is an automated message from {{domain}}. If you didn't request this message, please ignore it." msgstr "" -#: src/gettext_strings.rs:79 +#: src/gettext_strings.rs:80 msgid "OpenPGP key: {{primary_fp}}" msgstr "" -#: src/gettext_strings.rs:80 +#: src/gettext_strings.rs:81 msgid "To let others find this key from your email address \"{{userid}}\", please click the link below:" msgstr "" -#: src/gettext_strings.rs:81 +#: src/gettext_strings.rs:82 msgid "You can find more info at {{domain}}/about." msgstr "" -#: src/gettext_strings.rs:82 +#: src/gettext_strings.rs:83 msgid "Greetings from the keys.openpgp.org team" msgstr "" -#: src/gettext_strings.rs:87 +#: src/gettext_strings.rs:88 msgid "To let others find this key from your email address \"{{userid}}\",\nplease follow the link below:" msgstr "" -#: src/gettext_strings.rs:91 +#: src/gettext_strings.rs:92 msgid "Your key upload on {{domain}}" msgstr "" -#: src/gettext_strings.rs:94 +#: src/gettext_strings.rs:95 msgid "this is an automated message from {{domain}}. If you didn't upload your key there, please ignore this message." 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:" 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." 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:" msgstr "" diff --git a/src/gettext_strings.rs b/src/gettext_strings.rs index 9e03f14..b7a051f 100644 --- a/src/gettext_strings.rs +++ b/src/gettext_strings.rs @@ -12,6 +12,7 @@ fn _dummy() { t!("You can also upload or manage your key."); t!("Find out more about this service."); t!("News:"); + t!("Three months after launch ✨ (2019-09-12)"); t!("v{{ version }} built from"); t!("Powered by Sequoia-PGP"); t!("Background image retrieved from Subtle Patterns under CC BY-SA 3.0"); diff --git a/src/web/mod.rs b/src/web/mod.rs index 777bd7c..3e87fae 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -628,6 +628,22 @@ pub mod tests { 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] fn basics() { let (_tmpdir, config) = configuration().unwrap(); @@ -782,7 +798,7 @@ pub mod tests { check_verify_link(&client, &token, "foo@invalid.example.com", "de, en"); 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] diff --git a/templates-untranslated/about/about.html.hbs b/templates-untranslated/about/about.html.hbs new file mode 100644 index 0000000..fd06434 --- /dev/null +++ b/templates-untranslated/about/about.html.hbs @@ -0,0 +1,84 @@ +
    +

    About | News | Usage | FAQ | Stats | Privacy

    + +

    + The keys.openpgp.org server is a public service for the + distribution and discovery of OpenPGP-compatible keys, commonly + referred to as a "keyserver". +

    + +

    + For instructions, see our usage guide. +

    + +

    How it works

    + +

    + An OpenPGP key contains two types of information: +

    + +
      +
    • Identity information 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. +
    • +
    • Non-identity information 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. +
    • +
    + +

    + Traditionally, these pieces of information have always been distributed + together. On keys.openpgp.org, they are + treated differently. While anyone can upload all parts of any OpenPGP key + to keys.openpgp.org, our keyserver + will only retain and publish certain parts under certain + conditions: +

    + +

    + Any non-identity information 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 keys.openpgp.org + to keep this information up to date for any key that it knows about. + This helps OpenPGP users maintain secure and reliable communication. +

    + +

    + The identity information 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. +

    + +

    Community and platform

    + +

    + 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 support at keys dot openpgp dot org. + The folks who are running this come + from various projects in the OpenPGP ecosystem, + including Sequoia-PGP, OpenKeychain, and Enigmail. +

    + +

    + Technically, keys.openpgp.org runs on the + Hagrid + keyserver software, which is based on + Sequoia-PGP. We are hosted on the + eclips.is platform, + a hosting provider focused on Internet Freedom projects, run by + Greenhost. +

    +
    diff --git a/templates-untranslated/about/faq.html.hbs b/templates-untranslated/about/faq.html.hbs new file mode 100644 index 0000000..33c52f4 --- /dev/null +++ b/templates-untranslated/about/faq.html.hbs @@ -0,0 +1,222 @@ +
    +

    About | News | Usage | FAQ | Stats | Privacy

    + +

    Is this server part of the "SKS" pool?

    + +

    + 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 keys.openpgp.org + will never be part of the SKS pool itself. +

    + +

    Is keys.openpgp.org federated? Can I help by running an instance?

    + +

    + For the moment, no. + We do plan to decentralize keys.openpgp.org + at some point. + With multiple servers + run by independent operators, + we can hopefully improve the reliability + of this service even further. +

    + +

    + 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: +

    +
      +
    1. + 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. +
    2. +
    3. + Servers run as a hobby by casual administrators do not meet our + standards for reliability and performance. +
    4. +
    + +

    Why is there no support + for identities that aren't e-mail addresses?

    + +

    + 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. +

    + +

    + Note: Some OpenPGP software creates keys with incorrectly formatted + e-mail addresses. These addresses might not be recognized correctly on + keys.openpgp.org. +

    + +

    Can I verify more than + one key for some e-mail address?

    + +

    + 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. + Non-identity information will still be distributed + for all keys. +

    + +

    + 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. +

    + +

    What do you do to + protect outgoing verification e-mails?

    + +

    + We use a modern standard called + MTA-STS, + combined with + STARTTLS Everywhere + by the EFF, + to make sure verification e-mails are sent out securely. + This protects against eavesdropping and interception during delivery. +

    + +

    + The MTA-STS mechanism depends on correctly configured e-mail servers. + You can run this test + 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. +

    + +

    + Do you distribute "third party signatures"?

    + +

    + Short answer: No. +

    + +

    + 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 "Web of Trust". + For a number of reasons, + those signatures are not currently distributed + via keys.openpgp.org. +

    + +

    + The killer reason is spam. + 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. +

    + +

    + 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 + caff-style + workflow. + If there is enough interest, + we are open to working with other OpenPGP projects + on a solution. +

    + +

    Why not sign keys + after verification?

    + +

    + The keys.openpgp.org 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. +

    + +

    Why are revoked identities not + distributed as such?

    + +

    + 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. +

    +

    + 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. +

    +

    + 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 keys.openpgp.org as soon as + we can. +

    + +

    Do you support Tor?

    + +

    + Of course! + If you have Tor installed, + you can reach keys.openpgp.org anonymously + as an + onion service: +
    + zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad.onion +

    + +

    + Why not encrypt verification e-mails?

    + + Various reasons: +
      +
    1. It is more complicated, both for our users and for us.
    2. +
    3. It doesn't prevent attacks - an attacker gains nothing from + uploading a key they don't have access to.
    4. +
    5. Deletion would still have to be possible even when a key is + lost.
    6. +
    7. It would require a different (and more complicated) mechanism to + upload keys that can only sign.
    8. +
    + +

    + I have trouble updating some keys with GnuPG. Is there a bug? +

    + +

    + This is a problem with current versions of GnuPG. If you attempt to + update a key from keys.openpgp.org that + contains no identity information, GnuPG will refuse + to process the key: +

    +
    + $ gpg --receive-keys A2604867523C7ED8
    + gpg: key A2604867523C7ED8: no user ID +
    +

    + We are working with the GnuPG team to resolve this problem. +

    +
    diff --git a/templates-untranslated/about/news.html.hbs b/templates-untranslated/about/news.html.hbs new file mode 100644 index 0000000..5666de3 --- /dev/null +++ b/templates-untranslated/about/news.html.hbs @@ -0,0 +1,307 @@ +
    +

    About | News | Usage | FAQ | Stats | Privacy

    + +

    +
    2019-09-12 📅
    + Three months after launch ✨ +

    + +

    + It has been three months now + since we launched + keys.openpgp.org. + We are happy to report: + It has been a resounding success! + 🥳 + +

    Adoption in clients

    + +

    + The + keys.openpgp.org + keyserver has been received very well by users, + and clients are adopting it rapidly. + It is now used by default in + GPGTools, + Enigmail, + OpenKeychain, + GPGSync, + Debian, + NixOS, + and others. + Many tutorials have also been updated, + pointing users our way. + +

    + At the time of writing, + more than 70.000 e-mail addresses + have been verified. + +

    +
    + If that isn't a promising curve, I don't know what is :) +
    + +

    + 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. + +

    All's good in operations

    + +

    + 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. + +

    + 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. + +

    + We made several small operational improvements + including deployment of + DNSSEC, + implementing some + rate-limiting, + nailing down our + content security policy + headers, + and enabling + single-hop + mode on our Tor Onion Service. + You can find a more complete list + here. + +

    Secure mail delivery with MTA-STS

    + +

    + One improvement that deserves special mention is + MTA-STS, + which improves the security of outgoing e-mails. + +

    + 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. + +

    + With MTA-STS, domain operators can indicate + (via HTTPS) + that their mail server does 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. + +

    + This is extremely useful for service like + keys.openpgp.org. + 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. + +

    + You can run a check + 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! + +

    Work in progress

    + +

    + We are working on two features: + +

    + The first is localization. + 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 + Localization Lab + to make the website and outgoing e-mails + available in several more languages. + +

    + The second is to bring back + third-party signatures. + As mentioned in our FAQ, + we currently don't support these due to spam and potential for abuse. + The idea is to require + cross-signatures, + 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. + +

    + Although work is in progress for both of those features, + neither have a planned time of release yet. + +

    + Regarding the "no user ID" issue with GnuPG + (mentioned in our + last news post + and our + FAQ), + 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. + +

    + That's it! + Thanks for your interest! + 👋 + +


    + +

    +
    2019-06-12 📅
    + Launching a new keyserver! 🚀 +

    + +

    + From a community effort by + Enigmail, + OpenKeychain, + and Sequoia PGP, + we are pleased to announce + the launch of the new public OpenPGP keyserver + keys.openpgp.org! + Hurray! 🎉 + +

    Give me the short story!

    + +
      +
    • Fast and reliable. No wait times, no downtimes, no inconsistencies.
    • +
    • Precise. Searches return only a single key, which allows for easy key discovery.
    • +
    • Validating. Identities are only published with consent, + while non-identity information is freely distributed.
    • +
    • Deletable. Users can delete personal information with a simple e-mail confirmation.
    • +
    • Built on Rust, powered by Sequoia PGP - free and open source, running AGPLv3.
    • +
    + + Get started right now by uploading your key! + +

    Why a new keyserver?

    + +

    + We created keys.openpgp.org + 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 + abuse, + performance, + as well as privacy issues, + and more recently also + GDPR + compliance questions. + Kristian Fiskerstrand has done a stellar job maintaining the pool for + more than ten years, + but at this point development activity seems to have + mostly ceased. + +

    + We thought it time to consider a fresh approach to solve these problems. + +

    Identity and non-identity information

    + +

    + The keys.openpgp.org keyserver splits up + identity and non-identity information in keys. + You can find more details on our about page: + 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. + +

    + 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. + +

    Support in Enigmail and OpenKeychain

    + +

    + The keys.openpgp.org keysever + will receive first-party support in upcoming releases of + Enigmail for Thunderbird, + as well as + OpenKeychain 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. + +

    Current challenges

    + +

    + Privacy-preserving techniques in keyservers are still new, + and sadly there are still a few compatibility issues + caused by splitting out identity information. + +

    + 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. + +

    The future

    + +

    + 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 keys.openpgp.org reliable and fast 🐇, + fix any upcoming bugs 🐞, + and listen to feedback from the community. 👂 + +

    + For more info, head on over to + our about page + and FAQ pages. + You can get started right away + by uploading your your key! + Beyond that there is more cool stuff to discover, + like our API, + and an Onion Service! + +

    + Cheers! + 🍻 +

    diff --git a/templates-untranslated/about/privacy.html.hbs b/templates-untranslated/about/privacy.html.hbs new file mode 100644 index 0000000..88ad5e7 --- /dev/null +++ b/templates-untranslated/about/privacy.html.hbs @@ -0,0 +1,66 @@ +
    +

    About | News | Usage | FAQ | Stats | Privacy

    + +

    + 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: +

      +
    • E-Mail Addresses +

      E-Mail addresses contained in User + IDs are personally identifiable information (PII). + Special care is taken to make sure they are used only with + consent: +

        +
      • + Publishing requires double + opt-in validation, to prove ownership of the + e-mail address in question. +
      • +
      • Addresses are searchable by exact E-Mail address, + but not by associated name.
      • +
      • Enumeration of addresses is not possible.
      • +
      • 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. +
      • +
      +

      +

      This data is never handed collectively ("as a dump") to third + parties. +

      +
    • +
    • Public Key Data +

      The cryptographic content of OpenPGP keys is not considered personally + identifiable information. This includes specifically + public key material, + self-signatures, and + revocation signatures. +

      +

      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. +

      +
    • +
    • Other User ID data +

      An OpenPGP key may contain personal data other than E-Mail + addresses, such as User IDs + that do not contain E-Mail addresses, or image attributes. This data is stripped + during upload and never stored, processed, or distributed in + any way. +

      +

      OpenPGP packet types that were not specifically mentioned above are + stripped during upload and never stored, processed or + distributed in any way. +

      +
    • +
    +

    Data is never relayed to third parties outside of + what is available from the public API interfaces, + and what is described in this policy. +

    +
    diff --git a/templates-untranslated/about/stats.html.hbs b/templates-untranslated/about/stats.html.hbs new file mode 100644 index 0000000..0b8a9b3 --- /dev/null +++ b/templates-untranslated/about/stats.html.hbs @@ -0,0 +1,31 @@ +
    +

    About | News | Usage | FAQ | Stats | Privacy

    + +

    Verified e-mail addresses

    + +

    + A simple statistic of the total number of e-mail addresses that are currently verified. 📈 +

    + +

    +

    +

    +

    +

    +

    + +

    Load Average

    + +

    + The "load average" of a server is a statistic of how busy it is. Simply put: +

      +
    • 0.0 means the keys.openpgp.org host is completely idle
    • +
    • 1.0 is fairly busy
    • +
    • 4.0 and above means it's on fire 🔥
    • +
    +

    + +

    +

    +

    +
    diff --git a/templates-untranslated/about/template-prefix b/templates-untranslated/about/template-prefix new file mode 100644 index 0000000..7757917 --- /dev/null +++ b/templates-untranslated/about/template-prefix @@ -0,0 +1 @@ +{{#> layout }} diff --git a/templates-untranslated/about/template-suffix b/templates-untranslated/about/template-suffix new file mode 100644 index 0000000..62766e0 --- /dev/null +++ b/templates-untranslated/about/template-suffix @@ -0,0 +1 @@ +{{/layout}} diff --git a/templates-untranslated/about/usage.html.hbs b/templates-untranslated/about/usage.html.hbs new file mode 100644 index 0000000..4a7cbdb --- /dev/null +++ b/templates-untranslated/about/usage.html.hbs @@ -0,0 +1,157 @@ +
    +

    About | News | Usage | FAQ | Stats | Privacy

    + +

    + On this page, we collect information on how to use + keys.openpgp.org with different OpenPGP + software products.
    + 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. +

    + +

    +
    + Enigmail +

    +

    + Enigmail for Thunderbird + uses keys.openpgp.org by default since + version 2.0.12. +

    +

    Full support is available since Enigmail 2.1 + (for Thunderbird 68 or newer): +

      +
    • Keys will be kept up to date automatically.
    • +
    • During key creation, you can optionally upload and verify your key.
    • +
    • Keys can be discovered by e-mail address.
    • +
    +

    + +

    +
    + GPG Suite +

    +

    + GPG Suite for macOS + uses keys.openpgp.org by default + since August 2019. +

    + +

    +
    + OpenKeychain +

    +

    + OpenKeychain for Android + uses keys.openpgp.org by default + since July 2019. +

      +
    • Keys will be kept up to date automatically.
    • +
    • Keys can be discovered by e-mail address.
    • +
    +

    + +

    + Note that there is no built-in support for upload and e-mail verification so far. +

    + +

    +
    + GnuPG +

    + +

    + To configure GnuPG + to use keys.openpgp.org as keyserver, + add this line to your gpg.conf file: +

    + keyserver hkps://keys.openpgp.org +
    +

    + +

    Retrieving keys

    +
      +
    • + To locate the key of a user, by email address: +
      gpg --auto-key-locate keyserver --locate-keys user@example.net
      +
    • +
    • To refresh all your keys (e.g. new revocation certificates and subkeys): +
      gpg --refresh-keys
      +
    • +
    + +

    Uploading your key

    +

    + Keys can be uploaded with GnuPG's --send-keys command, but + identity information can't be verified that way to make the key + searchable by e-mail address (what's that?). +

    + +
      +
    • + You can try this shortcut for uploading your key, which outputs + a direct link to the verification page: +
      + gpg --export your_address@example.net | curl -T - {{ base_uri }} +
      +
    • +
    • + Alternatively, you can export them to a file and enter that into the + upload page: +
      + gpg --export your_address@example.net > my_key.pub +
      +
    • +
    + +

    Troubleshooting

    +
      +
    • + Some old ~/gnupg/dirmngr.conf files contain a line like this: +
      + hkp-cacert ~/.gnupg/sks-keyservers.netCA.pem +
      +

      + This configuration is no longer necessary, + but prevents regular certificates from working. + It is recommended to simply remove this line from the configuration. +

      +
    • +
    • + While refreshing keys, you may see errors like the following: +
      gpg: key A2604867523C7ED8: no user ID
      + This is a known problem in GnuPG. + We are working with the GnuPG team to resolve this issue. +
    • +
    + +

    Usage via Tor

    +

    + For users who want to be extra-careful, + keys.openpgp.org can be reached anonymously as an + onion service. + If you have + Tor + installed, use the following configuration: +

    + keyserver hkp://zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad.onion +
    +

    + +

    API

    + +

    + We offer an API for integrated support in OpenPGP applications. Check + out our API documentation. +

    + +

    Others

    + +

    + 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 + if you + want to help out! +

    + +