You've already forked snikket-web-portal
Compare commits
97 Commits
feature/fa
...
feature/mu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6b67b3fdd | ||
|
|
885db355ab | ||
|
|
c3d5b06313 | ||
|
|
2dd8838852 | ||
|
|
5df2c3945a | ||
|
|
3eb8036ebd | ||
|
|
02ed390cd2 | ||
|
|
2506810b90 | ||
|
|
05d1b42dc4 | ||
|
|
5ef5b93eb9 | ||
|
|
0ff6e00e9d | ||
|
|
c04ac4bee0 | ||
|
|
3e19d42c2a | ||
|
|
03732ac06b | ||
|
|
c70228fed7 | ||
|
|
025172592f | ||
|
|
6de1e5313f | ||
|
|
3083c118a3 | ||
|
|
fa1b13fbdb | ||
|
|
ba30d728f4 | ||
|
|
af87301fa4 | ||
|
|
8ee0b0dd30 | ||
|
|
4a27ef9d72 | ||
|
|
9e9fdaf8d4 | ||
|
|
bdb186ca81 | ||
|
|
4ca9b82bce | ||
|
|
6dbe2c2d5e | ||
|
|
e410aedfef | ||
|
|
1713da61e7 | ||
|
|
53aac690df | ||
|
|
5e4009ca11 | ||
|
|
80860a3ac6 | ||
|
|
e9d479a78b | ||
|
|
aac56f49e9 | ||
|
|
52f0bee006 | ||
|
|
97c91b432d | ||
|
|
60647159f3 | ||
|
|
a21730f136 | ||
|
|
e35ab1b723 | ||
|
|
4de4509fc9 | ||
|
|
93e3b325b1 | ||
|
|
ceecfc861c | ||
|
|
2467e73781 | ||
|
|
2f34d39a09 | ||
|
|
de8589923b | ||
|
|
db3a1ac22f | ||
|
|
b48d130659 | ||
|
|
1aed573eb2 | ||
|
|
d4707196ec | ||
|
|
8a8d4c54bd | ||
|
|
ab534e3a59 | ||
|
|
4c128f1af2 | ||
|
|
8b551a8946 | ||
|
|
182d2301be | ||
|
|
6dba5e3a65 | ||
|
|
713da89445 | ||
|
|
9876e42fb7 | ||
|
|
8b66c5a063 | ||
|
|
ddf9f89d77 | ||
|
|
53e023f9ae | ||
|
|
e4d339627e | ||
|
|
cd3026911b | ||
|
|
d7da16f780 | ||
|
|
8ed0fbec25 | ||
|
|
5b812c773d | ||
|
|
fa61ee4e11 | ||
|
|
7402480c62 | ||
|
|
a68a469319 | ||
|
|
961f285fa5 | ||
|
|
7456295cb6 | ||
|
|
96f4b0d4f8 | ||
|
|
245434126e | ||
|
|
725dffc458 | ||
|
|
22783b837e | ||
|
|
ba18fe692f | ||
|
|
387a989caa | ||
|
|
ffab48cff0 | ||
|
|
17bf7cb140 | ||
|
|
408d837a0f | ||
|
|
56e1083ada | ||
|
|
2aa3d629da | ||
|
|
6779341db3 | ||
|
|
10a0de0637 | ||
|
|
b3185a8d18 | ||
|
|
2db6cbe6fd | ||
|
|
9bc6e0b555 | ||
|
|
98a3eeba7c | ||
|
|
de97b08f01 | ||
|
|
f2dc970731 | ||
|
|
2f8e724104 | ||
|
|
a3ab537de0 | ||
|
|
b04c4fa42d | ||
|
|
078be4ba35 | ||
|
|
c1f186a3da | ||
|
|
7aaeb0f368 | ||
|
|
b475e76189 | ||
|
|
8b6f5e8e18 |
23
.github/workflows/build-portal-image.yml
vendored
23
.github/workflows/build-portal-image.yml
vendored
@@ -1,23 +0,0 @@
|
||||
name: Docker image build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build the Docker image
|
||||
run: >-
|
||||
docker build . \
|
||||
--build-arg=BUILD_SERIES=dev \
|
||||
--build-arg=BUILD_ID="$(echo "$GITHUB_SHA" | head -c 12)" \
|
||||
--tag snikket/snikket-web-portal:dev
|
||||
- name: Log into registry
|
||||
run: echo "${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}" | docker login -u snikket --password-stdin
|
||||
- name: Push the Docker image
|
||||
run: docker push snikket/snikket-web-portal:dev
|
||||
31
.github/workflows/build-portal-release-image.yml
vendored
31
.github/workflows/build-portal-release-image.yml
vendored
@@ -1,31 +0,0 @@
|
||||
---
|
||||
name: Docker release image build
|
||||
|
||||
"on":
|
||||
push:
|
||||
tags:
|
||||
- release/*.*
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build the Docker image
|
||||
run: >-
|
||||
echo "Building ref $GITHUB_REF...";
|
||||
RELEASE_TAG="${GITHUB_REF#refs/tags/release/}";
|
||||
RELEASE_SERIES="${RELEASE_TAG%.*}";
|
||||
RELEASE_VER="${RELEASE_TAG#$RELEASE_SERIES.}";
|
||||
docker build . \
|
||||
--build-arg=BUILD_SERIES="$RELEASE_SERIES" \
|
||||
--build-arg=BUILD_ID="$RELEASE_VER" \
|
||||
--tag snikket/snikket-web-portal:"$RELEASE_SERIES"
|
||||
- name: Log into registry
|
||||
run: echo "${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}" | docker login -u snikket --password-stdin
|
||||
- name: Push the Docker image
|
||||
run: >-
|
||||
RELEASE_TAG="${GITHUB_REF#refs/tags/release/}";
|
||||
RELEASE_SERIES="${RELEASE_TAG%.*}";
|
||||
docker push snikket/snikket-web-portal:"$RELEASE_SERIES"
|
||||
9
.github/workflows/main.yaml
vendored
9
.github/workflows/main.yaml
vendored
@@ -48,3 +48,12 @@ jobs:
|
||||
- name: Linting
|
||||
run: |
|
||||
python -m flake8 snikket_web
|
||||
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build the Docker image
|
||||
run: >-
|
||||
docker build .
|
||||
|
||||
41
Dockerfile
41
Dockerfile
@@ -1,46 +1,31 @@
|
||||
FROM debian:buster
|
||||
FROM debian:buster-slim
|
||||
|
||||
ARG BUILD_SERIES=dev
|
||||
ARG BUILD_ID=0
|
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
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
|
||||
|
||||
# This Dockerfile attempts to strike a balance between image size and time it
|
||||
# takes to do an incremental build on changes.
|
||||
# Improvements welcome.
|
||||
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 \
|
||||
libpython3-dev \
|
||||
make build-essential \
|
||||
netcat \
|
||||
; \
|
||||
apt-get clean ; rm -rf /var/lib/apt/lists
|
||||
|
||||
COPY requirements.txt /opt/snikket-web-portal/requirements.txt
|
||||
COPY build-requirements.txt /opt/snikket-web-portal/build-requirements.txt
|
||||
|
||||
WORKDIR /opt/snikket-web-portal
|
||||
|
||||
RUN set -eu; \
|
||||
pip3 install -r requirements.txt; \
|
||||
pip3 install -r build-requirements.txt; \
|
||||
rm -rf /root/.cache;
|
||||
|
||||
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
|
||||
|
||||
# NOTE: abusing true(1) as a terrible way to disable a specific command. If
|
||||
# one merged all the RUN commands into one, one would want to run the
|
||||
# uninstall/remove commands there, but with the split up RUN commands it is
|
||||
# rather pointless.
|
||||
RUN set -eu; \
|
||||
make; \
|
||||
true pip3 uninstall -yr build-requirements.txt; \
|
||||
true apt-get remove -y build-essential make libpython3-dev; \
|
||||
true apt-get autoremove -y; \
|
||||
pip3 uninstall -yr build-requirements.txt; \
|
||||
apt-get remove -y build-essential make libpython3-dev; \
|
||||
apt-get autoremove -y; \
|
||||
pip3 install hypercorn; \
|
||||
rm -rf /root/.cache; \
|
||||
apt-get clean ; rm -rf /var/lib/apt/lists
|
||||
@@ -50,5 +35,7 @@ ENV SNIKKET_WEB_PYENV=/etc/snikket-web-portal/env.py
|
||||
|
||||
ENV SNIKKET_WEB_PROSODY_ENDPOINT=http://127.0.0.1:5280/
|
||||
|
||||
HEALTHCHECK CMD nc -zv ${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE:-127.0.0.1} ${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_PORT:-5765}
|
||||
|
||||
ADD docker/entrypoint.sh /entrypoint.sh
|
||||
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]
|
||||
|
||||
@@ -2,4 +2,7 @@
|
||||
|
||||
export SNIKKET_WEB_DOMAIN="$SNIKKET_DOMAIN"
|
||||
|
||||
exec hypercorn -b "127.0.0.1:5765" 'snikket_web:create_app()'
|
||||
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}"
|
||||
|
||||
exec hypercorn -b "${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE}:${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_PORT}" 'snikket_web:create_app()'
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 421 KiB |
@@ -48,6 +48,7 @@ async def proc() -> typing.Dict[str, typing.Any]:
|
||||
"text_to_css": colour.text_to_css,
|
||||
"lang": infra.selected_locale(),
|
||||
"user_info": user_info,
|
||||
"is_in_debug_mode": current_app.debug,
|
||||
}
|
||||
|
||||
|
||||
@@ -143,8 +144,22 @@ class AppConfig:
|
||||
domain = environ.var()
|
||||
site_name = environ.var("")
|
||||
avatar_cache_ttl = environ.var(1800, converter=int)
|
||||
languages = environ.var(["de", "en"], converter=autosplit)
|
||||
languages = environ.var([
|
||||
"da",
|
||||
"de",
|
||||
"en",
|
||||
"fr",
|
||||
"id",
|
||||
"it",
|
||||
"pl",
|
||||
"sv",
|
||||
], converter=autosplit)
|
||||
apple_store_url = environ.var("")
|
||||
# Default limit of 1 MiB is what was discovered to be the effective limit
|
||||
# in #67, hence we set that here for now.
|
||||
# Future versions may change this default, and the standard deployment
|
||||
# tools may also very well override it.
|
||||
max_avatar_size = environ.var(1024*1024, converter=int)
|
||||
|
||||
|
||||
_UPPER_CASE = "".join(map(chr, range(ord("A"), ord("Z")+1)))
|
||||
@@ -175,6 +190,7 @@ def create_app() -> quart.Quart:
|
||||
app.config["SITE_NAME"] = config.site_name or config.domain
|
||||
app.config["AVATAR_CACHE_TTL"] = config.avatar_cache_ttl
|
||||
app.config["APPLE_STORE_URL"] = config.apple_store_url
|
||||
app.config["MAX_AVATAR_SIZE"] = config.max_avatar_size
|
||||
|
||||
app.context_processor(proc)
|
||||
app.register_error_handler(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
version_info = (0, 1, 0, "a0")
|
||||
version_info = (0, 1, 2, "a0")
|
||||
version = (
|
||||
".".join(map(str, version_info[:3])) +
|
||||
(f"-{version_info[3]}" if version_info[3] else "")
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import asyncio
|
||||
import json
|
||||
import typing
|
||||
|
||||
@@ -18,10 +17,11 @@ from quart import (
|
||||
url_for,
|
||||
request,
|
||||
abort,
|
||||
flash,
|
||||
)
|
||||
import flask_wtf
|
||||
|
||||
from flask_babel import lazy_gettext as _l
|
||||
from flask_babel import lazy_gettext as _l, _
|
||||
|
||||
from . import prosodyclient
|
||||
from .infra import client, circle_name
|
||||
@@ -69,6 +69,10 @@ async def delete_user(localpart: str) -> typing.Union[str, quart.Response]:
|
||||
if form.validate_on_submit():
|
||||
if form.action_delete.data:
|
||||
await client.delete_user_by_localpart(localpart)
|
||||
await flash(
|
||||
_("User deleted"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".users"))
|
||||
|
||||
return await render_template(
|
||||
@@ -108,8 +112,16 @@ async def create_password_reset_link() -> typing.Union[str, quart.Response]:
|
||||
localpart=localpart,
|
||||
ttl=86400,
|
||||
)
|
||||
await flash(
|
||||
_("Password reset link created"),
|
||||
"success",
|
||||
)
|
||||
elif form.action_revoke.data:
|
||||
await client.delete_invite(form.action_revoke.data)
|
||||
await flash(
|
||||
_("Password reset link deleted"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".users"))
|
||||
|
||||
return await render_template(
|
||||
@@ -243,6 +255,10 @@ async def create_invite() -> typing.Union[str, quart.Response]:
|
||||
group_ids=form.circles.data,
|
||||
ttl=form.lifetime.data,
|
||||
)
|
||||
await flash(
|
||||
_("Invitation created"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".edit_invite", id_=invite.id_))
|
||||
return await render_template("admin_create_invite.html",
|
||||
invite_form=form)
|
||||
@@ -255,7 +271,11 @@ async def edit_invite(id_: str) -> typing.Union[str, quart.Response]:
|
||||
invite_info = await client.get_invite_by_id(id_)
|
||||
except aiohttp.ClientResponseError as exc:
|
||||
if exc.status == 404:
|
||||
abort(404)
|
||||
await flash(
|
||||
_("No such invitation exists"),
|
||||
"alert",
|
||||
)
|
||||
return redirect(url_for(".invitations"))
|
||||
circles = await client.list_groups()
|
||||
circle_map = {
|
||||
circle.id_: circle
|
||||
@@ -266,6 +286,10 @@ async def edit_invite(id_: str) -> typing.Union[str, quart.Response]:
|
||||
if form.validate_on_submit():
|
||||
if form.action_revoke.data:
|
||||
await client.delete_invite(id_)
|
||||
await flash(
|
||||
_("Invitation revoked"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".invitations"))
|
||||
return redirect(url_for(".edit_invite", id_=id_))
|
||||
|
||||
@@ -314,6 +338,10 @@ async def create_circle() -> typing.Union[str, quart.Response]:
|
||||
circle = await client.create_group(
|
||||
name=create_form.name.data,
|
||||
)
|
||||
await flash(
|
||||
_("Circle created"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".edit_circle", id_=circle.id_))
|
||||
|
||||
return await render_template(
|
||||
@@ -359,28 +387,28 @@ async def edit_circle(id_: str) -> typing.Union[str, quart.Response]:
|
||||
)
|
||||
except aiohttp.ClientResponseError as exc:
|
||||
if exc.status == 404:
|
||||
await flash(
|
||||
_("No such circle exists"),
|
||||
"alert",
|
||||
)
|
||||
return redirect(url_for(".circles"))
|
||||
raise
|
||||
|
||||
circle_members = await asyncio.gather(*(
|
||||
client.get_user_by_localpart(
|
||||
localpart,
|
||||
session=session,
|
||||
)
|
||||
for localpart in sorted(circle.members)
|
||||
))
|
||||
|
||||
users = await client.list_users()
|
||||
users = sorted(
|
||||
await client.list_users(),
|
||||
key=lambda x: x.localpart
|
||||
)
|
||||
circle_members = [
|
||||
user for user in users
|
||||
if user.localpart in circle.members
|
||||
]
|
||||
|
||||
form = EditCircleForm()
|
||||
form.user_to_add.choices = sorted(
|
||||
(
|
||||
(u.localpart, u.localpart)
|
||||
for u in users
|
||||
if u.localpart not in circle.members
|
||||
),
|
||||
key=lambda x: x[1]
|
||||
)
|
||||
form.user_to_add.choices = [
|
||||
(user.localpart, user.localpart)
|
||||
for user in users
|
||||
if user.localpart not in circle.members
|
||||
]
|
||||
valid_users = [x[0] for x in form.user_to_add.choices]
|
||||
|
||||
invite_form = InvitePost()
|
||||
@@ -396,21 +424,36 @@ async def edit_circle(id_: str) -> typing.Union[str, quart.Response]:
|
||||
id_,
|
||||
new_name=form.name.data,
|
||||
)
|
||||
await flash(
|
||||
_("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:
|
||||
print("is valid")
|
||||
await client.add_group_member(
|
||||
id_,
|
||||
form.user_to_add.data,
|
||||
)
|
||||
await flash(
|
||||
_("User added to circle"),
|
||||
"success",
|
||||
)
|
||||
elif form.action_remove_user.data:
|
||||
await client.remove_group_member(
|
||||
id_,
|
||||
form.action_remove_user.data,
|
||||
)
|
||||
await flash(
|
||||
_("User removed from circle"),
|
||||
"success",
|
||||
)
|
||||
|
||||
return redirect(url_for(".edit_circle", id_=id_))
|
||||
else:
|
||||
|
||||
@@ -48,13 +48,20 @@ def context() -> typing.Mapping[str, typing.Any]:
|
||||
|
||||
|
||||
@bp.route("/<id_>")
|
||||
async def view(id_: str) -> str:
|
||||
async def view_old(id_: str) -> quart.Response:
|
||||
return redirect(url_for(".view", id_=id_))
|
||||
|
||||
|
||||
@bp.route("/<id_>/")
|
||||
async def view(id_: str) -> typing.Union[quart.Response,
|
||||
typing.Tuple[str, int],
|
||||
str]:
|
||||
try:
|
||||
invite = await client.get_public_invite_by_id(id_)
|
||||
except aiohttp.ClientResponseError as exc:
|
||||
if exc.status == 404:
|
||||
# invite expired
|
||||
return await render_template("invite_invalid.html")
|
||||
return await render_template("invite_invalid.html"), 404
|
||||
raise
|
||||
|
||||
if invite.reset_localpart is not None:
|
||||
@@ -79,13 +86,20 @@ async def view(id_: str) -> str:
|
||||
)
|
||||
apple_store_url = current_app.config["APPLE_STORE_URL"]
|
||||
|
||||
return await render_template(
|
||||
body = await render_template(
|
||||
"invite_view.html",
|
||||
invite=invite,
|
||||
play_store_url=play_store_url,
|
||||
apple_store_url=apple_store_url,
|
||||
f_droid_url="market://details?id=org.snikket.android",
|
||||
invite_id=id_,
|
||||
)
|
||||
return quart.Response(
|
||||
body,
|
||||
headers={
|
||||
"Link": "<{}> rel=\"alternate\"".format(invite.xmpp_uri),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class RegisterForm(flask_wtf.FlaskForm): # type:ignore
|
||||
|
||||
@@ -15,6 +15,7 @@ from quart import (
|
||||
render_template,
|
||||
request,
|
||||
Response,
|
||||
flash,
|
||||
)
|
||||
|
||||
import babel
|
||||
@@ -52,6 +53,9 @@ async def index() -> quart.Response:
|
||||
return redirect(url_for("index"))
|
||||
|
||||
|
||||
ERR_CREDENTIALS_INVALID = _l("Invalid username or password.")
|
||||
|
||||
|
||||
@bp.route("/login", methods=["GET", "POST"])
|
||||
async def login() -> typing.Union[str, quart.Response]:
|
||||
if client.has_session and (await client.test_session()):
|
||||
@@ -63,33 +67,48 @@ async def login() -> typing.Union[str, quart.Response]:
|
||||
localpart, domain, resource = xmpputil.split_jid(jid)
|
||||
if not localpart:
|
||||
localpart, domain = domain, current_app.config["SNIKKET_DOMAIN"]
|
||||
jid = "{}@{}".format(localpart, domain)
|
||||
password = form.password.data
|
||||
try:
|
||||
await client.login(jid, password)
|
||||
except quart.exceptions.Unauthorized:
|
||||
form.password.errors.append(
|
||||
_("Invalid username or password.")
|
||||
)
|
||||
if domain != current_app.config["SNIKKET_DOMAIN"]:
|
||||
# (a) prosody throws a 400 at us and I prefer to catch that here
|
||||
# and (b) I don’t want to pass on this obviously not-for-here
|
||||
# password further than necessary.
|
||||
form.password.errors.append(ERR_CREDENTIALS_INVALID)
|
||||
else:
|
||||
return redirect(url_for('user.index'))
|
||||
jid = "{}@{}".format(localpart, domain)
|
||||
password = form.password.data
|
||||
try:
|
||||
await client.login(jid, password)
|
||||
except quart.exceptions.Unauthorized:
|
||||
form.password.errors.append(ERR_CREDENTIALS_INVALID)
|
||||
else:
|
||||
await flash(
|
||||
_("Login successful!"),
|
||||
"success"
|
||||
)
|
||||
return redirect(url_for('user.index'))
|
||||
|
||||
return await render_template("login.html", form=form)
|
||||
|
||||
|
||||
@bp.route("/meta/about.html")
|
||||
async def about() -> str:
|
||||
version = None
|
||||
extra_versions = {}
|
||||
if current_app.debug:
|
||||
|
||||
if current_app.debug or client.is_admin_session:
|
||||
version = _version.version
|
||||
extra_versions["Quart"] = quart.__version__
|
||||
extra_versions["aiohttp"] = aiohttp.__version__
|
||||
extra_versions["babel"] = babel.__version__
|
||||
extra_versions["wtforms"] = wtforms.__version__
|
||||
extra_versions["flask-wtf"] = flask_wtf.__version__
|
||||
try:
|
||||
extra_versions["Prosody"] = await client.get_server_version()
|
||||
except quart.exceptions.Unauthorized:
|
||||
extra_versions["Prosody"] = "unknown"
|
||||
|
||||
return await render_template(
|
||||
"about.html",
|
||||
version=_version.version,
|
||||
version=version,
|
||||
extra_versions=extra_versions,
|
||||
)
|
||||
|
||||
@@ -144,3 +163,8 @@ async def avatar(from_: str, code: str) -> quart.Response:
|
||||
|
||||
response.set_data(data)
|
||||
return response
|
||||
|
||||
|
||||
@bp.route("/_health")
|
||||
async def health() -> Response:
|
||||
return Response("STATUS OK", content_type="text/plain")
|
||||
|
||||
@@ -144,6 +144,7 @@ class HTTPSessionManager:
|
||||
async def _create(self) -> aiohttp.ClientSession:
|
||||
return aiohttp.ClientSession(headers={
|
||||
"Accept": "application/json",
|
||||
"Host": current_app.config["SNIKKET_DOMAIN"],
|
||||
})
|
||||
|
||||
async def teardown(self, exc: typing.Optional[BaseException]) -> None:
|
||||
@@ -204,6 +205,7 @@ class HTTPAuthSessionManager(HTTPSessionManager):
|
||||
headers={
|
||||
"Authorization": "Bearer {}".format(token),
|
||||
"Accept": "application/json",
|
||||
"Host": current_app.config["SNIKKET_DOMAIN"],
|
||||
}
|
||||
)
|
||||
|
||||
@@ -330,15 +332,18 @@ class ProsodyClient:
|
||||
)
|
||||
)
|
||||
|
||||
def _store_token_in_session(self, token_info: TokenInfo) -> None:
|
||||
http_session[self.SESSION_TOKEN] = token_info.token
|
||||
http_session[self.SESSION_CACHED_SCOPE] = " ".join(token_info.scopes)
|
||||
|
||||
async def login(self, jid: str, password: str) -> bool:
|
||||
async with self._plain_session as session:
|
||||
token_info = await self._oauth2_bearer_token(
|
||||
session, jid, password,
|
||||
)
|
||||
|
||||
http_session[self.SESSION_TOKEN] = token_info.token
|
||||
self._store_token_in_session(token_info)
|
||||
http_session[self.SESSION_ADDRESS] = jid
|
||||
http_session[self.SESSION_CACHED_SCOPE] = " ".join(token_info.scopes)
|
||||
return True
|
||||
|
||||
@property
|
||||
@@ -443,6 +448,13 @@ class ProsodyClient:
|
||||
headers=final_headers,
|
||||
data=serialised) as resp:
|
||||
if resp.status != 200:
|
||||
self.logger.debug(
|
||||
"IQ HTTP response (in-reply-to id=%s) with non-OK status "
|
||||
"%s: %s",
|
||||
id_,
|
||||
resp.status,
|
||||
resp.reason,
|
||||
)
|
||||
abort(resp.status)
|
||||
reply_payload = await resp.read()
|
||||
self.logger.debug(
|
||||
@@ -491,6 +503,29 @@ class ProsodyClient:
|
||||
async with session.post(self._rest_endpoint, data=req) as resp:
|
||||
return resp.status == 200
|
||||
|
||||
@autosession
|
||||
async def get_server_version(self, session: aiohttp.ClientSession) -> str:
|
||||
_, domain, _ = split_jid(self.session_address)
|
||||
req = {
|
||||
"kind": "iq",
|
||||
"type": "get",
|
||||
"version": True,
|
||||
"to": domain,
|
||||
}
|
||||
|
||||
async with session.post(self._rest_endpoint, data=req) as resp:
|
||||
if resp.status != 200:
|
||||
return "unknwn"
|
||||
try:
|
||||
return (await resp.json())["version"]["version"]
|
||||
except Exception as exc:
|
||||
self.logger.debug(
|
||||
"failed to parse prosody version from response"
|
||||
" (%s: %s)",
|
||||
type(exc), exc,
|
||||
)
|
||||
return "unknown"
|
||||
|
||||
@autosession
|
||||
async def get_user_nickname(
|
||||
self,
|
||||
@@ -765,7 +800,7 @@ class ProsodyClient:
|
||||
# got there, replacing the current session token on the way.
|
||||
|
||||
async with self._plain_session as session:
|
||||
token = await self._oauth2_bearer_token(
|
||||
token_info = await self._oauth2_bearer_token(
|
||||
session,
|
||||
self.session_address,
|
||||
current_password,
|
||||
@@ -777,14 +812,14 @@ class ProsodyClient:
|
||||
new_password
|
||||
),
|
||||
headers={
|
||||
"Authorization": "Bearer {}".format(token),
|
||||
"Authorization": "Bearer {}".format(token_info.token),
|
||||
},
|
||||
sensitive=True,
|
||||
)
|
||||
# TODO: error handling
|
||||
# TODO: obtain a new token using the new password to allow the
|
||||
# server to expire/revoke all tokens on password change.
|
||||
http_session[self.SESSION_TOKEN] = token
|
||||
self._store_token_in_session(token_info)
|
||||
|
||||
def _raise_error_from_response(
|
||||
self,
|
||||
|
||||
@@ -252,3 +252,4 @@ $h-sizes: [200.0%, 174.11011266%, 151.57165665%, 131.95079108%, 114.8698355%, 10
|
||||
$h-small-sizes: [150.0%, 138.31618672%, 127.54245006%, 117.60790225%, 108.44717712%, 100.0%];
|
||||
$small-screen-threshold: 40rem;
|
||||
$medium-screen-threshold: 60rem;
|
||||
$large-screen-threshold: 80rem;
|
||||
|
||||
@@ -33,13 +33,35 @@ body {
|
||||
|
||||
main {
|
||||
padding: $w-l1;
|
||||
margin-left: auto;
|
||||
max-width: 60rem;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
#mwrap {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: row-reverse;
|
||||
|
||||
> .filler, > .flashbox {
|
||||
flex: 1 1 1rem;
|
||||
}
|
||||
|
||||
> main {
|
||||
flex: 0 1 60rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: $large-screen-threshold) {
|
||||
#mwrap {
|
||||
display: block;
|
||||
|
||||
> main {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.flashbox > div.box > :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* top bar */
|
||||
@@ -67,6 +89,10 @@ div#topbar {
|
||||
font-size: $_top-h-size;
|
||||
line-height: 1.5;
|
||||
|
||||
body.debug & {
|
||||
color: red;
|
||||
}
|
||||
|
||||
@media screen and (max-width: $small-screen-threshold) {
|
||||
font-size: $_top-h-small-size;
|
||||
}
|
||||
@@ -134,22 +160,20 @@ body > footer {
|
||||
background-color: $gray-100;
|
||||
color: $gray-800;
|
||||
padding: 0 $w-l1;
|
||||
font-size: 92.21079115%;
|
||||
|
||||
ul {
|
||||
display: block;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style-type: none;
|
||||
text-align: center;
|
||||
line-height: 1.6267076567643135;
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
margin: $w-l1 0;
|
||||
}
|
||||
|
||||
li:before {
|
||||
content: '•';
|
||||
padding-right: $w-s2;
|
||||
display: block;
|
||||
margin: $w-s1 0;
|
||||
}
|
||||
|
||||
a, a:visited, a:hover, a:active, a:focus {
|
||||
@@ -993,6 +1017,23 @@ div.profile-card {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
input[type="submit"], button, .button {
|
||||
&.slimmify {
|
||||
> svg.icon {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
> span {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
top: -100px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* clipboard button */
|
||||
|
||||
@@ -54,6 +54,8 @@ div.install-buttons {
|
||||
ul {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
list-style-type: none;
|
||||
margin: $w-l1 0;
|
||||
padding: 0;
|
||||
@@ -74,6 +76,10 @@ img.play {
|
||||
height: $w-l3;
|
||||
}
|
||||
|
||||
img.fdroid {
|
||||
height: $w-l3;
|
||||
}
|
||||
|
||||
.tabbox {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
BIN
snikket_web/static/img/f-droid-badge.png
Normal file
BIN
snikket_web/static/img/f-droid-badge.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -3,5 +3,7 @@
|
||||
{#- -#}
|
||||
<li>{% trans about_url=url_for('main.about') %}A <a href="{{ about_url }}">Snikket</a> service{% endtrans %}</li>
|
||||
{#- -#}
|
||||
<li>{% trans %}“Snikket” and the parrot logo are trademarks of Snikket Community Interest Company.{% endtrans %}</li>
|
||||
{#- -#}
|
||||
</ul>
|
||||
</footer>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% extends "base.html" %}
|
||||
{% from "library.j2" import standard_button %}
|
||||
{% block head_lead %}
|
||||
<title>About Snikket</title>
|
||||
<title>{% trans %}About Snikket{% endtrans %}</title>
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<main>
|
||||
@@ -14,10 +14,12 @@
|
||||
<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>Snikket Server
|
||||
Domain: {{ config["SNIKKET_DOMAIN"] }}
|
||||
Snikket Web Portal ({{ version }})
|
||||
Snikket Web Portal{% if version %} ({{ version }}){% endif %}
|
||||
{%- if extra_versions -%}
|
||||
{% for name, version in extra_versions.items() %}
|
||||
{{ name }} ({{ version }}){% endfor %}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<col/>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans %}Valid until{% endtrans %}</th>
|
||||
<th>{% trans %}Expires{% endtrans %}</th>
|
||||
<th class="collapsible">{% trans %}Type{% endtrans %}</th>
|
||||
<th class="collapsible">{% trans %}Circle{% endtrans %}</th>
|
||||
<th>{% trans %}Actions{% endtrans %}</th>
|
||||
|
||||
@@ -5,5 +5,5 @@
|
||||
{% endblock %}
|
||||
{% block topbar_right %}
|
||||
{{- super() -}}
|
||||
{% call standard_button("logout", url_for("user.logout"), class="tertiary") %}{% trans %}Log out{% endtrans %}{% endcall %}
|
||||
{% call standard_button("logout", url_for("user.logout"), class="tertiary slimmify") %}{% trans %}Log out{% endtrans %}{% endcall %}
|
||||
{%- endblock %}
|
||||
|
||||
@@ -16,5 +16,5 @@
|
||||
<meta name="msapplication-TileColor" content="#fbd308">
|
||||
<meta name="theme-color" content="#fbd308">
|
||||
</head>
|
||||
<body{% if body_id | default(False) %} id="{{ body_id }}"{% endif %}{% if body_class | default(False) %} class="{{ body_class }}"{% endif %}{% if onload | default(False) %} onload="{{ onload }}"{% endif %}>{% block body %}{% endblock %}</body>
|
||||
<body{% if body_id | default(False) %} id="{{ body_id }}"{% endif %} class="{% if is_in_debug_mode %}debug{% endif %}{% if body_class | default(False) %} {{ body_class }}{% endif %}"{% if onload | default(False) %} onload="{{ onload }}"{% endif %}>{% block body %}{% endblock %}</body>
|
||||
</html>
|
||||
|
||||
@@ -5,6 +5,6 @@
|
||||
<link rel="stylesheet" type="text/css" href="{{ url_for("static", filename="css/invite.css") }}">
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<div id="mwrap"><main>{% block content %}{% endblock %}</main></div>
|
||||
<div id="mwrap"><div class="filler"></div><main>{% block content %}{% endblock %}</main><div class="filler"></div></div>
|
||||
{%- include "_footer.html" -%}
|
||||
{% endblock %}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<title>{% trans site_name=config["SITE_NAME"] %}Invite to {{ site_name }} | Snikket{% endtrans %}</title>
|
||||
<script async type="text/javascript" src="{{ url_for("static", filename="js/invite-magic.js") }}"></script>
|
||||
<script async type="text/javascript" src="{{ url_for("static", filename="js/qrcode.min.js") }}"></script>
|
||||
<link rel="alternate" href="{{ invite.xmpp_uri }}">
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="elevated box el-3">
|
||||
@@ -26,11 +27,12 @@
|
||||
<ul>
|
||||
<li><a href="{{ play_store_url }}"><img alt='{% trans %}Get it on Google Play{% endtrans %}' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png' class="play"/></a></li>
|
||||
{%- if apple_store_url -%}
|
||||
<li><a href="{{ apple_store_url }}"><img alt='{% trans %}Download on the App Store{% endtrans %}' src="{{ apple_store_badge() }}" class="apple"></a></li>
|
||||
<li><a href="{{ apple_store_url }}" class="popover" data-popover-id="apple-popover"><img alt='{% trans %}Download on the App Store{% endtrans %}' src="{{ apple_store_badge() }}" class="apple"></a></li>
|
||||
{%- endif -%}
|
||||
<li><a href="{{ f_droid_url }}" class="popover" data-popover-id="fdroid-popover"><img alt='{% trans %}Get it on F-Droid{% endtrans %}' src='{{ url_for('static', filename='img/f-droid-badge.png') }}' class="fdroid"/></a></li>
|
||||
</ul>
|
||||
{%- call standard_button("qrcode", "#qr-modal", class="primary", onclick="open_modal(this); return false;") -%}
|
||||
{% trans %}Not on mobile?{% endtrans %}
|
||||
{% trans %}Send to mobile device{% endtrans %}
|
||||
{%- endcall -%}
|
||||
</div>
|
||||
<p>{% trans %}After installation the app should automatically open and prompt you to create an account. If not, simply click the button below.{% endtrans %}</p>
|
||||
@@ -83,10 +85,77 @@
|
||||
{%- endcall -%}
|
||||
</div>
|
||||
</div>
|
||||
{%- if apple_store_url -%}
|
||||
<div id="apple-popover" class="modal" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;" onclick="close_modal(this); return false;">
|
||||
<div role="document" class="elevated box el-2" onclick="event.stopPropagation();">
|
||||
<header class="modal-title">
|
||||
{#- -#}
|
||||
<span>{% trans %}Install on iOS{% endtrans %}</span>
|
||||
{#- -#}
|
||||
{%- call action_button("close", "#", onclick="close_modal(this.parentNode.parentNode.parentNode); return false;", class="tertiary") -%}
|
||||
{% trans %}Close{% endtrans %}
|
||||
{%- endcall -%}
|
||||
</header>
|
||||
<p>{% trans %}After downloading Snikket from the app store, you have to return to this invite link and tap on "Open the app" to proceed.{% endtrans %}</p>
|
||||
<ol>
|
||||
<li><p>{% trans %}First download Snikket from the app store using the button below:{% endtrans %}</p>
|
||||
<p><a href="{{ apple_store_url }}"><img alt='{% trans %}Download on the App Store{% endtrans %}' src="{{ apple_store_badge() }}" class="apple"></a></p>
|
||||
<li><p>{% trans %}After the installation is complete, you can return to this page and tap the "Open the app" button to continue with the setup:{% endtrans %}</p>
|
||||
<p>
|
||||
{%- call standard_button("exit_to_app", invite.xmpp_uri, class="primary") -%}
|
||||
{% trans %}Open the app{% endtrans %}
|
||||
{%- endcall -%}
|
||||
</p></li>
|
||||
</ol>
|
||||
{#- -#}
|
||||
{%- call standard_button("close", "#", onclick="close_modal(this.parentNode.parentNode); return false;", class="secondary") -%}
|
||||
{% trans %}Close{% endtrans %}
|
||||
{%- endcall -%}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif -%}
|
||||
<div id="fdroid-popover" class="modal" tabindex="-1" role="dialog" aria-hidden="true" style="display: none;" onclick="close_modal(this); return false;">
|
||||
<div role="document" class="elevated box el-2" onclick="event.stopPropagation();">
|
||||
<header class="modal-title">
|
||||
{#- -#}
|
||||
<span>{% trans %}Install via F-Droid{% endtrans %}</span>
|
||||
{#- -#}
|
||||
{%- call action_button("close", "#", onclick="close_modal(this.parentNode.parentNode.parentNode); return false;", class="tertiary") -%}
|
||||
{% trans %}Close{% endtrans %}
|
||||
{%- endcall -%}
|
||||
</header>
|
||||
<p>{% trans %}After installing Snikket via F-Droid, you have to return to this invite link and tap on "Open the app" to proceed.{% endtrans %}</p>
|
||||
<ol>
|
||||
<li><p>{% trans %}First install Snikket from F-Droid using the button below:{% endtrans %}</p>
|
||||
<p><a href="{{ f_droid_url }}" class="popover" data-popover-id="fdroid-popover"><img alt='{% trans %}Install via F-Droid{% endtrans %}' src='{{ url_for('static', filename='img/f-droid-badge.png') }}' class="fdroid"/></a></p></li>
|
||||
<li><p>{% trans %}After the installation is complete, you can return to this page and tap the "Open the app" button to continue with the setup:{% endtrans %}</p>
|
||||
<p>
|
||||
{%- call standard_button("exit_to_app", invite.xmpp_uri, class="primary") -%}
|
||||
{% trans %}Open the app{% endtrans %}
|
||||
{%- endcall -%}
|
||||
</p></li>
|
||||
</ol>
|
||||
{#- -#}
|
||||
{%- call standard_button("close", "#", onclick="close_modal(this.parentNode.parentNode); return false;", class="secondary") -%}
|
||||
{% trans %}Close{% endtrans %}
|
||||
{%- endcall -%}
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var catch_popover = function() {
|
||||
open_modal(this);
|
||||
return false;
|
||||
}
|
||||
|
||||
var onload = function() {
|
||||
apply_qr_code(document.getElementById("qr-invite-page"));
|
||||
apply_qr_code(document.getElementById("qr-uri"));
|
||||
var popover_as = document.getElementsByClassName("popover");
|
||||
for (var i = 0; i < popover_as.length; ++i) {
|
||||
var a = popover_as[i];
|
||||
a.onclick = catch_popover;
|
||||
a.href = "#" + a.dataset.popoverId;
|
||||
}
|
||||
};
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -9,16 +9,20 @@
|
||||
{{ super() }}
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<div id="mwrap"><main><div class="form layout-expanded">
|
||||
<div id="mwrap"><div class="filler"></div><main><div class="form layout-expanded">
|
||||
<h1 class="form-title">{{ config["SITE_NAME"] }}</h1>
|
||||
<p class="form-desc">{{ _("Enter your Snikket address and password to manage your account.") }}</p>
|
||||
<form method="POST" action="{{ url_for('.login') }}" name="login">
|
||||
<form method="POST" action="{{ url_for('.login') }}" name="login" id="login-form" onsubmit="return domainCheck();" data-addressid="{{ form.address.id }}" data-domain="{{ config["SNIKKET_DOMAIN"] }}">
|
||||
{{ form.csrf_token }}
|
||||
{% if form.errors %}
|
||||
{% call box("alert", _("Login failed")) %}
|
||||
<p>{{ form.errors.values() | flatten | join(", ")}}</p>
|
||||
{% endcall %}
|
||||
{% endif %}
|
||||
<div class="box alert" role="alert" style="display: none;" id="id-warning">
|
||||
<header>{% trans %}Incorrect address{% endtrans %}</header>
|
||||
<p>{% trans snikket_domain=config["SNIKKET_DOMAIN"] %}This Snikket service only hosts addresses ending in <em>@{{ snikket_domain }}</em>. Your password was not sent.{% endtrans %}</p>
|
||||
</div>
|
||||
<div class="f-ebox">
|
||||
{{ form.address.label(class="a11y-only") }}
|
||||
{{ form.address(placeholder=form.address.label.text) }}
|
||||
@@ -31,8 +35,22 @@
|
||||
{%- call form_button("login", form.action_signin, class="primary") -%}{% endcall -%}
|
||||
</div>
|
||||
</from>
|
||||
</div></main></div>
|
||||
<footer>
|
||||
<ul><li>{% trans about_url=url_for('.about') %}A <a href="{{ about_url }}">Snikket</a> service{% endtrans %}</li></ul>
|
||||
</footer>
|
||||
<script type="text/javascript">
|
||||
var domainCheck = function() {
|
||||
var form = document.getElementById("login-form");
|
||||
var addressId = form.dataset.addressid;
|
||||
var addressField = document.getElementById(addressId);
|
||||
var domain = form.dataset.domain;
|
||||
var address = addressField.value;
|
||||
var errorBox = document.getElementById("id-warning");
|
||||
if (address.includes("@") && !address.endsWith(domain)) {
|
||||
errorBox.style.display = "block";
|
||||
return false;
|
||||
}
|
||||
errorBox.style.display = "none";
|
||||
return true;
|
||||
};
|
||||
</script>
|
||||
</div></main><div class="filler"></div></div>
|
||||
{%- include "_footer.html" -%}
|
||||
{% endblock %}
|
||||
|
||||
@@ -7,6 +7,25 @@
|
||||
<div class="filler"></div>
|
||||
{% block topbar_right %}{% endblock %}
|
||||
</div>
|
||||
<div id="mwrap"><main>{% block content %}{% endblock %}</main></div>
|
||||
<div id="mwrap">
|
||||
{#- -#}
|
||||
<div class="flashbox" id="flashbox">
|
||||
{%- for category, message in get_flashed_messages(True) -%}
|
||||
<div class="box {{ category }} el-5" role="alert">
|
||||
{% if category == "success" %}
|
||||
<header>{% trans %}Operation successful{% endtrans %}</header>
|
||||
{% elif category == "alert" %}
|
||||
<header>{% trans %}Error{% endtrans %}</header>
|
||||
{% endif %}
|
||||
<p>{{ message }}</p>
|
||||
</div>
|
||||
{%- endfor -%}
|
||||
</div>
|
||||
{#- -#}
|
||||
<main>{% block content %}{% endblock %}</main>
|
||||
{#- -#}
|
||||
<div class="filler"></div>
|
||||
{#- -#}
|
||||
</div>
|
||||
{%- include "_footer.html" -%}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
{% extends "app.html" %}
|
||||
{% from "library.j2" import standard_button, form_button %}
|
||||
{% block head_lead %}
|
||||
<title>Snikket Web Portal</title>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="form layout-expanded"><form method="POST">
|
||||
<h2 class="form-title">{% trans %}Sign out of the Snikket Web Portal{% endtrans %}</h2>
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
{% extends "app.html" %}
|
||||
{% from "library.j2" import standard_button, custom_form_button, render_errors %}
|
||||
{% block head_lead %}
|
||||
<title>Snikket Web Portal</title>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="form layout-expanded"><form method="POST">
|
||||
<h1 class="form-title">{% trans %}Change your password{% endtrans %}</h1>
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
{% extends "app.html" %}
|
||||
{% from "library.j2" import standard_button, form_button, avatar with context %}
|
||||
{% block head_lead %}
|
||||
<title>Snikket Web Portal</title>
|
||||
{% endblock %}
|
||||
{% from "library.j2" import standard_button, form_button, render_errors, avatar with context %}
|
||||
{% block content %}
|
||||
<h1>{% trans %}Update your profile{% endtrans %}</h1>
|
||||
<div class="form layout-expanded"><form method="POST" enctype="multipart/form-data">
|
||||
<h2 class="form-title">{% trans %}Profile{% endtrans %}</h2>
|
||||
{{ form.csrf_token }}
|
||||
{% call render_errors(form) %}{% endcall %}
|
||||
<div class="f-ebox">
|
||||
{{ form.nickname.label }}
|
||||
{{ form.nickname(placeholder=user_info.username) }}
|
||||
@@ -16,7 +14,10 @@
|
||||
{{ form.avatar.label }}
|
||||
<div class="avatar-wrap">
|
||||
{%- call avatar(user_info.address, user_info.avatar_hash ) %}{% endcall -%}
|
||||
{{ form.avatar }}
|
||||
{{ form.avatar(accept="image/png",
|
||||
data_maxsize=max_avatar_size,
|
||||
data_warning_header=avatar_too_big_warning_header,
|
||||
data_maxsize_warning=avatar_too_big_warning) }}
|
||||
</div>
|
||||
</div>
|
||||
<h3 class="form-title">{% trans %}Visibility{% endtrans %}</h3>
|
||||
@@ -31,5 +32,24 @@
|
||||
{%- call standard_button("back", url_for('.index'), class="secondary") %}{% trans %}Back{% endtrans %}{% endcall -%}
|
||||
{%- call form_button("done", form.action_save, class="primary") %}{% endcall -%}
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
document.getElementById("{{ form.avatar.id }}").onchange = function() {
|
||||
var maxsize_s = this.dataset.maxsize;
|
||||
var maxsize = parseInt(maxsize_s);
|
||||
var existing_alert = document.getElementById("avatar-alert");
|
||||
if (existing_alert) {
|
||||
existing_alert.parentNode.removeChild(existing_alert);
|
||||
}
|
||||
if (this.files[0].size > maxsize) {
|
||||
var warning_header = this.dataset.warningHeader;
|
||||
var warning_text = this.dataset.maxsizeWarning;
|
||||
this.setCustomValidity(warning_text);
|
||||
this.reportValidity();
|
||||
this.value = null;
|
||||
} else {
|
||||
this.setCustomValidity("");
|
||||
}
|
||||
};
|
||||
</script>
|
||||
</form></div>
|
||||
{% endblock %}
|
||||
|
||||
1238
snikket_web/translations/da/LC_MESSAGES/messages.po
Normal file
1238
snikket_web/translations/da/LC_MESSAGES/messages.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2021-01-30 12:45+0100\n"
|
||||
"PO-Revision-Date: 2021-01-23 17:06+0000\n"
|
||||
"Last-Translator: Matthew Wild <matthew@snikket.org>\n"
|
||||
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
|
||||
"PO-Revision-Date: 2021-02-02 21:01+0000\n"
|
||||
"Last-Translator: riccio <unriccio@email.it>\n"
|
||||
"Language-Team: English (United Kingdom) <https://i18n.sotecware.net/projects/"
|
||||
"snikket/web-portal/en_GB/>\n"
|
||||
"Language: en_GB\n"
|
||||
@@ -24,208 +24,296 @@ msgstr ""
|
||||
msgid "Delete user permanently"
|
||||
msgstr "Delete user permanently"
|
||||
|
||||
#: snikket_web/admin.py:129
|
||||
#: snikket_web/admin.py:73
|
||||
#, fuzzy
|
||||
#| msgid "deleted"
|
||||
msgid "User deleted"
|
||||
msgstr "deleted"
|
||||
|
||||
#: snikket_web/admin.py:116
|
||||
#, fuzzy
|
||||
#| msgid "Password reset link for %(user_name)s"
|
||||
msgid "Password reset link created"
|
||||
msgstr "Password reset link for %(user_name)s"
|
||||
|
||||
#: snikket_web/admin.py:122
|
||||
#, fuzzy
|
||||
#| msgid "Create password reset links or delete users."
|
||||
msgid "Password reset link deleted"
|
||||
msgstr "Create password reset links or delete users."
|
||||
|
||||
#: snikket_web/admin.py:141
|
||||
msgid "Invite to circle"
|
||||
msgstr "Invite to circle"
|
||||
|
||||
#: snikket_web/admin.py:135
|
||||
#: snikket_web/admin.py:147
|
||||
msgid "At least one circle must be selected"
|
||||
msgstr "At least one circle must be selected"
|
||||
|
||||
#: snikket_web/admin.py:140
|
||||
#: snikket_web/admin.py:152
|
||||
msgid "Valid for"
|
||||
msgstr "Valid for"
|
||||
|
||||
#: snikket_web/admin.py:142
|
||||
#: snikket_web/admin.py:154
|
||||
msgid "One hour"
|
||||
msgstr "One hour"
|
||||
|
||||
#: snikket_web/admin.py:143
|
||||
#: snikket_web/admin.py:155
|
||||
msgid "Twelve hours"
|
||||
msgstr "Twelve hours"
|
||||
|
||||
#: snikket_web/admin.py:144
|
||||
#: snikket_web/admin.py:156
|
||||
msgid "One day"
|
||||
msgstr "One day"
|
||||
|
||||
#: snikket_web/admin.py:145
|
||||
#: snikket_web/admin.py:157
|
||||
msgid "One week"
|
||||
msgstr "One week"
|
||||
|
||||
#: snikket_web/admin.py:146
|
||||
#: snikket_web/admin.py:158
|
||||
msgid "Four weeks"
|
||||
msgstr "Four weeks"
|
||||
|
||||
#: snikket_web/admin.py:152 snikket_web/templates/admin_edit_invite.html:17
|
||||
#, fuzzy
|
||||
#| msgid "View invitation"
|
||||
#: snikket_web/admin.py:164 snikket_web/templates/admin_edit_invite.html:17
|
||||
msgid "Invitation type"
|
||||
msgstr "View invitation"
|
||||
msgstr "Invitation type"
|
||||
|
||||
#: snikket_web/admin.py:154 snikket_web/templates/library.j2:116
|
||||
#: snikket_web/admin.py:166 snikket_web/templates/library.j2:116
|
||||
msgid "Individual"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:155 snikket_web/templates/library.j2:114
|
||||
#: snikket_web/admin.py:167 snikket_web/templates/library.j2:114
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:161
|
||||
#: snikket_web/admin.py:173
|
||||
msgid "New invitation link"
|
||||
msgstr "New invitation link"
|
||||
|
||||
#: snikket_web/admin.py:223
|
||||
#: snikket_web/admin.py:235
|
||||
msgid "Revoke"
|
||||
msgstr "Revoke"
|
||||
|
||||
#: snikket_web/admin.py:283 snikket_web/admin.py:327
|
||||
#: snikket_web/admin.py:259
|
||||
#, fuzzy
|
||||
#| msgid "Invitation type"
|
||||
msgid "Invitation created"
|
||||
msgstr "Invitation type"
|
||||
|
||||
#: snikket_web/admin.py:275
|
||||
#, fuzzy
|
||||
#| msgid "New invitation link"
|
||||
msgid "No such invitation exists"
|
||||
msgstr "New invitation link"
|
||||
|
||||
#: snikket_web/admin.py:290
|
||||
#, fuzzy
|
||||
#| msgid "Invitation type"
|
||||
msgid "Invitation revoked"
|
||||
msgstr "Invitation type"
|
||||
|
||||
#: snikket_web/admin.py:307 snikket_web/admin.py:355
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: snikket_web/admin.py:288 snikket_web/templates/admin_circles.html:47
|
||||
#: snikket_web/admin.py:312 snikket_web/templates/admin_circles.html:47
|
||||
msgid "Create circle"
|
||||
msgstr "Create circle"
|
||||
|
||||
#: snikket_web/admin.py:332
|
||||
#: snikket_web/admin.py:342
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle created"
|
||||
msgstr "Circle name"
|
||||
|
||||
#: snikket_web/admin.py:360
|
||||
msgid "Select user"
|
||||
msgstr "Select user"
|
||||
|
||||
#: snikket_web/admin.py:337
|
||||
#: snikket_web/admin.py:365
|
||||
#, fuzzy
|
||||
#| msgid "Create circle"
|
||||
msgid "Update circle"
|
||||
msgstr "Create circle"
|
||||
|
||||
#: snikket_web/admin.py:341
|
||||
#: snikket_web/admin.py:369
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Delete circle permanently"
|
||||
|
||||
#: snikket_web/admin.py:347
|
||||
#: snikket_web/admin.py:375
|
||||
msgid "Add user"
|
||||
msgstr "Add user"
|
||||
|
||||
#: snikket_web/admin.py:391
|
||||
#, fuzzy
|
||||
#| msgid "No circles"
|
||||
msgid "No such circle exists"
|
||||
msgstr "No circles"
|
||||
|
||||
#: snikket_web/admin.py:428
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle data updated"
|
||||
msgstr "Circle name"
|
||||
|
||||
#: snikket_web/admin.py:434
|
||||
#, fuzzy
|
||||
#| msgid "deleted"
|
||||
msgid "Circle deleted"
|
||||
msgstr "deleted"
|
||||
|
||||
#: snikket_web/admin.py:445
|
||||
#, fuzzy
|
||||
#| msgid "Invite to circle"
|
||||
msgid "User added to circle"
|
||||
msgstr "Invite to circle"
|
||||
|
||||
#: snikket_web/admin.py:454
|
||||
#, fuzzy
|
||||
#| msgid "Remove user %(username)s from circle"
|
||||
msgid "User removed from circle"
|
||||
msgstr "Remove user %(username)s from circle"
|
||||
|
||||
#: snikket_web/infra.py:40
|
||||
msgid "Main"
|
||||
msgstr "Main"
|
||||
|
||||
#: snikket_web/invite.py:93
|
||||
#: snikket_web/invite.py:104
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:97 snikket_web/invite.py:164 snikket_web/main.py:41
|
||||
#: snikket_web/invite.py:108 snikket_web/invite.py:175 snikket_web/main.py:42
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: snikket_web/invite.py:101 snikket_web/invite.py:168
|
||||
#: snikket_web/invite.py:112 snikket_web/invite.py:179
|
||||
#, fuzzy
|
||||
#| msgid "Confirm new password"
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirm new password"
|
||||
|
||||
#: snikket_web/invite.py:105 snikket_web/invite.py:172
|
||||
#, fuzzy
|
||||
#| msgid "The new passwords must match."
|
||||
#: snikket_web/invite.py:116 snikket_web/invite.py:183
|
||||
msgid "The passwords must match"
|
||||
msgstr "The new passwords must match."
|
||||
msgstr "The passwords must match"
|
||||
|
||||
#: snikket_web/invite.py:110
|
||||
#: snikket_web/invite.py:121
|
||||
#, fuzzy
|
||||
#| msgid "Create circle"
|
||||
msgid "Create account"
|
||||
msgstr "Create circle"
|
||||
|
||||
#: snikket_web/invite.py:137
|
||||
#: snikket_web/invite.py:148
|
||||
msgid "That username is already taken"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:141 snikket_web/invite.py:205
|
||||
#: snikket_web/invite.py:152 snikket_web/invite.py:216
|
||||
msgid "Registration was declined for unknown reasons"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:145
|
||||
#: snikket_web/invite.py:156
|
||||
msgid "The username is not valid"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:177 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:32
|
||||
#: snikket_web/invite.py:188 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:29
|
||||
msgid "Change password"
|
||||
msgstr "Change password"
|
||||
|
||||
#: snikket_web/main.py:36
|
||||
#: snikket_web/main.py:37
|
||||
msgid "Address"
|
||||
msgstr "Address"
|
||||
|
||||
#: snikket_web/main.py:46
|
||||
#: snikket_web/main.py:47
|
||||
msgid "Sign in"
|
||||
msgstr "Sign in"
|
||||
|
||||
#: snikket_web/main.py:72
|
||||
#: snikket_web/main.py:56
|
||||
#, fuzzy
|
||||
#| msgid "Invalid user name or password."
|
||||
msgid "Invalid username or password."
|
||||
msgstr "Invalid user name or password."
|
||||
|
||||
#: snikket_web/user.py:21
|
||||
#: snikket_web/main.py:84
|
||||
msgid "Login successful!"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:28
|
||||
msgid "Current password"
|
||||
msgstr "Current password"
|
||||
|
||||
#: snikket_web/user.py:26
|
||||
#: snikket_web/user.py:33
|
||||
msgid "New password"
|
||||
msgstr "New password"
|
||||
|
||||
#: snikket_web/user.py:31
|
||||
#: snikket_web/user.py:38
|
||||
msgid "Confirm new password"
|
||||
msgstr "Confirm new password"
|
||||
|
||||
#: snikket_web/user.py:35
|
||||
#, fuzzy
|
||||
#| msgid "The new passwords must match."
|
||||
msgid "The new passwords must match"
|
||||
msgstr "The new passwords must match."
|
||||
|
||||
#: snikket_web/user.py:42
|
||||
msgid "The new passwords must match"
|
||||
msgstr "The new passwords must match"
|
||||
|
||||
#: snikket_web/user.py:49
|
||||
msgid "Sign out"
|
||||
msgstr "Sign out"
|
||||
|
||||
#: snikket_web/user.py:47
|
||||
#: snikket_web/user.py:54
|
||||
msgid "Nobody"
|
||||
msgstr "Nobody"
|
||||
|
||||
#: snikket_web/user.py:48
|
||||
#: snikket_web/user.py:55
|
||||
msgid "Friends only"
|
||||
msgstr "Friends only"
|
||||
|
||||
#: snikket_web/user.py:49
|
||||
#: snikket_web/user.py:56
|
||||
msgid "Everyone"
|
||||
msgstr "Everyone"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:12
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:55
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:62
|
||||
msgid "Display name"
|
||||
msgstr "Display name"
|
||||
|
||||
#: snikket_web/user.py:59
|
||||
#: snikket_web/user.py:66
|
||||
msgid "Avatar"
|
||||
msgstr "Avatar"
|
||||
|
||||
#: snikket_web/user.py:63
|
||||
#: snikket_web/user.py:70
|
||||
msgid "Profile visibility"
|
||||
msgstr "Profile visibility"
|
||||
|
||||
#: snikket_web/user.py:68
|
||||
#: snikket_web/user.py:75
|
||||
msgid "Update profile"
|
||||
msgstr "Update profile"
|
||||
|
||||
#: snikket_web/user.py:93
|
||||
#: snikket_web/user.py:100
|
||||
msgid "Incorrect password"
|
||||
msgstr "Incorrect password"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4 snikket_web/templates/login.html:36
|
||||
#: snikket_web/user.py:104
|
||||
#, fuzzy
|
||||
#| msgid "Password change failed"
|
||||
msgid "Password changed"
|
||||
msgstr "Password change failed"
|
||||
|
||||
#: snikket_web/user.py:146
|
||||
#, fuzzy
|
||||
#| msgid "Profile"
|
||||
msgid "Profile updated"
|
||||
msgstr "Profile"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4
|
||||
#, python-format
|
||||
msgid "A <a href=\"%(about_url)s\">Snikket</a> service"
|
||||
msgstr "A <a href=\"%(about_url)s\">Snikket</a> service"
|
||||
|
||||
#: snikket_web/templates/about.html:9
|
||||
#: snikket_web/templates/_footer.html:6
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
|
||||
msgid "About Snikket"
|
||||
msgstr "About Snikket"
|
||||
|
||||
@@ -285,10 +373,22 @@ msgstr ""
|
||||
"\"%(apache20_url)s\">Apache 2.0 License</a>."
|
||||
|
||||
#: snikket_web/templates/about.html:17
|
||||
msgid "Trademarks"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company. For more information about the trademarks, visit the <a href="
|
||||
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:19
|
||||
msgid "Software Versions"
|
||||
msgstr "Software Versions"
|
||||
|
||||
#: snikket_web/templates/about.html:27
|
||||
#: snikket_web/templates/about.html:29
|
||||
msgid "Back to the main page"
|
||||
msgstr "Back to the main page"
|
||||
|
||||
@@ -385,7 +485,7 @@ msgid "Debug information for %(user_name)s"
|
||||
msgstr "Debug information for %(user_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_debug_user.html:11
|
||||
#: snikket_web/templates/user_passwd.html:26
|
||||
#: snikket_web/templates/user_passwd.html:23
|
||||
msgid "Warning"
|
||||
msgstr "Warning"
|
||||
|
||||
@@ -435,9 +535,9 @@ msgstr ""
|
||||
#: snikket_web/templates/admin_edit_circle.html:44
|
||||
#: snikket_web/templates/admin_edit_invite.html:49
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:13
|
||||
#: snikket_web/templates/user_passwd.html:30
|
||||
#: snikket_web/templates/user_profile.html:31
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:28
|
||||
msgid "Back"
|
||||
msgstr "Back"
|
||||
|
||||
@@ -515,7 +615,6 @@ msgid "View invitation"
|
||||
msgstr "View invitation"
|
||||
|
||||
#: snikket_web/templates/admin_edit_invite.html:13
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
#: snikket_web/templates/admin_reset_user_password.html:15
|
||||
msgid "Valid until"
|
||||
msgstr "Valid until"
|
||||
@@ -574,10 +673,8 @@ msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_home.html:11
|
||||
#, fuzzy
|
||||
#| msgid "Create password reset link for %(user_name)s"
|
||||
msgid "Create password reset links or delete users."
|
||||
msgstr "Create password reset link for %(user_name)s"
|
||||
msgstr "Create password reset links or delete users."
|
||||
|
||||
#: snikket_web/templates/admin_home.html:15
|
||||
#: snikket_web/templates/admin_users.html:4
|
||||
@@ -619,6 +716,10 @@ msgstr ""
|
||||
msgid "Pending invitations"
|
||||
msgstr "Pending invitations"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
msgid "Expires"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:22
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
@@ -702,16 +803,15 @@ msgid "The web portal encountered an internal error."
|
||||
msgstr "The web portal encountered an internal error."
|
||||
|
||||
#: snikket_web/templates/invite_invalid.html:5
|
||||
#: snikket_web/templates/invite_view.html:12
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit user %(user_name)s"
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#, python-format
|
||||
msgid "Invite to %(site_name)s"
|
||||
msgstr "Edit user %(user_name)s"
|
||||
msgstr "Invite to %(site_name)s"
|
||||
|
||||
#: snikket_web/templates/invite_invalid.html:6
|
||||
#: snikket_web/templates/invite_register.html:10
|
||||
#: snikket_web/templates/invite_success.html:11
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#: snikket_web/templates/invite_view.html:14
|
||||
#, python-format
|
||||
msgid "Powered by <img src=\"%(logo_url)s\" alt=\"Snikket\">"
|
||||
msgstr ""
|
||||
@@ -732,10 +832,9 @@ msgid "Register on %(site_name)s | Snikket"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:9
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Edit user %(user_name)s"
|
||||
#, python-format
|
||||
msgid "Register on %(site_name)s"
|
||||
msgstr "Edit user %(user_name)s"
|
||||
msgstr "Register on %(site_name)s"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:11
|
||||
#, python-format
|
||||
@@ -757,18 +856,18 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:14
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
#: snikket_web/templates/invite_view.html:38
|
||||
msgid "App already installed?"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:16
|
||||
#: snikket_web/templates/invite_reset_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:39
|
||||
#: snikket_web/templates/invite_view.html:40
|
||||
msgid "Open the app"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:18
|
||||
#: snikket_web/templates/invite_view.html:41
|
||||
#: snikket_web/templates/invite_view.html:42
|
||||
msgid "This button works only if you have the app installed already!"
|
||||
msgstr ""
|
||||
|
||||
@@ -861,7 +960,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:26
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
#: snikket_web/templates/invite_view.html:76
|
||||
msgid ""
|
||||
"Your camera will turn on. Point it at the square code below until it is "
|
||||
"within the highlighted square on your screen, and wait until the app "
|
||||
@@ -873,7 +972,7 @@ msgid "You will then be prompted to enter a new password for your account."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:43
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
msgid "Alternatives"
|
||||
msgstr ""
|
||||
|
||||
@@ -917,54 +1016,54 @@ msgstr ""
|
||||
msgid "Invite to %(site_name)s | Snikket"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:15
|
||||
#: snikket_web/templates/invite_view.html:16
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat with %(inviter_name)s using Snikket, a secure, "
|
||||
"privacy-friendly chat app on %(site_name)s."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:17
|
||||
#: snikket_web/templates/invite_view.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat on %(site_name)s using Snikket, a secure, "
|
||||
"privacy-friendly chat app."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:19
|
||||
#: snikket_web/templates/invite_view.html:20
|
||||
msgid "Get started"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:22
|
||||
msgid "Install the Snikket App on your Android or iOS device."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:23
|
||||
#: snikket_web/templates/invite_view.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Install the Snikket App on your Android device (<a href=\"%(ios_info_url)s\" "
|
||||
"rel=\"noopener noreferrer\" target=\"_blank\">iOS coming soon!</a>)."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:27
|
||||
#: snikket_web/templates/invite_view.html:28
|
||||
msgid "Get it on Google Play"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:30
|
||||
msgid "Download on the App Store"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:33
|
||||
msgid "Not on mobile?"
|
||||
#: snikket_web/templates/invite_view.html:34
|
||||
msgid "Send to mobile device"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:36
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
msgid ""
|
||||
"After installation the app should automatically open and prompt you to "
|
||||
"create an account. If not, simply click the button below."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
#: snikket_web/templates/invite_view.html:45
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can connect to Snikket using any XMPP-compatible software. If the button "
|
||||
@@ -972,37 +1071,37 @@ msgid ""
|
||||
"\">register an account manually</a>."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:50
|
||||
#: snikket_web/templates/invite_view.html:51
|
||||
#, fuzzy
|
||||
#| msgid "Show invite details"
|
||||
msgid "Scan invite code"
|
||||
msgstr "Show invite details"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:53
|
||||
#: snikket_web/templates/invite_view.html:82
|
||||
#: snikket_web/templates/invite_view.html:54
|
||||
#: snikket_web/templates/invite_view.html:83
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:56
|
||||
#: snikket_web/templates/invite_view.html:57
|
||||
msgid ""
|
||||
"You can transfer this invite to your mobile device by scanning a code with "
|
||||
"your camera. You can use either a QR scanner app or the Snikket app itself."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:61
|
||||
#: snikket_web/templates/invite_view.html:62
|
||||
msgid "Using a QR code scanner"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:63
|
||||
#: snikket_web/templates/invite_view.html:64
|
||||
msgid "Using the Snikket app"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:68
|
||||
#: snikket_web/templates/invite_view.html:69
|
||||
msgid ""
|
||||
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:74
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
msgid ""
|
||||
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
|
||||
"button at the top."
|
||||
@@ -1044,6 +1143,27 @@ msgstr "Enter your Snikket address and password to manage your account."
|
||||
msgid "Login failed"
|
||||
msgstr "Login failed"
|
||||
|
||||
#: snikket_web/templates/login.html:23
|
||||
#, fuzzy
|
||||
#| msgid "Incorrect password"
|
||||
msgid "Incorrect address"
|
||||
msgstr "Incorrect password"
|
||||
|
||||
#: snikket_web/templates/login.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
|
||||
"em>. Your password was not sent."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/unauth.html:16
|
||||
msgid "Operation successful"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/unauth.html:18
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_home.html:9
|
||||
msgid "Welcome!"
|
||||
msgstr "Welcome!"
|
||||
@@ -1089,11 +1209,11 @@ msgstr "Manage users and invitations of this Snikket service."
|
||||
msgid "Admin panel"
|
||||
msgstr "Admin dashboard"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:8
|
||||
#: snikket_web/templates/user_logout.html:5
|
||||
msgid "Sign out of the Snikket Web Portal"
|
||||
msgstr "Sign out of the Snikket Web Portal"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:9
|
||||
#: snikket_web/templates/user_logout.html:6
|
||||
msgid ""
|
||||
"Click below to log yourself out of the web portal. This does not affect any "
|
||||
"other connected devices."
|
||||
@@ -1101,11 +1221,11 @@ msgstr ""
|
||||
"Click below to log yourself out of the web portal. This does not affect any "
|
||||
"other connected devices."
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:8
|
||||
#: snikket_web/templates/user_passwd.html:5
|
||||
msgid "Change your password"
|
||||
msgstr "Change your password"
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:9
|
||||
#: snikket_web/templates/user_passwd.html:6
|
||||
msgid ""
|
||||
"To change your password, you need to provide the current password as well as "
|
||||
"the new one. To reduce the chance of typos, we ask for your new password "
|
||||
@@ -1115,7 +1235,7 @@ msgstr ""
|
||||
"the new one. To reduce the chance of typos, we ask for your new password "
|
||||
"twice."
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_passwd.html:24
|
||||
msgid ""
|
||||
"After changing your password, you will have to enter the new password on all "
|
||||
"of your devices."
|
||||
@@ -1123,21 +1243,21 @@ msgstr ""
|
||||
"After changing your password, you will have to enter the new password on all "
|
||||
"of your devices."
|
||||
|
||||
#: snikket_web/templates/user_profile.html:7
|
||||
#: snikket_web/templates/user_profile.html:4
|
||||
#, fuzzy
|
||||
#| msgid "Update profile"
|
||||
msgid "Update your profile"
|
||||
msgstr "Update profile"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:9
|
||||
#: snikket_web/templates/user_profile.html:6
|
||||
msgid "Profile"
|
||||
msgstr "Profile"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:22
|
||||
#: snikket_web/templates/user_profile.html:19
|
||||
msgid "Visibility"
|
||||
msgstr "Visibility"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:23
|
||||
#: snikket_web/templates/user_profile.html:20
|
||||
msgid ""
|
||||
"This section allows you to control who can see your profile information, "
|
||||
"like avatar and nickname."
|
||||
@@ -1224,6 +1344,3 @@ msgstr ""
|
||||
|
||||
#~ msgid "Copy operation failed"
|
||||
#~ msgstr "Copy operation failed"
|
||||
|
||||
#~ msgid "Password change failed"
|
||||
#~ msgstr "Password change failed"
|
||||
|
||||
1190
snikket_web/translations/es_MX/LC_MESSAGES/messages.po
Normal file
1190
snikket_web/translations/es_MX/LC_MESSAGES/messages.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2021-01-30 12:45+0100\n"
|
||||
"PO-Revision-Date: 2021-01-30 13:47+0000\n"
|
||||
"Last-Translator: Link Mauve <linkmauve@linkmauve.fr>\n"
|
||||
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
|
||||
"PO-Revision-Date: 2021-03-12 23:04+0000\n"
|
||||
"Last-Translator: GodGoldfish <godgoldfish@pm.me>\n"
|
||||
"Language-Team: French <https://i18n.sotecware.net/projects/snikket/"
|
||||
"web-portal/fr/>\n"
|
||||
"Language: fr\n"
|
||||
@@ -17,201 +17,301 @@ 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.4.2\n"
|
||||
"X-Generator: Weblate 4.5.1\n"
|
||||
"Generated-By: Babel 2.9.0\n"
|
||||
|
||||
#: snikket_web/admin.py:60
|
||||
msgid "Delete user permanently"
|
||||
msgstr "Désinscrire définitivement l’utilisateur"
|
||||
|
||||
#: snikket_web/admin.py:129
|
||||
#: snikket_web/admin.py:73
|
||||
#, fuzzy
|
||||
#| msgid "deleted"
|
||||
msgid "User deleted"
|
||||
msgstr "supprimé"
|
||||
|
||||
#: snikket_web/admin.py:116
|
||||
#, fuzzy
|
||||
#| msgid "Password reset link for %(user_name)s"
|
||||
msgid "Password reset link created"
|
||||
msgstr "Lien de réinitialisation du mot de passe de %(user_name)s"
|
||||
|
||||
#: snikket_web/admin.py:122
|
||||
#, fuzzy
|
||||
#| msgid "Create password reset links or delete users."
|
||||
msgid "Password reset link deleted"
|
||||
msgstr ""
|
||||
"Créer des liens de réinitialisation de mot de passe ou supprimer des "
|
||||
"utilisateurs"
|
||||
|
||||
#: snikket_web/admin.py:141
|
||||
msgid "Invite to circle"
|
||||
msgstr "Inviter dans le cercle"
|
||||
|
||||
#: snikket_web/admin.py:135
|
||||
#: snikket_web/admin.py:147
|
||||
msgid "At least one circle must be selected"
|
||||
msgstr "Au moins un cercle doit être sélectionné"
|
||||
|
||||
#: snikket_web/admin.py:140
|
||||
#: snikket_web/admin.py:152
|
||||
msgid "Valid for"
|
||||
msgstr "Valide pour"
|
||||
|
||||
#: snikket_web/admin.py:142
|
||||
#: snikket_web/admin.py:154
|
||||
msgid "One hour"
|
||||
msgstr "Une heure"
|
||||
|
||||
#: snikket_web/admin.py:143
|
||||
#: snikket_web/admin.py:155
|
||||
msgid "Twelve hours"
|
||||
msgstr "Douze heures"
|
||||
|
||||
#: snikket_web/admin.py:144
|
||||
#: snikket_web/admin.py:156
|
||||
msgid "One day"
|
||||
msgstr "Un jour"
|
||||
msgstr "Une journée"
|
||||
|
||||
#: snikket_web/admin.py:145
|
||||
#: snikket_web/admin.py:157
|
||||
msgid "One week"
|
||||
msgstr "Une semaine"
|
||||
|
||||
#: snikket_web/admin.py:146
|
||||
#: snikket_web/admin.py:158
|
||||
msgid "Four weeks"
|
||||
msgstr "Quatre semaines"
|
||||
|
||||
#: snikket_web/admin.py:152 snikket_web/templates/admin_edit_invite.html:17
|
||||
#: snikket_web/admin.py:164 snikket_web/templates/admin_edit_invite.html:17
|
||||
msgid "Invitation type"
|
||||
msgstr "Type d’invitation"
|
||||
|
||||
#: snikket_web/admin.py:154 snikket_web/templates/library.j2:116
|
||||
#: snikket_web/admin.py:166 snikket_web/templates/library.j2:116
|
||||
msgid "Individual"
|
||||
msgstr "Individuelle"
|
||||
|
||||
#: snikket_web/admin.py:155 snikket_web/templates/library.j2:114
|
||||
#: snikket_web/admin.py:167 snikket_web/templates/library.j2:114
|
||||
msgid "Group"
|
||||
msgstr "Groupe"
|
||||
|
||||
#: snikket_web/admin.py:161
|
||||
#: snikket_web/admin.py:173
|
||||
msgid "New invitation link"
|
||||
msgstr "Nouveau lien d’invitation"
|
||||
|
||||
#: snikket_web/admin.py:223
|
||||
#: snikket_web/admin.py:235
|
||||
msgid "Revoke"
|
||||
msgstr "Révoquer"
|
||||
|
||||
#: snikket_web/admin.py:283 snikket_web/admin.py:327
|
||||
#: snikket_web/admin.py:259
|
||||
#, fuzzy
|
||||
#| msgid "Invitation type"
|
||||
msgid "Invitation created"
|
||||
msgstr "Type d’invitation"
|
||||
|
||||
#: snikket_web/admin.py:275
|
||||
#, fuzzy
|
||||
#| msgid "New invitation link"
|
||||
msgid "No such invitation exists"
|
||||
msgstr "Nouveau lien d’invitation"
|
||||
|
||||
#: snikket_web/admin.py:290
|
||||
#, fuzzy
|
||||
#| msgid "Invitation type"
|
||||
msgid "Invitation revoked"
|
||||
msgstr "Type d’invitation"
|
||||
|
||||
#: snikket_web/admin.py:307 snikket_web/admin.py:355
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: snikket_web/admin.py:288 snikket_web/templates/admin_circles.html:47
|
||||
#: snikket_web/admin.py:312 snikket_web/templates/admin_circles.html:47
|
||||
msgid "Create circle"
|
||||
msgstr "Créer un cercle"
|
||||
|
||||
#: snikket_web/admin.py:332
|
||||
#: snikket_web/admin.py:342
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle created"
|
||||
msgstr "Nom du cercle"
|
||||
|
||||
#: snikket_web/admin.py:360
|
||||
msgid "Select user"
|
||||
msgstr "Sélectionner un utilisateur"
|
||||
|
||||
#: snikket_web/admin.py:337
|
||||
#: snikket_web/admin.py:365
|
||||
msgid "Update circle"
|
||||
msgstr "Mettre à jour le cercle"
|
||||
|
||||
#: snikket_web/admin.py:341
|
||||
#: snikket_web/admin.py:369
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Supprimer le cercle définitivement"
|
||||
|
||||
#: snikket_web/admin.py:347
|
||||
#: snikket_web/admin.py:375
|
||||
msgid "Add user"
|
||||
msgstr "Ajouter un utilisateur"
|
||||
|
||||
#: snikket_web/admin.py:391
|
||||
#, fuzzy
|
||||
#| msgid "No circles"
|
||||
msgid "No such circle exists"
|
||||
msgstr "Aucun cercle"
|
||||
|
||||
#: snikket_web/admin.py:428
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle data updated"
|
||||
msgstr "Nom du cercle"
|
||||
|
||||
#: snikket_web/admin.py:434
|
||||
#, fuzzy
|
||||
#| msgid "deleted"
|
||||
msgid "Circle deleted"
|
||||
msgstr "supprimé"
|
||||
|
||||
#: snikket_web/admin.py:445
|
||||
#, fuzzy
|
||||
#| msgid "Invite to circle"
|
||||
msgid "User added to circle"
|
||||
msgstr "Inviter dans le cercle"
|
||||
|
||||
#: snikket_web/admin.py:454
|
||||
#, fuzzy
|
||||
#| msgid "Remove user %(username)s from circle"
|
||||
msgid "User removed from circle"
|
||||
msgstr "Retirer l’utilisateur %(username)s du cercle"
|
||||
|
||||
#: snikket_web/infra.py:40
|
||||
msgid "Main"
|
||||
msgstr "Principal"
|
||||
|
||||
#: snikket_web/invite.py:93
|
||||
#: snikket_web/invite.py:104
|
||||
msgid "Username"
|
||||
msgstr "Nom d’utilisateur"
|
||||
|
||||
#: snikket_web/invite.py:97 snikket_web/invite.py:164 snikket_web/main.py:41
|
||||
#: snikket_web/invite.py:108 snikket_web/invite.py:175 snikket_web/main.py:42
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
||||
#: snikket_web/invite.py:101 snikket_web/invite.py:168
|
||||
#: snikket_web/invite.py:112 snikket_web/invite.py:179
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmer le mot de passe"
|
||||
|
||||
#: snikket_web/invite.py:105 snikket_web/invite.py:172
|
||||
#: snikket_web/invite.py:116 snikket_web/invite.py:183
|
||||
msgid "The passwords must match"
|
||||
msgstr "Les mots de passe doivent être identiques"
|
||||
|
||||
#: snikket_web/invite.py:110
|
||||
#: snikket_web/invite.py:121
|
||||
msgid "Create account"
|
||||
msgstr "Créer un compte"
|
||||
|
||||
#: snikket_web/invite.py:137
|
||||
#: snikket_web/invite.py:148
|
||||
msgid "That username is already taken"
|
||||
msgstr "Ce nom d’utilisateur est déjà utilisé"
|
||||
|
||||
#: snikket_web/invite.py:141 snikket_web/invite.py:205
|
||||
#: snikket_web/invite.py:152 snikket_web/invite.py:216
|
||||
msgid "Registration was declined for unknown reasons"
|
||||
msgstr "L’enregistrement a été refusé pour des raisons inconnues"
|
||||
|
||||
#: snikket_web/invite.py:145
|
||||
#: snikket_web/invite.py:156
|
||||
msgid "The username is not valid"
|
||||
msgstr "Le nom d’utilisateur n’est pas valide"
|
||||
|
||||
#: snikket_web/invite.py:177 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:32
|
||||
#: snikket_web/invite.py:188 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:29
|
||||
msgid "Change password"
|
||||
msgstr "Changer de mot de passe"
|
||||
|
||||
#: snikket_web/main.py:36
|
||||
#: snikket_web/main.py:37
|
||||
msgid "Address"
|
||||
msgstr "Adresse"
|
||||
|
||||
#: snikket_web/main.py:46
|
||||
#: snikket_web/main.py:47
|
||||
msgid "Sign in"
|
||||
msgstr "S’identifier"
|
||||
|
||||
#: snikket_web/main.py:72
|
||||
#: snikket_web/main.py:56
|
||||
msgid "Invalid username or password."
|
||||
msgstr "Nom d’utilisateur ou mot de passe incorrect."
|
||||
|
||||
#: snikket_web/user.py:21
|
||||
#: snikket_web/main.py:84
|
||||
#, fuzzy
|
||||
msgid "Login successful!"
|
||||
msgstr "Connexion réussite !"
|
||||
|
||||
#: snikket_web/user.py:28
|
||||
msgid "Current password"
|
||||
msgstr "Mot de passe actuel"
|
||||
|
||||
#: snikket_web/user.py:26
|
||||
#: snikket_web/user.py:33
|
||||
msgid "New password"
|
||||
msgstr "Nouveau mot de passe"
|
||||
|
||||
#: snikket_web/user.py:31
|
||||
#: snikket_web/user.py:38
|
||||
msgid "Confirm new password"
|
||||
msgstr "Confirmer le nouveau mot de passe"
|
||||
|
||||
#: snikket_web/user.py:35
|
||||
#: snikket_web/user.py:42
|
||||
msgid "The new passwords must match"
|
||||
msgstr "Les nouveaux mots de passe doivent être identiques"
|
||||
|
||||
#: snikket_web/user.py:42
|
||||
#: snikket_web/user.py:49
|
||||
msgid "Sign out"
|
||||
msgstr "Se déconnecter"
|
||||
|
||||
#: snikket_web/user.py:47
|
||||
#: snikket_web/user.py:54
|
||||
msgid "Nobody"
|
||||
msgstr "Personne"
|
||||
|
||||
#: snikket_web/user.py:48
|
||||
#: snikket_web/user.py:55
|
||||
msgid "Friends only"
|
||||
msgstr "Amis seulement"
|
||||
|
||||
#: snikket_web/user.py:49
|
||||
#: snikket_web/user.py:56
|
||||
msgid "Everyone"
|
||||
msgstr "Tout le monde"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:12
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:55
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:62
|
||||
msgid "Display name"
|
||||
msgstr "Nom à afficher"
|
||||
|
||||
#: snikket_web/user.py:59
|
||||
#: snikket_web/user.py:66
|
||||
msgid "Avatar"
|
||||
msgstr "Avatar"
|
||||
|
||||
#: snikket_web/user.py:63
|
||||
#: snikket_web/user.py:70
|
||||
msgid "Profile visibility"
|
||||
msgstr "Visibilité du profil"
|
||||
|
||||
#: snikket_web/user.py:68
|
||||
#: snikket_web/user.py:75
|
||||
msgid "Update profile"
|
||||
msgstr "Mettre à jour le profil"
|
||||
|
||||
#: snikket_web/user.py:93
|
||||
#: snikket_web/user.py:100
|
||||
msgid "Incorrect password"
|
||||
msgstr "Mot de passe incorrect"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4 snikket_web/templates/login.html:36
|
||||
#: snikket_web/user.py:104
|
||||
#, fuzzy
|
||||
#| msgid "Password reset"
|
||||
msgid "Password changed"
|
||||
msgstr "Réinitialisation de mot de passe"
|
||||
|
||||
#: snikket_web/user.py:146
|
||||
#, fuzzy
|
||||
#| msgid "Profile"
|
||||
msgid "Profile updated"
|
||||
msgstr "Profil"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4
|
||||
#, python-format
|
||||
msgid "A <a href=\"%(about_url)s\">Snikket</a> service"
|
||||
msgstr "Un service <a href=\"%(about_url)s\">Snikket</a>"
|
||||
|
||||
#: snikket_web/templates/about.html:9
|
||||
#: snikket_web/templates/_footer.html:6
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company."
|
||||
msgstr ""
|
||||
"\"Snikket\" et le logo de perroquet sont des marques de la Snikket Community "
|
||||
"Interest Company."
|
||||
|
||||
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
|
||||
msgid "About Snikket"
|
||||
msgstr "À propos de Snikket"
|
||||
|
||||
@@ -266,14 +366,30 @@ msgid ""
|
||||
"\"%(apache20_url)s\">Apache 2.0 License</a>."
|
||||
msgstr ""
|
||||
"Les icônes utilisées dans le portail web sont <a href=\"%(source_url)s"
|
||||
"\">Google’s Material Icons</a>, mises à dispositions par Google aux termes "
|
||||
"de la <a href=\"%(apache20_url)s\">licence Apache 2.0 </a>."
|
||||
"\">Google’s Material Icons</a>, mises à dispositions par Google sous les "
|
||||
"termes de la <a href=\"%(apache20_url)s\">licence Apache 2.0 </a>."
|
||||
|
||||
#: snikket_web/templates/about.html:17
|
||||
#, fuzzy
|
||||
msgid "Trademarks"
|
||||
msgstr "Marques"
|
||||
|
||||
#: snikket_web/templates/about.html:18
|
||||
#, fuzzy, python-format
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company. For more information about the trademarks, visit the <a href="
|
||||
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
|
||||
msgstr ""
|
||||
"\"Snikket\" et le logo de perroquet sont des marques de la Snikket Community "
|
||||
"Interest Company. Pour plus d'informations sur la marque, visitez le site <a "
|
||||
"href=\"%(trademarks_url)s\"> page d'information Snikket Trademarks</a>."
|
||||
|
||||
#: snikket_web/templates/about.html:19
|
||||
msgid "Software Versions"
|
||||
msgstr "Version des logiciels"
|
||||
|
||||
#: snikket_web/templates/about.html:27
|
||||
#: snikket_web/templates/about.html:29
|
||||
msgid "Back to the main page"
|
||||
msgstr "Retour à la page principale"
|
||||
|
||||
@@ -372,7 +488,7 @@ msgid "Debug information for %(user_name)s"
|
||||
msgstr "Informations de débogage pour %(user_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_debug_user.html:11
|
||||
#: snikket_web/templates/user_passwd.html:26
|
||||
#: snikket_web/templates/user_passwd.html:23
|
||||
msgid "Warning"
|
||||
msgstr "Avertissement"
|
||||
|
||||
@@ -382,11 +498,11 @@ msgstr "Le contenu ci-dessous peut contenir des informations sensibles."
|
||||
|
||||
#: snikket_web/templates/admin_debug_user.html:15
|
||||
msgid "Raw debug dump"
|
||||
msgstr "Journal de débogage brute"
|
||||
msgstr "Journal de débogage brut"
|
||||
|
||||
#: snikket_web/templates/admin_debug_user.html:17
|
||||
msgid "Copy complete output"
|
||||
msgstr "Copier le journal complet"
|
||||
msgstr "Copier le journal entier"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:4
|
||||
#: snikket_web/templates/admin_users.html:22
|
||||
@@ -425,9 +541,9 @@ msgstr ""
|
||||
#: snikket_web/templates/admin_edit_circle.html:44
|
||||
#: snikket_web/templates/admin_edit_invite.html:49
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:13
|
||||
#: snikket_web/templates/user_passwd.html:30
|
||||
#: snikket_web/templates/user_profile.html:31
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:28
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
@@ -502,7 +618,6 @@ msgid "View invitation"
|
||||
msgstr "Détails de l’invitation"
|
||||
|
||||
#: snikket_web/templates/admin_edit_invite.html:13
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
#: snikket_web/templates/admin_reset_user_password.html:15
|
||||
msgid "Valid until"
|
||||
msgstr "Valide jusqu’au"
|
||||
@@ -597,7 +712,12 @@ msgstr "Quitter le panneau d’administration"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:10
|
||||
msgid "Pending invitations"
|
||||
msgstr "Invitations valides"
|
||||
msgstr "Invitations en attente"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
#, fuzzy
|
||||
msgid "Expires"
|
||||
msgstr "Expires"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:22
|
||||
msgid "Type"
|
||||
@@ -617,7 +737,7 @@ msgstr "Supprime l’invitation"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:57
|
||||
msgid "Currently, there are no pending invitations."
|
||||
msgstr "Il n’y a actuellement pas d’invitation valide."
|
||||
msgstr "Il n’y a actuellement pas d’invitation en attente."
|
||||
|
||||
#: snikket_web/templates/admin_reset_user_password.html:8
|
||||
msgid "Password reset"
|
||||
@@ -683,15 +803,15 @@ msgid "The web portal encountered an internal error."
|
||||
msgstr "Le portail web a rencontré une erreur interne."
|
||||
|
||||
#: snikket_web/templates/invite_invalid.html:5
|
||||
#: snikket_web/templates/invite_view.html:12
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#, python-format
|
||||
msgid "Invite to %(site_name)s"
|
||||
msgstr "Inviter à %(site_name)s"
|
||||
msgstr "Invitation à %(site_name)s"
|
||||
|
||||
#: snikket_web/templates/invite_invalid.html:6
|
||||
#: snikket_web/templates/invite_register.html:10
|
||||
#: snikket_web/templates/invite_success.html:11
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#: snikket_web/templates/invite_view.html:14
|
||||
#, python-format
|
||||
msgid "Powered by <img src=\"%(logo_url)s\" alt=\"Snikket\">"
|
||||
msgstr "Propulsé par <img alt=\"Snikket\" src=\"%(logo_url)s\">"
|
||||
@@ -738,18 +858,18 @@ msgstr ""
|
||||
"création de compte dans l’application en cliquant sur le bouton ci-dessous :"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:14
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
#: snikket_web/templates/invite_view.html:38
|
||||
msgid "App already installed?"
|
||||
msgstr "L’application est déjà installée ?"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:16
|
||||
#: snikket_web/templates/invite_reset_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:39
|
||||
#: snikket_web/templates/invite_view.html:40
|
||||
msgid "Open the app"
|
||||
msgstr "Ouvrir l’application"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:18
|
||||
#: snikket_web/templates/invite_view.html:41
|
||||
#: snikket_web/templates/invite_view.html:42
|
||||
msgid "This button works only if you have the app installed already!"
|
||||
msgstr "Ce bouton ne fonctionne que si vous avez déjà installé l’application !"
|
||||
|
||||
@@ -762,9 +882,8 @@ msgid ""
|
||||
"If you plan to use a legacy XMPP client, you can register an account online "
|
||||
"and enter your credentials into any XMPP-compatible software."
|
||||
msgstr ""
|
||||
"Si vous prévoyez d’utiliser un ancien client XMPP, vous pouvez ouvrir un "
|
||||
"compte en ligne et saisir vos indentifiants dans tout logiciel compatible "
|
||||
"XMPP."
|
||||
"Si vous prévoyez d’utiliser un client XMPP, vous pouvez ouvrir un compte en "
|
||||
"ligne et saisir vos indentifiants dans tout logiciel compatible XMPP."
|
||||
|
||||
#: snikket_web/templates/invite_register.html:27
|
||||
msgid ""
|
||||
@@ -849,7 +968,7 @@ msgstr ""
|
||||
"utilisant le bouton Scan tout en haut."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:26
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
#: snikket_web/templates/invite_view.html:76
|
||||
msgid ""
|
||||
"Your camera will turn on. Point it at the square code below until it is "
|
||||
"within the highlighted square on your screen, and wait until the app "
|
||||
@@ -866,7 +985,7 @@ msgstr ""
|
||||
"compte."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:43
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
msgid "Alternatives"
|
||||
msgstr "Alternatives"
|
||||
|
||||
@@ -877,7 +996,7 @@ msgid ""
|
||||
"above button or scanning the QR code does not work for you."
|
||||
msgstr ""
|
||||
"Vous pouvez aussi <a href=\"%(reset_url)s\">réinitialiser votre mot de passe "
|
||||
"en ligne</a> si le bouton ci-dessus ou le scan du QR code ne fonctionnent "
|
||||
"en ligne</a> si le bouton ci-dessus ou le scan du QR code ne fonctionnent "
|
||||
"pas pour vous."
|
||||
|
||||
#: snikket_web/templates/invite_success.html:5
|
||||
@@ -907,25 +1026,25 @@ msgid ""
|
||||
"You can now set up your legacy XMPP client with the above address and the "
|
||||
"password you chose during registration."
|
||||
msgstr ""
|
||||
"Vous pouvez maintenant configurer votre ancien client XMPP avec l’adresse ci-"
|
||||
"dessus et le mot de passe que vous avez choisi lors de l’enregistrement."
|
||||
"Vous pouvez maintenant configurer votre client XMPP avec l’adresse ci-dessus "
|
||||
"et le mot de passe que vous avez choisi lors de l’enregistrement."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:6
|
||||
#, python-format
|
||||
msgid "Invite to %(site_name)s | Snikket"
|
||||
msgstr "Inviter à %(site_name)s | Snikket"
|
||||
msgstr "Invitation à %(site_name)s | Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:15
|
||||
#: snikket_web/templates/invite_view.html:16
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat with %(inviter_name)s using Snikket, a secure, "
|
||||
"privacy-friendly chat app on %(site_name)s."
|
||||
msgstr ""
|
||||
"Vous avez été invité à converser avec %(inviter_name)s en utilisant Snikket, "
|
||||
"une application de messagerie sécurisée et respectueuse de la vie privée sur "
|
||||
"%(site_name)s."
|
||||
"Vous avez été invité(e) à converser avec %(inviter_name)s en utilisant "
|
||||
"Snikket, une application de messagerie sécurisée et respectueuse de la vie "
|
||||
"privée sur %(site_name)s."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:17
|
||||
#: snikket_web/templates/invite_view.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat on %(site_name)s using Snikket, a secure, "
|
||||
@@ -934,37 +1053,38 @@ msgstr ""
|
||||
"Vous avez été invité à converser sur %(site_name)s en utilisant Snikket, une "
|
||||
"application de messagerie sécurisée et respectueuse de la vie privée."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:19
|
||||
#: snikket_web/templates/invite_view.html:20
|
||||
msgid "Get started"
|
||||
msgstr "Démarrer"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:22
|
||||
msgid "Install the Snikket App on your Android or iOS device."
|
||||
msgstr "Installez l’application Snikket sur votre appareil Android ou iOS."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:23
|
||||
#: snikket_web/templates/invite_view.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Install the Snikket App on your Android device (<a href=\"%(ios_info_url)s\" "
|
||||
"rel=\"noopener noreferrer\" target=\"_blank\">iOS coming soon!</a>)."
|
||||
msgstr ""
|
||||
"Installez l’Application Snikket sur votre appareil Android (<a href=\""
|
||||
"%(ios_info_url)s\" rel=\"noopener noreferrer\" target=\"_blank\">iOS "
|
||||
"Installez l’Application Snikket sur votre appareil Android (<a href="
|
||||
"\"%(ios_info_url)s\" rel=\"noopener noreferrer\" target=\"_blank\">iOS "
|
||||
"disponible bientôt !</a>)."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:27
|
||||
#: snikket_web/templates/invite_view.html:28
|
||||
msgid "Get it on Google Play"
|
||||
msgstr "Obtenez-la sur Google Play"
|
||||
msgstr "Obtenez-la sur Google Play"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:30
|
||||
msgid "Download on the App Store"
|
||||
msgstr "Télécharger sur l’App Store"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:33
|
||||
msgid "Not on mobile?"
|
||||
msgstr "Pas sur mobile ?"
|
||||
#: snikket_web/templates/invite_view.html:34
|
||||
#, fuzzy
|
||||
msgid "Send to mobile device"
|
||||
msgstr "Envoyer vers l'appareil"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:36
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
msgid ""
|
||||
"After installation the app should automatically open and prompt you to "
|
||||
"create an account. If not, simply click the button below."
|
||||
@@ -973,7 +1093,7 @@ msgstr ""
|
||||
"inviter à créer un compte. Si ce n’est pas le cas, il suffit de cliquer sur "
|
||||
"le bouton ci-dessous."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
#: snikket_web/templates/invite_view.html:45
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can connect to Snikket using any XMPP-compatible software. If the button "
|
||||
@@ -985,40 +1105,40 @@ msgstr ""
|
||||
"application, vous devrez peut-être <a href=\"%(register_url)s\">enregistrer "
|
||||
"un compte manuellement</a>."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:50
|
||||
#: snikket_web/templates/invite_view.html:51
|
||||
msgid "Scan invite code"
|
||||
msgstr "Scanner le code d’invitation"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:53
|
||||
#: snikket_web/templates/invite_view.html:82
|
||||
#: snikket_web/templates/invite_view.html:54
|
||||
#: snikket_web/templates/invite_view.html:83
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:56
|
||||
#: snikket_web/templates/invite_view.html:57
|
||||
msgid ""
|
||||
"You can transfer this invite to your mobile device by scanning a code with "
|
||||
"your camera. You can use either a QR scanner app or the Snikket app itself."
|
||||
msgstr ""
|
||||
"Vous pouvez transférer cette invitation sur votre appareil mobile en "
|
||||
"scannant un code avec votre appareil photo. Vous pouvez utiliser soit une "
|
||||
"application de scanner QR, soit l’application Snikket elle-même."
|
||||
"application de scanner de QR code, soit l’application Snikket elle-même."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:61
|
||||
#: snikket_web/templates/invite_view.html:62
|
||||
msgid "Using a QR code scanner"
|
||||
msgstr "En utilisant un scanner de codes QR"
|
||||
msgstr "En utilisant un scanner de QR code"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:63
|
||||
#: snikket_web/templates/invite_view.html:64
|
||||
msgid "Using the Snikket app"
|
||||
msgstr "En utilisant l’application Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:68
|
||||
#: snikket_web/templates/invite_view.html:69
|
||||
msgid ""
|
||||
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
|
||||
msgstr ""
|
||||
"Utilisez un scanner de <em>QR code</em> sur votre appareil mobile pour "
|
||||
"Utilisez un scanner de <em>QR code</em> sur votre appareil mobile pour "
|
||||
"scanner le code ci-dessous :"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:74
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
msgid ""
|
||||
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
|
||||
"button at the top."
|
||||
@@ -1040,7 +1160,8 @@ msgstr "supprimé"
|
||||
|
||||
#: snikket_web/templates/library.j2:122
|
||||
msgid "Can be used multiple times to create accounts on this Snikket service."
|
||||
msgstr "Peut être utilisée pour créer plusieurs comptes sur ce service Snikket."
|
||||
msgstr ""
|
||||
"Peut être utilisée pour créer plusieurs comptes sur ce service Snikket."
|
||||
|
||||
#: snikket_web/templates/library.j2:124
|
||||
msgid "Can be used once to create an account on this Snikket service."
|
||||
@@ -1048,7 +1169,7 @@ msgstr "Peut être utilisée pour créer un seul compte sur ce service Snikket."
|
||||
|
||||
#: snikket_web/templates/login.html:5
|
||||
msgid "Snikket Login"
|
||||
msgstr "Identifiant Snikket"
|
||||
msgstr "Connexion à Snikket"
|
||||
|
||||
#: snikket_web/templates/login.html:14
|
||||
msgid "Enter your Snikket address and password to manage your account."
|
||||
@@ -1058,6 +1179,31 @@ msgstr "Entrez votre adresse et mot de passe Snikket pour gérer votre compte."
|
||||
msgid "Login failed"
|
||||
msgstr "Échec d’identification"
|
||||
|
||||
#: snikket_web/templates/login.html:23
|
||||
#, fuzzy
|
||||
#| msgid "Incorrect password"
|
||||
msgid "Incorrect address"
|
||||
msgstr "Mot de passe incorrect"
|
||||
|
||||
#: snikket_web/templates/login.html:24
|
||||
#, fuzzy, python-format
|
||||
msgid ""
|
||||
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
|
||||
"em>. Your password was not sent."
|
||||
msgstr ""
|
||||
"Le service Snikket n'héberge que les adresses se terminant par "
|
||||
"<em>@%(snikket_domain)s</em>. Votre mot de passe n'a pas été envoyé."
|
||||
|
||||
#: snikket_web/templates/unauth.html:16
|
||||
#, fuzzy
|
||||
msgid "Operation successful"
|
||||
msgstr "Opération réussite"
|
||||
|
||||
#: snikket_web/templates/unauth.html:18
|
||||
#, fuzzy
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
#: snikket_web/templates/user_home.html:9
|
||||
msgid "Welcome!"
|
||||
msgstr "Bienvenue !"
|
||||
@@ -1065,7 +1211,7 @@ msgstr "Bienvenue !"
|
||||
#: snikket_web/templates/user_home.html:10
|
||||
#, python-format
|
||||
msgid "Welcome home, %(user_name)s."
|
||||
msgstr "Bienvenue à la maison, %(user_name)s."
|
||||
msgstr "Bienvenue chez vous, %(user_name)s."
|
||||
|
||||
#: snikket_web/templates/user_home.html:14
|
||||
msgid "Your account"
|
||||
@@ -1092,11 +1238,11 @@ msgstr ""
|
||||
msgid "Admin panel"
|
||||
msgstr "Panneau d’administration"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:8
|
||||
#: snikket_web/templates/user_logout.html:5
|
||||
msgid "Sign out of the Snikket Web Portal"
|
||||
msgstr "Se déconnecter du portail web Snikket"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:9
|
||||
#: snikket_web/templates/user_logout.html:6
|
||||
msgid ""
|
||||
"Click below to log yourself out of the web portal. This does not affect any "
|
||||
"other connected devices."
|
||||
@@ -1104,11 +1250,11 @@ msgstr ""
|
||||
"Cliquez ci-dessous pour vous déconnecter du portail. Ceci n’affecte pas vos "
|
||||
"autres appareils connectés."
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:8
|
||||
#: snikket_web/templates/user_passwd.html:5
|
||||
msgid "Change your password"
|
||||
msgstr "Changer votre mot de passe"
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:9
|
||||
#: snikket_web/templates/user_passwd.html:6
|
||||
msgid ""
|
||||
"To change your password, you need to provide the current password as well as "
|
||||
"the new one. To reduce the chance of typos, we ask for your new password "
|
||||
@@ -1118,7 +1264,7 @@ msgstr ""
|
||||
"et votre nouveau mot de passe. Pour réduire les chances d’erreur, vous devez "
|
||||
"confirmer le nouveau mot de passe."
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_passwd.html:24
|
||||
msgid ""
|
||||
"After changing your password, you will have to enter the new password on all "
|
||||
"of your devices."
|
||||
@@ -1126,19 +1272,19 @@ msgstr ""
|
||||
"Après avoir changé votre mot de passe, vous devez entrer le nouveau mot de "
|
||||
"passe sur chacun de vos appareils."
|
||||
|
||||
#: snikket_web/templates/user_profile.html:7
|
||||
#: snikket_web/templates/user_profile.html:4
|
||||
msgid "Update your profile"
|
||||
msgstr "Mettre à jour votre profil"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:9
|
||||
#: snikket_web/templates/user_profile.html:6
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:22
|
||||
#: snikket_web/templates/user_profile.html:19
|
||||
msgid "Visibility"
|
||||
msgstr "Visibilité"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:23
|
||||
#: snikket_web/templates/user_profile.html:20
|
||||
msgid ""
|
||||
"This section allows you to control who can see your profile information, "
|
||||
"like avatar and nickname."
|
||||
@@ -1146,6 +1292,9 @@ msgstr ""
|
||||
"Cette section permet de configurer qui peut voir votre profil, comme par "
|
||||
"exemple votre avatar et votre pseudonyme."
|
||||
|
||||
#~ msgid "Not on mobile?"
|
||||
#~ msgstr "Pas sur mobile ?"
|
||||
|
||||
#~ msgid "Edit user %(user_name)s"
|
||||
#~ msgstr "Modifier l’utilisateur %(user_name)s"
|
||||
|
||||
|
||||
@@ -7,11 +7,11 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2021-01-30 12:45+0100\n"
|
||||
"PO-Revision-Date: 2021-01-30 10:15+0000\n"
|
||||
"Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
|
||||
"Language-Team: Indonesian <https://i18n.sotecware.net/projects/snikket/web-"
|
||||
"portal/id/>\n"
|
||||
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
|
||||
"PO-Revision-Date: 2021-02-25 16:02+0000\n"
|
||||
"Last-Translator: uira <inboxriau@andriana.id>\n"
|
||||
"Language-Team: Indonesian <https://i18n.sotecware.net/projects/snikket/"
|
||||
"web-portal/id/>\n"
|
||||
"Language: id\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -24,194 +24,262 @@ msgstr ""
|
||||
msgid "Delete user permanently"
|
||||
msgstr "Hapus permanen pengguna"
|
||||
|
||||
#: snikket_web/admin.py:129
|
||||
#: snikket_web/admin.py:73
|
||||
msgid "User deleted"
|
||||
msgstr "Pengguna dihapus"
|
||||
|
||||
#: snikket_web/admin.py:116
|
||||
msgid "Password reset link created"
|
||||
msgstr "Tautan setel ulang kata sandi dibuat"
|
||||
|
||||
#: snikket_web/admin.py:122
|
||||
msgid "Password reset link deleted"
|
||||
msgstr "Tautan setel ulang kata sandi dihapus"
|
||||
|
||||
#: snikket_web/admin.py:141
|
||||
msgid "Invite to circle"
|
||||
msgstr "Undang masuk kelompok"
|
||||
|
||||
#: snikket_web/admin.py:135
|
||||
#: snikket_web/admin.py:147
|
||||
msgid "At least one circle must be selected"
|
||||
msgstr "Minimal satu kelompok harus dipilih"
|
||||
|
||||
#: snikket_web/admin.py:140
|
||||
#: snikket_web/admin.py:152
|
||||
msgid "Valid for"
|
||||
msgstr "Valid selama"
|
||||
|
||||
#: snikket_web/admin.py:142
|
||||
#: snikket_web/admin.py:154
|
||||
msgid "One hour"
|
||||
msgstr "Satu jam"
|
||||
|
||||
#: snikket_web/admin.py:143
|
||||
#: snikket_web/admin.py:155
|
||||
msgid "Twelve hours"
|
||||
msgstr "Dua belas jam"
|
||||
|
||||
#: snikket_web/admin.py:144
|
||||
#: snikket_web/admin.py:156
|
||||
msgid "One day"
|
||||
msgstr "Satu hari"
|
||||
|
||||
#: snikket_web/admin.py:145
|
||||
#: snikket_web/admin.py:157
|
||||
msgid "One week"
|
||||
msgstr "Satu minggu"
|
||||
|
||||
#: snikket_web/admin.py:146
|
||||
#: snikket_web/admin.py:158
|
||||
msgid "Four weeks"
|
||||
msgstr "Empat minggu"
|
||||
|
||||
#: snikket_web/admin.py:152 snikket_web/templates/admin_edit_invite.html:17
|
||||
#: snikket_web/admin.py:164 snikket_web/templates/admin_edit_invite.html:17
|
||||
msgid "Invitation type"
|
||||
msgstr "Jenis undangan"
|
||||
|
||||
#: snikket_web/admin.py:154 snikket_web/templates/library.j2:116
|
||||
#: snikket_web/admin.py:166 snikket_web/templates/library.j2:116
|
||||
msgid "Individual"
|
||||
msgstr "Individu"
|
||||
|
||||
#: snikket_web/admin.py:155 snikket_web/templates/library.j2:114
|
||||
#: snikket_web/admin.py:167 snikket_web/templates/library.j2:114
|
||||
msgid "Group"
|
||||
msgstr "Grup"
|
||||
|
||||
#: snikket_web/admin.py:161
|
||||
#: snikket_web/admin.py:173
|
||||
msgid "New invitation link"
|
||||
msgstr "Tautan undangan terbaru"
|
||||
msgstr "Tautan undangan baru"
|
||||
|
||||
#: snikket_web/admin.py:223
|
||||
#: snikket_web/admin.py:235
|
||||
msgid "Revoke"
|
||||
msgstr "Batalkan"
|
||||
|
||||
#: snikket_web/admin.py:283 snikket_web/admin.py:327
|
||||
#: snikket_web/admin.py:259
|
||||
msgid "Invitation created"
|
||||
msgstr "Undangan dibuat"
|
||||
|
||||
#: snikket_web/admin.py:275
|
||||
msgid "No such invitation exists"
|
||||
msgstr "Undangan tidak tersedia"
|
||||
|
||||
#: snikket_web/admin.py:290
|
||||
msgid "Invitation revoked"
|
||||
msgstr "Undangan dibatalkan"
|
||||
|
||||
#: snikket_web/admin.py:307 snikket_web/admin.py:355
|
||||
msgid "Name"
|
||||
msgstr "Nama"
|
||||
|
||||
#: snikket_web/admin.py:288 snikket_web/templates/admin_circles.html:47
|
||||
#: snikket_web/admin.py:312 snikket_web/templates/admin_circles.html:47
|
||||
msgid "Create circle"
|
||||
msgstr "Buat kelompok"
|
||||
|
||||
#: snikket_web/admin.py:332
|
||||
#: snikket_web/admin.py:342
|
||||
msgid "Circle created"
|
||||
msgstr "Kelompok dibuat"
|
||||
|
||||
#: snikket_web/admin.py:360
|
||||
msgid "Select user"
|
||||
msgstr "Pilih pengguna"
|
||||
|
||||
#: snikket_web/admin.py:337
|
||||
#: snikket_web/admin.py:365
|
||||
msgid "Update circle"
|
||||
msgstr "Memperbarui kelompok"
|
||||
|
||||
#: snikket_web/admin.py:341
|
||||
#: snikket_web/admin.py:369
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Hapus kelompok secara permanen"
|
||||
|
||||
#: snikket_web/admin.py:347
|
||||
#: snikket_web/admin.py:375
|
||||
msgid "Add user"
|
||||
msgstr "Tambah pengguna"
|
||||
|
||||
#: snikket_web/admin.py:391
|
||||
msgid "No such circle exists"
|
||||
msgstr "Kelompok tersebut tidak ada"
|
||||
|
||||
#: snikket_web/admin.py:428
|
||||
msgid "Circle data updated"
|
||||
msgstr "Data kelompok diperbarui"
|
||||
|
||||
#: snikket_web/admin.py:434
|
||||
msgid "Circle deleted"
|
||||
msgstr "Kelompok dihapus"
|
||||
|
||||
#: snikket_web/admin.py:445
|
||||
msgid "User added to circle"
|
||||
msgstr "Pengguna ditambahkan ke kelompok"
|
||||
|
||||
#: snikket_web/admin.py:454
|
||||
msgid "User removed from circle"
|
||||
msgstr "Pengguna dihapus dari kelompok"
|
||||
|
||||
#: snikket_web/infra.py:40
|
||||
msgid "Main"
|
||||
msgstr "Utama"
|
||||
|
||||
#: snikket_web/invite.py:93
|
||||
#: snikket_web/invite.py:104
|
||||
msgid "Username"
|
||||
msgstr "Nama pengguna"
|
||||
|
||||
#: snikket_web/invite.py:97 snikket_web/invite.py:164 snikket_web/main.py:41
|
||||
#: snikket_web/invite.py:108 snikket_web/invite.py:175 snikket_web/main.py:42
|
||||
msgid "Password"
|
||||
msgstr "Kata sandi"
|
||||
|
||||
#: snikket_web/invite.py:101 snikket_web/invite.py:168
|
||||
#: snikket_web/invite.py:112 snikket_web/invite.py:179
|
||||
msgid "Confirm password"
|
||||
msgstr "Konfirmasi kata sandi"
|
||||
|
||||
#: snikket_web/invite.py:105 snikket_web/invite.py:172
|
||||
#: snikket_web/invite.py:116 snikket_web/invite.py:183
|
||||
msgid "The passwords must match"
|
||||
msgstr "Kata sandi harus cocok"
|
||||
|
||||
#: snikket_web/invite.py:110
|
||||
#: snikket_web/invite.py:121
|
||||
msgid "Create account"
|
||||
msgstr "Buat akun"
|
||||
|
||||
#: snikket_web/invite.py:137
|
||||
#: snikket_web/invite.py:148
|
||||
msgid "That username is already taken"
|
||||
msgstr "Nama pengguna itu sudah dipakai"
|
||||
|
||||
#: snikket_web/invite.py:141 snikket_web/invite.py:205
|
||||
#: snikket_web/invite.py:152 snikket_web/invite.py:216
|
||||
msgid "Registration was declined for unknown reasons"
|
||||
msgstr "Pendaftaran ditolak karena alasan yang tidak diketahui"
|
||||
|
||||
#: snikket_web/invite.py:145
|
||||
#: snikket_web/invite.py:156
|
||||
msgid "The username is not valid"
|
||||
msgstr "Nama pengguna tidak valid"
|
||||
|
||||
#: snikket_web/invite.py:177 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:32
|
||||
#: snikket_web/invite.py:188 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:29
|
||||
msgid "Change password"
|
||||
msgstr "Ganti kata sandi"
|
||||
|
||||
#: snikket_web/main.py:36
|
||||
#: snikket_web/main.py:37
|
||||
msgid "Address"
|
||||
msgstr "Alamat"
|
||||
|
||||
#: snikket_web/main.py:46
|
||||
#: snikket_web/main.py:47
|
||||
msgid "Sign in"
|
||||
msgstr "Masuk"
|
||||
|
||||
#: snikket_web/main.py:72
|
||||
#: snikket_web/main.py:56
|
||||
msgid "Invalid username or password."
|
||||
msgstr "Nama pengguna atau kata sandi salah."
|
||||
|
||||
#: snikket_web/user.py:21
|
||||
#: snikket_web/main.py:84
|
||||
msgid "Login successful!"
|
||||
msgstr "Login berhasil!"
|
||||
|
||||
#: snikket_web/user.py:28
|
||||
msgid "Current password"
|
||||
msgstr "Kata sandi sekarang"
|
||||
|
||||
#: snikket_web/user.py:26
|
||||
#: snikket_web/user.py:33
|
||||
msgid "New password"
|
||||
msgstr "Kata sandi baru"
|
||||
|
||||
#: snikket_web/user.py:31
|
||||
#: snikket_web/user.py:38
|
||||
msgid "Confirm new password"
|
||||
msgstr "Konfirmasi kata sandi"
|
||||
|
||||
#: snikket_web/user.py:35
|
||||
#: snikket_web/user.py:42
|
||||
msgid "The new passwords must match"
|
||||
msgstr "Kata sandi baru harus cocok"
|
||||
|
||||
#: snikket_web/user.py:42
|
||||
#: snikket_web/user.py:49
|
||||
msgid "Sign out"
|
||||
msgstr "Keluar"
|
||||
|
||||
#: snikket_web/user.py:47
|
||||
#: snikket_web/user.py:54
|
||||
msgid "Nobody"
|
||||
msgstr "Tak seorangpun"
|
||||
|
||||
#: snikket_web/user.py:48
|
||||
#: snikket_web/user.py:55
|
||||
msgid "Friends only"
|
||||
msgstr "Hanya teman"
|
||||
|
||||
#: snikket_web/user.py:49
|
||||
#: snikket_web/user.py:56
|
||||
msgid "Everyone"
|
||||
msgstr "Semua orang"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:12
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:55
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:62
|
||||
msgid "Display name"
|
||||
msgstr "Nama tampilan"
|
||||
|
||||
#: snikket_web/user.py:59
|
||||
#: snikket_web/user.py:66
|
||||
msgid "Avatar"
|
||||
msgstr "Gambar profil"
|
||||
|
||||
#: snikket_web/user.py:63
|
||||
#: snikket_web/user.py:70
|
||||
msgid "Profile visibility"
|
||||
msgstr "Visibilitas profil"
|
||||
|
||||
#: snikket_web/user.py:68
|
||||
#: snikket_web/user.py:75
|
||||
msgid "Update profile"
|
||||
msgstr "Perbaharui profil"
|
||||
msgstr "Perbarui profil"
|
||||
|
||||
#: snikket_web/user.py:93
|
||||
#: snikket_web/user.py:100
|
||||
msgid "Incorrect password"
|
||||
msgstr "Kata sandi salah"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4 snikket_web/templates/login.html:36
|
||||
#: snikket_web/user.py:104
|
||||
msgid "Password changed"
|
||||
msgstr "Kata sandi diganti"
|
||||
|
||||
#: snikket_web/user.py:146
|
||||
msgid "Profile updated"
|
||||
msgstr "Profil diperbarui"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4
|
||||
#, python-format
|
||||
msgid "A <a href=\"%(about_url)s\">Snikket</a> service"
|
||||
msgstr "<a href=\"%(about_url)s\">Layanan</a> Snikket"
|
||||
|
||||
#: snikket_web/templates/about.html:9
|
||||
#: snikket_web/templates/_footer.html:6
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company."
|
||||
msgstr ""
|
||||
"“Snikket” dan logo burung beo adalah merek dagang dari Snikket Community "
|
||||
"Interest Company."
|
||||
|
||||
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
|
||||
msgid "About Snikket"
|
||||
msgstr "Tentang Snikket"
|
||||
|
||||
@@ -271,10 +339,26 @@ msgstr ""
|
||||
"href=\"%(apache20_url)s\">Lisensi Apache 2.0</a>."
|
||||
|
||||
#: snikket_web/templates/about.html:17
|
||||
msgid "Trademarks"
|
||||
msgstr "Merek dagang"
|
||||
|
||||
#: snikket_web/templates/about.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company. For more information about the trademarks, visit the <a href="
|
||||
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
|
||||
msgstr ""
|
||||
"“Snikket” dan logo burung beo adalah merek dagang dari Snikket Community "
|
||||
"Interest Company. Untuk informasi lebih lanjut tentang merek dagang, "
|
||||
"kunjungi <a href=\"%(trademarks_url)s\">halaman informasi merek dagang "
|
||||
"Snikket</a>."
|
||||
|
||||
#: snikket_web/templates/about.html:19
|
||||
msgid "Software Versions"
|
||||
msgstr "Versi perangkat lunak"
|
||||
|
||||
#: snikket_web/templates/about.html:27
|
||||
#: snikket_web/templates/about.html:29
|
||||
msgid "Back to the main page"
|
||||
msgstr "Kembali ke halaman depan"
|
||||
|
||||
@@ -285,7 +369,7 @@ msgstr "Wewenang Administrator"
|
||||
#: snikket_web/templates/admin_circles.html:4
|
||||
#: snikket_web/templates/admin_home.html:23
|
||||
msgid "Manage circles"
|
||||
msgstr "Atur kelompok"
|
||||
msgstr "Kelola kelompok"
|
||||
|
||||
#: snikket_web/templates/admin_circles.html:5
|
||||
msgid ""
|
||||
@@ -373,7 +457,7 @@ msgid "Debug information for %(user_name)s"
|
||||
msgstr "Informasi debug untuk %(user_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_debug_user.html:11
|
||||
#: snikket_web/templates/user_passwd.html:26
|
||||
#: snikket_web/templates/user_passwd.html:23
|
||||
msgid "Warning"
|
||||
msgstr "Peringatan"
|
||||
|
||||
@@ -426,9 +510,9 @@ msgstr ""
|
||||
#: snikket_web/templates/admin_edit_circle.html:44
|
||||
#: snikket_web/templates/admin_edit_invite.html:49
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:13
|
||||
#: snikket_web/templates/user_passwd.html:30
|
||||
#: snikket_web/templates/user_profile.html:31
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:28
|
||||
msgid "Back"
|
||||
msgstr "Kembali"
|
||||
|
||||
@@ -505,7 +589,6 @@ msgid "View invitation"
|
||||
msgstr "Lihat undangan"
|
||||
|
||||
#: snikket_web/templates/admin_edit_invite.html:13
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
#: snikket_web/templates/admin_reset_user_password.html:15
|
||||
msgid "Valid until"
|
||||
msgstr "Valid hingga"
|
||||
@@ -571,7 +654,7 @@ msgstr "Buat tautan setel ulang kata sandi atau hapus pengguna."
|
||||
#: snikket_web/templates/admin_home.html:15
|
||||
#: snikket_web/templates/admin_users.html:4
|
||||
msgid "Manage users"
|
||||
msgstr "Atur pengguna"
|
||||
msgstr "Kelola pengguna"
|
||||
|
||||
#: snikket_web/templates/admin_home.html:21
|
||||
msgid "Create and manage social circles represented on your service."
|
||||
@@ -583,7 +666,7 @@ msgstr "Undangan"
|
||||
|
||||
#: snikket_web/templates/admin_home.html:29
|
||||
msgid "Create, revoke or copy invitations."
|
||||
msgstr "Buat, batalkan, atau kopi undangan."
|
||||
msgstr "Buat, batalkan, atau salin undangan."
|
||||
|
||||
#: snikket_web/templates/admin_home.html:31
|
||||
#: snikket_web/templates/admin_invites.html:8
|
||||
@@ -591,10 +674,8 @@ msgid "Manage invitations"
|
||||
msgstr "Kelola undangan"
|
||||
|
||||
#: snikket_web/templates/admin_home.html:36
|
||||
#, fuzzy
|
||||
#| msgid "Go back to your user’s web portal page."
|
||||
msgid "Go back to your user's web portal page."
|
||||
msgstr "Kembali ke halaman portal web pengguna Anda."
|
||||
msgstr "Kembali ke halaman portal web pengguna."
|
||||
|
||||
#: snikket_web/templates/admin_home.html:38
|
||||
msgid "Exit admin panel"
|
||||
@@ -604,6 +685,10 @@ msgstr "Keluar panel administrator"
|
||||
msgid "Pending invitations"
|
||||
msgstr "Undangan menunggu jawaban"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
msgid "Expires"
|
||||
msgstr "Kadaluarsa"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:22
|
||||
msgid "Type"
|
||||
msgstr "Jenis"
|
||||
@@ -614,7 +699,7 @@ msgstr "Lihat detil undangan"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:46
|
||||
msgid "Copy invite link to clipboard"
|
||||
msgstr "Kopi tautan undangan ke papan klip"
|
||||
msgstr "Salin tautan undangan ke papan klip"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:49
|
||||
msgid "Delete invitation"
|
||||
@@ -687,7 +772,7 @@ msgid "The web portal encountered an internal error."
|
||||
msgstr "Portal web mengalami kesalahan internal."
|
||||
|
||||
#: snikket_web/templates/invite_invalid.html:5
|
||||
#: snikket_web/templates/invite_view.html:12
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#, python-format
|
||||
msgid "Invite to %(site_name)s"
|
||||
msgstr "Undang ke %(site_name)s"
|
||||
@@ -695,7 +780,7 @@ msgstr "Undang ke %(site_name)s"
|
||||
#: snikket_web/templates/invite_invalid.html:6
|
||||
#: snikket_web/templates/invite_register.html:10
|
||||
#: snikket_web/templates/invite_success.html:11
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#: snikket_web/templates/invite_view.html:14
|
||||
#, python-format
|
||||
msgid "Powered by <img src=\"%(logo_url)s\" alt=\"Snikket\">"
|
||||
msgstr "Didukung oleh <img alt=\"Snikket\" src=\"%(logo_url)s\">"
|
||||
@@ -742,18 +827,18 @@ msgstr ""
|
||||
"menggunakan aplikasi dengan mengklik tombol di bawah ini:"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:14
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
#: snikket_web/templates/invite_view.html:38
|
||||
msgid "App already installed?"
|
||||
msgstr "Aplikasi sudah dipasang?"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:16
|
||||
#: snikket_web/templates/invite_reset_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:39
|
||||
#: snikket_web/templates/invite_view.html:40
|
||||
msgid "Open the app"
|
||||
msgstr "Buka aplikasi"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:18
|
||||
#: snikket_web/templates/invite_view.html:41
|
||||
#: snikket_web/templates/invite_view.html:42
|
||||
msgid "This button works only if you have the app installed already!"
|
||||
msgstr "Tombol ini hanya berfungsi jika Anda sudah memasang aplikasinya!"
|
||||
|
||||
@@ -783,40 +868,36 @@ msgstr "Masukkan kata sandi yang tidak Anda gunakan di tempat lain."
|
||||
|
||||
#: snikket_web/templates/invite_reset.html:9
|
||||
#: snikket_web/templates/invite_reset_view.html:9
|
||||
#, fuzzy
|
||||
#| msgid "Change your password"
|
||||
msgid "Reset your password | Snikket"
|
||||
msgstr "Ganti kata sandi anda"
|
||||
msgstr "Setel ulang kata sandi | Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_reset.html:15
|
||||
#, fuzzy
|
||||
#| msgid "Change your password"
|
||||
msgid "Reset your password online"
|
||||
msgstr "Ganti kata sandi anda"
|
||||
msgstr "Setel ulang kata sandi secara daring"
|
||||
|
||||
#: snikket_web/templates/invite_reset.html:16
|
||||
msgid ""
|
||||
"To reset your password online, fill out the fields below and confirm using "
|
||||
"the button."
|
||||
msgstr ""
|
||||
"Untuk mengatur ulang kata sandi Anda secara daring, isi form di bawah ini "
|
||||
"dan klik tombol konfirmasi."
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:5
|
||||
msgid "Password reset successful | Snikket"
|
||||
msgstr ""
|
||||
msgstr "Setel ulang kata sandi berhasil | Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Password reset"
|
||||
msgid "Password reset successful"
|
||||
msgstr "Reset kata sandi"
|
||||
msgstr "Setel ulang kata sandi berhasil"
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:10
|
||||
msgid "Your password has been changed"
|
||||
msgstr ""
|
||||
msgstr "Kata sandi anda sudah diubah"
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:11
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
msgstr "Anda dapat masuk menggunakan kata sandi baru Anda."
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:12
|
||||
#: snikket_web/templates/invite_success.html:18
|
||||
@@ -824,10 +905,8 @@ msgid "You can now safely close this page."
|
||||
msgstr "Sekarang Anda dapat menutup halaman ini."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:14
|
||||
#, fuzzy
|
||||
#| msgid "Change your password"
|
||||
msgid "Reset your password"
|
||||
msgstr "Ganti kata sandi anda"
|
||||
msgstr "Setel ulang kata sandi"
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:15
|
||||
#, python-format
|
||||
@@ -835,25 +914,29 @@ msgid ""
|
||||
"This page allows you to reset the password of your account, <strong>"
|
||||
"%(account_jid)s</strong>, once."
|
||||
msgstr ""
|
||||
"Halaman ini memungkinkan Anda untuk mengatur ulang kata sandi akun, <strong>"
|
||||
"%(account_jid)s</strong>, sekali."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:17
|
||||
#, fuzzy
|
||||
#| msgid "Using the Snikket app"
|
||||
msgid "Using the app"
|
||||
msgstr "Menggunakan Snikket"
|
||||
msgstr "Gunakan aplikasi"
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:18
|
||||
msgid "To reset your password using the Snikket App, tap the button below."
|
||||
msgstr ""
|
||||
"Untuk mengatur ulang kata sandi Anda menggunakan Aplikasi Snikket, klik "
|
||||
"tombol di bawah ini."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:25
|
||||
msgid ""
|
||||
"Alternatively, you can scan the below code with the Snikket App using the "
|
||||
"Scan button at the top."
|
||||
msgstr ""
|
||||
"Atau, Anda dapat memindai kode di bawah ini dengan Snikket menggunakan "
|
||||
"tombol Pindai di bagian atas."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:26
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
#: snikket_web/templates/invite_view.html:76
|
||||
msgid ""
|
||||
"Your camera will turn on. Point it at the square code below until it is "
|
||||
"within the highlighted square on your screen, and wait until the app "
|
||||
@@ -865,10 +948,10 @@ msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:27
|
||||
msgid "You will then be prompted to enter a new password for your account."
|
||||
msgstr ""
|
||||
msgstr "Anda akan diminta untuk memasukkan kata sandi baru untuk akun Anda."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:43
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
msgid "Alternatives"
|
||||
msgstr "Alternatif"
|
||||
|
||||
@@ -878,6 +961,8 @@ msgid ""
|
||||
"You can also <a href=\"%(reset_url)s\">reset your password online</a> if the "
|
||||
"above button or scanning the QR code does not work for you."
|
||||
msgstr ""
|
||||
"Anda juga dapat <a href=\"%(reset_url)s\"> mengatur ulang kata sandi Anda "
|
||||
"secara online </a> jika tombol di atas atau memindai kode QR tidak berfungsi."
|
||||
|
||||
#: snikket_web/templates/invite_success.html:5
|
||||
#, python-format
|
||||
@@ -896,25 +981,23 @@ msgid ""
|
||||
msgstr "Selamat! Anda berhasil terdaftar di %(site_name)s sebagai %(jid)s."
|
||||
|
||||
#: snikket_web/templates/invite_success.html:13
|
||||
#, fuzzy
|
||||
#| msgid "Your XMPP address"
|
||||
msgid "Your address"
|
||||
msgstr "Alamat XMPP anda"
|
||||
msgstr "Alamat anda"
|
||||
|
||||
#: snikket_web/templates/invite_success.html:17
|
||||
msgid ""
|
||||
"You can now set up your legacy XMPP client with the above address and the "
|
||||
"password you chose during registration."
|
||||
msgstr ""
|
||||
"Anda sekarang dapat mengatur aplikasi XMPP lawas Anda dengan alamat di atas "
|
||||
"dan kata sandi yang Anda pilih saat pendaftaran."
|
||||
"Sekarang anda dapat mempersiapkan aplikasi XMPP lawas Anda dengan alamat di "
|
||||
"atas dan kata sandi yang dipilih saat pendaftaran."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:6
|
||||
#, python-format
|
||||
msgid "Invite to %(site_name)s | Snikket"
|
||||
msgstr "Mengundang ke %(site_name)s | Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:15
|
||||
#: snikket_web/templates/invite_view.html:16
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat with %(inviter_name)s using Snikket, a secure, "
|
||||
@@ -923,7 +1006,7 @@ msgstr ""
|
||||
"Anda diundang untuk bercakap-cakap dengan %(inviter_name)s menggunakan "
|
||||
"Snikket, aplikasi percakapan yang aman dan ramah privasi di %(site_name)s."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:17
|
||||
#: snikket_web/templates/invite_view.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat on %(site_name)s using Snikket, a secure, "
|
||||
@@ -932,15 +1015,15 @@ msgstr ""
|
||||
"Anda telah diundang untuk bercakap-cakap di %(site_name)s menggunakan "
|
||||
"Snikket, aplikasi percakapan yang aman dan ramah privasi."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:19
|
||||
#: snikket_web/templates/invite_view.html:20
|
||||
msgid "Get started"
|
||||
msgstr "Mulailah"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:22
|
||||
msgid "Install the Snikket App on your Android or iOS device."
|
||||
msgstr "Instal Snikket di perangkat Android atau iOS Anda."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:23
|
||||
#: snikket_web/templates/invite_view.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Install the Snikket App on your Android device (<a href=\"%(ios_info_url)s\" "
|
||||
@@ -949,19 +1032,19 @@ msgstr ""
|
||||
"Instal aplikasi Snikket di perangkat Android anda (<a href=\"%(ios_info_url)s"
|
||||
"\" rel=\"noopener noreferrer\" target=\"_blank\">iOS segera tersedia!</a>)."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:27
|
||||
#: snikket_web/templates/invite_view.html:28
|
||||
msgid "Get it on Google Play"
|
||||
msgstr "Dapatkan di Google Play"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:30
|
||||
msgid "Download on the App Store"
|
||||
msgstr "Unduh di App Store"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:33
|
||||
msgid "Not on mobile?"
|
||||
msgstr "Bukan di ponsel?"
|
||||
#: snikket_web/templates/invite_view.html:34
|
||||
msgid "Send to mobile device"
|
||||
msgstr "Dikirim ke telepon seluler"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:36
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
msgid ""
|
||||
"After installation the app should automatically open and prompt you to "
|
||||
"create an account. If not, simply click the button below."
|
||||
@@ -969,7 +1052,7 @@ msgstr ""
|
||||
"Setelah instalasi, aplikasi akan terbuka otomatis dan meminta Anda untuk "
|
||||
"membuat akun. Jika tidak, cukup klik tombol di bawah."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
#: snikket_web/templates/invite_view.html:45
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can connect to Snikket using any XMPP-compatible software. If the button "
|
||||
@@ -980,16 +1063,16 @@ msgstr ""
|
||||
"XMPP. Jika tombol di atas tidak berfungsi dengan aplikasi, Anda mungkin "
|
||||
"perlu <a href=\"%(register_url)s\">mendaftarkan akun secara manual</a>."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:50
|
||||
#: snikket_web/templates/invite_view.html:51
|
||||
msgid "Scan invite code"
|
||||
msgstr "Pindai kode undangan"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:53
|
||||
#: snikket_web/templates/invite_view.html:82
|
||||
#: snikket_web/templates/invite_view.html:54
|
||||
#: snikket_web/templates/invite_view.html:83
|
||||
msgid "Close"
|
||||
msgstr "Tutup"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:56
|
||||
#: snikket_web/templates/invite_view.html:57
|
||||
msgid ""
|
||||
"You can transfer this invite to your mobile device by scanning a code with "
|
||||
"your camera. You can use either a QR scanner app or the Snikket app itself."
|
||||
@@ -998,22 +1081,22 @@ msgstr ""
|
||||
"kode dengan kamera. Anda dapat menggunakan aplikasi pemindai QR atau "
|
||||
"aplikasi Snikket."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:61
|
||||
#: snikket_web/templates/invite_view.html:62
|
||||
msgid "Using a QR code scanner"
|
||||
msgstr "Menggunakan pemindai kode QR"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:63
|
||||
#: snikket_web/templates/invite_view.html:64
|
||||
msgid "Using the Snikket app"
|
||||
msgstr "Menggunakan Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:68
|
||||
#: snikket_web/templates/invite_view.html:69
|
||||
msgid ""
|
||||
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
|
||||
msgstr ""
|
||||
"Gunakan pemindai <em>kode QR</em> di perangkat seluler Anda untuk memindai "
|
||||
"kode di bawah:"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:74
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
msgid ""
|
||||
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
|
||||
"button at the top."
|
||||
@@ -1023,7 +1106,7 @@ msgstr ""
|
||||
|
||||
#: snikket_web/templates/library.j2:18
|
||||
msgid "Copy link"
|
||||
msgstr "Kopi tautan"
|
||||
msgstr "Salin tautan"
|
||||
|
||||
#: snikket_web/templates/library.j2:81
|
||||
msgid "Invalid input"
|
||||
@@ -1048,12 +1131,33 @@ msgstr "Login Snikket"
|
||||
|
||||
#: snikket_web/templates/login.html:14
|
||||
msgid "Enter your Snikket address and password to manage your account."
|
||||
msgstr "Ketik alamat Snikket dan kata sandinya untuk mengatur akun anda."
|
||||
msgstr "Ketik alamat Snikket dan kata sandinya untuk mengelola akun anda."
|
||||
|
||||
#: snikket_web/templates/login.html:18
|
||||
msgid "Login failed"
|
||||
msgstr "Percobaan masuk gagal"
|
||||
|
||||
#: snikket_web/templates/login.html:23
|
||||
msgid "Incorrect address"
|
||||
msgstr "Alamat salah"
|
||||
|
||||
#: snikket_web/templates/login.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
|
||||
"em>. Your password was not sent."
|
||||
msgstr ""
|
||||
"Layanan Snikket ini hanya menghosting alamat yang diakhiri dengan "
|
||||
"<em>@%(snikket_domain)s</em>. Kata sandi Anda tidak terkirim."
|
||||
|
||||
#: snikket_web/templates/unauth.html:16
|
||||
msgid "Operation successful"
|
||||
msgstr "Operasi berhasil"
|
||||
|
||||
#: snikket_web/templates/unauth.html:18
|
||||
msgid "Error"
|
||||
msgstr "Kesalahan"
|
||||
|
||||
#: snikket_web/templates/user_home.html:9
|
||||
msgid "Welcome!"
|
||||
msgstr "Selamat datang!"
|
||||
@@ -1087,11 +1191,11 @@ msgstr "Kelola pengguna, undangan dan kelompok pengguna layanan Snikket."
|
||||
msgid "Admin panel"
|
||||
msgstr "Panel Administrator"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:8
|
||||
#: snikket_web/templates/user_logout.html:5
|
||||
msgid "Sign out of the Snikket Web Portal"
|
||||
msgstr "Keluar dari Portal Web Snikket"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:9
|
||||
#: snikket_web/templates/user_logout.html:6
|
||||
msgid ""
|
||||
"Click below to log yourself out of the web portal. This does not affect any "
|
||||
"other connected devices."
|
||||
@@ -1099,11 +1203,11 @@ msgstr ""
|
||||
"Klik tombol untuk keluar dari portal web. Ini tidak mempengaruhi perangkat "
|
||||
"lain yang terhubung."
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:8
|
||||
#: snikket_web/templates/user_passwd.html:5
|
||||
msgid "Change your password"
|
||||
msgstr "Ganti kata sandi anda"
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:9
|
||||
#: snikket_web/templates/user_passwd.html:6
|
||||
msgid ""
|
||||
"To change your password, you need to provide the current password as well as "
|
||||
"the new one. To reduce the chance of typos, we ask for your new password "
|
||||
@@ -1113,7 +1217,7 @@ msgstr ""
|
||||
"baru. Untuk mengurangi kemungkinan salah ketik, kami meminta anda mengetik "
|
||||
"sandi baru dua kali."
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_passwd.html:24
|
||||
msgid ""
|
||||
"After changing your password, you will have to enter the new password on all "
|
||||
"of your devices."
|
||||
@@ -1121,19 +1225,19 @@ msgstr ""
|
||||
"Sesudah penggantian kata sandi, anda perlu memasukkan kata sandi baru ke "
|
||||
"semua perangkat anda."
|
||||
|
||||
#: snikket_web/templates/user_profile.html:7
|
||||
#: snikket_web/templates/user_profile.html:4
|
||||
msgid "Update your profile"
|
||||
msgstr "Perbaharui profil anda"
|
||||
msgstr "Perbarui profil anda"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:9
|
||||
#: snikket_web/templates/user_profile.html:6
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:22
|
||||
#: snikket_web/templates/user_profile.html:19
|
||||
msgid "Visibility"
|
||||
msgstr "Visibilitas"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:23
|
||||
#: snikket_web/templates/user_profile.html:20
|
||||
msgid ""
|
||||
"This section allows you to control who can see your profile information, "
|
||||
"like avatar and nickname."
|
||||
@@ -1141,6 +1245,9 @@ msgstr ""
|
||||
"Bagian ini memungkinkan Anda untuk mengontrol siapa yang bisa melihat profil "
|
||||
"Anda, seperti avatar dan nama panggilan."
|
||||
|
||||
#~ msgid "Not on mobile?"
|
||||
#~ msgstr "Bukan di ponsel?"
|
||||
|
||||
#~ msgid "Edit user %(user_name)s"
|
||||
#~ msgstr "Edit pengguna %(user_name)s"
|
||||
|
||||
@@ -1227,6 +1334,3 @@ msgstr ""
|
||||
|
||||
#~ msgid "Copy operation failed"
|
||||
#~ msgstr "Proses penyalinan gagal"
|
||||
|
||||
#~ msgid "Password change failed"
|
||||
#~ msgstr "Gagal mengganti kata kunci"
|
||||
|
||||
1254
snikket_web/translations/it/LC_MESSAGES/messages.po
Normal file
1254
snikket_web/translations/it/LC_MESSAGES/messages.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2021-01-30 12:45+0100\n"
|
||||
"POT-Creation-Date: 2021-02-23 07:55+0100\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-"
|
||||
@@ -24,194 +24,286 @@ msgstr ""
|
||||
msgid "Delete user permanently"
|
||||
msgstr "ユーザーを削除する"
|
||||
|
||||
#: snikket_web/admin.py:129
|
||||
#: snikket_web/admin.py:73
|
||||
msgid "User deleted"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:116
|
||||
#, fuzzy
|
||||
#| msgid "Password reset link for %(user_name)s"
|
||||
msgid "Password reset link created"
|
||||
msgstr "%(user_name)s のパスワード再設定リンク"
|
||||
|
||||
#: snikket_web/admin.py:122
|
||||
#, fuzzy
|
||||
#| msgid "Password reset link for %(user_name)s"
|
||||
msgid "Password reset link deleted"
|
||||
msgstr "%(user_name)s のパスワード再設定リンク"
|
||||
|
||||
#: snikket_web/admin.py:141
|
||||
msgid "Invite to circle"
|
||||
msgstr "サークルに紹介する"
|
||||
|
||||
#: snikket_web/admin.py:135
|
||||
#: snikket_web/admin.py:147
|
||||
msgid "At least one circle must be selected"
|
||||
msgstr "サークルを選択してください"
|
||||
|
||||
#: snikket_web/admin.py:140
|
||||
#: snikket_web/admin.py:152
|
||||
msgid "Valid for"
|
||||
msgstr "有効期限"
|
||||
|
||||
#: snikket_web/admin.py:142
|
||||
#: snikket_web/admin.py:154
|
||||
msgid "One hour"
|
||||
msgstr "一時間"
|
||||
|
||||
#: snikket_web/admin.py:143
|
||||
#: snikket_web/admin.py:155
|
||||
msgid "Twelve hours"
|
||||
msgstr "12時間"
|
||||
|
||||
#: snikket_web/admin.py:144
|
||||
#: snikket_web/admin.py:156
|
||||
msgid "One day"
|
||||
msgstr "一日"
|
||||
|
||||
#: snikket_web/admin.py:145
|
||||
#: snikket_web/admin.py:157
|
||||
msgid "One week"
|
||||
msgstr "一週間"
|
||||
|
||||
#: snikket_web/admin.py:146
|
||||
#: snikket_web/admin.py:158
|
||||
msgid "Four weeks"
|
||||
msgstr "4週間"
|
||||
|
||||
#: snikket_web/admin.py:152 snikket_web/templates/admin_edit_invite.html:17
|
||||
#: snikket_web/admin.py:164 snikket_web/templates/admin_edit_invite.html:17
|
||||
msgid "Invitation type"
|
||||
msgstr "紹介の種類"
|
||||
|
||||
#: snikket_web/admin.py:154 snikket_web/templates/library.j2:116
|
||||
#: snikket_web/admin.py:166 snikket_web/templates/library.j2:116
|
||||
msgid "Individual"
|
||||
msgstr "一回"
|
||||
|
||||
#: snikket_web/admin.py:155 snikket_web/templates/library.j2:114
|
||||
#: snikket_web/admin.py:167 snikket_web/templates/library.j2:114
|
||||
msgid "Group"
|
||||
msgstr "複数回"
|
||||
|
||||
#: snikket_web/admin.py:161
|
||||
#: snikket_web/admin.py:173
|
||||
msgid "New invitation link"
|
||||
msgstr "新しい紹介状"
|
||||
|
||||
#: snikket_web/admin.py:223
|
||||
#: snikket_web/admin.py:235
|
||||
msgid "Revoke"
|
||||
msgstr "取り消す"
|
||||
|
||||
#: snikket_web/admin.py:283 snikket_web/admin.py:327
|
||||
#: snikket_web/admin.py:259
|
||||
#, fuzzy
|
||||
#| msgid "Invitation type"
|
||||
msgid "Invitation created"
|
||||
msgstr "紹介の種類"
|
||||
|
||||
#: snikket_web/admin.py:275
|
||||
#, fuzzy
|
||||
#| msgid "New invitation link"
|
||||
msgid "No such invitation exists"
|
||||
msgstr "新しい紹介状"
|
||||
|
||||
#: snikket_web/admin.py:290
|
||||
#, fuzzy
|
||||
#| msgid "Invitation type"
|
||||
msgid "Invitation revoked"
|
||||
msgstr "紹介の種類"
|
||||
|
||||
#: snikket_web/admin.py:307 snikket_web/admin.py:355
|
||||
msgid "Name"
|
||||
msgstr "名"
|
||||
|
||||
#: snikket_web/admin.py:288 snikket_web/templates/admin_circles.html:47
|
||||
#: snikket_web/admin.py:312 snikket_web/templates/admin_circles.html:47
|
||||
msgid "Create circle"
|
||||
msgstr "サークルを作成"
|
||||
|
||||
#: snikket_web/admin.py:332
|
||||
#: snikket_web/admin.py:342
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle created"
|
||||
msgstr "サークル名"
|
||||
|
||||
#: snikket_web/admin.py:360
|
||||
msgid "Select user"
|
||||
msgstr "ユーザー選択"
|
||||
|
||||
#: snikket_web/admin.py:337
|
||||
#: snikket_web/admin.py:365
|
||||
msgid "Update circle"
|
||||
msgstr "サークルを更新"
|
||||
|
||||
#: snikket_web/admin.py:341
|
||||
#: snikket_web/admin.py:369
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "サークルを削除"
|
||||
|
||||
#: snikket_web/admin.py:347
|
||||
#: snikket_web/admin.py:375
|
||||
msgid "Add user"
|
||||
msgstr "ユーザーを追加する"
|
||||
|
||||
#: snikket_web/admin.py:391
|
||||
#, fuzzy
|
||||
#| msgid "No circles"
|
||||
msgid "No such circle exists"
|
||||
msgstr "なし"
|
||||
|
||||
#: snikket_web/admin.py:428
|
||||
#, fuzzy
|
||||
#| msgid "Circle name"
|
||||
msgid "Circle data updated"
|
||||
msgstr "サークル名"
|
||||
|
||||
#: snikket_web/admin.py:434
|
||||
#, fuzzy
|
||||
#| msgid "Circle members"
|
||||
msgid "Circle deleted"
|
||||
msgstr "サークル会員"
|
||||
|
||||
#: snikket_web/admin.py:445
|
||||
#, fuzzy
|
||||
#| msgid "Invite to circle"
|
||||
msgid "User added to circle"
|
||||
msgstr "サークルに紹介する"
|
||||
|
||||
#: snikket_web/admin.py:454
|
||||
#, fuzzy
|
||||
#| msgid "Remove user %(username)s from circle"
|
||||
msgid "User removed from circle"
|
||||
msgstr "%(username)s をサークルから外す"
|
||||
|
||||
#: snikket_web/infra.py:40
|
||||
msgid "Main"
|
||||
msgstr "第一サークル"
|
||||
|
||||
#: snikket_web/invite.py:93
|
||||
#: snikket_web/invite.py:104
|
||||
msgid "Username"
|
||||
msgstr "ユーザー名"
|
||||
|
||||
#: snikket_web/invite.py:97 snikket_web/invite.py:164 snikket_web/main.py:41
|
||||
#: snikket_web/invite.py:108 snikket_web/invite.py:175 snikket_web/main.py:42
|
||||
msgid "Password"
|
||||
msgstr "パスワード"
|
||||
|
||||
#: snikket_web/invite.py:101 snikket_web/invite.py:168
|
||||
#: snikket_web/invite.py:112 snikket_web/invite.py:179
|
||||
msgid "Confirm password"
|
||||
msgstr "確認用パスワード"
|
||||
|
||||
#: snikket_web/invite.py:105 snikket_web/invite.py:172
|
||||
#: snikket_web/invite.py:116 snikket_web/invite.py:183
|
||||
msgid "The passwords must match"
|
||||
msgstr "確認用パスワードが一致しません"
|
||||
|
||||
#: snikket_web/invite.py:110
|
||||
#: snikket_web/invite.py:121
|
||||
msgid "Create account"
|
||||
msgstr "アカウント作成"
|
||||
|
||||
#: snikket_web/invite.py:137
|
||||
#: snikket_web/invite.py:148
|
||||
msgid "That username is already taken"
|
||||
msgstr "このユーザー名は存在しています"
|
||||
|
||||
#: snikket_web/invite.py:141 snikket_web/invite.py:205
|
||||
#: snikket_web/invite.py:152 snikket_web/invite.py:216
|
||||
msgid "Registration was declined for unknown reasons"
|
||||
msgstr "理由不明の登録エラー"
|
||||
|
||||
#: snikket_web/invite.py:145
|
||||
#: snikket_web/invite.py:156
|
||||
msgid "The username is not valid"
|
||||
msgstr "ユーザー名が不正"
|
||||
|
||||
#: snikket_web/invite.py:177 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:32
|
||||
#: snikket_web/invite.py:188 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:29
|
||||
msgid "Change password"
|
||||
msgstr "パスワード変更"
|
||||
|
||||
#: snikket_web/main.py:36
|
||||
#: snikket_web/main.py:37
|
||||
msgid "Address"
|
||||
msgstr "アドレス"
|
||||
|
||||
#: snikket_web/main.py:46
|
||||
#: snikket_web/main.py:47
|
||||
msgid "Sign in"
|
||||
msgstr "サインイン"
|
||||
|
||||
#: snikket_web/main.py:72
|
||||
#: snikket_web/main.py:56
|
||||
msgid "Invalid username or password."
|
||||
msgstr "ユーザー名またはパスワードが不正。"
|
||||
|
||||
#: snikket_web/user.py:21
|
||||
#: snikket_web/main.py:84
|
||||
msgid "Login successful!"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:28
|
||||
msgid "Current password"
|
||||
msgstr "現在のパスワード"
|
||||
|
||||
#: snikket_web/user.py:26
|
||||
#: snikket_web/user.py:33
|
||||
msgid "New password"
|
||||
msgstr "新しいパスワード"
|
||||
|
||||
#: snikket_web/user.py:31
|
||||
#: snikket_web/user.py:38
|
||||
msgid "Confirm new password"
|
||||
msgstr "新しいパスワードの確認"
|
||||
|
||||
#: snikket_web/user.py:35
|
||||
#: snikket_web/user.py:42
|
||||
msgid "The new passwords must match"
|
||||
msgstr "新しいパスワードが不一致"
|
||||
|
||||
#: snikket_web/user.py:42
|
||||
#: snikket_web/user.py:49
|
||||
msgid "Sign out"
|
||||
msgstr "サインアウト"
|
||||
|
||||
#: snikket_web/user.py:47
|
||||
#: snikket_web/user.py:54
|
||||
msgid "Nobody"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:48
|
||||
#: snikket_web/user.py:55
|
||||
msgid "Friends only"
|
||||
msgstr "コンタクト限定"
|
||||
|
||||
#: snikket_web/user.py:49
|
||||
#: snikket_web/user.py:56
|
||||
msgid "Everyone"
|
||||
msgstr "全員"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:12
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:55
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:62
|
||||
msgid "Display name"
|
||||
msgstr "表示名"
|
||||
|
||||
#: snikket_web/user.py:59
|
||||
#: snikket_web/user.py:66
|
||||
msgid "Avatar"
|
||||
msgstr "アバター"
|
||||
|
||||
#: snikket_web/user.py:63
|
||||
#: snikket_web/user.py:70
|
||||
msgid "Profile visibility"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:68
|
||||
#: snikket_web/user.py:75
|
||||
msgid "Update profile"
|
||||
msgstr "プロファイル管理"
|
||||
|
||||
#: snikket_web/user.py:93
|
||||
#: snikket_web/user.py:100
|
||||
msgid "Incorrect password"
|
||||
msgstr "パスワード不正"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4 snikket_web/templates/login.html:36
|
||||
#: snikket_web/user.py:104
|
||||
#, fuzzy
|
||||
#| msgid "Password reset"
|
||||
msgid "Password changed"
|
||||
msgstr "パスワード再設定"
|
||||
|
||||
#: snikket_web/user.py:146
|
||||
#, fuzzy
|
||||
#| msgid "Profile"
|
||||
msgid "Profile updated"
|
||||
msgstr "プロファイル"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4
|
||||
#, python-format
|
||||
msgid "A <a href=\"%(about_url)s\">Snikket</a> service"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:9
|
||||
#: snikket_web/templates/_footer.html:6
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
|
||||
msgid "About Snikket"
|
||||
msgstr "Snikketについて"
|
||||
|
||||
@@ -262,10 +354,22 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:17
|
||||
msgid "Trademarks"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company. For more information about the trademarks, visit the <a href="
|
||||
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:19
|
||||
msgid "Software Versions"
|
||||
msgstr "ソフトウェアバーション"
|
||||
|
||||
#: snikket_web/templates/about.html:27
|
||||
#: snikket_web/templates/about.html:29
|
||||
msgid "Back to the main page"
|
||||
msgstr "戻る"
|
||||
|
||||
@@ -355,7 +459,7 @@ msgid "Debug information for %(user_name)s"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_debug_user.html:11
|
||||
#: snikket_web/templates/user_passwd.html:26
|
||||
#: snikket_web/templates/user_passwd.html:23
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
@@ -407,9 +511,9 @@ msgstr ""
|
||||
#: snikket_web/templates/admin_edit_circle.html:44
|
||||
#: snikket_web/templates/admin_edit_invite.html:49
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:13
|
||||
#: snikket_web/templates/user_passwd.html:30
|
||||
#: snikket_web/templates/user_profile.html:31
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:28
|
||||
msgid "Back"
|
||||
msgstr "戻る"
|
||||
|
||||
@@ -483,7 +587,6 @@ msgid "View invitation"
|
||||
msgstr "紹介状表示"
|
||||
|
||||
#: snikket_web/templates/admin_edit_invite.html:13
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
#: snikket_web/templates/admin_reset_user_password.html:15
|
||||
msgid "Valid until"
|
||||
msgstr "有効期限"
|
||||
@@ -588,6 +691,10 @@ msgstr ""
|
||||
msgid "Pending invitations"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
msgid "Expires"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:22
|
||||
msgid "Type"
|
||||
msgstr "種類"
|
||||
@@ -669,7 +776,7 @@ msgid "The web portal encountered an internal error."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_invalid.html:5
|
||||
#: snikket_web/templates/invite_view.html:12
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#, python-format
|
||||
msgid "Invite to %(site_name)s"
|
||||
msgstr "%(site_name)s に紹介する"
|
||||
@@ -677,7 +784,7 @@ msgstr "%(site_name)s に紹介する"
|
||||
#: snikket_web/templates/invite_invalid.html:6
|
||||
#: snikket_web/templates/invite_register.html:10
|
||||
#: snikket_web/templates/invite_success.html:11
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#: snikket_web/templates/invite_view.html:14
|
||||
#, python-format
|
||||
msgid "Powered by <img src=\"%(logo_url)s\" alt=\"Snikket\">"
|
||||
msgstr "Powered by <img alt=\"Snikket\" src=\"%(logo_url)s\">"
|
||||
@@ -720,18 +827,18 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:14
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
#: snikket_web/templates/invite_view.html:38
|
||||
msgid "App already installed?"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:16
|
||||
#: snikket_web/templates/invite_reset_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:39
|
||||
#: snikket_web/templates/invite_view.html:40
|
||||
msgid "Open the app"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:18
|
||||
#: snikket_web/templates/invite_view.html:41
|
||||
#: snikket_web/templates/invite_view.html:42
|
||||
msgid "This button works only if you have the app installed already!"
|
||||
msgstr ""
|
||||
|
||||
@@ -824,7 +931,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:26
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
#: snikket_web/templates/invite_view.html:76
|
||||
msgid ""
|
||||
"Your camera will turn on. Point it at the square code below until it is "
|
||||
"within the highlighted square on your screen, and wait until the app "
|
||||
@@ -836,7 +943,7 @@ msgid "You will then be prompted to enter a new password for your account."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:43
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
msgid "Alternatives"
|
||||
msgstr ""
|
||||
|
||||
@@ -881,54 +988,54 @@ msgstr ""
|
||||
msgid "Invite to %(site_name)s | Snikket"
|
||||
msgstr "%(site_name)s に紹介 | Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:15
|
||||
#: snikket_web/templates/invite_view.html:16
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat with %(inviter_name)s using Snikket, a secure, "
|
||||
"privacy-friendly chat app on %(site_name)s."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:17
|
||||
#: snikket_web/templates/invite_view.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat on %(site_name)s using Snikket, a secure, "
|
||||
"privacy-friendly chat app."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:19
|
||||
#: snikket_web/templates/invite_view.html:20
|
||||
msgid "Get started"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:22
|
||||
msgid "Install the Snikket App on your Android or iOS device."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:23
|
||||
#: snikket_web/templates/invite_view.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Install the Snikket App on your Android device (<a href=\"%(ios_info_url)s\" "
|
||||
"rel=\"noopener noreferrer\" target=\"_blank\">iOS coming soon!</a>)."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:27
|
||||
#: snikket_web/templates/invite_view.html:28
|
||||
msgid "Get it on Google Play"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:30
|
||||
msgid "Download on the App Store"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:33
|
||||
msgid "Not on mobile?"
|
||||
#: snikket_web/templates/invite_view.html:34
|
||||
msgid "Send to mobile device"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:36
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
msgid ""
|
||||
"After installation the app should automatically open and prompt you to "
|
||||
"create an account. If not, simply click the button below."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
#: snikket_web/templates/invite_view.html:45
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can connect to Snikket using any XMPP-compatible software. If the button "
|
||||
@@ -936,35 +1043,35 @@ msgid ""
|
||||
"\">register an account manually</a>."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:50
|
||||
#: snikket_web/templates/invite_view.html:51
|
||||
msgid "Scan invite code"
|
||||
msgstr "紹介状をスキャン"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:53
|
||||
#: snikket_web/templates/invite_view.html:82
|
||||
#: snikket_web/templates/invite_view.html:54
|
||||
#: snikket_web/templates/invite_view.html:83
|
||||
msgid "Close"
|
||||
msgstr "閉める"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:56
|
||||
#: snikket_web/templates/invite_view.html:57
|
||||
msgid ""
|
||||
"You can transfer this invite to your mobile device by scanning a code with "
|
||||
"your camera. You can use either a QR scanner app or the Snikket app itself."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:61
|
||||
#: snikket_web/templates/invite_view.html:62
|
||||
msgid "Using a QR code scanner"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:63
|
||||
#: snikket_web/templates/invite_view.html:64
|
||||
msgid "Using the Snikket app"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:68
|
||||
#: snikket_web/templates/invite_view.html:69
|
||||
msgid ""
|
||||
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:74
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
msgid ""
|
||||
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
|
||||
"button at the top."
|
||||
@@ -1002,6 +1109,27 @@ msgstr ""
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/login.html:23
|
||||
#, fuzzy
|
||||
#| msgid "Incorrect password"
|
||||
msgid "Incorrect address"
|
||||
msgstr "パスワード不正"
|
||||
|
||||
#: snikket_web/templates/login.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
|
||||
"em>. Your password was not sent."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/unauth.html:16
|
||||
msgid "Operation successful"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/unauth.html:18
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_home.html:9
|
||||
msgid "Welcome!"
|
||||
msgstr "ようこそ!"
|
||||
@@ -1045,48 +1173,48 @@ msgstr ""
|
||||
msgid "Admin panel"
|
||||
msgstr "管理"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:8
|
||||
#: snikket_web/templates/user_logout.html:5
|
||||
msgid "Sign out of the Snikket Web Portal"
|
||||
msgstr "Snikket ホームページからログアウト"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:9
|
||||
#: snikket_web/templates/user_logout.html:6
|
||||
msgid ""
|
||||
"Click below to log yourself out of the web portal. This does not affect any "
|
||||
"other connected devices."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:8
|
||||
#: snikket_web/templates/user_passwd.html:5
|
||||
msgid "Change your password"
|
||||
msgstr "パスワード変更"
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:9
|
||||
#: snikket_web/templates/user_passwd.html:6
|
||||
msgid ""
|
||||
"To change your password, you need to provide the current password as well as "
|
||||
"the new one. To reduce the chance of typos, we ask for your new password "
|
||||
"twice."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_passwd.html:24
|
||||
msgid ""
|
||||
"After changing your password, you will have to enter the new password on all "
|
||||
"of your devices."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_profile.html:7
|
||||
#: snikket_web/templates/user_profile.html:4
|
||||
#, fuzzy
|
||||
#| msgid "Update profile"
|
||||
msgid "Update your profile"
|
||||
msgstr "プロファイル管理"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:9
|
||||
#: snikket_web/templates/user_profile.html:6
|
||||
msgid "Profile"
|
||||
msgstr "プロファイル"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:22
|
||||
#: snikket_web/templates/user_profile.html:19
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_profile.html:23
|
||||
#: snikket_web/templates/user_profile.html:20
|
||||
msgid ""
|
||||
"This section allows you to control who can see your profile information, "
|
||||
"like avatar and nickname."
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2021-01-30 12:45+0100\n"
|
||||
"POT-Creation-Date: 2021-03-20 16:15+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -21,194 +21,270 @@ msgstr ""
|
||||
msgid "Delete user permanently"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:129
|
||||
#: snikket_web/admin.py:73
|
||||
msgid "User deleted"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:116
|
||||
msgid "Password reset link created"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:122
|
||||
msgid "Password reset link deleted"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:141
|
||||
msgid "Invite to circle"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:135
|
||||
#: snikket_web/admin.py:147
|
||||
msgid "At least one circle must be selected"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:140
|
||||
#: snikket_web/admin.py:152
|
||||
msgid "Valid for"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:142
|
||||
#: snikket_web/admin.py:154
|
||||
msgid "One hour"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:143
|
||||
#: snikket_web/admin.py:155
|
||||
msgid "Twelve hours"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:144
|
||||
#: snikket_web/admin.py:156
|
||||
msgid "One day"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:145
|
||||
#: snikket_web/admin.py:157
|
||||
msgid "One week"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:146
|
||||
#: snikket_web/admin.py:158
|
||||
msgid "Four weeks"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:152 snikket_web/templates/admin_edit_invite.html:17
|
||||
#: snikket_web/admin.py:164 snikket_web/templates/admin_edit_invite.html:17
|
||||
msgid "Invitation type"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:154 snikket_web/templates/library.j2:116
|
||||
#: snikket_web/admin.py:166 snikket_web/templates/library.j2:116
|
||||
msgid "Individual"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:155 snikket_web/templates/library.j2:114
|
||||
#: snikket_web/admin.py:167 snikket_web/templates/library.j2:114
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:161
|
||||
#: snikket_web/admin.py:173
|
||||
msgid "New invitation link"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:223
|
||||
#: snikket_web/admin.py:235
|
||||
msgid "Revoke"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:283 snikket_web/admin.py:327
|
||||
#: snikket_web/admin.py:259
|
||||
msgid "Invitation created"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:275
|
||||
msgid "No such invitation exists"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:290
|
||||
msgid "Invitation revoked"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:307 snikket_web/admin.py:355
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:288 snikket_web/templates/admin_circles.html:47
|
||||
#: snikket_web/admin.py:312 snikket_web/templates/admin_circles.html:47
|
||||
msgid "Create circle"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:332
|
||||
#: snikket_web/admin.py:342
|
||||
msgid "Circle created"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:360
|
||||
msgid "Select user"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:337
|
||||
#: snikket_web/admin.py:365
|
||||
msgid "Update circle"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:341
|
||||
#: snikket_web/admin.py:369
|
||||
msgid "Delete circle permanently"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:347
|
||||
#: snikket_web/admin.py:375
|
||||
msgid "Add user"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:391
|
||||
msgid "No such circle exists"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:428
|
||||
msgid "Circle data updated"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:434
|
||||
msgid "Circle deleted"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:445
|
||||
msgid "User added to circle"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/admin.py:454
|
||||
msgid "User removed from circle"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/infra.py:40
|
||||
msgid "Main"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:93
|
||||
#: snikket_web/invite.py:106
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:97 snikket_web/invite.py:164 snikket_web/main.py:41
|
||||
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:42
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:101 snikket_web/invite.py:168
|
||||
#: snikket_web/invite.py:114 snikket_web/invite.py:181
|
||||
msgid "Confirm password"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:105 snikket_web/invite.py:172
|
||||
#: snikket_web/invite.py:118 snikket_web/invite.py:185
|
||||
msgid "The passwords must match"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:110
|
||||
#: snikket_web/invite.py:123
|
||||
msgid "Create account"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:137
|
||||
#: snikket_web/invite.py:150
|
||||
msgid "That username is already taken"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:141 snikket_web/invite.py:205
|
||||
#: snikket_web/invite.py:154 snikket_web/invite.py:218
|
||||
msgid "Registration was declined for unknown reasons"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:145
|
||||
#: snikket_web/invite.py:158
|
||||
msgid "The username is not valid"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/invite.py:177 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:32
|
||||
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:29
|
||||
msgid "Change password"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/main.py:36
|
||||
#: snikket_web/main.py:37
|
||||
msgid "Address"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/main.py:46
|
||||
#: snikket_web/main.py:47
|
||||
msgid "Sign in"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/main.py:72
|
||||
#: snikket_web/main.py:56
|
||||
msgid "Invalid username or password."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:21
|
||||
#: snikket_web/main.py:84
|
||||
msgid "Login successful!"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:29
|
||||
msgid "Current password"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:26
|
||||
#: snikket_web/user.py:34
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:31
|
||||
#: snikket_web/user.py:39
|
||||
msgid "Confirm new password"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:35
|
||||
#: snikket_web/user.py:43
|
||||
msgid "The new passwords must match"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:42
|
||||
#: snikket_web/user.py:50
|
||||
msgid "Sign out"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:47
|
||||
#: snikket_web/user.py:55
|
||||
msgid "Nobody"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:48
|
||||
#: snikket_web/user.py:56
|
||||
msgid "Friends only"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:49
|
||||
#: snikket_web/user.py:57
|
||||
msgid "Everyone"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:12
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:55
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:63
|
||||
msgid "Display name"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:59
|
||||
#: snikket_web/user.py:67
|
||||
msgid "Avatar"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:63
|
||||
#: snikket_web/user.py:71
|
||||
msgid "Profile visibility"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:68
|
||||
#: snikket_web/user.py:76
|
||||
msgid "Update profile"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:93
|
||||
#: snikket_web/user.py:101
|
||||
msgid "Incorrect password"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/_footer.html:4 snikket_web/templates/login.html:36
|
||||
#: snikket_web/user.py:105
|
||||
msgid "Password changed"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:113
|
||||
msgid ""
|
||||
"The chosen avatar is too big. To be able to upload larger avatars, please"
|
||||
" use the app"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/user.py:161
|
||||
msgid "Profile updated"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:169
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/_footer.html:4
|
||||
#, python-format
|
||||
msgid "A <a href=\"%(about_url)s\">Snikket</a> service"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:9
|
||||
#: snikket_web/templates/_footer.html:6
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community "
|
||||
"Interest Company."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
|
||||
msgid "About Snikket"
|
||||
msgstr ""
|
||||
|
||||
@@ -257,10 +333,22 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:17
|
||||
msgid "Trademarks"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community "
|
||||
"Interest Company. For more information about the trademarks, visit the <a"
|
||||
" href=\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:19
|
||||
msgid "Software Versions"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/about.html:27
|
||||
#: snikket_web/templates/about.html:29
|
||||
msgid "Back to the main page"
|
||||
msgstr ""
|
||||
|
||||
@@ -350,7 +438,7 @@ msgid "Debug information for %(user_name)s"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_debug_user.html:11
|
||||
#: snikket_web/templates/user_passwd.html:26
|
||||
#: snikket_web/templates/user_passwd.html:23
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
@@ -400,9 +488,9 @@ msgstr ""
|
||||
#: snikket_web/templates/admin_edit_circle.html:44
|
||||
#: snikket_web/templates/admin_edit_invite.html:49
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:13
|
||||
#: snikket_web/templates/user_passwd.html:30
|
||||
#: snikket_web/templates/user_profile.html:31
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:32
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
@@ -476,7 +564,6 @@ msgid "View invitation"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_edit_invite.html:13
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
#: snikket_web/templates/admin_reset_user_password.html:15
|
||||
msgid "Valid until"
|
||||
msgstr ""
|
||||
@@ -568,6 +655,10 @@ msgstr ""
|
||||
msgid "Pending invitations"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
msgid "Expires"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:22
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
@@ -649,7 +740,7 @@ msgid "The web portal encountered an internal error."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_invalid.html:5
|
||||
#: snikket_web/templates/invite_view.html:12
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#, python-format
|
||||
msgid "Invite to %(site_name)s"
|
||||
msgstr ""
|
||||
@@ -657,7 +748,7 @@ msgstr ""
|
||||
#: snikket_web/templates/invite_invalid.html:6
|
||||
#: snikket_web/templates/invite_register.html:10
|
||||
#: snikket_web/templates/invite_success.html:11
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#: snikket_web/templates/invite_view.html:14
|
||||
#, python-format
|
||||
msgid "Powered by <img src=\"%(logo_url)s\" alt=\"Snikket\">"
|
||||
msgstr ""
|
||||
@@ -698,18 +789,19 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:14
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
#: snikket_web/templates/invite_view.html:38
|
||||
msgid "App already installed?"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:16
|
||||
#: snikket_web/templates/invite_reset_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:39
|
||||
#: snikket_web/templates/invite_view.html:40
|
||||
#: snikket_web/templates/invite_view.html:105
|
||||
msgid "Open the app"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_register.html:18
|
||||
#: snikket_web/templates/invite_view.html:41
|
||||
#: snikket_web/templates/invite_view.html:42
|
||||
msgid "This button works only if you have the app installed already!"
|
||||
msgstr ""
|
||||
|
||||
@@ -795,7 +887,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:26
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
#: snikket_web/templates/invite_view.html:76
|
||||
msgid ""
|
||||
"Your camera will turn on. Point it at the square code below until it is "
|
||||
"within the highlighted square on your screen, and wait until the app "
|
||||
@@ -807,7 +899,7 @@ msgid "You will then be prompted to enter a new password for your account."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:43
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
msgid "Alternatives"
|
||||
msgstr ""
|
||||
|
||||
@@ -848,29 +940,29 @@ msgstr ""
|
||||
msgid "Invite to %(site_name)s | Snikket"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:15
|
||||
#: snikket_web/templates/invite_view.html:16
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat with %(inviter_name)s using Snikket, a "
|
||||
"secure, privacy-friendly chat app on %(site_name)s."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:17
|
||||
#: snikket_web/templates/invite_view.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat on %(site_name)s using Snikket, a secure, "
|
||||
"privacy-friendly chat app."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:19
|
||||
#: snikket_web/templates/invite_view.html:20
|
||||
msgid "Get started"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:22
|
||||
msgid "Install the Snikket App on your Android or iOS device."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:23
|
||||
#: snikket_web/templates/invite_view.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Install the Snikket App on your Android device (<a "
|
||||
@@ -878,25 +970,26 @@ msgid ""
|
||||
"target=\"_blank\">iOS coming soon!</a>)."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:27
|
||||
#: snikket_web/templates/invite_view.html:28
|
||||
msgid "Get it on Google Play"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:30
|
||||
#: snikket_web/templates/invite_view.html:101
|
||||
msgid "Download on the App Store"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:33
|
||||
msgid "Not on mobile?"
|
||||
#: snikket_web/templates/invite_view.html:34
|
||||
msgid "Send to mobile device"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:36
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
msgid ""
|
||||
"After installation the app should automatically open and prompt you to "
|
||||
"create an account. If not, simply click the button below."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
#: snikket_web/templates/invite_view.html:45
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can connect to Snikket using any XMPP-compatible software. If the "
|
||||
@@ -904,42 +997,64 @@ msgid ""
|
||||
"href=\"%(register_url)s\">register an account manually</a>."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:50
|
||||
#: snikket_web/templates/invite_view.html:51
|
||||
msgid "Scan invite code"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:53
|
||||
#: snikket_web/templates/invite_view.html:82
|
||||
#: snikket_web/templates/invite_view.html:54
|
||||
#: snikket_web/templates/invite_view.html:83
|
||||
#: snikket_web/templates/invite_view.html:95
|
||||
#: snikket_web/templates/invite_view.html:111
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:56
|
||||
#: snikket_web/templates/invite_view.html:57
|
||||
msgid ""
|
||||
"You can transfer this invite to your mobile device by scanning a code "
|
||||
"with your camera. You can use either a QR scanner app or the Snikket app "
|
||||
"itself."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:61
|
||||
#: snikket_web/templates/invite_view.html:62
|
||||
msgid "Using a QR code scanner"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:63
|
||||
#: snikket_web/templates/invite_view.html:64
|
||||
msgid "Using the Snikket app"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:68
|
||||
#: snikket_web/templates/invite_view.html:69
|
||||
msgid ""
|
||||
"Use a <em>QR code</em> scanner on your mobile device to scan the code "
|
||||
"below:"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:74
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
msgid ""
|
||||
"Install the Snikket app on your mobile device, open it, and tap the "
|
||||
"'Scan' button at the top."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:92
|
||||
msgid "Install on iOS"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:98
|
||||
msgid ""
|
||||
"After downloading Snikket from the app store, you have to return to this "
|
||||
"invite link and tap on \"Open the app\" to proceed."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:100
|
||||
msgid "First download Snikket from the app store using the button below:"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/invite_view.html:102
|
||||
msgid ""
|
||||
"After the installation is complete, you can return to this page and tap "
|
||||
"the \"Open the app\" button to continue with the setup:"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/library.j2:18
|
||||
msgid "Copy link"
|
||||
msgstr ""
|
||||
@@ -972,6 +1087,21 @@ msgstr ""
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/login.html:23
|
||||
msgid "Incorrect address"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/login.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This Snikket service only hosts addresses ending in "
|
||||
"<em>@%(snikket_domain)s</em>. Your password was not sent."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/unauth.html:16
|
||||
msgid "Operation successful"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_home.html:9
|
||||
msgid "Welcome!"
|
||||
msgstr ""
|
||||
@@ -1005,46 +1135,46 @@ msgstr ""
|
||||
msgid "Admin panel"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_logout.html:8
|
||||
#: snikket_web/templates/user_logout.html:5
|
||||
msgid "Sign out of the Snikket Web Portal"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_logout.html:9
|
||||
#: snikket_web/templates/user_logout.html:6
|
||||
msgid ""
|
||||
"Click below to log yourself out of the web portal. This does not affect "
|
||||
"any other connected devices."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:8
|
||||
#: snikket_web/templates/user_passwd.html:5
|
||||
msgid "Change your password"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:9
|
||||
#: snikket_web/templates/user_passwd.html:6
|
||||
msgid ""
|
||||
"To change your password, you need to provide the current password as well"
|
||||
" as the new one. To reduce the chance of typos, we ask for your new "
|
||||
"password twice."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_passwd.html:24
|
||||
msgid ""
|
||||
"After changing your password, you will have to enter the new password on "
|
||||
"all of your devices."
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_profile.html:7
|
||||
#: snikket_web/templates/user_profile.html:4
|
||||
msgid "Update your profile"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_profile.html:9
|
||||
#: snikket_web/templates/user_profile.html:6
|
||||
msgid "Profile"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_profile.html:22
|
||||
#: snikket_web/templates/user_profile.html:23
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
|
||||
#: snikket_web/templates/user_profile.html:23
|
||||
#: snikket_web/templates/user_profile.html:24
|
||||
msgid ""
|
||||
"This section allows you to control who can see your profile information, "
|
||||
"like avatar and nickname."
|
||||
|
||||
@@ -7,11 +7,11 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2021-01-30 12:45+0100\n"
|
||||
"PO-Revision-Date: 2021-01-30 09:49+0000\n"
|
||||
"POT-Creation-Date: 2021-02-23 07:55+0100\n"
|
||||
"PO-Revision-Date: 2021-02-25 16:02+0000\n"
|
||||
"Last-Translator: misiek <migelazur@mailbox.org>\n"
|
||||
"Language-Team: Polish <https://i18n.sotecware.net/projects/snikket/web-"
|
||||
"portal/pl/>\n"
|
||||
"Language-Team: Polish <https://i18n.sotecware.net/projects/snikket/"
|
||||
"web-portal/pl/>\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -25,194 +25,262 @@ msgstr ""
|
||||
msgid "Delete user permanently"
|
||||
msgstr "Usuń użytkownika bezpowrotnie"
|
||||
|
||||
#: snikket_web/admin.py:129
|
||||
#: snikket_web/admin.py:73
|
||||
msgid "User deleted"
|
||||
msgstr "Użytkownik został usunięty"
|
||||
|
||||
#: snikket_web/admin.py:116
|
||||
msgid "Password reset link created"
|
||||
msgstr "Utworzono link resetowania hasła"
|
||||
|
||||
#: snikket_web/admin.py:122
|
||||
msgid "Password reset link deleted"
|
||||
msgstr "Usunięto link resetowania hasła"
|
||||
|
||||
#: snikket_web/admin.py:141
|
||||
msgid "Invite to circle"
|
||||
msgstr "Zaproś do kręgu"
|
||||
|
||||
#: snikket_web/admin.py:135
|
||||
#: snikket_web/admin.py:147
|
||||
msgid "At least one circle must be selected"
|
||||
msgstr "Wybrany musi być przynajmniej jeden krąg"
|
||||
msgstr "Należy wybrać przynajmniej jeden krąg"
|
||||
|
||||
#: snikket_web/admin.py:140
|
||||
#: snikket_web/admin.py:152
|
||||
msgid "Valid for"
|
||||
msgstr "Ważne przez"
|
||||
|
||||
#: snikket_web/admin.py:142
|
||||
#: snikket_web/admin.py:154
|
||||
msgid "One hour"
|
||||
msgstr "Jedną godzinę"
|
||||
msgstr "Godzinę"
|
||||
|
||||
#: snikket_web/admin.py:143
|
||||
#: snikket_web/admin.py:155
|
||||
msgid "Twelve hours"
|
||||
msgstr "Dwanaście godzin"
|
||||
|
||||
#: snikket_web/admin.py:144
|
||||
#: snikket_web/admin.py:156
|
||||
msgid "One day"
|
||||
msgstr "Jeden dzień"
|
||||
msgstr "Dzień"
|
||||
|
||||
#: snikket_web/admin.py:145
|
||||
#: snikket_web/admin.py:157
|
||||
msgid "One week"
|
||||
msgstr "Jeden tydzień"
|
||||
msgstr "Tydzień"
|
||||
|
||||
#: snikket_web/admin.py:146
|
||||
#: snikket_web/admin.py:158
|
||||
msgid "Four weeks"
|
||||
msgstr "Cztery tygodnie"
|
||||
|
||||
#: snikket_web/admin.py:152 snikket_web/templates/admin_edit_invite.html:17
|
||||
#: snikket_web/admin.py:164 snikket_web/templates/admin_edit_invite.html:17
|
||||
msgid "Invitation type"
|
||||
msgstr "Typ zaproszenia"
|
||||
|
||||
#: snikket_web/admin.py:154 snikket_web/templates/library.j2:116
|
||||
#: snikket_web/admin.py:166 snikket_web/templates/library.j2:116
|
||||
msgid "Individual"
|
||||
msgstr "Indywidualne"
|
||||
|
||||
#: snikket_web/admin.py:155 snikket_web/templates/library.j2:114
|
||||
#: snikket_web/admin.py:167 snikket_web/templates/library.j2:114
|
||||
msgid "Group"
|
||||
msgstr "Grupowe"
|
||||
|
||||
#: snikket_web/admin.py:161
|
||||
#: snikket_web/admin.py:173
|
||||
msgid "New invitation link"
|
||||
msgstr "Nowy link z zaproszeniem"
|
||||
|
||||
#: snikket_web/admin.py:223
|
||||
#: snikket_web/admin.py:235
|
||||
msgid "Revoke"
|
||||
msgstr "Unieważnij"
|
||||
|
||||
#: snikket_web/admin.py:283 snikket_web/admin.py:327
|
||||
#: snikket_web/admin.py:259
|
||||
msgid "Invitation created"
|
||||
msgstr "Utworzono zaproszenie"
|
||||
|
||||
#: snikket_web/admin.py:275
|
||||
msgid "No such invitation exists"
|
||||
msgstr "Takie zaproszenie nie istnieje"
|
||||
|
||||
#: snikket_web/admin.py:290
|
||||
msgid "Invitation revoked"
|
||||
msgstr "Unieważniono zaproszenie"
|
||||
|
||||
#: snikket_web/admin.py:307 snikket_web/admin.py:355
|
||||
msgid "Name"
|
||||
msgstr "Nazwa"
|
||||
|
||||
#: snikket_web/admin.py:288 snikket_web/templates/admin_circles.html:47
|
||||
#: snikket_web/admin.py:312 snikket_web/templates/admin_circles.html:47
|
||||
msgid "Create circle"
|
||||
msgstr "Utwórz krąg"
|
||||
|
||||
#: snikket_web/admin.py:332
|
||||
#: snikket_web/admin.py:342
|
||||
msgid "Circle created"
|
||||
msgstr "Utworzono krąg"
|
||||
|
||||
#: snikket_web/admin.py:360
|
||||
msgid "Select user"
|
||||
msgstr "Wybierz użytkownika"
|
||||
|
||||
#: snikket_web/admin.py:337
|
||||
#: snikket_web/admin.py:365
|
||||
msgid "Update circle"
|
||||
msgstr "Zaktualizuj ustawienia kręgu"
|
||||
|
||||
#: snikket_web/admin.py:341
|
||||
#: snikket_web/admin.py:369
|
||||
msgid "Delete circle permanently"
|
||||
msgstr "Usuń krąg bezpowrotnie"
|
||||
|
||||
#: snikket_web/admin.py:347
|
||||
#: snikket_web/admin.py:375
|
||||
msgid "Add user"
|
||||
msgstr "Dodaj użytkownika"
|
||||
|
||||
#: snikket_web/admin.py:391
|
||||
msgid "No such circle exists"
|
||||
msgstr "Taki krąg nie istnieje"
|
||||
|
||||
#: snikket_web/admin.py:428
|
||||
msgid "Circle data updated"
|
||||
msgstr "Zaktualizowano dane kręgu"
|
||||
|
||||
#: snikket_web/admin.py:434
|
||||
msgid "Circle deleted"
|
||||
msgstr "Krąg został usunięty"
|
||||
|
||||
#: snikket_web/admin.py:445
|
||||
msgid "User added to circle"
|
||||
msgstr "Dodano użytkownika do kręgu"
|
||||
|
||||
#: snikket_web/admin.py:454
|
||||
msgid "User removed from circle"
|
||||
msgstr "Usunięto użytkownika z kręgu"
|
||||
|
||||
#: snikket_web/infra.py:40
|
||||
msgid "Main"
|
||||
msgstr "Główny"
|
||||
|
||||
#: snikket_web/invite.py:93
|
||||
#: snikket_web/invite.py:104
|
||||
msgid "Username"
|
||||
msgstr "Nazwa użytkownika"
|
||||
|
||||
#: snikket_web/invite.py:97 snikket_web/invite.py:164 snikket_web/main.py:41
|
||||
#: snikket_web/invite.py:108 snikket_web/invite.py:175 snikket_web/main.py:42
|
||||
msgid "Password"
|
||||
msgstr "Hasło"
|
||||
|
||||
#: snikket_web/invite.py:101 snikket_web/invite.py:168
|
||||
#: snikket_web/invite.py:112 snikket_web/invite.py:179
|
||||
msgid "Confirm password"
|
||||
msgstr "Potwierdź hasło"
|
||||
|
||||
#: snikket_web/invite.py:105 snikket_web/invite.py:172
|
||||
#: snikket_web/invite.py:116 snikket_web/invite.py:183
|
||||
msgid "The passwords must match"
|
||||
msgstr "Hasła muszą się zgadzać"
|
||||
|
||||
#: snikket_web/invite.py:110
|
||||
#: snikket_web/invite.py:121
|
||||
msgid "Create account"
|
||||
msgstr "Utwórz konto"
|
||||
|
||||
#: snikket_web/invite.py:137
|
||||
#: snikket_web/invite.py:148
|
||||
msgid "That username is already taken"
|
||||
msgstr "Ta nazwa użytkownika jest już zajęta"
|
||||
|
||||
#: snikket_web/invite.py:141 snikket_web/invite.py:205
|
||||
#: snikket_web/invite.py:152 snikket_web/invite.py:216
|
||||
msgid "Registration was declined for unknown reasons"
|
||||
msgstr "Z nieznanych przyczyn rejestracja została odrzucona"
|
||||
|
||||
#: snikket_web/invite.py:145
|
||||
#: snikket_web/invite.py:156
|
||||
msgid "The username is not valid"
|
||||
msgstr "Ta nazwa użytkownika jest nieprawidłowa"
|
||||
|
||||
#: snikket_web/invite.py:177 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:32
|
||||
#: snikket_web/invite.py:188 snikket_web/templates/user_home.html:32
|
||||
#: snikket_web/templates/user_passwd.html:29
|
||||
msgid "Change password"
|
||||
msgstr "Zmień hasło"
|
||||
|
||||
#: snikket_web/main.py:36
|
||||
#: snikket_web/main.py:37
|
||||
msgid "Address"
|
||||
msgstr "Adres"
|
||||
|
||||
#: snikket_web/main.py:46
|
||||
#: snikket_web/main.py:47
|
||||
msgid "Sign in"
|
||||
msgstr "Zaloguj się"
|
||||
|
||||
#: snikket_web/main.py:72
|
||||
#: snikket_web/main.py:56
|
||||
msgid "Invalid username or password."
|
||||
msgstr "Nieprawidłowa nazwa użytkownika lub hasło."
|
||||
|
||||
#: snikket_web/user.py:21
|
||||
#: snikket_web/main.py:84
|
||||
msgid "Login successful!"
|
||||
msgstr "Zalogowano się pomyślnie!"
|
||||
|
||||
#: snikket_web/user.py:28
|
||||
msgid "Current password"
|
||||
msgstr "Obecne hasło"
|
||||
|
||||
#: snikket_web/user.py:26
|
||||
#: snikket_web/user.py:33
|
||||
msgid "New password"
|
||||
msgstr "Nowe hasło"
|
||||
|
||||
#: snikket_web/user.py:31
|
||||
#: snikket_web/user.py:38
|
||||
msgid "Confirm new password"
|
||||
msgstr "Potwierdź nowe hasło"
|
||||
|
||||
#: snikket_web/user.py:35
|
||||
#: snikket_web/user.py:42
|
||||
msgid "The new passwords must match"
|
||||
msgstr "Nowe hasła muszą się zgadzać"
|
||||
|
||||
#: snikket_web/user.py:42
|
||||
#: snikket_web/user.py:49
|
||||
msgid "Sign out"
|
||||
msgstr "Wyloguj się"
|
||||
|
||||
#: snikket_web/user.py:47
|
||||
#: snikket_web/user.py:54
|
||||
msgid "Nobody"
|
||||
msgstr "Nikt"
|
||||
|
||||
#: snikket_web/user.py:48
|
||||
#: snikket_web/user.py:55
|
||||
msgid "Friends only"
|
||||
msgstr "Tylko znajomi"
|
||||
|
||||
#: snikket_web/user.py:49
|
||||
#: snikket_web/user.py:56
|
||||
msgid "Everyone"
|
||||
msgstr "Wszyscy"
|
||||
|
||||
#: snikket_web/templates/admin_delete_user.html:12
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:55
|
||||
#: snikket_web/templates/admin_users.html:11 snikket_web/user.py:62
|
||||
msgid "Display name"
|
||||
msgstr "Nazwa wyświetlana"
|
||||
|
||||
#: snikket_web/user.py:59
|
||||
#: snikket_web/user.py:66
|
||||
msgid "Avatar"
|
||||
msgstr "Awatar"
|
||||
|
||||
#: snikket_web/user.py:63
|
||||
#: snikket_web/user.py:70
|
||||
msgid "Profile visibility"
|
||||
msgstr "Widoczność profilu"
|
||||
|
||||
#: snikket_web/user.py:68
|
||||
#: snikket_web/user.py:75
|
||||
msgid "Update profile"
|
||||
msgstr "Zaktualizuj profil"
|
||||
|
||||
#: snikket_web/user.py:93
|
||||
#: snikket_web/user.py:100
|
||||
msgid "Incorrect password"
|
||||
msgstr "Nieprawidłowe hasło"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4 snikket_web/templates/login.html:36
|
||||
#: snikket_web/user.py:104
|
||||
msgid "Password changed"
|
||||
msgstr "Hasło zostało zmienione"
|
||||
|
||||
#: snikket_web/user.py:146
|
||||
msgid "Profile updated"
|
||||
msgstr "Zaktualizowano profil"
|
||||
|
||||
#: snikket_web/templates/_footer.html:4
|
||||
#, python-format
|
||||
msgid "A <a href=\"%(about_url)s\">Snikket</a> service"
|
||||
msgstr "Serwer <a href=\"%(about_url)s\">Snikket</a>"
|
||||
|
||||
#: snikket_web/templates/about.html:9
|
||||
#: snikket_web/templates/_footer.html:6
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company."
|
||||
msgstr ""
|
||||
"\"Snikket\" oraz logo papugi są znakami firmowymi Snikket Community Interest "
|
||||
"Company."
|
||||
|
||||
#: snikket_web/templates/about.html:4 snikket_web/templates/about.html:9
|
||||
msgid "About Snikket"
|
||||
msgstr "O Snikket"
|
||||
|
||||
@@ -268,14 +336,29 @@ msgid ""
|
||||
"\"%(apache20_url)s\">Apache 2.0 License</a>."
|
||||
msgstr ""
|
||||
"Ikony wykorzystane w portalu to <a href=\"%(source_url)s\">Google’s Material "
|
||||
"Icons</a>, udostępnione przez Google na warunkach licencji<a href="
|
||||
"Icons</a>, udostępnione przez Google na warunkach licencji <a href="
|
||||
"\"%(apache20_url)s\">Apache 2.0</a>."
|
||||
|
||||
#: snikket_web/templates/about.html:17
|
||||
msgid "Trademarks"
|
||||
msgstr "Znaki firmowe"
|
||||
|
||||
#: snikket_web/templates/about.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"“Snikket” and the parrot logo are trademarks of Snikket Community Interest "
|
||||
"Company. For more information about the trademarks, visit the <a href="
|
||||
"\"%(trademarks_url)s\">Snikket Trademarks information page</a>."
|
||||
msgstr ""
|
||||
"\"Snikket\" oraz logo papugi są znakami firmowymi Snikket Community Interest "
|
||||
"Company. Więcej informacji o oznaczeniach znajdziesz na <a href=\""
|
||||
"%(trademarks_url)s\">stronie o znakach firmowych Snikket</a>."
|
||||
|
||||
#: snikket_web/templates/about.html:19
|
||||
msgid "Software Versions"
|
||||
msgstr "Wersje oprogramowania"
|
||||
|
||||
#: snikket_web/templates/about.html:27
|
||||
#: snikket_web/templates/about.html:29
|
||||
msgid "Back to the main page"
|
||||
msgstr "Wróć do strony głównej"
|
||||
|
||||
@@ -374,7 +457,7 @@ msgid "Debug information for %(user_name)s"
|
||||
msgstr "Informacje debugowania dla %(user_name)s"
|
||||
|
||||
#: snikket_web/templates/admin_debug_user.html:11
|
||||
#: snikket_web/templates/user_passwd.html:26
|
||||
#: snikket_web/templates/user_passwd.html:23
|
||||
msgid "Warning"
|
||||
msgstr "Ostrzeżenie"
|
||||
|
||||
@@ -427,9 +510,9 @@ msgstr ""
|
||||
#: snikket_web/templates/admin_edit_circle.html:44
|
||||
#: snikket_web/templates/admin_edit_invite.html:49
|
||||
#: snikket_web/templates/admin_reset_user_password.html:25
|
||||
#: snikket_web/templates/user_logout.html:13
|
||||
#: snikket_web/templates/user_passwd.html:30
|
||||
#: snikket_web/templates/user_profile.html:31
|
||||
#: snikket_web/templates/user_logout.html:10
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_profile.html:28
|
||||
msgid "Back"
|
||||
msgstr "Wstecz"
|
||||
|
||||
@@ -478,7 +561,7 @@ msgstr "Członkowie kręgu"
|
||||
#: snikket_web/templates/admin_edit_circle.html:70
|
||||
#, python-format
|
||||
msgid "Remove user %(username)s from circle"
|
||||
msgstr "Usuń użytkownika %(username)s z kręgu"
|
||||
msgstr "Usuń z kręgu użytkownika %(username)s"
|
||||
|
||||
#: snikket_web/templates/admin_edit_circle.html:78
|
||||
msgid "This circle currently has no members."
|
||||
@@ -505,10 +588,9 @@ msgid "View invitation"
|
||||
msgstr "Szczegóły zaproszenia"
|
||||
|
||||
#: snikket_web/templates/admin_edit_invite.html:13
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
#: snikket_web/templates/admin_reset_user_password.html:15
|
||||
msgid "Valid until"
|
||||
msgstr "Ważne do"
|
||||
msgstr "Wygasa"
|
||||
|
||||
#: snikket_web/templates/admin_edit_invite.html:15
|
||||
#: snikket_web/templates/admin_reset_user_password.html:17
|
||||
@@ -591,8 +673,6 @@ msgid "Manage invitations"
|
||||
msgstr "Zarządzaj zaproszeniami"
|
||||
|
||||
#: snikket_web/templates/admin_home.html:36
|
||||
#, fuzzy
|
||||
#| msgid "Go back to your user’s web portal page."
|
||||
msgid "Go back to your user's web portal page."
|
||||
msgstr "Wróć do swojej strony użytkownika."
|
||||
|
||||
@@ -604,6 +684,10 @@ msgstr "Wyjdź z panelu administracyjnego"
|
||||
msgid "Pending invitations"
|
||||
msgstr "Oczekujące zaproszenia"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:21
|
||||
msgid "Expires"
|
||||
msgstr "Wygasa"
|
||||
|
||||
#: snikket_web/templates/admin_invites.html:22
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
@@ -689,15 +773,15 @@ msgid "The web portal encountered an internal error."
|
||||
msgstr "Portal internetowy napotkał błąd wewnętrzny."
|
||||
|
||||
#: snikket_web/templates/invite_invalid.html:5
|
||||
#: snikket_web/templates/invite_view.html:12
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#, python-format
|
||||
msgid "Invite to %(site_name)s"
|
||||
msgstr "Zaproś na %(site_name)s"
|
||||
msgstr "Zaproszenie na %(site_name)s"
|
||||
|
||||
#: snikket_web/templates/invite_invalid.html:6
|
||||
#: snikket_web/templates/invite_register.html:10
|
||||
#: snikket_web/templates/invite_success.html:11
|
||||
#: snikket_web/templates/invite_view.html:13
|
||||
#: snikket_web/templates/invite_view.html:14
|
||||
#, python-format
|
||||
msgid "Powered by <img src=\"%(logo_url)s\" alt=\"Snikket\">"
|
||||
msgstr "Obsługiwane przez <img alt=\"Snikket\" src=\"%(logo_url)s\">"
|
||||
@@ -744,18 +828,18 @@ msgstr ""
|
||||
"zaprowadzi cię tam poniższy przycisk:"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:14
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
#: snikket_web/templates/invite_view.html:38
|
||||
msgid "App already installed?"
|
||||
msgstr "Aplikacja jest już zainstalowana?"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:16
|
||||
#: snikket_web/templates/invite_reset_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:39
|
||||
#: snikket_web/templates/invite_view.html:40
|
||||
msgid "Open the app"
|
||||
msgstr "Otwórz aplikację"
|
||||
|
||||
#: snikket_web/templates/invite_register.html:18
|
||||
#: snikket_web/templates/invite_view.html:41
|
||||
#: snikket_web/templates/invite_view.html:42
|
||||
msgid "This button works only if you have the app installed already!"
|
||||
msgstr ""
|
||||
"Ten przycisk zadziała wyłącznie, jeśli masz już zainstalowaną aplikację!"
|
||||
@@ -785,40 +869,36 @@ msgstr "Wprowadź bezpieczne hasło, którego nie używasz w innym miejscu."
|
||||
|
||||
#: snikket_web/templates/invite_reset.html:9
|
||||
#: snikket_web/templates/invite_reset_view.html:9
|
||||
#, fuzzy
|
||||
#| msgid "Change your password"
|
||||
msgid "Reset your password | Snikket"
|
||||
msgstr "Zmień swoje hasło"
|
||||
msgstr "Zresetuj swoje hasło | Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_reset.html:15
|
||||
#, fuzzy
|
||||
#| msgid "Change your password"
|
||||
msgid "Reset your password online"
|
||||
msgstr "Zmień swoje hasło"
|
||||
msgstr "Zresetuj swoje hasło online"
|
||||
|
||||
#: snikket_web/templates/invite_reset.html:16
|
||||
msgid ""
|
||||
"To reset your password online, fill out the fields below and confirm using "
|
||||
"the button."
|
||||
msgstr ""
|
||||
"Aby zresetować swoje hasło online, wypełnij poniższe pola i potwierdź za "
|
||||
"pomocą przycisku."
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:5
|
||||
msgid "Password reset successful | Snikket"
|
||||
msgstr ""
|
||||
msgstr "Zresetowanie hasła powiodło się | Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Password reset"
|
||||
msgid "Password reset successful"
|
||||
msgstr "Resetowanie hasła"
|
||||
msgstr "Zresetowanie hasła powiodło się"
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:10
|
||||
msgid "Your password has been changed"
|
||||
msgstr ""
|
||||
msgstr "Twoje hasło zostało zmienione"
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:11
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
msgstr "Możesz się zalogować z wykorzystaniem twojego nowego hasła."
|
||||
|
||||
#: snikket_web/templates/invite_reset_success.html:12
|
||||
#: snikket_web/templates/invite_success.html:18
|
||||
@@ -826,10 +906,8 @@ msgid "You can now safely close this page."
|
||||
msgstr "Możesz teraz bezpiecznie zamknąć tę stronę."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:14
|
||||
#, fuzzy
|
||||
#| msgid "Change your password"
|
||||
msgid "Reset your password"
|
||||
msgstr "Zmień swoje hasło"
|
||||
msgstr "Zresetuj swoje hasło"
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:15
|
||||
#, python-format
|
||||
@@ -837,25 +915,29 @@ msgid ""
|
||||
"This page allows you to reset the password of your account, <strong>"
|
||||
"%(account_jid)s</strong>, once."
|
||||
msgstr ""
|
||||
"Ta strona pozwoli ci na jednorazowe zresetowanie hasła do twojego konta: "
|
||||
"<strong>%(account_jid)s</strong>."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:17
|
||||
#, fuzzy
|
||||
#| msgid "Using the Snikket app"
|
||||
msgid "Using the app"
|
||||
msgstr "Używając aplikacji Snikket"
|
||||
msgstr "Używając aplikacji"
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:18
|
||||
msgid "To reset your password using the Snikket App, tap the button below."
|
||||
msgstr ""
|
||||
"Aby zresetować swoje hasło za pomocą aplikacji Snikket, wciśnij poniższy "
|
||||
"przycisk."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:25
|
||||
msgid ""
|
||||
"Alternatively, you can scan the below code with the Snikket App using the "
|
||||
"Scan button at the top."
|
||||
msgstr ""
|
||||
"Możesz również zeskanować poniższy kod w aplikacji Snikket, korzystając z "
|
||||
"przycisku Skanowania, który znajduje się u góry."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:26
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
#: snikket_web/templates/invite_view.html:76
|
||||
msgid ""
|
||||
"Your camera will turn on. Point it at the square code below until it is "
|
||||
"within the highlighted square on your screen, and wait until the app "
|
||||
@@ -868,9 +950,10 @@ msgstr ""
|
||||
#: snikket_web/templates/invite_reset_view.html:27
|
||||
msgid "You will then be prompted to enter a new password for your account."
|
||||
msgstr ""
|
||||
"Zostaniesz wtedy poproszony o wprowadzenie nowego hasła dla twojego konta."
|
||||
|
||||
#: snikket_web/templates/invite_reset_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:43
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
msgid "Alternatives"
|
||||
msgstr "Inne możliwości"
|
||||
|
||||
@@ -880,6 +963,8 @@ msgid ""
|
||||
"You can also <a href=\"%(reset_url)s\">reset your password online</a> if the "
|
||||
"above button or scanning the QR code does not work for you."
|
||||
msgstr ""
|
||||
"Możesz również <a href=\"%(reset_url)s\">zresetować swoje hasło online</a>, "
|
||||
"jeśli powyższy przycisk lub skanowanie kodu QR nie zadziała."
|
||||
|
||||
#: snikket_web/templates/invite_success.html:5
|
||||
#, python-format
|
||||
@@ -899,10 +984,8 @@ msgstr ""
|
||||
"Gratulacje! Pomyślnie zarejestrowałeś się na %(site_name)s jako %(jid)s."
|
||||
|
||||
#: snikket_web/templates/invite_success.html:13
|
||||
#, fuzzy
|
||||
#| msgid "Your XMPP address"
|
||||
msgid "Your address"
|
||||
msgstr "Twój adres XMPP"
|
||||
msgstr "Twój adres"
|
||||
|
||||
#: snikket_web/templates/invite_success.html:17
|
||||
msgid ""
|
||||
@@ -917,7 +1000,7 @@ msgstr ""
|
||||
msgid "Invite to %(site_name)s | Snikket"
|
||||
msgstr "Zaproszenie na %(site_name)s | Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:15
|
||||
#: snikket_web/templates/invite_view.html:16
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat with %(inviter_name)s using Snikket, a secure, "
|
||||
@@ -927,29 +1010,26 @@ msgstr ""
|
||||
"bezpiecznej i przyjaznej dla prywatności aplikacji do rozmów na "
|
||||
"%(site_name)s."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:17
|
||||
#: snikket_web/templates/invite_view.html:18
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You have been invited to chat on %(site_name)s using Snikket, a secure, "
|
||||
"privacy-friendly chat app."
|
||||
msgstr ""
|
||||
"Zostałeś zaproszony do czatu na %(site_name)s za pomocą Snikket - "
|
||||
"Zostałeś zaproszony do czatowania na %(site_name)s za pomocą Snikket - "
|
||||
"bezpiecznej i przyjaznej dla prywatności aplikacji do rozmów."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:19
|
||||
#: snikket_web/templates/invite_view.html:20
|
||||
msgid "Get started"
|
||||
msgstr "Rozpocznij"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:21
|
||||
#: snikket_web/templates/invite_view.html:22
|
||||
msgid "Install the Snikket App on your Android or iOS device."
|
||||
msgstr ""
|
||||
"Zainstaluj aplikację Snikket na swoim urządzeniu z systemem Android lub iOS."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:23
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "Install the Snikket App on your Android device (<a href=\"%(ios_info_url)s"
|
||||
#| "\" target=\"_blank\" rel=\"noopener noreferrer\">iOS coming soon!</a>)."
|
||||
#: snikket_web/templates/invite_view.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Install the Snikket App on your Android device (<a href=\"%(ios_info_url)s\" "
|
||||
"rel=\"noopener noreferrer\" target=\"_blank\">iOS coming soon!</a>)."
|
||||
@@ -958,19 +1038,19 @@ msgstr ""
|
||||
"\"%(ios_info_url)s\" rel=\"noopener noreferrer\" target=\"_blank\">iOS już "
|
||||
"niedługo!</a>)."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:27
|
||||
#: snikket_web/templates/invite_view.html:28
|
||||
msgid "Get it on Google Play"
|
||||
msgstr "Pobierz w Google Play"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:29
|
||||
#: snikket_web/templates/invite_view.html:30
|
||||
msgid "Download on the App Store"
|
||||
msgstr "Pobierz w App Store"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:33
|
||||
msgid "Not on mobile?"
|
||||
msgstr "Nie korzystasz obecnie ze smartfona?"
|
||||
#: snikket_web/templates/invite_view.html:34
|
||||
msgid "Send to mobile device"
|
||||
msgstr "Wyślij na urządzenie mobilne"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:36
|
||||
#: snikket_web/templates/invite_view.html:37
|
||||
msgid ""
|
||||
"After installation the app should automatically open and prompt you to "
|
||||
"create an account. If not, simply click the button below."
|
||||
@@ -978,7 +1058,7 @@ msgstr ""
|
||||
"Po instalacji aplikacja powinna uruchomić się automatycznie i poprosić o "
|
||||
"utworzenie konta. Jeśli nie, wciśnij poniższy przycisk."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:44
|
||||
#: snikket_web/templates/invite_view.html:45
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can connect to Snikket using any XMPP-compatible software. If the button "
|
||||
@@ -990,16 +1070,16 @@ msgstr ""
|
||||
"twoją aplikacją, konieczne może być <a href=\"%(register_url)s\">ręczne "
|
||||
"zarejestrowanie konta</a>."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:50
|
||||
#: snikket_web/templates/invite_view.html:51
|
||||
msgid "Scan invite code"
|
||||
msgstr "Zeskanuj kod zaproszenia"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:53
|
||||
#: snikket_web/templates/invite_view.html:82
|
||||
#: snikket_web/templates/invite_view.html:54
|
||||
#: snikket_web/templates/invite_view.html:83
|
||||
msgid "Close"
|
||||
msgstr "Zamknij"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:56
|
||||
#: snikket_web/templates/invite_view.html:57
|
||||
msgid ""
|
||||
"You can transfer this invite to your mobile device by scanning a code with "
|
||||
"your camera. You can use either a QR scanner app or the Snikket app itself."
|
||||
@@ -1008,22 +1088,22 @@ msgstr ""
|
||||
"poniższy kod aparatem. Możesz również skorzystać ze skanera kodów QR lub "
|
||||
"samej aplikacji Snikket."
|
||||
|
||||
#: snikket_web/templates/invite_view.html:61
|
||||
#: snikket_web/templates/invite_view.html:62
|
||||
msgid "Using a QR code scanner"
|
||||
msgstr "Używając skanera kodów QR"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:63
|
||||
#: snikket_web/templates/invite_view.html:64
|
||||
msgid "Using the Snikket app"
|
||||
msgstr "Używając aplikacji Snikket"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:68
|
||||
#: snikket_web/templates/invite_view.html:69
|
||||
msgid ""
|
||||
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
|
||||
msgstr ""
|
||||
"Użyj skanera <em>kodów QR</em> na swoim urządzeniu mobilnym, by zeskanować "
|
||||
"poniższy kod:"
|
||||
|
||||
#: snikket_web/templates/invite_view.html:74
|
||||
#: snikket_web/templates/invite_view.html:75
|
||||
msgid ""
|
||||
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
|
||||
"button at the top."
|
||||
@@ -1046,13 +1126,13 @@ msgstr "usunięty"
|
||||
#: snikket_web/templates/library.j2:122
|
||||
msgid "Can be used multiple times to create accounts on this Snikket service."
|
||||
msgstr ""
|
||||
"Może być wykorzystywany wielokrotnie, by utworzyć konto na tym serwerze "
|
||||
"Może być wykorzystywane wielokrotnie, by utworzyć konto na tym serwerze "
|
||||
"Snikket."
|
||||
|
||||
#: snikket_web/templates/library.j2:124
|
||||
msgid "Can be used once to create an account on this Snikket service."
|
||||
msgstr ""
|
||||
"Może być wykorzystany jeden raz, by utworzyć konto na tym serwerze Snikket."
|
||||
"Może być wykorzystane jeden raz, by utworzyć konto na tym serwerze Snikket."
|
||||
|
||||
#: snikket_web/templates/login.html:5
|
||||
msgid "Snikket Login"
|
||||
@@ -1066,6 +1146,27 @@ msgstr "Wprowadź swój adres Snikket oraz hasło, aby zarządzać kontem."
|
||||
msgid "Login failed"
|
||||
msgstr "Logowanie nie powiodło się"
|
||||
|
||||
#: snikket_web/templates/login.html:23
|
||||
msgid "Incorrect address"
|
||||
msgstr "Adres nieprawidłowy"
|
||||
|
||||
#: snikket_web/templates/login.html:24
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This Snikket service only hosts addresses ending in <em>@%(snikket_domain)s</"
|
||||
"em>. Your password was not sent."
|
||||
msgstr ""
|
||||
"Ten serwer Snikket obsługuje jedynie adresy kończące się na "
|
||||
"<em>@%(snikket_domain)s</em>. Twoje hasło nie zostało wysłane."
|
||||
|
||||
#: snikket_web/templates/unauth.html:16
|
||||
msgid "Operation successful"
|
||||
msgstr "Operacja zakończona sukcesem"
|
||||
|
||||
#: snikket_web/templates/unauth.html:18
|
||||
msgid "Error"
|
||||
msgstr "Błąd"
|
||||
|
||||
#: snikket_web/templates/user_home.html:9
|
||||
msgid "Welcome!"
|
||||
msgstr "Witaj!"
|
||||
@@ -1100,11 +1201,11 @@ msgstr ""
|
||||
msgid "Admin panel"
|
||||
msgstr "Panel administracyjny"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:8
|
||||
#: snikket_web/templates/user_logout.html:5
|
||||
msgid "Sign out of the Snikket Web Portal"
|
||||
msgstr "Wyloguj się z Portalu Użytkownika Snikket"
|
||||
|
||||
#: snikket_web/templates/user_logout.html:9
|
||||
#: snikket_web/templates/user_logout.html:6
|
||||
msgid ""
|
||||
"Click below to log yourself out of the web portal. This does not affect any "
|
||||
"other connected devices."
|
||||
@@ -1112,11 +1213,11 @@ msgstr ""
|
||||
"Kliknij poniżej, aby wylogować się z portalu. Nie wpłynie to na pozostałe "
|
||||
"podłączone urządzenia."
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:8
|
||||
#: snikket_web/templates/user_passwd.html:5
|
||||
msgid "Change your password"
|
||||
msgstr "Zmień swoje hasło"
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:9
|
||||
#: snikket_web/templates/user_passwd.html:6
|
||||
msgid ""
|
||||
"To change your password, you need to provide the current password as well as "
|
||||
"the new one. To reduce the chance of typos, we ask for your new password "
|
||||
@@ -1125,26 +1226,26 @@ msgstr ""
|
||||
"Aby zmienić swoje hasło, musisz podać również dotychczasowe. O podanie "
|
||||
"nowego hasła prosimy podwójnie, by zminimalizować możliwość pomyłki."
|
||||
|
||||
#: snikket_web/templates/user_passwd.html:27
|
||||
#: snikket_web/templates/user_passwd.html:24
|
||||
msgid ""
|
||||
"After changing your password, you will have to enter the new password on all "
|
||||
"of your devices."
|
||||
msgstr ""
|
||||
"Po zmianie hasła na nowe, musisz je wprowadzić na każdym swoim urządzeniu."
|
||||
|
||||
#: snikket_web/templates/user_profile.html:7
|
||||
#: snikket_web/templates/user_profile.html:4
|
||||
msgid "Update your profile"
|
||||
msgstr "Zaktualizuj swój profil"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:9
|
||||
#: snikket_web/templates/user_profile.html:6
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:22
|
||||
#: snikket_web/templates/user_profile.html:19
|
||||
msgid "Visibility"
|
||||
msgstr "Widoczność"
|
||||
|
||||
#: snikket_web/templates/user_profile.html:23
|
||||
#: snikket_web/templates/user_profile.html:20
|
||||
msgid ""
|
||||
"This section allows you to control who can see your profile information, "
|
||||
"like avatar and nickname."
|
||||
@@ -1152,6 +1253,9 @@ msgstr ""
|
||||
"Ta sekcja pozwoli ci na zarządzenie widocznością informacji o twoim profilu "
|
||||
"przez innych, jak awatar lub pseudonim."
|
||||
|
||||
#~ msgid "Not on mobile?"
|
||||
#~ msgstr "Nie korzystasz obecnie ze smartfona?"
|
||||
|
||||
#~ msgid "Edit user %(user_name)s"
|
||||
#~ msgstr "Edytuj użytkownika %(user_name)s"
|
||||
|
||||
@@ -1238,6 +1342,3 @@ msgstr ""
|
||||
|
||||
#~ msgid "Copy operation failed"
|
||||
#~ msgstr "Kopiowanie nie powiodło się"
|
||||
|
||||
#~ msgid "Password change failed"
|
||||
#~ msgstr "Zmiana hasła zakończona niepowodzeniem"
|
||||
|
||||
1262
snikket_web/translations/ru/LC_MESSAGES/messages.po
Normal file
1262
snikket_web/translations/ru/LC_MESSAGES/messages.po
Normal file
File diff suppressed because it is too large
Load Diff
1238
snikket_web/translations/sv/LC_MESSAGES/messages.po
Normal file
1238
snikket_web/translations/sv/LC_MESSAGES/messages.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,15 @@ import asyncio
|
||||
import typing
|
||||
|
||||
import quart.flask_patch
|
||||
from quart import Blueprint, render_template, request, redirect, url_for
|
||||
from quart import (
|
||||
Blueprint,
|
||||
render_template,
|
||||
request,
|
||||
redirect,
|
||||
url_for,
|
||||
flash,
|
||||
current_app,
|
||||
)
|
||||
import quart.exceptions
|
||||
|
||||
import wtforms
|
||||
@@ -93,14 +101,26 @@ async def change_pw() -> typing.Union[str, quart.Response]:
|
||||
_("Incorrect password"),
|
||||
)
|
||||
else:
|
||||
await flash(
|
||||
_("Password changed"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for("user.change_pw"))
|
||||
|
||||
return await render_template("user_passwd.html", form=form)
|
||||
|
||||
|
||||
EAVATARTOOBIG = _l(
|
||||
"The chosen avatar is too big. To be able to upload larger "
|
||||
"avatars, please use the app"
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/profile", methods=["GET", "POST"])
|
||||
@client.require_session()
|
||||
async def profile() -> typing.Union[str, quart.Response]:
|
||||
max_avatar_size = current_app.config["MAX_AVATAR_SIZE"]
|
||||
|
||||
form = ProfileForm()
|
||||
if request.method != "POST":
|
||||
user_info = await client.get_user_info()
|
||||
@@ -114,26 +134,40 @@ async def profile() -> typing.Union[str, quart.Response]:
|
||||
if form.validate_on_submit():
|
||||
user_info = await client.get_user_info()
|
||||
|
||||
ok = True
|
||||
file_info = (await request.files).get(form.avatar.name)
|
||||
if file_info is not None:
|
||||
mimetype = file_info.mimetype
|
||||
data = file_info.stream.read()
|
||||
if len(data) > 0:
|
||||
if len(data) > max_avatar_size:
|
||||
print(len(data), max_avatar_size)
|
||||
form.avatar.errors.append(EAVATARTOOBIG)
|
||||
ok = False
|
||||
elif len(data) > 0:
|
||||
await client.set_user_avatar(data, mimetype)
|
||||
|
||||
if user_info.get("nickname") != form.nickname.data:
|
||||
await client.set_user_nickname(form.nickname.data)
|
||||
if ok:
|
||||
if user_info.get("nickname") != form.nickname.data:
|
||||
await client.set_user_nickname(form.nickname.data)
|
||||
|
||||
access_model = form.profile_access_model.data
|
||||
await asyncio.gather(
|
||||
client.set_avatar_access_model(access_model),
|
||||
client.set_vcard_access_model(access_model),
|
||||
client.set_nickname_access_model(access_model),
|
||||
)
|
||||
access_model = form.profile_access_model.data
|
||||
await asyncio.gather(
|
||||
client.set_avatar_access_model(access_model),
|
||||
client.set_vcard_access_model(access_model),
|
||||
client.set_nickname_access_model(access_model),
|
||||
)
|
||||
|
||||
return redirect(url_for(".profile"))
|
||||
await flash(
|
||||
_("Profile updated"),
|
||||
"success",
|
||||
)
|
||||
return redirect(url_for(".profile"))
|
||||
|
||||
return await render_template("user_profile.html", form=form)
|
||||
return await render_template("user_profile.html",
|
||||
form=form,
|
||||
max_avatar_size=max_avatar_size,
|
||||
avatar_too_big_warning_header=_l("Error"),
|
||||
avatar_too_big_warning=EAVATARTOOBIG)
|
||||
|
||||
|
||||
@bp.route("/logout", methods=["GET", "POST"])
|
||||
@@ -142,6 +176,12 @@ async def logout() -> typing.Union[quart.Response, str]:
|
||||
form = LogoutForm()
|
||||
if form.validate_on_submit():
|
||||
await client.logout()
|
||||
# No flashing here because we don’t collect flashes in the login page
|
||||
# and it’d be weird.
|
||||
# await flash(
|
||||
# _("Logged out"),
|
||||
# "success",
|
||||
# )
|
||||
return redirect(url_for("main.index"))
|
||||
|
||||
return await render_template("user_logout.html", form=form)
|
||||
|
||||
Reference in New Issue
Block a user