Compare commits

..

29 Commits

Author SHA1 Message Date
Jonas Schäfer
a6b67b3fdd Improve install button layout on narrow screens
This allows the button container to add line breaks between the
buttons when necessary.
2021-03-20 16:20:05 +01:00
Jonas Schäfer
885db355ab Add F-Droid download button
Using the mechanism introduced for iOS to describe the multi-step
process.

Fixes #52.
2021-03-20 16:15:20 +01:00
Jonas Schäfer
c3d5b06313 Add multi-step instructions for iOS installation
Fixes #53.
2021-03-20 16:15:07 +01:00
Jonas Schäfer
2dd8838852 Report validity issues of avatar input right away
This helps discovering the actual error message. Thanks @zash.
2021-03-20 15:56:44 +01:00
Jonas Schäfer
5df2c3945a Use browser API to indicate validity state 2021-03-20 14:40:31 +01:00
Jonas Schäfer
3eb8036ebd Implement size checking for the avatar
This checks the avatar size on the client side (if available) and
on the server side against a configuration-defined limit. The
default limit is set to use the same value as in the original
report, as no sensible limit value is known.

Fixes #67.
2021-03-20 12:57:11 +01:00
Jonas Schäfer
02ed390cd2 Fix type annotation 2021-03-20 12:36:06 +01:00
Jonas Schäfer
2506810b90 Return 404 on expired invite URLs 2021-03-19 16:54:40 +01:00
Kim Alvefur
05d1b42dc4 Hint to the browser that the avatar should be PNG
Should result in that the file picker by default only shows PNG files
for selection.
2021-03-17 15:26:30 +01:00
GodGoldfish
5ef5b93eb9 Translated using Weblate (Russian)
Currently translated at 100.0% (244 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/ru/
2021-03-12 23:04:55 +00:00
GodGoldfish
0ff6e00e9d Translated using Weblate (French)
Currently translated at 90.1% (220 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/fr/
2021-03-12 23:04:54 +00:00
Jonas Schäfer
c04ac4bee0 Make linter happy 2021-03-11 07:32:31 +01:00
Daniel Holmgaard
3e19d42c2a Translated using Weblate (Danish)
Currently translated at 100.0% (244 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/da/
2021-03-10 19:03:47 +00:00
Matthew Wild
03732ac06b Fix health check to declare itself text/plain and match Prosody 2021-03-10 14:54:01 +00:00
Matthew Wild
c70228fed7 Add /_health endpoint 2021-03-10 14:22:38 +00:00
Jonas Schäfer
025172592f Improve error handling in Prosody version retrieval 2021-03-09 22:20:37 +01:00
Kim Alvefur
6de1e5313f Add support for displaying prosody version
This only works for authenticated users even in debug mode because
it requires a session with prosody to send the request.

Fixes #66.
2021-03-09 22:08:58 +01:00
Jonas Schäfer
3083c118a3 Add fully translated language codes 2021-03-09 22:03:08 +01:00
Daniel Holmgaard
fa1b13fbdb Translated using Weblate (Danish)
Currently translated at 100.0% (244 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/da/
2021-03-06 17:03:39 +00:00
Daniel Holmgaard
ba30d728f4 Translated using Weblate (Danish)
Currently translated at 100.0% (244 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/da/
2021-03-03 22:03:08 +00:00
Matthew Wild
af87301fa4 Added translation using Weblate (Danish) 2021-03-01 21:01:54 +00:00
Kim Alvefur
8ee0b0dd30 Translated using Weblate (Swedish)
Currently translated at 100.0% (244 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/sv/
2021-02-25 16:02:18 +00:00
Roberto Resoli
4a27ef9d72 Translated using Weblate (Italian)
Currently translated at 100.0% (244 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/it/
2021-02-25 16:02:18 +00:00
misiek
9e9fdaf8d4 Translated using Weblate (Polish)
Currently translated at 100.0% (244 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/pl/
2021-02-25 16:02:17 +00:00
uira
bdb186ca81 Translated using Weblate (Indonesian)
Currently translated at 100.0% (244 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/id/
2021-02-25 16:02:17 +00:00
Jonas Schäfer
4ca9b82bce Translated using Weblate (German)
Currently translated at 100.0% (244 of 244 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/de/
2021-02-25 16:02:16 +00:00
Jonas Schäfer
6dbe2c2d5e Fix missing type annotation 2021-02-23 21:18:14 +01:00
Jonas Schäfer
e410aedfef Improve logging of rejected IQ calls 2021-02-23 20:21:44 +01:00
Jonas Schäfer
1713da61e7 Fix password change
This fixes a regression introduced in e476d9b7 which caused the
token to be incorrectly used when authenticating with mod_rest for
sending the password change IQ stanza.
2021-02-23 20:20:47 +01:00
19 changed files with 1783 additions and 539 deletions

View File

@@ -145,14 +145,21 @@ class AppConfig:
site_name = environ.var("")
avatar_cache_ttl = environ.var(1800, converter=int)
languages = environ.var([
"da",
"de",
"en",
"fr",
"id",
"it",
"pl",
"sv",
], converter=autosplit)
apple_store_url = environ.var("")
# Default limit of 1 MiB is what was discovered to be the effective limit
# in #67, hence we set that here for now.
# Future versions may change this default, and the standard deployment
# tools may also very well override it.
max_avatar_size = environ.var(1024*1024, converter=int)
_UPPER_CASE = "".join(map(chr, range(ord("A"), ord("Z")+1)))
@@ -183,6 +190,7 @@ def create_app() -> quart.Quart:
app.config["SITE_NAME"] = config.site_name or config.domain
app.config["AVATAR_CACHE_TTL"] = config.avatar_cache_ttl
app.config["APPLE_STORE_URL"] = config.apple_store_url
app.config["MAX_AVATAR_SIZE"] = config.max_avatar_size
app.context_processor(proc)
app.register_error_handler(

View File

@@ -53,13 +53,15 @@ async def view_old(id_: str) -> quart.Response:
@bp.route("/<id_>/")
async def view(id_: str) -> typing.Union[quart.Response, str]:
async def view(id_: str) -> typing.Union[quart.Response,
typing.Tuple[str, int],
str]:
try:
invite = await client.get_public_invite_by_id(id_)
except aiohttp.ClientResponseError as exc:
if exc.status == 404:
# invite expired
return await render_template("invite_invalid.html")
return await render_template("invite_invalid.html"), 404
raise
if invite.reset_localpart is not None:
@@ -89,6 +91,7 @@ async def view(id_: str) -> typing.Union[quart.Response, str]:
invite=invite,
play_store_url=play_store_url,
apple_store_url=apple_store_url,
f_droid_url="market://details?id=org.snikket.android",
invite_id=id_,
)
return quart.Response(

View File

@@ -101,6 +101,10 @@ async def about() -> str:
extra_versions["babel"] = babel.__version__
extra_versions["wtforms"] = wtforms.__version__
extra_versions["flask-wtf"] = flask_wtf.__version__
try:
extra_versions["Prosody"] = await client.get_server_version()
except quart.exceptions.Unauthorized:
extra_versions["Prosody"] = "unknown"
return await render_template(
"about.html",
@@ -159,3 +163,8 @@ async def avatar(from_: str, code: str) -> quart.Response:
response.set_data(data)
return response
@bp.route("/_health")
async def health() -> Response:
return Response("STATUS OK", content_type="text/plain")

View File

@@ -332,15 +332,18 @@ class ProsodyClient:
)
)
def _store_token_in_session(self, token_info: TokenInfo) -> None:
http_session[self.SESSION_TOKEN] = token_info.token
http_session[self.SESSION_CACHED_SCOPE] = " ".join(token_info.scopes)
async def login(self, jid: str, password: str) -> bool:
async with self._plain_session as session:
token_info = await self._oauth2_bearer_token(
session, jid, password,
)
http_session[self.SESSION_TOKEN] = token_info.token
self._store_token_in_session(token_info)
http_session[self.SESSION_ADDRESS] = jid
http_session[self.SESSION_CACHED_SCOPE] = " ".join(token_info.scopes)
return True
@property
@@ -445,6 +448,13 @@ class ProsodyClient:
headers=final_headers,
data=serialised) as resp:
if resp.status != 200:
self.logger.debug(
"IQ HTTP response (in-reply-to id=%s) with non-OK status "
"%s: %s",
id_,
resp.status,
resp.reason,
)
abort(resp.status)
reply_payload = await resp.read()
self.logger.debug(
@@ -493,6 +503,29 @@ class ProsodyClient:
async with session.post(self._rest_endpoint, data=req) as resp:
return resp.status == 200
@autosession
async def get_server_version(self, session: aiohttp.ClientSession) -> str:
_, domain, _ = split_jid(self.session_address)
req = {
"kind": "iq",
"type": "get",
"version": True,
"to": domain,
}
async with session.post(self._rest_endpoint, data=req) as resp:
if resp.status != 200:
return "unknwn"
try:
return (await resp.json())["version"]["version"]
except Exception as exc:
self.logger.debug(
"failed to parse prosody version from response"
" (%s: %s)",
type(exc), exc,
)
return "unknown"
@autosession
async def get_user_nickname(
self,
@@ -767,7 +800,7 @@ class ProsodyClient:
# got there, replacing the current session token on the way.
async with self._plain_session as session:
token = await self._oauth2_bearer_token(
token_info = await self._oauth2_bearer_token(
session,
self.session_address,
current_password,
@@ -779,14 +812,14 @@ class ProsodyClient:
new_password
),
headers={
"Authorization": "Bearer {}".format(token),
"Authorization": "Bearer {}".format(token_info.token),
},
sensitive=True,
)
# TODO: error handling
# TODO: obtain a new token using the new password to allow the
# server to expire/revoke all tokens on password change.
http_session[self.SESSION_TOKEN] = token
self._store_token_in_session(token_info)
def _raise_error_from_response(
self,

View File

@@ -54,6 +54,8 @@ div.install-buttons {
ul {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
list-style-type: none;
margin: $w-l1 0;
padding: 0;
@@ -74,6 +76,10 @@ img.play {
height: $w-l3;
}
img.fdroid {
height: $w-l3;
}
.tabbox {
display: flex;
flex-direction: column;

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -27,8 +27,9 @@
<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>
{%- if apple_store_url -%}
<li><a href="{{ apple_store_url }}"><img alt='{% trans %}Download on the App Store{% endtrans %}' src="{{ apple_store_badge() }}" class="apple"></a></li>
<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 -%}
<li><a href="{{ f_droid_url }}" class="popover" data-popover-id="fdroid-popover"><img alt='{% trans %}Get it on F-Droid{% endtrans %}' src='{{ url_for('static', filename='img/f-droid-badge.png') }}' class="fdroid"/></a></li>
</ul>
{%- call standard_button("qrcode", "#qr-modal", class="primary", onclick="open_modal(this); return false;") -%}
{% trans %}Send to mobile device{% endtrans %}
@@ -84,10 +85,77 @@
{%- endcall -%}
</div>
</div>
{%- if apple_store_url -%}
<div id="apple-popover" class="modal" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;" onclick="close_modal(this); return false;">
<div role="document" class="elevated box el-2" onclick="event.stopPropagation();">
<header class="modal-title">
{#- -#}
<span>{% trans %}Install on iOS{% endtrans %}</span>
{#- -#}
{%- call action_button("close", "#", onclick="close_modal(this.parentNode.parentNode.parentNode); return false;", class="tertiary") -%}
{% trans %}Close{% endtrans %}
{%- endcall -%}
</header>
<p>{% trans %}After downloading Snikket from the app store, you have to return to this invite link and tap on "Open the app" to proceed.{% endtrans %}</p>
<ol>
<li><p>{% trans %}First download Snikket from the app store using the button below:{% endtrans %}</p>
<p><a href="{{ apple_store_url }}"><img alt='{% trans %}Download on the App Store{% endtrans %}' src="{{ apple_store_badge() }}" class="apple"></a></p>
<li><p>{% trans %}After the installation is complete, you can return to this page and tap the "Open the app" button to continue with the setup:{% endtrans %}</p>
<p>
{%- call standard_button("exit_to_app", invite.xmpp_uri, class="primary") -%}
{% trans %}Open the app{% endtrans %}
{%- endcall -%}
</p></li>
</ol>
{#- -#}
{%- call standard_button("close", "#", onclick="close_modal(this.parentNode.parentNode); return false;", class="secondary") -%}
{% trans %}Close{% endtrans %}
{%- endcall -%}
</div>
</div>
{%- endif -%}
<div id="fdroid-popover" class="modal" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;" onclick="close_modal(this); return false;">
<div role="document" class="elevated box el-2" onclick="event.stopPropagation();">
<header class="modal-title">
{#- -#}
<span>{% trans %}Install via F-Droid{% endtrans %}</span>
{#- -#}
{%- call action_button("close", "#", onclick="close_modal(this.parentNode.parentNode.parentNode); return false;", class="tertiary") -%}
{% trans %}Close{% endtrans %}
{%- endcall -%}
</header>
<p>{% trans %}After installing Snikket via F-Droid, you have to return to this invite link and tap on "Open the app" to proceed.{% endtrans %}</p>
<ol>
<li><p>{% trans %}First install Snikket from F-Droid using the button below:{% endtrans %}</p>
<p><a href="{{ f_droid_url }}" class="popover" data-popover-id="fdroid-popover"><img alt='{% trans %}Install via F-Droid{% endtrans %}' src='{{ url_for('static', filename='img/f-droid-badge.png') }}' class="fdroid"/></a></p></li>
<li><p>{% trans %}After the installation is complete, you can return to this page and tap the "Open the app" button to continue with the setup:{% endtrans %}</p>
<p>
{%- call standard_button("exit_to_app", invite.xmpp_uri, class="primary") -%}
{% trans %}Open the app{% endtrans %}
{%- endcall -%}
</p></li>
</ol>
{#- -#}
{%- call standard_button("close", "#", onclick="close_modal(this.parentNode.parentNode); return false;", class="secondary") -%}
{% trans %}Close{% endtrans %}
{%- endcall -%}
</div>
</div>
<script type="text/javascript">
var catch_popover = function() {
open_modal(this);
return false;
}
var onload = function() {
apply_qr_code(document.getElementById("qr-invite-page"));
apply_qr_code(document.getElementById("qr-uri"));
var popover_as = document.getElementsByClassName("popover");
for (var i = 0; i < popover_as.length; ++i) {
var a = popover_as[i];
a.onclick = catch_popover;
a.href = "#" + a.dataset.popoverId;
}
};
</script>
{% endblock %}

View File

@@ -9,7 +9,7 @@
</div>
<div id="mwrap">
{#- -#}
<div class="flashbox">
<div class="flashbox" id="flashbox">
{%- for category, message in get_flashed_messages(True) -%}
<div class="box {{ category }} el-5" role="alert">
{% if category == "success" %}

View File

@@ -1,10 +1,11 @@
{% extends "app.html" %}
{% from "library.j2" import standard_button, form_button, avatar with context %}
{% from "library.j2" import standard_button, form_button, render_errors, avatar with context %}
{% block content %}
<h1>{% trans %}Update your profile{% endtrans %}</h1>
<div class="form layout-expanded"><form method="POST" enctype="multipart/form-data">
<h2 class="form-title">{% trans %}Profile{% endtrans %}</h2>
{{ form.csrf_token }}
{% call render_errors(form) %}{% endcall %}
<div class="f-ebox">
{{ form.nickname.label }}
{{ form.nickname(placeholder=user_info.username) }}
@@ -13,7 +14,10 @@
{{ form.avatar.label }}
<div class="avatar-wrap">
{%- call avatar(user_info.address, user_info.avatar_hash ) %}{% endcall -%}
{{ form.avatar }}
{{ form.avatar(accept="image/png",
data_maxsize=max_avatar_size,
data_warning_header=avatar_too_big_warning_header,
data_maxsize_warning=avatar_too_big_warning) }}
</div>
</div>
<h3 class="form-title">{% trans %}Visibility{% endtrans %}</h3>
@@ -28,5 +32,24 @@
{%- call standard_button("back", url_for('.index'), class="secondary") %}{% trans %}Back{% endtrans %}{% endcall -%}
{%- call form_button("done", form.action_save, class="primary") %}{% endcall -%}
</div>
<script type="text/javascript">
document.getElementById("{{ form.avatar.id }}").onchange = function() {
var maxsize_s = this.dataset.maxsize;
var maxsize = parseInt(maxsize_s);
var existing_alert = document.getElementById("avatar-alert");
if (existing_alert) {
existing_alert.parentNode.removeChild(existing_alert);
}
if (this.files[0].size > maxsize) {
var warning_header = this.dataset.warningHeader;
var warning_text = this.dataset.maxsizeWarning;
this.setCustomValidity(warning_text);
this.reportValidity();
this.value = null;
} else {
this.setCustomValidity("");
}
};
</script>
</form></div>
{% endblock %}

File diff suppressed because it is too large Load Diff

View File

@@ -8,10 +8,10 @@ msgstr ""
"Project-Id-Version: SnikketWeb 0.1.0\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
"PO-Revision-Date: 2021-02-10 17:01+0000\n"
"PO-Revision-Date: 2021-02-25 16:02+0000\n"
"Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
"Language-Team: German <https://i18n.sotecware.net/projects/snikket/web-"
"portal/de/>\n"
"Language-Team: German <https://i18n.sotecware.net/projects/snikket/"
"web-portal/de/>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,23 +25,16 @@ msgid "Delete user permanently"
msgstr "Benutzer endgültig löschen"
#: snikket_web/admin.py:73
#, fuzzy
#| msgid "deleted"
msgid "User deleted"
msgstr "gelöscht"
msgstr "Benutzer gelöscht"
#: snikket_web/admin.py:116
#, fuzzy
#| msgid "Password reset link for %(user_name)s"
msgid "Password reset link created"
msgstr "Link zum Zurücksetzen des Passwortes für %(user_name)s"
msgstr "Link zum Zurücksetzen des Passwortes erzeugt"
#: snikket_web/admin.py:122
#, fuzzy
#| msgid "Create password reset links or delete users."
msgid "Password reset link deleted"
msgstr ""
"Löschen von Benutzern und Anlegen von Links zum Zurücksetzen des Passwortes."
msgstr "Link gelöscht"
#: snikket_web/admin.py:141
msgid "Invite to circle"
@@ -96,22 +89,16 @@ msgid "Revoke"
msgstr "Löschen"
#: snikket_web/admin.py:259
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation created"
msgstr "Art der Einladung"
msgstr "Einladung angelegt"
#: snikket_web/admin.py:275
#, fuzzy
#| msgid "New invitation link"
msgid "No such invitation exists"
msgstr "Neuer Einladungslink"
msgstr "Diese Einladung existiert nicht"
#: snikket_web/admin.py:290
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation revoked"
msgstr "Art der Einladung"
msgstr "Einladung gelöscht"
#: snikket_web/admin.py:307 snikket_web/admin.py:355
msgid "Name"
@@ -122,10 +109,8 @@ msgid "Create circle"
msgstr "Gemeinschaft gründen"
#: snikket_web/admin.py:342
#, fuzzy
#| msgid "Circle name"
msgid "Circle created"
msgstr "Name"
msgstr "Gemeinschaft gegründet"
#: snikket_web/admin.py:360
msgid "Select user"
@@ -144,34 +129,24 @@ msgid "Add user"
msgstr "Benutzer hinzufügen"
#: snikket_web/admin.py:391
#, fuzzy
#| msgid "No circles"
msgid "No such circle exists"
msgstr "Keine Gemeinschaften"
msgstr "Diese Gemeinschaft existiert nicht"
#: snikket_web/admin.py:428
#, fuzzy
#| msgid "Circle name"
msgid "Circle data updated"
msgstr "Name"
msgstr "Gemeinschaftsdaten aktualisiert"
#: snikket_web/admin.py:434
#, fuzzy
#| msgid "deleted"
msgid "Circle deleted"
msgstr "gelöscht"
msgstr "Gemeinschaft gelöscht"
#: snikket_web/admin.py:445
#, fuzzy
#| msgid "Invite to circle"
msgid "User added to circle"
msgstr "In Gemeinschaft einladen"
msgstr "Benutzer zur Gemeinschaft hinzugefügt"
#: snikket_web/admin.py:454
#, fuzzy
#| msgid "Remove user %(username)s from circle"
msgid "User removed from circle"
msgstr "Benutzer %(username)s aus der Gemeinschaft entfernen"
msgstr "Benutzer aus der Gemeinschaft entfernt"
#: snikket_web/infra.py:40
msgid "Main"
@@ -228,7 +203,7 @@ msgstr "Benutzername oder Passwort falsch."
#: snikket_web/main.py:84
msgid "Login successful!"
msgstr ""
msgstr "Anmeldung erfolgreich!"
#: snikket_web/user.py:28
msgid "Current password"
@@ -284,16 +259,12 @@ msgid "Incorrect password"
msgstr "Ungültiges Passwort"
#: snikket_web/user.py:104
#, fuzzy
#| msgid "Password change failed"
msgid "Password changed"
msgstr "Passwortänderung fehlgeschlagen"
msgstr "Passwort geändert"
#: snikket_web/user.py:146
#, fuzzy
#| msgid "Profile"
msgid "Profile updated"
msgstr "Profil"
msgstr "Profil gespeichert"
#: snikket_web/templates/_footer.html:4
#, python-format
@@ -305,6 +276,8 @@ msgid ""
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
"Company."
msgstr ""
"„Snikket“ und das Papageienlogo sind Markenzeichen der Snikket Community "
"Interest Company."
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
msgid "About Snikket"
@@ -367,7 +340,7 @@ msgstr ""
#: snikket_web/templates/about.html:17
msgid "Trademarks"
msgstr ""
msgstr "Markenzeichen"
#: snikket_web/templates/about.html:18
#, python-format
@@ -376,6 +349,9 @@ msgid ""
"Company. For more information about the trademarks, visit the <a href="
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
msgstr ""
"„Snikket“ und das Papageienlogo sind Markenzeichen der Snikket Community "
"Interest Company. Mehr Informationen über die Markenzeichen gibt es auf der "
"<a href=\"%(trademarks_url)s\">„Snikket Trademarks“ Informationsseite</a>."
#: snikket_web/templates/about.html:19
msgid "Software Versions"
@@ -712,7 +688,7 @@ msgstr "Ausstehende Einladungen"
#: snikket_web/templates/admin_invites.html:21
msgid "Expires"
msgstr ""
msgstr "Läuft ab"
#: snikket_web/templates/admin_invites.html:22
msgid "Type"
@@ -1073,7 +1049,7 @@ msgstr "Laden im App Store"
#: snikket_web/templates/invite_view.html:34
msgid "Send to mobile device"
msgstr ""
msgstr "An mobiles Gerät übertragen"
#: snikket_web/templates/invite_view.html:37
msgid ""
@@ -1175,10 +1151,8 @@ msgid "Login failed"
msgstr "Anmeldung fehlgeschlagen"
#: snikket_web/templates/login.html:23
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect address"
msgstr "Ungültiges Passwort"
msgstr "Ungültige Adresse"
#: snikket_web/templates/login.html:24
#, python-format
@@ -1186,14 +1160,16 @@ msgid ""
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
"em>. Your password was not sent."
msgstr ""
"Dieser Snikket-Server ist nur für Adressen, die auf <em>@%(snikket_domain)s</"
"em> enden zuständig. Dein Passwort wurde nicht abgesendet."
#: snikket_web/templates/unauth.html:16
msgid "Operation successful"
msgstr ""
msgstr "Aktion erfolgreich"
#: snikket_web/templates/unauth.html:18
msgid "Error"
msgstr ""
msgstr "Fehler"
#: snikket_web/templates/user_home.html:9
msgid "Welcome!"

View File

@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
"PO-Revision-Date: 2021-02-16 12:02+0000\n"
"Last-Translator: Link Mauve <linkmauve@linkmauve.fr>\n"
"Language-Team: French <https://i18n.sotecware.net/projects/snikket/web-"
"portal/fr/>\n"
"PO-Revision-Date: 2021-03-12 23:04+0000\n"
"Last-Translator: GodGoldfish <godgoldfish@pm.me>\n"
"Language-Team: French <https://i18n.sotecware.net/projects/snikket/"
"web-portal/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.4.2\n"
"X-Generator: Weblate 4.5.1\n"
"Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:60
@@ -42,7 +42,7 @@ msgstr "Lien de réinitialisation du mot de passe de %(user_name)s"
msgid "Password reset link deleted"
msgstr ""
"Créer des liens de réinitialisation de mot de passe ou supprimer des "
"utilisateurs."
"utilisateurs"
#: snikket_web/admin.py:141
msgid "Invite to circle"
@@ -228,8 +228,9 @@ msgid "Invalid username or password."
msgstr "Nom dutilisateur ou mot de passe incorrect."
#: snikket_web/main.py:84
#, fuzzy
msgid "Login successful!"
msgstr ""
msgstr "Connexion réussite !"
#: snikket_web/user.py:28
msgid "Current password"
@@ -302,10 +303,13 @@ msgid "A <a href=\"%(about_url)s\">Snikket</a> service"
msgstr "Un service <a href=\"%(about_url)s\">Snikket</a>"
#: snikket_web/templates/_footer.html:6
#, fuzzy
msgid ""
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
"Company."
msgstr ""
"\"Snikket\" et le logo de perroquet sont des marques de la Snikket Community "
"Interest Company."
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
msgid "About Snikket"
@@ -366,16 +370,20 @@ msgstr ""
"termes de la <a href=\"%(apache20_url)s\">licence Apache 2.0 </a>."
#: snikket_web/templates/about.html:17
#, fuzzy
msgid "Trademarks"
msgstr ""
msgstr "Marques"
#: snikket_web/templates/about.html:18
#, python-format
#, fuzzy, python-format
msgid ""
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
"Company. For more information about the trademarks, visit the <a href="
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
msgstr ""
"\"Snikket\" et le logo de perroquet sont des marques de la Snikket Community "
"Interest Company. Pour plus d'informations sur la marque, visitez le site <a "
"href=\"%(trademarks_url)s\"> page d'information Snikket Trademarks</a>."
#: snikket_web/templates/about.html:19
msgid "Software Versions"
@@ -707,8 +715,9 @@ msgid "Pending invitations"
msgstr "Invitations en attente"
#: snikket_web/templates/admin_invites.html:21
#, fuzzy
msgid "Expires"
msgstr ""
msgstr "Expires"
#: snikket_web/templates/admin_invites.html:22
msgid "Type"
@@ -1071,8 +1080,9 @@ msgid "Download on the App Store"
msgstr "Télécharger sur lApp Store"
#: snikket_web/templates/invite_view.html:34
#, fuzzy
msgid "Send to mobile device"
msgstr ""
msgstr "Envoyer vers l'appareil"
#: snikket_web/templates/invite_view.html:37
msgid ""
@@ -1176,19 +1186,23 @@ msgid "Incorrect address"
msgstr "Mot de passe incorrect"
#: snikket_web/templates/login.html:24
#, python-format
#, fuzzy, python-format
msgid ""
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
"em>. Your password was not sent."
msgstr ""
"Le service Snikket n'héberge que les adresses se terminant par "
"<em>@%(snikket_domain)s</em>. Votre mot de passe n'a pas été envoyé."
#: snikket_web/templates/unauth.html:16
#, fuzzy
msgid "Operation successful"
msgstr ""
msgstr "Opération réussite"
#: snikket_web/templates/unauth.html:18
#, fuzzy
msgid "Error"
msgstr ""
msgstr "Erreur"
#: snikket_web/templates/user_home.html:9
msgid "Welcome!"

View File

@@ -8,10 +8,10 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
"PO-Revision-Date: 2021-02-02 21:01+0000\n"
"PO-Revision-Date: 2021-02-25 16:02+0000\n"
"Last-Translator: uira <inboxriau@andriana.id>\n"
"Language-Team: Indonesian <https://i18n.sotecware.net/projects/snikket/web-"
"portal/id/>\n"
"Language-Team: Indonesian <https://i18n.sotecware.net/projects/snikket/"
"web-portal/id/>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,22 +25,16 @@ msgid "Delete user permanently"
msgstr "Hapus permanen pengguna"
#: snikket_web/admin.py:73
#, fuzzy
#| msgid "deleted"
msgid "User deleted"
msgstr "Dihapus"
msgstr "Pengguna dihapus"
#: snikket_web/admin.py:116
#, fuzzy
#| msgid "Password reset link for %(user_name)s"
msgid "Password reset link created"
msgstr "Tautan setel ulang kata sandi %(user_name)s"
msgstr "Tautan setel ulang kata sandi dibuat"
#: snikket_web/admin.py:122
#, fuzzy
#| msgid "Create password reset links or delete users."
msgid "Password reset link deleted"
msgstr "Buat tautan setel ulang kata sandi atau hapus pengguna."
msgstr "Tautan setel ulang kata sandi dihapus"
#: snikket_web/admin.py:141
msgid "Invite to circle"
@@ -95,22 +89,16 @@ msgid "Revoke"
msgstr "Batalkan"
#: snikket_web/admin.py:259
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation created"
msgstr "Jenis undangan"
msgstr "Undangan dibuat"
#: snikket_web/admin.py:275
#, fuzzy
#| msgid "New invitation link"
msgid "No such invitation exists"
msgstr "Tautan undangan baru"
msgstr "Undangan tidak tersedia"
#: snikket_web/admin.py:290
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation revoked"
msgstr "Jenis undangan"
msgstr "Undangan dibatalkan"
#: snikket_web/admin.py:307 snikket_web/admin.py:355
msgid "Name"
@@ -121,10 +109,8 @@ msgid "Create circle"
msgstr "Buat kelompok"
#: snikket_web/admin.py:342
#, fuzzy
#| msgid "Circle name"
msgid "Circle created"
msgstr "Nama kelompok"
msgstr "Kelompok dibuat"
#: snikket_web/admin.py:360
msgid "Select user"
@@ -143,34 +129,24 @@ msgid "Add user"
msgstr "Tambah pengguna"
#: snikket_web/admin.py:391
#, fuzzy
#| msgid "No circles"
msgid "No such circle exists"
msgstr "Tidak ada kelompok"
msgstr "Kelompok tersebut tidak ada"
#: snikket_web/admin.py:428
#, fuzzy
#| msgid "Circle name"
msgid "Circle data updated"
msgstr "Nama kelompok"
msgstr "Data kelompok diperbarui"
#: snikket_web/admin.py:434
#, fuzzy
#| msgid "deleted"
msgid "Circle deleted"
msgstr "Dihapus"
msgstr "Kelompok dihapus"
#: snikket_web/admin.py:445
#, fuzzy
#| msgid "Invite to circle"
msgid "User added to circle"
msgstr "Undang masuk kelompok"
msgstr "Pengguna ditambahkan ke kelompok"
#: snikket_web/admin.py:454
#, fuzzy
#| msgid "Remove user %(username)s from circle"
msgid "User removed from circle"
msgstr "Hapus pengguna %(username)s dari kelompok"
msgstr "Pengguna dihapus dari kelompok"
#: snikket_web/infra.py:40
msgid "Main"
@@ -227,7 +203,7 @@ msgstr "Nama pengguna atau kata sandi salah."
#: snikket_web/main.py:84
msgid "Login successful!"
msgstr ""
msgstr "Login berhasil!"
#: snikket_web/user.py:28
msgid "Current password"
@@ -276,23 +252,19 @@ msgstr "Visibilitas profil"
#: snikket_web/user.py:75
msgid "Update profile"
msgstr "Perbaharui profil"
msgstr "Perbarui profil"
#: snikket_web/user.py:100
msgid "Incorrect password"
msgstr "Kata sandi salah"
#: snikket_web/user.py:104
#, fuzzy
#| msgid "Password change failed"
msgid "Password changed"
msgstr "Gagal mengganti kata kunci"
msgstr "Kata sandi diganti"
#: snikket_web/user.py:146
#, fuzzy
#| msgid "Profile"
msgid "Profile updated"
msgstr "Profil"
msgstr "Profil diperbarui"
#: snikket_web/templates/_footer.html:4
#, python-format
@@ -304,6 +276,8 @@ msgid ""
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
"Company."
msgstr ""
"“Snikket” dan logo burung beo adalah merek dagang dari Snikket Community "
"Interest Company."
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
msgid "About Snikket"
@@ -366,7 +340,7 @@ msgstr ""
#: snikket_web/templates/about.html:17
msgid "Trademarks"
msgstr ""
msgstr "Merek dagang"
#: snikket_web/templates/about.html:18
#, python-format
@@ -375,6 +349,10 @@ msgid ""
"Company. For more information about the trademarks, visit the <a href="
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
msgstr ""
"“Snikket” dan logo burung beo adalah merek dagang dari Snikket Community "
"Interest Company. Untuk informasi lebih lanjut tentang merek dagang, "
"kunjungi <a href=\"%(trademarks_url)s\">halaman informasi merek dagang "
"Snikket</a>."
#: snikket_web/templates/about.html:19
msgid "Software Versions"
@@ -709,7 +687,7 @@ msgstr "Undangan menunggu jawaban"
#: snikket_web/templates/admin_invites.html:21
msgid "Expires"
msgstr ""
msgstr "Kadaluarsa"
#: snikket_web/templates/admin_invites.html:22
msgid "Type"
@@ -1064,7 +1042,7 @@ msgstr "Unduh di App Store"
#: snikket_web/templates/invite_view.html:34
msgid "Send to mobile device"
msgstr ""
msgstr "Dikirim ke telepon seluler"
#: snikket_web/templates/invite_view.html:37
msgid ""
@@ -1160,10 +1138,8 @@ msgid "Login failed"
msgstr "Percobaan masuk gagal"
#: snikket_web/templates/login.html:23
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect address"
msgstr "Kata sandi salah"
msgstr "Alamat salah"
#: snikket_web/templates/login.html:24
#, python-format
@@ -1171,14 +1147,16 @@ msgid ""
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
"em>. Your password was not sent."
msgstr ""
"Layanan Snikket ini hanya menghosting alamat yang diakhiri dengan "
"<em>@%(snikket_domain)s</em>. Kata sandi Anda tidak terkirim."
#: snikket_web/templates/unauth.html:16
msgid "Operation successful"
msgstr ""
msgstr "Operasi berhasil"
#: snikket_web/templates/unauth.html:18
msgid "Error"
msgstr ""
msgstr "Kesalahan"
#: snikket_web/templates/user_home.html:9
msgid "Welcome!"
@@ -1249,7 +1227,7 @@ msgstr ""
#: snikket_web/templates/user_profile.html:4
msgid "Update your profile"
msgstr "Perbaharui profil anda"
msgstr "Perbarui profil anda"
#: snikket_web/templates/user_profile.html:6
msgid "Profile"

View File

@@ -8,10 +8,10 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
"PO-Revision-Date: 2021-02-02 21:01+0000\n"
"Last-Translator: riccio <unriccio@email.it>\n"
"Language-Team: Italian <https://i18n.sotecware.net/projects/snikket/web-"
"portal/it/>\n"
"PO-Revision-Date: 2021-02-25 16:02+0000\n"
"Last-Translator: Roberto Resoli <roberto@resolutions.it>\n"
"Language-Team: Italian <https://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"
@@ -25,22 +25,16 @@ msgid "Delete user permanently"
msgstr "Elimina definitivamente l'utente"
#: snikket_web/admin.py:73
#, fuzzy
#| msgid "deleted"
msgid "User deleted"
msgstr "rimosso"
msgstr "Utente rimosso"
#: snikket_web/admin.py:116
#, fuzzy
#| msgid "Password reset link for %(user_name)s"
msgid "Password reset link created"
msgstr "Collegamento per reimpostare la password di %(user_name)s"
msgstr "Creato collegamento per reimpostare la password"
#: snikket_web/admin.py:122
#, fuzzy
#| msgid "Create password reset links or delete users."
msgid "Password reset link deleted"
msgstr "Crea collegamenti per reimpostare le password oppure elimina utenti."
msgstr "Eliminato collegamento per reimpostare la password"
#: snikket_web/admin.py:141
msgid "Invite to circle"
@@ -95,22 +89,16 @@ msgid "Revoke"
msgstr "Revoca"
#: snikket_web/admin.py:259
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation created"
msgstr "Tipo di invito"
msgstr "Invito creato"
#: snikket_web/admin.py:275
#, fuzzy
#| msgid "New invitation link"
msgid "No such invitation exists"
msgstr "Nuovo collegamento di invito"
msgstr "Questo invito non esiste"
#: snikket_web/admin.py:290
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation revoked"
msgstr "Tipo di invito"
msgstr "Invito revocato"
#: snikket_web/admin.py:307 snikket_web/admin.py:355
msgid "Name"
@@ -121,10 +109,8 @@ msgid "Create circle"
msgstr "Crea cerchia"
#: snikket_web/admin.py:342
#, fuzzy
#| msgid "Circle name"
msgid "Circle created"
msgstr "Nome cerchia"
msgstr "Cerchia creata"
#: snikket_web/admin.py:360
msgid "Select user"
@@ -143,34 +129,24 @@ msgid "Add user"
msgstr "Aggiungi utente"
#: snikket_web/admin.py:391
#, fuzzy
#| msgid "No circles"
msgid "No such circle exists"
msgstr "Nessuna cerchia"
msgstr "Questa cerchia non esiste"
#: snikket_web/admin.py:428
#, fuzzy
#| msgid "Circle name"
msgid "Circle data updated"
msgstr "Nome cerchia"
msgstr "Dati della cerchia aggiornati"
#: snikket_web/admin.py:434
#, fuzzy
#| msgid "deleted"
msgid "Circle deleted"
msgstr "rimosso"
msgstr "Cerchia eliminata"
#: snikket_web/admin.py:445
#, fuzzy
#| msgid "Invite to circle"
msgid "User added to circle"
msgstr "Invita nella cerchia"
msgstr "Utente aggiunto alla cerchia"
#: snikket_web/admin.py:454
#, fuzzy
#| msgid "Remove user %(username)s from circle"
msgid "User removed from circle"
msgstr "Rimuovi l'utente %(username)s dalla cerchia"
msgstr "Utente rimosso dalla cerchia"
#: snikket_web/infra.py:40
msgid "Main"
@@ -227,7 +203,7 @@ msgstr "Nome utente o password non validi."
#: snikket_web/main.py:84
msgid "Login successful!"
msgstr ""
msgstr "Accesso riuscito!"
#: snikket_web/user.py:28
msgid "Current password"
@@ -283,16 +259,12 @@ msgid "Incorrect password"
msgstr "Password errata"
#: snikket_web/user.py:104
#, fuzzy
#| msgid "Password reset"
msgid "Password changed"
msgstr "Reimposta password"
msgstr "Password cambiata"
#: snikket_web/user.py:146
#, fuzzy
#| msgid "Profile"
msgid "Profile updated"
msgstr "Profilo"
msgstr "Profilo aggiornato"
#: snikket_web/templates/_footer.html:4
#, python-format
@@ -304,6 +276,8 @@ msgid ""
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
"Company."
msgstr ""
"“Snikket” e il logo del pappagallo sono marchi registrati della Snikket "
"Community Interest Company."
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
msgid "About Snikket"
@@ -366,7 +340,7 @@ msgstr ""
#: snikket_web/templates/about.html:17
msgid "Trademarks"
msgstr ""
msgstr "Marchi registrati"
#: snikket_web/templates/about.html:18
#, python-format
@@ -375,6 +349,9 @@ msgid ""
"Company. For more information about the trademarks, visit the <a href="
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
msgstr ""
"\"Snikket\" e il logo del pappagallo sono marchi di Snikket Community "
"Interest Company. Per maggiori informazioni sui marchi, visita la <a href=\""
"%(trademarks_url)s\">pagina informativa sui marchi Snikket</a>."
#: snikket_web/templates/about.html:19
msgid "Software Versions"
@@ -707,7 +684,7 @@ msgstr "Inviti in attesa"
#: snikket_web/templates/admin_invites.html:21
msgid "Expires"
msgstr ""
msgstr "Scade"
#: snikket_web/templates/admin_invites.html:22
msgid "Type"
@@ -1066,7 +1043,7 @@ msgstr "Scarica dall'App Store"
#: snikket_web/templates/invite_view.html:34
msgid "Send to mobile device"
msgstr ""
msgstr "Invia a dispositivo mobile"
#: snikket_web/templates/invite_view.html:37
msgid ""
@@ -1166,10 +1143,8 @@ msgid "Login failed"
msgstr "Accesso non riuscito"
#: snikket_web/templates/login.html:23
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect address"
msgstr "Password errata"
msgstr "Indirizzo errato"
#: snikket_web/templates/login.html:24
#, python-format
@@ -1177,14 +1152,16 @@ msgid ""
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
"em>. Your password was not sent."
msgstr ""
"Questo servizio Snikket ospita solo indirizzi che terminano in "
"<em>@%(snikket_domain)s</em>. La tua password non è stata inviata."
#: snikket_web/templates/unauth.html:16
msgid "Operation successful"
msgstr ""
msgstr "Operazione completata"
#: snikket_web/templates/unauth.html:18
msgid "Error"
msgstr ""
msgstr "Errore"
#: snikket_web/templates/user_home.html:9
msgid "Welcome!"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
"POT-Creation-Date: 2021-03-20 16:15+0100\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"
@@ -149,39 +149,39 @@ msgstr ""
msgid "Main"
msgstr ""
#: snikket_web/invite.py:104
#: snikket_web/invite.py:106
msgid "Username"
msgstr ""
#: snikket_web/invite.py:108 snikket_web/invite.py:175 snikket_web/main.py:42
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:42
msgid "Password"
msgstr ""
#: snikket_web/invite.py:112 snikket_web/invite.py:179
#: snikket_web/invite.py:114 snikket_web/invite.py:181
msgid "Confirm password"
msgstr ""
#: snikket_web/invite.py:116 snikket_web/invite.py:183
#: snikket_web/invite.py:118 snikket_web/invite.py:185
msgid "The passwords must match"
msgstr ""
#: snikket_web/invite.py:121
#: snikket_web/invite.py:123
msgid "Create account"
msgstr ""
#: snikket_web/invite.py:148
#: snikket_web/invite.py:150
msgid "That username is already taken"
msgstr ""
#: snikket_web/invite.py:152 snikket_web/invite.py:216
#: snikket_web/invite.py:154 snikket_web/invite.py:218
msgid "Registration was declined for unknown reasons"
msgstr ""
#: snikket_web/invite.py:156
#: snikket_web/invite.py:158
msgid "The username is not valid"
msgstr ""
#: snikket_web/invite.py:188 snikket_web/templates/user_home.html:32
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29
msgid "Change password"
msgstr ""
@@ -202,67 +202,77 @@ msgstr ""
msgid "Login successful!"
msgstr ""
#: snikket_web/user.py:28
#: snikket_web/user.py:29
msgid "Current password"
msgstr ""
#: snikket_web/user.py:33
#: snikket_web/user.py:34
msgid "New password"
msgstr ""
#: snikket_web/user.py:38
#: snikket_web/user.py:39
msgid "Confirm new password"
msgstr ""
#: snikket_web/user.py:42
#: snikket_web/user.py:43
msgid "The new passwords must match"
msgstr ""
#: snikket_web/user.py:49
#: snikket_web/user.py:50
msgid "Sign out"
msgstr ""
#: snikket_web/user.py:54
#: snikket_web/user.py:55
msgid "Nobody"
msgstr ""
#: snikket_web/user.py:55
#: snikket_web/user.py:56
msgid "Friends only"
msgstr ""
#: snikket_web/user.py:56
#: snikket_web/user.py:57
msgid "Everyone"
msgstr ""
#: snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:62
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:63
msgid "Display name"
msgstr ""
#: snikket_web/user.py:66
#: snikket_web/user.py:67
msgid "Avatar"
msgstr ""
#: snikket_web/user.py:70
#: snikket_web/user.py:71
msgid "Profile visibility"
msgstr ""
#: snikket_web/user.py:75
#: snikket_web/user.py:76
msgid "Update profile"
msgstr ""
#: snikket_web/user.py:100
#: snikket_web/user.py:101
msgid "Incorrect password"
msgstr ""
#: snikket_web/user.py:104
#: snikket_web/user.py:105
msgid "Password changed"
msgstr ""
#: snikket_web/user.py:146
#: snikket_web/user.py:113
msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please"
" use the app"
msgstr ""
#: snikket_web/user.py:161
msgid "Profile updated"
msgstr ""
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:169
msgid "Error"
msgstr ""
#: snikket_web/templates/_footer.html:4
#, python-format
msgid "A <a href=\"%(about_url)s\">Snikket</a> service"
@@ -480,7 +490,7 @@ msgstr ""
#: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:28
#: snikket_web/templates/user_profile.html:32
msgid "Back"
msgstr ""
@@ -786,6 +796,7 @@ 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
msgid "Open the app"
msgstr ""
@@ -964,6 +975,7 @@ msgid "Get it on Google Play"
msgstr ""
#: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:101
msgid "Download on the App Store"
msgstr ""
@@ -991,6 +1003,8 @@ 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
msgid "Close"
msgstr ""
@@ -1021,6 +1035,26 @@ msgid ""
"'Scan' button at the top."
msgstr ""
#: snikket_web/templates/invite_view.html:92
msgid "Install on iOS"
msgstr ""
#: snikket_web/templates/invite_view.html:98
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
msgid "First download Snikket from the app store using the button below:"
msgstr ""
#: snikket_web/templates/invite_view.html:102
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/library.j2:18
msgid "Copy link"
msgstr ""
@@ -1068,10 +1102,6 @@ msgstr ""
msgid "Operation successful"
msgstr ""
#: snikket_web/templates/unauth.html:18
msgid "Error"
msgstr ""
#: snikket_web/templates/user_home.html:9
msgid "Welcome!"
msgstr ""
@@ -1140,11 +1170,11 @@ msgstr ""
msgid "Profile"
msgstr ""
#: snikket_web/templates/user_profile.html:19
#: snikket_web/templates/user_profile.html:23
msgid "Visibility"
msgstr ""
#: snikket_web/templates/user_profile.html:20
#: snikket_web/templates/user_profile.html:24
msgid ""
"This section allows you to control who can see your profile information, "
"like avatar and nickname."

View File

@@ -8,10 +8,10 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
"PO-Revision-Date: 2021-02-22 11:02+0000\n"
"PO-Revision-Date: 2021-02-25 16:02+0000\n"
"Last-Translator: misiek <migelazur@mailbox.org>\n"
"Language-Team: Polish <https://i18n.sotecware.net/projects/snikket/web-"
"portal/pl/>\n"
"Language-Team: Polish <https://i18n.sotecware.net/projects/snikket/"
"web-portal/pl/>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,22 +26,16 @@ msgid "Delete user permanently"
msgstr "Usuń użytkownika bezpowrotnie"
#: snikket_web/admin.py:73
#, fuzzy
#| msgid "deleted"
msgid "User deleted"
msgstr "usunięty"
msgstr "Użytkownik został usunięty"
#: snikket_web/admin.py:116
#, fuzzy
#| msgid "Password reset link for %(user_name)s"
msgid "Password reset link created"
msgstr "Link resetowania hasła dla %(user_name)s"
msgstr "Utworzono link resetowania hasła"
#: snikket_web/admin.py:122
#, fuzzy
#| msgid "Create password reset links or delete users."
msgid "Password reset link deleted"
msgstr "Twórz linki do resetowania haseł lub usuwaj użytkowników."
msgstr "Usunięto link resetowania hasła"
#: snikket_web/admin.py:141
msgid "Invite to circle"
@@ -96,22 +90,16 @@ msgid "Revoke"
msgstr "Unieważnij"
#: snikket_web/admin.py:259
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation created"
msgstr "Typ zaproszenia"
msgstr "Utworzono zaproszenie"
#: snikket_web/admin.py:275
#, fuzzy
#| msgid "New invitation link"
msgid "No such invitation exists"
msgstr "Nowy link z zaproszeniem"
msgstr "Takie zaproszenie nie istnieje"
#: snikket_web/admin.py:290
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation revoked"
msgstr "Typ zaproszenia"
msgstr "Unieważniono zaproszenie"
#: snikket_web/admin.py:307 snikket_web/admin.py:355
msgid "Name"
@@ -122,10 +110,8 @@ msgid "Create circle"
msgstr "Utwórz krąg"
#: snikket_web/admin.py:342
#, fuzzy
#| msgid "Circle name"
msgid "Circle created"
msgstr "Nazwa kręgu"
msgstr "Utworzono krąg"
#: snikket_web/admin.py:360
msgid "Select user"
@@ -144,34 +130,24 @@ msgid "Add user"
msgstr "Dodaj użytkownika"
#: snikket_web/admin.py:391
#, fuzzy
#| msgid "No circles"
msgid "No such circle exists"
msgstr "Brak kręgów"
msgstr "Taki krąg nie istnieje"
#: snikket_web/admin.py:428
#, fuzzy
#| msgid "Circle name"
msgid "Circle data updated"
msgstr "Nazwa kręgu"
msgstr "Zaktualizowano dane kręgu"
#: snikket_web/admin.py:434
#, fuzzy
#| msgid "deleted"
msgid "Circle deleted"
msgstr "usunięty"
msgstr "Krąg został usunięty"
#: snikket_web/admin.py:445
#, fuzzy
#| msgid "Invite to circle"
msgid "User added to circle"
msgstr "Zaproś do kręgu"
msgstr "Dodano użytkownika do kręgu"
#: snikket_web/admin.py:454
#, fuzzy
#| msgid "Remove user %(username)s from circle"
msgid "User removed from circle"
msgstr "Usuń z kręgu użytkownika %(username)s"
msgstr "Usunięto użytkownika z kręgu"
#: snikket_web/infra.py:40
msgid "Main"
@@ -228,7 +204,7 @@ msgstr "Nieprawidłowa nazwa użytkownika lub hasło."
#: snikket_web/main.py:84
msgid "Login successful!"
msgstr ""
msgstr "Zalogowano się pomyślnie!"
#: snikket_web/user.py:28
msgid "Current password"
@@ -284,16 +260,12 @@ msgid "Incorrect password"
msgstr "Nieprawidłowe hasło"
#: snikket_web/user.py:104
#, fuzzy
#| msgid "Password change failed"
msgid "Password changed"
msgstr "Zmiana hasła zakończona niepowodzeniem"
msgstr "Hasło zostało zmienione"
#: snikket_web/user.py:146
#, fuzzy
#| msgid "Profile"
msgid "Profile updated"
msgstr "Profil"
msgstr "Zaktualizowano profil"
#: snikket_web/templates/_footer.html:4
#, python-format
@@ -305,6 +277,8 @@ msgid ""
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
"Company."
msgstr ""
"\"Snikket\" oraz logo papugi są znakami firmowymi Snikket Community Interest "
"Company."
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
msgid "About Snikket"
@@ -367,7 +341,7 @@ msgstr ""
#: snikket_web/templates/about.html:17
msgid "Trademarks"
msgstr ""
msgstr "Znaki firmowe"
#: snikket_web/templates/about.html:18
#, python-format
@@ -376,6 +350,9 @@ msgid ""
"Company. For more information about the trademarks, visit the <a href="
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
msgstr ""
"\"Snikket\" oraz logo papugi są znakami firmowymi Snikket Community Interest "
"Company. Więcej informacji o oznaczeniach znajdziesz na <a href=\""
"%(trademarks_url)s\">stronie o znakach firmowych Snikket</a>."
#: snikket_web/templates/about.html:19
msgid "Software Versions"
@@ -709,7 +686,7 @@ msgstr "Oczekujące zaproszenia"
#: snikket_web/templates/admin_invites.html:21
msgid "Expires"
msgstr ""
msgstr "Wygasa"
#: snikket_web/templates/admin_invites.html:22
msgid "Type"
@@ -1071,7 +1048,7 @@ msgstr "Pobierz w App Store"
#: snikket_web/templates/invite_view.html:34
msgid "Send to mobile device"
msgstr ""
msgstr "Wyślij na urządzenie mobilne"
#: snikket_web/templates/invite_view.html:37
msgid ""
@@ -1170,10 +1147,8 @@ msgid "Login failed"
msgstr "Logowanie nie powiodło się"
#: snikket_web/templates/login.html:23
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect address"
msgstr "Nieprawidłowe hasło"
msgstr "Adres nieprawidłowy"
#: snikket_web/templates/login.html:24
#, python-format
@@ -1181,14 +1156,16 @@ msgid ""
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
"em>. Your password was not sent."
msgstr ""
"Ten serwer Snikket obsługuje jedynie adresy kończące się na "
"<em>@%(snikket_domain)s</em>. Twoje hasło nie zostało wysłane."
#: snikket_web/templates/unauth.html:16
msgid "Operation successful"
msgstr ""
msgstr "Operacja zakończona sukcesem"
#: snikket_web/templates/unauth.html:18
msgid "Error"
msgstr ""
msgstr "Błąd"
#: snikket_web/templates/user_home.html:9
msgid "Welcome!"

View File

@@ -8,17 +8,17 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
"PO-Revision-Date: 2021-02-04 19:02+0000\n"
"PO-Revision-Date: 2021-03-12 23:04+0000\n"
"Last-Translator: GodGoldfish <godgoldfish@pm.me>\n"
"Language-Team: Russian <https://i18n.sotecware.net/projects/snikket/web-"
"portal/ru/>\n"
"Language-Team: Russian <https://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"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.4.2\n"
"X-Generator: Weblate 4.5.1\n"
"Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:60
@@ -26,20 +26,16 @@ msgid "Delete user permanently"
msgstr "Удалить пользователя навсегда"
#: snikket_web/admin.py:73
#, fuzzy
msgid "User deleted"
msgstr "удалённый"
#: snikket_web/admin.py:116
#, fuzzy
msgid "Password reset link created"
msgstr "Ссылка на сброс пароля для %(user_name)s"
#: snikket_web/admin.py:122
#, fuzzy
#| msgid "Create password reset links or delete users."
msgid "Password reset link deleted"
msgstr "Создайте ссылки для сброса пароля или удалите пользователей."
msgstr "Создайте ссылки для сброса пароля или удалите пользователей"
#: snikket_web/admin.py:141
msgid "Invite to circle"
@@ -94,20 +90,14 @@ msgid "Revoke"
msgstr "Aннулировать"
#: snikket_web/admin.py:259
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation created"
msgstr "Вид приглашения"
#: snikket_web/admin.py:275
#, fuzzy
#| msgid "New invitation link"
msgid "No such invitation exists"
msgstr "Новая ссылка на приглашение"
#: snikket_web/admin.py:290
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation revoked"
msgstr "Вид приглашения"
@@ -120,8 +110,6 @@ msgid "Create circle"
msgstr "Создать крук"
#: snikket_web/admin.py:342
#, fuzzy
#| msgid "Circle name"
msgid "Circle created"
msgstr "Имя круга"
@@ -142,31 +130,22 @@ msgid "Add user"
msgstr "Добавить пользователя"
#: snikket_web/admin.py:391
#, fuzzy
#| msgid "No circles"
msgid "No such circle exists"
msgstr "Нет кругов"
#: snikket_web/admin.py:428
#, fuzzy
#| msgid "Circle name"
msgid "Circle data updated"
msgstr "Имя круга"
#: snikket_web/admin.py:434
#, fuzzy
msgid "Circle deleted"
msgstr "удалённый"
#: snikket_web/admin.py:445
#, fuzzy
#| msgid "Invite to circle"
msgid "User added to circle"
msgstr "Пригласить в круг"
#: snikket_web/admin.py:454
#, fuzzy
#| msgid "Remove user %(username)s from circle"
msgid "User removed from circle"
msgstr "Удалить пользователя %(username)s из круга"
@@ -225,7 +204,7 @@ msgstr "Неверное имя пользователя или пароль."
#: snikket_web/main.py:84
msgid "Login successful!"
msgstr ""
msgstr "Войти успешно!"
#: snikket_web/user.py:28
msgid "Current password"
@@ -281,13 +260,10 @@ msgid "Incorrect password"
msgstr "Неправильный пароль"
#: snikket_web/user.py:104
#, fuzzy
msgid "Password changed"
msgstr "Смена пароля"
#: snikket_web/user.py:146
#, fuzzy
#| msgid "Profile"
msgid "Profile updated"
msgstr "Профиль"
@@ -301,13 +277,15 @@ msgid ""
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
"Company."
msgstr ""
"\"Сниккет\" и логотип попугая являются торговыми марками компании Сниккет "
"Общественно-полезная компания."
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
msgid "About Snikket"
msgstr "О Сниккете"
#: snikket_web/templates/about.html:10
#, fuzzy, python-format
#, python-format
msgid ""
"To learn more about Snikket, visit the <a href=\"%(snikket_url)s\">Snikket "
"website</a>."
@@ -329,41 +307,41 @@ msgid "Licenses"
msgstr "Лицензии"
#: snikket_web/templates/about.html:14
#, fuzzy, python-format
#, python-format
msgid ""
"The web portal software is licensed under the terms of the <a href="
"\"%(agpl_url)s\">Affero GNU General Public License, version 3.0 or later</"
"a>. The full terms of the license can be reviewed using the aforementioned "
"link."
msgstr ""
"Программное обеспечение веб-портала лицензировано на условиях <a href="
"\"%(agpl_url)s\">Афферо GNU Генеральная общественная лицензия, версия 3.0 "
"или более поздняя</a>. Полные условия лицензии могут быть просмотрены по "
"Программное обеспечение веб-портала лицензировано на условиях <a href=\""
"%(agpl_url)s\">Афферо GNU Генеральная общественная лицензия, версия 3.0 или "
"более поздняя</a>. Полные условия лицензии могут быть просмотрены по "
"вышеуказанной ссылке."
#: snikket_web/templates/about.html:15
#, fuzzy, python-format
#, 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</a>."
"Исходный код веб-портала можно скачать и просмотреть по адресу <a href=\""
"%(source_url)s\">это репозиторий GitHub</a>."
#: snikket_web/templates/about.html:16
#, fuzzy, python-format
#, python-format
msgid ""
"The icons used in the web portal are <a href=\"%(source_url)s\">Googles "
"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</a>, предоставленный Google на условиях <a href="
"\"%(apache20_url)s\">Лицензия Apache 2.0</a>."
"Материалов Google</a>, предоставленный Google на условиях <a href=\""
"%(apache20_url)s\">Лицензия Apache 2.0</a>."
#: snikket_web/templates/about.html:17
msgid "Trademarks"
msgstr ""
msgstr "Товарные знаки"
#: snikket_web/templates/about.html:18
#, python-format
@@ -372,6 +350,10 @@ msgid ""
"Company. For more information about the trademarks, visit the <a href="
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
msgstr ""
"\"Сниккет\" и логотип попугая являются торговыми марками компании Сниккет "
"Общественно-полезная компания. Для получения дополнительной информации о "
"товарных знаках посетите <a href=\"%(trademarks_url)s\">информационную "
"страницу Сниккет Товарные знаки</a>."
#: snikket_web/templates/about.html:19
msgid "Software Versions"
@@ -391,7 +373,6 @@ msgid "Manage circles"
msgstr "Управлять кругами"
#: snikket_web/templates/admin_circles.html:5
#, fuzzy
msgid ""
"<em>Circles</em> aim to help people who are in the same social circle find "
"each other on your service."
@@ -400,7 +381,6 @@ msgstr ""
"социальном кругу, найти друг друга на вашей службе."
#: snikket_web/templates/admin_circles.html:6
#, fuzzy
msgid ""
"Users who are in the same circle will see each other in their contact list. "
"In addition, each circle has a group chat where the circle members are "
@@ -445,7 +425,6 @@ msgid "No circles"
msgstr "Нет кругов"
#: snikket_web/templates/admin_circles.html:41
#, fuzzy
msgid ""
"Currently, there are no circles on this service. Use the form below to "
"create one."
@@ -466,7 +445,6 @@ msgid "Create new invitation"
msgstr "Создать новое приглашение"
#: snikket_web/templates/admin_create_invite_form.html:6
#, fuzzy
msgid ""
"Create a new invitation link to invite more users to your Snikket service by "
"clicking the button below."
@@ -485,7 +463,6 @@ msgid "Warning"
msgstr "Предупреждение"
#: snikket_web/templates/admin_debug_user.html:12
#, fuzzy
msgid "The below dump may contain sensitive information."
msgstr ""
"Приведенное ниже содержание может содержать конфиденциальную информацию."
@@ -522,7 +499,6 @@ msgid "Danger"
msgstr "Опасность"
#: snikket_web/templates/admin_delete_user.html:16
#, fuzzy
msgid ""
"The user and their data will be deleted irrevocably, permanently and "
"immediately upon pushing the below button. <strong>There is no way back!</"
@@ -546,7 +522,6 @@ msgid "This is your main circle"
msgstr "Это ваш основной круг"
#: snikket_web/templates/admin_edit_circle.html:15
#, fuzzy
msgid "This circle is managed automatically and cannot be removed or renamed."
msgstr ""
"Этот круг управляется автоматически и не может быть удален или переименован."
@@ -576,7 +551,6 @@ msgid "Delete circle"
msgstr "Удалить круг"
#: snikket_web/templates/admin_edit_circle.html:49
#, fuzzy
msgid "Deleting a circle does not delete any users in the circle."
msgstr "Удаление круга не приводит к удалению пользователей из круга."
@@ -629,7 +603,6 @@ msgid "Circles"
msgstr "Круги"
#: snikket_web/templates/admin_edit_invite.html:23
#, fuzzy
msgid ""
"Users joining via this invitation will be added to the following circles:"
msgstr ""
@@ -642,7 +615,6 @@ msgid "Circle"
msgstr "Круг"
#: snikket_web/templates/admin_edit_invite.html:35
#, fuzzy
msgid "The user will not be added to any circle and will have no contacts."
msgstr ""
"Пользователь не будет добавлен ни в один круг и не будет иметь никакого "
@@ -699,65 +671,55 @@ msgstr "Создавайте, отзывайте или копируйте пр
#: snikket_web/templates/admin_home.html:31
#: snikket_web/templates/admin_invites.html:8
#, fuzzy
msgid "Manage invitations"
msgstr "Управление приглашениями"
#: snikket_web/templates/admin_home.html:36
#, fuzzy
msgid "Go back to your user's web portal page."
msgstr "Вернитесь на веб-портал своего пользователя."
#: snikket_web/templates/admin_home.html:38
#, fuzzy
msgid "Exit admin panel"
msgstr "Покидая административную панель"
#: snikket_web/templates/admin_invites.html:10
#, fuzzy
msgid "Pending invitations"
msgstr "Отложенные приглашения"
#: snikket_web/templates/admin_invites.html:21
msgid "Expires"
msgstr ""
msgstr "Срок действия"
#: snikket_web/templates/admin_invites.html:22
msgid "Type"
msgstr "Вид"
#: snikket_web/templates/admin_invites.html:43
#, fuzzy
msgid "Show invite details"
msgstr "Показать пригласительные детали"
#: snikket_web/templates/admin_invites.html:46
#, fuzzy
msgid "Copy invite link to clipboard"
msgstr "Скопировать ссылку на приглашение в буфер обмена"
#: snikket_web/templates/admin_invites.html:49
#, fuzzy
msgid "Delete invitation"
msgstr "Удаляет приглашение"
#: snikket_web/templates/admin_invites.html:57
#, fuzzy
msgid "Currently, there are no pending invitations."
msgstr "В настоящее время нет ни одного нерассмотренного приглашения."
#: snikket_web/templates/admin_reset_user_password.html:8
#, fuzzy
msgid "Password reset"
msgstr "Смена пароля"
#: snikket_web/templates/admin_reset_user_password.html:12
#, fuzzy, python-format
#, python-format
msgid "Password reset link for %(user_name)s"
msgstr "Ссылка на сброс пароля для %(user_name)s"
#: snikket_web/templates/admin_reset_user_password.html:13
#, fuzzy
msgid ""
"The following link will allow the user to reset their password on their "
"device, once."
@@ -766,17 +728,16 @@ msgstr ""
"устройстве."
#: snikket_web/templates/admin_reset_user_password.html:22
#, fuzzy
msgid "Destroy link"
msgstr "Удалить ссылку"
#: snikket_web/templates/admin_users.html:25
#, fuzzy, python-format
#, python-format
msgid "Show debug information for %(user_name)s"
msgstr "Показать отладочную информацию для %(user_name)s"
#: snikket_web/templates/admin_users.html:28
#, fuzzy, python-format
#, python-format
msgid "Create password reset link for %(user_name)s"
msgstr "Создать ссылку сброса пароля для %(user_name)s"
@@ -785,43 +746,37 @@ msgid "Snikket Web Portal"
msgstr "Сниккет веб-портал"
#: snikket_web/templates/app.html:8
#, fuzzy
msgid "Log out"
msgstr "Выход из системы"
#: snikket_web/templates/backend_error.html:3
#: snikket_web/templates/exception.html:3
#: snikket_web/templates/internal_error.html:3
#, fuzzy
msgid "Internal error"
msgstr "Внутренняя ошибка"
#: snikket_web/templates/backend_error.html:4
#, fuzzy
msgid "The web portal was not able to communicate with the backend."
msgstr "Веб-портал не смог общаться с бэкэндом."
#: snikket_web/templates/backend_error.html:5
#: snikket_web/templates/internal_error.html:5
#, fuzzy
msgid "Please try again later and/or inform your Snikket service admin."
msgstr ""
"Пожалуйста, повторите попытку позже и/или сообщите администратору сервиса "
"Сниккет."
#: snikket_web/templates/generic_http_error.html:9
#, fuzzy
msgid "Go back to the main page"
msgstr "Вернуться на главную страницу"
#: snikket_web/templates/internal_error.html:4
#, fuzzy
msgid "The web portal encountered an internal error."
msgstr "Веб-портал столкнулся с внутренней ошибкой."
#: snikket_web/templates/invite_invalid.html:5
#: snikket_web/templates/invite_view.html:13
#, fuzzy, python-format
#, python-format
msgid "Invite to %(site_name)s"
msgstr "Приглашаем в %(site_name)s"
@@ -829,44 +784,40 @@ msgstr "Приглашаем в %(site_name)s"
#: snikket_web/templates/invite_register.html:10
#: snikket_web/templates/invite_success.html:11
#: snikket_web/templates/invite_view.html:14
#, fuzzy, python-format
#, python-format
msgid "Powered by <img src=\"%(logo_url)s\" alt=\"Snikket\">"
msgstr "Движимый <img alt=\"Сниккет\" src=\"%(logo_url)s\">"
#: snikket_web/templates/invite_invalid.html:8
#, fuzzy
msgid "Invite expired"
msgstr "Приглашение истекло"
#: snikket_web/templates/invite_invalid.html:9
#, fuzzy
msgid "Sorry, it looks like this invitation link has expired!"
msgstr "Извините, похоже, ссылка на приглашение просрочена!"
#: snikket_web/templates/invite_register.html:5
#, fuzzy, python-format
#, python-format
msgid "Register on %(site_name)s | Snikket"
msgstr "Зарегистрироваться на %(site_name)s | Сниккет"
#: snikket_web/templates/invite_register.html:9
#, fuzzy, python-format
#, python-format
msgid "Register on %(site_name)s"
msgstr "Зарегистрироваться на %(site_name)s"
#: snikket_web/templates/invite_register.html:11
#, fuzzy, python-format
#, python-format
msgid "%(site_name)s is using Snikket - a secure, privacy-friendly chat app."
msgstr ""
"%(site_name)s использует Snikket - безопасное, конфиденциальное чат-"
"приложение."
"%(site_name)s использует Snikket - безопасное, конфиденциальное "
"чат-приложение."
#: snikket_web/templates/invite_register.html:12
#, fuzzy
msgid "Create an account"
msgstr "Создать аккаунт"
#: snikket_web/templates/invite_register.html:13
#, fuzzy
msgid ""
"Creating an account will allow to communicate with other people using the "
"Snikket app or compatible software. If you already have the app installed, "
@@ -880,32 +831,27 @@ msgstr ""
#: snikket_web/templates/invite_register.html:14
#: snikket_web/templates/invite_view.html:38
#, fuzzy
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
#, fuzzy
msgid "Open the app"
msgstr "Откройте приложение"
#: snikket_web/templates/invite_register.html:18
#: snikket_web/templates/invite_view.html:42
#, fuzzy
msgid "This button works only if you have the app installed already!"
msgstr ""
"Эта кнопка работает только в том случае, если у вас уже установлено "
"приложение!"
#: snikket_web/templates/invite_register.html:19
#, fuzzy
msgid "Create an account online"
msgstr "Создать учетную запись онлайн"
#: snikket_web/templates/invite_register.html:20
#, fuzzy
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."
@@ -915,7 +861,6 @@ msgstr ""
"любое XMPP-совместимое программное обеспечение."
#: snikket_web/templates/invite_register.html:27
#, fuzzy
msgid ""
"Choose a username, this will become the first part of your new chat address."
msgstr ""
@@ -923,23 +868,19 @@ msgstr ""
"чате."
#: snikket_web/templates/invite_register.html:32
#, fuzzy
msgid "Enter a secure password that you do not use anywhere else."
msgstr "Введите надежный пароль, который вы больше нигде не используете."
#: snikket_web/templates/invite_reset.html:9
#: snikket_web/templates/invite_reset_view.html:9
#, fuzzy
msgid "Reset your password | Snikket"
msgstr "Сбросить пароль | Сниккет"
#: snikket_web/templates/invite_reset.html:15
#, fuzzy
msgid "Reset your password online"
msgstr "Сброс пароля онлайн"
#: snikket_web/templates/invite_reset.html:16
#, fuzzy
msgid ""
"To reset your password online, fill out the fields below and confirm using "
"the button."
@@ -948,58 +889,49 @@ msgstr ""
"нажатием кнопки."
#: snikket_web/templates/invite_reset_success.html:5
#, fuzzy
msgid "Password reset successful | Snikket"
msgstr "Успешный сброс пароля | Сниккет"
#: snikket_web/templates/invite_reset_success.html:8
#, fuzzy
msgid "Password reset successful"
msgstr "Успешный сброс пароля"
#: snikket_web/templates/invite_reset_success.html:10
#, fuzzy
msgid "Your password has been changed"
msgstr "Ваш пароль был изменен"
#: snikket_web/templates/invite_reset_success.html:11
#, fuzzy
msgid "You can now log in using your new password."
msgstr "Теперь вы можете войти в систему, используя новый пароль."
#: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
#, fuzzy
msgid "You can now safely close this page."
msgstr "Теперь вы можете безопасно закрыть эту страницу."
#: snikket_web/templates/invite_reset_view.html:14
#, fuzzy
msgid "Reset your password"
msgstr "Сброс пароля"
#: snikket_web/templates/invite_reset_view.html:15
#, fuzzy, python-format
#, python-format
msgid ""
"This page allows you to reset the password of your account, <strong>"
"%(account_jid)s</strong>, once."
msgstr ""
"Эта страница позволяет вам сбросить пароль вашей учетной записи, <strong>"
"%(account_jid)s</strong>, один раз."
"Эта страница позволяет вам сбросить пароль вашей учетной записи, "
"<strong>%(account_jid)s</strong>, один раз."
#: snikket_web/templates/invite_reset_view.html:17
#, fuzzy
msgid "Using the app"
msgstr "Использование приложения"
#: snikket_web/templates/invite_reset_view.html:18
#, fuzzy
msgid "To reset your password using the Snikket App, tap the button below."
msgstr ""
"Чтобы сбросить пароль с помощью приложения Snikket App, нажмите кнопку ниже."
#: snikket_web/templates/invite_reset_view.html:25
#, fuzzy
msgid ""
"Alternatively, you can scan the below code with the Snikket App using the "
"Scan button at the top."
@@ -1009,7 +941,6 @@ msgstr ""
#: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:76
#, fuzzy
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 "
@@ -1020,7 +951,6 @@ msgstr ""
"приложение ее не распознает."
#: snikket_web/templates/invite_reset_view.html:27
#, fuzzy
msgid "You will then be prompted to enter a new password for your account."
msgstr ""
"Затем вам будет предложено ввести новый пароль для вашей учетной записи."
@@ -1031,7 +961,7 @@ msgid "Alternatives"
msgstr "Альтернативы"
#: snikket_web/templates/invite_reset_view.html:30
#, fuzzy, python-format
#, python-format
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."
@@ -1040,29 +970,27 @@ msgstr ""
"вышеуказанная кнопка или сканирование QR-кода не работает для Вас."
#: snikket_web/templates/invite_success.html:5
#, fuzzy, python-format
#, python-format
msgid "Successfully registered on %(site_name)s | Snikket"
msgstr "успешно зарегистрирован на %(site_name)s | Сниккет"
#: snikket_web/templates/invite_success.html:10
#, fuzzy, python-format
#, python-format
msgid "Successfully registered on %(site_name)s"
msgstr "Успешная регистрация на %(site_name)s"
#: snikket_web/templates/invite_success.html:12
#, fuzzy, python-format
#, python-format
msgid ""
"Congratulations! You successfully registered on %(site_name)s as %(jid)s."
msgstr ""
"Поздравляем! Вы успешно зарегистрировались на %(site_name)s в виде %(jid)s."
#: snikket_web/templates/invite_success.html:13
#, fuzzy
msgid "Your address"
msgstr "Ваш адрес"
#: snikket_web/templates/invite_success.html:17
#, fuzzy
msgid ""
"You can now set up your legacy XMPP client with the above address and the "
"password you chose during registration."
@@ -1071,12 +999,12 @@ msgstr ""
"паролем, который вы выбрали при регистрации."
#: snikket_web/templates/invite_view.html:6
#, fuzzy, python-format
#, python-format
msgid "Invite to %(site_name)s | Snikket"
msgstr "Приглашаем на %(site_name)s | Сниккет"
#: snikket_web/templates/invite_view.html:16
#, fuzzy, python-format
#, python-format
msgid ""
"You have been invited to chat with %(inviter_name)s using Snikket, a secure, "
"privacy-friendly chat app on %(site_name)s."
@@ -1085,7 +1013,7 @@ msgstr ""
"безопасное, конфиденциальное приложение для чата %(site_name)s."
#: snikket_web/templates/invite_view.html:18
#, fuzzy, python-format
#, python-format
msgid ""
"You have been invited to chat on %(site_name)s using Snikket, a secure, "
"privacy-friendly chat app."
@@ -1098,33 +1026,32 @@ msgid "Get started"
msgstr "Начать"
#: snikket_web/templates/invite_view.html:22
#, fuzzy
msgid "Install the Snikket App on your Android or iOS device."
msgstr "Установите приложение Сниккет на ваше Android или iOS устройство."
#: snikket_web/templates/invite_view.html:24
#, fuzzy, python-format
#, python-format
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 "Установите приложение Сниккет на ваше Android-устройство"
msgstr ""
"Установите приложение Сниккет на ваше Android-устройство (<a href=\""
"%(ios_info_url)s\" rel=\"noopener noreferrer\" target=\"_blank\">iOS скоро "
"будет!</a>)."
#: snikket_web/templates/invite_view.html:28
#, fuzzy
msgid "Get it on Google Play"
msgstr "Получить его в Гугл Игры"
#: snikket_web/templates/invite_view.html:30
#, fuzzy
msgid "Download on the App Store"
msgstr "Скачать в Магазин Приложений"
#: snikket_web/templates/invite_view.html:34
msgid "Send to mobile device"
msgstr ""
msgstr "Отправить на мобильное устройство"
#: snikket_web/templates/invite_view.html:37
#, fuzzy
msgid ""
"After installation the app should automatically open and prompt you to "
"create an account. If not, simply click the button below."
@@ -1133,7 +1060,7 @@ msgstr ""
"создать учетную запись. Если нет, просто нажмите на кнопку ниже."
#: snikket_web/templates/invite_view.html:45
#, fuzzy, python-format
#, python-format
msgid ""
"You can connect to Snikket using any XMPP-compatible software. If the button "
"above does not work with your app, you may need to <a href=\"%(register_url)s"
@@ -1141,11 +1068,10 @@ msgid ""
msgstr ""
"Вы можете подключиться к Snikket с помощью любого XMPP-совместимого "
"программного обеспечения. Если вышеуказанная кнопка не работает с вашим "
"приложением, вам может понадобиться <a href=\"%(register_url)s"
"\">зарегистрировать учетную запись вручную</a>."
"приложением, вам может понадобиться <a href=\"%(register_url)s\""
">зарегистрировать учетную запись вручную</a>."
#: snikket_web/templates/invite_view.html:51
#, fuzzy
msgid "Scan invite code"
msgstr "Сканировать код приглашения"
@@ -1155,7 +1081,6 @@ msgid "Close"
msgstr "близко"
#: snikket_web/templates/invite_view.html:57
#, fuzzy
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."
@@ -1165,17 +1090,14 @@ msgstr ""
"сканера, так и само приложение Сниккет."
#: snikket_web/templates/invite_view.html:62
#, fuzzy
msgid "Using a QR code scanner"
msgstr "Используя сканер QR-кода"
#: snikket_web/templates/invite_view.html:64
#, fuzzy
msgid "Using the Snikket app"
msgstr "Использование приложения Сниккет"
#: snikket_web/templates/invite_view.html:69
#, fuzzy
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
msgstr ""
@@ -1183,7 +1105,6 @@ msgstr ""
"сканирования кода, приведенного ниже:"
#: snikket_web/templates/invite_view.html:75
#, fuzzy
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
@@ -1192,29 +1113,24 @@ msgstr ""
"нажмите кнопку 'Сканировать' сверху."
#: snikket_web/templates/library.j2:18
#, fuzzy
msgid "Copy link"
msgstr "Ссылка на копирование"
#: snikket_web/templates/library.j2:81
#, fuzzy
msgid "Invalid input"
msgstr "Недействительный вход"
#: snikket_web/templates/library.j2:108
#, fuzzy
msgid "deleted"
msgstr "удалённый"
#: snikket_web/templates/library.j2:122
#, fuzzy
msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr ""
"Может использоваться несколько раз для создания аккаунтов на этом сервисе "
"Сниккет."
#: snikket_web/templates/library.j2:124
#, fuzzy
msgid "Can be used once to create an account on this Snikket service."
msgstr ""
"Может быть использован один раз для создания аккаунта на этом сервисе "
@@ -1225,18 +1141,14 @@ msgid "Snikket Login"
msgstr "Логин Сниккетa"
#: snikket_web/templates/login.html:14
#, fuzzy
msgid "Enter your Snikket address and password to manage your account."
msgstr "Введите адрес и пароль Сниккет для управления учетной записью."
#: snikket_web/templates/login.html:18
#, fuzzy
msgid "Login failed"
msgstr "Логин не удался"
#: snikket_web/templates/login.html:23
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect address"
msgstr "Неправильный пароль"
@@ -1246,14 +1158,16 @@ msgid ""
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
"em>. Your password was not sent."
msgstr ""
"Этот Сниккет сервис только размещает адреса, заканчивающиеся на "
"<em>@%(snikket_domain)s</em>. Ваш пароль не был отправлен."
#: snikket_web/templates/unauth.html:16
msgid "Operation successful"
msgstr ""
msgstr "Операция прошла успешно"
#: snikket_web/templates/unauth.html:18
msgid "Error"
msgstr ""
msgstr "Ошибка"
#: snikket_web/templates/user_home.html:9
msgid "Welcome!"
@@ -1281,7 +1195,6 @@ msgid "Your Snikket"
msgstr "Ваш Сниккет"
#: snikket_web/templates/user_home.html:40
#, fuzzy
msgid "Manage users, invitations and circles of your Snikket service."
msgstr ""
"Управляйте пользователями, приглашениями и кругами вашего сервиса Сниккет."
@@ -1295,7 +1208,6 @@ msgid "Sign out of the Snikket Web Portal"
msgstr "Выйти из веб-портала Сниккета"
#: snikket_web/templates/user_logout.html:6
#, fuzzy
msgid ""
"Click below to log yourself out of the web portal. This does not affect any "
"other connected devices."
@@ -1308,7 +1220,6 @@ msgid "Change your password"
msgstr "Изменить пароль"
#: snikket_web/templates/user_passwd.html:6
#, fuzzy
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 "
@@ -1319,7 +1230,6 @@ msgstr ""
"дважды."
#: snikket_web/templates/user_passwd.html:24
#, fuzzy
msgid ""
"After changing your password, you will have to enter the new password on all "
"of your devices."
@@ -1340,13 +1250,12 @@ msgid "Visibility"
msgstr "Видимость"
#: snikket_web/templates/user_profile.html:20
#, fuzzy
msgid ""
"This section allows you to control who can see your profile information, "
"like avatar and nickname."
msgstr ""
"This section allows you to control who can see your profile information, "
"like avatar and nickname."
"Этот раздел позволяет вам контролировать, кто может видеть информацию вашего "
"профиля, например, аватар и ник."
#, fuzzy
#~ msgid "Not on mobile?"

View File

@@ -8,10 +8,10 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
"PO-Revision-Date: 2021-02-22 23:23+0000\n"
"PO-Revision-Date: 2021-02-25 16:02+0000\n"
"Last-Translator: Kim Alvefur <zash@zash.se>\n"
"Language-Team: Swedish <https://i18n.sotecware.net/projects/snikket/web-"
"portal/sv/>\n"
"Language-Team: Swedish <https://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"
@@ -25,30 +25,24 @@ msgid "Delete user permanently"
msgstr "Radera användare permanent"
#: snikket_web/admin.py:73
#, fuzzy
#| msgid "deleted"
msgid "User deleted"
msgstr "raderad"
msgstr "Användare raderad"
#: snikket_web/admin.py:116
#, fuzzy
#| msgid "Password reset link for %(user_name)s"
msgid "Password reset link created"
msgstr "Lösenordsåterställningslänk för %(user_name)s"
msgstr "Skapade länk för att återställa lösenord"
#: snikket_web/admin.py:122
#, fuzzy
#| msgid "Create password reset links or delete users."
msgid "Password reset link deleted"
msgstr "Skapa lösenordsåterställningslänkar eller radera användare."
msgstr "Länk för återställning av lösenord raderad"
#: snikket_web/admin.py:141
msgid "Invite to circle"
msgstr "Bjud in till cirkel"
msgstr "Bjud in till krets"
#: snikket_web/admin.py:147
msgid "At least one circle must be selected"
msgstr "Minst en cirkel behöver väljas"
msgstr "Minst en krets behöver väljas"
#: snikket_web/admin.py:152
msgid "Valid for"
@@ -95,22 +89,16 @@ msgid "Revoke"
msgstr "Återkalla"
#: snikket_web/admin.py:259
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation created"
msgstr "Typ av inbjudan"
msgstr "Inbjudan skapad"
#: snikket_web/admin.py:275
#, fuzzy
#| msgid "New invitation link"
msgid "No such invitation exists"
msgstr "Ny inbjudanslänk"
msgstr "Inbjudanslänken finns inte"
#: snikket_web/admin.py:290
#, fuzzy
#| msgid "Invitation type"
msgid "Invitation revoked"
msgstr "Typ av inbjudan"
msgstr "Inbjudan återkallad"
#: snikket_web/admin.py:307 snikket_web/admin.py:355
msgid "Name"
@@ -118,13 +106,11 @@ msgstr "Namn"
#: snikket_web/admin.py:312 snikket_web/templates/admin_circles.html:47
msgid "Create circle"
msgstr "Skapa cirkel"
msgstr "Skapa krets"
#: snikket_web/admin.py:342
#, fuzzy
#| msgid "Circle name"
msgid "Circle created"
msgstr "Namn på cirkel"
msgstr "Krets skapad"
#: snikket_web/admin.py:360
msgid "Select user"
@@ -132,45 +118,35 @@ msgstr "Välj användare"
#: snikket_web/admin.py:365
msgid "Update circle"
msgstr "Uppdatera cirkel"
msgstr "Uppdatera krets"
#: snikket_web/admin.py:369
msgid "Delete circle permanently"
msgstr "Radera cirkel permanent"
msgstr "Radera krets permanent"
#: snikket_web/admin.py:375
msgid "Add user"
msgstr "Lägg till användare"
#: snikket_web/admin.py:391
#, fuzzy
#| msgid "No circles"
msgid "No such circle exists"
msgstr "Inga cirklar"
msgstr "Kretsen finns inte"
#: snikket_web/admin.py:428
#, fuzzy
#| msgid "Circle name"
msgid "Circle data updated"
msgstr "Namn på cirkel"
msgstr "Kretsen uppdaterades"
#: snikket_web/admin.py:434
#, fuzzy
#| msgid "deleted"
msgid "Circle deleted"
msgstr "raderad"
msgstr "Krets raderad"
#: snikket_web/admin.py:445
#, fuzzy
#| msgid "Invite to circle"
msgid "User added to circle"
msgstr "Bjud in till cirkel"
msgstr "Användare tillagd i krets"
#: snikket_web/admin.py:454
#, fuzzy
#| msgid "Remove user %(username)s from circle"
msgid "User removed from circle"
msgstr "Radera användaren %(username)s från cirkel"
msgstr "Användaren %(username)s borttagen från krets"
#: snikket_web/infra.py:40
msgid "Main"
@@ -227,7 +203,7 @@ msgstr "Ogiltigt användarnamn eller lösenord."
#: snikket_web/main.py:84
msgid "Login successful!"
msgstr ""
msgstr "Inloggning lyckades!"
#: snikket_web/user.py:28
msgid "Current password"
@@ -283,16 +259,12 @@ msgid "Incorrect password"
msgstr "Fel lösenord"
#: snikket_web/user.py:104
#, fuzzy
#| msgid "Password reset"
msgid "Password changed"
msgstr "Återställ lösenord"
msgstr "Lösenord ändrat"
#: snikket_web/user.py:146
#, fuzzy
#| msgid "Profile"
msgid "Profile updated"
msgstr "Profil"
msgstr "Profilen uppdaterad"
#: snikket_web/templates/_footer.html:4
#, python-format
@@ -304,6 +276,8 @@ msgid ""
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
"Company."
msgstr ""
"“Snikket” och papegojloggan är varumärken tillhörande Snikket Community "
"Interest Company."
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
msgid "About Snikket"
@@ -349,8 +323,8 @@ msgid ""
"The source code of the web portal can be downloaded and viewed in <a href="
"\"%(source_url)s\">its GitHub repository</a>."
msgstr ""
"Webbportalens källkod kan hämtas och visas på <a href=\"%(source_url)s"
"\">dess GitHub-projekt</a>."
"Webbportalens källkod kan hämtas från <a href=\"%(source_url)s\">dess GitHub-"
"projekt</a>."
#: snikket_web/templates/about.html:16
#, python-format
@@ -365,7 +339,7 @@ msgstr ""
#: snikket_web/templates/about.html:17
msgid "Trademarks"
msgstr ""
msgstr "Varumärken"
#: snikket_web/templates/about.html:18
#, python-format
@@ -374,6 +348,9 @@ msgid ""
"Company. For more information about the trademarks, visit the <a href="
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
msgstr ""
"“Snikket” och papegojloggan är varumärken tillhörande Snikket Community "
"Interest Company. För mer information om varumärkena, besök <a href=\""
"%(trademarks_url)s\">Snikkets sida om varumärken</a>."
#: snikket_web/templates/about.html:19
msgid "Software Versions"
@@ -390,14 +367,14 @@ msgstr "Administration"
#: snikket_web/templates/admin_circles.html:4
#: snikket_web/templates/admin_home.html:23
msgid "Manage circles"
msgstr "Hantera cirklar"
msgstr "Hantera kretsar"
#: snikket_web/templates/admin_circles.html:5
msgid ""
"<em>Circles</em> aim to help people who are in the same social circle find "
"each other on your service."
msgstr ""
"<em>Cirklar</em> är tänkta att hjälpa människor i samma bekantskapskrets "
"<em>Kretsar</em> är tänkta att hjälpa människor i samma bekantskapskrets "
"hitta varandra på din tjänst."
#: snikket_web/templates/admin_circles.html:6
@@ -406,12 +383,12 @@ msgid ""
"In addition, each circle has a group chat where the circle members are "
"included."
msgstr ""
"Användare som är i samma cirkel kommer se varandra i sin kontaktlista. "
"Dessutom har varje cirkel en gruppchatt som inkluderar cirkelns medlemmar."
"Användare som är i samma krets kommer se varandra i sin kontaktlista. "
"Dessutom har varje krets en gruppchatt som inkluderar kretsens medlemmar."
#: snikket_web/templates/admin_circles.html:13
msgid "Circle name"
msgstr "Namn på cirkel"
msgstr "Namn på krets"
#: snikket_web/templates/admin_circles.html:14
msgid "Members"
@@ -421,12 +398,12 @@ msgstr "Medlemmar"
#: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:12
msgid "Actions"
msgstr "Aktioner"
msgstr "Handlingar"
#: snikket_web/templates/admin_circles.html:25
#, python-format
msgid "Create invitation to circle %(circle_name)s"
msgstr "Skapa inbjudan till cirkeln %(circle_name)s"
msgstr "Skapa inbjudan till kretsen %(circle_name)s"
#: snikket_web/templates/admin_circles.html:28
#, python-format
@@ -437,23 +414,23 @@ msgstr "Hantera medlemmar av %(circle_name)s"
#: snikket_web/templates/admin_edit_circle.html:8
#, python-format
msgid "Edit circle %(circle_name)s"
msgstr "Redigera cirkel %(circle_name)s"
msgstr "Redigera krets %(circle_name)s"
#: snikket_web/templates/admin_circles.html:40
msgid "No circles"
msgstr "Inga cirklar"
msgstr "Inga kretsar"
#: snikket_web/templates/admin_circles.html:41
msgid ""
"Currently, there are no circles on this service. Use the form below to "
"create one."
msgstr ""
"Just nu finns inga cirklar på denna tjänst. Använd formuläret nedan för att "
"Just nu finns inga kretsar på denna tjänst. Använd formuläret nedan för att "
"skapa en."
#: snikket_web/templates/admin_circles.html:44
msgid "New circle"
msgstr "Ny cirkel"
msgstr "Ny krets"
#: snikket_web/templates/admin_create_invite.html:3
msgid "Create invitation"
@@ -522,8 +499,9 @@ msgid ""
"immediately upon pushing the below button. <strong>There is no way back!</"
"strong>"
msgstr ""
"Användaren och deras data kommer raderas skoningslöst, permanent och direkt "
"när knappen nedanför klickas. <strong>Det finns ingen återvändo!</strong>"
"Om du trycker på knappen nedanför kommer användaren och deras data raderas "
"direkt, permanent och skoningslöst. <strong>Därefter finns ingen "
"återvändo!</strong>"
#: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_edit_circle.html:44
@@ -537,17 +515,16 @@ msgstr "Tillbaka"
#: snikket_web/templates/admin_edit_circle.html:14
msgid "This is your main circle"
msgstr "Detta är din primära cirkel"
msgstr "Detta är din primära krets"
#: snikket_web/templates/admin_edit_circle.html:15
msgid "This circle is managed automatically and cannot be removed or renamed."
msgstr ""
"Denna cirkel hanteras automatiskt och kan inte tas bort eller döpas om."
msgstr "Denna krets hanteras automatiskt och kan inte tas bort eller döpas om."
#: snikket_web/templates/admin_edit_circle.html:17
#: snikket_web/templates/admin_edit_circle.html:33
msgid "Group chat address"
msgstr "Gruppchattsadress"
msgstr "Gruppchattens adress"
#: snikket_web/templates/admin_edit_circle.html:20
#: snikket_web/templates/admin_edit_circle.html:36
@@ -558,32 +535,32 @@ msgstr "Kopiera adress"
#: snikket_web/templates/admin_edit_circle.html:26
msgid "Circle information"
msgstr "Om cirkeln"
msgstr "Om kretsen"
#: snikket_web/templates/admin_edit_circle.html:39
msgid "This circle has no group chat associated."
msgstr "Denna cirkel har ingen tillhörande gruppchatt."
msgstr "Denna krets har ingen tillhörande gruppchatt."
#: snikket_web/templates/admin_edit_circle.html:48
msgid "Delete circle"
msgstr "Radera cirkel"
msgstr "Radera krets"
#: snikket_web/templates/admin_edit_circle.html:49
msgid "Deleting a circle does not delete any users in the circle."
msgstr "Användare i en cirkel raderas inte när cirkeln raderas."
msgstr "Användare i en krets raderas inte när kretsen raderas."
#: snikket_web/templates/admin_edit_circle.html:55
msgid "Circle members"
msgstr "Medlemmar i cirkel"
msgstr "Medlemmar i krets"
#: snikket_web/templates/admin_edit_circle.html:70
#, python-format
msgid "Remove user %(username)s from circle"
msgstr "Radera användaren %(username)s från cirkel"
msgstr "Radera användaren %(username)s från krets"
#: snikket_web/templates/admin_edit_circle.html:78
msgid "This circle currently has no members."
msgstr "Denna cirkel har för närvarande inga medlemmar."
msgstr "Denna krets har för närvarande inga medlemmar."
#: snikket_web/templates/admin_edit_circle.html:80
msgid "Invite more members"
@@ -599,7 +576,7 @@ msgstr "Alla användare tillagda"
#: snikket_web/templates/admin_edit_circle.html:95
msgid "All users on this service are already in this circle."
msgstr "Alla användare på den här tjänsten är redan i denna cirkel."
msgstr "Alla användare på den här tjänsten är redan i denna krets."
#: snikket_web/templates/admin_edit_invite.html:8
msgid "View invitation"
@@ -618,23 +595,22 @@ msgstr "Länk"
#: snikket_web/templates/admin_edit_invite.html:22
#: snikket_web/templates/admin_home.html:19
msgid "Circles"
msgstr "Cirklar"
msgstr "Kretsar"
#: snikket_web/templates/admin_edit_invite.html:23
msgid ""
"Users joining via this invitation will be added to the following circles:"
msgstr ""
"Användare som går med via denna inbjudan läggs till i följande cirklar:"
msgstr "Användare som går med via denna inbjudan läggs till i följande kretsar:"
#: snikket_web/templates/admin_edit_invite.html:29
#: snikket_web/templates/admin_invites.html:23
msgid "Circle"
msgstr "Cirkel"
msgstr "Krets"
#: snikket_web/templates/admin_edit_invite.html:35
msgid "The user will not be added to any circle and will have no contacts."
msgstr ""
"Användaren kommer inte läggas till i någon cirkel och kommer inte ha några "
"Användaren kommer inte läggas till i någon krets och kommer inte ha några "
"kontakter."
#: snikket_web/templates/admin_edit_invite.html:40
@@ -665,7 +641,7 @@ msgstr "Användare"
#: snikket_web/templates/admin_home.html:11
msgid "Create password reset links or delete users."
msgstr "Skapa lösenordsåterställningslänkar eller radera användare."
msgstr "Skapa länkar för att återställa lösenord eller radera användare."
#: snikket_web/templates/admin_home.html:15
#: snikket_web/templates/admin_users.html:4
@@ -703,7 +679,7 @@ msgstr "Väntande inbjudningar"
#: snikket_web/templates/admin_invites.html:21
msgid "Expires"
msgstr ""
msgstr "Går ut"
#: snikket_web/templates/admin_invites.html:22
msgid "Type"
@@ -732,7 +708,7 @@ msgstr "Återställ lösenord"
#: snikket_web/templates/admin_reset_user_password.html:12
#, python-format
msgid "Password reset link for %(user_name)s"
msgstr "Lösenordsåterställningslänk för %(user_name)s"
msgstr "Länk för att återställa lösenord för %(user_name)s"
#: snikket_web/templates/admin_reset_user_password.html:13
msgid ""
@@ -754,7 +730,7 @@ msgstr "Visa felsökningsinformation för %(user_name)s"
#: snikket_web/templates/admin_users.html:28
#, python-format
msgid "Create password reset link for %(user_name)s"
msgstr "Skapa lösenordsåterställningslänk för %(user_name)s"
msgstr "Skapa länk för att återställa lösenord för %(user_name)s"
#: snikket_web/templates/app.html:4
msgid "Snikket Web Portal"
@@ -1055,7 +1031,7 @@ msgstr "Hämta på App Store"
#: snikket_web/templates/invite_view.html:34
msgid "Send to mobile device"
msgstr ""
msgstr "Skicka till mobil"
#: snikket_web/templates/invite_view.html:37
msgid ""
@@ -1151,10 +1127,8 @@ msgid "Login failed"
msgstr "Inloggning misslyckades"
#: snikket_web/templates/login.html:23
#, fuzzy
#| msgid "Incorrect password"
msgid "Incorrect address"
msgstr "Fel lösenord"
msgstr "Fel adress"
#: snikket_web/templates/login.html:24
#, python-format
@@ -1162,14 +1136,16 @@ msgid ""
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
"em>. Your password was not sent."
msgstr ""
"Den här Snikket-tjänsten har bara adresser som slutar på "
"<em>@%(snikket_domain)s</em>. Ditt lösenord skickades inte."
#: snikket_web/templates/unauth.html:16
msgid "Operation successful"
msgstr ""
msgstr "Operationen lyckades"
#: snikket_web/templates/unauth.html:18
msgid "Error"
msgstr ""
msgstr "Fel"
#: snikket_web/templates/user_home.html:9
msgid "Welcome!"
@@ -1198,7 +1174,7 @@ msgstr "Ditt Snikket"
#: snikket_web/templates/user_home.html:40
msgid "Manage users, invitations and circles of your Snikket service."
msgstr "Hantera användare, inbjudningar och cirklar i din Snikket-tjänst."
msgstr "Hantera användare, inbjudningar och kretsar i din Snikket-tjänst."
#: snikket_web/templates/user_home.html:42
msgid "Admin panel"
@@ -1256,7 +1232,7 @@ msgid ""
"like avatar and nickname."
msgstr ""
"Den här avdelningen låter dig hantera vilka som kan se din profil, såsom din "
"profilbild och smeknamn."
"profilbild och visningsnamn."
#~ msgid "Not on mobile?"
#~ msgstr "Inte på mobilen?"

View File

@@ -9,6 +9,7 @@ from quart import (
redirect,
url_for,
flash,
current_app,
)
import quart.exceptions
@@ -109,9 +110,17 @@ async def change_pw() -> typing.Union[str, quart.Response]:
return await render_template("user_passwd.html", form=form)
EAVATARTOOBIG = _l(
"The chosen avatar is too big. To be able to upload larger "
"avatars, please use the app"
)
@bp.route("/profile", methods=["GET", "POST"])
@client.require_session()
async def profile() -> typing.Union[str, quart.Response]:
max_avatar_size = current_app.config["MAX_AVATAR_SIZE"]
form = ProfileForm()
if request.method != "POST":
user_info = await client.get_user_info()
@@ -125,30 +134,40 @@ async def profile() -> typing.Union[str, quart.Response]:
if form.validate_on_submit():
user_info = await client.get_user_info()
ok = True
file_info = (await request.files).get(form.avatar.name)
if file_info is not None:
mimetype = file_info.mimetype
data = file_info.stream.read()
if len(data) > 0:
if len(data) > max_avatar_size:
print(len(data), max_avatar_size)
form.avatar.errors.append(EAVATARTOOBIG)
ok = False
elif len(data) > 0:
await client.set_user_avatar(data, mimetype)
if user_info.get("nickname") != form.nickname.data:
await client.set_user_nickname(form.nickname.data)
if ok:
if user_info.get("nickname") != form.nickname.data:
await client.set_user_nickname(form.nickname.data)
access_model = form.profile_access_model.data
await asyncio.gather(
client.set_avatar_access_model(access_model),
client.set_vcard_access_model(access_model),
client.set_nickname_access_model(access_model),
)
access_model = form.profile_access_model.data
await asyncio.gather(
client.set_avatar_access_model(access_model),
client.set_vcard_access_model(access_model),
client.set_nickname_access_model(access_model),
)
await flash(
_("Profile updated"),
"success",
)
return redirect(url_for(".profile"))
await flash(
_("Profile updated"),
"success",
)
return redirect(url_for(".profile"))
return await render_template("user_profile.html", form=form)
return await render_template("user_profile.html",
form=form,
max_avatar_size=max_avatar_size,
avatar_too_big_warning_header=_l("Error"),
avatar_too_big_warning=EAVATARTOOBIG)
@bp.route("/logout", methods=["GET", "POST"])