Compare commits

...

24 Commits

Author SHA1 Message Date
Matthew Wild
488dc9a3f3 Merge pull request #202 from snikket-im/ka/oauthtweaks
OAuth tweaks
2025-06-05 17:55:56 +01:00
Kim Alvefur
1a65ba6150 Include a software id in oauth client registration
This is supposed to be a unique and persistent identifier for the
software itself, regardless of version or deployment instance.

Generated from the domain name in the comment using uuid_generate_sha1()
2025-06-05 17:52:04 +01:00
Kim Alvefur
9474238dee Declare as a web application in oauth client registration
It is, even if the password grant isn't restricted to that, but if ever
the authorization code flow is implemented, it'll be correct.
2025-06-05 17:52:01 +01:00
Kim Alvefur
60e663316b Declare that oauth client credentials are using POST method
Not enforced by mod_http_oauth2, but could be in the future
2025-06-05 17:50:52 +01:00
Kim Alvefur
770d05c72c Declare use of no response types, since password grant uses none
Needless restriction removed in
https://hg.prosody.im/prosody-modules/rev/ef81c67e1ae7
2025-06-05 17:50:52 +01:00
Kim Alvefur
ea75d8e832 Include requested scopes in oauth client registration
This can be used on the oauth server side to enforce that no additional
scopes are added.
2025-06-05 17:50:52 +01:00
Kim Alvefur
145dda8c19 Include web portal version in oauth client registration
This could be shown in client listings and audit logs, and checked to
ensure old versions stop being used. Not the most relevant for the web
portal as it is closely tied together with the server, but could help
answer questions about where old grants come from.
2025-06-05 17:50:52 +01:00
Matthew Wild
149a79cb2c Merge pull request #203 from snikket-im/make-lint
prosodyclient: Fixes to satisfy mypy
2025-06-05 17:48:23 +01:00
Matthew Wild
69f77020b8 prosodyclient: Fixes to satisfy mypy 2025-06-05 17:46:05 +01:00
Matthew Wild
5ac481a4b4 prosodyclient: Switch to black formatting and remove lint issues 2025-06-05 17:33:22 +01:00
Matthew Wild
56470eec01 Github: Use flake8 target 2025-06-05 17:32:34 +01:00
Matthew Wild
9b4903b230 Makefile: Add lint, format (black), flake8 and mypy targets 2025-06-05 17:29:44 +01:00
Matthew Wild
74c3946609 Bump log level of oauth errors 2025-06-02 11:36:08 +01:00
Matthew Wild
feabed6565 Register as an OAuth client and authenticate token requests
mod_http_oauth2 in prosody-modules was updated to require client
authentication for the password grant, which previously did not need
client authentication.

This means that the first request we make to Prosody will now register as a
client in order to obtain client_id and client_secret.

There is no real security gain from this approach (unlike other grant types,
the password grant does not do redirects which could be intercepted). In the
future, however, some security could be gained by having Prosody restrict
the ability to use the password grant to privileged OAuth clients. This would
prevent third-party OAuth clients from using the password grant which is not
suitable for that purpose.
2025-06-02 11:36:08 +01:00
Jonas Schäfer
af13a3cc47 Merge pull request #197 from snikket-im/z/play-badge-l10n
Serve localized Google Play badges locally
2025-04-13 08:57:16 +02:00
Kim Alvefur
466e3e79b7 Serve localized Google Play badges locally
Fixes #196

Badges downloaded from <https://play.google.com/intl/en_us/badges/> with
a bit of automation to get one per supported language.
2025-04-12 20:23:10 +02:00
Weblate
3f1ce7565b Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/
2024-08-11 19:21:49 +00:00
Matthew Wild
265ca4db8f Merge pull request #191 from snikket-im/fix/issue190
Ignore that users do not have access to metrics
2024-08-11 20:21:32 +01:00
Kim Alvefur
5015c4aa43 fixup: refresh translation code references 2024-08-11 16:36:53 +02:00
Kim Alvefur
465720c5b1 fixup: please flake8 2024-08-11 16:34:06 +02:00
Kim Alvefur
2a8e7ae72b fixup: please mypy 2024-08-11 16:25:17 +02:00
Andrey
449e345ee5 Ignore that users do not have access to metrics
Fixes #190

The templates appear to handle this being False, so that seems the path
of least resistance.
2024-08-11 15:56:40 +02:00
Andrey
51798ecc43 Translated using Weblate (Russian)
Currently translated at 100.0% (373 of 373 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/ru/
2024-07-18 17:08:03 +00:00
uira
1e15ef5fce Translated using Weblate (Indonesian)
Currently translated at 100.0% (373 of 373 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/id/
2024-07-18 17:07:58 +00:00
35 changed files with 802 additions and 719 deletions

View File

@@ -48,7 +48,7 @@ jobs:
pip install flake8 flake8-print
- name: Linting
run: |
python -m flake8 snikket_web
make flake8
translation-check:
runs-on: ubuntu-latest

View File

@@ -5,6 +5,8 @@ generated_css_files = $(patsubst snikket_web/scss/%.scss,snikket_web/static/css/
translation_basepath = snikket_web/translations
pot_file = $(translation_basepath)/messages.pot
black_formatted_py = snikket_web/prosodyclient.py
PYTHON3 ?= python3
SCSSC ?= sassc --load-path snikket_web/scss/
@@ -34,4 +36,20 @@ compile_translations:
-pybabel compile -d $(translation_basepath)
.PHONY: lint
lint: format flake8
.PHONY: format
format:
$(PYTHON3) -m black $(black_formatted_py)
.PHONY: flake8
flake8:
$(PYTHON3) -m flake8 --exclude=$(subst $(space),$(comma),$(strip $(black_formatted_py))) snikket_web
$(PYTHON3) -m flake8 --ignore=E501,W503 $(black_formatted_py)
.PHONY: mypy
mypy:
$(PYTHON3) -m mypy --python-version 3.11 snikket_web
.PHONY: build_css clean update_translations compile_translations extract_translations force_update_translations

View File

@@ -47,10 +47,20 @@ def apple_store_badge() -> str:
return url_for("static", filename="img/apple/en.svg")
def play_store_badge() -> str:
locale = selected_locale()
filename = "{}_badge_web_generic.png".format(locale)
static_path = pathlib.Path(__file__).parent / "static" / "img" / "google"
if (static_path / filename).exists():
return url_for("static", filename="img/google/{}".format(filename))
return url_for("static", filename="img/google/en_badge_web_generic.png")
@bp.context_processor
def context() -> typing.Dict[str, typing.Any]:
return {
"apple_store_badge": apple_store_badge,
"play_store_badge": play_store_badge,
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -32,7 +32,7 @@
{%- endif -%}
<div class="install-buttons">
<ul>
<li><a href="{{ play_store_url }}"><img alt='{% trans %}Get it on Google Play{% endtrans %}' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png' class="play"/></a></li>
<li><a href="{{ play_store_url }}"><img alt='{% trans %}Get it on Google Play{% endtrans %}' src='{{ play_store_badge() }}' class="play"/></a></li>
{%- if apple_store_url -%}
<li><a href="{{ apple_store_url }}" class="popover" data-popover-id="apple-popover"><img alt='{% trans %}Download on the App Store{% endtrans %}' src="{{ apple_store_badge() }}" class="apple"></a></li>
{%- endif -%}

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2022-05-30 14:01+0000\n"
"Last-Translator: Daniel Holmgaard <fovatis@tutanota.com>\n"
"Language-Team: Danish <http://i18n.sotecware.net/projects/snikket/web-portal/"
@@ -353,7 +353,7 @@ msgstr ""
"fil i XEP-0227-format (forudsat format: %(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Fejl"
@@ -425,15 +425,15 @@ msgstr "Kontodata"
msgid "Upload"
msgstr "Upload"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Forkert adgangskode."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Adgangskode ændret"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -441,15 +441,15 @@ msgstr ""
"Den valgte avatar er for stor. For at kunne uploade større avatarer skal du "
"bruge appen."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Profil opdateret"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Exporter"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "Du har i øjeblikket ingen kontodata at eksportere."

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: SnikketWeb 0.1.0\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2024-01-03 16:08+0000\n"
"Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
"Language-Team: German <http://i18n.sotecware.net/projects/snikket/web-portal/"
@@ -340,7 +340,7 @@ msgstr ""
"im XEP-0227-Format verarbeitet werden (erhaltenes Format: %(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Fehler"
@@ -412,15 +412,15 @@ msgstr "Kontodaten"
msgid "Upload"
msgstr "Hochladen"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Ungültiges Passwort."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Passwort geändert"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -428,15 +428,15 @@ msgstr ""
"Das gewählte Profilbild ist zu groß. Benutze die App um größere Bilder "
"hochladen zu können."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Profil gespeichert"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Exportieren"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "Du hast derzeit keine Kontodaten, die exportiert werden können."

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2021-06-19 15:01+0000\n"
"Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
"Language-Team: English <https://i18n.sotecware.net/projects/snikket/web-"
@@ -391,7 +391,7 @@ msgid ""
msgstr ""
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr ""
@@ -465,35 +465,35 @@ msgstr ""
msgid "Upload"
msgstr ""
#: snikket_web/user.py:122
#: snikket_web/user.py:125
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect password."
msgstr "Incorrect password"
#: snikket_web/user.py:126
#: snikket_web/user.py:129
#, fuzzy
#| msgid "Password change failed"
msgid "Password changed"
msgstr "Password change failed"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
msgstr ""
#: snikket_web/user.py:181
#: snikket_web/user.py:184
#, fuzzy
#| msgid "Profile"
msgid "Profile updated"
msgstr "Profile"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr ""
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr ""

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2021-06-19 15:01+0000\n"
"Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
"Language-Team: English (United Kingdom) <https://i18n.sotecware.net/projects/"
@@ -391,7 +391,7 @@ msgid ""
msgstr ""
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr ""
@@ -467,35 +467,35 @@ msgstr ""
msgid "Upload"
msgstr ""
#: snikket_web/user.py:122
#: snikket_web/user.py:125
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect password."
msgstr "Incorrect password"
#: snikket_web/user.py:126
#: snikket_web/user.py:129
#, fuzzy
#| msgid "Password change failed"
msgid "Password changed"
msgstr "Password change failed"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
msgstr ""
#: snikket_web/user.py:181
#: snikket_web/user.py:184
#, fuzzy
#| msgid "Profile"
msgid "Profile updated"
msgstr "Profile"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr ""
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr ""

View File

@@ -6,12 +6,12 @@
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: translations@snikket.org\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2024-05-06 05:04+0000\n"
"Last-Translator: J👀 <j@upsub.me>\n"
"Language-Team: Spanish <http://i18n.sotecware.net/projects/snikket/"
"web-portal/es/>\n"
"Language-Team: Spanish <http://i18n.sotecware.net/projects/snikket/web-"
"portal/es/>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -343,7 +343,7 @@ msgstr ""
"facilitado: %(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Error"
@@ -415,15 +415,15 @@ msgstr "Datos de la cuenta"
msgid "Upload"
msgstr "Subida"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Contraseña incorrecta."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Contraseña cambiada"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -431,15 +431,15 @@ msgstr ""
"El avatar elegido es demasiado grande. Para poder subir avatares más "
"grandes, utilice la aplicación, por favor."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Perfil actualizado"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Exportar"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "No dispone actualmente de datos de cuenta para exportar."
@@ -1428,8 +1428,8 @@ msgid ""
"This page allows you to reset the password of your account, <strong>"
"%(account_jid)s</strong>, once."
msgstr ""
"En esta página puedes restablecer la contraseña de tu cuenta, "
"<strong>%(account_jid)s</strong>, una vez."
"En esta página puedes restablecer la contraseña de tu cuenta, <strong>"
"%(account_jid)s</strong>, una vez."
#: snikket_web/templates/invite_reset_view.html:17
msgid "Using the app"
@@ -1518,8 +1518,8 @@ msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
"Puedes cerrar esta página o entrar en sesión al portal web para <a href=\""
"%(login_url)s\">gestionar tu cuenta</a>."
"Puedes cerrar esta página o entrar en sesión al portal web para <a href="
"\"%(login_url)s\">gestionar tu cuenta</a>."
#: snikket_web/templates/invite_success.html:21
msgid "Import successful"
@@ -1595,9 +1595,9 @@ msgid ""
"Install the Snikket App on your Android device (<a href=\"%(ios_info_url)s\" "
"rel=\"noopener noreferrer\" target=\"_blank\">iOS coming soon!</a>)."
msgstr ""
"Instala la App Snikket en tu dispositivo Android (<a href=\"%(ios_info_url)"
"s\" rel=\"noopener noreferrer\" target=\"_blank\">¡iOS disponible en "
"breve!</a>)."
"Instala la App Snikket en tu dispositivo Android (<a href=\"%(ios_info_url)s"
"\" rel=\"noopener noreferrer\" target=\"_blank\">¡iOS disponible en breve!</"
"a>)."
#: snikket_web/templates/invite_view.html:35
msgid "Get it on Google Play"
@@ -1632,8 +1632,8 @@ msgid ""
"\">register an account manually</a>."
msgstr ""
"Puedes conectarte a Snikket usando software compatible con XMPP. Si el botón "
"de arriba no funciona con tu app, puede que necesites <a href=\""
"%(register_url)s\">registrar una cuenta manualmente</a>."
"de arriba no funciona con tu app, puede que necesites <a href="
"\"%(register_url)s\">registrar una cuenta manualmente</a>."
#: snikket_web/templates/invite_view.html:59
msgid "Scan invite code"
@@ -1780,8 +1780,8 @@ msgid ""
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
"em>. Your password was not sent."
msgstr ""
"El servicio Snikket sólo aloja direcciones que terminan en "
"<em>@%(snikket_domain)s</em>. Tu contraseña no se envió."
"El servicio Snikket sólo aloja direcciones que terminan en <em>@"
"%(snikket_domain)s</em>. Tu contraseña no se envió."
#: snikket_web/templates/policies.html:4 snikket_web/templates/policies.html:10
msgid "Policies"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2021-03-31 13:00+0000\n"
"Last-Translator: Tilman Jiménez <tilman.jimenez@tu-dortmund.de>\n"
"Language-Team: Spanish (Mexico) <https://i18n.sotecware.net/projects/snikket/"
@@ -377,7 +377,7 @@ msgid ""
msgstr ""
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr ""
@@ -451,33 +451,33 @@ msgstr ""
msgid "Upload"
msgstr ""
#: snikket_web/user.py:122
#: snikket_web/user.py:125
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect password."
msgstr "Contraseña incorrecta"
#: snikket_web/user.py:126
#: snikket_web/user.py:129
#, fuzzy
#| msgid "Password"
msgid "Password changed"
msgstr "Contraseña"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
msgstr ""
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr ""
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr ""
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr ""

View File

@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: translations@snikket.org\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2024-05-02 21:15+0000\n"
"Last-Translator: BetaRays <BetaRays@proton.me>\n"
"Language-Team: French <http://i18n.sotecware.net/projects/snikket/web-portal/"
@@ -342,7 +342,7 @@ msgstr ""
"fourni: %(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Erreur"
@@ -414,15 +414,15 @@ msgstr "Données du compte"
msgid "Upload"
msgstr "Télécharger"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Mot de passe incorrect."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Mot de passe changé"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -430,15 +430,15 @@ msgstr ""
"Lavatar choisi est trop gros. Pour utiliser un avatar aussi large, veuillez "
"utiliser lapplication."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Profil mis à jour"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Exporter"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "Vous navez actuellement aucune donnée de compte à exporter."
@@ -661,7 +661,8 @@ msgstr ""
#: snikket_web/templates/admin_create_invite_form.html:16
msgid ""
"Choose whether this invitation link will allow more than one person to join."
msgstr "Choisissez si ce lien dinvitation pourra être utilisé plus dune fois."
msgstr ""
"Choisissez si ce lien dinvitation pourra être utilisé plus dune fois."
#: snikket_web/templates/admin_create_invite_form.html:21
#, python-format

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"PO-Revision-Date: 2023-12-15 16:11+0000\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2024-07-18 17:07+0000\n"
"Last-Translator: uira <inboxriau@illiyy.in>\n"
"Language-Team: Indonesian <http://i18n.sotecware.net/projects/snikket/web-"
"portal/id/>\n"
@@ -41,7 +41,7 @@ msgstr "Terbatas"
#: snikket_web/admin.py:80 snikket_web/admin.py:298
msgid "Normal user"
msgstr "Pengguna normal"
msgstr "Pengguna biasa"
#: snikket_web/admin.py:81 snikket_web/admin.py:299
msgid "Administrator"
@@ -149,7 +149,7 @@ msgstr "Grup"
#: snikket_web/admin.py:305
msgid "Comment (optional)"
msgstr ""
msgstr "Komentar (opsional)"
#: snikket_web/admin.py:309
msgid "New invitation link"
@@ -215,7 +215,7 @@ msgstr "Pengguna dihapus dari kelompok"
#: snikket_web/admin.py:594
msgid "Chat removed from circle"
msgstr "Chat dihapus dari lingkaran"
msgstr "Chat dihapus dari kelompok"
#: snikket_web/admin.py:612
msgid "Delete circle permanently"
@@ -235,7 +235,7 @@ msgstr "Buat grup chat"
#: snikket_web/admin.py:688
msgid "New group chat added to circle"
msgstr "Grup chat baru ditambahkan ke lingkaran"
msgstr "Grup chat baru ditambahkan ke kelompok"
#: snikket_web/admin.py:755
msgid "Message contents"
@@ -341,7 +341,7 @@ msgstr ""
"file XML dalam format XEP-0227 (format yang disediakan: %(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Kesalahan"
@@ -413,15 +413,15 @@ msgstr "Data akun"
msgid "Upload"
msgstr "Unggah"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Kata sandi salah."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Kata sandi diganti"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -429,15 +429,15 @@ msgstr ""
"Avatar yang dipilih terlalu besar. Untuk dapat mengunggah avatar yang lebih "
"besar, sila gunakan aplikasi."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Profil diperbarui"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Ekspor"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "Anda tidak memiliki data akun untuk diekspor."
@@ -560,7 +560,7 @@ msgid ""
"each other on your service."
msgstr ""
"<em>Kelompok</em> bertujuan untuk membantu orang-orang yang berada di "
"lingkaran sosial yang sama bertemu di layanan Anda."
"kelompok sosial yang sama bertemu di layanan Anda."
#: snikket_web/templates/admin_circles.html:6
msgid ""
@@ -568,9 +568,9 @@ msgid ""
"In addition, each circle may have group chats where the circle members are "
"included."
msgstr ""
"Pengguna yang berada di lingkaran yang sama akan melihat satu sama lain di "
"daftar kontak mereka. Selain itu, setiap lingkaran mungkin memiliki grup "
"chat yang berisikan anggota lingkaran."
"Pengguna yang berada di kelompok yang sama akan melihat satu sama lain di "
"daftar kontak mereka. Selain itu, setiap kelompok mungkin memiliki grup chat "
"yang berisikan anggota kelompok."
#: snikket_web/templates/admin_circles.html:13
msgid "Circle name"
@@ -627,8 +627,8 @@ msgstr "Buat grup chat kelompok baru"
#: snikket_web/templates/admin_create_circle_group_chat_form.html:6
msgid "Add a chat to your circle so its members can hold group discussions."
msgstr ""
"Tambahkan chat ke lingkaran Anda sehingga anggotanya dapat mengadakan "
"diskusi grup."
"Tambahkan chat ke kelompok Anda sehingga anggotanya dapat mengadakan diskusi "
"grup."
#: snikket_web/templates/admin_create_circle_group_chat_form.html:7
msgid "Tip:"
@@ -641,7 +641,7 @@ msgid ""
"Snikket app instead."
msgstr ""
"Ini hanya untuk membuat grup chat yang secara otomatis menyertakan "
"<em>semua</em> anggota lingkaran. Jika Anda ingin grup chat normal, buatlah "
"<em>semua</em> anggota kelompok. Jika Anda ingin grup chat biasa, buatlah "
"melalui aplikasi Snikket."
#: snikket_web/templates/admin_create_invite.html:3
@@ -665,13 +665,15 @@ msgstr ""
msgid ""
"Choose whether this invitation link will allow more than one person to join."
msgstr ""
"Pilih apakah tautan undangan ini akan dipakai lebih dari satu orang untuk "
"bergabung."
#: snikket_web/templates/admin_create_invite_form.html:21
#, fuzzy, python-format
#| msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
#, python-format
msgid ""
"<span class=\"invite-type\">%(title)s%(icon)s</span><p>%(description)s</p>"
msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr ""
"<span class=\"invite-type\">%(title)s%(icon)s</span><p>%(description)s</p>"
#: snikket_web/templates/admin_create_invite_form.html:34
#: snikket_web/templates/admin_edit_user.html:38
@@ -683,11 +685,11 @@ msgstr ""
"layanan Snikket Anda."
#: snikket_web/templates/admin_create_invite_form.html:38
#, fuzzy, python-format
#| msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
#, python-format
msgid ""
"<span class=\"access-level\">%(title)s%(icon)s</span><p>%(description)s</p>"
msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr ""
"<span class=\"access-level\">%(title)s%(icon)s</span><p>%(description)s</p>"
#: snikket_web/templates/admin_debug_user.html:8
#, python-format
@@ -804,7 +806,7 @@ msgstr "Grup chat"
#: snikket_web/templates/admin_edit_circle.html:39
msgid "These group chats will be available to all members of the circle."
msgstr "Grup chat ini akan tersedia untuk semua anggota lingkaran."
msgstr "Grup chat ini akan tersedia untuk semua anggota kelompok."
#: snikket_web/templates/admin_edit_circle.html:53
#, python-format
@@ -813,7 +815,7 @@ msgstr "Hapus grup chat '%(name)s'"
#: snikket_web/templates/admin_edit_circle.html:61
msgid "This circle currently has no group chats."
msgstr "Lingkaran ini sedang tidak memiliki grup chat."
msgstr "kelompok ini sedang tidak memiliki grup chat."
#: snikket_web/templates/admin_edit_circle.html:64
msgid "Add group chat"
@@ -825,7 +827,7 @@ msgstr "Anggota kelompok"
#: snikket_web/templates/admin_edit_circle.html:68
msgid "All members of the circle will see each other in their contact list."
msgstr "Semua anggota lingkaran akan saling terlihat di daftar kontak mereka."
msgstr "Semua anggota kelompok akan saling terlihat di daftar kontak mereka."
#: snikket_web/templates/admin_edit_circle.html:84
msgid "The user has been deleted from the server."
@@ -876,10 +878,8 @@ msgid "Link"
msgstr "Tautan"
#: snikket_web/templates/admin_edit_invite.html:16
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation to Snikket"
msgstr "Jenis undangan"
msgstr "Undangan Snikket"
#: snikket_web/templates/admin_edit_invite.html:23
#: snikket_web/templates/admin_home.html:19
@@ -1093,7 +1093,7 @@ msgstr "Kadaluarsa"
#: snikket_web/templates/admin_invites.html:24
msgid "Comment"
msgstr ""
msgstr "Komentar"
#: snikket_web/templates/admin_invites.html:46
msgid "Show invite details"
@@ -1104,10 +1104,8 @@ msgid "Copy invite link to clipboard"
msgstr "Salin tautan undangan ke papan klip"
#: snikket_web/templates/admin_invites.html:52
#, fuzzy
#| msgid "New invitation link"
msgid "Share invitation link"
msgstr "Tautan undangan baru"
msgstr "Bagikan tautan undangan"
#: snikket_web/templates/admin_invites.html:55
msgid "Delete invitation"
@@ -1203,28 +1201,24 @@ msgid "Storage used by shared files"
msgstr "Penyimpanan yang digunakan oleh file bersama"
#: snikket_web/templates/admin_system.html:79
#, fuzzy
#| msgid "Update user"
msgid "Active users"
msgstr "Memperbarui pengguna"
msgstr "Pengguna aktif"
#: snikket_web/templates/admin_system.html:83
#, fuzzy
#| msgid "Connected devices"
msgid "Connected now:"
msgstr "Perangkat terhubung"
msgstr "Terhubung sekarang:"
#: snikket_web/templates/admin_system.html:88
msgid "Past 24 hours:"
msgstr ""
msgstr "24 jam terakhir:"
#: snikket_web/templates/admin_system.html:89
msgid "Past 7 days:"
msgstr ""
msgstr "7 hari terakhir:"
#: snikket_web/templates/admin_system.html:90
msgid "Past 30 days:"
msgstr ""
msgstr "30 hari terakhir:"
#: snikket_web/templates/admin_system.html:97
msgid "Broadcast message"
@@ -1720,7 +1714,7 @@ msgstr "Salin tautan"
#: snikket_web/templates/library.j2:43
msgid "Share"
msgstr ""
msgstr "Bagikan"
#: snikket_web/templates/library.j2:125
msgid "Invalid input"
@@ -1747,14 +1741,13 @@ msgid "Like normal users and can access the admin panel in the web portal."
msgstr "Seperti pengguna biasa dan dapat mengakses panel admin di portal web."
#: snikket_web/templates/library.j2:184
#, fuzzy
#| msgid "This invitation link can only be used once and is then depleted."
msgid "Invite a single person (invitation link can only be used once)."
msgstr "Tautan undangan ini hanya dapat digunakan satu kali."
msgstr "Undang satu orang (tautan undangan hanya dapat digunakan satu kali)."
#: snikket_web/templates/library.j2:186
msgid "Invite a group of people (invitation link can be used multiple times)."
msgstr ""
"Undang sekelompok orang (tautan undangan dapat digunakan berulang kali)."
#: snikket_web/templates/login.html:5
msgid "Snikket Login"
@@ -1826,16 +1819,16 @@ msgid "Operation successful"
msgstr "Operasi berhasil"
#: snikket_web/templates/user_home.html:11
#, fuzzy
#| msgid "Moving to Snikket?"
msgid "Welcome to Snikket!"
msgstr "Pindahkan ke Snikket?"
msgstr "Selamat datang di Snikket!"
#: snikket_web/templates/user_home.html:12
msgid ""
"Now your Snikket instance is up and running, the next step is to invite "
"people to join it. Family, friends, colleagues... you choose!"
msgstr ""
"Layanan Snikket Anda sudah aktif dan berjalan, langkah berikutnya adalah "
"mengundang orang untuk bergabung. Keluarga, teman, kolega... Silahkan pilih!"
#: snikket_web/templates/user_home.html:19
msgid "Your account"

View File

@@ -6,12 +6,12 @@
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: translations@snikket.org\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2024-05-02 21:15+0000\n"
"Last-Translator: Federico <federico@tebaldi.eu>\n"
"Language-Team: Italian <http://i18n.sotecware.net/projects/snikket/"
"web-portal/it/>\n"
"Language-Team: Italian <http://i18n.sotecware.net/projects/snikket/web-"
"portal/it/>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -342,7 +342,7 @@ msgstr ""
"fornito: %(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Errore"
@@ -414,15 +414,15 @@ msgstr "Dati dell'utenza"
msgid "Upload"
msgstr "Carica"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Password errata."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Password cambiata"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -430,15 +430,15 @@ msgstr ""
"L'avatar scelto è troppo grande. Utilizza direttamente l'applicazione "
"Snikket per caricare un avatar così grande."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Profilo aggiornato"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Esportare"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "Al momento non hai dati utente da esportare."

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2021-01-28 17:55+0000\n"
"Last-Translator: pep <pep@bouah.net>\n"
"Language-Team: Japanese <https://i18n.sotecware.net/projects/snikket/web-"
@@ -389,7 +389,7 @@ msgid ""
msgstr ""
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr ""
@@ -463,35 +463,35 @@ msgstr ""
msgid "Upload"
msgstr ""
#: snikket_web/user.py:122
#: snikket_web/user.py:125
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect password."
msgstr "パスワード不正"
#: snikket_web/user.py:126
#: snikket_web/user.py:129
#, fuzzy
#| msgid "Password reset"
msgid "Password changed"
msgstr "パスワード再設定"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
msgstr ""
#: snikket_web/user.py:181
#: snikket_web/user.py:184
#, fuzzy
#| msgid "Profile"
msgid "Profile updated"
msgstr "プロファイル"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr ""
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr ""

View File

@@ -1,21 +1,21 @@
# Translations template for PROJECT.
# Copyright (C) 2024 ORGANIZATION
# Copyright (C) 2025 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"POT-Creation-Date: 2025-04-12 20:21+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.17.0\n"
#: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_edit_circle.html:73
@@ -270,7 +270,7 @@ msgstr ""
msgid "Yesterday"
msgstr ""
#: snikket_web/infra.py:105
#: snikket_web/infra.py:104
#, python-format
msgid "%(time)s ago"
msgstr ""
@@ -281,60 +281,60 @@ msgid ""
"contact your Snikket operator."
msgstr ""
#: snikket_web/invite.py:114
#: snikket_web/invite.py:124
msgid "Username"
msgstr ""
#: snikket_web/invite.py:118 snikket_web/invite.py:190 snikket_web/main.py:43
#: snikket_web/invite.py:128 snikket_web/invite.py:200 snikket_web/main.py:43
msgid "Password"
msgstr ""
#: snikket_web/invite.py:126 snikket_web/invite.py:198
#: snikket_web/invite.py:136 snikket_web/invite.py:208
msgid "Confirm password"
msgstr ""
#: snikket_web/invite.py:130 snikket_web/invite.py:202
#: snikket_web/invite.py:140 snikket_web/invite.py:212
msgid "The passwords must match."
msgstr ""
#: snikket_web/invite.py:135
#: snikket_web/invite.py:145
msgid "Create account"
msgstr ""
#: snikket_web/invite.py:162
#: snikket_web/invite.py:172
msgid "That username is already taken."
msgstr ""
#: snikket_web/invite.py:166 snikket_web/invite.py:235
#: snikket_web/invite.py:176 snikket_web/invite.py:245
msgid "Registration was declined for unknown reasons."
msgstr ""
#: snikket_web/invite.py:170
#: snikket_web/invite.py:180
msgid "The username is not valid."
msgstr ""
#: snikket_web/invite.py:207 snikket_web/templates/user_home.html:37
#: snikket_web/invite.py:217 snikket_web/templates/user_home.html:37
#: snikket_web/templates/user_passwd.html:29
msgid "Change password"
msgstr ""
#: snikket_web/invite.py:254
#: snikket_web/invite.py:264
msgid "Account data file"
msgstr ""
#: snikket_web/invite.py:258
#: snikket_web/invite.py:268
msgid "Import data"
msgstr ""
#: snikket_web/invite.py:279
#: snikket_web/invite.py:289
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please "
"upload an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/invite.py:309 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:192
msgid "Error"
msgstr ""
@@ -406,29 +406,29 @@ msgstr ""
msgid "Upload"
msgstr ""
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr ""
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr ""
#: snikket_web/user.py:134
#: snikket_web/user.py:138
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please"
" use the app."
msgstr ""
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr ""
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr ""
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr ""

View File

@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: translations@snikket.org\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2024-05-07 17:04+0000\n"
"Last-Translator: misiek <migelazur@mailbox.org>\n"
"Language-Team: Polish <http://i18n.sotecware.net/projects/snikket/web-portal/"
@@ -342,7 +342,7 @@ msgstr ""
"wybrać plik w formacie XML zgodnym z XEP-0227 (podany format: %(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Błąd"
@@ -414,15 +414,15 @@ msgstr "Dane konta"
msgid "Upload"
msgstr "Prześlij"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Nieprawidłowe hasło."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Hasło zostało zmienione"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -430,15 +430,15 @@ msgstr ""
"Wybrany awatar jest zbyt duży. Awatary o większych rozmiarach możesz ustawić "
"korzystając z aplikacji."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Zaktualizowano profil"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Eksportuj"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "Obecnie nie masz danych konta, które można wyeksportować."

View File

@@ -6,12 +6,12 @@
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: translations@snikket.org\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"PO-Revision-Date: 2024-05-02 21:15+0000\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2024-07-18 17:07+0000\n"
"Last-Translator: Andrey <Elisoandr@gmail.com>\n"
"Language-Team: Russian <http://i18n.sotecware.net/projects/snikket/"
"web-portal/ru/>\n"
"Language-Team: Russian <http://i18n.sotecware.net/projects/snikket/web-"
"portal/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -38,7 +38,7 @@ msgstr "Уровень доступа"
#: snikket_web/admin.py:79 snikket_web/admin.py:297
msgid "Limited"
msgstr "Ограниченное"
msgstr "Ограниченный"
#: snikket_web/admin.py:80 snikket_web/admin.py:298
msgid "Normal user"
@@ -343,7 +343,7 @@ msgstr ""
"%(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Ошибка"
@@ -415,15 +415,15 @@ msgstr "Данные аккаунта"
msgid "Upload"
msgstr "Загрузить"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Неверный пароль."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Пароль изменен"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -431,15 +431,15 @@ msgstr ""
"Выбранный аватар слишком велик. Чтобы иметь возможность загружать аватары "
"большего размера, используйте приложение."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Профиль обновлен"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Экспорт"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "В настоящее время у вас нет данных аккаунта для экспорта."

View File

@@ -6,12 +6,12 @@
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: translations@snikket.org\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2024-05-02 21:15+0000\n"
"Last-Translator: Kim Alvefur <zash@zash.se>\n"
"Language-Team: Swedish <http://i18n.sotecware.net/projects/snikket/"
"web-portal/sv/>\n"
"Language-Team: Swedish <http://i18n.sotecware.net/projects/snikket/web-"
"portal/sv/>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -341,7 +341,7 @@ msgstr ""
"XML-fil i XEP-0227-format (angivet format: %(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Fel"
@@ -413,15 +413,15 @@ msgstr "Kontodata"
msgid "Upload"
msgstr "Ladda upp"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Fel lösenord."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Lösenord ändrat"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -429,15 +429,15 @@ msgstr ""
"Den valda profilbilden är för stor. Vänligen använd appen för att kunna "
"välja större bilder."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Profilen uppdaterad"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Exportera"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "Du har för närvarande inget data att exportera."

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2023-12-25 16:00+0000\n"
"Last-Translator: Dmytro Vozniuk <plibnik@gmail.com>\n"
"Language-Team: Ukrainian <http://i18n.sotecware.net/projects/snikket/web-"
@@ -343,7 +343,7 @@ msgstr ""
"%(mimetype)s)."
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "Помилка"
@@ -415,15 +415,15 @@ msgstr "Дані облікового запису"
msgid "Upload"
msgstr "Завантажити"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "Хибний пароль."
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "Пароль змінено"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
@@ -431,15 +431,15 @@ msgstr ""
"Вибраний аватар надто великий. Щоб завантажити аватари великого розміру, "
"скористуйтесь застосунком."
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "Профіль оновлено"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "Експортувати"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "Наразі у вас немає даних облікового запису, щоб експортувати їх."

View File

@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: translations@snikket.org\n"
"POT-Creation-Date: 2024-04-30 10:52+0100\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-08-11 16:36+0200\n"
"PO-Revision-Date: 2024-05-02 21:15+0000\n"
"Last-Translator: Rosebud <postage_quizzical060@simplelogin.com>\n"
"Language-Team: Chinese (Simplified) <http://i18n.sotecware.net/projects/"
@@ -334,11 +334,12 @@ msgstr "导入数据"
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr "您尝试导入的账号数据的格式未知。请上传 XEP-0227 格式的 XML "
"文件(提供的格式:%(mimetype)s"
msgstr ""
"您尝试导入的账号数据的格式未知。请上传 XEP-0227 格式的 XML 文件(提供的格式:"
"%(mimetype)s。"
#: snikket_web/invite.py:299 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:189
#: snikket_web/user.py:192
msgid "Error"
msgstr "错误"
@@ -410,29 +411,29 @@ msgstr "账号数据"
msgid "Upload"
msgstr "上传"
#: snikket_web/user.py:122
#: snikket_web/user.py:125
msgid "Incorrect password."
msgstr "密码不正确。"
#: snikket_web/user.py:126
#: snikket_web/user.py:129
msgid "Password changed"
msgstr "密码已更改"
#: snikket_web/user.py:134
#: snikket_web/user.py:137
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app."
msgstr "所选头像太大。要上传更大的头像,请使用应用。"
#: snikket_web/user.py:181
#: snikket_web/user.py:184
msgid "Profile updated"
msgstr "个人资料已更新"
#: snikket_web/user.py:195
#: snikket_web/user.py:198
msgid "Export"
msgstr "导出"
#: snikket_web/user.py:213
#: snikket_web/user.py:216
msgid "You currently have no account data to export."
msgstr "您目前没有账号数据要导出。"
@@ -460,15 +461,17 @@ msgstr "关于此服务"
msgid ""
"This is the Snikket service <em>%(site_name)s</em>, running open-source "
"software from the Snikket project."
msgstr "这是 Snikket 服务 <em>%(site_name)s</em>,运行来自 Snikket 项目的开源软件。"
msgstr ""
"这是 Snikket 服务 <em>%(site_name)s</em>,运行来自 Snikket 项目的开源软件。"
#: snikket_web/templates/about.html:11
#, python-format
msgid ""
"To learn more about Snikket, visit the <a href=\"%(snikket_url)s\">Snikket "
"website</a>."
msgstr "要了解有关 Snikket 的更多信息,请访问 <a href=\"%(snikket_url)s\">Snikket "
"网站</a>。"
msgstr ""
"要了解有关 Snikket 的更多信息,请访问 <a href=\"%(snikket_url)s\">Snikket 网"
"站</a>。"
#: snikket_web/templates/about.html:13
msgid "View service policies"
@@ -486,16 +489,17 @@ msgid ""
"a>. The full terms of the license can be reviewed using the aforementioned "
"link."
msgstr ""
"门户网站软件根据 <a href=\"%(agpl_url)s\">GNU Affero 通用公共许可证 3.0 "
"版及之后版本</a> 的条款获得许可。可通过上述链接查看许可证的完整条款。"
"门户网站软件根据 <a href=\"%(agpl_url)s\">GNU Affero 通用公共许可证 3.0 版及"
"之后版本</a> 的条款获得许可。可通过上述链接查看许可证的完整条款。"
#: snikket_web/templates/about.html:17
#, python-format
msgid ""
"The source code of the web portal can be downloaded and viewed in <a href="
"\"%(source_url)s\">its GitHub repository</a>."
msgstr "门户网站的源代码可在 <a href=\"%(source_url)s\">其 GitHub repository</a> "
"中下载和查看。"
msgstr ""
"门户网站的源代码可在 <a href=\"%(source_url)s\">其 GitHub repository</a> 中下"
"载和查看。"
#: snikket_web/templates/about.html:18
#, python-format
@@ -504,9 +508,9 @@ msgid ""
"Material Icons</a>, made available by Google under the terms of the <a href="
"\"%(apache20_url)s\">Apache 2.0 License</a>."
msgstr ""
"门户网站中使用的图标是 <a href=\"%(source_url)s\">Google 的 Material "
"图标</a>,由 Google 根据 <a href=\"%(apache20_url)s\">Apache 2.0 许可证</a> "
"的条款提供。"
"门户网站中使用的图标是 <a href=\"%(source_url)s\">Google 的 Material 图标</"
"a>,由 Google 根据 <a href=\"%(apache20_url)s\">Apache 2.0 许可证</a> 的条款"
"提供。"
#: snikket_web/templates/about.html:20
msgid "Trademarks"
@@ -519,9 +523,8 @@ msgid ""
"Company. For more information about the trademarks, visit the <a href="
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
msgstr ""
"“Snikket” 和鹦鹉标志是 Snikket Community Interest Company "
"的商标。有关商标的更多信息,请访问 <a href=\"%(trademarks_url)s\">Snikket "
"商标信息页</a>。"
"“Snikket” 和鹦鹉标志是 Snikket Community Interest Company 的商标。有关商标的"
"更多信息,请访问 <a href=\"%(trademarks_url)s\">Snikket 商标信息页</a>。"
#: snikket_web/templates/about.html:23
msgid "Software Versions"
@@ -551,7 +554,8 @@ msgid ""
"Users who are in the same circle will see each other in their contact list. "
"In addition, each circle may have group chats where the circle members are "
"included."
msgstr "在同一个圈子里的用户将在他们的联系人列表中看到对方。此外,每个圈子还有群聊,"
msgstr ""
"在同一个圈子里的用户将在他们的联系人列表中看到对方。此外,每个圈子还有群聊,"
"圈子成员也包括在内。"
#: snikket_web/templates/admin_circles.html:13
@@ -617,8 +621,9 @@ msgid ""
"This is only for creating group chats that automatically include <em>all</"
"em> members of the circle. If you want a normal group chat, create it in the "
"Snikket app instead."
msgstr "这仅适用于创建自动包含<em>全部</em>圈子成员的群聊。如果您想要普通的群聊,"
"请在 Snikket 应用中创建。"
msgstr ""
"这仅适用于创建自动包含<em>全部</em>圈子成员的群聊。如果您想要普通的群聊,请"
"在 Snikket 应用中创建。"
#: snikket_web/templates/admin_create_invite.html:3
msgid "Create invitation"
@@ -708,8 +713,9 @@ msgid ""
"The circle and the corresponding chat will be deleted, permanently and "
"immediately upon pushing the below button. <strong>There is no way back!</"
"strong>"
msgstr "按下下面的按钮后,圈子和相应的聊天将立即永久删除。<strong>此操作无法撤销!</s"
"trong>"
msgstr ""
"按下下面的按钮后,圈子和相应的聊天将立即永久删除。<strong>此操作无法撤销!</"
"strong>"
#: snikket_web/templates/admin_delete_circle.html:17
#: snikket_web/templates/admin_delete_user.html:19
@@ -740,7 +746,8 @@ msgid ""
"The user and their data will be deleted irrevocably, permanently and "
"immediately upon pushing the below button. <strong>There is no way back!</"
"strong>"
msgstr "按下下面的按钮后,用户及其数据将不可撤销、永久立即删除。<strong>此操作无法撤"
msgstr ""
"按下下面的按钮后,用户及其数据将不可撤销、永久立即删除。<strong>此操作无法撤"
"销!</strong>"
#: snikket_web/templates/admin_edit_circle.html:14
@@ -947,8 +954,9 @@ msgstr "重置密码"
msgid ""
"If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once."
msgstr "如果用户丢失了密码,您可以使用下方按钮创建一个特殊链接,允许更改账号密码一次"
""
msgstr ""
"如果用户丢失了密码,您可以使用下方按钮创建一个特殊链接,允许更改账号密码一"
"次。"
#: snikket_web/templates/admin_edit_user.html:73
msgid "Debug information"
@@ -959,7 +967,8 @@ msgid ""
"In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this "
"(sensitive) information."
msgstr "在某些情况下,需要有关用户账号和连接设备的扩展信息来排查问题。下方按钮显示此"
msgstr ""
"在某些情况下,需要有关用户账号和连接设备的扩展信息来排查问题。下方按钮显示此"
"(敏感)信息。"
#: snikket_web/templates/admin_edit_user.html:79
@@ -1273,7 +1282,8 @@ msgid ""
"Snikket app or compatible software. If you already have the app installed, "
"we recommend that you continue the account creation process inside the app "
"by clicking on the button below:"
msgstr "创建账号将允许使用 Snikket 应用或兼容软件与其他人进行交流。如果您已经安装了应"
msgstr ""
"创建账号将允许使用 Snikket 应用或兼容软件与其他人进行交流。如果您已经安装了应"
"用,我们建议您单击下方按钮后在应用内完成账号注册流程:"
#: snikket_web/templates/invite_register.html:14
@@ -1302,8 +1312,9 @@ msgstr "在线创建账号"
msgid ""
"If you plan to use a legacy XMPP client, you can register an account online "
"and enter your credentials into any XMPP-compatible software."
msgstr "如果您打算使用传统的 XMPP 客户端,可以在线注册账号,在任何兼容 XMPP "
"的软件中输入您的凭据。"
msgstr ""
"如果您打算使用传统的 XMPP 客户端,可以在线注册账号,在任何兼容 XMPP 的软件中"
"输入您的凭据。"
#: snikket_web/templates/invite_register.html:27
msgid ""
@@ -1379,7 +1390,8 @@ 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 "
"recognises it."
msgstr "您的相机将打开。将摄像头对准下方二维码,直到它位于屏幕上突出显示的正方形内,"
msgstr ""
"您的相机将打开。将摄像头对准下方二维码,直到它位于屏幕上突出显示的正方形内,"
"然后等待应用识别。"
#: snikket_web/templates/invite_reset_view.html:27
@@ -1396,8 +1408,9 @@ msgstr "其他方式"
msgid ""
"You can also <a href=\"%(reset_url)s\">reset your password online</a> if the "
"above button or scanning the QR code does not work for you."
msgstr "如果上方按钮或扫描二维码对您不起作用,您也可以 <a href=\"%(reset_url)s\""
">在线重置密码</a>。"
msgstr ""
"如果上方按钮或扫描二维码对您不起作用,您也可以 <a href=\"%(reset_url)s\">在线"
"重置密码</a>。"
#: snikket_web/templates/invite_success.html:5
#, python-format
@@ -1435,8 +1448,9 @@ msgstr "您现在可以使用上方地址和注册时选择的密码设置传统
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr "您现在可以安全地关闭此页面,或登录到门户网站 <a href=\"%(login_url)s\""
">管理您的账号</a>。"
msgstr ""
"您现在可以安全地关闭此页面,或登录到门户网站 <a href=\"%(login_url)s\">管理您"
"的账号</a>。"
#: snikket_web/templates/invite_success.html:21
msgid "Import successful"
@@ -1476,16 +1490,17 @@ msgid ""
"You have been invited to chat with %(inviter_name)s using Snikket, a secure, "
"privacy-friendly chat app on %(site_name)s."
msgstr ""
"您已受邀使用 Snikket 与 %(inviter_name)s 在 %(site_name)s 上聊天Snikket "
"安全、隐私友好的聊天应用。"
"您已受邀使用 Snikket 与 %(inviter_name)s 在 %(site_name)s 上聊天Snikket "
"安全、隐私友好的聊天应用。"
#: snikket_web/templates/invite_view.html:18
#, python-format
msgid ""
"You have been invited to chat on %(site_name)s using Snikket, a secure, "
"privacy-friendly chat app."
msgstr "您已受邀使用 Snikket 在 %(site_name)s 上聊天Snikket "
"是安全、隐私友好的聊天应用。"
msgstr ""
"您已受邀使用 Snikket 在 %(site_name)s 上聊天Snikket 是安全、隐私友好的聊天"
"应用。"
#: snikket_web/templates/invite_view.html:23
#, python-format
@@ -1493,8 +1508,8 @@ msgid ""
"By continuing, you agree to the <a href=\"%(tos_uri)s\">Terms of Service</a> "
"and <a href=\"%(privacy_uri)s\">Privacy Policy</a>."
msgstr ""
"继续,即表示您同意 <a href=\"%(tos_uri)s\">服务条款</a> 和 <a href=\""
"%(privacy_uri)s\">隐私政策</a>。"
"继续,即表示您同意 <a href=\"%(tos_uri)s\">服务条款</a> 和 <a href="
"\"%(privacy_uri)s\">隐私政策</a>。"
#: snikket_web/templates/invite_view.html:27
msgid "Get started"
@@ -1563,8 +1578,9 @@ msgstr "关闭"
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 应用本身。"
msgstr ""
"您可以使用相机扫描二维码将此邀请传送到您的移动设备。您可以使用二维码扫描仪应"
"用或 Snikket 应用本身。"
#: snikket_web/templates/invite_view.html:78
msgid "Install on iOS"
@@ -1574,8 +1590,9 @@ msgstr "在 iOS 安装"
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 "从 App Store 下载 Snikket "
"后,您必须返回到此邀请链接,然后轻击“打开应用”继续。"
msgstr ""
"从 App Store 下载 Snikket 后,您必须返回到此邀请链接,然后轻击“打开应用”继"
"续。"
#: snikket_web/templates/invite_view.html:86
msgid "First download Snikket from the App Store using the button below:"
@@ -1597,8 +1614,9 @@ msgstr "通过 F-Droid 安装"
msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed."
msgstr "通过 F-Droid 安装 Snikket "
"后,您必须返回到此邀请链接,然后轻击“打开应用”继续。"
msgstr ""
"通过 F-Droid 安装 Snikket 后,您必须返回到此邀请链接,然后轻击“打开应用”继"
"续。"
#: snikket_web/templates/invite_view.html:114
msgid "First install Snikket from F-Droid using the button below:"
@@ -1673,8 +1691,9 @@ msgstr "地址不正确"
msgid ""
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
"em>. Your password was not sent."
msgstr "此 Snikket 服务仅托管以 <em>@%(snikket_domain)s</em> "
"结尾的地址。未发送您的密码。"
msgstr ""
"此 Snikket 服务仅托管以 <em>@%(snikket_domain)s</em> 结尾的地址。未发送您的密"
"码。"
#: snikket_web/templates/policies.html:4 snikket_web/templates/policies.html:10
msgid "Policies"
@@ -1711,8 +1730,9 @@ msgid ""
"To report policy violations or other abuse from this service, please send an "
"email to %(email)s. Specify the domain name of this instance (%(domain)s) "
"and include details of the incident(s)."
msgstr "要报告此服务违反策略或其他滥用行为,请发送电子邮件至 "
"%(email)s。指定此实例的域名(%(domain)s并包括事件的详情。"
msgstr ""
"要报告此服务违反策略或其他滥用行为,请发送电子邮件至 %(email)s。指定此实例的"
"域名(%(domain)s并包括事件的详情。"
#: snikket_web/templates/unauth.html:16
msgid "Operation successful"
@@ -1726,8 +1746,9 @@ msgstr "欢迎使用 Snikket"
msgid ""
"Now your Snikket instance is up and running, the next step is to invite "
"people to join it. Family, friends, colleagues... you choose!"
msgstr "现在,您的 Snikket "
"实例已经启动并运行,下一步就是邀请他人加入。家人、朋友、同事…由您选择!"
msgstr ""
"现在,您的 Snikket 实例已经启动并运行,下一步就是邀请他人加入。家人、朋友、同"
"事…由您选择!"
#: snikket_web/templates/user_home.html:19
msgid "Your account"
@@ -1787,7 +1808,8 @@ msgid ""
"To change your password, you need to provide the current password as well as "
"the new one. To reduce the chance of typos, we ask for your new password "
"twice."
msgstr "要更改您的密码,您需要提供当前密码和新密码。为了减少输入错误的机会,我们会要"
msgstr ""
"要更改您的密码,您需要提供当前密码和新密码。为了减少输入错误的机会,我们会要"
"求您输入两次新密码。"
#: snikket_web/templates/user_passwd.html:24

View File

@@ -97,7 +97,10 @@ class ImportAccountDataForm(BaseForm):
@client.require_session()
async def index() -> str:
user_info = await client.get_user_info()
metrics = await client.get_system_metrics()
try:
metrics = await client.get_system_metrics()
except (werkzeug.exceptions.Unauthorized, werkzeug.exceptions.Forbidden):
metrics = {}
return await render_template(
"user_home.html",
user_info=user_info,