diff --git a/snikket_web/invite.py b/snikket_web/invite.py
index 6462e2c..19a4314 100644
--- a/snikket_web/invite.py
+++ b/snikket_web/invite.py
@@ -148,15 +148,15 @@ async def register(id_: str) -> typing.Union[str, quart.Response]:
except aiohttp.ClientResponseError as exc:
if exc.status == 409:
form.localpart.errors.append(
- _l("That username is already taken")
+ _l("That username is already taken.")
)
elif exc.status == 403:
form.localpart.errors.append(
- _l("Registration was declined for unknown reasons")
+ _l("Registration was declined for unknown reasons.")
)
elif exc.status == 400:
form.localpart.errors.append(
- _l("The username is not valid")
+ _l("The username is not valid.")
)
elif exc.status == 404:
return redirect(url_for(".view", id_=id_))
@@ -216,7 +216,7 @@ async def reset(id_: str) -> typing.Union[str, quart.Response]:
except aiohttp.ClientResponseError as exc:
if exc.status == 403:
form.localpart.errors.append(
- _l("Registration was declined for unknown reasons")
+ _l("Registration was declined for unknown reasons.")
)
elif exc.status == 404:
return redirect(url_for(".view", id_=id_))
diff --git a/snikket_web/templates/library.j2 b/snikket_web/templates/library.j2
index 1eb2a97..d717a23 100644
--- a/snikket_web/templates/library.j2
+++ b/snikket_web/templates/library.j2
@@ -80,7 +80,7 @@
{#- -#}
{% trans %}Invalid input{% endtrans %}
{%- if error_list | length == 1 -%}
-
{{ error_list[0] }}.
+
{{ error_list[0] }}
{%- else -%}
{%- for error in error_list -%}
diff --git a/snikket_web/translations/messages.pot b/snikket_web/translations/messages.pot
index 5492233..8b012ee 100644
--- a/snikket_web/translations/messages.pot
+++ b/snikket_web/translations/messages.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2021-03-20 16:15+0100\n"
+"POT-Creation-Date: 2021-03-20 16:27+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -149,39 +149,39 @@ msgstr ""
msgid "Main"
msgstr ""
-#: snikket_web/invite.py:106
+#: snikket_web/invite.py:107
msgid "Username"
msgstr ""
-#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:42
+#: snikket_web/invite.py:111 snikket_web/invite.py:178 snikket_web/main.py:42
msgid "Password"
msgstr ""
-#: snikket_web/invite.py:114 snikket_web/invite.py:181
+#: snikket_web/invite.py:115 snikket_web/invite.py:182
msgid "Confirm password"
msgstr ""
-#: snikket_web/invite.py:118 snikket_web/invite.py:185
+#: snikket_web/invite.py:119 snikket_web/invite.py:186
msgid "The passwords must match"
msgstr ""
-#: snikket_web/invite.py:123
+#: snikket_web/invite.py:124
msgid "Create account"
msgstr ""
-#: snikket_web/invite.py:150
-msgid "That username is already taken"
+#: snikket_web/invite.py:151
+msgid "That username is already taken."
msgstr ""
-#: snikket_web/invite.py:154 snikket_web/invite.py:218
-msgid "Registration was declined for unknown reasons"
+#: snikket_web/invite.py:155 snikket_web/invite.py:219
+msgid "Registration was declined for unknown reasons."
msgstr ""
-#: snikket_web/invite.py:158
-msgid "The username is not valid"
+#: snikket_web/invite.py:159
+msgid "The username is not valid."
msgstr ""
-#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32
+#: snikket_web/invite.py:191 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29
msgid "Change password"
msgstr ""
@@ -252,7 +252,7 @@ msgid "Update profile"
msgstr ""
#: snikket_web/user.py:101
-msgid "Incorrect password"
+msgid "Incorrect password."
msgstr ""
#: snikket_web/user.py:105
@@ -262,7 +262,7 @@ msgstr ""
#: snikket_web/user.py:113
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please"
-" use the app"
+" use the app."
msgstr ""
#: snikket_web/user.py:161
@@ -789,19 +789,20 @@ msgid ""
msgstr ""
#: snikket_web/templates/invite_register.html:14
-#: snikket_web/templates/invite_view.html:38
+#: snikket_web/templates/invite_view.html:39
msgid "App already installed?"
msgstr ""
#: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21
-#: snikket_web/templates/invite_view.html:40
-#: snikket_web/templates/invite_view.html:105
+#: snikket_web/templates/invite_view.html:41
+#: snikket_web/templates/invite_view.html:106
+#: snikket_web/templates/invite_view.html:134
msgid "Open the app"
msgstr ""
#: snikket_web/templates/invite_register.html:18
-#: snikket_web/templates/invite_view.html:42
+#: snikket_web/templates/invite_view.html:43
msgid "This button works only if you have the app installed already!"
msgstr ""
@@ -887,7 +888,7 @@ msgid ""
msgstr ""
#: snikket_web/templates/invite_reset_view.html:26
-#: snikket_web/templates/invite_view.html:76
+#: snikket_web/templates/invite_view.html:77
msgid ""
"Your camera will turn on. Point it at the square code below until it is "
"within the highlighted square on your screen, and wait until the app "
@@ -899,7 +900,7 @@ msgid "You will then be prompted to enter a new password for your account."
msgstr ""
#: snikket_web/templates/invite_reset_view.html:29
-#: snikket_web/templates/invite_view.html:44
+#: snikket_web/templates/invite_view.html:45
msgid "Alternatives"
msgstr ""
@@ -975,21 +976,25 @@ msgid "Get it on Google Play"
msgstr ""
#: snikket_web/templates/invite_view.html:30
-#: snikket_web/templates/invite_view.html:101
+#: snikket_web/templates/invite_view.html:102
msgid "Download on the App Store"
msgstr ""
-#: snikket_web/templates/invite_view.html:34
+#: snikket_web/templates/invite_view.html:32
+msgid "Get it on F-Droid"
+msgstr ""
+
+#: snikket_web/templates/invite_view.html:35
msgid "Send to mobile device"
msgstr ""
-#: snikket_web/templates/invite_view.html:37
+#: snikket_web/templates/invite_view.html:38
msgid ""
"After installation the app should automatically open and prompt you to "
"create an account. If not, simply click the button below."
msgstr ""
-#: snikket_web/templates/invite_view.html:45
+#: snikket_web/templates/invite_view.html:46
#, python-format
msgid ""
"You can connect to Snikket using any XMPP-compatible software. If the "
@@ -997,64 +1002,82 @@ msgid ""
"href=\"%(register_url)s\">register an account manually."
msgstr ""
-#: snikket_web/templates/invite_view.html:51
+#: snikket_web/templates/invite_view.html:52
msgid "Scan invite code"
msgstr ""
-#: snikket_web/templates/invite_view.html:54
-#: snikket_web/templates/invite_view.html:83
-#: snikket_web/templates/invite_view.html:95
-#: snikket_web/templates/invite_view.html:111
+#: snikket_web/templates/invite_view.html:55
+#: snikket_web/templates/invite_view.html:84
+#: snikket_web/templates/invite_view.html:96
+#: snikket_web/templates/invite_view.html:112
+#: snikket_web/templates/invite_view.html:124
+#: snikket_web/templates/invite_view.html:140
msgid "Close"
msgstr ""
-#: snikket_web/templates/invite_view.html:57
+#: snikket_web/templates/invite_view.html:58
msgid ""
"You can transfer this invite to your mobile device by scanning a code "
"with your camera. You can use either a QR scanner app or the Snikket app "
"itself."
msgstr ""
-#: snikket_web/templates/invite_view.html:62
+#: snikket_web/templates/invite_view.html:63
msgid "Using a QR code scanner"
msgstr ""
-#: snikket_web/templates/invite_view.html:64
+#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr ""
-#: snikket_web/templates/invite_view.html:69
+#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a QR code scanner on your mobile device to scan the code "
"below:"
msgstr ""
-#: snikket_web/templates/invite_view.html:75
+#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the "
"'Scan' button at the top."
msgstr ""
-#: snikket_web/templates/invite_view.html:92
+#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS"
msgstr ""
-#: snikket_web/templates/invite_view.html:98
+#: snikket_web/templates/invite_view.html:99
msgid ""
"After downloading Snikket from the app store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed."
msgstr ""
-#: snikket_web/templates/invite_view.html:100
+#: snikket_web/templates/invite_view.html:101
msgid "First download Snikket from the app store using the button below:"
msgstr ""
-#: snikket_web/templates/invite_view.html:102
+#: snikket_web/templates/invite_view.html:103
+#: snikket_web/templates/invite_view.html:131
msgid ""
"After the installation is complete, you can return to this page and tap "
"the \"Open the app\" button to continue with the setup:"
msgstr ""
+#: snikket_web/templates/invite_view.html:121
+#: snikket_web/templates/invite_view.html:130
+msgid "Install via F-Droid"
+msgstr ""
+
+#: snikket_web/templates/invite_view.html:127
+msgid ""
+"After installing Snikket via F-Droid, you have to return to this invite "
+"link and tap on \"Open the app\" to proceed."
+msgstr ""
+
+#: snikket_web/templates/invite_view.html:129
+msgid "First install Snikket from F-Droid using the button below:"
+msgstr ""
+
#: snikket_web/templates/library.j2:18
msgid "Copy link"
msgstr ""
diff --git a/snikket_web/user.py b/snikket_web/user.py
index 3f14ce6..3253912 100644
--- a/snikket_web/user.py
+++ b/snikket_web/user.py
@@ -98,7 +98,7 @@ async def change_pw() -> typing.Union[str, quart.Response]:
quart.exceptions.Forbidden):
# server refused current password, set an appropriate error
form.current_password.errors.append(
- _("Incorrect password"),
+ _("Incorrect password."),
)
else:
await flash(
@@ -112,7 +112,7 @@ async def change_pw() -> typing.Union[str, quart.Response]:
EAVATARTOOBIG = _l(
"The chosen avatar is too big. To be able to upload larger "
- "avatars, please use the app"
+ "avatars, please use the app."
)