You've already forked snikket-web-portal
Compare commits
35 Commits
fix/role-c
...
feature/ad
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55b195cd7f | ||
|
|
46a7d0c37d | ||
|
|
c63b95c6e0 | ||
|
|
6848691141 | ||
|
|
1e83881a24 | ||
|
|
35e6bec328 | ||
|
|
d345f0d98d | ||
|
|
f5ccb7d858 | ||
|
|
f7c8bccfa2 | ||
|
|
e5d06877a4 | ||
|
|
e7ed9dd176 | ||
|
|
6778557db8 | ||
|
|
73f3f25515 | ||
|
|
bd66600d05 | ||
|
|
db363367da | ||
|
|
7ce13b55ac | ||
|
|
d6d4bb5afb | ||
|
|
da52771ebe | ||
|
|
e39b6ca8bb | ||
|
|
14368c5e9a | ||
|
|
2cdcf7f282 | ||
|
|
0f1e76e38c | ||
|
|
ad9af20f12 | ||
|
|
9672cd6870 | ||
|
|
d3a6be7bec | ||
|
|
7a4b56914c | ||
|
|
0f74b1b8f2 | ||
|
|
df78e8a8b0 | ||
|
|
77ccdd5eed | ||
|
|
54b6cad7cd | ||
|
|
fbb618c178 | ||
|
|
bd3d56851b | ||
|
|
c475b83c02 | ||
|
|
d9b73055a8 | ||
|
|
f37270594e |
28
Dockerfile
28
Dockerfile
@@ -1,28 +1,22 @@
|
||||
FROM debian:bullseye-slim AS build
|
||||
FROM debian:bookworm-slim AS build
|
||||
|
||||
RUN set -eu; \
|
||||
export DEBIAN_FRONTEND=noninteractive ; \
|
||||
apt-get update ; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
python3 python3-pip python3-setuptools python3-wheel \
|
||||
libpython3-dev \
|
||||
make build-essential;
|
||||
python3 python3-mypy python3-dotenv python3-toml python3-babel python3-distutils \
|
||||
sassc make;
|
||||
|
||||
COPY requirements.txt /opt/snikket-web-portal/requirements.txt
|
||||
COPY build-requirements.txt /opt/snikket-web-portal/build-requirements.txt
|
||||
COPY Makefile /opt/snikket-web-portal/Makefile
|
||||
COPY snikket_web/ /opt/snikket-web-portal/snikket_web
|
||||
COPY babel.cfg /opt/snikket-web-portal/babel.cfg
|
||||
|
||||
WORKDIR /opt/snikket-web-portal
|
||||
|
||||
RUN set -eu; \
|
||||
pip3 install -r requirements.txt; \
|
||||
pip3 install -r build-requirements.txt; \
|
||||
make;
|
||||
RUN make
|
||||
|
||||
|
||||
FROM debian:bullseye-slim
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
ARG BUILD_SERIES=dev
|
||||
ARG BUILD_ID=0
|
||||
@@ -33,19 +27,19 @@ ENV SNIKKET_WEB_PYENV=/etc/snikket-web-portal/env.py
|
||||
|
||||
ENV SNIKKET_WEB_PROSODY_ENDPOINT=http://127.0.0.1:5280/
|
||||
|
||||
COPY requirements.txt /opt/snikket-web-portal/requirements.txt
|
||||
|
||||
WORKDIR /opt/snikket-web-portal
|
||||
|
||||
RUN set -eu; \
|
||||
export DEBIAN_FRONTEND=noninteractive ; \
|
||||
apt-get update ; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
python3 python3-pip python3-setuptools python3-wheel build-essential libpython3-dev netcat; \
|
||||
pip3 install -r requirements.txt; \
|
||||
apt-get remove -y --autoremove build-essential libpython3-dev; \
|
||||
netcat-traditional python3 python3-setuptools python3-pip \
|
||||
python3-aiohttp python3-email-validator python3-flask-babel \
|
||||
python3-flaskext.wtf python3-hsluv python3-hypercorn \
|
||||
python3-quart python3-typing-extensions python3-wtforms ; \
|
||||
pip3 install --break-system-packages environ-config ; \
|
||||
apt-get remove -y --purge python3-pip python3-setuptools; \
|
||||
apt-get clean ; rm -rf /var/lib/apt/lists; \
|
||||
pip3 install hypercorn; \
|
||||
rm -rf /root/.cache;
|
||||
|
||||
HEALTHCHECK CMD nc -zv ${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE:-127.0.0.1} ${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_PORT:-5765}
|
||||
|
||||
4
Makefile
4
Makefile
@@ -6,7 +6,7 @@ translation_basepath = snikket_web/translations
|
||||
pot_file = $(translation_basepath)/messages.pot
|
||||
|
||||
PYTHON3 ?= python3
|
||||
SCSSC ?= $(PYTHON3) -m scss --load-path snikket_web/scss/
|
||||
SCSSC ?= sassc --load-path snikket_web/scss/
|
||||
|
||||
all: build_css compile_translations
|
||||
|
||||
@@ -14,7 +14,7 @@ build_css: $(generated_css_files)
|
||||
|
||||
$(generated_css_files): snikket_web/static/css/%.css: snikket_web/scss/%.scss $(scss_files) $(scss_includes)
|
||||
mkdir -p snikket_web/static/css/
|
||||
$(SCSSC) -o "$@" "$<"
|
||||
$(SCSSC) "$<" "$@"
|
||||
|
||||
clean:
|
||||
rm -f $(generated_css_files)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
pyscss~=1.3
|
||||
mypy
|
||||
python-dotenv~=0.15
|
||||
types-toml
|
||||
|
||||
@@ -5,6 +5,11 @@ if [ -n "${SNIKKET_SITE_NAME:-}" ]; then
|
||||
export SNIKKET_WEB_SITE_NAME="$SNIKKET_SITE_NAME"
|
||||
fi
|
||||
|
||||
export SNIKKET_WEB_TOS_URI="${SNIKKET_TOS_URI}"
|
||||
export SNIKKET_WEB_PRIVACY_URI="${SNIKKET_PRIVACY_URI}"
|
||||
export SNIKKET_WEB_ABUSE_EMAIL="${SNIKKET_ABUSE_EMAIL}"
|
||||
export SNIKKET_WEB_SECURITY_EMAIL="${SNIKKET_SECURITY_EMAIL}"
|
||||
|
||||
export SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE="${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE-127.0.0.1}"
|
||||
export SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_PORT="${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_PORT-5765}"
|
||||
|
||||
|
||||
@@ -170,6 +170,10 @@ class AppConfig:
|
||||
# tools may also very well override it.
|
||||
max_avatar_size = environ.var(1024*1024, converter=int)
|
||||
show_metrics = environ.bool_var(True)
|
||||
tos_uri = environ.var("")
|
||||
privacy_uri = environ.var("")
|
||||
abuse_email = environ.var("")
|
||||
security_email = environ.var("")
|
||||
|
||||
|
||||
_UPPER_CASE = "".join(map(chr, range(ord("A"), ord("Z")+1)))
|
||||
@@ -202,6 +206,10 @@ def create_app() -> quart.Quart:
|
||||
app.config["APPLE_STORE_URL"] = config.apple_store_url
|
||||
app.config["MAX_AVATAR_SIZE"] = config.max_avatar_size
|
||||
app.config["SHOW_METRICS"] = config.show_metrics
|
||||
app.config["TOS_URI"] = config.tos_uri
|
||||
app.config["PRIVACY_URI"] = config.privacy_uri
|
||||
app.config["ABUSE_EMAIL"] = config.abuse_email
|
||||
app.config["SECURITY_EMAIL"] = config.security_email
|
||||
|
||||
app.context_processor(proc)
|
||||
app.register_error_handler(
|
||||
|
||||
@@ -77,7 +77,7 @@ class EditUserForm(BaseForm):
|
||||
_l("Access Level"),
|
||||
choices=[
|
||||
("prosody:restricted", _("Limited")),
|
||||
("prosody:user", _l("Normal user")),
|
||||
("prosody:registered", _l("Normal user")),
|
||||
("prosody:admin", _l("Administrator")),
|
||||
],
|
||||
)
|
||||
@@ -86,6 +86,14 @@ class EditUserForm(BaseForm):
|
||||
_l("Update user"),
|
||||
)
|
||||
|
||||
action_restore = wtforms.SubmitField(
|
||||
_l("Restore account"),
|
||||
)
|
||||
|
||||
action_enable = wtforms.SubmitField(
|
||||
_l("Unlock account"),
|
||||
)
|
||||
|
||||
action_create_reset = wtforms.SubmitField(
|
||||
_l("Create password reset link"),
|
||||
)
|
||||
@@ -112,6 +120,32 @@ async def edit_user(localpart: str) -> typing.Union[werkzeug.Response, str]:
|
||||
".user_password_reset_link",
|
||||
id_=reset_link.id_,
|
||||
))
|
||||
elif form.action_restore.data or form.action_enable.data:
|
||||
await client.enable_user_account(localpart)
|
||||
try:
|
||||
if form.action_restore.data:
|
||||
await flash(
|
||||
_("User account restored"),
|
||||
"success",
|
||||
)
|
||||
else:
|
||||
await flash(
|
||||
_("User account unlocked"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".users"))
|
||||
except aiohttp.ClientResponseError:
|
||||
if form.action_restore.data:
|
||||
await flash(
|
||||
_("Could not restore user account"),
|
||||
"alert",
|
||||
)
|
||||
else:
|
||||
await flash(
|
||||
_("Could not unlock user account"),
|
||||
"alert",
|
||||
)
|
||||
return redirect(url_for(".edit_user", localpart=localpart))
|
||||
|
||||
await client.update_user(
|
||||
localpart,
|
||||
@@ -123,7 +157,7 @@ async def edit_user(localpart: str) -> typing.Union[werkzeug.Response, str]:
|
||||
_("User information updated."),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".edit_user", localpart=localpart))
|
||||
return redirect(url_for(".users"))
|
||||
|
||||
elif request.method == "GET":
|
||||
form.localpart.data = target_user_info.localpart
|
||||
@@ -131,7 +165,7 @@ async def edit_user(localpart: str) -> typing.Union[werkzeug.Response, str]:
|
||||
if target_user_info.roles:
|
||||
form.role.data = target_user_info.roles[0]
|
||||
else:
|
||||
form.role.data = "prosody:user"
|
||||
form.role.data = "prosody:registered"
|
||||
|
||||
return await render_template(
|
||||
"admin_edit_user.html",
|
||||
@@ -452,16 +486,14 @@ class EditCircleForm(BaseForm):
|
||||
_l("Update circle")
|
||||
)
|
||||
|
||||
action_delete = wtforms.SubmitField(
|
||||
_l("Delete circle permanently")
|
||||
)
|
||||
|
||||
action_remove_user = wtforms.StringField()
|
||||
|
||||
action_add_user = wtforms.SubmitField(
|
||||
_l("Add user")
|
||||
)
|
||||
|
||||
action_remove_group_chat = wtforms.StringField()
|
||||
|
||||
|
||||
@bp.route("/circle/<id_>", methods=["GET", "POST"])
|
||||
@client.require_admin_session()
|
||||
@@ -515,13 +547,6 @@ async def edit_circle(id_: str) -> typing.Union[str, werkzeug.Response]:
|
||||
_("Circle data updated"),
|
||||
"success",
|
||||
)
|
||||
elif form.action_delete.data:
|
||||
await client.delete_group(id_)
|
||||
await flash(
|
||||
_("Circle deleted"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".circles"))
|
||||
elif form.action_add_user.data:
|
||||
if form.user_to_add.data in valid_users:
|
||||
await client.add_group_member(
|
||||
@@ -541,6 +566,15 @@ async def edit_circle(id_: str) -> typing.Union[str, werkzeug.Response]:
|
||||
_("User removed from circle"),
|
||||
"success",
|
||||
)
|
||||
elif form.action_remove_group_chat.data:
|
||||
await client.remove_group_chat(
|
||||
id_,
|
||||
form.action_remove_group_chat.data,
|
||||
)
|
||||
await flash(
|
||||
_("Chat removed from circle"),
|
||||
"success",
|
||||
)
|
||||
|
||||
return redirect(url_for(".edit_circle", id_=id_))
|
||||
|
||||
@@ -548,11 +582,103 @@ async def edit_circle(id_: str) -> typing.Union[str, werkzeug.Response]:
|
||||
"admin_edit_circle.html",
|
||||
target_circle=circle,
|
||||
form=form,
|
||||
circle_chats=circle.chats,
|
||||
circle_members=circle_members,
|
||||
invite_form=invite_form,
|
||||
)
|
||||
|
||||
|
||||
class DeleteCircleForm(BaseForm):
|
||||
action_delete = wtforms.SubmitField(
|
||||
_l("Delete circle permanently")
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/circle/<id_>/delete", methods=["GET", "POST"])
|
||||
@client.require_admin_session()
|
||||
async def delete_circle(id_: str) -> typing.Union[str, werkzeug.Response]:
|
||||
async with client.authenticated_session() as session:
|
||||
try:
|
||||
circle = await client.get_group_by_id(
|
||||
id_,
|
||||
session=session,
|
||||
)
|
||||
except aiohttp.ClientResponseError as exc:
|
||||
if exc.status == 404:
|
||||
await flash(
|
||||
_("No such circle exists"),
|
||||
"alert",
|
||||
)
|
||||
return redirect(url_for(".circles"))
|
||||
raise
|
||||
|
||||
form = DeleteCircleForm()
|
||||
if form.validate_on_submit():
|
||||
if form.action_delete.data:
|
||||
await client.delete_group(id_)
|
||||
await flash(
|
||||
_("Circle deleted"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".circles"))
|
||||
|
||||
return await render_template(
|
||||
"admin_delete_circle.html",
|
||||
target_circle=circle,
|
||||
form=form,
|
||||
)
|
||||
|
||||
|
||||
class AddCircleChatForm(BaseForm):
|
||||
name = wtforms.StringField(
|
||||
_l("Group chat name"),
|
||||
validators=[wtforms.validators.InputRequired()],
|
||||
)
|
||||
|
||||
action_save = wtforms.SubmitField(
|
||||
_l("Create group chat")
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/circle/<id_>/add_chat", methods=["GET", "POST"])
|
||||
@client.require_admin_session()
|
||||
async def edit_circle_add_chat(
|
||||
id_: str
|
||||
) -> typing.Union[str, werkzeug.Response]:
|
||||
async with client.authenticated_session() as session:
|
||||
try:
|
||||
circle = await client.get_group_by_id(
|
||||
id_,
|
||||
session=session,
|
||||
)
|
||||
except aiohttp.ClientResponseError as exc:
|
||||
if exc.status == 404:
|
||||
await flash(
|
||||
_("No such circle exists"),
|
||||
"alert",
|
||||
)
|
||||
return redirect(url_for(".circles"))
|
||||
raise
|
||||
|
||||
form = AddCircleChatForm()
|
||||
|
||||
if form.validate_on_submit():
|
||||
if form.action_save.data:
|
||||
await client.add_group_chat(id_, form.name.data)
|
||||
await flash(
|
||||
_("New group chat added to circle"),
|
||||
"success",
|
||||
)
|
||||
|
||||
return redirect(url_for(".edit_circle", id_=id_))
|
||||
|
||||
return await render_template(
|
||||
"admin_create_circle_chat.html",
|
||||
target_circle=circle,
|
||||
group_chat_form=form,
|
||||
)
|
||||
|
||||
|
||||
_CPU_EPOCH = time.process_time()
|
||||
_MONOTONIC_EPOCH = time.monotonic()
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ import math
|
||||
import secrets
|
||||
import typing
|
||||
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
import quart.flask_patch # noqa:F401
|
||||
from quart import (
|
||||
current_app,
|
||||
@@ -13,7 +15,8 @@ from quart import (
|
||||
|
||||
import flask_babel
|
||||
import flask_wtf
|
||||
from flask_babel import _
|
||||
from flask_babel import lazy_gettext as _l
|
||||
import flask_babel as _
|
||||
|
||||
from . import prosodyclient
|
||||
|
||||
@@ -70,6 +73,43 @@ def format_bytes(n: float) -> str:
|
||||
return "{} {}".format(n, unit)
|
||||
|
||||
|
||||
def format_last_activity(timestamp: typing.Optional[int]) -> str:
|
||||
if timestamp is None:
|
||||
return _l("Never")
|
||||
|
||||
last_active = datetime.fromtimestamp(timestamp, tz=timezone.utc)
|
||||
# TODO: This 'now' should use the user's local time zone, but we
|
||||
# don't have that information. Thus 'today'/'yesterday' may be
|
||||
# slightly inaccurate, but compared to alternative solutions it
|
||||
# should hopefully be "good enough".
|
||||
now = datetime.now(tz=timezone.utc)
|
||||
time_ago = now - last_active
|
||||
|
||||
yesterday = now - timedelta(days=1)
|
||||
|
||||
if (
|
||||
last_active.year == now.year
|
||||
and last_active.month == now.month
|
||||
and last_active.day == now.day
|
||||
):
|
||||
return _l("Today")
|
||||
elif (
|
||||
last_active.year == yesterday.year
|
||||
and last_active.month == yesterday.month
|
||||
and last_active.day == yesterday.day
|
||||
):
|
||||
return _l("Yesterday")
|
||||
|
||||
return _.gettext(
|
||||
"%(time)s ago",
|
||||
time=flask_babel.format_timedelta(time_ago, granularity="day"),
|
||||
)
|
||||
|
||||
|
||||
def template_now() -> typing.Dict[str, typing.Any]:
|
||||
return dict(now=lambda: datetime.now(timezone.utc))
|
||||
|
||||
|
||||
def add_vary_language_header(resp: quart.Response) -> quart.Response:
|
||||
if getattr(g, "language_header_accessed", False):
|
||||
resp.vary.add("Accept-Language")
|
||||
@@ -86,6 +126,8 @@ def init_templating(app: quart.Quart) -> None:
|
||||
app.template_filter("format_bytes")(format_bytes)
|
||||
app.template_filter("flatten")(flatten)
|
||||
app.template_filter("circle_name")(circle_name)
|
||||
app.template_filter("format_last_activity")(format_last_activity)
|
||||
app.context_processor(template_now)
|
||||
app.after_request(add_vary_language_header)
|
||||
|
||||
|
||||
|
||||
@@ -173,6 +173,42 @@ async def avatar(from_: str, code: str) -> quart.Response:
|
||||
return response
|
||||
|
||||
|
||||
@bp.route("/terms")
|
||||
async def terms() -> Response:
|
||||
if not current_app.config["TOS_URI"]:
|
||||
return Response("", 404)
|
||||
|
||||
return Response("", status=303, headers={
|
||||
"Location": current_app.config["TOS_URI"],
|
||||
})
|
||||
|
||||
|
||||
@bp.route("/privacy")
|
||||
async def privacy() -> Response:
|
||||
if not current_app.config["PRIVACY_URI"]:
|
||||
return Response("", 404)
|
||||
|
||||
return Response("", status=303, headers={
|
||||
"Location": current_app.config["PRIVACY_URI"],
|
||||
})
|
||||
|
||||
|
||||
# This is linked from the iOS app and about page
|
||||
@bp.route("/policies/")
|
||||
async def policies() -> str:
|
||||
return await render_template(
|
||||
"policies.html",
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/.well-known/security.txt")
|
||||
async def securitytxt() -> Response:
|
||||
return Response(
|
||||
await render_template("security.txt"),
|
||||
mimetype="text/plain;charset=UTF-8",
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/_health")
|
||||
async def health() -> Response:
|
||||
return Response("STATUS OK", content_type="text/plain")
|
||||
|
||||
@@ -9,25 +9,27 @@ import types
|
||||
import typing
|
||||
import typing_extensions
|
||||
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
|
||||
import aiohttp
|
||||
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
from quart import (
|
||||
current_app, _app_ctx_stack, session as http_session, abort, redirect,
|
||||
current_app, session as http_session, abort, redirect,
|
||||
url_for,
|
||||
)
|
||||
import quart
|
||||
|
||||
from flask import g as _app_ctx_stack
|
||||
|
||||
import werkzeug.exceptions
|
||||
|
||||
from . import xmpputil
|
||||
from .xmpputil import split_jid
|
||||
|
||||
|
||||
SCOPE_DEFAULT = "prosody:user"
|
||||
SCOPE_DEFAULT = "prosody:registered"
|
||||
SCOPE_ADMIN = "prosody:admin"
|
||||
|
||||
|
||||
@@ -40,6 +42,52 @@ class TokenInfo:
|
||||
scopes: typing.Collection[str]
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class UserDeletionRequestInfo:
|
||||
deleted_at: datetime
|
||||
pending_until: datetime
|
||||
|
||||
@classmethod
|
||||
def from_api_response(
|
||||
cls,
|
||||
data: typing.Optional[typing.Mapping[str, typing.Any]],
|
||||
) -> typing.Optional["UserDeletionRequestInfo"]:
|
||||
if data is None:
|
||||
return None
|
||||
return cls(
|
||||
deleted_at=datetime.fromtimestamp(
|
||||
data["deleted_at"],
|
||||
tz=timezone.utc
|
||||
),
|
||||
pending_until=datetime.fromtimestamp(
|
||||
data["pending_until"],
|
||||
tz=timezone.utc
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class AvatarMetadata:
|
||||
bytes: int
|
||||
hash: str
|
||||
type: str
|
||||
width: typing.Optional[int]
|
||||
height: typing.Optional[int]
|
||||
|
||||
@classmethod
|
||||
def from_api_response(
|
||||
cls,
|
||||
data: typing.Mapping[str, typing.Any],
|
||||
) -> "AvatarMetadata":
|
||||
return cls(
|
||||
hash=data["hash"],
|
||||
bytes=data["bytes"],
|
||||
type=data["type"],
|
||||
width=data.get("width") or None,
|
||||
height=data.get("height") or None,
|
||||
)
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class AdminUserInfo:
|
||||
localpart: str
|
||||
@@ -47,6 +95,10 @@ class AdminUserInfo:
|
||||
email: typing.Optional[str]
|
||||
phone: typing.Optional[str]
|
||||
roles: typing.Optional[typing.List[str]]
|
||||
enabled: bool
|
||||
last_active: typing.Optional[int]
|
||||
deletion_request: typing.Optional[UserDeletionRequestInfo]
|
||||
avatar_info: typing.List[AvatarMetadata]
|
||||
|
||||
@property
|
||||
def has_admin_role(self) -> bool:
|
||||
@@ -73,6 +125,15 @@ class AdminUserInfo:
|
||||
email=data.get("email") or None,
|
||||
phone=data.get("phone") or None,
|
||||
roles=roles,
|
||||
enabled=data.get("enabled", True),
|
||||
last_active=data.get("last_active") or None,
|
||||
deletion_request=UserDeletionRequestInfo.from_api_response(
|
||||
data.get("deletion_request")
|
||||
),
|
||||
avatar_info=[
|
||||
AvatarMetadata.from_api_response(avatar_info)
|
||||
for avatar_info in data.get("avatar_info", [])
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
@@ -115,12 +176,30 @@ class AdminInviteInfo:
|
||||
)
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class AdminGroupChatInfo:
|
||||
id_: str
|
||||
jid: str
|
||||
name: str
|
||||
|
||||
@classmethod
|
||||
def from_api_response(
|
||||
cls,
|
||||
data: typing.Mapping[str, typing.Any],
|
||||
) -> "AdminGroupChatInfo":
|
||||
return cls(
|
||||
id_=data["id"],
|
||||
jid=data["jid"],
|
||||
name=data["name"],
|
||||
)
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class AdminGroupInfo:
|
||||
id_: str
|
||||
name: str
|
||||
muc_jid: typing.Optional[str]
|
||||
members: typing.Collection[str]
|
||||
chats: typing.Collection[AdminGroupChatInfo]
|
||||
|
||||
@classmethod
|
||||
def from_api_response(
|
||||
@@ -130,8 +209,11 @@ class AdminGroupInfo:
|
||||
return cls(
|
||||
id_=data["id"],
|
||||
name=data["name"],
|
||||
muc_jid=data.get("muc_jid") or None,
|
||||
members=data.get("members", []),
|
||||
chats=[
|
||||
AdminGroupChatInfo.from_api_response(x)
|
||||
for x in data.get("chats", [])
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@@ -166,7 +248,7 @@ class HTTPSessionManager:
|
||||
})
|
||||
|
||||
async def teardown(self, exc: typing.Optional[BaseException]) -> None:
|
||||
app_ctx = _app_ctx_stack.top
|
||||
app_ctx = _app_ctx_stack
|
||||
try:
|
||||
session = getattr(app_ctx, self._app_context_attribute)
|
||||
except AttributeError:
|
||||
@@ -183,7 +265,7 @@ class HTTPSessionManager:
|
||||
await session.__aexit__(exc_type, exc, traceback)
|
||||
|
||||
async def __aenter__(self) -> aiohttp.ClientSession:
|
||||
app_ctx = _app_ctx_stack.top
|
||||
app_ctx = _app_ctx_stack
|
||||
try:
|
||||
return getattr(app_ctx, self._app_context_attribute)
|
||||
except AttributeError:
|
||||
@@ -902,6 +984,36 @@ class ProsodyClient:
|
||||
) as resp:
|
||||
self._raise_error_from_response(resp)
|
||||
|
||||
@autosession
|
||||
async def enable_user_account(
|
||||
self,
|
||||
localpart: str,
|
||||
*,
|
||||
session: aiohttp.ClientSession,
|
||||
) -> None:
|
||||
async with session.patch(
|
||||
self._admin_v1_endpoint("/users/{}".format(localpart)),
|
||||
json={
|
||||
"enabled": True,
|
||||
},
|
||||
) as resp:
|
||||
self._raise_error_from_response(resp)
|
||||
|
||||
@autosession
|
||||
async def disable_user_account(
|
||||
self,
|
||||
localpart: str,
|
||||
*,
|
||||
session: aiohttp.ClientSession,
|
||||
) -> None:
|
||||
async with session.patch(
|
||||
self._admin_v1_endpoint("/users/{}".format(localpart)),
|
||||
json={
|
||||
"enabled": False,
|
||||
},
|
||||
) as resp:
|
||||
self._raise_error_from_response(resp)
|
||||
|
||||
@autosession
|
||||
async def get_user_debug_info(
|
||||
self,
|
||||
@@ -1030,7 +1142,7 @@ class ProsodyClient:
|
||||
self,
|
||||
name: str,
|
||||
*,
|
||||
create_muc: bool = True,
|
||||
create_muc: bool = False,
|
||||
session: aiohttp.ClientSession,
|
||||
) -> AdminGroupInfo:
|
||||
payload = {
|
||||
@@ -1105,6 +1217,27 @@ class ProsodyClient:
|
||||
) as resp:
|
||||
self._raise_error_from_response(resp)
|
||||
|
||||
@autosession
|
||||
async def add_group_chat(
|
||||
self,
|
||||
id_: str,
|
||||
name: str,
|
||||
*,
|
||||
session: aiohttp.ClientSession,
|
||||
) -> None:
|
||||
|
||||
payload: typing.Dict[str, typing.Any] = {
|
||||
"name": name,
|
||||
}
|
||||
|
||||
async with session.post(
|
||||
self._admin_v1_endpoint(
|
||||
"/groups/{}/chats".format(id_)
|
||||
),
|
||||
json=payload,
|
||||
) as resp:
|
||||
self._raise_error_from_response(resp)
|
||||
|
||||
@autosession
|
||||
async def remove_group_member(
|
||||
self,
|
||||
@@ -1120,6 +1253,21 @@ class ProsodyClient:
|
||||
) as resp:
|
||||
self._raise_error_from_response(resp)
|
||||
|
||||
@autosession
|
||||
async def remove_group_chat(
|
||||
self,
|
||||
group_id: str,
|
||||
chat_id: str,
|
||||
*,
|
||||
session: aiohttp.ClientSession,
|
||||
) -> None:
|
||||
async with session.delete(
|
||||
self._admin_v1_endpoint(
|
||||
"/groups/{}/chats/{}".format(group_id, chat_id)
|
||||
),
|
||||
) as resp:
|
||||
self._raise_error_from_response(resp)
|
||||
|
||||
@autosession
|
||||
async def delete_group(
|
||||
self,
|
||||
@@ -1160,7 +1308,6 @@ class ProsodyClient:
|
||||
self._raise_error_from_response(resp)
|
||||
return True
|
||||
|
||||
@autosession
|
||||
async def revoke_token(
|
||||
self,
|
||||
*,
|
||||
@@ -1174,7 +1321,8 @@ class ProsodyClient:
|
||||
|
||||
async def logout(self) -> None:
|
||||
try:
|
||||
await self.revoke_token()
|
||||
async with self._plain_session as session:
|
||||
await self.revoke_token(session=session)
|
||||
except aiohttp.ClientError:
|
||||
self.logger.warn("failed to revoke token!",
|
||||
exc_info=True)
|
||||
|
||||
@@ -275,22 +275,22 @@ div.form.layout-expanded {
|
||||
}
|
||||
|
||||
@each $type in $text-entry-inputs {
|
||||
input[type=$type] {
|
||||
input[type=#{$type}] {
|
||||
width: 100%;
|
||||
border: none;
|
||||
border-bottom: $w-s4 solid $primary-500;
|
||||
margin-bottom: -$w-s4;
|
||||
}
|
||||
|
||||
input[type=$type].has-error {
|
||||
input[type=#{$type}].has-error {
|
||||
border-right: $w-s4 solid $alert-500;
|
||||
}
|
||||
|
||||
input[type=$type]:hover {
|
||||
input[type=#{$type}]:hover {
|
||||
border-bottom-color: $primary-700;
|
||||
}
|
||||
|
||||
input[type=$type]:focus {
|
||||
input[type=#{$type}]:focus {
|
||||
border-bottom-color: $primary-800;
|
||||
}
|
||||
}
|
||||
@@ -646,69 +646,6 @@ input[type="submit"], button, .button {
|
||||
|
||||
|
||||
|
||||
/* button, .button {
|
||||
margin: 0 $w-s2;
|
||||
}
|
||||
|
||||
button.lv-primary, .button.lv-primary {
|
||||
background-color: $gray-500;
|
||||
color: $gray-900;
|
||||
border-radius: $w-s4;
|
||||
border: $w-s4 solid $gray-400;
|
||||
|
||||
@each $type, $values in $colours {
|
||||
&.c-#{$type} {
|
||||
border-color: nth($values, 4);
|
||||
background-color: nth($values, 5);
|
||||
color: nth($values, 9);
|
||||
}
|
||||
|
||||
&.c-#{$type}:hover {
|
||||
background-color: nth($values, 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
button.lv-secondary, .button.lv-secondary {
|
||||
background-color: $gray-700;
|
||||
color: $gray-100;
|
||||
border-radius: $w-s4;
|
||||
|
||||
@each $type, $values in $colours {
|
||||
&.c-#{$type} {
|
||||
background-color: nth($values, 7);
|
||||
color: nth($values, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
button.lv-tertiary, .button.lv-tertiary {
|
||||
background-color: inherit;
|
||||
color: $gray-300;
|
||||
border-radius: $w-s4;
|
||||
text-decoration: underline;
|
||||
|
||||
@each $type, $values in $colours {
|
||||
&.c-#{$type} {
|
||||
color: nth($values, 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
button.lv-secondary.c-#{$type}, .button.lv-secondary.c-#{$type} {
|
||||
background-color: nth($values, 7);
|
||||
color: nth($values, 1);
|
||||
}
|
||||
|
||||
button.lv-tertiary.c-#{$type}, .button.lv-tertiary.c-#{$type} {
|
||||
color: nth($values, 3);
|
||||
text-decoration: underline;
|
||||
background-color: transparent;
|
||||
}
|
||||
}*/
|
||||
|
||||
/* boxes */
|
||||
|
||||
.box {
|
||||
@@ -771,8 +708,7 @@ button.lv-tertiary, .button.lv-tertiary {
|
||||
height: 1.5em;
|
||||
vertical-align: middle;
|
||||
background-size: cover;
|
||||
box-shadow: inset 0px 0px 0px 2px rgba(0, 0, 0, 0.2);
|
||||
border-radius: $w-s4;
|
||||
border-radius: 10%;
|
||||
|
||||
margin: 0 0.25em;
|
||||
|
||||
@@ -1121,7 +1057,7 @@ pre.guru-meditation {
|
||||
}
|
||||
|
||||
@each $type in $text-entry-inputs {
|
||||
input[type=$type] {
|
||||
input[type=#{$type}] {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
@@ -1131,6 +1067,10 @@ pre.guru-meditation {
|
||||
}
|
||||
}
|
||||
|
||||
label, legend {
|
||||
color: $gray-800 !important;
|
||||
}
|
||||
|
||||
.box {
|
||||
background-color: black;
|
||||
border-color: $gray-800;
|
||||
@@ -1265,6 +1205,13 @@ pre.guru-meditation {
|
||||
p.form-desc.weak, p.field-desc.weak {
|
||||
color: $gray-700;
|
||||
}
|
||||
|
||||
.user-badge-icon {
|
||||
color: $gray-900 !important;
|
||||
background-color: $gray-100 !important;
|
||||
border-color: $gray-300 !important;
|
||||
box-shadow: black 0 0 2px !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* tooltip magic */
|
||||
@@ -1315,3 +1262,46 @@ pre.guru-meditation {
|
||||
.with-tooltip:hover:before, .with-tooltip:hover:after {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.username-with-avatar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.avatar-container {
|
||||
position: relative;
|
||||
|
||||
.avatar {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.user-badge-icon {
|
||||
position: absolute;
|
||||
bottom: -10px;
|
||||
right: 0px;
|
||||
background: white;
|
||||
border-radius: 50%;
|
||||
width: 1.2em;
|
||||
height: 1.2em;
|
||||
border-color: $gray-500;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-shadow: $gray-500 0px 0px 2px;
|
||||
|
||||
line-height: 1;
|
||||
.icon {
|
||||
/* vertical-align: text-bottom; */
|
||||
padding: 0.1em;
|
||||
}
|
||||
}
|
||||
|
||||
.user-info-container {
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -42,6 +42,16 @@ licensed under the terms of the Apache 2.0 License -->
|
||||
<g fill="none"><path d="M0 0h24v24H0V0z" /><path d="M0 0h24v24H0V0z" opacity=".87" /></g>
|
||||
<path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM9 8V6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9z" />
|
||||
</symbol>
|
||||
<!-- from: action/lock_open/materialiconsround/24px.svg -->
|
||||
<symbol id="icon-lock_open" viewBox="0 0 24 24">
|
||||
<path d="M0 0h24v24H0V0z" fill="none" />
|
||||
<path d="M12 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6-5h-1V6c0-2.76-2.24-5-5-5-2.28 0-4.27 1.54-4.84 3.75-.14.54.18 1.08.72 1.22.53.14 1.08-.18 1.22-.72C9.44 3.93 10.63 3 12 3c1.65 0 3 1.35 3 3v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 11c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-8c0-.55.45-1 1-1h10c.55 0 1 .45 1 1v8z" />
|
||||
</symbol>
|
||||
<!-- from: action/restore_from_trash/materialiconsround/24px.svg -->
|
||||
<symbol id="icon-restore_from_trash" viewBox="0 0 24 24">
|
||||
<path d="M0 0h24v24H0V0z" fill="none" />
|
||||
<path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v10zm5.65-8.65c.2-.2.51-.2.71 0L16 14h-2v4h-4v-4H8l3.65-3.65zM15.5 4l-.71-.71c-.18-.18-.44-.29-.7-.29H9.91c-.26 0-.52.11-.7.29L8.5 4H6c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1h-2.5z" />
|
||||
</symbol>
|
||||
<!-- from: communication/import_export/materialiconsround/24px.svg -->
|
||||
<symbol id="icon-import_export" viewBox="0 0 24 24">
|
||||
<path d="M0 0h24v24H0V0z" fill="none" />
|
||||
|
||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
@@ -6,16 +6,20 @@
|
||||
{% block body %}
|
||||
<main>
|
||||
<div class="box el-2">
|
||||
<h1>{% trans %}About Snikket{% endtrans %}</h1>
|
||||
<p>{% trans snikket_url="https://snikket.org" %}To learn more about Snikket, visit the <a href="{{ snikket_url}}">Snikket website</a>.{% endtrans %}</p>
|
||||
<h2>{% trans %}About this Service{% endtrans %}</h2>
|
||||
<p>{% trans site_name=config["SITE_NAME"] %}This is the Snikket service <em>{{ site_name }}</em>.{% endtrans %}</p>
|
||||
<p>{% trans site_name=config["SITE_NAME"] %}This is the Snikket service <em>{{ site_name }}</em>, running open-source software from the Snikket project.{% endtrans %}</p>
|
||||
<p>{% trans snikket_url="https://snikket.org" %}To learn more about Snikket, visit the <a href="{{ snikket_url}}">Snikket website</a>.{% endtrans %}</p>
|
||||
|
||||
<p><a href="/policies/">{% trans %}View service policies{% endtrans %}</a>
|
||||
|
||||
<h3>{% trans %}Licenses{% endtrans %}</h3>
|
||||
<p>{% trans agpl_url="https://www.gnu.org/licenses/agpl.html" %}The web portal software is licensed under the terms of the <a href="{{ agpl_url }}">Affero GNU General Public License, version 3.0 or later</a>. The full terms of the license can be reviewed using the aforementioned link.{% endtrans %}</p>
|
||||
<p>{% trans source_url="https://github.com/snikket-im/snikket-web-portal/" %}The source code of the web portal can be downloaded and viewed in <a href="{{ source_url }}">its GitHub repository</a>.{% endtrans %}</p>
|
||||
<p>{% trans source_url="https://material.io/resources/icons/", apache20_url="https://www.apache.org/licenses/LICENSE-2.0.txt" %}The icons used in the web portal are <a href="{{ source_url }}">Google’s Material Icons</a>, made available by Google under the terms of the <a href="{{ apache20_url }}">Apache 2.0 License</a>.{% endtrans %}</p>
|
||||
|
||||
<h3>{% trans %}Trademarks{% endtrans %}</h3>
|
||||
<p>{% trans trademarks_url="https://snikket.org/about/trademarks/" %}“Snikket” and the parrot logo are trademarks of Snikket Community Interest Company. For more information about the trademarks, visit the <a href="{{ trademarks_url }}">Snikket Trademarks information page</a>.{% endtrans %}
|
||||
|
||||
<h3>{% trans %}Software Versions{% endtrans %}</h3>
|
||||
<pre>Domain: {{ config["SNIKKET_DOMAIN"] }}
|
||||
Web Portal{% if version %} ({{ version }}){% endif %}
|
||||
@@ -27,6 +31,7 @@ Web Portal{% if version %} ({{ version }}){% endif %}
|
||||
{% for name, version in extra_versions.items() %}
|
||||
{{ name }} ({{ version }}){% endfor %}
|
||||
{%- endif -%}</pre>
|
||||
|
||||
<p>
|
||||
{%- call standard_button("back", url_for("index"), class="primary") -%}
|
||||
{% trans %}Back to the main page{% endtrans %}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{% block content %}
|
||||
<h1>{% trans %}Manage circles{% endtrans %}</h1>
|
||||
<p>{% trans %}<em>Circles</em> aim to help people who are in the same social circle find each other on your service.{% endtrans %}</p>
|
||||
<p>{% trans %}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 included.{% endtrans %}</p>
|
||||
<p>{% trans %}Users who are in the same circle will see each other in their contact list. In addition, each circle may have group chats where the circle members are included.{% endtrans %}</p>
|
||||
{%- if circles -%}
|
||||
<form method="POST" action="{{ url_for(".create_invite") }}">
|
||||
{{- invite_form.csrf_token -}}
|
||||
|
||||
5
snikket_web/templates/admin_create_circle_chat.html
Normal file
5
snikket_web/templates/admin_create_circle_chat.html
Normal file
@@ -0,0 +1,5 @@
|
||||
{% extends "admin_app.html" %}
|
||||
{% block content %}
|
||||
<h1>{{ target_circle.name }}</h1>
|
||||
{%- include "admin_create_circle_group_chat_form.html" -%}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,15 @@
|
||||
{% from "library.j2" import form_button, render_errors %}
|
||||
<form method="POST" action="{{ url_for(".edit_circle_add_chat", id_=target_circle.id_) }}">
|
||||
{{- group_chat_form.csrf_token -}}
|
||||
<div class="form layout-expanded">
|
||||
<h2 class="form-title">{% trans %}Create new circle group chat{% endtrans %}</h2>
|
||||
<p class="form-descr weak">{% trans %}Add a chat to your circle so its members can hold group discussions.{% endtrans %}</p>
|
||||
<p class="form-descr weak"><strong>{% trans %}Tip:{% endtrans %}</strong> {% trans %}This is only for creating group chats that automatically include <em>all</em> members of the circle. If you want a normal group chat, create it in the Snikket app instead.{% endtrans %}</p>
|
||||
<div class="f-ebox">
|
||||
{{ group_chat_form.name.label }}
|
||||
{{ group_chat_form.name }}
|
||||
</div>
|
||||
<div class="f-bbox">
|
||||
{%- call form_button("add", group_chat_form.action_save, class="primary") %}{% endcall -%}
|
||||
</div>
|
||||
</div></form>
|
||||
21
snikket_web/templates/admin_delete_circle.html
Normal file
21
snikket_web/templates/admin_delete_circle.html
Normal file
@@ -0,0 +1,21 @@
|
||||
{% extends "admin_app.html" %}
|
||||
{% from "library.j2" import box, form_button, standard_button %}
|
||||
{% block content %}
|
||||
<h1>{% trans circle_name=target_circle.name %}Delete circle {{ circle_name }}{% endtrans %}</h1>
|
||||
<div class="form layout-expanded"><form method="POST">
|
||||
<h2 class="form-title">{% trans %}Delete circle{% endtrans %}</h2>
|
||||
{{ form.csrf_token }}
|
||||
<p class="form-descr">{% trans %}Are you sure you want to delete the following circle?{% endtrans %}</p>
|
||||
<dl>
|
||||
<dt>{% trans %}Name{% endtrans %}</dt>
|
||||
<dd>{{ target_circle.name }}</dd>
|
||||
</dl>
|
||||
{% call box("alert", _("Danger")) %}
|
||||
<p>{% trans %}The circle and the corresponding chat will be deleted, permanently and immediately upon pushing the below button. <strong>There is no way back!</strong>{% endtrans %}</p>
|
||||
{% endcall %}
|
||||
<div class="f-bbox">
|
||||
{%- call standard_button("back", url_for(".edit_circle", id_=target_circle.id_), class="tertiary") %}{% trans %}Back{% endtrans %}{% endcall -%}
|
||||
{%- call form_button("delete", form.action_delete, class="primary danger") %}{% endcall -%}
|
||||
</div>
|
||||
</form></div>
|
||||
{% endblock %}
|
||||
@@ -13,13 +13,6 @@
|
||||
<div class="box hint form layout-expanded">
|
||||
<header>{% trans %}This is your main circle{% endtrans %}</header>
|
||||
<p>{% trans %}This circle is managed automatically and cannot be removed or renamed.{% endtrans %}</p>
|
||||
{%- if target_circle.muc_jid -%}
|
||||
<div><label for="circle-muc-jid">{% trans %}Group chat address{% endtrans %}</label></div>
|
||||
<div><input type="text" readonly="readonly" id="circle-muc-jid" value="{{ target_circle.muc_jid }}"></div>
|
||||
{%- call clipboard_button(target_circle.muc_jid, show_label=True) -%}
|
||||
{%- trans -%}Copy address{%- endtrans -%}
|
||||
{%- endcall -%}
|
||||
{%- endif -%}
|
||||
</div>
|
||||
{%- else -%}
|
||||
<div class="form layout-expanded">
|
||||
@@ -28,17 +21,6 @@
|
||||
{{ form.name.label }}
|
||||
{{ form.name }}
|
||||
</div>
|
||||
<div class="f-ebox">
|
||||
{%- if target_circle.muc_jid -%}
|
||||
<label for="circle-muc-jid">{% trans %}Group chat address{% endtrans %}</label>
|
||||
<input type="text" readonly="readonly" id="circle-muc-jid" value="{{ target_circle.muc_jid }}">
|
||||
{%- call clipboard_button(target_circle.muc_jid, show_label=True) -%}
|
||||
{%- trans -%}Copy address{%- endtrans -%}
|
||||
{%- endcall -%}
|
||||
{%- else -%}
|
||||
<p>{% trans %}This circle has no group chat associated.{% endtrans %}<p>
|
||||
{%- endif -%}
|
||||
</div>
|
||||
<div class="f-bbox">
|
||||
{%- call standard_button("back", url_for(".circles"), class="tertiary") -%}
|
||||
{% trans %}Return to circle list{% endtrans %}
|
||||
@@ -48,11 +30,43 @@
|
||||
<h3 class="form-title">{% trans %}Delete circle{% endtrans %}</h3>
|
||||
<p class="form-desc">{% trans %}Deleting a circle does not delete any users in the circle.{% endtrans %}</p>
|
||||
<div class="f-bbox">
|
||||
{%- call form_button("delete", form.action_delete, class="secondary danger") %}{% endcall -%}
|
||||
{%- call standard_button("delete", url_for(".delete_circle", id_=target_circle.id_), class="secondary danger") %}{% trans %}Delete circle{% endtrans %}{% endcall -%}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif -%}
|
||||
|
||||
<h2 id="chats">{% trans %}Group chats{% endtrans %}</h2>
|
||||
<p>{% trans %}These group chats will be available to all members of the circle.{% endtrans %}</p>
|
||||
|
||||
{%- if circle_chats -%}
|
||||
<div class="el-2 elevated"><table>
|
||||
<thead>
|
||||
<th>{% trans %}Name{% endtrans %}</th>
|
||||
<th>{% trans %}Actions{% endtrans %}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{%- for chat in circle_chats -%}
|
||||
<tr>
|
||||
<td class="collapsible">{% call value_or_hint(chat.name) %}{% endcall %}</td>
|
||||
<td class="nowrap">
|
||||
{%- call custom_form_button("delete", form.action_remove_group_chat.name, chat.id_, class="primary danger", slim=True) -%}
|
||||
{% trans name=chat.name %}Delete group chat '{{ name }}'{% endtrans %}
|
||||
{%- endcall -%}
|
||||
</td>
|
||||
</tr>
|
||||
{%- endfor -%}
|
||||
</tbody>
|
||||
</table></div>
|
||||
{%- else -%}
|
||||
<p>{% trans %}This circle currently has no group chats.{% endtrans %}</p>
|
||||
{%- endif -%}
|
||||
{%- call standard_button("add", url_for(".edit_circle_add_chat", id_=target_circle.id_), class="secondary") -%}
|
||||
{% trans %}Add group chat{% endtrans %}
|
||||
{%- endcall -%}
|
||||
|
||||
<h2 id="members">{% trans %}Circle members{% endtrans %}</h2>
|
||||
<p>{% trans %}All members of the circle will see each other in their contact list.{% endtrans %}</p>
|
||||
|
||||
{%- if circle_members -%}
|
||||
<div class="el-2 elevated"><table>
|
||||
<thead>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{% macro access_level_description(role, caller=None) %}
|
||||
{%- if role == "prosody:restricted" -%}
|
||||
{% trans %}Limited users can interact with users on the same Snikket service and be members of circles.{% endtrans %}
|
||||
{%- elif role == "prosody:user" -%}
|
||||
{%- elif role == "prosody:registered" -%}
|
||||
{% trans %}Like limited users and can also interact with users on other Snikket services.{% endtrans %}
|
||||
{%- elif role == "prosody:admin" -%}
|
||||
{% trans %}Like normal users and can access the admin panel in the web portal.{% endtrans %}
|
||||
@@ -19,12 +19,33 @@
|
||||
{% block content %}
|
||||
<h1>{% trans user_name=target_user.localpart %}Edit user {{ user_name }}{% endtrans %}</h1>
|
||||
<form method="POST">{{ form.csrf_token }}<div class="form layout-expanded">
|
||||
{% if target_user.deletion_request %}
|
||||
<div class="box alert">
|
||||
<header>{% trans %}This user account is pending deletion{% endtrans %}</header>
|
||||
<p>{% trans date=target_user.deletion_request.deleted_at | format_datetime %}The owner of the account sent a deletion request on {{ date }} using their app.{% endtrans %}
|
||||
<p>{% trans time=(target_user.deletion_request.pending_until - now())|format_timedelta %}The account has been locked, and will be automatically deleted permanently in {{ time }}.{% endtrans %}</p>
|
||||
|
||||
<p>{% trans %}If this was a mistake, you can cancel the deletion and restore the account.{% endtrans %}</p>
|
||||
|
||||
{%- call form_button("restore_from_trash", form.action_restore, class="secondary") %}{% endcall %}
|
||||
</div>
|
||||
{% elif not target_user.enabled %}
|
||||
<div class="box alert">
|
||||
<header>{% trans %}This user account is locked{% endtrans %}</header>
|
||||
<p>{% trans %}The user will not be able to log in to their account until it is unlocked again.{% endtrans %}</p>
|
||||
|
||||
{%- call form_button("lock_open", form.action_enable, class="secondary") %}{% endcall %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<h2 class="form-title">{% trans %}Edit user{% endtrans %}</h2>
|
||||
|
||||
<div class="f-ebox">
|
||||
{{ form.localpart.label }}
|
||||
{{ form.localpart(readonly="readonly") }}
|
||||
<p class="form-desc weak">{% trans %}The login name cannot be changed.{% endtrans %}</p>
|
||||
</div>
|
||||
|
||||
<div class="f-ebox">
|
||||
{{ form.display_name.label }}
|
||||
{{ form.display_name }}
|
||||
@@ -63,14 +84,14 @@
|
||||
{% trans %}If the user has lost their password, you can use the button below to create a special link which allows to change the password of the account, once.{% endtrans %}
|
||||
</p>
|
||||
<div class="f-bbox">
|
||||
{%- call form_button("passwd", form.action_create_reset, class="primary") -%}{%- endcall -%}
|
||||
{%- call form_button("passwd", form.action_create_reset, class="secondary") -%}{%- endcall -%}
|
||||
</div>
|
||||
<h2 class="form-title">{% trans %}Debug information{% endtrans %}</h2>
|
||||
<p class="form-desc">
|
||||
{% trans %}In some cases, extended information about the user account and the connected devices is necessary to troubleshoot issues. The button below reveals this (sensitive) information.{% endtrans %}
|
||||
</p>
|
||||
<div class="f-bbox">
|
||||
{%- call standard_button("bug_report", url_for(".debug_user", localpart=target_user.localpart), class="primary") -%}
|
||||
{%- call standard_button("bug_report", url_for(".debug_user", localpart=target_user.localpart), class="secondary") -%}
|
||||
{%- trans -%}Show debug information{%- endtrans -%}
|
||||
{%- endcall -%}
|
||||
</div>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{% extends "admin_app.html" %}
|
||||
{% from "library.j2" import action_button, icon, value_or_hint, custom_form_button %}
|
||||
{% from "library.j2" import action_button, avatar, icon, render_user, value_or_hint, custom_form_button with context %}
|
||||
{% block content %}
|
||||
<h1>{% trans %}Manage users{% endtrans %}</h1>
|
||||
<div class="elevated el-2"><table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans %}Login name{% endtrans %}</th>
|
||||
<th>{% trans %}Display name{% endtrans %}</th>
|
||||
<th>{% trans %}User{% endtrans %}</th>
|
||||
<th>{% trans %}Last active{% endtrans %}</th>
|
||||
<th>{% trans %}Actions{% endtrans %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -14,15 +14,15 @@
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td>
|
||||
{{- user.localpart -}}
|
||||
{%- if user.has_admin_role -%}
|
||||
<span class="with-tooltip above" data-tooltip="{% trans %}The user is an administrator.{% endtrans %}">{% call icon("admin") %}{% trans %} (Administrator){% endtrans %}{% endcall %}</span>
|
||||
{%- endif -%}
|
||||
{%- if user.has_restricted_role -%}
|
||||
<span class="with-tooltip above" data-tooltip="{% trans %}The user is restricted.{% endtrans %}">{% call icon("lock") %}{% trans %} (Restricted){% endtrans %}{% endcall %}</span>
|
||||
{%- endif -%}
|
||||
{%- call render_user(user) -%}{%- endcall -%}
|
||||
</td>
|
||||
<td>{% call value_or_hint(user.display_name) %}{% endcall %}</td>
|
||||
{% if user.enabled %}
|
||||
<td>{{ user.last_active | format_last_activity }}</td>
|
||||
{% elif user.deletion_request %}
|
||||
<td>{% trans %}Deleted{% endtrans %}</td>
|
||||
{% else %}
|
||||
<td>{% trans %}Locked{% endtrans %}</td>
|
||||
{% endif %}
|
||||
<td class="nowrap">
|
||||
{%- call action_button("edit", url_for(".edit_user", localpart=user.localpart), class="primary") -%}
|
||||
{% trans user_name=user.localpart %}Edit user {{ user_name }}{% endtrans %}
|
||||
|
||||
@@ -17,6 +17,13 @@
|
||||
{%- else -%}
|
||||
<p>{% trans site_name=config["SITE_NAME"] %}You have been invited to chat on {{ site_name }} using Snikket, a secure, privacy-friendly chat app.{% endtrans %}</p>
|
||||
{%- endif -%}
|
||||
|
||||
{%- if config["TOS_URI"] and config["PRIVACY_URI"] -%}
|
||||
<p>
|
||||
{% trans site_name=config["SITE_NAME"], tos_uri=config["TOS_URI"], privacy_uri=config["PRIVACY_URI"] %}By continuing, you agree to the <a href="{{tos_uri}}">Terms of Service</a> and <a href="{{privacy_uri}}">Privacy Policy</a>.{% endtrans %}
|
||||
</p>
|
||||
{%- endif -%}
|
||||
|
||||
<h2>{% trans %}Get started{% endtrans %}</h2>
|
||||
{%- if apple_store_url -%}
|
||||
<p>{% trans %}Install the Snikket App on your Android or iOS device.{% endtrans %}</p>
|
||||
|
||||
@@ -10,6 +10,29 @@
|
||||
{%- endif -%}
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro render_user(user, caller=None) -%}
|
||||
<div class="username-with-avatar">
|
||||
<div class="avatar-container">
|
||||
{%- call avatar(user.localpart+"@"+config["SNIKKET_DOMAIN"], user.avatar_info[0].hash if user.avatar_info | length > 0 else None ) %}{% endcall -%}
|
||||
{%- if user.has_admin_role -%}
|
||||
<div class="user-badge-icon">
|
||||
<span class="with-tooltip above" data-tooltip="{% trans %}The user is an administrator.{% endtrans %}">{% call icon("admin") %}{% trans %} (Administrator){% endtrans %}{% endcall %}</span>
|
||||
</div>
|
||||
{%- elif user.has_restricted_role -%}
|
||||
<div class="user-badge-icon">
|
||||
<span class="with-tooltip above" data-tooltip="{% trans %}The user is restricted.{% endtrans %}">{% call icon("lock") %}{% trans %} (Restricted){% endtrans %}{% endcall %}</span>
|
||||
</div>
|
||||
{%- endif -%}
|
||||
</div>
|
||||
<div class="user-info-container">
|
||||
<div class="user-localpart">{{- user.localpart -}}</div>
|
||||
{%- if user.display_name %}
|
||||
<div class="user-display-name">{{- user.display_name -}}</div>
|
||||
{%- endif %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endmacro -%}
|
||||
|
||||
{% macro showuri(uri, caller=None, id_=None) %}
|
||||
{%- if uri is none -%}
|
||||
<em>—</em>
|
||||
|
||||
39
snikket_web/templates/policies.html
Normal file
39
snikket_web/templates/policies.html
Normal file
@@ -0,0 +1,39 @@
|
||||
{% extends "base.html" %}
|
||||
{% from "library.j2" import standard_button %}
|
||||
{% block head_lead %}
|
||||
<title>{% trans %}Policies{% endtrans %} - {{ config["SITE_NAME"] }}</title>
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<main>
|
||||
<div class="box el-2">
|
||||
<h1>{{ config["SITE_NAME"] }}</h1>
|
||||
<h2>{% trans %}Policies{% endtrans %}</h2>
|
||||
|
||||
{% if config["TOS_URI"] or config["PRIVACY_URI"] -%}
|
||||
<p>{% trans %}Use of this service is subject to the following policies:{% endtrans %}</p>
|
||||
<ul>
|
||||
{%- if config["TOS_URI"] %}
|
||||
<li><a href="{{ config["TOS_URI"] }}">{% trans %}Terms of Service{% endtrans %}</a></li>
|
||||
{%- endif %}
|
||||
{%- if config["PRIVACY_URI"] %}
|
||||
<li><a href="{{ config["PRIVACY_URI"] }}">{% trans %}Privacy Policy{% endtrans %}</a></li>
|
||||
{%- endif %}
|
||||
</ul>
|
||||
{%- else -%}
|
||||
<p>{% trans %}Please contact the administrator of this instance if you have questions about policies.{% endtrans %}</p>
|
||||
{% endif -%}
|
||||
|
||||
<p>{% trans url="https://snikket.org/app/privacy/" %}Use of the Snikket apps is subject to the <a href="{{url}}">Snikket Apps Privacy Policy</a>.{% endtrans %}</p>
|
||||
|
||||
{%- if config["ABUSE_EMAIL"] %}
|
||||
<p>{% trans email=config["ABUSE_EMAIL"], domain=config["SNIKKET_DOMAIN"] %}To report policy violations or other abuse from this service, please send an email to {{email}}. Specify the domain name of this instance ({{domain}}) and include details of the incident(s).{% endtrans %}</p>
|
||||
{%- endif %}
|
||||
|
||||
<p>
|
||||
{%- call standard_button("back", url_for("index"), class="primary") -%}
|
||||
{% trans %}Back to the main page{% endtrans %}
|
||||
{%- endcall -%}
|
||||
</p>
|
||||
</div>
|
||||
</main>
|
||||
{% endblock %}
|
||||
16
snikket_web/templates/security.txt
Normal file
16
snikket_web/templates/security.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
# {{ config["SNIKKET_DOMAIN"] }} is running open-source software
|
||||
# from the Snikket project: https://snikket.org/
|
||||
|
||||
{% if config["SECURITY_EMAIL"] -%}
|
||||
# Security issues related to this service should be addressed to the
|
||||
# following security contact:
|
||||
Contact: mailto:{{ config["SECURITY_EMAIL"] }}
|
||||
{% else -%}
|
||||
# This service does not have a public security contact. You might find
|
||||
# more information about the service at the following link:
|
||||
Contact: https://{{ config["SNIKKET_DOMAIN"] }}/policies/
|
||||
{%- endif %}
|
||||
|
||||
# Please report software defects to the project developers, per the
|
||||
# instructions at the following link:
|
||||
Contact: https://snikket.org/security/
|
||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2022-05-30 14:01+0000\n"
|
||||
"Last-Translator: Daniel Holmgaard <fovatis@tutanota.com>\n"
|
||||
"Language-Team: Danish <http://i18n.sotecware.net/projects/snikket/web-portal/"
|
||||
@@ -145,6 +145,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Invitation tilbagekaldt"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Navn"
|
||||
|
||||
@@ -164,51 +165,51 @@ msgstr "Vælg bruger"
|
||||
msgid "Update circle"
|
||||
msgstr "Opdater cirkel"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Slet cirkel permanent"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Tilføj bruger"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
msgid "No such circle exists"
|
||||
msgstr "Denne cirkel findes ikke"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
msgid "Circle data updated"
|
||||
msgstr "Cirkel-data opdateret"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
msgid "Circle deleted"
|
||||
msgstr "Cirkel slettet"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
msgid "User added to circle"
|
||||
msgstr "Bruger tilføjet til cirkel"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr "Bruger fjernet fra cirkel"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Slet cirkel permanent"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
msgid "Circle deleted"
|
||||
msgstr "Cirkel slettet"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr "Meddelelsens indhold"
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr "Send kun til online brugere"
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr "Send til alle brugere"
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr "Send forhåndsvisning til dig selv"
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr "Bekendgørelse sendt!"
|
||||
|
||||
@@ -585,6 +586,53 @@ msgstr "Rå fejlretningsdump"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Kopier komplet output"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit circle %(circle_name)s"
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Rediger cirkel %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Slet cirkel"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Are you sure you want to delete the following user?"
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Er du sikker på, at du vil slette følgende bruger?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Fare"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
#, 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!</"
|
||||
#| "strong>"
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"Brugeren og deres data slettes uigenkaldeligt, permanent og straks efter "
|
||||
"tryk på nedenstående knap. <strong>Der er ingen vej tilbage!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Tilbage"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -599,10 +647,6 @@ msgstr "Slet bruger"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Er du sikker på, at du vil slette følgende bruger?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Fare"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -612,15 +656,6 @@ msgstr ""
|
||||
"Brugeren og deres data slettes uigenkaldeligt, permanent og straks efter "
|
||||
"tryk på nedenstående knap. <strong>Der er ingen vej tilbage!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Tilbage"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "Dette er din hovedcirkel"
|
||||
@@ -653,10 +688,6 @@ msgstr "Denne cirkel er ikke tilknyttet nogen gruppechat."
|
||||
msgid "Return to circle list"
|
||||
msgstr "Retur til cirkeliste"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Slet cirkel"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "Sletning af en cirkel vil ikke slette brugere i cirklen."
|
||||
|
||||
Binary file not shown.
@@ -6,9 +6,9 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SnikketWeb 0.1.0\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"PO-Revision-Date: 2022-01-18 14:59+0000\n"
|
||||
"Report-Msgid-Bugs-To: translations@snikket.org\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2023-04-01 11:13+0000\n"
|
||||
"Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
|
||||
"Language-Team: German <http://i18n.sotecware.net/projects/snikket/web-portal/"
|
||||
"de/>\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"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.8.1\n"
|
||||
"X-Generator: Weblate 4.14.1\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
|
||||
@@ -145,6 +145,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Einladung gelöscht"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
@@ -164,51 +165,51 @@ msgstr "Benutzer auswählen"
|
||||
msgid "Update circle"
|
||||
msgstr "Gemeinschaft ändern"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Gemeinschaft endgültig löschen"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Benutzer hinzufügen"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
msgid "No such circle exists"
|
||||
msgstr "Diese Gemeinschaft existiert nicht"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
msgid "Circle data updated"
|
||||
msgstr "Gemeinschaftsdaten aktualisiert"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
msgid "Circle deleted"
|
||||
msgstr "Gemeinschaft gelöscht"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
msgid "User added to circle"
|
||||
msgstr "Benutzer zur Gemeinschaft hinzugefügt"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr "Benutzer aus der Gemeinschaft entfernt"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Gemeinschaft endgültig löschen"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
msgid "Circle deleted"
|
||||
msgstr "Gemeinschaft gelöscht"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr "Nachrichteninhalt"
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr "Nur an verbundene Benutzer senden"
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr "An alle Benutzer senden"
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr "Vorschau an dich selbst senden"
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr "Ankündigung verschickt!"
|
||||
|
||||
@@ -585,6 +586,46 @@ msgstr "Rohe Debug-Ausgabe"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Komplette Ausgabe kopieren"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, python-format
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Gemeinschaft %(circle_name)s löschen"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Gemeinschaft löschen"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Bist du sicher dass du die folgende Gemeinschaft löschen willst?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Gefahr"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"Die Gemeinschaft und die zugehörigen Daten werden beim Betätigen des Buttons "
|
||||
"unwiderruflich, permanent und sofortig gelöscht. <strong>Es gibt keinen Weg "
|
||||
"zurück!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -599,10 +640,6 @@ msgstr "Benutzer löschen"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Bist du sicher dass du den folgenden Benutzer löschen willst?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Gefahr"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -613,15 +650,6 @@ msgstr ""
|
||||
"Buttons unwiderruflich, permanent und sofortig gelöscht. <strong>Es gibt "
|
||||
"keinen Weg zurück!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "Dies ist die Hauptgemeinschaft"
|
||||
@@ -656,10 +684,6 @@ msgstr "Diese Gemeinschaft hat keinen zugehörigen Gruppenchat."
|
||||
msgid "Return to circle list"
|
||||
msgstr "Zurück zur Gemeinschaftsliste"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Gemeinschaft löschen"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr ""
|
||||
|
||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2021-06-19 15:01+0000\n"
|
||||
"Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
|
||||
"Language-Team: English <https://i18n.sotecware.net/projects/snikket/web-"
|
||||
@@ -167,6 +167,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Invitation type"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
@@ -188,21 +189,17 @@ msgstr "Select user"
|
||||
msgid "Update circle"
|
||||
msgstr "Update circle"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Delete circle permanently"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Add user"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
#, fuzzy
|
||||
#| msgid "No circles"
|
||||
msgid "No such circle exists"
|
||||
msgstr "No circles"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle data updated"
|
||||
@@ -210,39 +207,43 @@ msgstr "Circle name"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
#, fuzzy
|
||||
#| msgid "deleted"
|
||||
msgid "Circle deleted"
|
||||
msgstr "deleted"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
#, fuzzy
|
||||
#| msgid "Invite to circle"
|
||||
msgid "User added to circle"
|
||||
msgstr "Invite to circle"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
#, fuzzy
|
||||
#| msgid "Remove user %(username)s from circle"
|
||||
msgid "User removed from circle"
|
||||
msgstr "Remove user %(username)s from circle"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Delete circle permanently"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
#, fuzzy
|
||||
#| msgid "deleted"
|
||||
msgid "Circle deleted"
|
||||
msgstr "deleted"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr ""
|
||||
|
||||
@@ -625,6 +626,54 @@ msgstr "Raw debug dump"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Copy complete output"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit circle %(circle_name)s"
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Edit circle %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Delete circle"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Are you sure you want to delete the following user?"
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Are you sure you want to delete the following user?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Danger"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
#, 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!</"
|
||||
#| "strong>"
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Back"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -639,10 +688,6 @@ msgstr "Delete user"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Are you sure you want to delete the following user?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Danger"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -653,15 +698,6 @@ msgstr ""
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Back"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "This is your main circle"
|
||||
@@ -694,10 +730,6 @@ msgstr "This circle has no group chat associated."
|
||||
msgid "Return to circle list"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Delete circle"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "Deleting a circle does not delete any users in the circle."
|
||||
|
||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2021-06-19 15:01+0000\n"
|
||||
"Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
|
||||
"Language-Team: English (United Kingdom) <https://i18n.sotecware.net/projects/"
|
||||
@@ -167,6 +167,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Invitation type"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
@@ -190,21 +191,17 @@ msgstr "Select user"
|
||||
msgid "Update circle"
|
||||
msgstr "Create circle"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Delete circle permanently"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Add user"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
#, fuzzy
|
||||
#| msgid "No circles"
|
||||
msgid "No such circle exists"
|
||||
msgstr "No circles"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle data updated"
|
||||
@@ -212,39 +209,43 @@ msgstr "Circle name"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
#, fuzzy
|
||||
#| msgid "deleted"
|
||||
msgid "Circle deleted"
|
||||
msgstr "deleted"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
#, fuzzy
|
||||
#| msgid "Invite to circle"
|
||||
msgid "User added to circle"
|
||||
msgstr "Invite to circle"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
#, fuzzy
|
||||
#| msgid "Remove user %(username)s from circle"
|
||||
msgid "User removed from circle"
|
||||
msgstr "Remove user %(username)s from circle"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Delete circle permanently"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
#, fuzzy
|
||||
#| msgid "deleted"
|
||||
msgid "Circle deleted"
|
||||
msgstr "deleted"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr ""
|
||||
|
||||
@@ -625,6 +626,46 @@ msgstr "Raw debug dump"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Copy complete output"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit circle %(circle_name)s"
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Edit circle %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Delete circle"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Are you sure you want to delete the following user?"
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Are you sure you want to delete the following user?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Danger"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Back"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -639,10 +680,6 @@ msgstr "Delete user"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Are you sure you want to delete the following user?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Danger"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -650,15 +687,6 @@ msgid ""
|
||||
"strong>"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Back"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr ""
|
||||
@@ -695,10 +723,6 @@ msgstr ""
|
||||
msgid "Return to circle list"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Delete circle"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "Deleting a circle does not delete any users in the circle."
|
||||
|
||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2021-03-31 13:00+0000\n"
|
||||
"Last-Translator: Tilman Jiménez <tilman.jimenez@tu-dortmund.de>\n"
|
||||
"Language-Team: Spanish (Mexico) <https://i18n.sotecware.net/projects/snikket/"
|
||||
@@ -157,6 +157,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Tipo de invitación"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
||||
@@ -178,21 +179,17 @@ msgstr "Seleccionar usuario"
|
||||
msgid "Update circle"
|
||||
msgstr "Actualizar círculo"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Eliminar círculo permanentemente"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Añadir usuario"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
#, fuzzy
|
||||
#| msgid "No circles"
|
||||
msgid "No such circle exists"
|
||||
msgstr "No hay círculos"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle data updated"
|
||||
@@ -200,37 +197,41 @@ msgstr "Nombre del círculo"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
#, fuzzy
|
||||
#| msgid "Circle members"
|
||||
msgid "Circle deleted"
|
||||
msgstr "Miembros del círculo"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
#, fuzzy
|
||||
#| msgid "Invite to circle"
|
||||
msgid "User added to circle"
|
||||
msgstr "Invitar al círculo"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Eliminar círculo permanentemente"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
#, fuzzy
|
||||
#| msgid "Circle members"
|
||||
msgid "Circle deleted"
|
||||
msgstr "Miembros del círculo"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr ""
|
||||
|
||||
@@ -604,6 +605,54 @@ msgstr ""
|
||||
msgid "Copy complete output"
|
||||
msgstr "Copiar el todo el output"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit circle %(circle_name)s"
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Editar el círculo %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Eliminar círculo"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Are you sure you want to delete the following user?"
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "¿Seguro que quieres eliminar al siguiente usuario?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Peligro"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
#, 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!</"
|
||||
#| "strong>"
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"Este usuario y sus datos va a ser eliminados de manera irreversible, "
|
||||
"permanente e inmediatamente al presionar el botón. <strong>¡No hay forma de "
|
||||
"deshacer esto!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Regresar"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -618,10 +667,6 @@ msgstr "Eliminar usuario"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "¿Seguro que quieres eliminar al siguiente usuario?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Peligro"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -632,15 +677,6 @@ msgstr ""
|
||||
"permanente e inmediatamente al presionar el botón. <strong>¡No hay forma de "
|
||||
"deshacer esto!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Regresar"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "Este es el círculo principal"
|
||||
@@ -675,10 +711,6 @@ msgstr "Este círculo no está asociado con una conversación de grupo."
|
||||
msgid "Return to circle list"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Eliminar círculo"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "Eliminar un círculo no elimina a los usuarios que le pertenecen."
|
||||
|
||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2022-04-11 13:00+0000\n"
|
||||
"Last-Translator: David Baraniak <admin@chipmnk.dev>\n"
|
||||
"Language-Team: French <http://i18n.sotecware.net/projects/snikket/web-portal/"
|
||||
@@ -145,6 +145,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Invitation révoquée"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
@@ -164,51 +165,51 @@ msgstr "Sélectionner un utilisateur"
|
||||
msgid "Update circle"
|
||||
msgstr "Mettre à jour le cercle"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Supprimer le cercle définitivement"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Ajouter un utilisateur"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
msgid "No such circle exists"
|
||||
msgstr "Ce cercle n’existe pas"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
msgid "Circle data updated"
|
||||
msgstr "Données du cercle mises à jour"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
msgid "Circle deleted"
|
||||
msgstr "Cercle supprimé"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
msgid "User added to circle"
|
||||
msgstr "Utilisateur ajouté à ce cercle"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr "Utilisateur retiré du cercle"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Supprimer le cercle définitivement"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
msgid "Circle deleted"
|
||||
msgstr "Cercle supprimé"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr "Contenu du message"
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr "Envoyer uniquement aux utilisateurs connectés"
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr "Envoyer aux utilisateurs"
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr "Envoyer une prévisualisation à vous-mêmes"
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr "Annonce envoyée !"
|
||||
|
||||
@@ -586,6 +587,54 @@ msgstr "Journal de débogage brut"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Copier le journal entier"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit circle %(circle_name)s"
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Éditer le cercle %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Supprimer le cercle"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Are you sure you want to delete the following user?"
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Êtes-vous certain(e) de vouloir désinscrire l’utilisateur suivant ?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Danger"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
#, 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!</"
|
||||
#| "strong>"
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"L’utilisateur et ses données vont être irrévocablement supprimées, "
|
||||
"immédiatement après avoir pressé le bouton ci-dessous. <strong>Il est "
|
||||
"impossible de revenir en arrière !</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -600,10 +649,6 @@ msgstr "Désinscrire un utilisateur"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Êtes-vous certain(e) de vouloir désinscrire l’utilisateur suivant ?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Danger"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -614,15 +659,6 @@ msgstr ""
|
||||
"immédiatement après avoir pressé le bouton ci-dessous. <strong>Il est "
|
||||
"impossible de revenir en arrière !</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "Ceci est votre cercle principal"
|
||||
@@ -656,10 +692,6 @@ msgstr "Ce cercle n’a pas de conversation de groupe associée."
|
||||
msgid "Return to circle list"
|
||||
msgstr "Revenir à la liste des cercles"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Supprimer le cercle"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "Supprimer un cercle ne supprime aucun utilisateur dans le cercle."
|
||||
|
||||
Binary file not shown.
@@ -6,18 +6,18 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"PO-Revision-Date: 2022-01-18 14:59+0000\n"
|
||||
"Report-Msgid-Bugs-To: translations@snikket.org\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2023-04-02 15:17+0000\n"
|
||||
"Last-Translator: uira <inboxriau@andriana.id>\n"
|
||||
"Language-Team: Indonesian <http://i18n.sotecware.net/projects/snikket/web-"
|
||||
"portal/id/>\n"
|
||||
"Language-Team: Indonesian <http://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"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.8.1\n"
|
||||
"X-Generator: Weblate 4.14.1\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
|
||||
@@ -145,6 +145,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Undangan dibatalkan"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Nama"
|
||||
|
||||
@@ -164,51 +165,51 @@ msgstr "Pilih pengguna"
|
||||
msgid "Update circle"
|
||||
msgstr "Memperbarui kelompok"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Hapus kelompok secara permanen"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Tambah pengguna"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
msgid "No such circle exists"
|
||||
msgstr "Kelompok tersebut tidak ada"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
msgid "Circle data updated"
|
||||
msgstr "Data kelompok diperbarui"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
msgid "Circle deleted"
|
||||
msgstr "Kelompok dihapus"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
msgid "User added to circle"
|
||||
msgstr "Pengguna ditambahkan ke kelompok"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr "Pengguna dihapus dari kelompok"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Hapus kelompok secara permanen"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
msgid "Circle deleted"
|
||||
msgstr "Kelompok dihapus"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr "Isi pesan"
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr "Hanya kirim ke pengguna online"
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr "Kirim ke semua pengguna"
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr "Kirim pratinjau ke diri sendiri"
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr "Pengumuman terkirim!"
|
||||
|
||||
@@ -587,6 +588,46 @@ msgstr "Kumpulan data debug mentah"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Salin keluaran lengkap"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, python-format
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Hapus kelompok %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Hapus kelompok"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Apakah anda yakin mau menghapus circle tersebut?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Berbahaya"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"Circle dan datanya akan dihapus secara permanen, tidak bisa dibatalkan, "
|
||||
"segera setelah menekan tombol di bawah. <strong>Tidak ada jalan "
|
||||
"kembali!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Kembali"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -601,10 +642,6 @@ msgstr "Hapus pengguna"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Apakah anda yakin mau menghapus pengguna tersebut?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Berbahaya"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -615,15 +652,6 @@ msgstr ""
|
||||
"segera setelah menekan tombol di bawah. <strong>Tidak ada jalan kembali!</"
|
||||
"strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Kembali"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "Ini kelompok utama anda"
|
||||
@@ -657,10 +685,6 @@ msgstr "Kelompok ini tidak memiliki percakapan grup."
|
||||
msgid "Return to circle list"
|
||||
msgstr "Kembali ke daftar circle"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Hapus kelompok"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr ""
|
||||
|
||||
Binary file not shown.
@@ -6,18 +6,18 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"PO-Revision-Date: 2021-05-19 15:12+0000\n"
|
||||
"Report-Msgid-Bugs-To: translations@snikket.org\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2023-07-13 11:17+0000\n"
|
||||
"Last-Translator: Roberto Resoli <roberto@resolutions.it>\n"
|
||||
"Language-Team: Italian <https://i18n.sotecware.net/projects/snikket/web-"
|
||||
"portal/it/>\n"
|
||||
"Language-Team: Italian <http://i18n.sotecware.net/projects/snikket/"
|
||||
"web-portal/it/>\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.5.1\n"
|
||||
"X-Generator: Weblate 4.14.1\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
|
||||
@@ -145,6 +145,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Invito revocato"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
@@ -164,53 +165,53 @@ msgstr "Seleziona utente"
|
||||
msgid "Update circle"
|
||||
msgstr "Modifica cerchia"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Elimina cerchia definitivamente"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Aggiungi utente"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
msgid "No such circle exists"
|
||||
msgstr "Questa cerchia non esiste"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
msgid "Circle data updated"
|
||||
msgstr "Dati della cerchia aggiornati"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
msgid "Circle deleted"
|
||||
msgstr "Cerchia eliminata"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
msgid "User added to circle"
|
||||
msgstr "Utente aggiunto alla cerchia"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr "Utente rimosso dalla cerchia"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Elimina cerchia definitivamente"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
msgid "Circle deleted"
|
||||
msgstr "Cerchia eliminata"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
msgid "Only send to online users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
msgid "Post to all users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
msgid "Send preview to yourself"
|
||||
msgstr ""
|
||||
msgstr "Contenuto dei messaggi"
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr "Inviare solo agli utenti online"
|
||||
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr "Inviare a tutti gli utenti"
|
||||
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr "Inviare una anteprima a te stesso"
|
||||
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr ""
|
||||
msgstr "Annuncio inviato!"
|
||||
|
||||
#: snikket_web/infra.py:53
|
||||
msgid "Main"
|
||||
@@ -221,6 +222,8 @@ msgid ""
|
||||
"The account data you tried to import is too large to upload. Please contact "
|
||||
"your Snikket operator."
|
||||
msgstr ""
|
||||
"I dati dell'utenza che hai provato ad importare sono troppo grandi per "
|
||||
"essere caricati. Contatta il tuo operatore Snikket."
|
||||
|
||||
#: snikket_web/invite.py:114
|
||||
msgid "Username"
|
||||
@@ -261,11 +264,11 @@ msgstr "Cambia password"
|
||||
|
||||
#: snikket_web/invite.py:246
|
||||
msgid "Account data file"
|
||||
msgstr ""
|
||||
msgstr "File con i dati dell'utenza"
|
||||
|
||||
#: snikket_web/invite.py:250
|
||||
msgid "Import data"
|
||||
msgstr ""
|
||||
msgstr "Importa i dati"
|
||||
|
||||
#: snikket_web/invite.py:271
|
||||
#, python-format
|
||||
@@ -273,6 +276,9 @@ msgid ""
|
||||
"The account data you tried to import is in an unknown format. Please upload "
|
||||
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
|
||||
msgstr ""
|
||||
"I dati dell'utenza che stai cercando di importare sono in un formato "
|
||||
"sconosciuto. Per favore, carica un file XML in formato XEP-0227 (formato "
|
||||
"fornito: %(mimetype)s)."
|
||||
|
||||
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
|
||||
#: snikket_web/user.py:178
|
||||
@@ -341,11 +347,11 @@ msgstr "Modifica profilo"
|
||||
|
||||
#: snikket_web/user.py:82
|
||||
msgid "Account data"
|
||||
msgstr ""
|
||||
msgstr "Dati dell'utenza"
|
||||
|
||||
#: snikket_web/user.py:86
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
msgstr "Caricare"
|
||||
|
||||
#: snikket_web/user.py:111
|
||||
msgid "Incorrect password."
|
||||
@@ -369,11 +375,11 @@ msgstr "Profilo aggiornato"
|
||||
|
||||
#: snikket_web/user.py:184
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
msgstr "Esportare"
|
||||
|
||||
#: snikket_web/user.py:202
|
||||
msgid "You currently have no account data to export."
|
||||
msgstr ""
|
||||
msgstr "Al momento non hai dati utente da esportare."
|
||||
|
||||
#: snikket_web/templates/_footer.html:4
|
||||
#, python-format
|
||||
@@ -582,6 +588,46 @@ msgstr "Dati diagnostici grezzi"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Copia l'intero output"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, python-format
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Elimina la cerchia %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Elimina cerchia"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Vuoi veramente eliminare la seguente cerchia?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Pericolo"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"La cerchia e la relativa chat verranno eliminate in modo permanente ed "
|
||||
"irreversibile non appena verrà premuto il pulsante sottostante. <strong>Non "
|
||||
"sarà possibile tornare indietro!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -596,10 +642,6 @@ msgstr "Elimina utente"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Sei sicura/o di volere eliminare il seguente utente?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Pericolo"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -610,15 +652,6 @@ msgstr ""
|
||||
"irreversibile non appena verrà premuto il pulsante sottostante. <strong>Non "
|
||||
"sarà possibile tornare sui propri passi!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "Questa è la vostra cerchia principale"
|
||||
@@ -653,10 +686,6 @@ msgstr "Questa cerchia non è collegata ad una chat di gruppo."
|
||||
msgid "Return to circle list"
|
||||
msgstr "Ritorna alle lista delle cerchie"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Elimina cerchia"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "Eliminare una cerchia non elimina nessuno dei suoi utenti."
|
||||
@@ -667,7 +696,7 @@ msgstr "Membri della cerchia"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:71
|
||||
msgid "The user has been deleted from the server."
|
||||
msgstr ""
|
||||
msgstr "L'utenza è stata eliminata dal server."
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:71
|
||||
#: snikket_web/templates/library.j2:108
|
||||
@@ -881,11 +910,12 @@ msgstr "Gestisci inviti"
|
||||
|
||||
#: snikket_web/templates/admin_home.html:35
|
||||
msgid "System health"
|
||||
msgstr ""
|
||||
msgstr "Stato di salute del sistema"
|
||||
|
||||
#: snikket_web/templates/admin_home.html:38
|
||||
msgid "View the server status or send a broadcast message to all users."
|
||||
msgstr ""
|
||||
"Veder e lo stato del server e trasmettere un messaggio a tutti gli utenti."
|
||||
|
||||
#: snikket_web/templates/admin_home.html:40
|
||||
msgid "Send a broadcast message to all users."
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2021-01-28 17:55+0000\n"
|
||||
"Last-Translator: pep <pep@bouah.net>\n"
|
||||
"Language-Team: Japanese <https://i18n.sotecware.net/projects/snikket/web-"
|
||||
@@ -165,6 +165,7 @@ msgid "Invitation revoked"
|
||||
msgstr "紹介の種類"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "名"
|
||||
|
||||
@@ -186,21 +187,17 @@ msgstr "ユーザー選択"
|
||||
msgid "Update circle"
|
||||
msgstr "サークルを更新"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "サークルを削除"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "ユーザーを追加する"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
#, fuzzy
|
||||
#| msgid "No circles"
|
||||
msgid "No such circle exists"
|
||||
msgstr "なし"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle data updated"
|
||||
@@ -208,39 +205,43 @@ msgstr "サークル名"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
#, fuzzy
|
||||
#| msgid "Circle members"
|
||||
msgid "Circle deleted"
|
||||
msgstr "サークル会員"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
#, fuzzy
|
||||
#| msgid "Invite to circle"
|
||||
msgid "User added to circle"
|
||||
msgstr "サークルに紹介する"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
#, fuzzy
|
||||
#| msgid "Remove user %(username)s from circle"
|
||||
msgid "User removed from circle"
|
||||
msgstr "%(username)s をサークルから外す"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "サークルを削除"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
#, fuzzy
|
||||
#| msgid "Circle members"
|
||||
msgid "Circle deleted"
|
||||
msgstr "サークル会員"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr ""
|
||||
|
||||
@@ -605,6 +606,53 @@ msgstr ""
|
||||
msgid "Copy complete output"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit circle %(circle_name)s"
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "%(circle_name)s を管理"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "サークル削除"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Are you sure you want to delete the following user?"
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "本当にこのユーザーを削除していいですか?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "警告"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
#, 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!</"
|
||||
#| "strong>"
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"ユーザーとそのユーザーのデータが削除されます。<strong>戻ることができません</"
|
||||
"strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "戻る"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -619,10 +667,6 @@ msgstr "ユーザー削除"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "本当にこのユーザーを削除していいですか?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "警告"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -632,15 +676,6 @@ msgstr ""
|
||||
"ユーザーとそのユーザーのデータが削除されます。<strong>戻ることができません</"
|
||||
"strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "戻る"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr ""
|
||||
@@ -673,10 +708,6 @@ msgstr ""
|
||||
msgid "Return to circle list"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "サークル削除"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "サークルを削除しても会員は削除されまんせん。"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -6,9 +6,9 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"PO-Revision-Date: 2022-01-21 15:00+0000\n"
|
||||
"Report-Msgid-Bugs-To: translations@snikket.org\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2023-04-04 14:11+0000\n"
|
||||
"Last-Translator: misiek <migelazur@mailbox.org>\n"
|
||||
"Language-Team: Polish <http://i18n.sotecware.net/projects/snikket/web-portal/"
|
||||
"pl/>\n"
|
||||
@@ -18,7 +18,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.8.1\n"
|
||||
"X-Generator: Weblate 4.14.1\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
|
||||
@@ -146,6 +146,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Unieważniono zaproszenie"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Nazwa"
|
||||
|
||||
@@ -165,51 +166,51 @@ msgstr "Wybierz użytkownika"
|
||||
msgid "Update circle"
|
||||
msgstr "Zaktualizuj ustawienia kręgu"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Usuń krąg bezpowrotnie"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Dodaj użytkownika"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
msgid "No such circle exists"
|
||||
msgstr "Taki krąg nie istnieje"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
msgid "Circle data updated"
|
||||
msgstr "Zaktualizowano dane kręgu"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
msgid "Circle deleted"
|
||||
msgstr "Krąg został usunięty"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
msgid "User added to circle"
|
||||
msgstr "Dodano użytkownika do kręgu"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr "Usunięto użytkownika z kręgu"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Usuń krąg bezpowrotnie"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
msgid "Circle deleted"
|
||||
msgstr "Krąg został usunięty"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr "Treść wiadomości"
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr "Wyślij jedynie do użytkowników online"
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr "Wyślij do wszystkich użytkowników"
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr "Prześlij do siebie podgląd wiadomości"
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr "Komunikat wysłany!"
|
||||
|
||||
@@ -587,6 +588,45 @@ msgstr "Surowy zrzut debugowania"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Skopiuj całą zawartość"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, python-format
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Usuń krąg %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Usuń krąg"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Czy na pewno chcesz usunąć ten krąg?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Uwaga"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"Krąg oraz jego dane zostaną trwale i natychmiastowo usunięte po naciśnięciu "
|
||||
"poniższego przycisku. <strong>Nie będzie można tego cofnąć!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Wstecz"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -601,10 +641,6 @@ msgstr "Usuń użytkownika"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Czy na pewno chcesz usunąć tego użytkownika?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Uwaga"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -615,15 +651,6 @@ msgstr ""
|
||||
"usunięte po naciśnięciu poniższego przycisku. <strong>Nie będzie można tego "
|
||||
"cofnąć!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Wstecz"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "To twój główny krąg"
|
||||
@@ -658,10 +685,6 @@ msgstr "Ten krąg nie jest powiązany z żadnym czatem grupowym."
|
||||
msgid "Return to circle list"
|
||||
msgstr "Wróć do listy kręgów"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Usuń krąg"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "Usunięcie kręgu nie usunie z serwera jego użytkowników."
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\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-"
|
||||
@@ -156,6 +156,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Вид приглашения"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Имя"
|
||||
|
||||
@@ -175,51 +176,51 @@ msgstr "Выврать пользователя"
|
||||
msgid "Update circle"
|
||||
msgstr "Обновить крук"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Удалить круг навсегда"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Добавить пользователя"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
msgid "No such circle exists"
|
||||
msgstr "Нет кругов"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
msgid "Circle data updated"
|
||||
msgstr "Имя круга"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
msgid "Circle deleted"
|
||||
msgstr "удалённый"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
msgid "User added to circle"
|
||||
msgstr "Пригласить в круг"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr "Удалить пользователя %(username)s из круга"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Удалить круг навсегда"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
msgid "Circle deleted"
|
||||
msgstr "удалённый"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr ""
|
||||
|
||||
@@ -605,6 +606,53 @@ msgstr "Исходная отладка переполнения"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Копировать полный вывод"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit circle %(circle_name)s"
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Редактировать круг %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Удалить круг"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Are you sure you want to delete the following user?"
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Вы уверены, что хотите удалить следующего пользователя?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Опасность"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
#, 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!</"
|
||||
#| "strong>"
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"Пользователь и его данные будут удалены безвозвратно, навсегда и сразу же "
|
||||
"после нажатия нижней кнопки. <strong>Назад дороги нет!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Вернуть"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -619,10 +667,6 @@ msgstr "Удалить пользователя"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Вы уверены, что хотите удалить следующего пользователя?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Опасность"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -632,15 +676,6 @@ msgstr ""
|
||||
"Пользователь и его данные будут удалены безвозвратно, навсегда и сразу же "
|
||||
"после нажатия нижней кнопки. <strong>Назад дороги нет!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Вернуть"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "Это ваш основной круг"
|
||||
@@ -674,10 +709,6 @@ msgstr "С этим кругом не связан ни один группов
|
||||
msgid "Return to circle list"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "Удалить круг"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "Удаление круга не приводит к удалению пользователей из круга."
|
||||
|
||||
Binary file not shown.
@@ -6,18 +6,18 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"PO-Revision-Date: 2022-01-18 09:21+0000\n"
|
||||
"Report-Msgid-Bugs-To: translations@snikket.org\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2023-04-02 15:17+0000\n"
|
||||
"Last-Translator: Kim Alvefur <zash@zash.se>\n"
|
||||
"Language-Team: Swedish <http://i18n.sotecware.net/projects/snikket/web-"
|
||||
"portal/sv/>\n"
|
||||
"Language-Team: Swedish <http://i18n.sotecware.net/projects/snikket/"
|
||||
"web-portal/sv/>\n"
|
||||
"Language: sv\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.8.1\n"
|
||||
"X-Generator: Weblate 4.14.1\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
|
||||
@@ -145,6 +145,7 @@ msgid "Invitation revoked"
|
||||
msgstr "Inbjudan återkallad"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "Namn"
|
||||
|
||||
@@ -164,51 +165,51 @@ msgstr "Välj användare"
|
||||
msgid "Update circle"
|
||||
msgstr "Uppdatera krets"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Radera krets permanent"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "Lägg till användare"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
msgid "No such circle exists"
|
||||
msgstr "Kretsen finns inte"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
msgid "Circle data updated"
|
||||
msgstr "Kretsen uppdaterades"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
msgid "Circle deleted"
|
||||
msgstr "Krets raderad"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
msgid "User added to circle"
|
||||
msgstr "Användare tillagd i krets"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr "Användaren %(username)s borttagen från krets"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Radera krets permanent"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
msgid "Circle deleted"
|
||||
msgstr "Krets raderad"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr "Meddelandeinnehåll"
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr "Skicka bara till användare som är online"
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr "Skicka till alla användare"
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr "Skicka förhandsvisning till dig själv"
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr "Tillkännagivande skickat!"
|
||||
|
||||
@@ -584,6 +585,46 @@ msgstr "Felsökningsdata"
|
||||
msgid "Copy complete output"
|
||||
msgstr "Kopiera allt"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, python-format
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "Radera krets %(circle_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "Radera krets"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "Är du säker på att du vill radera denna krets?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Fara"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"Om du trycker på knappen nedanför kommer kretsen och dess data raderas "
|
||||
"direkt, permanent och skoningslöst. <strong>Därefter finns ingen "
|
||||
"återvändo!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Tillbaka"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -598,10 +639,6 @@ msgstr "Radera användare"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "Är du säker på att du vill radera denna användare?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "Fara"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -612,15 +649,6 @@ msgstr ""
|
||||
"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_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "Tillbaka"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "Detta är din primära krets"
|
||||
@@ -653,10 +681,6 @@ msgstr "Denna krets har ingen tillhörande gruppchatt."
|
||||
msgid "Return to circle list"
|
||||
msgstr "Tillbaka till cirkellistan"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
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 krets raderas inte när kretsen raderas."
|
||||
|
||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-06-07 22:31+0200\n"
|
||||
"POT-Creation-Date: 2023-04-01 10:07+0200\n"
|
||||
"PO-Revision-Date: 2022-05-20 00:01+0000\n"
|
||||
"Last-Translator: Zack Zhou <lnx@outlook.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <http://i18n.sotecware.net/projects/"
|
||||
@@ -145,6 +145,7 @@ msgid "Invitation revoked"
|
||||
msgstr "邀请已撤销"
|
||||
|
||||
#: snikket_web/admin.py:394 snikket_web/admin.py:442
|
||||
#: snikket_web/templates/admin_delete_circle.html:10
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
@@ -164,51 +165,51 @@ msgstr "选择用户"
|
||||
msgid "Update circle"
|
||||
msgstr "更新圈子"
|
||||
|
||||
#: snikket_web/admin.py:456
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "永久删除圈子"
|
||||
|
||||
#: snikket_web/admin.py:462
|
||||
#: snikket_web/admin.py:458
|
||||
msgid "Add user"
|
||||
msgstr "增加用户"
|
||||
|
||||
#: snikket_web/admin.py:478
|
||||
#: snikket_web/admin.py:474 snikket_web/admin.py:563
|
||||
msgid "No such circle exists"
|
||||
msgstr "圈子不存在"
|
||||
|
||||
#: snikket_web/admin.py:515
|
||||
#: snikket_web/admin.py:511
|
||||
msgid "Circle data updated"
|
||||
msgstr "圈子数据已更新"
|
||||
|
||||
#: snikket_web/admin.py:521
|
||||
msgid "Circle deleted"
|
||||
msgstr "圈子已删除"
|
||||
|
||||
#: snikket_web/admin.py:532
|
||||
msgid "User added to circle"
|
||||
msgstr "用户已添加到圈子"
|
||||
|
||||
#: snikket_web/admin.py:541
|
||||
#: snikket_web/admin.py:530
|
||||
msgid "User removed from circle"
|
||||
msgstr "用户已从圈子移除"
|
||||
|
||||
#: snikket_web/admin.py:610
|
||||
#: snikket_web/admin.py:547
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "永久删除圈子"
|
||||
|
||||
#: snikket_web/admin.py:574
|
||||
msgid "Circle deleted"
|
||||
msgstr "圈子已删除"
|
||||
|
||||
#: snikket_web/admin.py:640
|
||||
msgid "Message contents"
|
||||
msgstr "消息内容"
|
||||
|
||||
#: snikket_web/admin.py:616
|
||||
#: snikket_web/admin.py:646
|
||||
msgid "Only send to online users"
|
||||
msgstr "仅发送给在线用户"
|
||||
|
||||
#: snikket_web/admin.py:620
|
||||
#: snikket_web/admin.py:650
|
||||
msgid "Post to all users"
|
||||
msgstr "发送给所有用户"
|
||||
|
||||
#: snikket_web/admin.py:624
|
||||
#: snikket_web/admin.py:654
|
||||
msgid "Send preview to yourself"
|
||||
msgstr "发送预览"
|
||||
|
||||
#: snikket_web/admin.py:646
|
||||
#: snikket_web/admin.py:676
|
||||
msgid "Announcement sent!"
|
||||
msgstr "公告已发送!"
|
||||
|
||||
@@ -566,6 +567,53 @@ msgstr "原始调试信息"
|
||||
msgid "Copy complete output"
|
||||
msgstr "复制"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:4
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit circle %(circle_name)s"
|
||||
msgid "Delete circle %(circle_name)s"
|
||||
msgstr "修改 %(circle_name)s 圈子信息"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:6
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
#: snikket_web/templates/admin_edit_circle.html:51
|
||||
msgid "Delete circle"
|
||||
msgstr "删除圈子"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Are you sure you want to delete the following user?"
|
||||
msgid "Are you sure you want to delete the following circle?"
|
||||
msgstr "你确定要删除以下用户吗?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:13
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "危险"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:14
|
||||
#, 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!</"
|
||||
#| "strong>"
|
||||
msgid ""
|
||||
"The circle and the corresponding chat will be deleted, permanently and "
|
||||
"immediately upon pushing the below button. <strong>There is no way back!</"
|
||||
"strong>"
|
||||
msgstr ""
|
||||
"当你按下按钮的时候,此用户的相关数据将被立刻永久删除,此操作无法撤销。"
|
||||
"<strong>没有后悔药!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_circle.html:17
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#, python-format
|
||||
msgid "Delete user %(user_name)s"
|
||||
@@ -580,10 +628,6 @@ msgstr "删除用户"
|
||||
msgid "Are you sure you want to delete the following user?"
|
||||
msgstr "你确定要删除以下用户吗?"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:15
|
||||
msgid "Danger"
|
||||
msgstr "危险"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:16
|
||||
msgid ""
|
||||
"The user and their data will be deleted irrevocably, permanently and "
|
||||
@@ -593,15 +637,6 @@ msgstr ""
|
||||
"当你按下按钮的时候,此用户的相关数据将被立刻永久删除,此操作无法撤销。"
|
||||
"<strong>没有后悔药!</strong>"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:19
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_manage_data.html:14
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:14
|
||||
msgid "This is your main circle"
|
||||
msgstr "这是你的主圈子"
|
||||
@@ -634,10 +669,6 @@ msgstr "此圈子没有群聊。"
|
||||
msgid "Return to circle list"
|
||||
msgstr "返回圈子列表"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:48
|
||||
msgid "Delete circle"
|
||||
msgstr "删除圈子"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:49
|
||||
msgid "Deleting a circle does not delete any users in the circle."
|
||||
msgstr "删除圈子不会删除其中的用户账户。"
|
||||
|
||||
@@ -6,6 +6,8 @@ action/logout:logout
|
||||
action/login:login
|
||||
action/exit_to_app:exit_to_app
|
||||
action/lock:lock
|
||||
action/lock_open:lock_open
|
||||
action/restore_from_trash:restore_from_trash
|
||||
communication/import_export:import_export
|
||||
communication/qr_code:qrcode
|
||||
communication/vpn_key:passwd
|
||||
|
||||
6
tools/import-icons.sh
Normal file → Executable file
6
tools/import-icons.sh
Normal file → Executable file
@@ -9,9 +9,9 @@ set -euo pipefail
|
||||
# FLAVOR one of '', 'round', 'sharp', 'outlined', 'twoshade'
|
||||
# SVGOUT path to the newly created SVG file
|
||||
root="$1/src"
|
||||
iconlist_file="$2"
|
||||
flavor="$3"
|
||||
output_file="$4"
|
||||
iconlist_file="${2-tools/icons.list}"
|
||||
flavor="${3-round}"
|
||||
output_file="${4-snikket_web/static/img/icons.svg}"
|
||||
|
||||
printf '<svg aria-hidden="true" style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n<defs>\n' > "$output_file"
|
||||
printf '<!-- These icons are sourced from Google’s Material Icons set,\nlicensed under the terms of the Apache 2.0 License -->\n' >> "$output_file"
|
||||
|
||||
Reference in New Issue
Block a user