Compare commits

...

124 Commits

Author SHA1 Message Date
Jonas Schäfer
40562d16f6 Fix Link header on invite pages
Thanks @singpolyma.
2023-03-28 19:19:43 +02:00
Jonas Schäfer
48a4a8f587 Merge pull request #147 from snikket-im/fix/i18n-lint
Fix i18n CI linting
2023-03-28 19:19:35 +02:00
Jonas Schäfer
664112bf53 Fix i18n CI linting
It diffs the things, and we're in 2023 now.
2023-03-28 19:16:27 +02:00
Jonas Schäfer
2dfc39e757 Merge pull request #141 from snikket-im/fix/quart-dep
Update WTForms and pin quart version
2023-03-28 19:14:30 +02:00
Jonas Schäfer
31b743a97f Update WTForms and pin quart version
The quart pin is required to fix an attribute error which otherwise
occurs during startup. Hence, this should be a good qualifier to know
when it's safe to upgrade.

Note that this is not a problem in Quart, but in flask-WTForms. But
downgrading flask-wtforms does not help [1], so we don't revert that
uprade.

```
AttributeError: module 'quart.json' has no attribute 'JSONEncoder'
```

   [1]: https://github.com/pallets/quart/issues/163
2022-10-24 10:14:03 +02:00
Weblate
14a335bb06 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/
2022-06-07 20:34:03 +00:00
Jonas Schäfer
6c8c213a88 Merge pull request #100 from snikket-im/feature/drop-xmpp-qr-code
Remove XMPP URI QR code
2022-06-07 22:33:53 +02:00
Jonas Schäfer
2e224d96ce Remove XMPP URI QR code
At the same time, we can also drop the CSS used for that makeshift tab
box. I always felt a bit uneasy about it, a11y-wise, so it's good
riddance.

Fixes #99.
2022-06-07 22:31:40 +02:00
Weblate
b70cb57497 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/
2022-06-06 17:55:08 +00:00
Jonas Schäfer
124e0ce145 Merge pull request #137 from snikket-im/premerge
Merge a bunch of things together
2022-06-06 19:54:54 +02:00
Jonas Schäfer
f2c79044e0 Clean up post-merge lint
I am a *bit* sorry for this commit, because ideally this would've been
folded into 6d50b1c2c7 and whatever the
source of the other "conflict" was.

However, as the things have been merged in a batch, I can't do much more
than this.
2022-06-06 19:52:24 +02:00
Jonas Schäfer
13bc4bb227 Merge branch 'fix/babel-extraction' into premerge 2022-06-06 19:46:59 +02:00
Jonas Schäfer
f1351eb5cc Merge branch 'fix/use-english-default' into premerge 2022-06-06 19:46:49 +02:00
Jonas Schäfer
41573569af Merge branch 'feature/export-back-button' into premerge 2022-06-06 19:46:43 +02:00
Jonas Schäfer
b1f3026b8a Merge branch 'feature/wtforms-3' into premerge 2022-06-06 19:46:32 +02:00
Jonas Schäfer
6794314a59 Merge branch 'feature/vary-accept-language' into premerge 2022-06-06 19:46:25 +02:00
Jonas Schäfer
077e957a00 Merge branch 'feature/ci-extract-translations' into premerge 2022-06-06 19:46:19 +02:00
Jonas Schäfer
4902941145 Merge branch 'feature/strip-versions' into premerge 2022-06-06 19:46:09 +02:00
Jonas Schäfer
5222c8eafe Merge branch 'feature/hypercorn-stdout' into premerge 2022-06-06 19:44:39 +02:00
Jonas Schäfer
03ca7ac5bb Unbreak translation text extraction
It was broken because of the same jinja2 update (presumably) which
prompted 68f72743c5.
2022-05-30 20:51:37 +02:00
Matthew Wild
56cee8bab6 Merge pull request #135 from snikket-im/feature/update-dependencies
Update dependencies
2022-05-30 16:59:22 +01:00
Jonas Schäfer
b36fc0d5ac Bump hsluv to 5.x
Fixes #134.
2022-05-30 17:38:18 +02:00
Jonas Schäfer
68f72743c5 Bump quart to version 0.17
This is needed because jinja2 had an update which caused the portal to
not work at all:

```
ImportError: cannot import name 'escape' from 'jinja2'
```

Quart needed updating for that.

This update required a lot of typefixes. Apparently, the "canned"
responses (like redirect) are now plain werkzeug responses, while
quart.Response does not inherit from werkzeug.Response (otherwise, we
could've changed the type annotations to werkzeug.Response everywhere,
but that doesn't work because a quart.Response is not a
werkzeug.Response).

P.S.: This time, I *did* check that avatar uploads don't break (see
b007afc).
2022-05-30 17:37:54 +02:00
Daniel Holmgaard
8741efb2c4 Translated using Weblate (Danish)
Currently translated at 100.0% (321 of 321 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/da/
2022-05-30 14:01:08 +00:00
Daniel Holmgaard
a0e8933b64 Translated using Weblate (Danish)
Currently translated at 95.6% (307 of 321 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/da/
2022-05-26 23:01:53 +00:00
Zack Zhou
edb3154127 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (321 of 321 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/zh_Hans/
2022-05-20 00:01:45 +00:00
Jonas Schäfer
eb22688302 Use english as default language instead of danish
It is more likely that a user for whose language no translation exists
can read english than danish.

The fallback to english was apparently introduced in c58ce845, though it
is possible that `best_match` did that internally before.

Fixes #131.
2022-05-15 14:12:51 +02:00
Jonas Schäfer
c278d4ace9 Merge pull request #132 from Raka-loah/master
Add Simplified Chinese support
2022-05-15 08:14:08 +02:00
Raka-loah
bbfe8624ef Add Simplified Chinese support 2022-05-14 17:53:40 +08:00
David Baraniak
8bcf619cef Translated using Weblate (French)
Currently translated at 100.0% (321 of 321 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/fr/
2022-04-11 13:00:44 +00:00
Kim Alvefur
73fda3d623 Add a Back button from export panel for consistency
The other user related sections all have a Back button so it makes sense
that this one ought to have one as well.
2022-02-19 16:28:38 +01:00
Matthew Wild
846a5e49fd Merge pull request #122 from snikket-im/feature/autocomplete-hints
Add autocomplete hints to password forms
2022-02-07 11:43:20 +00:00
Matthew Wild
b3ff7f04b5 Merge pull request #127 from snikket-im/fix/unhealthy
Install netcat in final image instead of build image
2022-02-07 11:42:40 +00:00
Jonas Schäfer
0ac4ab8142 Install netcat in final image instead of build image
`nc` (from netcat) is required for the healthcheck. In
c1cf6ab1e5, the installation was
erroneously moved to the builder image, instead of the final image, so
it was missing since then from the actual application image, causing it
to always show as unhealthy.

Fixes #126.
2022-02-05 13:51:30 +01:00
Matthew Wild
d4a38f5049 Merge pull request #125 from snikket-im/fix/support-requirements-compilation
Dockerfile: Add dev headers required for building deps
2022-02-01 09:09:50 +00:00
Matthew Wild
344a4d3e93 Dockerfile: Add dev headers required for building deps 2022-02-01 09:04:25 +00:00
Matthew Wild
57f1047526 Merge pull request #124 from snikket-im/fix/support-requirements-compilation
Dockerfile: Ensure a compiler is available while pip-installing requirements
2022-02-01 08:16:33 +00:00
Matthew Wild
b036caa85e Dockerfile: Ensure a compiler is available while pip-installing requirements
Dependencies are not necessarily packaged for all architectures. In some cases
(such as aiohttp, and others, on ARM) pip will attempt to compile the
dependency from scratch. Since switching to multi-stage builds, we have been
installing these without a compiler present which caused the build to fail on
ARM architectures.

This commit temporarily installs build-essential packages while running pip,
then removes them again afterwards.
2022-01-31 21:45:39 +00:00
Matthew Wild
08845cb9f0 Merge pull request #123 from snikket-im/hotfix/error-handling
Fix error handling when building image
2022-01-31 18:11:58 +00:00
Jonas Schäfer
6aa6e12680 Fix error handling when building image
Apparently, we managed to publish an image without working aiohttp
because of this.

Partially a regression from 5d7183a.
2022-01-31 19:09:03 +01:00
Jonas Schäfer
4bd58c1104 Add autocomplete hints to password forms
This allows user agents to do smart things like filling in the current
password only where it makes sense or integrate nicely with a password
manager.

Fixes #94.
2022-01-22 15:34:27 +01:00
Jonas Schäfer
a998348804 Make hypercorn log to stdout in Docker
This may help with debugging issues, because we now actually see
incoming requests also on the hypercorn layer.

Fixes #97.
2022-01-22 15:20:36 +01:00
Jonas Schäfer
20abe4b903 Add Vary: Accept-Language to all pages using that information
It was found during testing that some user agents cache aggressively
even between switches of the UI language. To properly indicate that the
pages actually depend on that information, we add the correct Vary
header.

Fixes #106.
2022-01-22 15:19:29 +01:00
Jonas Schäfer
a1ecb4ce80 Port to WTForms 3.x
Fixes #103.
2022-01-22 15:17:48 +01:00
Jonas Schäfer
b84b84b394 Add check for a missing make extract_translations
Forgetting to run that causes weblate (or other translation tools) to
show outdated strings and not import new strings, which is bad for the
collaboration.

Fixes #118.
2022-01-22 14:57:59 +01:00
misiek
4f7a4fb5d4 Translated using Weblate (Polish)
Currently translated at 100.0% (321 of 321 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/pl/
2022-01-21 15:00:36 +00:00
Jonas Schäfer
6d50b1c2c7 Do not show dependency versions even to admins by default
Dependency versions are generally not useful, unless you are developing
or otherwise outside of a normal release situation: If you are on a
normal release, we can figure out the dep versions by looking at the
docker image.

To reduce the amount of information displayed and the amount of
information which needs to be conveyed in case of problems, we only show
the web portal and prosody versions to admins, unless debug mode is
enabled.

The behaviour that versions are only shown to logged in admins (unless
debug mode is enabled) remains unchanged.

Fixes #115.
2022-01-20 18:11:47 +01:00
uira
34a23f8505 Translated using Weblate (Indonesian)
Currently translated at 100.0% (321 of 321 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/id/
2022-01-18 14:59:01 +00:00
Jonas Schäfer
ebcb083b6a Translated using Weblate (German)
Currently translated at 100.0% (321 of 321 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/de/
2022-01-18 14:59:01 +00:00
Kim Alvefur
2f0b38b149 Translated using Weblate (Swedish)
Currently translated at 100.0% (321 of 321 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/sv/
2022-01-18 09:21:29 +00:00
Weblate
6244ad5c8a Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/
2022-01-17 16:27:36 +00:00
Jonas Schäfer
07fa1f0abd Fix missing space in string 2022-01-17 17:27:26 +01:00
Weblate
3d22458f9b Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/
2022-01-17 16:26:16 +00:00
Jonas Schäfer
3b768fe220 Extract translations 2022-01-17 17:26:02 +01:00
Matthew Wild
19cf82e894 Merge pull request #111 from snikket-im/fix/byte-scaling
Fix corner cases of byte number formatting
2022-01-17 15:47:57 +00:00
Matthew Wild
fe0316708b Merge pull request #113 from snikket-im/feature/flake8-print
Include flake8-print plugin
2022-01-17 15:47:21 +00:00
Jonas Schäfer
81b0a58dc9 Merge pull request #107 from Zash/storagestats
Show how much storage space is used by shared files
2022-01-17 16:40:16 +01:00
Jonas Schäfer
08aea153f9 Merge pull request #110 from snikket-im/feature/account-export
Feature: account import/export
2022-01-17 16:38:04 +01:00
Jonas Schäfer
958b3365f7 Remove strange greeting copied over from user_home 2022-01-17 16:34:30 +01:00
Matthew Wild
05caf38d37 Use PUT method instead of POST, as expected by API 2022-01-17 16:33:46 +01:00
Matthew Wild
390ecded42 Include PEP data in export/import 2022-01-17 16:33:29 +01:00
Matthew Wild
f6395d4d9c Complete the implementation of data import 2022-01-17 16:33:00 +01:00
Matthew Wild
32179c72cd Add account data import UI on registration success page 2022-01-17 16:24:00 +01:00
Matthew Wild
3cb8185b1a prosodyclient: Add API to import XEP-0227 account data 2022-01-17 16:23:58 +01:00
Matthew Wild
481379d03f Switch to HTTP 204 to indicate no data to export
This is more robust, as it indicates the request was successfully
authenticated and processed, but that there is no data to export. This is
different from the URL not existing (which would also happen if the module was
unavailable, which should be a notable error instead).
2022-01-17 16:23:57 +01:00
Matthew Wild
275b302531 Add UI for exporting user account data 2022-01-17 16:23:56 +01:00
Matthew Wild
e18f727db0 prosodyclient: Add support for exporting a user's account data 2022-01-17 16:23:55 +01:00
Matthew Wild
f7429413cd Add more icons to the repertoire 2022-01-17 16:23:35 +01:00
Jonas Schäfer
d5a46b69a6 Include flake8-print plugin
This alerts us of stray print statements, which should never occur
because this is a non-TUI application.
2022-01-15 17:07:16 +01:00
Jonas Schäfer
51f2ebbd13 Handle the correct exception when formatting extremely high amounts of bytes
Found in production. Yes really. Due to some borked LXC integration, my
snikket host reports

```
MemTotal:       9007199254740991 kB
MemFree:        9007199254690591 kB
MemAvailable:   9007199254690591 kB
```

That is more than 1024 TiB, so it tries to go further up in the scale,
which then causes a Guru Meditation because of the uncaught IndexError.
2022-01-10 17:32:11 +01:00
Jonas Schäfer
b4e6ee8943 Fix formatting of zero bytes
Previously, that would raise a ValueError (math domain error), because
log(0) is undefined.
2022-01-10 17:31:50 +01:00
Jonas Schäfer
52d8047546 Correctly detect presence of storage metric
If there have been no uploads yet, the metric will be zero, so the if
condition would fail the test, so it would render as "unknown".
2022-01-10 16:56:31 +01:00
Jonas Schäfer
aed9ad1cde Merge pull request #93 from Zash/debianbullseye
Dockerfile: Switch base image to Debian 11
2022-01-10 16:40:28 +01:00
Kim Alvefur
b545c137b1 Dockerfile: Switch base image to Debian 11 2022-01-10 16:27:38 +01:00
Matthew Wild
47642dc384 Merge pull request #108 from snikket-im/feature/multi-stage-dockerfile
Dockerfile: Split build into multiple stages
2022-01-10 14:21:57 +00:00
Jonas Schäfer
5d7183a0b8 Reinstate cache deletion in multi-stage build
Previously, the multi-stage build increased the image size by about 30
MiB (163MiB -> 191MiB). Dropping the caches reduces the image size down
to 159MiB, leading to a net improvement of 4 MiB.
2022-01-08 13:29:28 +01:00
Matthew Wild
c1cf6ab1e5 Dockerfile: Split build into multiple stages
Currently the Dockerfile has a single RUN directive with all the needed
commands in it. This optimizes for image size by not creating too many
"layers" (which are only additive). However it means the result that gets
cached can basically never be reused, because any change to the source code
will need to execute the whole RUN block again.

This commit switches to a docker "multi-stage" build, where we have a build
image that is separate from the final one that gets published. The build
image can be cached locally, and size is no longer a significant concern.

This approach allows the single RUN command to be split up into multiple RUN
commands that only execute when strictly needed (i.e. when their result
is not cached locally).

This drastically improves the build time when rebuilding the image after
a simple code change, because the build image doesn't have to install all
the apt packages, for example. This leads to a nicer developer experience
when using docker locally for development and testing.
2022-01-08 13:17:52 +01:00
Jonas Schäfer
aee53a2e1a Merge pull request #109 from snikket-im/feature/fix-mypy
Fix mypy false positives
2022-01-08 13:14:28 +01:00
Jonas Schäfer
3a81a0140b Revert "Fix spurious mypy error"
This reverts commit 28ff19c19c.
2022-01-08 13:12:30 +01:00
Jonas Schäfer
5b4d4ddd36 Fix some mypy regression 2022-01-08 13:12:30 +01:00
Jonas Schäfer
28ff19c19c Fix spurious mypy error
For whatever reason, it thinks that babel has no __version__ field, but
it in fact does.
2022-01-08 12:52:31 +01:00
uira
8e3837f704 Translated using Weblate (Indonesian)
Currently translated at 100.0% (303 of 303 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/id/
2021-12-12 07:00:42 +00:00
Kim Alvefur
4af78f635e Show how much storage space is used by shared files
Requires at least https://hg.prosody.im/prosody-modules/rev/883ad8b0a7c0
2021-11-18 19:50:47 +01:00
Matthew Wild
98e7de3166 Merge pull request #104 from snikket-im/feature/enable-restricted-users
admin: Show restricted user role in the UI
2021-11-09 17:03:08 +00:00
Matthew Wild
61c71b2145 admin: Inline restricted user role name
It was a variable only for the benefit of translators while disabled.
2021-11-09 17:00:59 +00:00
Matthew Wild
6b35e9a259 admin: Show restricted user role in the UI 2021-11-09 16:40:50 +00:00
Matthew Wild
58c2112fec Merge pull request #102 from snikket-im/feature/pin-wtforms
Pin wtforms to 2.x
2021-11-09 10:48:18 +00:00
Jonas Schäfer
c856afee82 Pin wtforms to 2.x
wtforms 3.0 is incompatible with our code. A separate issue will be
filed to address the incompatibilities, but this should be enough to get
working images out of it.

With 3.x, we're seeing:

```
  File "/home/horazont/Projects/python/snikket-web-portal/snikket_web/main.py", line 35, in LoginForm
    address = wtforms.TextField(
AttributeError: module 'wtforms' has no attribute 'TextField'
```

and the portal fails to start.
2021-11-08 18:07:34 +01:00
Matthew Wild
c8356a8e9e Merge pull request #101 from snikket-im/feature/https-qr
Force invite QR code to HTTPS
2021-10-15 14:32:57 +01:00
Jonas Schäfer
0eb464f428 Force invite QR code to HTTPS
We could also do a thing with ProxyFix, but honestly, this should always
be HTTPS.
2021-10-15 15:21:22 +02:00
misiek
2a6ef3c8f1 Translated using Weblate (Polish)
Currently translated at 100.0% (303 of 303 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/pl/
2021-09-03 15:00:35 +00:00
Matthew Wild
b5d148458a Merge pull request #98 from snikket-im/feature/apple
🎉 Finally set the URL for the App Store
2021-09-02 14:42:02 +01:00
Jonas Schäfer
261758b07a 🎉 Finally set the URL for the App Store
See-Also: https://snikket.org/blog/snikket-ios-public-release/
2021-08-31 17:03:21 +02:00
Jonas Schäfer
ff99c9488a Merge pull request #96 from Zash/invite_success_link
Link to main page after successful registration
2021-08-30 15:47:41 +02:00
Kim Alvefur
fe78631039 Link to main page after successful registration
Someone who registers via the web might also be interested in the web
portal.

Thanks to Jonas and Matthew for feedback on draft commit and help with
whatever this template syntax is.

Also no thanks to git for not actually having draft commits as a concept.
Mercurial is so much nicer to work with.
2021-08-29 15:10:02 +02:00
Kim Alvefur
12ddd288bf Translated using Weblate (Swedish)
Currently translated at 100.0% (303 of 303 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/sv/
2021-08-01 14:00:44 +00:00
misiek
633fb0d084 Translated using Weblate (Polish)
Currently translated at 97.0% (294 of 303 strings)

Translation: Snikket/Web Portal
Translate-URL: http://i18n.sotecware.net/projects/snikket/web-portal/pl/
2021-08-01 14:00:44 +00:00
uira
f9690063bc Translated using Weblate (Indonesian)
Currently translated at 100.0% (303 of 303 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/id/
2021-06-21 23:01:04 +00:00
Jonas Schäfer
65ed50acd3 Merge pull request #90 from snikket-im/hotfix/f-droid-button
Fix F-Droid installation button
2021-06-21 20:23:02 +02:00
Jonas Schäfer
aa04320d70 Fix F-Droid installation button
The button was broken because it was classified as popover, which
means that the JavaScript code will mess with it. In reality,
*that* button was supposed to point at the actual market:// URL.

So we just remove the class and associated data here to fix that.

Fixes #89.
2021-06-20 14:14:30 +02:00
Link Mauve
818d50a1bb Translated using Weblate (French)
Currently translated at 97.6% (296 of 303 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/fr/
2021-06-19 15:01:05 +00:00
Jonas Schäfer
c7ba7985ea Translated using Weblate (English (United Kingdom))
Currently translated at 40.5% (123 of 303 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/en_GB/
2021-06-19 15:01:05 +00:00
Jonas Schäfer
223d127364 Translated using Weblate (English)
Currently translated at 70.2% (213 of 303 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/en/
2021-06-19 15:01:04 +00:00
Jonas Schäfer
3a2c4543c4 Translated using Weblate (German)
Currently translated at 100.0% (303 of 303 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/de/
2021-06-19 15:01:04 +00:00
Weblate
c307f057b9 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/
2021-06-18 14:20:21 +00:00
Jonas Schäfer
243d5ba236 Merge pull request #86 from snikket-im/feature/show-deleted-circle-members
admin: Show deleted users in circle members
2021-06-18 16:20:18 +02:00
Jonas Schäfer
3d62efccfc admin: Show deleted users in circle members
This helps with removing those users from circles, to avoid them
popping up in peoples roster again.

Even though removal from a circle also only partially works
(roster entries are for instance not cleared), this helps with
ghost users reappearing all the time.
2021-06-18 16:18:22 +02:00
Jonas Schäfer
9d26e39025 Merge pull request #87 from snikket-im/feature/mypy-ci-fix
Install build requirements for mypy CI check
2021-06-18 16:18:12 +02:00
Jonas Schäfer
874f0447ba Install build requirements for mypy CI check
Otherwise, the toml type hints are missing which mypy does not
like.
2021-06-18 16:14:45 +02:00
Jonas Schäfer
0f2127a672 Bring happiness to mypy 2021-06-18 16:11:22 +02:00
Weblate
20d84e7dd1 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/
2021-06-18 14:05:55 +00:00
Jonas Schäfer
a02e66023c Fix missing extract_translations run 2021-06-18 16:05:38 +02:00
Jonas Schäfer
e7db9cc772 Fix untranslated table header in admin_edit_circle.html 2021-06-17 17:02:26 +02:00
Jonas Schäfer
e91fb45374 Merge pull request #85 from snikket-im/auto-versioning
Automatically determine version from build info or git
2021-05-31 17:51:59 +02:00
Matthew Wild
531565d55c Automatically determine version from build info or git 2021-05-31 11:20:39 +01:00
Kim Alvefur
c6307619f9 Translated using Weblate (Swedish)
Currently translated at 100.0% (302 of 302 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/sv/
2021-05-28 21:00:56 +00:00
Weblate
da2668cbbc Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/
2021-05-27 18:31:31 +00:00
Link Mauve
765e3890b4 Translated using Weblate (French)
Currently translated at 97.4% (272 of 279 strings)

Translation: Snikket/Web Portal
Translate-URL: https://i18n.sotecware.net/projects/snikket/web-portal/fr/
2021-05-27 18:31:30 +00:00
Jonas Schäfer
b40a625283 admin: allow disabling display of metrics
This is useful in situations where the admins of the Snikket
server (i.e. those who care for the docker containers) are not the
same people as the people who are admins of the Snikket service
(i.e. those who care for the users).
2021-05-27 17:59:40 +02:00
Jonas Schäfer
8a293985ca Implement system status panel
This offers system metrics and a way to send a broadcast
message to all online or registered users.

Requires prosody-modules cade5dac1003.
2021-05-27 17:21:58 +02:00
Jonas Schäfer
13b2a76c3d Fix mypy errors introduced in b007afc901 2021-05-27 16:33:46 +02:00
Jonas Schäfer
28e01c336d Do not install quart 0.15
As we saw in b007afc901, we cannot
use that version right now.
2021-05-25 18:56:15 +02:00
Jonas Schäfer
5fb0b91178 Bumping version number to 0.2.1 2021-05-22 11:11:50 +02:00
Jonas Schäfer
b007afc901 Revert "Upgrade to quart 0.15"
This reverts commit 486596f89f.
It was discovered that multipart/form-data forms do not work
correctly with Quart 0.15. The upgrade to Quart 0.15 was rushed
and not tested correctly, which I apologize for.

See-Also: https://github.com/pgjones/quart/issues/126
2021-05-22 11:11:16 +02:00
52 changed files with 7108 additions and 2244 deletions

View File

@@ -27,6 +27,7 @@ jobs:
set -euo pipefail set -euo pipefail
pip install mypy pip install mypy
pip install -r requirements.txt pip install -r requirements.txt
pip install -r build-requirements.txt
- name: Typecheck - name: Typecheck
run: | run: |
python -m mypy --config mypy.ini -p snikket_web python -m mypy --config mypy.ini -p snikket_web
@@ -44,11 +45,34 @@ jobs:
- name: Install - name: Install
run: | run: |
set -euo pipefail set -euo pipefail
pip install flake8 pip install flake8 flake8-print
- name: Linting - name: Linting
run: | run: |
python -m flake8 snikket_web python -m flake8 snikket_web
translation-check:
runs-on: ubuntu-latest
name: 'lint: i18n'
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Install
run: |
set -euo pipefail
pip install flask-babel
- name: Linting
run: |
sed -ri '/^"POT-Creation-Date: /d' snikket_web/translations/messages.pot
git add snikket_web/translations/messages.pot
make extract_translations
sed -ri '/^"POT-Creation-Date: /d' snikket_web/translations/messages.pot
git diff --exit-code --color -- snikket_web/translations/messages.pot
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@@ -1,7 +1,12 @@
FROM debian:buster-slim FROM debian:bullseye-slim AS build
ARG BUILD_SERIES=dev RUN set -eu; \
ARG BUILD_ID=0 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;
COPY requirements.txt /opt/snikket-web-portal/requirements.txt COPY requirements.txt /opt/snikket-web-portal/requirements.txt
COPY build-requirements.txt /opt/snikket-web-portal/build-requirements.txt COPY build-requirements.txt /opt/snikket-web-portal/build-requirements.txt
@@ -12,30 +17,43 @@ COPY babel.cfg /opt/snikket-web-portal/babel.cfg
WORKDIR /opt/snikket-web-portal WORKDIR /opt/snikket-web-portal
RUN set -eu; \ 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 \
; \
pip3 install -r requirements.txt; \ pip3 install -r requirements.txt; \
pip3 install -r build-requirements.txt; \ pip3 install -r build-requirements.txt; \
make; \ make;
pip3 uninstall -yr build-requirements.txt; \
apt-get remove -y build-essential make libpython3-dev; \
apt-get autoremove -y; \ FROM debian:bullseye-slim
pip3 install hypercorn; \
rm -rf /root/.cache; \ ARG BUILD_SERIES=dev
apt-get clean ; rm -rf /var/lib/apt/lists ARG BUILD_ID=0
COPY docker/env.py /etc/snikket-web-portal/env.py COPY docker/env.py /etc/snikket-web-portal/env.py
ENV SNIKKET_WEB_PYENV=/etc/snikket-web-portal/env.py ENV SNIKKET_WEB_PYENV=/etc/snikket-web-portal/env.py
ENV SNIKKET_WEB_PROSODY_ENDPOINT=http://127.0.0.1:5280/ ENV SNIKKET_WEB_PROSODY_ENDPOINT=http://127.0.0.1:5280/
COPY requirements.txt /opt/snikket-web-portal/requirements.txt
WORKDIR /opt/snikket-web-portal
RUN set -eu; \
export DEBIAN_FRONTEND=noninteractive ; \
apt-get update ; \
apt-get install -y --no-install-recommends \
python3 python3-pip python3-setuptools python3-wheel build-essential libpython3-dev netcat; \
pip3 install -r requirements.txt; \
apt-get remove -y --autoremove build-essential libpython3-dev; \
apt-get clean ; rm -rf /var/lib/apt/lists; \
pip3 install hypercorn; \
rm -rf /root/.cache;
HEALTHCHECK CMD nc -zv ${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE:-127.0.0.1} ${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_PORT:-5765} HEALTHCHECK CMD nc -zv ${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE:-127.0.0.1} ${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_PORT:-5765}
COPY --from=build /opt/snikket-web-portal/snikket_web/ /opt/snikket-web-portal/snikket_web
COPY babel.cfg /opt/snikket-web-portal/babel.cfg
RUN echo "$BUILD_SERIES $BUILD_ID" > /opt/snikket-web-portal/.app_version
ADD docker/entrypoint.sh /entrypoint.sh ADD docker/entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/bin/sh", "/entrypoint.sh"] ENTRYPOINT ["/bin/sh", "/entrypoint.sh"]

View File

@@ -1,4 +1,3 @@
[python: snikket_web/**.py] [python: snikket_web/**.py]
[jinja2: snikket_web/templates/**.html] [jinja2: snikket_web/templates/**.html]
[jinja2: snikket_web/templates/**.j2] [jinja2: snikket_web/templates/**.j2]
extensions=jinja2.ext.autoescape,jinja2.ext.with_

View File

@@ -1,3 +1,4 @@
pyscss~=1.3 pyscss~=1.3
mypy mypy
python-dotenv~=0.15 python-dotenv~=0.15
types-toml

View File

@@ -5,4 +5,4 @@ export SNIKKET_WEB_DOMAIN="$SNIKKET_DOMAIN"
export SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE="${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE-127.0.0.1}" 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}" 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()' exec hypercorn -b "${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_INTERFACE}:${SNIKKET_TWEAK_PORTAL_INTERNAL_HTTP_PORT}" --access-logfile=- --log-file=- 'snikket_web:create_app()'

View File

@@ -1,8 +1,9 @@
aiohttp~=3.6 aiohttp~=3.6
quart~=0.15 quart~=0.17,<0.18
flask-wtf~=0.14 flask-wtf~=1.0
hsluv~=0.0.2 hsluv~=5.0
flask-babel~=1.0 flask-babel~=1.0
email-validator~=1.1 email-validator~=1.1
environ-config~=20.0 environ-config~=20.0
wtforms~=3.0
typing-extensions typing-extensions

View File

@@ -17,12 +17,13 @@ from quart import (
redirect, redirect,
jsonify, jsonify,
) )
import werkzeug.exceptions import werkzeug.exceptions
import environ import environ
from . import colour, infra from . import colour, infra
from ._version import version, version_info # noqa:F401 from ._version import version # noqa:F401
async def proc() -> typing.Dict[str, typing.Any]: async def proc() -> typing.Dict[str, typing.Any]:
@@ -146,21 +147,29 @@ class AppConfig:
site_name = environ.var("") site_name = environ.var("")
avatar_cache_ttl = environ.var(1800, converter=int) avatar_cache_ttl = environ.var(1800, converter=int)
languages = environ.var([ languages = environ.var([
# Keep `en` as the first language, because it is used as a fallback
# if the language negotiation cannot find another match. It is more
# likely that users are able to read english (or find a suitable
# online translator) than, for instance, danish.
"en",
"da", "da",
"de", "de",
"en",
"fr", "fr",
"id", "id",
"it", "it",
"pl", "pl",
"sv", "sv",
"zh_Hans_CN",
], converter=autosplit) ], converter=autosplit)
apple_store_url = environ.var("") apple_store_url = environ.var(
"https://apps.apple.com/us/app/snikket/id1545164189",
)
# Default limit of 1 MiB is what was discovered to be the effective limit # Default limit of 1 MiB is what was discovered to be the effective limit
# in #67, hence we set that here for now. # in #67, hence we set that here for now.
# Future versions may change this default, and the standard deployment # Future versions may change this default, and the standard deployment
# tools may also very well override it. # tools may also very well override it.
max_avatar_size = environ.var(1024*1024, converter=int) max_avatar_size = environ.var(1024*1024, converter=int)
show_metrics = environ.bool_var(True)
_UPPER_CASE = "".join(map(chr, range(ord("A"), ord("Z")+1))) _UPPER_CASE = "".join(map(chr, range(ord("A"), ord("Z")+1)))
@@ -173,7 +182,7 @@ def create_app() -> quart.Quart:
pass pass
else: else:
import runpy import runpy
init_vars = runpy.run_path(env_init) # type:ignore init_vars = runpy.run_path(env_init)
for name, value in init_vars.items(): for name, value in init_vars.items():
if not name: if not name:
continue continue
@@ -192,6 +201,7 @@ def create_app() -> quart.Quart:
app.config["AVATAR_CACHE_TTL"] = config.avatar_cache_ttl app.config["AVATAR_CACHE_TTL"] = config.avatar_cache_ttl
app.config["APPLE_STORE_URL"] = config.apple_store_url app.config["APPLE_STORE_URL"] = config.apple_store_url
app.config["MAX_AVATAR_SIZE"] = config.max_avatar_size app.config["MAX_AVATAR_SIZE"] = config.max_avatar_size
app.config["SHOW_METRICS"] = config.show_metrics
app.context_processor(proc) app.context_processor(proc)
app.register_error_handler( app.register_error_handler(
@@ -200,21 +210,21 @@ def create_app() -> quart.Quart:
) )
app.register_error_handler( app.register_error_handler(
werkzeug.exceptions.HTTPException, werkzeug.exceptions.HTTPException,
generic_http_error, generic_http_error, # type:ignore
) )
app.register_error_handler( app.register_error_handler(
Exception, Exception,
generic_error_handler, generic_error_handler,
) )
@app.route("/") # type: ignore @app.route("/")
async def index() -> quart.Response: async def index() -> werkzeug.Response:
if infra.client.has_session: if infra.client.has_session:
return redirect(url_for('user.index')) return redirect(url_for('user.index'))
return redirect(url_for('main.login')) return redirect(url_for('main.login'))
@app.route("/site.webmanifest") # type: ignore @app.route("/site.webmanifest")
def site_manifest() -> quart.Response: def site_manifest() -> quart.Response:
# this is needed for icons # this is needed for icons
return jsonify( return jsonify(

View File

@@ -1,5 +1,15 @@
version_info = (0, 1, 2, "a0") import os
version = ( import subprocess
".".join(map(str, version_info[:3])) +
(f"-{version_info[3]}" if version_info[3] else "") version = "(unknown)"
)
if os.path.exists(".app_version"):
with open(".app_version") as f:
version = f.read().strip()
elif os.path.exists(".git"):
try:
version = subprocess.check_output([
"git", "describe", "--always"
]).strip().decode("utf8")
except OSError:
version = "dev (unknown)"

View File

@@ -1,14 +1,17 @@
import json import json
import resource
import time
import typing import typing
from datetime import datetime from datetime import datetime
import aiohttp import aiohttp
import werkzeug.exceptions
import quart.flask_patch import quart.flask_patch
import wtforms import wtforms
import wtforms.fields.html5
from quart import ( from quart import (
Blueprint, Blueprint,
@@ -18,27 +21,32 @@ from quart import (
request, request,
abort, abort,
flash, flash,
current_app,
) )
from flask_babel import lazy_gettext as _l, _ from flask_babel import lazy_gettext as _l, _
from . import prosodyclient from . import prosodyclient, _version
from .infra import client, circle_name, BaseForm from .infra import client, circle_name, BaseForm
bp = Blueprint("admin", __name__, url_prefix="/admin") bp = Blueprint("admin", __name__, url_prefix="/admin")
@bp.route("/") # type:ignore @bp.route("/")
@client.require_admin_session() @client.require_admin_session()
async def index() -> str: async def index() -> str:
return await render_template("admin_home.html") show_metrics = current_app.config["SHOW_METRICS"]
return await render_template(
"admin_home.html",
show_metrics=show_metrics,
)
class PasswordResetLinkPost(BaseForm): class PasswordResetLinkPost(BaseForm):
action_revoke = wtforms.StringField() action_revoke = wtforms.StringField()
@bp.route("/users") # type:ignore @bp.route("/users")
@client.require_admin_session() @client.require_admin_session()
async def users() -> str: async def users() -> str:
users = sorted( users = sorted(
@@ -56,9 +64,6 @@ async def users() -> str:
) )
_LIMITED_ROLE_NAME = _("Limited")
class EditUserForm(BaseForm): class EditUserForm(BaseForm):
localpart = wtforms.StringField( localpart = wtforms.StringField(
_l("Login name"), _l("Login name"),
@@ -71,9 +76,7 @@ class EditUserForm(BaseForm):
role = wtforms.RadioField( role = wtforms.RadioField(
_l("Access Level"), _l("Access Level"),
choices=[ choices=[
# NOTE: enable this only after something has been done which ("prosody:restricted", _("Limited")),
# actually enforces the described restrictions :).
# ("prosody:restricted", _LIMITED_ROLE_NAME),
("prosody:normal", _l("Normal user")), ("prosody:normal", _l("Normal user")),
("prosody:admin", _l("Administrator")), ("prosody:admin", _l("Administrator")),
], ],
@@ -88,9 +91,9 @@ class EditUserForm(BaseForm):
) )
@bp.route("/user/<localpart>/", methods=["GET", "POST"]) # type:ignore @bp.route("/user/<localpart>/", methods=["GET", "POST"])
@client.require_admin_session() @client.require_admin_session()
async def edit_user(localpart: str) -> typing.Union[quart.Response, str]: async def edit_user(localpart: str) -> typing.Union[werkzeug.Response, str]:
target_user_info = await client.get_user_by_localpart(localpart) target_user_info = await client.get_user_by_localpart(localpart)
form = EditUserForm() form = EditUserForm()
@@ -143,9 +146,9 @@ class DeleteUserForm(BaseForm):
) )
@bp.route("/user/<localpart>/delete", methods=["GET", "POST"]) # type:ignore @bp.route("/user/<localpart>/delete", methods=["GET", "POST"])
@client.require_admin_session() @client.require_admin_session()
async def delete_user(localpart: str) -> typing.Union[str, quart.Response]: async def delete_user(localpart: str) -> typing.Union[str, werkzeug.Response]:
target_user_info = await client.get_user_by_localpart(localpart) target_user_info = await client.get_user_by_localpart(localpart)
form = DeleteUserForm() form = DeleteUserForm()
if form.validate_on_submit(): if form.validate_on_submit():
@@ -164,7 +167,7 @@ async def delete_user(localpart: str) -> typing.Union[str, quart.Response]:
) )
@bp.route("/user/<localpart>/debug") # type:ignore @bp.route("/user/<localpart>/debug")
@client.require_admin_session() @client.require_admin_session()
async def debug_user(localpart: str) -> typing.Union[str, quart.Response]: async def debug_user(localpart: str) -> typing.Union[str, quart.Response]:
target_user_info = await client.get_user_by_localpart(localpart) target_user_info = await client.get_user_by_localpart(localpart)
@@ -180,11 +183,11 @@ async def debug_user(localpart: str) -> typing.Union[str, quart.Response]:
) )
@bp.route("/users/password-reset/<id_>", methods=["GET", "POST"]) # type:ignore # noqa:E501 @bp.route("/users/password-reset/<id_>", methods=["GET", "POST"])
@client.require_admin_session() @client.require_admin_session()
async def user_password_reset_link( async def user_password_reset_link(
id_: str, id_: str,
) -> typing.Union[str, quart.Response]: ) -> typing.Union[str, werkzeug.Response]:
invite_info = await client.get_invite_by_id( invite_info = await client.get_invite_by_id(
id_, id_,
) )
@@ -274,9 +277,9 @@ class InvitePost(BaseForm):
) )
@bp.route("/invitations", methods=["GET", "POST"]) # type:ignore @bp.route("/invitations", methods=["GET", "POST"])
@client.require_admin_session() @client.require_admin_session()
async def invitations() -> typing.Union[str, quart.Response]: async def invitations() -> typing.Union[str, werkzeug.Response]:
invites = sorted( invites = sorted(
( (
invite invite
@@ -320,9 +323,9 @@ class InviteForm(BaseForm):
) )
@bp.route("/invitation/-/new", methods=["POST"]) # type:ignore @bp.route("/invitation/-/new", methods=["POST"])
@client.require_admin_session() @client.require_admin_session()
async def create_invite() -> typing.Union[str, quart.Response]: async def create_invite() -> typing.Union[str, werkzeug.Response]:
form = InvitePost() form = InvitePost()
circles = await client.list_groups() circles = await client.list_groups()
form.circles.choices = [ form.circles.choices = [
@@ -348,9 +351,9 @@ async def create_invite() -> typing.Union[str, quart.Response]:
invite_form=form) invite_form=form)
@bp.route("/invitation/<id_>", methods=["GET", "POST"]) # type:ignore @bp.route("/invitation/<id_>", methods=["GET", "POST"])
@client.require_admin_session() @client.require_admin_session()
async def edit_invite(id_: str) -> typing.Union[str, quart.Response]: async def edit_invite(id_: str) -> typing.Union[str, werkzeug.Response]:
try: try:
invite_info = await client.get_invite_by_id(id_) invite_info = await client.get_invite_by_id(id_)
except aiohttp.ClientResponseError as exc: except aiohttp.ClientResponseError as exc:
@@ -397,7 +400,7 @@ class CirclePost(BaseForm):
) )
@bp.route("/circles") # type:ignore @bp.route("/circles")
@client.require_admin_session() @client.require_admin_session()
async def circles() -> str: async def circles() -> str:
circles = sorted( circles = sorted(
@@ -414,9 +417,9 @@ async def circles() -> str:
) )
@bp.route("/circle/-/new", methods=["POST"]) # type:ignore @bp.route("/circle/-/new", methods=["POST"])
@client.require_admin_session() @client.require_admin_session()
async def create_circle() -> typing.Union[str, quart.Response]: async def create_circle() -> typing.Union[str, werkzeug.Response]:
create_form = CirclePost() create_form = CirclePost()
if create_form.validate_on_submit(): if create_form.validate_on_submit():
circle = await client.create_group( circle = await client.create_group(
@@ -460,9 +463,9 @@ class EditCircleForm(BaseForm):
) )
@bp.route("/circle/<id_>", methods=["GET", "POST"]) # type:ignore @bp.route("/circle/<id_>", methods=["GET", "POST"])
@client.require_admin_session() @client.require_admin_session()
async def edit_circle(id_: str) -> typing.Union[str, quart.Response]: async def edit_circle(id_: str) -> typing.Union[str, werkzeug.Response]:
async with client.authenticated_session() as session: async with client.authenticated_session() as session:
try: try:
circle = await client.get_group_by_id( circle = await client.get_group_by_id(
@@ -478,21 +481,21 @@ async def edit_circle(id_: str) -> typing.Union[str, quart.Response]:
return redirect(url_for(".circles")) return redirect(url_for(".circles"))
raise raise
users = sorted( users = {
await client.list_users(), user.localpart: user
key=lambda x: x.localpart for user in await client.list_users()
) }
circle_members = [ circle_members = [
user for user in users (localpart, users.get(localpart))
if user.localpart in circle.members for localpart in sorted(circle.members)
] ]
form = EditCircleForm() form = EditCircleForm()
form.user_to_add.choices = [ form.user_to_add.choices = sorted(
(user.localpart, user.localpart) (localpart, localpart)
for user in users for localpart in users.keys()
if user.localpart not in circle.members if localpart not in circle.members
] )
valid_users = [x[0] for x in form.user_to_add.choices] valid_users = [x[0] for x in form.user_to_add.choices]
invite_form = InvitePost() invite_form = InvitePost()
@@ -540,8 +543,6 @@ async def edit_circle(id_: str) -> typing.Union[str, quart.Response]:
) )
return redirect(url_for(".edit_circle", id_=id_)) return redirect(url_for(".edit_circle", id_=id_))
else:
print(form.errors)
return await render_template( return await render_template(
"admin_edit_circle.html", "admin_edit_circle.html",
@@ -550,3 +551,153 @@ async def edit_circle(id_: str) -> typing.Union[str, quart.Response]:
circle_members=circle_members, circle_members=circle_members,
invite_form=invite_form, invite_form=invite_form,
) )
_CPU_EPOCH = time.process_time()
_MONOTONIC_EPOCH = time.monotonic()
def get_system_stats() -> typing.MutableMapping[
str,
typing.Optional[typing.Union[int, float]]]:
pagesize = resource.getpagesize()
my_rss: typing.Optional[int] = None
try:
with open("/proc/self/statm") as f:
stats = f.read().split()
my_rss = int(stats[1]) * pagesize
except (ValueError, IndexError, TypeError, OSError):
pass
my_cpu = (
(time.process_time() - _CPU_EPOCH) /
(time.monotonic() - _MONOTONIC_EPOCH)
)
mem_total, mem_available = None, None
load5: typing.Optional[float] = None
try:
with open("/proc/loadavg") as f:
stats = f.read().split()
load5 = float(stats[1])
except (ValueError, IndexError, TypeError, OSError):
pass
try:
with open("/proc/meminfo") as f:
for line in f:
if line.startswith("MemTotal"):
mem_total = int(line.split()[1]) * 1024
elif line.startswith("MemAvailable"):
mem_available = int(line.split()[1]) * 1024
if mem_total is not None and mem_available is not None:
break
except (ValueError, TypeError, IndexError, OSError):
pass
return {
"portal_rss": my_rss,
"portal_cpu": my_cpu,
"load5": load5,
"mem_total": mem_total,
"mem_available": mem_available,
}
class AnnouncementForm(BaseForm):
text = wtforms.StringField(
_("Message contents"),
widget=wtforms.widgets.TextArea(),
validators=[wtforms.validators.DataRequired()],
)
online_only = wtforms.BooleanField(
_("Only send to online users"),
)
action_post_all = wtforms.SubmitField(
_("Post to all users"),
)
action_send_preview = wtforms.SubmitField(
_("Send preview to yourself"),
)
@bp.route("/system/", methods=["GET", "POST"])
@client.require_admin_session()
async def system() -> typing.Union[str, werkzeug.Response]:
form = AnnouncementForm()
if form.validate_on_submit():
recipients = "self"
if form.action_post_all.data:
if form.online_only.data:
recipients = "online"
else:
recipients = "all"
await client.post_announcement(
form.text.data,
recipients=recipients,
)
await flash(
_("Announcement sent!"),
"success",
)
if recipients != "self":
# redirect only if not previewing
return redirect(url_for(".system"))
version = None
now = None
show_metrics = current_app.config["SHOW_METRICS"]
if show_metrics:
version = await client.get_server_version()
now = time.time()
try:
prosody_metrics = await client.get_system_metrics()
except werkzeug.exceptions.NotFound:
# server does not offer the endpoint for whatever reason -- ignore
prosody_metrics = {}
metrics = get_system_stats()
try:
prosody_cpu_metrics = prosody_metrics["cpu"]
except KeyError:
pass
else:
metrics["prosody_cpu"] = (prosody_cpu_metrics["value"] /
(now - prosody_cpu_metrics["since"]))
try:
metrics["prosody_rss"] = prosody_metrics["memory"]
except KeyError:
pass
try:
metrics["prosody_devices"] = prosody_metrics["c2s"]
except KeyError:
pass
try:
metrics["prosody_uploads"] = prosody_metrics["uploads"]
except KeyError:
pass
for k in list(metrics.keys()):
if metrics[k] is None:
# so that defaulting in jinja works
del metrics[k]
else:
metrics = {}
return await render_template(
"admin_system.html",
metrics=metrics,
version=_version.version,
prosody_version=version,
form=form,
show_metrics=show_metrics,
)

View File

@@ -1,5 +1,6 @@
import base64 import base64
import itertools import itertools
import math
import secrets import secrets
import typing import typing
@@ -7,6 +8,7 @@ import quart.flask_patch # noqa:F401
from quart import ( from quart import (
current_app, current_app,
request, request,
g,
) )
import flask_babel import flask_babel
@@ -22,8 +24,18 @@ client.default_login_redirect = "main.login"
babel = flask_babel.Babel() babel = flask_babel.Babel()
BYTE_UNIT_SCALE_MAP = [
"B",
"kiB",
"MiB",
"GiB",
"TiB",
]
@babel.localeselector # type:ignore @babel.localeselector # type:ignore
def selected_locale() -> str: def selected_locale() -> str:
g.language_header_accessed = True
selected = request.accept_languages.best_match( selected = request.accept_languages.best_match(
current_app.config['LANGUAGES'] current_app.config['LANGUAGES']
) or current_app.config['LANGUAGES'][0] ) or current_app.config['LANGUAGES'][0]
@@ -42,14 +54,39 @@ def circle_name(c: typing.Any) -> str:
return c.name return c.name
def format_bytes(n: float) -> str:
try:
scale = max(math.floor(math.log(n, 1024)), 0)
except ValueError:
scale = 0
try:
unit = BYTE_UNIT_SCALE_MAP[scale]
factor = 1024**scale
except IndexError:
unit = "TiB"
factor = 1024**4
if factor > 1:
return "{:.1f}{}".format(n / factor, unit)
return "{}{}".format(n, unit)
def add_vary_language_header(resp: quart.Response) -> quart.Response:
if getattr(g, "language_header_accessed", False):
resp.vary.add("Accept-Language")
return resp
def init_templating(app: quart.Quart) -> None: def init_templating(app: quart.Quart) -> None:
app.template_filter("repr")(repr) app.template_filter("repr")(repr)
app.template_filter("format_datetime")(flask_babel.format_datetime) app.template_filter("format_datetime")(flask_babel.format_datetime)
app.template_filter("format_date")(flask_babel.format_date) app.template_filter("format_date")(flask_babel.format_date)
app.template_filter("format_time")(flask_babel.format_time) app.template_filter("format_time")(flask_babel.format_time)
app.template_filter("format_timedelta")(flask_babel.format_timedelta) app.template_filter("format_timedelta")(flask_babel.format_timedelta)
app.template_filter("format_percent")(flask_babel.format_percent)
app.template_filter("format_bytes")(format_bytes)
app.template_filter("flatten")(flatten) app.template_filter("flatten")(flatten)
app.template_filter("circle_name")(circle_name) app.template_filter("circle_name")(circle_name)
app.after_request(add_vary_language_header)
def generate_error_id() -> str: def generate_error_id() -> str:

View File

@@ -10,13 +10,16 @@ from quart import (
current_app, current_app,
render_template, render_template,
redirect, redirect,
request,
url_for, url_for,
session as http_session, session as http_session,
) )
import werkzeug
import wtforms import wtforms
from flask_babel import lazy_gettext as _l from flask_babel import lazy_gettext as _l, gettext
from .infra import client, selected_locale, BaseForm from .infra import client, selected_locale, BaseForm
@@ -26,6 +29,11 @@ bp = Blueprint("invite", __name__)
INVITE_SESSION_JID = "invite-session-jid" INVITE_SESSION_JID = "invite-session-jid"
MAX_IMPORT_DATA_SIZE = 5*1024*1024 # 5MB
SUPPORTED_IMPORT_TYPES = ["application/xml", "text/xml"]
EIMPORTTOOBIG = _l("The account data you tried to import is too large to"
" upload. Please contact your Snikket operator.")
# https://play.google.com/store/apps/details?id=org.snikket.android&referrer={uri|urlescape}&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1 # https://play.google.com/store/apps/details?id=org.snikket.android&referrer={uri|urlescape}&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1
@@ -40,18 +48,18 @@ def apple_store_badge() -> str:
@bp.context_processor @bp.context_processor
def context() -> typing.Mapping[str, typing.Any]: def context() -> typing.Dict[str, typing.Any]:
return { return {
"apple_store_badge": apple_store_badge, "apple_store_badge": apple_store_badge,
} }
@bp.route("/<id_>") # type:ignore @bp.route("/<id_>")
async def view_old(id_: str) -> quart.Response: async def view_old(id_: str) -> werkzeug.Response:
return redirect(url_for(".view", id_=id_)) return redirect(url_for(".view", id_=id_))
@bp.route("/<id_>/") # type:ignore @bp.route("/<id_>/")
async def view(id_: str) -> typing.Union[quart.Response, async def view(id_: str) -> typing.Union[quart.Response,
typing.Tuple[str, int], typing.Tuple[str, int],
str]: str]:
@@ -96,7 +104,7 @@ async def view(id_: str) -> typing.Union[quart.Response,
return quart.Response( return quart.Response(
body, body,
headers={ headers={
"Link": "<{}> rel=\"alternate\"".format(invite.xmpp_uri), "Link": "<{}>; rel=\"alternate\"".format(invite.xmpp_uri),
} }
) )
@@ -124,8 +132,8 @@ class RegisterForm(BaseForm):
) )
@bp.route("/<id_>/register", methods=["GET", "POST"]) # type:ignore @bp.route("/<id_>/register", methods=["GET", "POST"])
async def register(id_: str) -> typing.Union[str, quart.Response]: async def register(id_: str) -> typing.Union[str, werkzeug.Response]:
try: try:
invite = await client.get_public_invite_by_id(id_) invite = await client.get_public_invite_by_id(id_)
except aiohttp.ClientResponseError as exc: except aiohttp.ClientResponseError as exc:
@@ -163,6 +171,7 @@ async def register(id_: str) -> typing.Union[str, quart.Response]:
raise raise
else: else:
http_session[INVITE_SESSION_JID] = jid http_session[INVITE_SESSION_JID] = jid
await client.login(jid, form.password.data)
return redirect(url_for(".success")) return redirect(url_for(".success"))
return await render_template( return await render_template(
@@ -191,8 +200,8 @@ class ResetForm(BaseForm):
) )
@bp.route("/<id_>/reset", methods=["GET", "POST"]) # type:ignore @bp.route("/<id_>/reset", methods=["GET", "POST"])
async def reset(id_: str) -> typing.Union[str, quart.Response]: async def reset(id_: str) -> typing.Union[str, werkzeug.Response]:
try: try:
invite = await client.get_public_invite_by_id(id_) invite = await client.get_public_invite_by_id(id_)
except aiohttp.ClientResponseError as exc: except aiohttp.ClientResponseError as exc:
@@ -232,15 +241,59 @@ async def reset(id_: str) -> typing.Union[str, quart.Response]:
) )
@bp.route("/success", methods=["GET", "POST"]) # type:ignore class DataImportForm(BaseForm):
async def success() -> str: account_data_file = wtforms.FileField(
return await render_template( _l("Account data file")
"invite_success.html", )
jid=http_session.get(INVITE_SESSION_JID, ""),
action_import = wtforms.SubmitField(
_l("Import data")
) )
@bp.route("/success/reset", methods=["GET", "POST"]) # type:ignore @bp.route("/success", methods=["GET", "POST"])
@client.require_session()
async def success() -> str:
form = DataImportForm()
if form.validate_on_submit():
ok = True
file_info = (await request.files).get(form.account_data_file.name)
if file_info is not None:
mimetype = file_info.mimetype
data = file_info.stream.read()
if len(data) > MAX_IMPORT_DATA_SIZE:
form.account_data_file.errors.append(EIMPORTTOOBIG)
ok = False
elif mimetype not in SUPPORTED_IMPORT_TYPES:
form.account_data_file.errors.append(
# not breaking the line here to avoid extract
# translations failing (defensive)
gettext("The account data you tried to import is in an unknown format. Please upload an XML file in XEP-0227 format (provided format: %(mimetype)s).", mimetype=mimetype), # noqa:E501
)
ok = False
elif len(data) > 0:
await client.import_account_data(data)
if ok:
# Re-render success page, this time with no import option
return await render_template(
"invite_success.html",
jid=http_session.get(INVITE_SESSION_JID, ""),
migration_success=True,
)
return await render_template(
"invite_success.html",
jid=http_session.get(INVITE_SESSION_JID, ""),
migration_success=False,
form=form,
max_import_size=MAX_IMPORT_DATA_SIZE,
import_too_big_warning_header=_l("Error"),
import_too_big_warning=EIMPORTTOOBIG,
)
@bp.route("/success/reset", methods=["GET", "POST"])
async def reset_success() -> str: async def reset_success() -> str:
return await render_template( return await render_template(
"invite_reset_success.html", "invite_reset_success.html",
@@ -248,6 +301,6 @@ async def reset_success() -> str:
) )
@bp.route("/-") # type:ignore @bp.route("/-")
async def index() -> quart.Response: async def index() -> werkzeug.Response:
return redirect(url_for("index")) return redirect(url_for("index"))

View File

@@ -17,6 +17,7 @@ from quart import (
Response, Response,
flash, flash,
) )
import werkzeug.exceptions import werkzeug.exceptions
import babel import babel
@@ -33,7 +34,7 @@ bp = quart.Blueprint("main", __name__)
class LoginForm(BaseForm): class LoginForm(BaseForm):
address = wtforms.TextField( address = wtforms.StringField(
_l("Address"), _l("Address"),
validators=[wtforms.validators.InputRequired()], validators=[wtforms.validators.InputRequired()],
) )
@@ -48,16 +49,16 @@ class LoginForm(BaseForm):
) )
@bp.route("/-") # type:ignore @bp.route("/-")
async def index() -> quart.Response: async def index() -> werkzeug.Response:
return redirect(url_for("index")) return redirect(url_for("index"))
ERR_CREDENTIALS_INVALID = _l("Invalid username or password.") ERR_CREDENTIALS_INVALID = _l("Invalid username or password.")
@bp.route("/login", methods=["GET", "POST"]) # type:ignore @bp.route("/login", methods=["GET", "POST"])
async def login() -> typing.Union[str, quart.Response]: async def login() -> typing.Union[str, werkzeug.Response]:
if client.has_session and (await client.test_session()): if client.has_session and (await client.test_session()):
return redirect(url_for('user.index')) return redirect(url_for('user.index'))
@@ -89,14 +90,19 @@ async def login() -> typing.Union[str, quart.Response]:
return await render_template("login.html", form=form) return await render_template("login.html", form=form)
@bp.route("/meta/about.html") # type:ignore @bp.route("/meta/about.html")
async def about() -> str: async def about() -> str:
version = None version = None
core_versions = {}
extra_versions = {} extra_versions = {}
if current_app.debug or client.is_admin_session: if current_app.debug or client.is_admin_session:
version = _version.version version = _version.version
extra_versions["Quart"] = quart.__version__ try:
core_versions["Prosody"] = await client.get_server_version()
except werkzeug.exceptions.Unauthorized:
core_versions["Prosody"] = "unknown"
if current_app.debug:
extra_versions["aiohttp"] = aiohttp.__version__ extra_versions["aiohttp"] = aiohttp.__version__
extra_versions["babel"] = babel.__version__ extra_versions["babel"] = babel.__version__
extra_versions["wtforms"] = wtforms.__version__ extra_versions["wtforms"] = wtforms.__version__
@@ -110,10 +116,11 @@ async def about() -> str:
"about.html", "about.html",
version=version, version=version,
extra_versions=extra_versions, extra_versions=extra_versions,
core_versions=core_versions,
) )
@bp.route("/meta/demo.html") # type:ignore @bp.route("/meta/demo.html")
async def demo() -> str: async def demo() -> str:
return await render_template("demo.html") return await render_template("demo.html")
@@ -122,7 +129,7 @@ def repad(s: str) -> str:
return s + "=" * (4 - len(s) % 4) return s + "=" * (4 - len(s) % 4)
@bp.route("/avatar/<from_>/<code>") # type:ignore @bp.route("/avatar/<from_>/<code>")
async def avatar(from_: str, code: str) -> quart.Response: async def avatar(from_: str, code: str) -> quart.Response:
etag: typing.Optional[str] etag: typing.Optional[str]
try: try:
@@ -166,6 +173,6 @@ async def avatar(from_: str, code: str) -> quart.Response:
return response return response
@bp.route("/_health") # type:ignore @bp.route("/_health")
async def health() -> Response: async def health() -> Response:
return Response("STATUS OK", content_type="text/plain") return Response("STATUS OK", content_type="text/plain")

View File

@@ -19,9 +19,10 @@ from quart import (
current_app, _app_ctx_stack, session as http_session, abort, redirect, current_app, _app_ctx_stack, session as http_session, abort, redirect,
url_for, url_for,
) )
import werkzeug.exceptions
import quart import quart
import werkzeug.exceptions
from . import xmpputil from . import xmpputil
from .xmpputil import split_jid from .xmpputil import split_jid
@@ -272,9 +273,8 @@ class ProsodyClient:
def init_app(self, app: quart.Quart) -> None: def init_app(self, app: quart.Quart) -> None:
app.config[self.CONFIG_ENDPOINT] app.config[self.CONFIG_ENDPOINT]
# the type annotation in quart seems to be wrong here app.teardown_appcontext(self._plain_session.teardown)
app.teardown_appcontext(self._plain_session.teardown) # type:ignore app.teardown_appcontext(self._auth_session.teardown)
app.teardown_appcontext(self._auth_session.teardown) # type:ignore
@property @property
def _endpoint_base(self) -> str: def _endpoint_base(self) -> str:
@@ -298,6 +298,9 @@ class ProsodyClient:
def _public_v1_endpoint(self, subpath: str) -> str: def _public_v1_endpoint(self, subpath: str) -> str:
return "{}/register_api{}".format(self._endpoint_base, subpath) return "{}/register_api{}".format(self._endpoint_base, subpath)
def _xep227_endpoint(self, subpath: str) -> str:
return "{}/xep227{}".format(self._endpoint_base, subpath)
async def _oauth2_bearer_token(self, async def _oauth2_bearer_token(self,
session: aiohttp.ClientSession, session: aiohttp.ClientSession,
jid: str, jid: str,
@@ -385,16 +388,16 @@ class ProsodyClient:
) -> typing.Callable[ ) -> typing.Callable[
[typing.Callable[..., typing.Awaitable[T]]], [typing.Callable[..., typing.Awaitable[T]]],
typing.Callable[..., typing.Awaitable[ typing.Callable[..., typing.Awaitable[
typing.Union[T, quart.Response]]]]: typing.Union[T, quart.Response, werkzeug.Response]]]]:
def decorator( def decorator(
f: typing.Callable[..., typing.Awaitable[T]], f: typing.Callable[..., typing.Awaitable[T]],
) -> typing.Callable[..., typing.Awaitable[ ) -> typing.Callable[..., typing.Awaitable[
typing.Union[T, quart.Response]]]: typing.Union[T, quart.Response, werkzeug.Response]]]:
@functools.wraps(f) @functools.wraps(f)
async def wrapped( async def wrapped(
*args: typing.Any, *args: typing.Any,
**kwargs: typing.Any, **kwargs: typing.Any,
) -> typing.Union[T, quart.Response]: ) -> typing.Union[T, quart.Response, werkzeug.Response]:
if not self.has_session or not (await self.test_session()): if not self.has_session or not (await self.test_session()):
redirect_to_value = redirect_to redirect_to_value = redirect_to
if redirect_to_value is not False: if redirect_to_value is not False:
@@ -414,17 +417,17 @@ class ProsodyClient:
) -> typing.Callable[ ) -> typing.Callable[
[typing.Callable[..., typing.Awaitable[T]]], [typing.Callable[..., typing.Awaitable[T]]],
typing.Callable[..., typing.Awaitable[ typing.Callable[..., typing.Awaitable[
typing.Union[T, quart.Response]]]]: typing.Union[T, quart.Response, werkzeug.Response]]]]:
def decorator( def decorator(
f: typing.Callable[..., typing.Awaitable[T]], f: typing.Callable[..., typing.Awaitable[T]],
) -> typing.Callable[..., typing.Awaitable[ ) -> typing.Callable[..., typing.Awaitable[
typing.Union[T, quart.Response]]]: typing.Union[T, quart.Response, werkzeug.Response]]]:
@functools.wraps(f) @functools.wraps(f)
@self.require_session(redirect_to=redirect_to) @self.require_session(redirect_to=redirect_to)
async def wrapped( async def wrapped(
*args: typing.Any, *args: typing.Any,
**kwargs: typing.Any, **kwargs: typing.Any,
) -> typing.Union[T, quart.Response]: ) -> typing.Union[T, quart.Response, werkzeug.Response]:
if not self.is_admin_session: if not self.is_admin_session:
raise abort(403, "This is not for you.") raise abort(403, "This is not for you.")
@@ -1123,6 +1126,34 @@ class ProsodyClient:
) as resp: ) as resp:
self._raise_error_from_response(resp) self._raise_error_from_response(resp)
@autosession
async def export_account_data(
self,
*,
session: aiohttp.ClientSession,
) -> typing.Optional[str]:
async with session.get(
self._xep227_endpoint("/export?stores=roster,vcard,pep,pep_data"), # noqa:E501
) as resp:
self._raise_error_from_response(resp)
if resp.status == 204:
return None
return await resp.text()
@autosession
async def import_account_data(
self,
user_xml: str,
*,
session: aiohttp.ClientSession,
) -> bool:
async with session.put(
self._xep227_endpoint("/import?stores=roster,vcard,pep,pep_data"), # noqa:E501
data=user_xml,
) as resp:
self._raise_error_from_response(resp)
return True
@autosession @autosession
async def revoke_token( async def revoke_token(
self, self,
@@ -1177,3 +1208,41 @@ class ProsodyClient:
json=payload) as resp: json=payload) as resp:
resp.raise_for_status() resp.raise_for_status()
return (await resp.json())["jid"] return (await resp.json())["jid"]
@autosession
async def get_system_metrics(
self,
*,
session: aiohttp.ClientSession) -> typing.Mapping:
async with session.get(
self._admin_v1_endpoint("/server/metrics"),
) as resp:
if resp.status == 404:
return {}
self._raise_error_from_response(resp)
resp.raise_for_status()
return await resp.json()
@autosession
async def post_announcement(
self,
body: str,
recipients: str,
*,
session: aiohttp.ClientSession) -> None:
recipients_payload: typing.Union[str, typing.Sequence[str]]
if recipients == "self":
recipients_payload = [self.session_address]
else:
recipients_payload = recipients
payload = {
"recipients": recipients_payload,
"body": body,
}
async with session.post(
self._admin_v1_endpoint("/server/announcement"),
json=payload) as resp:
self._raise_error_from_response(resp)
resp.raise_for_status()

View File

@@ -80,60 +80,6 @@ img.fdroid {
height: $w-l3; height: $w-l3;
} }
.tabbox {
display: flex;
flex-direction: column;
margin: $w-l1 0;
> nav.tabs {
display: flex;
flex-direction: row;
> a {
display: inline-block;
padding: $w-s2;
border-top-left-radius: $w-s4;
border-top-right-radius: $w-s4;
&, &:visited {
color: inherit;
text-decoration: underline;
text-decoration-color: $accent-500;
}
&:hover {
background: $accent-900;
border-color: $accent-800;
color: black;
}
&.active {
text-decoration: none;
background: linear-gradient(0deg, $accent-600, $accent-700);
color: $accent-200;
&:hover, &:focus {
background: linear-gradient(0deg, $accent-700, $accent-800);
}
&:active {
background: $accent-600;
}
}
}
}
> .tab-pane {
display: none;
padding: 0 $w-0;
background: $accent-900;
&.active {
display: block;
}
}
}
.qr { .qr {
margin: $w-l1 0; margin: $w-l1 0;
display: flex; display: flex;

View File

@@ -42,6 +42,11 @@ licensed under the terms of the Apache 2.0 License -->
<g fill="none"><path d="M0 0h24v24H0V0z" /><path d="M0 0h24v24H0V0z" opacity=".87" /></g> <g fill="none"><path d="M0 0h24v24H0V0z" /><path d="M0 0h24v24H0V0z" opacity=".87" /></g>
<path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM9 8V6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9z" /> <path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM9 8V6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9z" />
</symbol> </symbol>
<!-- from: communication/import_export/materialiconsround/24px.svg -->
<symbol id="icon-import_export" viewBox="0 0 24 24">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M8.65 3.35L5.86 6.14c-.32.31-.1.85.35.85H8V13c0 .55.45 1 1 1s1-.45 1-1V6.99h1.79c.45 0 .67-.54.35-.85L9.35 3.35c-.19-.19-.51-.19-.7 0zM16 17.01V11c0-.55-.45-1-1-1s-1 .45-1 1v6.01h-1.79c-.45 0-.67.54-.35.85l2.79 2.78c.2.19.51.19.71 0l2.79-2.78c.32-.31.09-.85-.35-.85H16z" />
</symbol>
<!-- from: communication/qr_code/materialiconsround/24px.svg --> <!-- from: communication/qr_code/materialiconsround/24px.svg -->
<symbol id="icon-qrcode" viewBox="0 0 24 24"> <symbol id="icon-qrcode" viewBox="0 0 24 24">
<g><rect fill="none" height="24" width="24" /><rect fill="none" height="24" width="24" /></g> <g><rect fill="none" height="24" width="24" /><rect fill="none" height="24" width="24" /></g>
@@ -52,6 +57,12 @@ licensed under the terms of the Apache 2.0 License -->
<path d="M0 0h24v24H0V0z" fill="none" /> <path d="M0 0h24v24H0V0z" fill="none" />
<path d="M12.65 10C11.7 7.31 8.9 5.5 5.77 6.12c-2.29.46-4.15 2.29-4.63 4.58C.32 14.57 3.26 18 7 18c2.61 0 4.83-1.67 5.65-4H17v2c0 1.1.9 2 2 2s2-.9 2-2v-2c1.1 0 2-.9 2-2s-.9-2-2-2h-8.35zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z" /> <path d="M12.65 10C11.7 7.31 8.9 5.5 5.77 6.12c-2.29.46-4.15 2.29-4.63 4.58C.32 14.57 3.26 18 7 18c2.61 0 4.83-1.67 5.65-4H17v2c0 1.1.9 2 2 2s2-.9 2-2v-2c1.1 0 2-.9 2-2s-.9-2-2-2h-8.35zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z" />
</symbol> </symbol>
<!-- from: communication/rss_feed/materialiconsround/24px.svg -->
<symbol id="icon-broadcast" viewBox="0 0 24 24">
<path d="M0 0h24v24H0V0z" fill="none" />
<circle cx="6.18" cy="17.82" r="2.18" />
<path d="M5.59 10.23c-.84-.14-1.59.55-1.59 1.4 0 .71.53 1.28 1.23 1.4 2.92.51 5.22 2.82 5.74 5.74.12.7.69 1.23 1.4 1.23.85 0 1.54-.75 1.41-1.59-.68-4.2-3.99-7.51-8.19-8.18zm-.03-5.71C4.73 4.43 4 5.1 4 5.93c0 .73.55 1.33 1.27 1.4 6.01.6 10.79 5.38 11.39 11.39.07.73.67 1.28 1.4 1.28.84 0 1.5-.73 1.42-1.56-.73-7.34-6.57-13.19-13.92-13.92z" />
</symbol>
<!-- from: content/add_circle_outline/materialiconsround/24px.svg --> <!-- from: content/add_circle_outline/materialiconsround/24px.svg -->
<symbol id="icon-add" viewBox="0 0 24 24"> <symbol id="icon-add" viewBox="0 0 24 24">
<path d="M0 0h24v24H0V0z" fill="none" /> <path d="M0 0h24v24H0V0z" fill="none" />
@@ -77,6 +88,26 @@ licensed under the terms of the Apache 2.0 License -->
<path d="M0 0h24v24H0V0z" fill="none" /> <path d="M0 0h24v24H0V0z" fill="none" />
<path d="M21.94 11.23C21.57 8.76 19.32 7 16.82 7h-2.87c-.52 0-.95.43-.95.95s.43.95.95.95h2.9c1.6 0 3.04 1.14 3.22 2.73.17 1.43-.64 2.69-1.85 3.22l1.4 1.4c1.63-1.02 2.64-2.91 2.32-5.02zM4.12 3.56c-.39-.39-1.02-.39-1.41 0s-.39 1.02 0 1.41l2.4 2.4c-1.94.8-3.27 2.77-3.09 5.04C2.23 15.05 4.59 17 7.23 17h2.82c.52 0 .95-.43.95-.95s-.43-.95-.95-.95H7.16c-1.63 0-3.1-1.19-3.25-2.82-.15-1.72 1.11-3.17 2.75-3.35l2.1 2.1c-.43.09-.76.46-.76.92v.1c0 .52.43.95.95.95h1.78L13 15.27V17h1.73l3.3 3.3c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L4.12 3.56zM16 11.95c0-.52-.43-.95-.95-.95h-.66l1.49 1.49c.07-.13.12-.28.12-.44v-.1z" /> <path d="M21.94 11.23C21.57 8.76 19.32 7 16.82 7h-2.87c-.52 0-.95.43-.95.95s.43.95.95.95h2.9c1.6 0 3.04 1.14 3.22 2.73.17 1.43-.64 2.69-1.85 3.22l1.4 1.4c1.63-1.02 2.64-2.91 2.32-5.02zM4.12 3.56c-.39-.39-1.02-.39-1.41 0s-.39 1.02 0 1.41l2.4 2.4c-1.94.8-3.27 2.77-3.09 5.04C2.23 15.05 4.59 17 7.23 17h2.82c.52 0 .95-.43.95-.95s-.43-.95-.95-.95H7.16c-1.63 0-3.1-1.19-3.25-2.82-.15-1.72 1.11-3.17 2.75-3.35l2.1 2.1c-.43.09-.76.46-.76.92v.1c0 .52.43.95.95.95h1.78L13 15.27V17h1.73l3.3 3.3c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L4.12 3.56zM16 11.95c0-.52-.43-.95-.95-.95h-.66l1.49 1.49c.07-.13.12-.28.12-.44v-.1z" />
</symbol> </symbol>
<!-- from: content/send/materialiconsround/24px.svg -->
<symbol id="icon-send" viewBox="0 0 24 24">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M3.4 20.4l17.45-7.48c.81-.35.81-1.49 0-1.84L3.4 3.6c-.66-.29-1.39.2-1.39.91L2 9.12c0 .5.37.93.87.99L17 12 2.87 13.88c-.5.07-.87.5-.87 1l.01 4.61c0 .71.73 1.2 1.39.91z" />
</symbol>
<!-- from: file/file_download/materialicons/24px.svg -->
<symbol id="icon-download" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none" />
<path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z" />
</symbol>
<!-- from: file/file_upload/materialicons/24px.svg -->
<symbol id="icon-upload" viewBox="0 0 24 24">
<path d="M0 0h24v24H0z" fill="none" />
<path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z" />
</symbol>
<!-- from: file/folder/materialiconsround/24px.svg -->
<symbol id="icon-folder" viewBox="0 0 24 24">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M10.59 4.59C10.21 4.21 9.7 4 9.17 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-1.41-1.41z" />
</symbol>
<!-- from: navigation/arrow_back/materialiconsround/24px.svg --> <!-- from: navigation/arrow_back/materialiconsround/24px.svg -->
<symbol id="icon-back" viewBox="0 0 24 24"> <symbol id="icon-back" viewBox="0 0 24 24">
<path d="M0 0h24v24H0V0z" fill="none" /> <path d="M0 0h24v24H0V0z" fill="none" />
@@ -142,4 +173,9 @@ licensed under the terms of the Apache 2.0 License -->
<path d="M0 0h24v24H0V0z" fill="none" /> <path d="M0 0h24v24H0V0z" fill="none" />
<path d="M17 7h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c1.65 0 3 1.35 3 3s-1.35 3-3 3h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c2.76 0 5-2.24 5-5s-2.24-5-5-5zm-9 5c0 .55.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1H9c-.55 0-1 .45-1 1zm2 3H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h3c.55 0 1-.45 1-1s-.45-1-1-1H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h3c.55 0 1-.45 1-1s-.45-1-1-1z" /> <path d="M17 7h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c1.65 0 3 1.35 3 3s-1.35 3-3 3h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c2.76 0 5-2.24 5-5s-2.24-5-5-5zm-9 5c0 .55.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1H9c-.55 0-1 .45-1 1zm2 3H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h3c.55 0 1-.45 1-1s-.45-1-1-1H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h3c.55 0 1-.45 1-1s-.45-1-1-1z" />
</symbol> </symbol>
<!-- from: content/insights/materialiconsround/24px.svg -->
<symbol id="icon-insights" viewBox="0 0 24 24">
<g><rect fill="none" height="24" width="24" /><rect fill="none" height="24" width="24" /></g>
<g><g><path d="M21,8c-1.45,0-2.26,1.44-1.93,2.51l-3.55,3.56c-0.3-0.09-0.74-0.09-1.04,0l-2.55-2.55C12.27,10.45,11.46,9,10,9 c-1.45,0-2.27,1.44-1.93,2.52l-4.56,4.55C2.44,15.74,1,16.55,1,18c0,1.1,0.9,2,2,2c1.45,0,2.26-1.44,1.93-2.51l4.55-4.56 c0.3,0.09,0.74,0.09,1.04,0l2.55,2.55C12.73,16.55,13.54,18,15,18c1.45,0,2.27-1.44,1.93-2.52l3.56-3.55 C21.56,12.26,23,11.45,23,10C23,8.9,22.1,8,21,8z" /><polygon points="15,9 15.94,6.93 18,6 15.94,5.07 15,3 14.08,5.07 12,6 14.08,6.93" /><polygon points="3.5,11 4,9 6,8.5 4,8 3.5,6 3,8 1,8.5 3,9" /></g></g>
</symbol>
</defs></svg> </defs></svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -17,9 +17,12 @@
<h3>{% trans %}Trademarks{% endtrans %}</h3> <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 %} <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> <h3>{% trans %}Software Versions{% endtrans %}</h3>
<pre>Snikket Server <pre>Domain: {{ config["SNIKKET_DOMAIN"] }}
Domain: {{ config["SNIKKET_DOMAIN"] }} Web Portal{% if version %} ({{ version }}){% endif %}
Snikket Web Portal{% if version %} ({{ version }}){% endif %} {%- if core_versions -%}
{% for name, version in core_versions.items() %}
{{ name }} ({{ version }}){% endfor %}
{%- endif -%}
{%- if extra_versions -%} {%- if extra_versions -%}
{% for name, version in extra_versions.items() %} {% for name, version in extra_versions.items() %}
{{ name }} ({{ version }}){% endfor %} {{ name }} ({{ version }}){% endfor %}

View File

@@ -1,5 +1,5 @@
{% extends "admin_app.html" %} {% extends "admin_app.html" %}
{% from "library.j2" import form_button, standard_button, value_or_hint, custom_form_button, clipboard_button %} {% from "library.j2" import form_button, standard_button, value_or_hint, custom_form_button, clipboard_button, icon %}
{% block head_lead %} {% block head_lead %}
{{ super() }} {{ super() }}
{% include "copy-snippet.html" %} {% include "copy-snippet.html" %}
@@ -56,14 +56,21 @@
{%- if circle_members -%} {%- if circle_members -%}
<div class="el-2 elevated"><table> <div class="el-2 elevated"><table>
<thead> <thead>
<th>Login name</th> <th>{% trans %}Login name{% endtrans %}</th>
<th class="collapsible">Display name</th> <th class="collapsible">{% trans %}Display name{% endtrans %}</th>
<th>Actions</th> <th>{% trans %}Actions{% endtrans %}</th>
</thead> </thead>
<tbody> <tbody>
{%- for member in circle_members -%} {%- for localpart, member in circle_members -%}
<tr> <tr>
<td>{{ member.localpart }}</td> <td>
{%- if member -%}
{{ localpart }}
{%- else -%}
{{ localpart }}
<span class="with-tooltip above" data-tooltip="{% trans %}The user has been deleted from the server.{% endtrans %}"><em> ({% trans %}deleted{% endtrans %})</em></span>
{%- endif -%}
</td>
<td class="collapsible">{% call value_or_hint(member.display_name) %}{% endcall %}</td> <td class="collapsible">{% call value_or_hint(member.display_name) %}{% endcall %}</td>
<td class="nowrap"> <td class="nowrap">
{%- call custom_form_button("remove_user", form.action_remove_user.name, member.localpart, class="primary danger", slim=True) -%} {%- call custom_form_button("remove_user", form.action_remove_user.name, member.localpart, class="primary danger", slim=True) -%}

View File

@@ -31,6 +31,18 @@
<div>{% call standard_button("link", url_for(".invitations"), class="primary") %}{% trans %}Manage invitations{% endtrans %}{% endcall %}</div> <div>{% call standard_button("link", url_for(".invitations"), class="primary") %}{% trans %}Manage invitations{% endtrans %}{% endcall %}</div>
{#- -#} {#- -#}
</li> </li>
<li>
<h2>{% trans %}System health{% endtrans %}</h2>
{#- -#}
{%- if show_metrics -%}
<p>{% trans %}View the server status or send a broadcast message to all users.{% endtrans %}</p>
{%- else -%}
<p>{% trans %}Send a broadcast message to all users.{% endtrans %}</p>
{%- endif -%}
{#- -#}
<div>{% call standard_button("insights", url_for(".system"), class="primary") %}{% trans %}Manage system{% endtrans %}{% endcall %}</div>
{#- -#}
</li>
<li> <li>
{#- -#} {#- -#}
<p>{% trans %}Go back to your user's web portal page.{% endtrans %}</p> <p>{% trans %}Go back to your user's web portal page.{% endtrans %}</p>

View File

@@ -0,0 +1,105 @@
{% extends "admin_app.html" %}
{% from "library.j2" import form_button %}
{% block content %}
<h1>{% trans %}Manage system{% endtrans %}</h1>
{% if show_metrics %}
<h2>{% trans %}Overall system status{% endtrans %}</h2>
<div class="elevated el-2">
<dl>
<dt>{% trans %}System load (5 minute average){% endtrans %}</dt>
<dd>
{%- if metrics.load5 -%}
{{ metrics.load5 }}
{%- else -%}
<em>{% trans %}unknown{% endtrans %}</em>
{%- endif -%}
</dd>
<dt>{% trans %}Memory use{% endtrans %}</dt>
<dd>
{%- if metrics.mem_total and metrics.mem_available -%}
{% trans percentage_global=((1 - (metrics.mem_available / metrics.mem_total)) | format_percent), percentage_snikket=((((metrics.prosody_rss | default(0)) + (metrics.portal_rss | default(0))) / metrics.mem_total) | format_percent), mem_available=(metrics.mem_total | format_bytes) %}{{ percentage_global }} of {{ mem_available }}. Of that, Snikket uses {{ percentage_snikket }}.{% endtrans %}
{%- else -%}
<em>{% trans %}unknown{% endtrans %}</em>
{%- endif -%}
</dd>
</dl>
</div>
<h2>{% trans %}Web portal status{% endtrans %}</h2>
<div class="elevated el-2">
<dl>
<dt>{% trans %}Version{% endtrans %}</dt>
<dd>{{ version }} <a href="{{ url_for("main.about") }}">{% trans %}View all versions{% endtrans %}</a></dd>
<dt>{% trans %}Average CPU use{% endtrans %}</dt>
<dd>
{%- if metrics.portal_cpu -%}
{{ metrics.portal_cpu | format_percent }}
{%- else -%}
<em>{% trans %}unknown{% endtrans %}</em>
{%- endif -%}
</dd>
<dt>{% trans %}Current memory use{% endtrans %}</dt>
<dd>
{%- if metrics.portal_rss -%}
{{ metrics.portal_rss | format_bytes }}
{%- else -%}
<em>{% trans %}unknown{% endtrans %}</em>
{%- endif -%}
</dd>
</dl>
</div>
<h2>{% trans %}Snikket server status{% endtrans %}</h2>
<div class="elevated el-2">
<dl>
<dt>{% trans %}Version{% endtrans %}</dt>
<dd>{{ prosody_version }} <a href="{{ url_for("main.about") }}">{% trans %}View all versions{% endtrans %}</a></dd>
<dt>{% trans %}Average CPU use{% endtrans %}</dt>
<dd>
{%- if metrics.prosody_cpu -%}
{{ metrics.prosody_cpu | format_percent }}
{%- else -%}
<em>{% trans %}unknown{% endtrans %}</em>
{%- endif -%}
</dd>
<dt>{% trans %}Current memory use{% endtrans %}</dt>
<dd>
{%- if metrics.prosody_rss -%}
{{ metrics.prosody_rss | format_bytes }}
{%- else -%}
<em>{% trans %}unknown{% endtrans %}</em>
{%- endif -%}
</dd>
<dt>{% trans %}Storage used by shared files{% endtrans %}</dt>
<dd>
{%- if metrics.prosody_uploads | default(None) is not none -%}
{{ metrics.prosody_uploads | format_bytes }}
{%- else -%}
<em>{% trans %}unknown{% endtrans %}</em>
{%- endif -%}
</dd>
<dt>{% trans %}Connected devices{% endtrans %}</dt>
<dd>
{%- if metrics.prosody_devices | default(None) is not none -%}
{{ metrics.prosody_devices }}
{%- else -%}
<em>{% trans %}unknown{% endtrans %}</em>
{%- endif -%}
</dd>
</dl>
</div>
{% endif %}
<h2>{% trans %}Broadcast message{% endtrans %}</h2>
<form method="POST">{{ form.csrf_token }}<div class="form layout-expanded">
<p class="form-desc">{% trans %}This form allows you to send a message to all users currently online on your Snikket server. Use it wisely.{% endtrans %}</p>
<div class="f-ebox">
{{ form.text.label }}
{{ form.text }}
</div>
<div class="f-ebox">
{{ form.online_only }}{{ form.online_only.label }}
</div>
<div class="f-bbox">
{%- call form_button("send", form.action_send_preview, class="primary") -%}{%- endcall -%}
{%- call form_button("broadcast", form.action_post_all, class="secondary accent") -%}{%- endcall -%}
</div>
</div></form>
{% endblock %}

View File

@@ -28,12 +28,12 @@
</div> </div>
<div class="f-ebox"> <div class="f-ebox">
{{ form.password.label }} {{ form.password.label }}
{{ form.password }} {{ form.password(autocomplete="new-password") }}
<p class="field-desc weak">{% trans %}Enter a secure password that you do not use anywhere else.{% endtrans %}</p> <p class="field-desc weak">{% trans %}Enter a secure password that you do not use anywhere else.{% endtrans %}</p>
</div> </div>
<div class="f-ebox"> <div class="f-ebox">
{{ form.password_confirm.label }} {{ form.password_confirm.label }}
{{ form.password_confirm }} {{ form.password_confirm(autocomplete="new-password") }}
</div> </div>
<div class="f-bbox"> <div class="f-bbox">
{%- call form_button("done", form.action_register, class="primary") -%}{%- endcall -%} {%- call form_button("done", form.action_register, class="primary") -%}{%- endcall -%}

View File

@@ -17,11 +17,11 @@
{%- call render_errors(form) %}{% endcall -%} {%- call render_errors(form) %}{% endcall -%}
<div class="f-ebox"> <div class="f-ebox">
{{ form.password.label }} {{ form.password.label }}
{{ form.password }} {{ form.password(autocomplete="new-password") }}
</div> </div>
<div class="f-ebox"> <div class="f-ebox">
{{ form.password_confirm.label }} {{ form.password_confirm.label }}
{{ form.password_confirm }} {{ form.password_confirm(autocomplete="new-password") }}
</div> </div>
<div class="f-bbox"> <div class="f-bbox">
{%- call form_button("passwd", form.action_reset, class="primary") -%}{%- endcall -%} {%- call form_button("passwd", form.action_reset, class="primary") -%}{%- endcall -%}

View File

@@ -1,6 +1,6 @@
{% extends "invite.html" %} {% extends "invite.html" %}
{% set body_id = "invite" %} {% set body_id = "invite" %}
{% from "library.j2" import form_button, clipboard_button %} {% from "library.j2" import form_button, clipboard_button, render_errors %}
{% block head_lead %} {% block head_lead %}
<title>{% trans site_name=config["SITE_NAME"] %}Successfully registered on {{ site_name }} | Snikket{% endtrans %}</title> <title>{% trans site_name=config["SITE_NAME"] %}Successfully registered on {{ site_name }} | Snikket{% endtrans %}</title>
{%- include "copy-snippet.html" -%} {%- include "copy-snippet.html" -%}
@@ -15,6 +15,47 @@
{% trans %}Copy address{% endtrans %} {% trans %}Copy address{% endtrans %}
{%- endcall -%} {%- endcall -%}
<p>{% trans %}You can now set up your legacy XMPP client with the above address and the password you chose during registration.{% endtrans %}</p> <p>{% trans %}You can now set up your legacy XMPP client with the above address and the password you chose during registration.{% endtrans %}</p>
<p>{% trans %}You can now safely close this page.{% endtrans %}</p> <p>{% trans login_url=url_for('main.login') %}You can now safely close this page, or log in to the web portal to <a href="{{ login_url }}">manage your account</a>.{% endtrans %}</p>
{% if migration_success %}
<h2>{% trans %}Import successful{% endtrans %}</h2>
<p>{% trans %}Congratulations! Your account data has been successfully imported.{% endtrans %}</p>
{% endif %}
{% if form %}
<h2>{% trans %}Moving to Snikket?{% endtrans %}</h2>
<p>{% trans %}If you are moving from a different Snikket instance or another XMPP-compatible service, you may optionally import the data (contacts, profile information, etc.) from your previous account. When you have exported the data from your previous account, upload it using the form below.{% endtrans %}</p>
<div class="form layout-expanded"><form method="POST" enctype="multipart/form-data">
<h3 class="form-title">{% trans %}Upload account data{% endtrans %}</h3>
{{ form.csrf_token }}
{% call render_errors(form) %}{% endcall %}
<div class="f-ebox">
{{ form.account_data_file.label }}
{{ form.account_data_file(accept="application/xml",
data_maxsize=max_import_size,
data_warning_header=import_too_big_warning_header,
data_maxsize_warning=import_too_big_warning) }}
</div>
<div class="f-bbox">
{%- call form_button("upload", form.action_import, class="secondary") %}{% endcall -%}
</div>
<script type="text/javascript">
document.getElementById("{{ form.account_data_file.id }}").onchange = function() {
var maxsize_s = this.dataset.maxsize;
var maxsize = parseInt(maxsize_s);
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>
{% endif %}
</div> </div>
{% endblock %} {% endblock %}

View File

@@ -56,29 +56,7 @@
{%- endcall -%} {%- endcall -%}
</header> </header>
<p>{% trans %}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.{% endtrans %}</p> <p>{% trans %}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.{% endtrans %}</p>
<div class="tabbox"> <div id="qr-invite-page" data-qrdata="{{ url_for(".view", id_=invite_id, _external=True, _scheme="https") }}" class="qr"></div>
{#- -#}
<nav class="tabs" role="tablist">
{#- -#}
<a href="#qr-info-url" class="active" role="tab" aria-controls="qr-info-url" aria-selected="true" onclick="select_tab(this); return false;">{% trans %}Using a QR code scanner{% endtrans %}</a>
{#- -#}
<a href="#qr-info-uri" role="tab" aria-controls="qr-info-uri" aria-selected="false" onclick="select_tab(this); return false;">{% trans %}Using the Snikket app{% endtrans %}</a>
{#- -#}
</nav>
{#- -#}
<div id="qr-info-url" class="tab-pane active">
<p>{% trans %}Use a <em>QR code</em> scanner on your mobile device to scan the code below:{% endtrans %}</p>
<div id="qr-invite-page" data-qrdata="{{ url_for(".view", id_=invite_id, _external=True) }}" class="qr"></div>
</div>
{#- -#}
<div id="qr-info-uri" class="tab-pane">
<img class="float-right" id="tutorial-scan" aria-hidden="true" alt="" src="{{ url_for("static", filename="img/tutorial-scan.png") }}">
<p>{% trans %}Install the Snikket app on your mobile device, open it, and tap the 'Scan' button at the top.{% endtrans %}</p>
<p>{% trans %}Your camera will turn on. Point it at the square code below until it is within the highlighted square on your screen, and wait until the app recognises it.{% endtrans %}</p>
<div id="qr-uri" data-qrdata="{{ invite.xmpp_uri }}" class="qr"></div>
</div>
{#- -#}
</div>
{#- -#} {#- -#}
{%- call standard_button("close", "#", onclick="close_modal(this.parentNode.parentNode); return false;", class="primary") -%} {%- call standard_button("close", "#", onclick="close_modal(this.parentNode.parentNode); return false;", class="primary") -%}
{% trans %}Close{% endtrans %} {% trans %}Close{% endtrans %}
@@ -127,7 +105,7 @@
<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> <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> <ol>
<li><p>{% trans %}First install Snikket from F-Droid using the button below:{% endtrans %}</p> <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> <p><a href="{{ f_droid_url }}"><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> <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> <p>
{%- call standard_button("exit_to_app", invite.xmpp_uri, class="primary") -%} {%- call standard_button("exit_to_app", invite.xmpp_uri, class="primary") -%}

View File

@@ -30,6 +30,7 @@
<div> <div>
<div>{% call standard_button("edit", url_for(".profile"), class="primary") %}{% trans %}Edit profile{% endtrans %}{% endcall %}</div> <div>{% call standard_button("edit", url_for(".profile"), class="primary") %}{% trans %}Edit profile{% endtrans %}{% endcall %}</div>
<div>{% call standard_button("passwd", url_for(".change_pw"), class="secondary") %}{% trans %}Change password{% endtrans %}{% endcall %}</div> <div>{% call standard_button("passwd", url_for(".change_pw"), class="secondary") %}{% trans %}Change password{% endtrans %}{% endcall %}</div>
<div>{% call standard_button("folder", url_for(".manage_data"), class="secondary") %}{% trans %}Manage your data{% endtrans %}{% endcall %}</div>
</div> </div>
{#- -#} {#- -#}
</li> </li>

View File

@@ -0,0 +1,24 @@
{% extends "app.html" %}
{% from "library.j2" import standard_button, form_button, render_errors, avatar with context %}
{% block content %}
<h1>{% trans %}Manage your data{% endtrans %}</h1>
<nav class="welcome">
<ul>
<li>
<h2>{% trans %}Export account{% endtrans %}</h2>
<p>{% trans %}Download your account data as a file for backup purposes or to move your account to another service.{% endtrans %}</p>
{% call render_errors(form) %}{% endcall %}
<div class="f-bbox">
{%- call standard_button("back", url_for('.index'), class="tertiary") %}{% trans %}Back{% endtrans %}{% endcall -%}
<form method="POST">
{{ form.csrf_token }}
{%- call form_button("download", form.action_export, class="primary") %}{% endcall -%}
</form>
</div>
</li>
</ul>
</nav>
{% endblock %}

View File

@@ -9,15 +9,15 @@
{%- endcall -%} {%- endcall -%}
<div class="f-ebox"> <div class="f-ebox">
{{ form.current_password.label(class="required") }} {{ form.current_password.label(class="required") }}
{{ form.current_password(class=("has-error" if form.current_password.name in form.errors else "")) }} {{ form.current_password(class=("has-error" if form.current_password.name in form.errors else ""), autocomplete="current-password") }}
</div> </div>
<div class="f-ebox"> <div class="f-ebox">
{{ form.new_password.label(class="required") }} {{ form.new_password.label(class="required") }}
{{ form.new_password }} {{ form.new_password(autocomplete="new-password") }}
</div> </div>
<div class="f-ebox"> <div class="f-ebox">
{{ form.new_password_confirm.label(class="required") }} {{ form.new_password_confirm.label(class="required") }}
{{ form.new_password_confirm(class=("has-error" if form.new_password_confirm.name in form.errors else "")) }} {{ form.new_password_confirm(class=("has-error" if form.new_password_confirm.name in form.errors else ""), autocomplete="new-password") }}
</div> </div>
<div class="box warning"> <div class="box warning">
<header>{% trans %}Warning{% endtrans %}</header> <header>{% trans %}Warning{% endtrans %}</header>

View File

@@ -7,299 +7,359 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-04-02 19:01+0000\n" "PO-Revision-Date: 2022-05-30 14:01+0000\n"
"Last-Translator: Daniel Holmgaard <annoncer@protonmail.com>\n" "Last-Translator: Daniel Holmgaard <fovatis@tutanota.com>\n"
"Language-Team: Danish <https://i18n.sotecware.net/projects/snikket/" "Language-Team: Danish <http://i18n.sotecware.net/projects/snikket/web-portal/"
"web-portal/da/>\n" "da/>\n"
"Language: da\n" "Language: da\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.5.1\n" "X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr "Begrænset"
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "Login-navn" msgstr "Login-navn"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "Kaldenavn" msgstr "Kaldenavn"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "Adgangsniveau" msgstr "Adgangsniveau"
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr "Begrænset"
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "Normal bruger" msgstr "Normal bruger"
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
msgid "Administrator" msgid "Administrator"
msgstr "Administrator" msgstr "Administrator"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
msgid "Update user" msgid "Update user"
msgstr "Opdater bruger" msgstr "Opdater bruger"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
msgid "Create password reset link" msgid "Create password reset link"
msgstr "Opret link til nulstilling af adgangskode" msgstr "Opret link til nulstilling af adgangskode"
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
msgid "Password reset link created" msgid "Password reset link created"
msgstr "Link til nulstilling af adgangskode oprettet" msgstr "Link til nulstilling af adgangskode oprettet"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
msgid "User information updated." msgid "User information updated."
msgstr "Brugerinformation opdateret." msgstr "Brugerinformation opdateret."
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "Slet bruger permanent" msgstr "Slet bruger permanent"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "Bruger slettet" msgstr "Bruger slettet"
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "Link til nulstilling af adgangskode ikke fundet" msgstr "Link til nulstilling af adgangskode ikke fundet"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "Link til nulstilling af adgangskode slettet" msgstr "Link til nulstilling af adgangskode slettet"
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "Inviter til cirkel" msgstr "Inviter til cirkel"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "Mindst en cirkel skal vælges" msgstr "Mindst en cirkel skal vælges"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "Gyldig for" msgstr "Gyldig for"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "En time" msgstr "En time"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "Tolv timer" msgstr "Tolv timer"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "En dag" msgstr "En dag"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "En uge" msgstr "En uge"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "Fire uger" msgstr "Fire uger"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "Invitationstype" msgstr "Invitationstype"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "Individuel" msgstr "Individuel"
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "Gruppe" msgstr "Gruppe"
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "Ny invitationslink" msgstr "Ny invitationslink"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "Tilbagekald" msgstr "Tilbagekald"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
msgid "Invitation created" msgid "Invitation created"
msgstr "Invitation oprettet" msgstr "Invitation oprettet"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "Denne invitation findes ikke" msgstr "Denne invitation findes ikke"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "Invitation tilbagekaldt" msgstr "Invitation tilbagekaldt"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "Navn" msgstr "Navn"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "Opret cirkel" msgstr "Opret cirkel"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
msgid "Circle created" msgid "Circle created"
msgstr "Cirkel oprettet" msgstr "Cirkel oprettet"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "Vælg bruger" msgstr "Vælg bruger"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "Opdater cirkel" msgstr "Opdater cirkel"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "Slet cirkel permanent" msgstr "Slet cirkel permanent"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "Tilføj bruger" msgstr "Tilføj bruger"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
msgid "No such circle exists" msgid "No such circle exists"
msgstr "Denne cirkel findes ikke" msgstr "Denne cirkel findes ikke"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
msgid "Circle data updated" msgid "Circle data updated"
msgstr "Cirkel-data opdateret" msgstr "Cirkel-data opdateret"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
msgid "Circle deleted" msgid "Circle deleted"
msgstr "Cirkel slettet" msgstr "Cirkel slettet"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
msgid "User added to circle" msgid "User added to circle"
msgstr "Bruger tilføjet til cirkel" msgstr "Bruger tilføjet til cirkel"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
msgid "User removed from circle" msgid "User removed from circle"
msgstr "Bruger fjernet fra cirkel" msgstr "Bruger fjernet fra cirkel"
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr "Meddelelsens indhold"
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr "Send kun til online brugere"
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr "Send til alle brugere"
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr "Send forhåndsvisning til dig selv"
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr "Bekendgørelse sendt!"
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "Hoved" msgstr "Hoved"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
"De kontodata, du forsøgte at importere, er for store til at uploade. Kontakt "
"din Snikket-operatør."
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "Brugernavn" msgstr "Brugernavn"
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "Adgangskode" msgstr "Adgangskode"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "Bekræft adgangskode" msgstr "Bekræft adgangskode"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
msgid "The passwords must match." msgid "The passwords must match."
msgstr "Adgangskoderne skal matche." msgstr "Adgangskoderne skal matche."
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "Opret konto" msgstr "Opret konto"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
msgid "That username is already taken." msgid "That username is already taken."
msgstr "Det brugernavn er allerede taget." msgstr "Det brugernavn er allerede taget."
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "Registrering blev afvist af ukendte årsager." msgstr "Registrering blev afvist af ukendte årsager."
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
msgid "The username is not valid." msgid "The username is not valid."
msgstr "Brugernavnet er ikke gyldigt." msgstr "Brugernavnet er ikke gyldigt."
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "Ændr adgangskode" msgstr "Ændr adgangskode"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr "Kontodatafil"
#: snikket_web/invite.py:250
msgid "Import data"
msgstr "Importer data"
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
"De kontodata, du forsøgte at importere, er i et ukendt format. Upload en XML-"
"fil i XEP-0227-format (forudsat format: %(mimetype)s)."
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr "Fejl"
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "Adresse" msgstr "Adresse"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "Log ind" msgstr "Log ind"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "Ugyldigt brugernavn eller adgangskode." msgstr "Ugyldigt brugernavn eller adgangskode."
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "Login lykkedes!" msgstr "Login lykkedes!"
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "Nuværende adgangskode" msgstr "Nuværende adgangskode"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "Ny adgangskode" msgstr "Ny adgangskode"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "Bekræft ny adgangskode" msgstr "Bekræft ny adgangskode"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "Den nye adgangskode skal matche." msgstr "Den nye adgangskode skal matche."
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "Log ud" msgstr "Log ud"
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "Ingen" msgstr "Ingen"
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "Kun venner" msgstr "Kun venner"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "Alle" msgstr "Alle"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "Avatar" msgstr "Avatar"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "Profilsynlighed" msgstr "Profilsynlighed"
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "Opdater profil" msgstr "Opdater profil"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr "Kontodata"
#: snikket_web/user.py:86
msgid "Upload"
msgstr "Upload"
#: snikket_web/user.py:111
msgid "Incorrect password." msgid "Incorrect password."
msgstr "Forkert adgangskode." msgstr "Forkert adgangskode."
#: snikket_web/user.py:103 #: snikket_web/user.py:115
msgid "Password changed" msgid "Password changed"
msgstr "Adgangskode ændret" msgstr "Adgangskode ændret"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
@@ -307,13 +367,17 @@ msgstr ""
"Den valgte avatar er for stor. For at kunne uploade større avatarer skal du " "Den valgte avatar er for stor. For at kunne uploade større avatarer skal du "
"bruge appen." "bruge appen."
#: snikket_web/user.py:159 #: snikket_web/user.py:170
msgid "Profile updated" msgid "Profile updated"
msgstr "Profil opdateret" msgstr "Profil opdateret"
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr "Fejl" msgstr "Exporter"
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr "Du har i øjeblikket ingen kontodata at eksportere."
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
#, python-format #, python-format
@@ -405,7 +469,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "Software versioner" msgstr "Software versioner"
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "Tilbage til hovedsiden" msgstr "Tilbage til hovedsiden"
@@ -445,6 +509,7 @@ msgid "Members"
msgstr "Medlemmer" msgstr "Medlemmer"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -526,7 +591,7 @@ msgid "Delete user %(user_name)s"
msgstr "Slet bruger %(user_name)s" msgstr "Slet bruger %(user_name)s"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "Slet bruger" msgstr "Slet bruger"
@@ -550,6 +615,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -599,28 +665,37 @@ msgstr "Sletning af en cirkel vil ikke slette brugere i cirklen."
msgid "Circle members" msgid "Circle members"
msgstr "Cirkel medlemmer" msgstr "Cirkel medlemmer"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr "Brugeren er blevet slettet fra serveren."
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "Slettet"
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "Fjern bruger %(username)s fra cirkel" msgstr "Fjern bruger %(username)s fra cirkel"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "Den nuværende cirkel har ingen medlemmer." msgstr "Den nuværende cirkel har ingen medlemmer."
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "Inviter flere medlemmer" msgstr "Inviter flere medlemmer"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "Tilføj eksisterende bruger" msgstr "Tilføj eksisterende bruger"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "Alle brugere tilføjet" msgstr "Alle brugere tilføjet"
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "Alle brugerne af denne tjeneste er allerede i denne cirkel." msgstr "Alle brugerne af denne tjeneste er allerede i denne cirkel."
@@ -704,15 +779,15 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "Rediger bruger %(user_name)s" msgstr "Rediger bruger %(user_name)s"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
msgid "Edit user" msgid "Edit user"
msgstr "Rediger bruger" msgstr "Rediger bruger"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "Login-navnet kan ikke ændres." msgstr "Login-navnet kan ikke ændres."
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
@@ -720,24 +795,24 @@ msgstr ""
"En brugers adgangsniveau bestemmer, hvilke interaktioner der er tilladt for " "En brugers adgangsniveau bestemmer, hvilke interaktioner der er tilladt for "
"dem på din Snikket-tjeneste." "dem på din Snikket-tjeneste."
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
msgid "Return to user list" msgid "Return to user list"
msgstr "Retur til brugerliste" msgstr "Retur til brugerliste"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "Yderligere handlinger" msgstr "Yderligere handlinger"
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
msgid "Reset password" msgid "Reset password"
msgstr "Nustil adgangskode" msgstr "Nustil adgangskode"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to create " "If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once." "a special link which allows to change the password of the account, once."
@@ -746,11 +821,11 @@ msgstr ""
"til at oprette et specielt link, der giver mulighed for at ændre " "til at oprette et specielt link, der giver mulighed for at ændre "
"adgangskoden til kontoen en gang." "adgangskoden til kontoen en gang."
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
msgid "Debug information" msgid "Debug information"
msgstr "Fejlretningsoplysninger" msgstr "Fejlretningsoplysninger"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
@@ -760,7 +835,7 @@ msgstr ""
"tilsluttede enheder nødvendige for at foretage fejlfinding af problemer. " "tilsluttede enheder nødvendige for at foretage fejlfinding af problemer. "
"Knappen nedenfor afslører disse (følsomme) oplysninger." "Knappen nedenfor afslører disse (følsomme) oplysninger."
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
msgid "Show debug information" msgid "Show debug information"
msgstr "Vis fejlretningsoplysninger" msgstr "Vis fejlretningsoplysninger"
@@ -804,11 +879,29 @@ msgstr "Opret, tilbagekald eller kopier invitationer."
msgid "Manage invitations" msgid "Manage invitations"
msgstr "Håndter invitationer" msgstr "Håndter invitationer"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr "Systemets sundhed"
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr ""
"Vis serverstatus, eller send en udsendelsesmeddelelse til alle brugere."
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr "Send en udsendelsesmeddelelse til alle brugere."
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
msgid "Manage system"
msgstr "Håndter system"
#: snikket_web/templates/admin_home.html:48
msgid "Go back to your user's web portal page." msgid "Go back to your user's web portal page."
msgstr "Gå tilbage din brugers webportal side." msgstr "Gå tilbage din brugers webportal side."
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "Afslut administrator panel" msgstr "Afslut administrator panel"
@@ -861,6 +954,86 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "Ødelæg link" msgstr "Ødelæg link"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr "Samlet systemstatus"
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr "Systembelastning (5 minutters gennemsnit)"
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr "ukendt"
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr "Forbrug af hukommelse"
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
"%(percentage_global)s af %(mem_available)s. Der af bruger Snikket "
"%(percentage_snikket)s."
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr "Webportalens status"
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr "Version"
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr "Vis alle versioner"
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr "Gennemsnitlig CPU-forbrug"
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr "Nuværende hukommelsesbrug"
#: snikket_web/templates/admin_system.html:50
msgid "Snikket server status"
msgstr "Snikket server status"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr "Lagerplads, der bruges af delte filer"
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr "Forbundet enheder"
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr "Send besked"
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
"Denne formular giver dig mulighed for at sende en besked til alle brugere, "
"der i øjeblikket er online på din Snikket-server. Brug den med omtanke."
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
msgid "The user is an administrator." msgid "The user is an administrator."
msgstr "Brugeren er administrator." msgstr "Brugeren er administrator."
@@ -969,8 +1142,8 @@ msgstr "App allerede installeret?"
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "Åben appen" msgstr "Åben appen"
@@ -1036,7 +1209,6 @@ msgid "You can now log in using your new password."
msgstr "Du kan nu logge ind med din nye adgangskode." msgstr "Du kan nu logge ind med din nye adgangskode."
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "Du kan sikkert lukke denne side." msgstr "Du kan sikkert lukke denne side."
@@ -1072,7 +1244,6 @@ msgstr ""
"Skan-knappen øverst." "Skan-knappen øverst."
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1128,6 +1299,43 @@ msgstr ""
"Du kan nu konfigurere din ældre XMPP-klient med ovenstående adresse og den " "Du kan nu konfigurere din ældre XMPP-klient med ovenstående adresse og den "
"adgangskode, du valgte under registreringen." "adgangskode, du valgte under registreringen."
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
"Du kan nu trygt lukke denne side eller logge ind på webportalen for at <a "
"href=\"%(login_url)s\">administrere din konto</a>."
#: snikket_web/templates/invite_success.html:21
msgid "Import successful"
msgstr "Importering lykkes"
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr "Tillykke! Dine kontodata er blevet importeret."
#: snikket_web/templates/invite_success.html:26
msgid "Moving to Snikket?"
msgstr "Flytte til Snikket?"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
"Hvis du flytter fra en anden Snikket-platform eller en anden XMPP-kompatibel "
"tjeneste, kan du eventuelt importere dataene (kontakter, profiloplysninger "
"osv.) fra din tidligere konto. Når du har eksporteret dataene fra din "
"tidligere konto, skal du uploade dem ved hjælp af nedenstående formular."
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr "Upload kontodata"
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1173,7 +1381,7 @@ msgid "Get it on Google Play"
msgstr "Få den i Google Play" msgstr "Få den i Google Play"
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "Download i App Store" msgstr "Download i App Store"
@@ -1209,11 +1417,11 @@ msgid "Scan invite code"
msgstr "Skan invitationskode" msgstr "Skan invitationskode"
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "Luk" msgstr "Luk"
@@ -1226,34 +1434,11 @@ msgstr ""
"med dit kamera. Du kan bruge enten en QR-skanner-app eller selve Snikket-" "med dit kamera. Du kan bruge enten en QR-skanner-app eller selve Snikket-"
"appen." "appen."
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr "Bruger en QR kode skanner"
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr "Bruger Snikket appen"
#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
msgstr ""
"Brug en <em>QR code</em> skanner på din mobilenhed for at skanne "
"nedenstående kode:"
#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
"Installer Snikket-appen på din mobilenhed, åbn den, og tryk på knappen "
"'Skan' øverst."
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "Installer på iOS" msgstr "Installer på iOS"
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
@@ -1261,12 +1446,12 @@ msgstr ""
"Efter download af Snikket fra App Store, skal du vende tilbage til dette " "Efter download af Snikket fra App Store, skal du vende tilbage til dette "
"invitationslink og trykke på \"Åbn appen\" for at fortsætte." "invitationslink og trykke på \"Åbn appen\" for at fortsætte."
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "Download først Snikket fra App Store ved hjælp af nedenstående knap:" msgstr "Download først Snikket fra App Store ved hjælp af nedenstående knap:"
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
@@ -1274,12 +1459,12 @@ msgstr ""
"Når installationen er afsluttet, kan du vende tilbage til denne side og " "Når installationen er afsluttet, kan du vende tilbage til denne side og "
"trykke på knappen \"Åbn appen\" for at fortsætte med opsætningen:" "trykke på knappen \"Åbn appen\" for at fortsætte med opsætningen:"
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "Installer via F-droid" msgstr "Installer via F-droid"
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
@@ -1287,7 +1472,7 @@ msgstr ""
"Efter installation af Snikket via F-Droid, skal du vende tilbage til dette " "Efter installation af Snikket via F-Droid, skal du vende tilbage til dette "
"invitationslink og trykke på \"Åbn appen\" for at fortsætte." "invitationslink og trykke på \"Åbn appen\" for at fortsætte."
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "Installer først Snikket fra F-Droid ved hjælp af knappen nedenfor:" msgstr "Installer først Snikket fra F-Droid ved hjælp af knappen nedenfor:"
@@ -1299,10 +1484,6 @@ msgstr "Kopier link"
msgid "Invalid input" msgid "Invalid input"
msgstr "Ugyldig input" msgstr "Ugyldig input"
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "Slettet"
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1359,15 +1540,20 @@ msgstr "Din XMPP adresse"
msgid "Edit profile" msgid "Edit profile"
msgstr "Rediger profil" msgstr "Rediger profil"
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
msgid "Manage your data"
msgstr "Håndter dine data"
#: snikket_web/templates/user_home.html:39
msgid "Your Snikket" msgid "Your Snikket"
msgstr "Din Snikket" msgstr "Din Snikket"
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "Håndter brugere, invitationer og cirkler på din Snikket tjeneste." msgstr "Håndter brugere, invitationer og cirkler på din Snikket tjeneste."
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
msgid "Admin panel" msgid "Admin panel"
msgstr "Administrator panel" msgstr "Administrator panel"
@@ -1383,6 +1569,18 @@ msgstr ""
"Klik herunder for at logge dig selv ud af webportalen. Dette på virkeringen " "Klik herunder for at logge dig selv ud af webportalen. Dette på virkeringen "
"af de forbundne enheder." "af de forbundne enheder."
#: snikket_web/templates/user_manage_data.html:8
msgid "Export account"
msgstr "Eksporter konto"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
"Download dine kontodata som en fil til sikkerhedskopieringsformål eller for "
"at flytte din konto til en anden tjeneste."
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "Ændr din adgangskode" msgstr "Ændr din adgangskode"
@@ -1425,6 +1623,26 @@ msgstr ""
"Denne sektion tillader dig at kontrollere, hvem der kan se din profil " "Denne sektion tillader dig at kontrollere, hvem der kan se din profil "
"informationer, så som avatar og kaldenavn." "informationer, så som avatar og kaldenavn."
#~ msgid "Using a QR code scanner"
#~ msgstr "Bruger en QR kode skanner"
#~ msgid "Using the Snikket app"
#~ msgstr "Bruger Snikket appen"
#~ msgid ""
#~ "Use a <em>QR code</em> scanner on your mobile device to scan the code "
#~ "below:"
#~ msgstr ""
#~ "Brug en <em>QR code</em> skanner på din mobilenhed for at skanne "
#~ "nedenstående kode:"
#~ msgid ""
#~ "Install the Snikket app on your mobile device, open it, and tap the "
#~ "'Scan' button at the top."
#~ msgstr ""
#~ "Installer Snikket-appen på din mobilenhed, åbn den, og tryk på knappen "
#~ "'Skan' øverst."
#~ msgid "Create password reset link for %(user_name)s" #~ msgid "Create password reset link for %(user_name)s"
#~ msgstr "Opret link til nulstilling af adgangskode til %(user_name)s" #~ msgstr "Opret link til nulstilling af adgangskode til %(user_name)s"

View File

@@ -7,299 +7,358 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: SnikketWeb 0.1.0\n" "Project-Id-Version: SnikketWeb 0.1.0\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-05-18 13:28+0000\n" "PO-Revision-Date: 2022-01-18 14:59+0000\n"
"Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n" "Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
"Language-Team: German <https://i18n.sotecware.net/projects/snikket/" "Language-Team: German <http://i18n.sotecware.net/projects/snikket/web-portal/"
"web-portal/de/>\n" "de/>\n"
"Language: de\n" "Language: de\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.5.1\n" "X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr "Eingeschränkt"
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "Anmeldename" msgstr "Anmeldename"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "Anzeigename" msgstr "Anzeigename"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "Berechtigungen" msgstr "Berechtigungen"
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr "Eingeschränkt"
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "Normaler Benutzer" msgstr "Normaler Benutzer"
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
msgid "Administrator" msgid "Administrator"
msgstr "Administrator" msgstr "Administrator"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
msgid "Update user" msgid "Update user"
msgstr "Benutzer ändern" msgstr "Benutzer ändern"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
msgid "Create password reset link" msgid "Create password reset link"
msgstr "Passwort-Link erzeugen" msgstr "Passwort-Link erzeugen"
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
msgid "Password reset link created" msgid "Password reset link created"
msgstr "Link zum Zurücksetzen des Passwortes erzeugt" msgstr "Link zum Zurücksetzen des Passwortes erzeugt"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
msgid "User information updated." msgid "User information updated."
msgstr "Benutzerinformationen gespeichert." msgstr "Benutzerinformationen gespeichert."
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "Benutzer endgültig löschen" msgstr "Benutzer endgültig löschen"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "Benutzer gelöscht" msgstr "Benutzer gelöscht"
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "Link zum Zurücksetzen des Passwortes nicht gefunden" msgstr "Link zum Zurücksetzen des Passwortes nicht gefunden"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "Link gelöscht" msgstr "Link gelöscht"
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "In Gemeinschaft einladen" msgstr "In Gemeinschaft einladen"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "Mindestens eine Gemeinschaft muss ausgewählt sein" msgstr "Mindestens eine Gemeinschaft muss ausgewählt sein"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "Gültig für" msgstr "Gültig für"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "Eine Stunde" msgstr "Eine Stunde"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "Zwölf Stunden" msgstr "Zwölf Stunden"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "Ein Tag" msgstr "Ein Tag"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "Eine Woche" msgstr "Eine Woche"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "Vier Wochen" msgstr "Vier Wochen"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "Art der Einladung" msgstr "Art der Einladung"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "Einzelperson" msgstr "Einzelperson"
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "Gruppe" msgstr "Gruppe"
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "Neuer Einladungslink" msgstr "Neuer Einladungslink"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "Löschen" msgstr "Löschen"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
msgid "Invitation created" msgid "Invitation created"
msgstr "Einladung angelegt" msgstr "Einladung angelegt"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "Diese Einladung existiert nicht" msgstr "Diese Einladung existiert nicht"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "Einladung gelöscht" msgstr "Einladung gelöscht"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "Gemeinschaft gründen" msgstr "Gemeinschaft gründen"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
msgid "Circle created" msgid "Circle created"
msgstr "Gemeinschaft gegründet" msgstr "Gemeinschaft gegründet"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "Benutzer auswählen" msgstr "Benutzer auswählen"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "Gemeinschaft ändern" msgstr "Gemeinschaft ändern"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "Gemeinschaft endgültig löschen" msgstr "Gemeinschaft endgültig löschen"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "Benutzer hinzufügen" msgstr "Benutzer hinzufügen"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
msgid "No such circle exists" msgid "No such circle exists"
msgstr "Diese Gemeinschaft existiert nicht" msgstr "Diese Gemeinschaft existiert nicht"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
msgid "Circle data updated" msgid "Circle data updated"
msgstr "Gemeinschaftsdaten aktualisiert" msgstr "Gemeinschaftsdaten aktualisiert"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
msgid "Circle deleted" msgid "Circle deleted"
msgstr "Gemeinschaft gelöscht" msgstr "Gemeinschaft gelöscht"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
msgid "User added to circle" msgid "User added to circle"
msgstr "Benutzer zur Gemeinschaft hinzugefügt" msgstr "Benutzer zur Gemeinschaft hinzugefügt"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
msgid "User removed from circle" msgid "User removed from circle"
msgstr "Benutzer aus der Gemeinschaft entfernt" msgstr "Benutzer aus der Gemeinschaft entfernt"
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr "Nachrichteninhalt"
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr "Nur an verbundene Benutzer senden"
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr "An alle Benutzer senden"
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr "Vorschau an dich selbst senden"
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr "Ankündigung verschickt!"
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "Kern" msgstr "Kern"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
"Der Kontoexport ist zu groß. Bitte kontaktiere deinen Snikket-Betreiber."
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "Benutzername" msgstr "Benutzername"
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "Passwort" msgstr "Passwort"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "Passwort (Bestätigung)" msgstr "Passwort (Bestätigung)"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
msgid "The passwords must match." msgid "The passwords must match."
msgstr "Die Passwörter müssen übereinstimmen." msgstr "Die Passwörter müssen übereinstimmen."
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "Konto anlegen" msgstr "Konto anlegen"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
msgid "That username is already taken." msgid "That username is already taken."
msgstr "Dieser Benutzername ist bereits belegt." msgstr "Dieser Benutzername ist bereits belegt."
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "Die Registrierung wurde aus unbekannten Gründen abgelehnt." msgstr "Die Registrierung wurde aus unbekannten Gründen abgelehnt."
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
msgid "The username is not valid." msgid "The username is not valid."
msgstr "Der Benutzername ist ungültig." msgstr "Der Benutzername ist ungültig."
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "Passwort ändern" msgstr "Passwort ändern"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr "Kontoexportdatei"
#: snikket_web/invite.py:250
msgid "Import data"
msgstr "Daten importieren"
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
"Der Kontoexport ist in einem unbekannten Format. Es können nur XML-Dateien "
"im XEP-0227-Format verarbeitet werden (erhaltenes Format: %(mimetype)s)."
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr "Fehler"
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "Adresse" msgstr "Adresse"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "Anmelden" msgstr "Anmelden"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "Benutzername oder Passwort falsch." msgstr "Benutzername oder Passwort falsch."
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "Anmeldung erfolgreich!" msgstr "Anmeldung erfolgreich!"
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "Aktuelles Passwort" msgstr "Aktuelles Passwort"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "Neues Passwort" msgstr "Neues Passwort"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "Neues Passwort (Bestätigung)" msgstr "Neues Passwort (Bestätigung)"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "Die neuen Passwörter müssen übereinstimmen." msgstr "Die neuen Passwörter müssen übereinstimmen."
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "Abmelden" msgstr "Abmelden"
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "Niemand" msgstr "Niemand"
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "Nur Freunde" msgstr "Nur Freunde"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "Jeder" msgstr "Jeder"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "Bild" msgstr "Bild"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "Profilsichtbarkeit" msgstr "Profilsichtbarkeit"
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "Profil bearbeiten" msgstr "Profil bearbeiten"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr "Kontodaten"
#: snikket_web/user.py:86
msgid "Upload"
msgstr "Hochladen"
#: snikket_web/user.py:111
msgid "Incorrect password." msgid "Incorrect password."
msgstr "Ungültiges Passwort." msgstr "Ungültiges Passwort."
#: snikket_web/user.py:103 #: snikket_web/user.py:115
msgid "Password changed" msgid "Password changed"
msgstr "Passwort geändert" msgstr "Passwort geändert"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
@@ -307,13 +366,17 @@ msgstr ""
"Das gewählte Profilbild ist zu groß. Benutze die App um größere Bilder " "Das gewählte Profilbild ist zu groß. Benutze die App um größere Bilder "
"hochladen zu können." "hochladen zu können."
#: snikket_web/user.py:159 #: snikket_web/user.py:170
msgid "Profile updated" msgid "Profile updated"
msgstr "Profil gespeichert" msgstr "Profil gespeichert"
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr "Fehler" msgstr "Exportieren"
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr "Du hast derzeit keine Kontodaten, die exportiert werden können."
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
#, python-format #, python-format
@@ -406,7 +469,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "Softwareversionen" msgstr "Softwareversionen"
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "Zurück zur Hauptseite" msgstr "Zurück zur Hauptseite"
@@ -446,6 +509,7 @@ msgid "Members"
msgstr "Mitglieder" msgstr "Mitglieder"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -527,7 +591,7 @@ msgid "Delete user %(user_name)s"
msgstr "Benutzer %(user_name)s löschen" msgstr "Benutzer %(user_name)s löschen"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "Benutzer löschen" msgstr "Benutzer löschen"
@@ -552,6 +616,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -605,28 +670,37 @@ msgstr ""
msgid "Circle members" msgid "Circle members"
msgstr "Mitglieder der Gemeinschaft" msgstr "Mitglieder der Gemeinschaft"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr "Dieser Benutzer wurde von diesem Server gelöscht."
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "gelöscht"
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "Benutzer %(username)s aus der Gemeinschaft entfernen" msgstr "Benutzer %(username)s aus der Gemeinschaft entfernen"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "Diese Gemeinschaft hat derzeit keine Mitglieder." msgstr "Diese Gemeinschaft hat derzeit keine Mitglieder."
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "Mehr Mitglieder einladen" msgstr "Mehr Mitglieder einladen"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "Bestehenden Benuzter hinzufügen" msgstr "Bestehenden Benuzter hinzufügen"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "Alle Benutzer hinzugefügt" msgstr "Alle Benutzer hinzugefügt"
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "Alle Benutzer dieses Dienstes sind bereits in dieser Gemeinschaft." msgstr "Alle Benutzer dieses Dienstes sind bereits in dieser Gemeinschaft."
@@ -712,15 +786,15 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "Benutzer %(user_name)s bearbeiten" msgstr "Benutzer %(user_name)s bearbeiten"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
msgid "Edit user" msgid "Edit user"
msgstr "Benutzer bearbeiten" msgstr "Benutzer bearbeiten"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "Der Anmeldename kann nicht geändert werden." msgstr "Der Anmeldename kann nicht geändert werden."
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
@@ -728,24 +802,24 @@ msgstr ""
"Die Berechtigungen von Benutzern bestimmen, welche Interaktionen ihnen auf " "Die Berechtigungen von Benutzern bestimmen, welche Interaktionen ihnen auf "
"deinem Snikket-Server erlaubt sind." "deinem Snikket-Server erlaubt sind."
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
msgid "Return to user list" msgid "Return to user list"
msgstr "Zurück zur Benutzerliste" msgstr "Zurück zur Benutzerliste"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "Weitere Aktionen" msgstr "Weitere Aktionen"
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
msgid "Reset password" msgid "Reset password"
msgstr "Passwort zurücksetzen" msgstr "Passwort zurücksetzen"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to create " "If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once." "a special link which allows to change the password of the account, once."
@@ -754,11 +828,11 @@ msgstr ""
"folgenden Button verwenden um einen Link zu erzeugen. Dieser Link erlaubt es " "folgenden Button verwenden um einen Link zu erzeugen. Dieser Link erlaubt es "
"einmalig, das Passwort des Kontos zu ändern." "einmalig, das Passwort des Kontos zu ändern."
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
msgid "Debug information" msgid "Debug information"
msgstr "Informationen zur Fehlerbehebung" msgstr "Informationen zur Fehlerbehebung"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
@@ -766,10 +840,10 @@ msgid ""
msgstr "" msgstr ""
"In seltenen Fällen kann es vorkommen, dass weiterführende Informationen über " "In seltenen Fällen kann es vorkommen, dass weiterführende Informationen über "
"das Benutzerkonto sowie die verbundenen Geräte erforderlich sind um ein " "das Benutzerkonto sowie die verbundenen Geräte erforderlich sind um ein "
"Problem zu beheben. Der folgende Button zeigt diese (teilweise vertraulichen)" "Problem zu beheben. Der folgende Button zeigt diese (teilweise "
" Informationen an." "vertraulichen) Informationen an."
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
msgid "Show debug information" msgid "Show debug information"
msgstr "Debugging-Informationen anzeigen" msgstr "Debugging-Informationen anzeigen"
@@ -813,11 +887,29 @@ msgstr "Erzeugen, Löschen oder Kopieren von Einladungen."
msgid "Manage invitations" msgid "Manage invitations"
msgstr "Einladungen verwalten" msgstr "Einladungen verwalten"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr "Systemzustand"
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr ""
"Einsehen des Serverzustands oder versenden einer Nachricht an alle Benutzer."
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr "Nachricht an alle Benutzer versenden."
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
msgid "Manage system"
msgstr "System verwalten"
#: snikket_web/templates/admin_home.html:48
msgid "Go back to your user's web portal page." msgid "Go back to your user's web portal page."
msgstr "Zurück zur Startseite deines Benutzers." msgstr "Zurück zur Startseite deines Benutzers."
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "Adminbereich verlassen" msgstr "Adminbereich verlassen"
@@ -870,6 +962,86 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "Link zerstören" msgstr "Link zerstören"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr "Gesamtzustand"
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr "Systemlast (5-Minuten-Durchschnitt)"
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr "unbekannt"
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr "Arbeitsspeicherverbrauch"
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
"%(percentage_global)s von %(mem_available)s. Davon belegt Snikket "
"%(percentage_snikket)s."
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr "Status des Webportals"
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr "Version"
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr "Alle Versionen anzeigen"
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr "Durchschnittlicher CPU-Verbrauch"
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr "Aktuelle Speicherbelegung"
#: snikket_web/templates/admin_system.html:50
msgid "Snikket server status"
msgstr "Status des Snikket-Servers"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr "Durch geteilte Dateien belegter Speicherplatz"
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr "Verbundene Geräte"
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr "Nachricht an alle senden"
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
"Mit diesem Formular kannst du eine Nachricht an alle Benutzer schicken, die "
"zu deinem Snikket-Dienst gehören. Gebrauche es klug."
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
msgid "The user is an administrator." msgid "The user is an administrator."
msgstr "Der Benutzer ist ein Administrator." msgstr "Der Benutzer ist ein Administrator."
@@ -982,8 +1154,8 @@ msgstr "App schon installiert?"
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "App öffnen" msgstr "App öffnen"
@@ -1050,7 +1222,6 @@ msgid "You can now log in using your new password."
msgstr "Du kannst dich nun mit deinem neuen Passwort anmelden." msgstr "Du kannst dich nun mit deinem neuen Passwort anmelden."
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "Du kannst diese Seite nun schließen." msgstr "Du kannst diese Seite nun schließen."
@@ -1086,7 +1257,6 @@ msgstr ""
"Das geht mit Hilfe des Scan-Knopfes in der oberen Leiste." "Das geht mit Hilfe des Scan-Knopfes in der oberen Leiste."
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1145,6 +1315,44 @@ msgstr ""
"Du kannst nun deinen normalen XMPP-Clienten mit der obenstehenden Adresse " "Du kannst nun deinen normalen XMPP-Clienten mit der obenstehenden Adresse "
"und deinem gewählten Passwort einrichten." "und deinem gewählten Passwort einrichten."
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
"Du kannst diese Seite nun schließen oder dich im Webportal anmelden um dein "
"<a href=\"%(login_url)s\">Konto zu bearbeiten</a>."
#: snikket_web/templates/invite_success.html:21
msgid "Import successful"
msgstr "Import erfolgreich"
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr "Gratulation! Deine Kontodaten wurden erfolgreich importiert."
#: snikket_web/templates/invite_success.html:26
msgid "Moving to Snikket?"
msgstr "Am Umziehen zu Snikket?"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
"Wenn du dabei bist, dein Konto von einer anderen Snikket-Instanz oder XMPP-"
"kompatiblen Dienst umzuziehen, kannst du optional deine Kontodaten "
"(Kontakte, Profilinformationen etc.) von deinem vorherigen Konto "
"importieren. Wenn du die Daten von deinem alten Konto exportiert hast, lade "
"sie mit dem untenstehenden Formular hoch."
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr "Kontodaten hochladen"
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1170,7 +1378,7 @@ msgstr ""
#: snikket_web/templates/invite_view.html:20 #: snikket_web/templates/invite_view.html:20
msgid "Get started" msgid "Get started"
msgstr "Leg los!" msgstr "Erste Schritte"
#: snikket_web/templates/invite_view.html:22 #: snikket_web/templates/invite_view.html:22
msgid "Install the Snikket App on your Android or iOS device." msgid "Install the Snikket App on your Android or iOS device."
@@ -1191,7 +1399,7 @@ msgid "Get it on Google Play"
msgstr "Von Google Play installieren" msgstr "Von Google Play installieren"
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "Laden im App Store" msgstr "Laden im App Store"
@@ -1229,11 +1437,11 @@ msgid "Scan invite code"
msgstr "Einladungscode scannen" msgstr "Einladungscode scannen"
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "Schließen" msgstr "Schließen"
@@ -1246,34 +1454,11 @@ msgstr ""
"untenstehenden Code mit deiner Kamera scannst. Dafür kannst du entweder " "untenstehenden Code mit deiner Kamera scannst. Dafür kannst du entweder "
"einen normalen QR-Scanner nehmen oder die Snikket-App selbst." "einen normalen QR-Scanner nehmen oder die Snikket-App selbst."
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr "Mit einem QR-Code-Scanner"
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr "Mit der Snikket-App"
#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
msgstr ""
"Benutze einen <em>QR-Code</em>-Scanner auf deinem mobilen Gerät um den "
"untenstehenden Code zu scannen:"
#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
"Installiere die Snikket-App auf deinem mobilen Gerät, öffne sie und tippe "
"dann auf den 'Scan'-Knopf in der oberen Leiste."
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "Installation auf iOS" msgstr "Installation auf iOS"
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
@@ -1281,14 +1466,14 @@ msgstr ""
"Nachdem du Snikket vom App Store heruntergeladen hast musst du zu diesem " "Nachdem du Snikket vom App Store heruntergeladen hast musst du zu diesem "
"Einladungslink zurückkehren und \"App öffnen\" antippen um fortzufahren." "Einladungslink zurückkehren und \"App öffnen\" antippen um fortzufahren."
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "" msgstr ""
"Lade zunächst Snikket aus dem App Store herunter indem du den folgenden " "Lade zunächst Snikket aus dem App Store herunter indem du den folgenden "
"Button benutzt:" "Button benutzt:"
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
@@ -1297,12 +1482,12 @@ msgstr ""
"zurückkehren und unten auf \"App öffnen\" tippen um die Einrichtung " "zurückkehren und unten auf \"App öffnen\" tippen um die Einrichtung "
"abzuschließen:" "abzuschließen:"
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "Installation über F-Droid" msgstr "Installation über F-Droid"
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
@@ -1310,7 +1495,7 @@ msgstr ""
"Nachdem du Snikket über F-Droid installiert hast, musst du auf diese Seite " "Nachdem du Snikket über F-Droid installiert hast, musst du auf diese Seite "
"zurückkehren und \"App öffnen\" antippen um fortzufahren." "zurückkehren und \"App öffnen\" antippen um fortzufahren."
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "Installiere Snikket zunächst aus F-Droid mit dem folgenden Button:" msgstr "Installiere Snikket zunächst aus F-Droid mit dem folgenden Button:"
@@ -1322,10 +1507,6 @@ msgstr "Link kopieren"
msgid "Invalid input" msgid "Invalid input"
msgstr "Ungültige Eingabe" msgstr "Ungültige Eingabe"
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "gelöscht"
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1385,16 +1566,21 @@ msgstr "Deine XMPP-Adresse"
msgid "Edit profile" msgid "Edit profile"
msgstr "Profil bearbeiten" msgstr "Profil bearbeiten"
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
msgid "Manage your data"
msgstr "Daten verwalten"
#: snikket_web/templates/user_home.html:39
msgid "Your Snikket" msgid "Your Snikket"
msgstr "Dein Snikket" msgstr "Dein Snikket"
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "" msgstr ""
"Benutzer, Einladungen und Gemeinschaften dieses Snikket-Dienstes verwalten." "Benutzer, Einladungen und Gemeinschaften dieses Snikket-Dienstes verwalten."
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
msgid "Admin panel" msgid "Admin panel"
msgstr "Adminbereich" msgstr "Adminbereich"
@@ -1410,6 +1596,16 @@ msgstr ""
"Klicke unten um dich aus dem Webportal abzumelden. Dies betrifft keine " "Klicke unten um dich aus dem Webportal abzumelden. Dies betrifft keine "
"anderen Geräte von dir." "anderen Geräte von dir."
#: snikket_web/templates/user_manage_data.html:8
msgid "Export account"
msgstr "Konto exportieren"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr "Lade deine Kontodaten als Backup oder zum Umziehen herunter."
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "Ändere dein Passwort" msgstr "Ändere dein Passwort"
@@ -1452,6 +1648,26 @@ msgstr ""
"Hier kannst du einstellen, wer deine Profilinformationen, wie Bild oder " "Hier kannst du einstellen, wer deine Profilinformationen, wie Bild oder "
"Anzeigename einsehen kann." "Anzeigename einsehen kann."
#~ msgid "Using a QR code scanner"
#~ msgstr "Mit einem QR-Code-Scanner"
#~ msgid "Using the Snikket app"
#~ msgstr "Mit der Snikket-App"
#~ msgid ""
#~ "Use a <em>QR code</em> scanner on your mobile device to scan the code "
#~ "below:"
#~ msgstr ""
#~ "Benutze einen <em>QR-Code</em>-Scanner auf deinem mobilen Gerät um den "
#~ "untenstehenden Code zu scannen:"
#~ msgid ""
#~ "Install the Snikket app on your mobile device, open it, and tap the "
#~ "'Scan' button at the top."
#~ msgstr ""
#~ "Installiere die Snikket-App auf deinem mobilen Gerät, öffne sie und tippe "
#~ "dann auf den 'Scan'-Knopf in der oberen Leiste."
#~ msgid "Create password reset link for %(user_name)s" #~ msgid "Create password reset link for %(user_name)s"
#~ msgstr "Link zum Zurücksetzen des Passwortes von %(user_name)s erzeugen" #~ msgstr "Link zum Zurücksetzen des Passwortes von %(user_name)s erzeugen"

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -7,9 +7,9 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-02-02 21:01+0000\n" "PO-Revision-Date: 2021-06-19 15:01+0000\n"
"Last-Translator: riccio <unriccio@email.it>\n" "Last-Translator: Jonas Schäfer <jonas@zombofant.net>\n"
"Language-Team: English (United Kingdom) <https://i18n.sotecware.net/projects/" "Language-Team: English (United Kingdom) <https://i18n.sotecware.net/projects/"
"snikket/web-portal/en_GB/>\n" "snikket/web-portal/en_GB/>\n"
"Language: en_GB\n" "Language: en_GB\n"
@@ -17,352 +17,412 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\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" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr ""
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "Login name" msgstr "Login name"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "Display name" msgstr "Display name"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "" msgstr ""
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr ""
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "" msgstr ""
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
#, fuzzy #, fuzzy
#| msgid "Admin dashboard" #| msgid "Admin dashboard"
msgid "Administrator" msgid "Administrator"
msgstr "Admin dashboard" msgstr "Admin dashboard"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
#, fuzzy #, fuzzy
#| msgid "Create circle" #| msgid "Create circle"
msgid "Update user" msgid "Update user"
msgstr "Create circle" msgstr "Create circle"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
#, fuzzy #, fuzzy
#| msgid "Create password reset links or delete users." #| msgid "Create password reset links or delete users."
msgid "Create password reset link" msgid "Create password reset link"
msgstr "Create password reset links or delete users." msgstr "Create password reset links or delete users."
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
#, fuzzy #, fuzzy
#| msgid "Password reset link for %(user_name)s" #| msgid "Password reset link for %(user_name)s"
msgid "Password reset link created" msgid "Password reset link created"
msgstr "Password reset link for %(user_name)s" msgstr "Password reset link for %(user_name)s"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
#, fuzzy #, fuzzy
#| msgid "User information" #| msgid "User information"
msgid "User information updated." msgid "User information updated."
msgstr "User information" msgstr "User information"
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "Delete user permanently" msgstr "Delete user permanently"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
#, fuzzy #, fuzzy
#| msgid "deleted" #| msgid "deleted"
msgid "User deleted" msgid "User deleted"
msgstr "deleted" msgstr "deleted"
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
#, fuzzy #, fuzzy
#| msgid "Password reset link for %(user_name)s" #| msgid "Password reset link for %(user_name)s"
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "Password reset link for %(user_name)s" msgstr "Password reset link for %(user_name)s"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
#, fuzzy #, fuzzy
#| msgid "Create password reset links or delete users." #| msgid "Create password reset links or delete users."
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "Create password reset links or delete users." msgstr "Create password reset links or delete users."
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "Invite to circle" msgstr "Invite to circle"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "At least one circle must be selected" msgstr "At least one circle must be selected"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "Valid for" msgstr "Valid for"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "One hour" msgstr "One hour"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "Twelve hours" msgstr "Twelve hours"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "One day" msgstr "One day"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "One week" msgstr "One week"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "Four weeks" msgstr "Four weeks"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "Invitation type" msgstr "Invitation type"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "" msgstr ""
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "" msgstr ""
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "New invitation link" msgstr "New invitation link"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "Revoke" msgstr "Revoke"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
#, fuzzy #, fuzzy
#| msgid "Invitation type" #| msgid "Invitation type"
msgid "Invitation created" msgid "Invitation created"
msgstr "Invitation type" msgstr "Invitation type"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
#, fuzzy #, fuzzy
#| msgid "New invitation link" #| msgid "New invitation link"
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "New invitation link" msgstr "New invitation link"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
#, fuzzy #, fuzzy
#| msgid "Invitation type" #| msgid "Invitation type"
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "Invitation type" msgstr "Invitation type"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "Create circle" msgstr "Create circle"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
#, fuzzy #, fuzzy
#| msgid "Circle name" #| msgid "Circle name"
msgid "Circle created" msgid "Circle created"
msgstr "Circle name" msgstr "Circle name"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "Select user" msgstr "Select user"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
#, fuzzy #, fuzzy
#| msgid "Create circle" #| msgid "Create circle"
msgid "Update circle" msgid "Update circle"
msgstr "Create circle" msgstr "Create circle"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "Delete circle permanently" msgstr "Delete circle permanently"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "Add user" msgstr "Add user"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
#, fuzzy #, fuzzy
#| msgid "No circles" #| msgid "No circles"
msgid "No such circle exists" msgid "No such circle exists"
msgstr "No circles" msgstr "No circles"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
#, fuzzy #, fuzzy
#| msgid "Circle name" #| msgid "Circle name"
msgid "Circle data updated" msgid "Circle data updated"
msgstr "Circle name" msgstr "Circle name"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
#, fuzzy #, fuzzy
#| msgid "deleted" #| msgid "deleted"
msgid "Circle deleted" msgid "Circle deleted"
msgstr "deleted" msgstr "deleted"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
#, fuzzy #, fuzzy
#| msgid "Invite to circle" #| msgid "Invite to circle"
msgid "User added to circle" msgid "User added to circle"
msgstr "Invite to circle" msgstr "Invite to circle"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
#, fuzzy #, fuzzy
#| msgid "Remove user %(username)s from circle" #| msgid "Remove user %(username)s from circle"
msgid "User removed from circle" msgid "User removed from circle"
msgstr "Remove user %(username)s from circle" msgstr "Remove user %(username)s from circle"
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr ""
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr ""
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr ""
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr ""
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr ""
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "Main" msgstr "Main"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "" msgstr ""
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "Password" msgstr "Password"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
#, fuzzy #, fuzzy
#| msgid "Confirm new password" #| msgid "Confirm new password"
msgid "Confirm password" msgid "Confirm password"
msgstr "Confirm new password" msgstr "Confirm new password"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
#, fuzzy #, fuzzy
#| msgid "The passwords must match" #| msgid "The passwords must match"
msgid "The passwords must match." msgid "The passwords must match."
msgstr "The passwords must match" msgstr "The passwords must match"
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
#, fuzzy #, fuzzy
#| msgid "Create circle" #| msgid "Create circle"
msgid "Create account" msgid "Create account"
msgstr "Create circle" msgstr "Create circle"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
msgid "That username is already taken." msgid "That username is already taken."
msgstr "" msgstr ""
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "" msgstr ""
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
msgid "The username is not valid." msgid "The username is not valid."
msgstr "" msgstr ""
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "Change password" msgstr "Change password"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr ""
#: snikket_web/invite.py:250
msgid "Import data"
msgstr ""
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr ""
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "Address" msgstr "Address"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "Sign in" msgstr "Sign in"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
#, fuzzy #, fuzzy
#| msgid "Invalid user name or password." #| msgid "Invalid user name or password."
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "Invalid user name or password." msgstr "Invalid user name or password."
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "" msgstr ""
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "Current password" msgstr "Current password"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "New password" msgstr "New password"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "Confirm new password" msgstr "Confirm new password"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
#, fuzzy #, fuzzy
#| msgid "The new passwords must match" #| msgid "The new passwords must match"
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "The new passwords must match" msgstr "The new passwords must match"
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "Sign out" msgstr "Sign out"
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "Nobody" msgstr "Nobody"
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "Friends only" msgstr "Friends only"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "Everyone" msgstr "Everyone"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "Avatar" msgstr "Avatar"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "Profile visibility" msgstr "Profile visibility"
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "Update profile" msgstr "Update profile"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr ""
#: snikket_web/user.py:86
msgid "Upload"
msgstr ""
#: snikket_web/user.py:111
#, fuzzy #, fuzzy
#| msgid "Incorrect password" #| msgid "Incorrect password"
msgid "Incorrect password." msgid "Incorrect password."
msgstr "Incorrect password" msgstr "Incorrect password"
#: snikket_web/user.py:103 #: snikket_web/user.py:115
#, fuzzy #, fuzzy
#| msgid "Password change failed" #| msgid "Password change failed"
msgid "Password changed" msgid "Password changed"
msgstr "Password change failed" msgstr "Password change failed"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
msgstr "" msgstr ""
#: snikket_web/user.py:159 #: snikket_web/user.py:170
#, fuzzy #, fuzzy
#| msgid "Profile" #| msgid "Profile"
msgid "Profile updated" msgid "Profile updated"
msgstr "Profile" msgstr "Profile"
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr ""
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr "" msgstr ""
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
@@ -451,7 +511,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "Software Versions" msgstr "Software Versions"
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "Back to the main page" msgstr "Back to the main page"
@@ -488,6 +548,7 @@ msgid "Members"
msgstr "Members" msgstr "Members"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -570,7 +631,7 @@ msgid "Delete user %(user_name)s"
msgstr "Delete user %(user_name)s" msgstr "Delete user %(user_name)s"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "Delete user" msgstr "Delete user"
@@ -592,6 +653,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -645,28 +707,37 @@ msgstr "Deleting a circle does not delete any users in the circle."
msgid "Circle members" msgid "Circle members"
msgstr "Circle members" msgstr "Circle members"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr ""
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "deleted"
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "Remove user %(username)s from circle" msgstr "Remove user %(username)s from circle"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "This circle currently has no members." msgstr "This circle currently has no members."
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "Invite more members" msgstr "Invite more members"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "Add existing user" msgstr "Add existing user"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "All users on this service are already in this circle." msgstr "All users on this service are already in this circle."
@@ -745,44 +816,44 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "Edit user %(user_name)s" msgstr "Edit user %(user_name)s"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
#, fuzzy #, fuzzy
#| msgid "Add user" #| msgid "Add user"
msgid "Edit user" msgid "Edit user"
msgstr "Add user" msgstr "Add user"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
#, fuzzy #, fuzzy
#| msgid "New invitation link" #| msgid "New invitation link"
msgid "Return to user list" msgid "Return to user list"
msgstr "New invitation link" msgstr "New invitation link"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
#, fuzzy #, fuzzy
#| msgid "Change your password" #| msgid "Change your password"
msgid "Reset password" msgid "Reset password"
msgstr "Change your password" msgstr "Change your password"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
#, fuzzy #, fuzzy
#| msgid "" #| msgid ""
#| "If the user has forgotten their password, use the below button to create " #| "If the user has forgotten their password, use the below button to create "
@@ -797,20 +868,20 @@ msgstr ""
"password reset link. The password reset link can be used once to change the " "password reset link. The password reset link can be used once to change the "
"password of the account. Transmit the link to the user via a secure channel." "password of the account. Transmit the link to the user via a secure channel."
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
#, fuzzy #, fuzzy
#| msgid "User information" #| msgid "User information"
msgid "Debug information" msgid "Debug information"
msgstr "User information" msgstr "User information"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
"(sensitive) information." "(sensitive) information."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
#, fuzzy #, fuzzy
#| msgid "Show debug information for %(user_name)s" #| msgid "Show debug information for %(user_name)s"
msgid "Show debug information" msgid "Show debug information"
@@ -861,13 +932,32 @@ msgstr "Create, revoke or view invitations."
msgid "Manage invitations" msgid "Manage invitations"
msgstr "Manage invitations" msgstr "Manage invitations"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr ""
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage system"
msgstr "Manage users"
#: snikket_web/templates/admin_home.html:48
#, fuzzy #, fuzzy
#| msgid "Go back to your users web portal page." #| msgid "Go back to your users web portal page."
msgid "Go back to your user's web portal page." msgid "Go back to your user's web portal page."
msgstr "Go back to your users web portal page." msgstr "Go back to your users web portal page."
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "" msgstr ""
@@ -920,6 +1010,84 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "Destroy link" msgstr "Destroy link"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr ""
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr "System load (5-minute average)"
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr ""
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr ""
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr ""
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr ""
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr ""
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:50
#, fuzzy
#| msgid "Snikket Web Portal"
msgid "Snikket server status"
msgstr "Snikket Web Portal"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr ""
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr ""
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr ""
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
msgid "The user is an administrator." msgid "The user is an administrator."
msgstr "" msgstr ""
@@ -1028,8 +1196,8 @@ msgstr ""
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "" msgstr ""
@@ -1095,7 +1263,6 @@ msgid "You can now log in using your new password."
msgstr "" msgstr ""
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "" msgstr ""
@@ -1127,7 +1294,6 @@ msgid ""
msgstr "" msgstr ""
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1178,6 +1344,41 @@ msgid ""
"password you chose during registration." "password you chose during registration."
msgstr "" msgstr ""
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
#: snikket_web/templates/invite_success.html:21
#, fuzzy
#| msgid "Password reset"
msgid "Import successful"
msgstr "Password reset"
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr ""
#: snikket_web/templates/invite_success.html:26
#, fuzzy
#| msgid "About Snikket"
msgid "Moving to Snikket?"
msgstr "About Snikket"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr ""
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1217,7 +1418,7 @@ msgid "Get it on Google Play"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "" msgstr ""
@@ -1250,11 +1451,11 @@ msgid "Scan invite code"
msgstr "Show invite details" msgstr "Show invite details"
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "" msgstr ""
@@ -1264,58 +1465,39 @@ msgid ""
"your camera. You can use either a QR scanner app or the Snikket app itself." "your camera. You can use either a QR scanner app or the Snikket app itself."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr ""
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr ""
#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
msgstr ""
#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "" msgstr ""
@@ -1327,10 +1509,6 @@ msgstr "Copy link"
msgid "Invalid input" msgid "Invalid input"
msgstr "Invalid input" msgstr "Invalid input"
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "deleted"
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
#, fuzzy #, fuzzy
#| msgid "Manage users and invitations of this Snikket service." #| msgid "Manage users and invitations of this Snikket service."
@@ -1395,19 +1573,26 @@ msgstr "Email address"
msgid "Edit profile" msgid "Edit profile"
msgstr "Update profile" msgstr "Update profile"
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage your data"
msgstr "Manage users"
#: snikket_web/templates/user_home.html:39
#, fuzzy #, fuzzy
#| msgid "About Snikket" #| msgid "About Snikket"
msgid "Your Snikket" msgid "Your Snikket"
msgstr "About Snikket" msgstr "About Snikket"
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
#, fuzzy #, fuzzy
#| msgid "Manage users and invitations of this Snikket service." #| msgid "Manage users and invitations of this Snikket service."
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "Manage users and invitations of this Snikket service." msgstr "Manage users and invitations of this Snikket service."
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
#, fuzzy #, fuzzy
#| msgid "Admin dashboard" #| msgid "Admin dashboard"
msgid "Admin panel" msgid "Admin panel"
@@ -1425,6 +1610,18 @@ msgstr ""
"Click below to log yourself out of the web portal. This does not affect any " "Click below to log yourself out of the web portal. This does not affect any "
"other connected devices." "other connected devices."
#: snikket_web/templates/user_manage_data.html:8
#, fuzzy
#| msgid "Create circle"
msgid "Export account"
msgstr "Create circle"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "Change your password" msgstr "Change your password"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-03-31 13:00+0000\n" "PO-Revision-Date: 2021-03-31 13:00+0000\n"
"Last-Translator: Tilman Jiménez <tilman.jimenez@tu-dortmund.de>\n" "Last-Translator: Tilman Jiménez <tilman.jimenez@tu-dortmund.de>\n"
"Language-Team: Spanish (Mexico) <https://i18n.sotecware.net/projects/snikket/" "Language-Team: Spanish (Mexico) <https://i18n.sotecware.net/projects/snikket/"
@@ -20,333 +20,393 @@ msgstr ""
"X-Generator: Weblate 4.5.1\n" "X-Generator: Weblate 4.5.1\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr "Limitado"
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "Nombre de ingreso del usuario" msgstr "Nombre de ingreso del usuario"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "Nombre mostrado" msgstr "Nombre mostrado"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "Nivel de acceso" msgstr "Nivel de acceso"
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr "Limitado"
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "Usuario normal" msgstr "Usuario normal"
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
#, fuzzy #, fuzzy
#| msgid "Admin area" #| msgid "Admin area"
msgid "Administrator" msgid "Administrator"
msgstr "Administración" msgstr "Administración"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
msgid "Update user" msgid "Update user"
msgstr "Actualizar usuario" msgstr "Actualizar usuario"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
#, fuzzy #, fuzzy
#| msgid "Current password" #| msgid "Current password"
msgid "Create password reset link" msgid "Create password reset link"
msgstr "Contraseña actual" msgstr "Contraseña actual"
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
msgid "Password reset link created" msgid "Password reset link created"
msgstr "Un enlace para restablecer la contraseña ha sido creado" msgstr "Un enlace para restablecer la contraseña ha sido creado"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
#, fuzzy #, fuzzy
#| msgid "Circle information" #| msgid "Circle information"
msgid "User information updated." msgid "User information updated."
msgstr "Información del círculo" msgstr "Información del círculo"
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "Eliminar usuario permanentemente" msgstr "Eliminar usuario permanentemente"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "Usuario eliminado" msgstr "Usuario eliminado"
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "No hemos encontrado un enlace para restablecer la contraseña" msgstr "No hemos encontrado un enlace para restablecer la contraseña"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "Enlace para restablecer la contraseña eliminado" msgstr "Enlace para restablecer la contraseña eliminado"
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "Invitar al círculo" msgstr "Invitar al círculo"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "Seleccione al menos un círculo" msgstr "Seleccione al menos un círculo"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "Válido por" msgstr "Válido por"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "Una hora" msgstr "Una hora"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "Doce horas" msgstr "Doce horas"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "Un día" msgstr "Un día"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "Una semana" msgstr "Una semana"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "Cuatro semanas" msgstr "Cuatro semanas"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "Tipo de invitación" msgstr "Tipo de invitación"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "Individual" msgstr "Individual"
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "Grupo" msgstr "Grupo"
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "Nuevo enlace de invitación" msgstr "Nuevo enlace de invitación"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "Revocar/Eliminar" msgstr "Revocar/Eliminar"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
#, fuzzy #, fuzzy
#| msgid "Invitation type" #| msgid "Invitation type"
msgid "Invitation created" msgid "Invitation created"
msgstr "Tipo de invitación" msgstr "Tipo de invitación"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
#, fuzzy #, fuzzy
#| msgid "New invitation link" #| msgid "New invitation link"
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "Nuevo enlace de invitación" msgstr "Nuevo enlace de invitación"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
#, fuzzy #, fuzzy
#| msgid "Invitation type" #| msgid "Invitation type"
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "Tipo de invitación" msgstr "Tipo de invitación"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "Nombre" msgstr "Nombre"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "Crear círculo" msgstr "Crear círculo"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
#, fuzzy #, fuzzy
#| msgid "Circle name" #| msgid "Circle name"
msgid "Circle created" msgid "Circle created"
msgstr "Nombre del círculo" msgstr "Nombre del círculo"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "Seleccionar usuario" msgstr "Seleccionar usuario"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "Actualizar círculo" msgstr "Actualizar círculo"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "Eliminar círculo permanentemente" msgstr "Eliminar círculo permanentemente"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "Añadir usuario" msgstr "Añadir usuario"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
#, fuzzy #, fuzzy
#| msgid "No circles" #| msgid "No circles"
msgid "No such circle exists" msgid "No such circle exists"
msgstr "No hay círculos" msgstr "No hay círculos"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
#, fuzzy #, fuzzy
#| msgid "Circle name" #| msgid "Circle name"
msgid "Circle data updated" msgid "Circle data updated"
msgstr "Nombre del círculo" msgstr "Nombre del círculo"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
#, fuzzy #, fuzzy
#| msgid "Circle members" #| msgid "Circle members"
msgid "Circle deleted" msgid "Circle deleted"
msgstr "Miembros del círculo" msgstr "Miembros del círculo"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
#, fuzzy #, fuzzy
#| msgid "Invite to circle" #| msgid "Invite to circle"
msgid "User added to circle" msgid "User added to circle"
msgstr "Invitar al círculo" msgstr "Invitar al círculo"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
msgid "User removed from circle" msgid "User removed from circle"
msgstr "" msgstr ""
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr ""
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr ""
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr ""
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr ""
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr ""
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "Principal" msgstr "Principal"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "Usuario" msgstr "Usuario"
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "Contraseña" msgstr "Contraseña"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "Confirmar contraseña" msgstr "Confirmar contraseña"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
#, fuzzy #, fuzzy
#| msgid "The passwords must match" #| msgid "The passwords must match"
msgid "The passwords must match." msgid "The passwords must match."
msgstr "Las contraseñas deben ser las mismas" msgstr "Las contraseñas deben ser las mismas"
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "Crear cuenta" msgstr "Crear cuenta"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
#, fuzzy #, fuzzy
#| msgid "That username is already taken" #| msgid "That username is already taken"
msgid "That username is already taken." msgid "That username is already taken."
msgstr "Ese nombre de usuario ya está siendo utilizado" msgstr "Ese nombre de usuario ya está siendo utilizado"
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
#, fuzzy #, fuzzy
#| msgid "Registration was declined for unknown reasons" #| msgid "Registration was declined for unknown reasons"
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "El registro ha sido declinado por razones no identificadas" msgstr "El registro ha sido declinado por razones no identificadas"
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
#, fuzzy #, fuzzy
#| msgid "The username is not valid" #| msgid "The username is not valid"
msgid "The username is not valid." msgid "The username is not valid."
msgstr "El nombre de usuario no es válido" msgstr "El nombre de usuario no es válido"
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "Cambiar contraseña" msgstr "Cambiar contraseña"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr ""
#: snikket_web/invite.py:250
msgid "Import data"
msgstr ""
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr ""
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "Dirección" msgstr "Dirección"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "Ingresar" msgstr "Ingresar"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "Nombre de usuario o contraseña no válidos." msgstr "Nombre de usuario o contraseña no válidos."
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "" msgstr ""
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "Contraseña actual" msgstr "Contraseña actual"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "Nueva contraseña" msgstr "Nueva contraseña"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "Confirmar nueva contraseña" msgstr "Confirmar nueva contraseña"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
#, fuzzy #, fuzzy
#| msgid "The new passwords must match" #| msgid "The new passwords must match"
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "Las nuevas contraseñas deben ser iguales" msgstr "Las nuevas contraseñas deben ser iguales"
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "" msgstr ""
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "Nadie" msgstr "Nadie"
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "Únicamente amigos" msgstr "Únicamente amigos"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "Todos" msgstr "Todos"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "Imagen de perfil" msgstr "Imagen de perfil"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "Visibilidad de perfil" msgstr "Visibilidad de perfil"
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "Actualizar perfil" msgstr "Actualizar perfil"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr ""
#: snikket_web/user.py:86
msgid "Upload"
msgstr ""
#: snikket_web/user.py:111
#, fuzzy #, fuzzy
#| msgid "Incorrect password" #| msgid "Incorrect password"
msgid "Incorrect password." msgid "Incorrect password."
msgstr "Contraseña incorrecta" msgstr "Contraseña incorrecta"
#: snikket_web/user.py:103 #: snikket_web/user.py:115
#, fuzzy #, fuzzy
#| msgid "Password" #| msgid "Password"
msgid "Password changed" msgid "Password changed"
msgstr "Contraseña" msgstr "Contraseña"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
msgstr "" msgstr ""
#: snikket_web/user.py:159 #: snikket_web/user.py:170
msgid "Profile updated" msgid "Profile updated"
msgstr "" msgstr ""
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr ""
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr "" msgstr ""
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
@@ -428,7 +488,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "" msgstr ""
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "Regresar a la página principal" msgstr "Regresar a la página principal"
@@ -468,6 +528,7 @@ msgid "Members"
msgstr "Miembros" msgstr "Miembros"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -549,7 +610,7 @@ msgid "Delete user %(user_name)s"
msgstr "Eliminar al usuario %(user_name)s" msgstr "Eliminar al usuario %(user_name)s"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "Eliminar usuario" msgstr "Eliminar usuario"
@@ -574,6 +635,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -625,28 +687,37 @@ msgstr "Eliminar un círculo no elimina a los usuarios que le pertenecen."
msgid "Circle members" msgid "Circle members"
msgstr "Miembros del círculo" msgstr "Miembros del círculo"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr ""
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr ""
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "Remover al usuario %(username)s del círculo" msgstr "Remover al usuario %(username)s del círculo"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "Actualmente este círculo no tiene miembros." msgstr "Actualmente este círculo no tiene miembros."
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "Invitar a más miembros" msgstr "Invitar a más miembros"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "Añadir a un usuario existente" msgstr "Añadir a un usuario existente"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "Todos los usuarios han sido añadidos" msgstr "Todos los usuarios han sido añadidos"
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "Todos los usuarios de este servicio ya están en este círculo." msgstr "Todos los usuarios de este servicio ya están en este círculo."
@@ -728,63 +799,63 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "Eliminar al usuario %(user_name)s" msgstr "Eliminar al usuario %(user_name)s"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
#, fuzzy #, fuzzy
#| msgid "Add user" #| msgid "Add user"
msgid "Edit user" msgid "Edit user"
msgstr "Añadir usuario" msgstr "Añadir usuario"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
#, fuzzy #, fuzzy
#| msgid "New invitation link" #| msgid "New invitation link"
msgid "Return to user list" msgid "Return to user list"
msgstr "Nuevo enlace de invitación" msgstr "Nuevo enlace de invitación"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
#, fuzzy #, fuzzy
#| msgid "New password" #| msgid "New password"
msgid "Reset password" msgid "Reset password"
msgstr "Nueva contraseña" msgstr "Nueva contraseña"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to create " "If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once." "a special link which allows to change the password of the account, once."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
#, fuzzy #, fuzzy
#| msgid "Circle information" #| msgid "Circle information"
msgid "Debug information" msgid "Debug information"
msgstr "Información del círculo" msgstr "Información del círculo"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
"(sensitive) information." "(sensitive) information."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
#, fuzzy #, fuzzy
#| msgid "Circle information" #| msgid "Circle information"
msgid "Show debug information" msgid "Show debug information"
@@ -829,11 +900,30 @@ msgstr "Crea, revoca o copia invitaciones."
msgid "Manage invitations" msgid "Manage invitations"
msgstr "Administrar invitaciones" msgstr "Administrar invitaciones"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr ""
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage system"
msgstr "Administrar usuarios"
#: snikket_web/templates/admin_home.html:48
msgid "Go back to your user's web portal page." msgid "Go back to your user's web portal page."
msgstr "Regresa a la página de inicio de tu usuario." msgstr "Regresa a la página de inicio de tu usuario."
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "Salir del panel administrativo" msgstr "Salir del panel administrativo"
@@ -885,6 +975,84 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "Eliminar enlace" msgstr "Eliminar enlace"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr ""
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr ""
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr ""
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr ""
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr ""
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr ""
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr ""
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:50
#, fuzzy
#| msgid "Snikket Web Portal"
msgid "Snikket server status"
msgstr "Portal web de Snikket"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr ""
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr ""
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr ""
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
#, fuzzy #, fuzzy
#| msgid "The username is not valid" #| msgid "The username is not valid"
@@ -995,8 +1163,8 @@ msgstr ""
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "" msgstr ""
@@ -1056,7 +1224,6 @@ msgid "You can now log in using your new password."
msgstr "" msgstr ""
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "" msgstr ""
@@ -1086,7 +1253,6 @@ msgid ""
msgstr "" msgstr ""
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1135,6 +1301,39 @@ msgid ""
"password you chose during registration." "password you chose during registration."
msgstr "" msgstr ""
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
#: snikket_web/templates/invite_success.html:21
msgid "Import successful"
msgstr ""
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr ""
#: snikket_web/templates/invite_success.html:26
#, fuzzy
#| msgid "About Snikket"
msgid "Moving to Snikket?"
msgstr "Acerca de Snikket"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr ""
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1174,7 +1373,7 @@ msgid "Get it on Google Play"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "" msgstr ""
@@ -1205,11 +1404,11 @@ msgid "Scan invite code"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "" msgstr ""
@@ -1219,58 +1418,39 @@ msgid ""
"your camera. You can use either a QR scanner app or the Snikket app itself." "your camera. You can use either a QR scanner app or the Snikket app itself."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr ""
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr ""
#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
msgstr ""
#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "" msgstr ""
@@ -1282,10 +1462,6 @@ msgstr ""
msgid "Invalid input" msgid "Invalid input"
msgstr "" msgstr ""
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr ""
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1340,15 +1516,22 @@ msgstr ""
msgid "Edit profile" msgid "Edit profile"
msgstr "" msgstr ""
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage your data"
msgstr "Administrar usuarios"
#: snikket_web/templates/user_home.html:39
msgid "Your Snikket" msgid "Your Snikket"
msgstr "" msgstr ""
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "" msgstr ""
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
msgid "Admin panel" msgid "Admin panel"
msgstr "" msgstr ""
@@ -1362,6 +1545,18 @@ msgid ""
"other connected devices." "other connected devices."
msgstr "" msgstr ""
#: snikket_web/templates/user_manage_data.html:8
#, fuzzy
#| msgid "Create account"
msgid "Export account"
msgstr "Crear cuenta"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "" msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -7,299 +7,359 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-05-19 15:12+0000\n" "PO-Revision-Date: 2022-01-18 14:59+0000\n"
"Last-Translator: uira <inboxriau@andriana.id>\n" "Last-Translator: uira <inboxriau@andriana.id>\n"
"Language-Team: Indonesian <https://i18n.sotecware.net/projects/snikket/" "Language-Team: Indonesian <http://i18n.sotecware.net/projects/snikket/web-"
"web-portal/id/>\n" "portal/id/>\n"
"Language: id\n" "Language: id\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.5.1\n" "X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr "Terbatas"
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "Nama login" msgstr "Nama login"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "Nama tampilan" msgstr "Nama tampilan"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "Level akses" msgstr "Level akses"
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr "Terbatas"
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "Pengguna normal" msgstr "Pengguna normal"
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
msgid "Administrator" msgid "Administrator"
msgstr "Administrator" msgstr "Administrator"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
msgid "Update user" msgid "Update user"
msgstr "Memperbarui pengguna" msgstr "Memperbarui pengguna"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
msgid "Create password reset link" msgid "Create password reset link"
msgstr "Buat tautan setel ulang kata sandi" msgstr "Buat tautan setel ulang kata sandi"
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
msgid "Password reset link created" msgid "Password reset link created"
msgstr "Tautan setel ulang kata sandi dibuat" msgstr "Tautan setel ulang kata sandi dibuat"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
msgid "User information updated." msgid "User information updated."
msgstr "Informasi pengguna diperbarui." msgstr "Informasi pengguna diperbarui."
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "Hapus permanen pengguna" msgstr "Hapus permanen pengguna"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "Pengguna dihapus" msgstr "Pengguna dihapus"
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "Tautan setel ulang kata sandi tidak ditemukan" msgstr "Tautan setel ulang kata sandi tidak ditemukan"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "Tautan setel ulang kata sandi dihapus" msgstr "Tautan setel ulang kata sandi dihapus"
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "Undang masuk kelompok" msgstr "Undang masuk kelompok"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "Minimal satu kelompok harus dipilih" msgstr "Minimal satu kelompok harus dipilih"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "Valid selama" msgstr "Valid selama"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "Satu jam" msgstr "Satu jam"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "Dua belas jam" msgstr "Dua belas jam"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "Satu hari" msgstr "Satu hari"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "Satu minggu" msgstr "Satu minggu"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "Empat minggu" msgstr "Empat minggu"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "Jenis undangan" msgstr "Jenis undangan"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "Individu" msgstr "Individu"
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "Grup" msgstr "Grup"
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "Tautan undangan baru" msgstr "Tautan undangan baru"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "Batalkan" msgstr "Batalkan"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
msgid "Invitation created" msgid "Invitation created"
msgstr "Undangan dibuat" msgstr "Undangan dibuat"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "Undangan tidak tersedia" msgstr "Undangan tidak tersedia"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "Undangan dibatalkan" msgstr "Undangan dibatalkan"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "Nama" msgstr "Nama"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "Buat kelompok" msgstr "Buat kelompok"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
msgid "Circle created" msgid "Circle created"
msgstr "Kelompok dibuat" msgstr "Kelompok dibuat"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "Pilih pengguna" msgstr "Pilih pengguna"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "Memperbarui kelompok" msgstr "Memperbarui kelompok"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "Hapus kelompok secara permanen" msgstr "Hapus kelompok secara permanen"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "Tambah pengguna" msgstr "Tambah pengguna"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
msgid "No such circle exists" msgid "No such circle exists"
msgstr "Kelompok tersebut tidak ada" msgstr "Kelompok tersebut tidak ada"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
msgid "Circle data updated" msgid "Circle data updated"
msgstr "Data kelompok diperbarui" msgstr "Data kelompok diperbarui"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
msgid "Circle deleted" msgid "Circle deleted"
msgstr "Kelompok dihapus" msgstr "Kelompok dihapus"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
msgid "User added to circle" msgid "User added to circle"
msgstr "Pengguna ditambahkan ke kelompok" msgstr "Pengguna ditambahkan ke kelompok"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
msgid "User removed from circle" msgid "User removed from circle"
msgstr "Pengguna dihapus dari kelompok" msgstr "Pengguna dihapus dari kelompok"
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr "Isi pesan"
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr "Hanya kirim ke pengguna online"
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr "Kirim ke semua pengguna"
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr "Kirim pratinjau ke diri sendiri"
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr "Pengumuman terkirim!"
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "Utama" msgstr "Utama"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
"Data akun yang coba diimpor terlalu besar untuk diunggah. Silakan hubungi "
"operator Snikket Anda."
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "Nama pengguna" msgstr "Nama pengguna"
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "Kata sandi" msgstr "Kata sandi"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "Konfirmasi kata sandi" msgstr "Konfirmasi kata sandi"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
msgid "The passwords must match." msgid "The passwords must match."
msgstr "Kata sandi harus cocok." msgstr "Kata sandi harus cocok."
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "Buat akun" msgstr "Buat akun"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
msgid "That username is already taken." msgid "That username is already taken."
msgstr "Nama pengguna itu sudah dipakai." msgstr "Nama pengguna itu sudah dipakai."
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "Pendaftaran ditolak karena alasan yang tidak diketahui." msgstr "Pendaftaran ditolak karena alasan yang tidak diketahui."
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
msgid "The username is not valid." msgid "The username is not valid."
msgstr "Nama pengguna tidak valid." msgstr "Nama pengguna tidak valid."
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "Ganti kata sandi" msgstr "Ganti kata sandi"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr "File data akun"
#: snikket_web/invite.py:250
msgid "Import data"
msgstr "Impor data"
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
"Data akun yang coba diimpor dalam format yang tidak dikenal. Harap unggah "
"file XML dalam format XEP-0227 (format yang disediakan: %(mimetype)s)."
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr "Kesalahan"
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "Alamat" msgstr "Alamat"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "Masuk" msgstr "Masuk"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "Nama pengguna atau kata sandi salah." msgstr "Nama pengguna atau kata sandi salah."
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "Login berhasil!" msgstr "Login berhasil!"
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "Kata sandi sekarang" msgstr "Kata sandi sekarang"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "Kata sandi baru" msgstr "Kata sandi baru"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "Konfirmasi kata sandi" msgstr "Konfirmasi kata sandi"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "Kata sandi baru harus cocok." msgstr "Kata sandi baru harus cocok."
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "Keluar" msgstr "Keluar"
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "Tak seorangpun" msgstr "Tak seorangpun"
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "Hanya teman" msgstr "Hanya teman"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "Semua orang" msgstr "Semua orang"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "Gambar profil" msgstr "Gambar profil"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "Visibilitas profil" msgstr "Visibilitas profil"
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "Perbarui profil" msgstr "Perbarui profil"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr "Data akun"
#: snikket_web/user.py:86
msgid "Upload"
msgstr "Unggah"
#: snikket_web/user.py:111
msgid "Incorrect password." msgid "Incorrect password."
msgstr "Kata sandi salah." msgstr "Kata sandi salah."
#: snikket_web/user.py:103 #: snikket_web/user.py:115
msgid "Password changed" msgid "Password changed"
msgstr "Kata sandi diganti" msgstr "Kata sandi diganti"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
@@ -307,13 +367,17 @@ msgstr ""
"Avatar yang dipilih terlalu besar. Untuk dapat mengunggah avatar yang lebih " "Avatar yang dipilih terlalu besar. Untuk dapat mengunggah avatar yang lebih "
"besar, sila gunakan aplikasi." "besar, sila gunakan aplikasi."
#: snikket_web/user.py:159 #: snikket_web/user.py:170
msgid "Profile updated" msgid "Profile updated"
msgstr "Profil diperbarui" msgstr "Profil diperbarui"
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr "Kesalahan" msgstr "Ekspor"
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr "Anda tidak memiliki data akun untuk diekspor."
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
#, python-format #, python-format
@@ -407,7 +471,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "Versi perangkat lunak" msgstr "Versi perangkat lunak"
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "Kembali ke halaman depan" msgstr "Kembali ke halaman depan"
@@ -447,6 +511,7 @@ msgid "Members"
msgstr "Anggota" msgstr "Anggota"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -528,7 +593,7 @@ msgid "Delete user %(user_name)s"
msgstr "Hapus pengguna %(user_name)s" msgstr "Hapus pengguna %(user_name)s"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "Hapus pengguna" msgstr "Hapus pengguna"
@@ -553,6 +618,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -605,28 +671,37 @@ msgstr ""
msgid "Circle members" msgid "Circle members"
msgstr "Anggota kelompok" msgstr "Anggota kelompok"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr "Pengguna telah dihapus dari server"
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "Dihapus"
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "Hapus pengguna %(username)s dari kelompok" msgstr "Hapus pengguna %(username)s dari kelompok"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "Kelompok ini sedang tidak memiliki anggota." msgstr "Kelompok ini sedang tidak memiliki anggota."
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "Ajak lebih banyak anggota" msgstr "Ajak lebih banyak anggota"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "Tambahkan pengguna yang ada" msgstr "Tambahkan pengguna yang ada"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "Semua pengguna ditambahkan" msgstr "Semua pengguna ditambahkan"
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "Semua pengguna layanan ini sudah ada di kelompok ini." msgstr "Semua pengguna layanan ini sudah ada di kelompok ini."
@@ -710,15 +785,15 @@ msgstr "Seperti pengguna biasa dan dapat mengakses panel admin di portal web."
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "Edit pengguna %(user_name)s" msgstr "Edit pengguna %(user_name)s"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
msgid "Edit user" msgid "Edit user"
msgstr "Edit pengguna" msgstr "Edit pengguna"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "Nama login tidak dapat diganti." msgstr "Nama login tidak dapat diganti."
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
@@ -726,24 +801,24 @@ msgstr ""
"Level akses pengguna menentukan interaksi apa yang diizinkan untuk mereka di " "Level akses pengguna menentukan interaksi apa yang diizinkan untuk mereka di "
"layanan Snikket Anda." "layanan Snikket Anda."
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
msgid "Return to user list" msgid "Return to user list"
msgstr "Kembali ke daftar pengguna" msgstr "Kembali ke daftar pengguna"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "Tindakan lanjutan" msgstr "Tindakan lanjutan"
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
msgid "Reset password" msgid "Reset password"
msgstr "Setel kata sandi" msgstr "Setel kata sandi"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to create " "If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once." "a special link which allows to change the password of the account, once."
@@ -752,11 +827,11 @@ msgstr ""
"untuk membuat tautan khusus yang memungkinkan untuk mengubah kata sandi " "untuk membuat tautan khusus yang memungkinkan untuk mengubah kata sandi "
"akun, sekali." "akun, sekali."
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
msgid "Debug information" msgid "Debug information"
msgstr "Informasi debug" msgstr "Informasi debug"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
@@ -766,7 +841,7 @@ msgstr ""
"yang terhubung diperlukan untuk memecahkan masalah. Tombol di bawah " "yang terhubung diperlukan untuk memecahkan masalah. Tombol di bawah "
"mengungkapkan informasi (sensitif) ini." "mengungkapkan informasi (sensitif) ini."
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
msgid "Show debug information" msgid "Show debug information"
msgstr "Tampilkan informasi debug" msgstr "Tampilkan informasi debug"
@@ -809,11 +884,28 @@ msgstr "Buat, batalkan, atau salin undangan."
msgid "Manage invitations" msgid "Manage invitations"
msgstr "Kelola undangan" msgstr "Kelola undangan"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr "Kesehatan sistem"
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr "Lihat status server atau kirim pesan siaran ke semua pengguna."
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr "Kirim pesan siaran ke semua pengguna."
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
msgid "Manage system"
msgstr "Kelola sistem"
#: snikket_web/templates/admin_home.html:48
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." msgstr "Kembali ke halaman portal web pengguna."
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "Keluar panel administrator" msgstr "Keluar panel administrator"
@@ -866,6 +958,86 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "Hancurkan tautan" msgstr "Hancurkan tautan"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr "Kesehatan sistem keseluruhan"
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr "Beban sistem (rata-rata 5 menit)"
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr "Tidak diketahui"
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr "Penggunaan memori"
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
"%(percentage_global)s of %(mem_available)s. Dari jumlah itu, Snikket "
"menggunakan %(percentage_snikket)s."
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr "Status portal web"
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr "Versi"
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr "Lihat versi semua"
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr "Penggunaan CPU rata-rata"
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr "Penggunaan CPU rata-rata"
#: snikket_web/templates/admin_system.html:50
msgid "Snikket server status"
msgstr "Status server Snikket"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr "Penyimpanan yang digunakan oleh file bersama"
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr "Perangkat terhubung"
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr "Sebarkan pesan"
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
"Form ini memungkinkan mengirim pesan ke semua pengguna yang saat ini online "
"di server Snikket Anda. Gunakan dengan bijak."
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
msgid "The user is an administrator." msgid "The user is an administrator."
msgstr "Pengguna adalah administrator." msgstr "Pengguna adalah administrator."
@@ -976,8 +1148,8 @@ msgstr "Aplikasi sudah dipasang?"
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "Buka aplikasi" msgstr "Buka aplikasi"
@@ -1044,7 +1216,6 @@ msgid "You can now log in using your new password."
msgstr "Anda dapat masuk menggunakan kata sandi baru Anda." msgstr "Anda dapat masuk menggunakan kata sandi baru Anda."
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "Sekarang Anda dapat menutup halaman ini." msgstr "Sekarang Anda dapat menutup halaman ini."
@@ -1080,7 +1251,6 @@ msgstr ""
"tombol Pindai di bagian atas." "tombol Pindai di bagian atas."
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1136,6 +1306,44 @@ msgstr ""
"Sekarang anda dapat mempersiapkan aplikasi XMPP lawas Anda dengan alamat di " "Sekarang anda dapat mempersiapkan aplikasi XMPP lawas Anda dengan alamat di "
"atas dan kata sandi yang dipilih saat pendaftaran." "atas dan kata sandi yang dipilih saat pendaftaran."
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
"Anda dapat menutup halaman ini dengan aman, atau masuk ke portal web untuk "
"<a href=\"%(login_url)s\">mengelola akun anda</a>."
#: snikket_web/templates/invite_success.html:21
msgid "Import successful"
msgstr "Impor berhasil"
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr "Selamat! Data akun Anda telah berhasil diimpor."
#: snikket_web/templates/invite_success.html:26
msgid "Moving to Snikket?"
msgstr "Pindahkan ke Snikket?"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
"Jika Anda berpindah dari instans Snikket yang berbeda atau layanan lain yang "
"kompatibel dengan XMPP, Anda memiliki pilihan mengimpor data (kontak, "
"informasi profil, dll.) dari akun Anda sebelumnya. Ketika Anda telah "
"mengekspor data dari akun Anda sebelumnya, unggah menggunakan form di bawah "
"ini."
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr "Unggah data akun"
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1181,7 +1389,7 @@ msgid "Get it on Google Play"
msgstr "Dapatkan di Google Play" msgstr "Dapatkan di Google Play"
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "Unduh di App Store" msgstr "Unduh di App Store"
@@ -1217,11 +1425,11 @@ msgid "Scan invite code"
msgstr "Pindai kode undangan" msgstr "Pindai kode undangan"
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "Tutup" msgstr "Tutup"
@@ -1234,34 +1442,11 @@ msgstr ""
"kode dengan kamera. Anda dapat menggunakan aplikasi pemindai QR atau " "kode dengan kamera. Anda dapat menggunakan aplikasi pemindai QR atau "
"aplikasi Snikket." "aplikasi Snikket."
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr "Menggunakan pemindai kode QR"
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr "Menggunakan Snikket"
#: snikket_web/templates/invite_view.html:70
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:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
"Instal aplikasi Snikket di perangkat seluler Anda, buka, dan ketuk tombol "
"'Pindai'."
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "Pasang di iOS" msgstr "Pasang di iOS"
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
@@ -1269,12 +1454,12 @@ msgstr ""
"Setelah mengunduh Snikket dari App Store, Anda harus kembali ke tautan " "Setelah mengunduh Snikket dari App Store, Anda harus kembali ke tautan "
"undangan ini dan klik \"Buka aplikasi\" untuk melanjutkan." "undangan ini dan klik \"Buka aplikasi\" untuk melanjutkan."
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "Pertama, unduh Snikket dari App Store menggunakan tombol di bawah ini:" msgstr "Pertama, unduh Snikket dari App Store menggunakan tombol di bawah ini:"
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
@@ -1282,12 +1467,12 @@ msgstr ""
"Setelah instalasi selesai, Anda dapat kembali ke halaman ini dan mengetuk " "Setelah instalasi selesai, Anda dapat kembali ke halaman ini dan mengetuk "
"tombol \"Buka aplikasi\" untuk melanjutkan pemasangan:" "tombol \"Buka aplikasi\" untuk melanjutkan pemasangan:"
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "Install melalui F-Droid" msgstr "Install melalui F-Droid"
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
@@ -1295,7 +1480,7 @@ msgstr ""
"Setelah menginstal Snikket melalui F-Droid, Anda harus kembali ke tautan " "Setelah menginstal Snikket melalui F-Droid, Anda harus kembali ke tautan "
"undangan ini dan ketuk \"Buka aplikasi\" untuk melanjutkan." "undangan ini dan ketuk \"Buka aplikasi\" untuk melanjutkan."
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "Pertama install Snikket dari F-Droid menggunakan tombol di bawah ini:" msgstr "Pertama install Snikket dari F-Droid menggunakan tombol di bawah ini:"
@@ -1307,10 +1492,6 @@ msgstr "Salin tautan"
msgid "Invalid input" msgid "Invalid input"
msgstr "Input tidak valid" msgstr "Input tidak valid"
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "Dihapus"
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1366,15 +1547,20 @@ msgstr "Alamat XMPP anda"
msgid "Edit profile" msgid "Edit profile"
msgstr "Edit profil" msgstr "Edit profil"
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
msgid "Manage your data"
msgstr "Kelola data anda"
#: snikket_web/templates/user_home.html:39
msgid "Your Snikket" msgid "Your Snikket"
msgstr "Snikket anda" msgstr "Snikket anda"
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "Kelola pengguna, undangan dan kelompok pengguna layanan Snikket." msgstr "Kelola pengguna, undangan dan kelompok pengguna layanan Snikket."
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
msgid "Admin panel" msgid "Admin panel"
msgstr "Panel Administrator" msgstr "Panel Administrator"
@@ -1390,6 +1576,18 @@ msgstr ""
"Klik tombol untuk keluar dari portal web. Ini tidak mempengaruhi perangkat " "Klik tombol untuk keluar dari portal web. Ini tidak mempengaruhi perangkat "
"lain yang terhubung." "lain yang terhubung."
#: snikket_web/templates/user_manage_data.html:8
msgid "Export account"
msgstr "Ekspor akun"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
"Unduh data akun sebagai file untuk backup atau untuk memindahkan akun Anda "
"ke layanan lain."
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "Ganti kata sandi anda" msgstr "Ganti kata sandi anda"
@@ -1432,6 +1630,26 @@ msgstr ""
"Bagian ini memungkinkan Anda untuk mengontrol siapa yang bisa melihat profil " "Bagian ini memungkinkan Anda untuk mengontrol siapa yang bisa melihat profil "
"Anda, seperti avatar dan nama panggilan." "Anda, seperti avatar dan nama panggilan."
#~ msgid "Using a QR code scanner"
#~ msgstr "Menggunakan pemindai kode QR"
#~ msgid "Using the Snikket app"
#~ msgstr "Menggunakan Snikket"
#~ 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:"
#~ msgid ""
#~ "Install the Snikket app on your mobile device, open it, and tap the "
#~ "'Scan' button at the top."
#~ msgstr ""
#~ "Instal aplikasi Snikket di perangkat seluler Anda, buka, dan ketuk tombol "
#~ "'Pindai'."
#~ msgid "Create password reset link for %(user_name)s" #~ msgid "Create password reset link for %(user_name)s"
#~ msgstr "Buat tautan setel ulang kata sandi untuk %(user_name)s" #~ msgstr "Buat tautan setel ulang kata sandi untuk %(user_name)s"

View File

@@ -7,11 +7,11 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-05-19 15:12+0000\n" "PO-Revision-Date: 2021-05-19 15:12+0000\n"
"Last-Translator: Roberto Resoli <roberto@resolutions.it>\n" "Last-Translator: Roberto Resoli <roberto@resolutions.it>\n"
"Language-Team: Italian <https://i18n.sotecware.net/projects/snikket/" "Language-Team: Italian <https://i18n.sotecware.net/projects/snikket/web-"
"web-portal/it/>\n" "portal/it/>\n"
"Language: it\n" "Language: it\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,286 +20,342 @@ msgstr ""
"X-Generator: Weblate 4.5.1\n" "X-Generator: Weblate 4.5.1\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr "Limitato"
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "Nome utente" msgstr "Nome utente"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "Nome visualizzato" msgstr "Nome visualizzato"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "Livello di accesso" msgstr "Livello di accesso"
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr "Limitato"
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "Utente normale" msgstr "Utente normale"
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
msgid "Administrator" msgid "Administrator"
msgstr "Amministratore" msgstr "Amministratore"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
msgid "Update user" msgid "Update user"
msgstr "Aggiorna utente" msgstr "Aggiorna utente"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
msgid "Create password reset link" msgid "Create password reset link"
msgstr "Crea collegamento per reimpostare la password" msgstr "Crea collegamento per reimpostare la password"
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
msgid "Password reset link created" msgid "Password reset link created"
msgstr "Creato collegamento per reimpostare la password" msgstr "Creato collegamento per reimpostare la password"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
msgid "User information updated." msgid "User information updated."
msgstr "Informazioni utente aggiornate." msgstr "Informazioni utente aggiornate."
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "Elimina definitivamente l'utente" msgstr "Elimina definitivamente l'utente"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "Utente rimosso" msgstr "Utente rimosso"
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "Collegamento per reimpostare la password non trovato" msgstr "Collegamento per reimpostare la password non trovato"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "Eliminato collegamento per reimpostare la password" msgstr "Eliminato collegamento per reimpostare la password"
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "Invita nella cerchia" msgstr "Invita nella cerchia"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "Devi selezionare almeno una cerchia" msgstr "Devi selezionare almeno una cerchia"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "Valido per" msgstr "Valido per"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "Un'ora" msgstr "Un'ora"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "Dodici ore" msgstr "Dodici ore"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "Un giorno" msgstr "Un giorno"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "Una settimana" msgstr "Una settimana"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "Quattro settimane" msgstr "Quattro settimane"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "Tipo di invito" msgstr "Tipo di invito"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "Individuale" msgstr "Individuale"
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "Gruppo" msgstr "Gruppo"
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "Nuovo collegamento di invito" msgstr "Nuovo collegamento di invito"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "Revoca" msgstr "Revoca"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
msgid "Invitation created" msgid "Invitation created"
msgstr "Invito creato" msgstr "Invito creato"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "Questo invito non esiste" msgstr "Questo invito non esiste"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "Invito revocato" msgstr "Invito revocato"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "Nome" msgstr "Nome"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "Crea cerchia" msgstr "Crea cerchia"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
msgid "Circle created" msgid "Circle created"
msgstr "Cerchia creata" msgstr "Cerchia creata"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "Seleziona utente" msgstr "Seleziona utente"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "Modifica cerchia" msgstr "Modifica cerchia"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "Elimina cerchia definitivamente" msgstr "Elimina cerchia definitivamente"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "Aggiungi utente" msgstr "Aggiungi utente"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
msgid "No such circle exists" msgid "No such circle exists"
msgstr "Questa cerchia non esiste" msgstr "Questa cerchia non esiste"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
msgid "Circle data updated" msgid "Circle data updated"
msgstr "Dati della cerchia aggiornati" msgstr "Dati della cerchia aggiornati"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
msgid "Circle deleted" msgid "Circle deleted"
msgstr "Cerchia eliminata" msgstr "Cerchia eliminata"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
msgid "User added to circle" msgid "User added to circle"
msgstr "Utente aggiunto alla cerchia" msgstr "Utente aggiunto alla cerchia"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
msgid "User removed from circle" msgid "User removed from circle"
msgstr "Utente rimosso dalla cerchia" msgstr "Utente rimosso dalla cerchia"
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr ""
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr ""
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr ""
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr ""
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr ""
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "Principale" msgstr "Principale"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "Nome utente" msgstr "Nome utente"
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "Password" msgstr "Password"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "Conferma password" msgstr "Conferma password"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
msgid "The passwords must match." msgid "The passwords must match."
msgstr "Le password devono essere identiche." msgstr "Le password devono essere identiche."
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "Crea utenza" msgstr "Crea utenza"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
msgid "That username is already taken." msgid "That username is already taken."
msgstr "Nome utente già in uso." msgstr "Nome utente già in uso."
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "Registrazione rifiutata per motivi sconosciuti." msgstr "Registrazione rifiutata per motivi sconosciuti."
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
msgid "The username is not valid." msgid "The username is not valid."
msgstr "Nome utente non valido." msgstr "Nome utente non valido."
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "Cambia password" msgstr "Cambia password"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr ""
#: snikket_web/invite.py:250
msgid "Import data"
msgstr ""
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr "Errore"
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "Indirizzo" msgstr "Indirizzo"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "Accedi" msgstr "Accedi"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "Nome utente o password non validi." msgstr "Nome utente o password non validi."
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "Accesso riuscito!" msgstr "Accesso riuscito!"
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "Password attuale" msgstr "Password attuale"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "Nuova password" msgstr "Nuova password"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "Conferma nuova password" msgstr "Conferma nuova password"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "Le nuove password devono essere identiche." msgstr "Le nuove password devono essere identiche."
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "Esci" msgstr "Esci"
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "Nessuno" msgstr "Nessuno"
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "Solo amici" msgstr "Solo amici"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "Chiunque" msgstr "Chiunque"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "Avatar" msgstr "Avatar"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "Visibilità del profilo" msgstr "Visibilità del profilo"
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "Modifica profilo" msgstr "Modifica profilo"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr ""
#: snikket_web/user.py:86
msgid "Upload"
msgstr ""
#: snikket_web/user.py:111
msgid "Incorrect password." msgid "Incorrect password."
msgstr "Password errata." msgstr "Password errata."
#: snikket_web/user.py:103 #: snikket_web/user.py:115
msgid "Password changed" msgid "Password changed"
msgstr "Password cambiata" msgstr "Password cambiata"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
@@ -307,13 +363,17 @@ msgstr ""
"L'avatar scelto è troppo grande. Per utilizzare un avatar così grande, " "L'avatar scelto è troppo grande. Per utilizzare un avatar così grande, "
"utilizzate l'app." "utilizzate l'app."
#: snikket_web/user.py:159 #: snikket_web/user.py:170
msgid "Profile updated" msgid "Profile updated"
msgstr "Profilo aggiornato" msgstr "Profilo aggiornato"
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr "Errore" msgstr ""
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr ""
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
#, python-format #, python-format
@@ -406,7 +466,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "Versioni dei programmi" msgstr "Versioni dei programmi"
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "Torna alla pagina principale" msgstr "Torna alla pagina principale"
@@ -446,6 +506,7 @@ msgid "Members"
msgstr "Membri" msgstr "Membri"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -527,7 +588,7 @@ msgid "Delete user %(user_name)s"
msgstr "Elimina utente %(user_name)s" msgstr "Elimina utente %(user_name)s"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "Elimina utente" msgstr "Elimina utente"
@@ -552,6 +613,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -603,28 +665,37 @@ msgstr "Eliminare una cerchia non elimina nessuno dei suoi utenti."
msgid "Circle members" msgid "Circle members"
msgstr "Membri della cerchia" msgstr "Membri della cerchia"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr ""
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "rimosso"
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "Rimuovi l'utente %(username)s dalla cerchia" msgstr "Rimuovi l'utente %(username)s dalla cerchia"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "Al momento questa cerchia non contiene membri." msgstr "Al momento questa cerchia non contiene membri."
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "Invita altri membri" msgstr "Invita altri membri"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "Aggiungi un utente esistente" msgstr "Aggiungi un utente esistente"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "Tutti gli utenti sono stati aggiunti" msgstr "Tutti gli utenti sono stati aggiunti"
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "Tutti gli utenti di questo servizio sono già in questa cerchia." msgstr "Tutti gli utenti di questo servizio sono già in questa cerchia."
@@ -709,15 +780,15 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "Modifica utente %(user_name)s" msgstr "Modifica utente %(user_name)s"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
msgid "Edit user" msgid "Edit user"
msgstr "Modifica utente" msgstr "Modifica utente"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "Il nome di login non può essere cambiato." msgstr "Il nome di login non può essere cambiato."
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
@@ -725,24 +796,24 @@ msgstr ""
"Il livello di accesso di un utente determina quali interazioni gli sono " "Il livello di accesso di un utente determina quali interazioni gli sono "
"consentite sul tuo servizio Snikket." "consentite sul tuo servizio Snikket."
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
msgid "Return to user list" msgid "Return to user list"
msgstr "Ritorna alla lista utenti" msgstr "Ritorna alla lista utenti"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "Azioni ulteriori" msgstr "Azioni ulteriori"
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
msgid "Reset password" msgid "Reset password"
msgstr "Reimposta la password" msgstr "Reimposta la password"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to create " "If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once." "a special link which allows to change the password of the account, once."
@@ -751,11 +822,11 @@ msgstr ""
"sotto per creare un link speciale che permette di cambiare la password " "sotto per creare un link speciale che permette di cambiare la password "
"dell'account, una sola volta." "dell'account, una sola volta."
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
msgid "Debug information" msgid "Debug information"
msgstr "Informazioni diagnostiche" msgstr "Informazioni diagnostiche"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
@@ -765,7 +836,7 @@ msgstr ""
"collegati sono necessarie per risolvere i problemi. Il pulsante qui sotto " "collegati sono necessarie per risolvere i problemi. Il pulsante qui sotto "
"rivela queste informazioni (sensibili)." "rivela queste informazioni (sensibili)."
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
msgid "Show debug information" msgid "Show debug information"
msgstr "Mostra informazioni diagnostiche" msgstr "Mostra informazioni diagnostiche"
@@ -808,11 +879,30 @@ msgstr "Crea, revoca o copia inviti."
msgid "Manage invitations" msgid "Manage invitations"
msgstr "Gestisci inviti" msgstr "Gestisci inviti"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr ""
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage system"
msgstr "Gestisci utenti"
#: snikket_web/templates/admin_home.html:48
msgid "Go back to your user's web portal page." msgid "Go back to your user's web portal page."
msgstr "Torna al tuo portale utente." msgstr "Torna al tuo portale utente."
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "Esci dal pannello amministrativo" msgstr "Esci dal pannello amministrativo"
@@ -865,6 +955,84 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "Elimina collegamento" msgstr "Elimina collegamento"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr ""
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr ""
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr ""
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr ""
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr ""
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr ""
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr ""
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:50
#, fuzzy
#| msgid "Snikket Web Portal"
msgid "Snikket server status"
msgstr "Portale Web di Snikket"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr ""
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr ""
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr ""
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
msgid "The user is an administrator." msgid "The user is an administrator."
msgstr "L'utente è un amministratore." msgstr "L'utente è un amministratore."
@@ -975,8 +1143,8 @@ msgstr "Applicazione già installata?"
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "Apri l'applicazione" msgstr "Apri l'applicazione"
@@ -1043,7 +1211,6 @@ msgid "You can now log in using your new password."
msgstr "Ora puoi collegarti utilizzando la nuova password." msgstr "Ora puoi collegarti utilizzando la nuova password."
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "Puoi chiudere questa pagina in tutta sicurezza." msgstr "Puoi chiudere questa pagina in tutta sicurezza."
@@ -1079,7 +1246,6 @@ msgstr ""
"Snikket utilizzando il pulsante di scansione in alto." "Snikket utilizzando il pulsante di scansione in alto."
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1137,6 +1303,41 @@ msgstr ""
"Ora puoi impostare il tuo client XMPP con l'indirizzo mostrato sopra e la " "Ora puoi impostare il tuo client XMPP con l'indirizzo mostrato sopra e la "
"password che hai impostato durante la registrazione." "password che hai impostato durante la registrazione."
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
#: snikket_web/templates/invite_success.html:21
#, fuzzy
#| msgid "Operation successful"
msgid "Import successful"
msgstr "Operazione completata"
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr ""
#: snikket_web/templates/invite_success.html:26
#, fuzzy
#| msgid "Using the Snikket app"
msgid "Moving to Snikket?"
msgstr "Usa l'applicazione Snikket"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr ""
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1184,7 +1385,7 @@ msgid "Get it on Google Play"
msgstr "Scarica da Google Play" msgstr "Scarica da Google Play"
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "Scarica dall'App Store" msgstr "Scarica dall'App Store"
@@ -1221,11 +1422,11 @@ msgid "Scan invite code"
msgstr "Scansiona il codice di invito" msgstr "Scansiona il codice di invito"
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "Chiudi" msgstr "Chiudi"
@@ -1238,34 +1439,11 @@ msgstr ""
"con la fotocamera. Puoi usare un lettore di codici QR o l'applicazione " "con la fotocamera. Puoi usare un lettore di codici QR o l'applicazione "
"Snikket stessa." "Snikket stessa."
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr "Usa un lettore di codici QR"
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr "Usa l'applicazione Snikket"
#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
msgstr ""
"Usa un lettore di <em>codici QR</em> sul tuo dispositivo mobile per "
"scansionare il seguente codice:"
#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
"Installa l'applicazione Snikket sul tuo dispositivo mobile, aprila e poi "
"premi il pulsante di scansione in alto."
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "Installa su iOS" msgstr "Installa su iOS"
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
@@ -1273,14 +1451,14 @@ msgstr ""
"Dopo aver scaricato Snikket dall'App Store, devi tornare a questo link di " "Dopo aver scaricato Snikket dall'App Store, devi tornare a questo link di "
"invito e toccare \"Apri nell'app\" per procedere." "invito e toccare \"Apri nell'app\" per procedere."
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "" msgstr ""
"Per prima cosa, scarica Snikket dall'App Store utilizzando il pulsante qui " "Per prima cosa, scarica Snikket dall'App Store utilizzando il pulsante qui "
"sotto:" "sotto:"
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
@@ -1288,12 +1466,12 @@ msgstr ""
"Dopo che l'installazione è completa, puoi tornare a questa pagina e toccare " "Dopo che l'installazione è completa, puoi tornare a questa pagina e toccare "
"il pulsante \"Apri nell'app\" per continuare con la configurazione:" "il pulsante \"Apri nell'app\" per continuare con la configurazione:"
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "Installa da F-Droid" msgstr "Installa da F-Droid"
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
@@ -1301,7 +1479,7 @@ msgstr ""
"Dopo aver installato Snikket da F-Droid, devi tornare a questo link di " "Dopo aver installato Snikket da F-Droid, devi tornare a questo link di "
"invito e toccare su \"Apri nell'app\" per procedere." "invito e toccare su \"Apri nell'app\" per procedere."
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "" msgstr ""
"Per prima cosa installa Snikket da F-Droid utilizzando il pulsante qui sotto:" "Per prima cosa installa Snikket da F-Droid utilizzando il pulsante qui sotto:"
@@ -1314,10 +1492,6 @@ msgstr "Copia collegamento"
msgid "Invalid input" msgid "Invalid input"
msgstr "Dati non validi" msgstr "Dati non validi"
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "rimosso"
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1376,15 +1550,22 @@ msgstr "Il tuo indirizzo XMPP"
msgid "Edit profile" msgid "Edit profile"
msgstr "Modifica profilo" msgstr "Modifica profilo"
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage your data"
msgstr "Gestisci utenti"
#: snikket_web/templates/user_home.html:39
msgid "Your Snikket" msgid "Your Snikket"
msgstr "Il tuo Snikket" msgstr "Il tuo Snikket"
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "Gestisci utenti, inviti e cerchie del tuo servizio Snikket." msgstr "Gestisci utenti, inviti e cerchie del tuo servizio Snikket."
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
msgid "Admin panel" msgid "Admin panel"
msgstr "Pannello amministrativo" msgstr "Pannello amministrativo"
@@ -1400,6 +1581,18 @@ msgstr ""
"Premi il pulsante sottostante per uscire dal portale web. Non ha effetto " "Premi il pulsante sottostante per uscire dal portale web. Non ha effetto "
"sugli altri dispositivi collegati." "sugli altri dispositivi collegati."
#: snikket_web/templates/user_manage_data.html:8
#, fuzzy
#| msgid "Your account"
msgid "Export account"
msgstr "La tua utenza"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "Modifica la tua password" msgstr "Modifica la tua password"
@@ -1442,6 +1635,26 @@ msgstr ""
"Questa sezione ti permette di controllare chi può visualizzare i dettagli " "Questa sezione ti permette di controllare chi può visualizzare i dettagli "
"del tuo profilo, come ad esempio l'avatar o il soprannome." "del tuo profilo, come ad esempio l'avatar o il soprannome."
#~ msgid "Using a QR code scanner"
#~ msgstr "Usa un lettore di codici QR"
#~ msgid "Using the Snikket app"
#~ msgstr "Usa l'applicazione Snikket"
#~ msgid ""
#~ "Use a <em>QR code</em> scanner on your mobile device to scan the code "
#~ "below:"
#~ msgstr ""
#~ "Usa un lettore di <em>codici QR</em> sul tuo dispositivo mobile per "
#~ "scansionare il seguente codice:"
#~ msgid ""
#~ "Install the Snikket app on your mobile device, open it, and tap the "
#~ "'Scan' button at the top."
#~ msgstr ""
#~ "Installa l'applicazione Snikket sul tuo dispositivo mobile, aprila e poi "
#~ "premi il pulsante di scansione in alto."
#~ msgid "Create password reset link for %(user_name)s" #~ msgid "Create password reset link for %(user_name)s"
#~ msgstr "Crea collegamento per reimpostare la password di %(user_name)s" #~ msgstr "Crea collegamento per reimpostare la password di %(user_name)s"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-01-28 17:55+0000\n" "PO-Revision-Date: 2021-01-28 17:55+0000\n"
"Last-Translator: pep <pep@bouah.net>\n" "Last-Translator: pep <pep@bouah.net>\n"
"Language-Team: Japanese <https://i18n.sotecware.net/projects/snikket/web-" "Language-Team: Japanese <https://i18n.sotecware.net/projects/snikket/web-"
@@ -20,345 +20,405 @@ msgstr ""
"X-Generator: Weblate 4.4.2\n" "X-Generator: Weblate 4.4.2\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr ""
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "ロゲイン名" msgstr "ロゲイン名"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "表示名" msgstr "表示名"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "" msgstr ""
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr ""
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "" msgstr ""
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
#, fuzzy #, fuzzy
#| msgid "Admin area" #| msgid "Admin area"
msgid "Administrator" msgid "Administrator"
msgstr "管理" msgstr "管理"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
#, fuzzy #, fuzzy
#| msgid "Update circle" #| msgid "Update circle"
msgid "Update user" msgid "Update user"
msgstr "サークルを更新" msgstr "サークルを更新"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
#, fuzzy #, fuzzy
#| msgid "Password reset link for %(user_name)s" #| msgid "Password reset link for %(user_name)s"
msgid "Create password reset link" msgid "Create password reset link"
msgstr "%(user_name)s のパスワード再設定リンク" msgstr "%(user_name)s のパスワード再設定リンク"
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
#, fuzzy #, fuzzy
#| msgid "Password reset link for %(user_name)s" #| msgid "Password reset link for %(user_name)s"
msgid "Password reset link created" msgid "Password reset link created"
msgstr "%(user_name)s のパスワード再設定リンク" msgstr "%(user_name)s のパスワード再設定リンク"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
#, fuzzy #, fuzzy
#| msgid "User information" #| msgid "User information"
msgid "User information updated." msgid "User information updated."
msgstr "ユーザー詳細" msgstr "ユーザー詳細"
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "ユーザーを削除する" msgstr "ユーザーを削除する"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "" msgstr ""
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
#, fuzzy #, fuzzy
#| msgid "Password reset link for %(user_name)s" #| msgid "Password reset link for %(user_name)s"
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "%(user_name)s のパスワード再設定リンク" msgstr "%(user_name)s のパスワード再設定リンク"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
#, fuzzy #, fuzzy
#| msgid "Password reset link for %(user_name)s" #| msgid "Password reset link for %(user_name)s"
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "%(user_name)s のパスワード再設定リンク" msgstr "%(user_name)s のパスワード再設定リンク"
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "サークルに紹介する" msgstr "サークルに紹介する"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "サークルを選択してください" msgstr "サークルを選択してください"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "有効期限" msgstr "有効期限"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "一時間" msgstr "一時間"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "12時間" msgstr "12時間"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "一日" msgstr "一日"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "一週間" msgstr "一週間"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "4週間" msgstr "4週間"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "紹介の種類" msgstr "紹介の種類"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "一回" msgstr "一回"
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "複数回" msgstr "複数回"
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "新しい紹介状" msgstr "新しい紹介状"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "取り消す" msgstr "取り消す"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
#, fuzzy #, fuzzy
#| msgid "Invitation type" #| msgid "Invitation type"
msgid "Invitation created" msgid "Invitation created"
msgstr "紹介の種類" msgstr "紹介の種類"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
#, fuzzy #, fuzzy
#| msgid "New invitation link" #| msgid "New invitation link"
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "新しい紹介状" msgstr "新しい紹介状"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
#, fuzzy #, fuzzy
#| msgid "Invitation type" #| msgid "Invitation type"
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "紹介の種類" msgstr "紹介の種類"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "名" msgstr "名"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "サークルを作成" msgstr "サークルを作成"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
#, fuzzy #, fuzzy
#| msgid "Circle name" #| msgid "Circle name"
msgid "Circle created" msgid "Circle created"
msgstr "サークル名" msgstr "サークル名"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "ユーザー選択" msgstr "ユーザー選択"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "サークルを更新" msgstr "サークルを更新"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "サークルを削除" msgstr "サークルを削除"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "ユーザーを追加する" msgstr "ユーザーを追加する"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
#, fuzzy #, fuzzy
#| msgid "No circles" #| msgid "No circles"
msgid "No such circle exists" msgid "No such circle exists"
msgstr "なし" msgstr "なし"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
#, fuzzy #, fuzzy
#| msgid "Circle name" #| msgid "Circle name"
msgid "Circle data updated" msgid "Circle data updated"
msgstr "サークル名" msgstr "サークル名"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
#, fuzzy #, fuzzy
#| msgid "Circle members" #| msgid "Circle members"
msgid "Circle deleted" msgid "Circle deleted"
msgstr "サークル会員" msgstr "サークル会員"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
#, fuzzy #, fuzzy
#| msgid "Invite to circle" #| msgid "Invite to circle"
msgid "User added to circle" msgid "User added to circle"
msgstr "サークルに紹介する" msgstr "サークルに紹介する"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
#, fuzzy #, fuzzy
#| msgid "Remove user %(username)s from circle" #| msgid "Remove user %(username)s from circle"
msgid "User removed from circle" msgid "User removed from circle"
msgstr "%(username)s をサークルから外す" msgstr "%(username)s をサークルから外す"
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr ""
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr ""
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr ""
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr ""
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr ""
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "第一サークル" msgstr "第一サークル"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "ユーザー名" msgstr "ユーザー名"
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "パスワード" msgstr "パスワード"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "確認用パスワード" msgstr "確認用パスワード"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
#, fuzzy #, fuzzy
#| msgid "The passwords must match" #| msgid "The passwords must match"
msgid "The passwords must match." msgid "The passwords must match."
msgstr "確認用パスワードが一致しません" msgstr "確認用パスワードが一致しません"
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "アカウント作成" msgstr "アカウント作成"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
#, fuzzy #, fuzzy
#| msgid "That username is already taken" #| msgid "That username is already taken"
msgid "That username is already taken." msgid "That username is already taken."
msgstr "このユーザー名は存在しています" msgstr "このユーザー名は存在しています"
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
#, fuzzy #, fuzzy
#| msgid "Registration was declined for unknown reasons" #| msgid "Registration was declined for unknown reasons"
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "理由不明の登録エラー" msgstr "理由不明の登録エラー"
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
#, fuzzy #, fuzzy
#| msgid "The username is not valid" #| msgid "The username is not valid"
msgid "The username is not valid." msgid "The username is not valid."
msgstr "ユーザー名が不正" msgstr "ユーザー名が不正"
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "パスワード変更" msgstr "パスワード変更"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr ""
#: snikket_web/invite.py:250
msgid "Import data"
msgstr ""
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr ""
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "アドレス" msgstr "アドレス"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "サインイン" msgstr "サインイン"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "ユーザー名またはパスワードが不正。" msgstr "ユーザー名またはパスワードが不正。"
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "" msgstr ""
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "現在のパスワード" msgstr "現在のパスワード"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "新しいパスワード" msgstr "新しいパスワード"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "新しいパスワードの確認" msgstr "新しいパスワードの確認"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
#, fuzzy #, fuzzy
#| msgid "The new passwords must match" #| msgid "The new passwords must match"
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "新しいパスワードが不一致" msgstr "新しいパスワードが不一致"
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "サインアウト" msgstr "サインアウト"
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "" msgstr ""
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "コンタクト限定" msgstr "コンタクト限定"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "全員" msgstr "全員"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "アバター" msgstr "アバター"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "" msgstr ""
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "プロファイル管理" msgstr "プロファイル管理"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr ""
#: snikket_web/user.py:86
msgid "Upload"
msgstr ""
#: snikket_web/user.py:111
#, fuzzy #, fuzzy
#| msgid "Incorrect password" #| msgid "Incorrect password"
msgid "Incorrect password." msgid "Incorrect password."
msgstr "パスワード不正" msgstr "パスワード不正"
#: snikket_web/user.py:103 #: snikket_web/user.py:115
#, fuzzy #, fuzzy
#| msgid "Password reset" #| msgid "Password reset"
msgid "Password changed" msgid "Password changed"
msgstr "パスワード再設定" msgstr "パスワード再設定"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
msgstr "" msgstr ""
#: snikket_web/user.py:159 #: snikket_web/user.py:170
#, fuzzy #, fuzzy
#| msgid "Profile" #| msgid "Profile"
msgid "Profile updated" msgid "Profile updated"
msgstr "プロファイル" msgstr "プロファイル"
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr ""
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr "" msgstr ""
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
@@ -438,7 +498,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "ソフトウェアバーション" msgstr "ソフトウェアバーション"
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "戻る" msgstr "戻る"
@@ -473,6 +533,7 @@ msgid "Members"
msgstr "サークル員" msgstr "サークル員"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -550,7 +611,7 @@ msgid "Delete user %(user_name)s"
msgstr "%(user_name)s を削除" msgstr "%(user_name)s を削除"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "ユーザー削除" msgstr "ユーザー削除"
@@ -574,6 +635,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -623,28 +685,37 @@ msgstr "サークルを削除しても会員は削除されまんせん。"
msgid "Circle members" msgid "Circle members"
msgstr "サークル会員" msgstr "サークル会員"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr ""
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr ""
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "%(username)s をサークルから外す" msgstr "%(username)s をサークルから外す"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "会員を紹介する" msgstr "会員を紹介する"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "ユーザー追加" msgstr "ユーザー追加"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "" msgstr ""
@@ -722,63 +793,63 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "%(user_name)s を更新" msgstr "%(user_name)s を更新"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
#, fuzzy #, fuzzy
#| msgid "Add user" #| msgid "Add user"
msgid "Edit user" msgid "Edit user"
msgstr "ユーザーを追加する" msgstr "ユーザーを追加する"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
#, fuzzy #, fuzzy
#| msgid "New invitation link" #| msgid "New invitation link"
msgid "Return to user list" msgid "Return to user list"
msgstr "新しい紹介状" msgstr "新しい紹介状"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
#, fuzzy #, fuzzy
#| msgid "Change your password" #| msgid "Change your password"
msgid "Reset password" msgid "Reset password"
msgstr "パスワード変更" msgstr "パスワード変更"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to create " "If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once." "a special link which allows to change the password of the account, once."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
#, fuzzy #, fuzzy
#| msgid "User information" #| msgid "User information"
msgid "Debug information" msgid "Debug information"
msgstr "ユーザー詳細" msgstr "ユーザー詳細"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
"(sensitive) information." "(sensitive) information."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
#, fuzzy #, fuzzy
#| msgid "User information" #| msgid "User information"
msgid "Show debug information" msgid "Show debug information"
@@ -833,13 +904,32 @@ msgstr "紹介状を作成、削除、表示。"
msgid "Manage invitations" msgid "Manage invitations"
msgstr "紹介状管理" msgstr "紹介状管理"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr ""
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage system"
msgstr "ユーザー管理"
#: snikket_web/templates/admin_home.html:48
#, fuzzy #, fuzzy
#| msgid "Go back to your users web portal page." #| msgid "Go back to your users web portal page."
msgid "Go back to your user's web portal page." msgid "Go back to your user's web portal page."
msgstr "ホームページに戻る。" msgstr "ホームページに戻る。"
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "" msgstr ""
@@ -890,6 +980,84 @@ msgstr "このリンクはパスワードを一回きり再設定可能にする
msgid "Destroy link" msgid "Destroy link"
msgstr "リンク取り消す" msgstr "リンク取り消す"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr ""
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr ""
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr ""
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr ""
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr ""
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr ""
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr ""
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:50
#, fuzzy
#| msgid "Snikket Web Portal"
msgid "Snikket server status"
msgstr "Snikket ホームページ"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr ""
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr ""
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr ""
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
#, fuzzy #, fuzzy
#| msgid "The username is not valid" #| msgid "The username is not valid"
@@ -1000,8 +1168,8 @@ msgstr ""
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "" msgstr ""
@@ -1067,7 +1235,6 @@ msgid "You can now log in using your new password."
msgstr "" msgstr ""
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "" msgstr ""
@@ -1099,7 +1266,6 @@ msgid ""
msgstr "" msgstr ""
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1151,6 +1317,41 @@ msgid ""
"password you chose during registration." "password you chose during registration."
msgstr "" msgstr ""
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
#: snikket_web/templates/invite_success.html:21
#, fuzzy
#| msgid "Password reset"
msgid "Import successful"
msgstr "パスワード再設定"
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr ""
#: snikket_web/templates/invite_success.html:26
#, fuzzy
#| msgid "About Snikket"
msgid "Moving to Snikket?"
msgstr "Snikketについて"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr ""
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1190,7 +1391,7 @@ msgid "Get it on Google Play"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "" msgstr ""
@@ -1221,11 +1422,11 @@ msgid "Scan invite code"
msgstr "紹介状をスキャン" msgstr "紹介状をスキャン"
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "閉める" msgstr "閉める"
@@ -1235,58 +1436,39 @@ msgid ""
"your camera. You can use either a QR scanner app or the Snikket app itself." "your camera. You can use either a QR scanner app or the Snikket app itself."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr ""
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr ""
#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
msgstr ""
#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "" msgstr ""
@@ -1298,10 +1480,6 @@ msgstr "リンクをコピーする"
msgid "Invalid input" msgid "Invalid input"
msgstr "入力不正" msgstr "入力不正"
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr ""
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1362,17 +1540,24 @@ msgstr "談話室アドレス"
msgid "Edit profile" msgid "Edit profile"
msgstr "プロファイル管理" msgstr "プロファイル管理"
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage your data"
msgstr "ユーザー管理"
#: snikket_web/templates/user_home.html:39
#, fuzzy #, fuzzy
#| msgid "About Snikket" #| msgid "About Snikket"
msgid "Your Snikket" msgid "Your Snikket"
msgstr "Snikketについて" msgstr "Snikketについて"
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "" msgstr ""
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
#, fuzzy #, fuzzy
#| msgid "Admin area" #| msgid "Admin area"
msgid "Admin panel" msgid "Admin panel"
@@ -1388,6 +1573,18 @@ msgid ""
"other connected devices." "other connected devices."
msgstr "" msgstr ""
#: snikket_web/templates/user_manage_data.html:8
#, fuzzy
#| msgid "Create account"
msgid "Export account"
msgstr "アカウント作成"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "パスワード変更" msgstr "パスワード変更"

View File

@@ -1,313 +1,373 @@
# Translations template for PROJECT. # Translations template for PROJECT.
# Copyright (C) 2021 ORGANIZATION # Copyright (C) 2023 ORGANIZATION
# This file is distributed under the same license as the PROJECT project. # This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2023-03-28 19:16+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.12.1\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr ""
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "" msgstr ""
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "" msgstr ""
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "" msgstr ""
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr ""
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "" msgstr ""
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
msgid "Administrator" msgid "Administrator"
msgstr "" msgstr ""
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
msgid "Update user" msgid "Update user"
msgstr "" msgstr ""
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
msgid "Create password reset link" msgid "Create password reset link"
msgstr "" msgstr ""
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
msgid "Password reset link created" msgid "Password reset link created"
msgstr "" msgstr ""
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
msgid "User information updated." msgid "User information updated."
msgstr "" msgstr ""
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "" msgstr ""
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "" msgstr ""
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "" msgstr ""
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "" msgstr ""
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "" msgstr ""
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "" msgstr ""
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "" msgstr ""
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "" msgstr ""
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "" msgstr ""
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "" msgstr ""
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "" msgstr ""
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "" msgstr ""
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "" msgstr ""
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "" msgstr ""
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "" msgstr ""
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "" msgstr ""
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "" msgstr ""
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
msgid "Invitation created" msgid "Invitation created"
msgstr "" msgstr ""
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "" msgstr ""
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "" msgstr ""
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "" msgstr ""
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "" msgstr ""
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
msgid "Circle created" msgid "Circle created"
msgstr "" msgstr ""
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "" msgstr ""
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "" msgstr ""
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "" msgstr ""
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "" msgstr ""
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
msgid "No such circle exists" msgid "No such circle exists"
msgstr "" msgstr ""
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
msgid "Circle data updated" msgid "Circle data updated"
msgstr "" msgstr ""
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
msgid "Circle deleted" msgid "Circle deleted"
msgstr "" msgstr ""
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
msgid "User added to circle" msgid "User added to circle"
msgstr "" msgstr ""
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
msgid "User removed from circle" msgid "User removed from circle"
msgstr "" msgstr ""
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr ""
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr ""
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr ""
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr ""
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr ""
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "" msgstr ""
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please "
"contact your Snikket operator."
msgstr ""
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "" msgstr ""
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "" msgstr ""
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
msgid "The passwords must match." msgid "The passwords must match."
msgstr "" msgstr ""
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "" msgstr ""
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
msgid "That username is already taken." msgid "That username is already taken."
msgstr "" msgstr ""
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "" msgstr ""
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
msgid "The username is not valid." msgid "The username is not valid."
msgstr "" msgstr ""
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "" msgstr ""
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr ""
#: snikket_web/invite.py:250
msgid "Import data"
msgstr ""
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please "
"upload an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr ""
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "" msgstr ""
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "" msgstr ""
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "" msgstr ""
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "" msgstr ""
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "" msgstr ""
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "" msgstr ""
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "" msgstr ""
#: snikket_web/user.py:41 #: snikket_web/user.py:43
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "" msgstr ""
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "" msgstr ""
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "" msgstr ""
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "" msgstr ""
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "" msgstr ""
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "" msgstr ""
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "" msgstr ""
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "" msgstr ""
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Incorrect password." msgid "Account data"
msgstr "" msgstr ""
#: snikket_web/user.py:103 #: snikket_web/user.py:86
msgid "Password changed" msgid "Upload"
msgstr "" msgstr ""
#: snikket_web/user.py:111 #: snikket_web/user.py:111
msgid "Incorrect password."
msgstr ""
#: snikket_web/user.py:115
msgid "Password changed"
msgstr ""
#: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please" "The chosen avatar is too big. To be able to upload larger avatars, please"
" use the app." " use the app."
msgstr "" msgstr ""
#: snikket_web/user.py:159 #: snikket_web/user.py:170
msgid "Profile updated" msgid "Profile updated"
msgstr "" msgstr ""
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr ""
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr "" msgstr ""
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
@@ -385,7 +445,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "" msgstr ""
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "" msgstr ""
@@ -420,6 +480,7 @@ msgid "Members"
msgstr "" msgstr ""
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -497,7 +558,7 @@ msgid "Delete user %(user_name)s"
msgstr "" msgstr ""
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "" msgstr ""
@@ -519,6 +580,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -568,28 +630,37 @@ msgstr ""
msgid "Circle members" msgid "Circle members"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr ""
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr ""
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "" msgstr ""
@@ -664,56 +735,56 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
msgid "Edit user" msgid "Edit user"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for " "The access level of a user determines what interactions are allowed for "
"them on your Snikket service." "them on your Snikket service."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
msgid "Return to user list" msgid "Return to user list"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
msgid "Reset password" msgid "Reset password"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to " "If the user has lost their password, you can use the button below to "
"create a special link which allows to change the password of the account," "create a special link which allows to change the password of the account,"
" once." " once."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
msgid "Debug information" msgid "Debug information"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the " "In some cases, extended information about the user account and the "
"connected devices is necessary to troubleshoot issues. The button below " "connected devices is necessary to troubleshoot issues. The button below "
"reveals this (sensitive) information." "reveals this (sensitive) information."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
msgid "Show debug information" msgid "Show debug information"
msgstr "" msgstr ""
@@ -756,11 +827,28 @@ msgstr ""
msgid "Manage invitations" msgid "Manage invitations"
msgstr "" msgstr ""
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "Go back to your user's web portal page." msgid "System health"
msgstr "" msgstr ""
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
msgid "Manage system"
msgstr ""
#: snikket_web/templates/admin_home.html:48
msgid "Go back to your user's web portal page."
msgstr ""
#: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "" msgstr ""
@@ -811,6 +899,82 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "" msgstr ""
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr ""
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr ""
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr ""
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr ""
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr ""
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr ""
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr ""
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:50
msgid "Snikket server status"
msgstr ""
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr ""
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr ""
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr ""
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on "
"your Snikket server. Use it wisely."
msgstr ""
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
msgid "The user is an administrator." msgid "The user is an administrator."
msgstr "" msgstr ""
@@ -915,8 +1079,8 @@ msgstr ""
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "" msgstr ""
@@ -977,7 +1141,6 @@ msgid "You can now log in using your new password."
msgstr "" msgstr ""
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "" msgstr ""
@@ -1007,7 +1170,6 @@ msgid ""
msgstr "" msgstr ""
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1055,6 +1217,37 @@ msgid ""
" password you chose during registration." " password you chose during registration."
msgstr "" msgstr ""
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a "
"href=\"%(login_url)s\">manage your account</a>."
msgstr ""
#: snikket_web/templates/invite_success.html:21
msgid "Import successful"
msgstr ""
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr ""
#: snikket_web/templates/invite_success.html:26
msgid "Moving to Snikket?"
msgstr ""
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile"
" information, etc.) from your previous account. When you have exported "
"the data from your previous account, upload it using the form below."
msgstr ""
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr ""
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1095,7 +1288,7 @@ msgid "Get it on Google Play"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "" msgstr ""
@@ -1126,11 +1319,11 @@ msgid "Scan invite code"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "" msgstr ""
@@ -1141,59 +1334,39 @@ msgid ""
"itself." "itself."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr ""
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr ""
#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code "
"below:"
msgstr ""
#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the "
"'Scan' button at the top."
msgstr ""
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap " "After the installation is complete, you can return to this page and tap "
"the \"Open the app\" button to continue with the setup:" "the \"Open the app\" button to continue with the setup:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite " "After installing Snikket via F-Droid, you have to return to this invite "
"link and tap on \"Open the app\" to proceed." "link and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "" msgstr ""
@@ -1205,10 +1378,6 @@ msgstr ""
msgid "Invalid input" msgid "Invalid input"
msgstr "" msgstr ""
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr ""
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1261,15 +1430,20 @@ msgstr ""
msgid "Edit profile" msgid "Edit profile"
msgstr "" msgstr ""
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
msgid "Manage your data"
msgstr ""
#: snikket_web/templates/user_home.html:39
msgid "Your Snikket" msgid "Your Snikket"
msgstr "" msgstr ""
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "" msgstr ""
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
msgid "Admin panel" msgid "Admin panel"
msgstr "" msgstr ""
@@ -1283,6 +1457,16 @@ msgid ""
"any other connected devices." "any other connected devices."
msgstr "" msgstr ""
#: snikket_web/templates/user_manage_data.html:8
msgid "Export account"
msgstr ""
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "" msgstr ""

View File

@@ -7,300 +7,360 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-05-19 15:12+0000\n" "PO-Revision-Date: 2022-01-21 15:00+0000\n"
"Last-Translator: misiek <migelazur@mailbox.org>\n" "Last-Translator: misiek <migelazur@mailbox.org>\n"
"Language-Team: Polish <https://i18n.sotecware.net/projects/snikket/" "Language-Team: Polish <http://i18n.sotecware.net/projects/snikket/web-portal/"
"web-portal/pl/>\n" "pl/>\n"
"Language: pl\n" "Language: pl\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n" "|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.5.1\n" "X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr "Ograniczony"
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "Login" msgstr "Login"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "Nazwa wyświetlana" msgstr "Nazwa wyświetlana"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "Poziom dostępu" msgstr "Poziom dostępu"
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr "Ograniczony"
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "Zwykły użytkownik" msgstr "Zwykły użytkownik"
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
msgid "Administrator" msgid "Administrator"
msgstr "Administrator" msgstr "Administrator"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
msgid "Update user" msgid "Update user"
msgstr "Zapisz ustawienia użytkownika" msgstr "Zapisz ustawienia użytkownika"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
msgid "Create password reset link" msgid "Create password reset link"
msgstr "Stwórz link do zresetowania hasła" msgstr "Stwórz link do zresetowania hasła"
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
msgid "Password reset link created" msgid "Password reset link created"
msgstr "Utworzono link resetowania hasła" msgstr "Utworzono link resetowania hasła"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
msgid "User information updated." msgid "User information updated."
msgstr "Zaktualizowano informacje o użytkowniku." msgstr "Zaktualizowano informacje o użytkowniku."
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "Usuń użytkownika bezpowrotnie" msgstr "Usuń użytkownika bezpowrotnie"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "Użytkownik został usunięty" msgstr "Użytkownik został usunięty"
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "Nie znaleziono linku do zresetowania hasła" msgstr "Nie znaleziono linku do zresetowania hasła"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "Usunięto link resetowania hasła" msgstr "Usunięto link resetowania hasła"
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "Zaproś do kręgu" msgstr "Zaproś do kręgu"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "Należy wybrać przynajmniej jeden krąg" msgstr "Należy wybrać przynajmniej jeden krąg"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "Ważne przez" msgstr "Ważne przez"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "Godzinę" msgstr "Godzinę"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "Dwanaście godzin" msgstr "Dwanaście godzin"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "Dzień" msgstr "Dzień"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "Tydzień" msgstr "Tydzień"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "Cztery tygodnie" msgstr "Cztery tygodnie"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "Typ zaproszenia" msgstr "Typ zaproszenia"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "Indywidualne" msgstr "Indywidualne"
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "Grupowe" msgstr "Grupowe"
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "Nowy link z zaproszeniem" msgstr "Nowy link z zaproszeniem"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "Unieważnij" msgstr "Unieważnij"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
msgid "Invitation created" msgid "Invitation created"
msgstr "Utworzono zaproszenie" msgstr "Utworzono zaproszenie"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "Takie zaproszenie nie istnieje" msgstr "Takie zaproszenie nie istnieje"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "Unieważniono zaproszenie" msgstr "Unieważniono zaproszenie"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "Nazwa" msgstr "Nazwa"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "Utwórz krąg" msgstr "Utwórz krąg"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
msgid "Circle created" msgid "Circle created"
msgstr "Utworzono krąg" msgstr "Utworzono krąg"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "Wybierz użytkownika" msgstr "Wybierz użytkownika"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "Zaktualizuj ustawienia kręgu" msgstr "Zaktualizuj ustawienia kręgu"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "Usuń krąg bezpowrotnie" msgstr "Usuń krąg bezpowrotnie"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "Dodaj użytkownika" msgstr "Dodaj użytkownika"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
msgid "No such circle exists" msgid "No such circle exists"
msgstr "Taki krąg nie istnieje" msgstr "Taki krąg nie istnieje"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
msgid "Circle data updated" msgid "Circle data updated"
msgstr "Zaktualizowano dane kręgu" msgstr "Zaktualizowano dane kręgu"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
msgid "Circle deleted" msgid "Circle deleted"
msgstr "Krąg został usunięty" msgstr "Krąg został usunięty"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
msgid "User added to circle" msgid "User added to circle"
msgstr "Dodano użytkownika do kręgu" msgstr "Dodano użytkownika do kręgu"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
msgid "User removed from circle" msgid "User removed from circle"
msgstr "Usunięto użytkownika z kręgu" msgstr "Usunięto użytkownika z kręgu"
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr "Treść wiadomości"
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr "Wyślij jedynie do użytkowników online"
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr "Wyślij do wszystkich użytkowników"
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr "Prześlij do siebie podgląd wiadomości"
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr "Komunikat wysłany!"
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "Główny" msgstr "Główny"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
"Plik z danymi konta, które próbujesz zaimportować, jest zbyt duży. "
"Skontaktuj się z administratorem twojego serwera Snikket."
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "Nazwa użytkownika" msgstr "Nazwa użytkownika"
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "Hasło" msgstr "Hasło"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "Potwierdź hasło" msgstr "Potwierdź hasło"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
msgid "The passwords must match." msgid "The passwords must match."
msgstr "Hasła muszą się zgadzać." msgstr "Hasła muszą się zgadzać."
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "Utwórz konto" msgstr "Utwórz konto"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
msgid "That username is already taken." msgid "That username is already taken."
msgstr "Ta nazwa użytkownika jest już zajęta." msgstr "Ta nazwa użytkownika jest już zajęta."
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "Z nieznanych przyczyn rejestracja została odrzucona." msgstr "Z nieznanych przyczyn rejestracja została odrzucona."
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
msgid "The username is not valid." msgid "The username is not valid."
msgstr "Ta nazwa użytkownika jest nieprawidłowa." msgstr "Ta nazwa użytkownika jest nieprawidłowa."
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "Zmień hasło" msgstr "Zmień hasło"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr "Plik z danymi konta"
#: snikket_web/invite.py:250
msgid "Import data"
msgstr "Importuj dane"
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
"Dane konta, które próbujesz zaimportować, mają nieznany format. Proszę "
"wybrać plik w formacie XML zgodnym z XEP-0227 (podany format: %(mimetype)s)."
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr "Błąd"
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "Adres" msgstr "Adres"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "Zaloguj się" msgstr "Zaloguj się"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "Nieprawidłowa nazwa użytkownika lub hasło." msgstr "Nieprawidłowa nazwa użytkownika lub hasło."
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "Zalogowano się pomyślnie!" msgstr "Zalogowano się pomyślnie!"
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "Obecne hasło" msgstr "Obecne hasło"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "Nowe hasło" msgstr "Nowe hasło"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "Potwierdź nowe hasło" msgstr "Potwierdź nowe hasło"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "Nowe hasła muszą się zgadzać." msgstr "Nowe hasła muszą się zgadzać."
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "Wyloguj się" msgstr "Wyloguj się"
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "Nikt" msgstr "Nikt"
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "Tylko znajomi" msgstr "Tylko znajomi"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "Wszyscy" msgstr "Wszyscy"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "Awatar" msgstr "Awatar"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "Widoczność profilu" msgstr "Widoczność profilu"
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "Zaktualizuj profil" msgstr "Zaktualizuj profil"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr "Dane konta"
#: snikket_web/user.py:86
msgid "Upload"
msgstr "Prześlij"
#: snikket_web/user.py:111
msgid "Incorrect password." msgid "Incorrect password."
msgstr "Nieprawidłowe hasło." msgstr "Nieprawidłowe hasło."
#: snikket_web/user.py:103 #: snikket_web/user.py:115
msgid "Password changed" msgid "Password changed"
msgstr "Hasło zostało zmienione" msgstr "Hasło zostało zmienione"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
@@ -308,13 +368,17 @@ msgstr ""
"Wybrany awatar jest zbyt duży. Awatary o większych rozmiarach możesz ustawić " "Wybrany awatar jest zbyt duży. Awatary o większych rozmiarach możesz ustawić "
"korzystając z aplikacji." "korzystając z aplikacji."
#: snikket_web/user.py:159 #: snikket_web/user.py:170
msgid "Profile updated" msgid "Profile updated"
msgstr "Zaktualizowano profil" msgstr "Zaktualizowano profil"
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr "Błąd" msgstr "Eksportuj"
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr "Obecnie nie masz danych konta, które można wyeksportować."
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
#, python-format #, python-format
@@ -407,7 +471,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "Wersje oprogramowania" msgstr "Wersje oprogramowania"
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "Wróć do strony głównej" msgstr "Wróć do strony głównej"
@@ -447,6 +511,7 @@ msgid "Members"
msgstr "Członkowie" msgstr "Członkowie"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -528,7 +593,7 @@ msgid "Delete user %(user_name)s"
msgstr "Usuń użytkownika %(user_name)s" msgstr "Usuń użytkownika %(user_name)s"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "Usuń użytkownika" msgstr "Usuń użytkownika"
@@ -553,6 +618,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -604,28 +670,37 @@ msgstr "Usunięcie kręgu nie usunie z serwera jego użytkowników."
msgid "Circle members" msgid "Circle members"
msgstr "Członkowie kręgu" msgstr "Członkowie kręgu"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr "Użytkownik został usunięty z serwera."
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "usunięty"
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "Usuń z kręgu użytkownika %(username)s" msgstr "Usuń z kręgu użytkownika %(username)s"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "Ten krąg nie ma obecnie członków." msgstr "Ten krąg nie ma obecnie członków."
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "Zaproś więcej użytkowników" msgstr "Zaproś więcej użytkowników"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "Dodaj istniejącego użytkownika" msgstr "Dodaj istniejącego użytkownika"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "Wszyscy użytkownicy dodani" msgstr "Wszyscy użytkownicy dodani"
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "Wszyscy użytkownicy tego serwera są obecnie w tym kręgu." msgstr "Wszyscy użytkownicy tego serwera są obecnie w tym kręgu."
@@ -711,15 +786,15 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "Edytuj użytkownika %(user_name)s" msgstr "Edytuj użytkownika %(user_name)s"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
msgid "Edit user" msgid "Edit user"
msgstr "Edytuj użytkownika" msgstr "Edytuj użytkownika"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "Login nie może zostać zmieniony." msgstr "Login nie może zostać zmieniony."
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
@@ -727,24 +802,24 @@ msgstr ""
"Poziom dostępu użytkownika określa, jakie interakcje są dla niego dozwolone " "Poziom dostępu użytkownika określa, jakie interakcje są dla niego dozwolone "
"na Twoim serwerze Snikket." "na Twoim serwerze Snikket."
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
msgid "Return to user list" msgid "Return to user list"
msgstr "Wróć do listy użytkowników" msgstr "Wróć do listy użytkowników"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "Dodatkowe funkcje" msgstr "Dodatkowe funkcje"
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
msgid "Reset password" msgid "Reset password"
msgstr "Resetowanie hasła" msgstr "Resetowanie hasła"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to create " "If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once." "a special link which allows to change the password of the account, once."
@@ -753,11 +828,11 @@ msgstr ""
"wygenerujesz dla niego link do jego zresetowania. Odnośnik pozwoli na " "wygenerujesz dla niego link do jego zresetowania. Odnośnik pozwoli na "
"jednorazową zmianę hasła na nowe." "jednorazową zmianę hasła na nowe."
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
msgid "Debug information" msgid "Debug information"
msgstr "Informacje debugowania" msgstr "Informacje debugowania"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
@@ -767,7 +842,7 @@ msgstr ""
"informacje o użytkowniku oraz podłączonych urządzeniach. Poniższy przycisk " "informacje o użytkowniku oraz podłączonych urządzeniach. Poniższy przycisk "
"ujawni te (wrażliwe) informacje." "ujawni te (wrażliwe) informacje."
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
msgid "Show debug information" msgid "Show debug information"
msgstr "Pokaż informacje debugowania" msgstr "Pokaż informacje debugowania"
@@ -810,11 +885,29 @@ msgstr "Utwórz, unieważnij lub kopiuj zaproszenia."
msgid "Manage invitations" msgid "Manage invitations"
msgstr "Zarządzaj zaproszeniami" msgstr "Zarządzaj zaproszeniami"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr "Stan systemu"
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr ""
"Podejrzyj status serwera lub prześlij komunikat do wszystkich użytkowników."
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr "Prześlij komunikat do wszystkich użytkowników."
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
msgid "Manage system"
msgstr "Zarządzaj systemem"
#: snikket_web/templates/admin_home.html:48
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." msgstr "Wróć do swojej strony użytkownika."
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "Wyjdź z panelu administracyjnego" msgstr "Wyjdź z panelu administracyjnego"
@@ -867,6 +960,86 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "Zniszcz link" msgstr "Zniszcz link"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr "Ogólny status systemu"
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr "Obciążenie systemu (dla ostatnich 5 minut)"
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr "nieznane"
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr "Wykorzystanie pamięci"
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
"%(percentage_global)s z %(mem_available)s. Z tego Snikket używa "
"%(percentage_snikket)s."
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr "Status portalu internetowego"
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr "Wersja"
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr "Pokaż wszystkie wersje"
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr "Średnie użycie CPU"
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr "Bieżące użycie pamięci"
#: snikket_web/templates/admin_system.html:50
msgid "Snikket server status"
msgstr "Status serwera Snikket"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr "Miejsce wykorzystane przez przesłane pliki"
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr "Podłączone urządzenia"
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr "Wiadomość globalna"
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
"Ten formularz pozwala na wysłanie wiadomości do wszystkich użytkowników, "
"którzy obecnie są online na twoim serwerze Snikket. Używaj go z rozwagą."
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
msgid "The user is an administrator." msgid "The user is an administrator."
msgstr "Użytkownik jest administratorem." msgstr "Użytkownik jest administratorem."
@@ -979,8 +1152,8 @@ msgstr "Aplikacja jest już zainstalowana?"
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "Otwórz aplikację" msgstr "Otwórz aplikację"
@@ -1047,7 +1220,6 @@ msgid "You can now log in using your new password."
msgstr "Możesz się zalogować z wykorzystaniem twojego nowego hasła." msgstr "Możesz się zalogować z wykorzystaniem twojego nowego hasła."
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "Możesz teraz bezpiecznie zamknąć tę stronę." msgstr "Możesz teraz bezpiecznie zamknąć tę stronę."
@@ -1083,7 +1255,6 @@ msgstr ""
"przycisku Skanowania, który znajduje się u góry." "przycisku Skanowania, który znajduje się u góry."
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1141,6 +1312,44 @@ msgstr ""
"Możesz teraz skonfigurować swojego starszego klienta XMPP za pomocą " "Możesz teraz skonfigurować swojego starszego klienta XMPP za pomocą "
"powyższego adresu i hasła, które podałeś podczas rejestracji." "powyższego adresu i hasła, które podałeś podczas rejestracji."
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
"Możesz bezpiecznie zamknąć tę stronę lub zalogować się do Portalu "
"Użytkownika Snikket, aby <a href=\"%(login_url)s\">zarządzać swoim kontem</"
"a>."
#: snikket_web/templates/invite_success.html:21
msgid "Import successful"
msgstr "Import zakończony sukcesem"
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr "Gratulacje! Dane twojego konta zostały prawidłowo zaimportowane."
#: snikket_web/templates/invite_success.html:26
msgid "Moving to Snikket?"
msgstr "Przenosisz się na Snikket?"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
"Jeśli przenosisz się z innego serwera Snikket lub kompatybilnej usługi XMPP, "
"możesz opcjonalnie zaimportować dane (kontakty, informacje o profilu, itp.) "
"ze swojego poprzedniego konta. Gdy wyeksportujesz dane z poprzedniej usługi, "
"możesz je przesłać za pomocą poniższego formularza."
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr "Prześlij dane konta"
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1189,7 +1398,7 @@ msgid "Get it on Google Play"
msgstr "Pobierz w Google Play" msgstr "Pobierz w Google Play"
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "Pobierz w App Store" msgstr "Pobierz w App Store"
@@ -1226,11 +1435,11 @@ msgid "Scan invite code"
msgstr "Zeskanuj kod zaproszenia" msgstr "Zeskanuj kod zaproszenia"
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "Zamknij" msgstr "Zamknij"
@@ -1243,34 +1452,11 @@ msgstr ""
"poniższy kod aparatem. Możesz również skorzystać ze skanera kodów QR lub " "poniższy kod aparatem. Możesz również skorzystać ze skanera kodów QR lub "
"samej aplikacji Snikket." "samej aplikacji Snikket."
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr "Używając skanera kodów QR"
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr "Używając aplikacji Snikket"
#: snikket_web/templates/invite_view.html:70
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:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
"Zainstaluj aplikację Snikket na swoim urządzeniu mobilnym, otwórz ją, "
"następnie wciśnij przycisk \"Skanuj\" u góry."
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "Zainstaluj na iOS" msgstr "Zainstaluj na iOS"
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
@@ -1278,14 +1464,14 @@ msgstr ""
"Po pobraniu aplikacji Snikket z App Store musisz wrócić do tego linku z " "Po pobraniu aplikacji Snikket z App Store musisz wrócić do tego linku z "
"zaproszeniem, następnie kliknąć \"Otwórz aplikację\", aby kontynuować." "zaproszeniem, następnie kliknąć \"Otwórz aplikację\", aby kontynuować."
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "" msgstr ""
"Najpierw pobierz aplikację Snikket z App Store za pomocą poniższego " "Najpierw pobierz aplikację Snikket z App Store za pomocą poniższego "
"przycisku:" "przycisku:"
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
@@ -1293,12 +1479,12 @@ msgstr ""
"Po zakończeniu instalacji możesz wrócić do tej strony i kliknąć przycisk " "Po zakończeniu instalacji możesz wrócić do tej strony i kliknąć przycisk "
"\"Otwórz aplikację\", aby kontynuować:" "\"Otwórz aplikację\", aby kontynuować:"
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "Zainstaluj przez F-Droid" msgstr "Zainstaluj przez F-Droid"
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
@@ -1307,7 +1493,7 @@ msgstr ""
"linku z zaproszeniem, następnie kliknąć \"Otwórz aplikację\", aby " "linku z zaproszeniem, następnie kliknąć \"Otwórz aplikację\", aby "
"kontynuować." "kontynuować."
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "" msgstr ""
"Najpierw zainstaluj aplikację Snikket z F-Droid, korzystając z poniższego " "Najpierw zainstaluj aplikację Snikket z F-Droid, korzystając z poniższego "
@@ -1321,10 +1507,6 @@ msgstr "Skopiuj link"
msgid "Invalid input" msgid "Invalid input"
msgstr "Dane nieprawidłowe" msgstr "Dane nieprawidłowe"
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "usunięty"
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1382,16 +1564,21 @@ msgstr "Twój adres XMPP"
msgid "Edit profile" msgid "Edit profile"
msgstr "Edytuj profil" msgstr "Edytuj profil"
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
msgid "Manage your data"
msgstr "Zarządzaj danymi konta"
#: snikket_web/templates/user_home.html:39
msgid "Your Snikket" msgid "Your Snikket"
msgstr "Twój Snikket" msgstr "Twój Snikket"
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "" msgstr ""
"Zarządzaj użytkownikami, zaproszeniami oraz kręgami na tym serwerze Snikket." "Zarządzaj użytkownikami, zaproszeniami oraz kręgami na tym serwerze Snikket."
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
msgid "Admin panel" msgid "Admin panel"
msgstr "Panel administracyjny" msgstr "Panel administracyjny"
@@ -1407,6 +1594,18 @@ msgstr ""
"Kliknij poniżej, aby wylogować się z portalu. Nie wpłynie to na pozostałe " "Kliknij poniżej, aby wylogować się z portalu. Nie wpłynie to na pozostałe "
"podłączone urządzenia." "podłączone urządzenia."
#: snikket_web/templates/user_manage_data.html:8
msgid "Export account"
msgstr "Wyeksportuj swoje dane"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
"Pobierz dane swojego konta jako plik w celu backupu lub przeniesienia konta "
"na inną usługę."
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "Zmień swoje hasło" msgstr "Zmień swoje hasło"
@@ -1447,6 +1646,26 @@ msgstr ""
"Ta sekcja pozwoli ci na zarządzenie widocznością informacji o twoim profilu " "Ta sekcja pozwoli ci na zarządzenie widocznością informacji o twoim profilu "
"przez innych, jak awatar lub pseudonim." "przez innych, jak awatar lub pseudonim."
#~ msgid "Using a QR code scanner"
#~ msgstr "Używając skanera kodów QR"
#~ msgid "Using the Snikket app"
#~ msgstr "Używając aplikacji Snikket"
#~ 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:"
#~ msgid ""
#~ "Install the Snikket app on your mobile device, open it, and tap the "
#~ "'Scan' button at the top."
#~ msgstr ""
#~ "Zainstaluj aplikację Snikket na swoim urządzeniu mobilnym, otwórz ją, "
#~ "następnie wciśnij przycisk \"Skanuj\" u góry."
#~ msgid "Create password reset link for %(user_name)s" #~ msgid "Create password reset link for %(user_name)s"
#~ msgstr "Utwórz link resetowania hasła dla %(user_name)s" #~ msgstr "Utwórz link resetowania hasła dla %(user_name)s"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-03-12 23:04+0000\n" "PO-Revision-Date: 2021-03-12 23:04+0000\n"
"Last-Translator: GodGoldfish <godgoldfish@pm.me>\n" "Last-Translator: GodGoldfish <godgoldfish@pm.me>\n"
"Language-Team: Russian <https://i18n.sotecware.net/projects/snikket/web-" "Language-Team: Russian <https://i18n.sotecware.net/projects/snikket/web-"
@@ -21,320 +21,380 @@ msgstr ""
"X-Generator: Weblate 4.5.1\n" "X-Generator: Weblate 4.5.1\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr ""
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "Логин" msgstr "Логин"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "Отображаемое имя" msgstr "Отображаемое имя"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "" msgstr ""
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr ""
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "" msgstr ""
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
#, fuzzy #, fuzzy
#| msgid "Admin area" #| msgid "Admin area"
msgid "Administrator" msgid "Administrator"
msgstr "Административная зона" msgstr "Административная зона"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
#, fuzzy #, fuzzy
#| msgid "Update circle" #| msgid "Update circle"
msgid "Update user" msgid "Update user"
msgstr "Обновить крук" msgstr "Обновить крук"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
#, fuzzy #, fuzzy
#| msgid "Create password reset links or delete users." #| msgid "Create password reset links or delete users."
msgid "Create password reset link" msgid "Create password reset link"
msgstr "Создайте ссылки для сброса пароля или удалите пользователей." msgstr "Создайте ссылки для сброса пароля или удалите пользователей."
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
msgid "Password reset link created" msgid "Password reset link created"
msgstr "Ссылка на сброс пароля для %(user_name)s" msgstr "Ссылка на сброс пароля для %(user_name)s"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
#, fuzzy #, fuzzy
#| msgid "Circle information" #| msgid "Circle information"
msgid "User information updated." msgid "User information updated."
msgstr "Информация о круге" msgstr "Информация о круге"
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "Удалить пользователя навсегда" msgstr "Удалить пользователя навсегда"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "удалённый" msgstr "удалённый"
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
#, fuzzy #, fuzzy
#| msgid "Password reset link created" #| msgid "Password reset link created"
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "Ссылка на сброс пароля для %(user_name)s" msgstr "Ссылка на сброс пароля для %(user_name)s"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "Создайте ссылки для сброса пароля или удалите пользователей" msgstr "Создайте ссылки для сброса пароля или удалите пользователей"
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "Пригласить в круг" msgstr "Пригласить в круг"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "Необходимо выбрать хотя бы один круг" msgstr "Необходимо выбрать хотя бы один круг"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "Действителен в течении" msgstr "Действителен в течении"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "Один час" msgstr "Один час"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "Двенадцать часов" msgstr "Двенадцать часов"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "Один день" msgstr "Один день"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "Одна неделя" msgstr "Одна неделя"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "Четыре недели" msgstr "Четыре недели"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "Вид приглашения" msgstr "Вид приглашения"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "Индивидуальный" msgstr "Индивидуальный"
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "Группа" msgstr "Группа"
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "Новая ссылка на приглашение" msgstr "Новая ссылка на приглашение"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "Aннулировать" msgstr "Aннулировать"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
msgid "Invitation created" msgid "Invitation created"
msgstr "Вид приглашения" msgstr "Вид приглашения"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "Новая ссылка на приглашение" msgstr "Новая ссылка на приглашение"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "Вид приглашения" msgstr "Вид приглашения"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "Имя" msgstr "Имя"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "Создать крук" msgstr "Создать крук"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
msgid "Circle created" msgid "Circle created"
msgstr "Имя круга" msgstr "Имя круга"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "Выврать пользователя" msgstr "Выврать пользователя"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "Обновить крук" msgstr "Обновить крук"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "Удалить круг навсегда" msgstr "Удалить круг навсегда"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "Добавить пользователя" msgstr "Добавить пользователя"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
msgid "No such circle exists" msgid "No such circle exists"
msgstr "Нет кругов" msgstr "Нет кругов"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
msgid "Circle data updated" msgid "Circle data updated"
msgstr "Имя круга" msgstr "Имя круга"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
msgid "Circle deleted" msgid "Circle deleted"
msgstr "удалённый" msgstr "удалённый"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
msgid "User added to circle" msgid "User added to circle"
msgstr "Пригласить в круг" msgstr "Пригласить в круг"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
msgid "User removed from circle" msgid "User removed from circle"
msgstr "Удалить пользователя %(username)s из круга" msgstr "Удалить пользователя %(username)s из круга"
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr ""
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr ""
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr ""
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr ""
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr ""
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "Основное" msgstr "Основное"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "Имя пользователя" msgstr "Имя пользователя"
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "Пароль" msgstr "Пароль"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "Повторите пароль" msgstr "Повторите пароль"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
#, fuzzy #, fuzzy
#| msgid "The passwords must match" #| msgid "The passwords must match"
msgid "The passwords must match." msgid "The passwords must match."
msgstr "Паролт должны совпадать" msgstr "Паролт должны совпадать"
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "Создать аккунт" msgstr "Создать аккунт"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
#, fuzzy #, fuzzy
#| msgid "That username is already taken" #| msgid "That username is already taken"
msgid "That username is already taken." msgid "That username is already taken."
msgstr "Это имя пользователя уже используется" msgstr "Это имя пользователя уже используется"
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
#, fuzzy #, fuzzy
#| msgid "Registration was declined for unknown reasons" #| msgid "Registration was declined for unknown reasons"
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "Регистрация была отклонена по неизвестным причинам" msgstr "Регистрация была отклонена по неизвестным причинам"
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
#, fuzzy #, fuzzy
#| msgid "The username is not valid" #| msgid "The username is not valid"
msgid "The username is not valid." msgid "The username is not valid."
msgstr "Имя пользователя недействительно" msgstr "Имя пользователя недействительно"
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "Изменить пароль" msgstr "Изменить пароль"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr ""
#: snikket_web/invite.py:250
msgid "Import data"
msgstr ""
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr "Ошибка"
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "Адрес" msgstr "Адрес"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "Войти" msgstr "Войти"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "Неверное имя пользователя или пароль." msgstr "Неверное имя пользователя или пароль."
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "Войти успешно!" msgstr "Войти успешно!"
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "Текущий пароль" msgstr "Текущий пароль"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "Новый пароль" msgstr "Новый пароль"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "Подтвердить новый пароль" msgstr "Подтвердить новый пароль"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
#, fuzzy #, fuzzy
#| msgid "The new passwords must match" #| msgid "The new passwords must match"
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "Новые пароли должны совпадать" msgstr "Новые пароли должны совпадать"
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "Выйти" msgstr "Выйти"
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "Никто" msgstr "Никто"
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "Только друзья" msgstr "Только друзья"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "Все" msgstr "Все"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "Аватар" msgstr "Аватар"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "Видимость профиля" msgstr "Видимость профиля"
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "Обновить профиль" msgstr "Обновить профиль"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr ""
#: snikket_web/user.py:86
msgid "Upload"
msgstr ""
#: snikket_web/user.py:111
#, fuzzy #, fuzzy
#| msgid "Incorrect password" #| msgid "Incorrect password"
msgid "Incorrect password." msgid "Incorrect password."
msgstr "Неправильный пароль" msgstr "Неправильный пароль"
#: snikket_web/user.py:103 #: snikket_web/user.py:115
msgid "Password changed" msgid "Password changed"
msgstr "Смена пароля" msgstr "Смена пароля"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
msgstr "" msgstr ""
#: snikket_web/user.py:159 #: snikket_web/user.py:170
msgid "Profile updated" msgid "Profile updated"
msgstr "Профиль" msgstr "Профиль"
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr "Ошибка" msgstr ""
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr ""
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
#, python-format #, python-format
@@ -428,7 +488,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "Версии программного обеспечения" msgstr "Версии программного обеспечения"
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "Назад на главную страницу" msgstr "Назад на главную страницу"
@@ -468,6 +528,7 @@ msgid "Members"
msgstr "Участники" msgstr "Участники"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -550,7 +611,7 @@ msgid "Delete user %(user_name)s"
msgstr "Удалить пользователя %(user_name)s" msgstr "Удалить пользователя %(user_name)s"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "Удалить пользователя" msgstr "Удалить пользователя"
@@ -574,6 +635,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -624,28 +686,37 @@ msgstr "Удаление круга не приводит к удалению п
msgid "Circle members" msgid "Circle members"
msgstr "Участники круга" msgstr "Участники круга"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr ""
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "удалённый"
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "Удалить пользователя %(username)s из круга" msgstr "Удалить пользователя %(username)s из круга"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "У этого круга пока нет участников." msgstr "У этого круга пока нет участников."
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "Пригласить других участников" msgstr "Пригласить других участников"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "Добавить существующего пользователя" msgstr "Добавить существующего пользователя"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "Все пользователи добавлены" msgstr "Все пользователи добавлены"
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "Все пользователи этого сервиса уже находятся в этом кругу." msgstr "Все пользователи этого сервиса уже находятся в этом кругу."
@@ -728,63 +799,63 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "Удалить пользователя %(user_name)s" msgstr "Удалить пользователя %(user_name)s"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
#, fuzzy #, fuzzy
#| msgid "Add user" #| msgid "Add user"
msgid "Edit user" msgid "Edit user"
msgstr "Добавить пользователя" msgstr "Добавить пользователя"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
#, fuzzy #, fuzzy
#| msgid "New invitation link" #| msgid "New invitation link"
msgid "Return to user list" msgid "Return to user list"
msgstr "Новая ссылка на приглашение" msgstr "Новая ссылка на приглашение"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
#, fuzzy #, fuzzy
#| msgid "Reset your password" #| msgid "Reset your password"
msgid "Reset password" msgid "Reset password"
msgstr "Сброс пароля" msgstr "Сброс пароля"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to create " "If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once." "a special link which allows to change the password of the account, once."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
#, fuzzy #, fuzzy
#| msgid "Circle information" #| msgid "Circle information"
msgid "Debug information" msgid "Debug information"
msgstr "Информация о круге" msgstr "Информация о круге"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
"(sensitive) information." "(sensitive) information."
msgstr "" msgstr ""
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
#, fuzzy #, fuzzy
#| msgid "Show debug information for %(user_name)s" #| msgid "Show debug information for %(user_name)s"
msgid "Show debug information" msgid "Show debug information"
@@ -831,11 +902,30 @@ msgstr "Создавайте, отзывайте или копируйте пр
msgid "Manage invitations" msgid "Manage invitations"
msgstr "Управление приглашениями" msgstr "Управление приглашениями"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr ""
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr ""
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage system"
msgstr "Управлять пользователями"
#: snikket_web/templates/admin_home.html:48
msgid "Go back to your user's web portal page." msgid "Go back to your user's web portal page."
msgstr "Вернитесь на веб-портал своего пользователя." msgstr "Вернитесь на веб-портал своего пользователя."
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "Покидая административную панель" msgstr "Покидая административную панель"
@@ -888,6 +978,84 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "Удалить ссылку" msgstr "Удалить ссылку"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr ""
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr ""
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr ""
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr ""
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr ""
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr ""
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr ""
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr ""
#: snikket_web/templates/admin_system.html:50
#, fuzzy
#| msgid "Snikket Web Portal"
msgid "Snikket server status"
msgstr "Сниккет веб-портал"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr ""
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr ""
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr ""
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
#, fuzzy #, fuzzy
#| msgid "The username is not valid" #| msgid "The username is not valid"
@@ -1004,8 +1172,8 @@ msgstr "Приложение уже установлено?"
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "Откройте приложение" msgstr "Откройте приложение"
@@ -1074,7 +1242,6 @@ msgid "You can now log in using your new password."
msgstr "Теперь вы можете войти в систему, используя новый пароль." msgstr "Теперь вы можете войти в систему, используя новый пароль."
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "Теперь вы можете безопасно закрыть эту страницу." msgstr "Теперь вы можете безопасно закрыть эту страницу."
@@ -1109,7 +1276,6 @@ msgstr ""
"помощью приложения Snikket App, используя кнопку Сканировать в верхней части." "помощью приложения Snikket App, используя кнопку Сканировать в верхней части."
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1167,6 +1333,41 @@ msgstr ""
"Теперь вы можете настроить ваш старый XMPP клиент с указанным выше адресом и " "Теперь вы можете настроить ваш старый XMPP клиент с указанным выше адресом и "
"паролем, который вы выбрали при регистрации." "паролем, который вы выбрали при регистрации."
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
#: snikket_web/templates/invite_success.html:21
#, fuzzy
#| msgid "Operation successful"
msgid "Import successful"
msgstr "Операция прошла успешно"
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr ""
#: snikket_web/templates/invite_success.html:26
#, fuzzy
#| msgid "Using the Snikket app"
msgid "Moving to Snikket?"
msgstr "Использование приложения Сниккет"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr ""
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1213,7 +1414,7 @@ msgid "Get it on Google Play"
msgstr "Получить его в Гугл Игры" msgstr "Получить его в Гугл Игры"
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "Скачать в Магазин Приложений" msgstr "Скачать в Магазин Приложений"
@@ -1250,11 +1451,11 @@ msgid "Scan invite code"
msgstr "Сканировать код приглашения" msgstr "Сканировать код приглашения"
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "близко" msgstr "близко"
@@ -1267,62 +1468,39 @@ msgstr ""
"отсканировав код с помощью камеры. Вы можете использовать как приложение QR-" "отсканировав код с помощью камеры. Вы можете использовать как приложение QR-"
"сканера, так и само приложение Сниккет." "сканера, так и само приложение Сниккет."
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr "Используя сканер QR-кода"
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr "Использование приложения Сниккет"
#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
msgstr ""
"Используйте сканер <em>QR-кода</em> на вашем мобильном устройстве для "
"сканирования кода, приведенного ниже:"
#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
"Установите приложение Сниккет на мобильное устройство, откройте его и "
"нажмите кнопку 'Сканировать' сверху."
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
msgstr "" msgstr ""
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "" msgstr ""
@@ -1334,10 +1512,6 @@ msgstr "Ссылка на копирование"
msgid "Invalid input" msgid "Invalid input"
msgstr "Недействительный вход" msgstr "Недействительный вход"
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "удалённый"
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1396,16 +1570,23 @@ msgstr "Ваш адрес XMPP"
msgid "Edit profile" msgid "Edit profile"
msgstr "реадктировать профиль" msgstr "реадктировать профиль"
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
#, fuzzy
#| msgid "Manage users"
msgid "Manage your data"
msgstr "Управлять пользователями"
#: snikket_web/templates/user_home.html:39
msgid "Your Snikket" msgid "Your Snikket"
msgstr "Ваш Сниккет" msgstr "Ваш Сниккет"
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "" msgstr ""
"Управляйте пользователями, приглашениями и кругами вашего сервиса Сниккет." "Управляйте пользователями, приглашениями и кругами вашего сервиса Сниккет."
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
msgid "Admin panel" msgid "Admin panel"
msgstr "Административная панель" msgstr "Административная панель"
@@ -1421,6 +1602,18 @@ msgstr ""
"Нажмите ниже, чтобы выйти из веб-портала. Это не влияет на другие " "Нажмите ниже, чтобы выйти из веб-портала. Это не влияет на другие "
"подключенные устройства." "подключенные устройства."
#: snikket_web/templates/user_manage_data.html:8
#, fuzzy
#| msgid "Your account"
msgid "Export account"
msgstr "Ваш аккаунт"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "Изменить пароль" msgstr "Изменить пароль"
@@ -1463,6 +1656,26 @@ msgstr ""
"Этот раздел позволяет вам контролировать, кто может видеть информацию вашего " "Этот раздел позволяет вам контролировать, кто может видеть информацию вашего "
"профиля, например, аватар и ник." "профиля, например, аватар и ник."
#~ msgid "Using a QR code scanner"
#~ msgstr "Используя сканер QR-кода"
#~ msgid "Using the Snikket app"
#~ msgstr "Использование приложения Сниккет"
#~ msgid ""
#~ "Use a <em>QR code</em> scanner on your mobile device to scan the code "
#~ "below:"
#~ msgstr ""
#~ "Используйте сканер <em>QR-кода</em> на вашем мобильном устройстве для "
#~ "сканирования кода, приведенного ниже:"
#~ msgid ""
#~ "Install the Snikket app on your mobile device, open it, and tap the "
#~ "'Scan' button at the top."
#~ msgstr ""
#~ "Установите приложение Сниккет на мобильное устройство, откройте его и "
#~ "нажмите кнопку 'Сканировать' сверху."
#~ msgid "Create password reset link for %(user_name)s" #~ msgid "Create password reset link for %(user_name)s"
#~ msgstr "Создать ссылку сброса пароля для %(user_name)s" #~ msgstr "Создать ссылку сброса пароля для %(user_name)s"

View File

@@ -7,299 +7,359 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2021-03-25 17:32+0100\n" "POT-Creation-Date: 2022-06-07 22:31+0200\n"
"PO-Revision-Date: 2021-03-27 00:01+0000\n" "PO-Revision-Date: 2022-01-18 09:21+0000\n"
"Last-Translator: Kim Alvefur <zash@zash.se>\n" "Last-Translator: Kim Alvefur <zash@zash.se>\n"
"Language-Team: Swedish <https://i18n.sotecware.net/projects/snikket/" "Language-Team: Swedish <http://i18n.sotecware.net/projects/snikket/web-"
"web-portal/sv/>\n" "portal/sv/>\n"
"Language: sv\n" "Language: sv\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.5.1\n" "X-Generator: Weblate 4.8.1\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: snikket_web/admin.py:59 #: snikket_web/admin.py:69 snikket_web/templates/admin_delete_user.html:10
msgid "Limited" #: snikket_web/templates/admin_edit_circle.html:59
msgstr "Begränsad"
#: snikket_web/admin.py:64 snikket_web/templates/admin_delete_user.html:10
#: snikket_web/templates/admin_users.html:8 #: snikket_web/templates/admin_users.html:8
msgid "Login name" msgid "Login name"
msgstr "Inloggningsnamn" msgstr "Inloggningsnamn"
#: snikket_web/admin.py:68 snikket_web/templates/admin_delete_user.html:12 #: snikket_web/admin.py:73 snikket_web/templates/admin_delete_user.html:12
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:61 #: snikket_web/templates/admin_edit_circle.html:60
#: snikket_web/templates/admin_users.html:9 snikket_web/user.py:63
msgid "Display name" msgid "Display name"
msgstr "Visningsnamn" msgstr "Visningsnamn"
#: snikket_web/admin.py:72 snikket_web/templates/admin_edit_user.html:33 #: snikket_web/admin.py:77 snikket_web/templates/admin_edit_user.html:32
msgid "Access Level" msgid "Access Level"
msgstr "Användarnivåer" msgstr "Användarnivåer"
#: snikket_web/admin.py:77 #: snikket_web/admin.py:79
msgid "Limited"
msgstr "Begränsad"
#: snikket_web/admin.py:80
msgid "Normal user" msgid "Normal user"
msgstr "Vanlig användare" msgstr "Vanlig användare"
#: snikket_web/admin.py:78 #: snikket_web/admin.py:81
msgid "Administrator" msgid "Administrator"
msgstr "Administratör" msgstr "Administratör"
#: snikket_web/admin.py:83 #: snikket_web/admin.py:86
msgid "Update user" msgid "Update user"
msgstr "Uppdatera användare" msgstr "Uppdatera användare"
#: snikket_web/admin.py:87 #: snikket_web/admin.py:90
msgid "Create password reset link" msgid "Create password reset link"
msgstr "Skapa länk för återställning av lösenord" msgstr "Skapa länk för återställning av lösenord"
#: snikket_web/admin.py:105 #: snikket_web/admin.py:108
msgid "Password reset link created" msgid "Password reset link created"
msgstr "Skapade länk för att återställa lösenord" msgstr "Skapade länk för att återställa lösenord"
#: snikket_web/admin.py:120 #: snikket_web/admin.py:123
msgid "User information updated." msgid "User information updated."
msgstr "Användarinformation uppdaterad." msgstr "Användarinformation uppdaterad."
#: snikket_web/admin.py:142 #: snikket_web/admin.py:145
msgid "Delete user permanently" msgid "Delete user permanently"
msgstr "Radera användare permanent" msgstr "Radera användare permanent"
#: snikket_web/admin.py:155 #: snikket_web/admin.py:158
msgid "User deleted" msgid "User deleted"
msgstr "Användare raderad" msgstr "Användare raderad"
#: snikket_web/admin.py:193 #: snikket_web/admin.py:196
msgid "Password reset link not found" msgid "Password reset link not found"
msgstr "Länk för återställning av lösenord hittades inte" msgstr "Länk för återställning av lösenord hittades inte"
#: snikket_web/admin.py:205 #: snikket_web/admin.py:208
msgid "Password reset link deleted" msgid "Password reset link deleted"
msgstr "Länk för återställning av lösenord raderad" msgstr "Länk för återställning av lösenord raderad"
#: snikket_web/admin.py:225 #: snikket_web/admin.py:228
msgid "Invite to circle" msgid "Invite to circle"
msgstr "Bjud in till krets" msgstr "Bjud in till krets"
#: snikket_web/admin.py:231 #: snikket_web/admin.py:234
msgid "At least one circle must be selected" msgid "At least one circle must be selected"
msgstr "Minst en krets behöver väljas" msgstr "Minst en krets behöver väljas"
#: snikket_web/admin.py:236 #: snikket_web/admin.py:239
msgid "Valid for" msgid "Valid for"
msgstr "Giltig i" msgstr "Giltig i"
#: snikket_web/admin.py:238 #: snikket_web/admin.py:241
msgid "One hour" msgid "One hour"
msgstr "En timme" msgstr "En timme"
#: snikket_web/admin.py:239 #: snikket_web/admin.py:242
msgid "Twelve hours" msgid "Twelve hours"
msgstr "Tolv timmar" msgstr "Tolv timmar"
#: snikket_web/admin.py:240 #: snikket_web/admin.py:243
msgid "One day" msgid "One day"
msgstr "En dag" msgstr "En dag"
#: snikket_web/admin.py:241 #: snikket_web/admin.py:244
msgid "One week" msgid "One week"
msgstr "En vecka" msgstr "En vecka"
#: snikket_web/admin.py:242 #: snikket_web/admin.py:245
msgid "Four weeks" msgid "Four weeks"
msgstr "Fyra veckor" msgstr "Fyra veckor"
#: snikket_web/admin.py:248 snikket_web/templates/admin_edit_invite.html:17 #: snikket_web/admin.py:251 snikket_web/templates/admin_edit_invite.html:17
msgid "Invitation type" msgid "Invitation type"
msgstr "Typ av inbjudan" msgstr "Typ av inbjudan"
#: snikket_web/admin.py:250 snikket_web/templates/library.j2:116 #: snikket_web/admin.py:253 snikket_web/templates/library.j2:116
msgid "Individual" msgid "Individual"
msgstr "Individuell" msgstr "Individuell"
#: snikket_web/admin.py:251 snikket_web/templates/library.j2:114 #: snikket_web/admin.py:254 snikket_web/templates/library.j2:114
msgid "Group" msgid "Group"
msgstr "Grupp" msgstr "Grupp"
#: snikket_web/admin.py:257 #: snikket_web/admin.py:260
msgid "New invitation link" msgid "New invitation link"
msgstr "Ny inbjudanslänk" msgstr "Ny inbjudanslänk"
#: snikket_web/admin.py:319 #: snikket_web/admin.py:322
msgid "Revoke" msgid "Revoke"
msgstr "Återkalla" msgstr "Återkalla"
#: snikket_web/admin.py:343 #: snikket_web/admin.py:346
msgid "Invitation created" msgid "Invitation created"
msgstr "Inbjudan skapad" msgstr "Inbjudan skapad"
#: snikket_web/admin.py:359 #: snikket_web/admin.py:362
msgid "No such invitation exists" msgid "No such invitation exists"
msgstr "Inbjudanslänken finns inte" msgstr "Inbjudanslänken finns inte"
#: snikket_web/admin.py:374 #: snikket_web/admin.py:377
msgid "Invitation revoked" msgid "Invitation revoked"
msgstr "Inbjudan återkallad" msgstr "Inbjudan återkallad"
#: snikket_web/admin.py:391 snikket_web/admin.py:439 #: snikket_web/admin.py:394 snikket_web/admin.py:442
msgid "Name" msgid "Name"
msgstr "Namn" msgstr "Namn"
#: snikket_web/admin.py:396 snikket_web/templates/admin_circles.html:47 #: snikket_web/admin.py:399 snikket_web/templates/admin_circles.html:47
msgid "Create circle" msgid "Create circle"
msgstr "Skapa krets" msgstr "Skapa krets"
#: snikket_web/admin.py:426 #: snikket_web/admin.py:429
msgid "Circle created" msgid "Circle created"
msgstr "Krets skapad" msgstr "Krets skapad"
#: snikket_web/admin.py:444 #: snikket_web/admin.py:447
msgid "Select user" msgid "Select user"
msgstr "Välj användare" msgstr "Välj användare"
#: snikket_web/admin.py:449 #: snikket_web/admin.py:452
msgid "Update circle" msgid "Update circle"
msgstr "Uppdatera krets" msgstr "Uppdatera krets"
#: snikket_web/admin.py:453 #: snikket_web/admin.py:456
msgid "Delete circle permanently" msgid "Delete circle permanently"
msgstr "Radera krets permanent" msgstr "Radera krets permanent"
#: snikket_web/admin.py:459 #: snikket_web/admin.py:462
msgid "Add user" msgid "Add user"
msgstr "Lägg till användare" msgstr "Lägg till användare"
#: snikket_web/admin.py:475 #: snikket_web/admin.py:478
msgid "No such circle exists" msgid "No such circle exists"
msgstr "Kretsen finns inte" msgstr "Kretsen finns inte"
#: snikket_web/admin.py:512 #: snikket_web/admin.py:515
msgid "Circle data updated" msgid "Circle data updated"
msgstr "Kretsen uppdaterades" msgstr "Kretsen uppdaterades"
#: snikket_web/admin.py:518 #: snikket_web/admin.py:521
msgid "Circle deleted" msgid "Circle deleted"
msgstr "Krets raderad" msgstr "Krets raderad"
#: snikket_web/admin.py:529 #: snikket_web/admin.py:532
msgid "User added to circle" msgid "User added to circle"
msgstr "Användare tillagd i krets" msgstr "Användare tillagd i krets"
#: snikket_web/admin.py:538 #: snikket_web/admin.py:541
msgid "User removed from circle" msgid "User removed from circle"
msgstr "Användaren %(username)s borttagen från krets" msgstr "Användaren %(username)s borttagen från krets"
#: snikket_web/infra.py:41 #: snikket_web/admin.py:610
msgid "Message contents"
msgstr "Meddelandeinnehåll"
#: snikket_web/admin.py:616
msgid "Only send to online users"
msgstr "Skicka bara till användare som är online"
#: snikket_web/admin.py:620
msgid "Post to all users"
msgstr "Skicka till alla användare"
#: snikket_web/admin.py:624
msgid "Send preview to yourself"
msgstr "Skicka förhandsvisning till dig själv"
#: snikket_web/admin.py:646
msgid "Announcement sent!"
msgstr "Tillkännagivande skickat!"
#: snikket_web/infra.py:53
msgid "Main" msgid "Main"
msgstr "Allmän" msgstr "Allmän"
#: snikket_web/invite.py:106 #: snikket_web/invite.py:35
msgid ""
"The account data you tried to import is too large to upload. Please contact "
"your Snikket operator."
msgstr ""
"Kontot du försökte importera är för stort för att ladda upp. Vänligen "
"kontakta din Snikket-operatör."
#: snikket_web/invite.py:114
msgid "Username" msgid "Username"
msgstr "Användarnamn" msgstr "Användarnamn"
#: snikket_web/invite.py:110 snikket_web/invite.py:177 snikket_web/main.py:41 #: snikket_web/invite.py:118 snikket_web/invite.py:186 snikket_web/main.py:43
msgid "Password" msgid "Password"
msgstr "Lösenord" msgstr "Lösenord"
#: snikket_web/invite.py:114 snikket_web/invite.py:181 #: snikket_web/invite.py:122 snikket_web/invite.py:190
msgid "Confirm password" msgid "Confirm password"
msgstr "Bekräfta lösenord" msgstr "Bekräfta lösenord"
#: snikket_web/invite.py:118 snikket_web/invite.py:185 #: snikket_web/invite.py:126 snikket_web/invite.py:194
msgid "The passwords must match." msgid "The passwords must match."
msgstr "Lösenorden måste vara identiska." msgstr "Lösenorden måste vara identiska."
#: snikket_web/invite.py:123 #: snikket_web/invite.py:131
msgid "Create account" msgid "Create account"
msgstr "Skapa konto" msgstr "Skapa konto"
#: snikket_web/invite.py:150 #: snikket_web/invite.py:158
msgid "That username is already taken." msgid "That username is already taken."
msgstr "Det användarnamnet är redan taget." msgstr "Det användarnamnet är redan taget."
#: snikket_web/invite.py:154 snikket_web/invite.py:218 #: snikket_web/invite.py:162 snikket_web/invite.py:227
msgid "Registration was declined for unknown reasons." msgid "Registration was declined for unknown reasons."
msgstr "Registreringen nekades av okänd anledning." msgstr "Registreringen nekades av okänd anledning."
#: snikket_web/invite.py:158 #: snikket_web/invite.py:166
msgid "The username is not valid." msgid "The username is not valid."
msgstr "Användarnamnet är ogiltigt." msgstr "Användarnamnet är ogiltigt."
#: snikket_web/invite.py:190 snikket_web/templates/user_home.html:32 #: snikket_web/invite.py:199 snikket_web/templates/user_home.html:32
#: snikket_web/templates/user_passwd.html:29 #: snikket_web/templates/user_passwd.html:29
msgid "Change password" msgid "Change password"
msgstr "Ändra lösenord" msgstr "Ändra lösenord"
#: snikket_web/main.py:36 #: snikket_web/invite.py:246
msgid "Account data file"
msgstr "Kontodatafil"
#: snikket_web/invite.py:250
msgid "Import data"
msgstr "Importera data"
#: snikket_web/invite.py:271
#, python-format
msgid ""
"The account data you tried to import is in an unknown format. Please upload "
"an XML file in XEP-0227 format (provided format: %(mimetype)s)."
msgstr ""
"Kontot du försökte importera är i ett okänt format. Vänligen ladda upp en "
"XML-fil i XEP-0227-format (angivet format: %(mimetype)s)."
#: snikket_web/invite.py:291 snikket_web/templates/unauth.html:18
#: snikket_web/user.py:178
msgid "Error"
msgstr "Fel"
#: snikket_web/main.py:38
msgid "Address" msgid "Address"
msgstr "Adress" msgstr "Adress"
#: snikket_web/main.py:46 #: snikket_web/main.py:48
msgid "Sign in" msgid "Sign in"
msgstr "Logga in" msgstr "Logga in"
#: snikket_web/main.py:55 #: snikket_web/main.py:57
msgid "Invalid username or password." msgid "Invalid username or password."
msgstr "Ogiltigt användarnamn eller lösenord." msgstr "Ogiltigt användarnamn eller lösenord."
#: snikket_web/main.py:83 #: snikket_web/main.py:85
msgid "Login successful!" msgid "Login successful!"
msgstr "Inloggning lyckades!" msgstr "Inloggning lyckades!"
#: snikket_web/user.py:27 #: snikket_web/user.py:29
msgid "Current password" msgid "Current password"
msgstr "Nuvarande lösenord" msgstr "Nuvarande lösenord"
#: snikket_web/user.py:32 #: snikket_web/user.py:34
msgid "New password" msgid "New password"
msgstr "Nytt lösenord" msgstr "Nytt lösenord"
#: snikket_web/user.py:37 #: snikket_web/user.py:39
msgid "Confirm new password" msgid "Confirm new password"
msgstr "Bekräfta nytt lösenord" msgstr "Bekräfta nytt lösenord"
#: snikket_web/user.py:41 #: snikket_web/user.py:43
msgid "The new passwords must match." msgid "The new passwords must match."
msgstr "De nya lösenorden måste vara identiska." msgstr "De nya lösenorden måste vara identiska."
#: snikket_web/user.py:48 #: snikket_web/user.py:50
msgid "Sign out" msgid "Sign out"
msgstr "Logga ut" msgstr "Logga ut"
#: snikket_web/user.py:53 #: snikket_web/user.py:55
msgid "Nobody" msgid "Nobody"
msgstr "Ingen" msgstr "Ingen"
#: snikket_web/user.py:54 #: snikket_web/user.py:56
msgid "Friends only" msgid "Friends only"
msgstr "Endast vänner" msgstr "Endast vänner"
#: snikket_web/user.py:55 #: snikket_web/user.py:57
msgid "Everyone" msgid "Everyone"
msgstr "Alla" msgstr "Alla"
#: snikket_web/user.py:65 #: snikket_web/user.py:67
msgid "Avatar" msgid "Avatar"
msgstr "Profilbild" msgstr "Profilbild"
#: snikket_web/user.py:69 #: snikket_web/user.py:71
msgid "Profile visibility" msgid "Profile visibility"
msgstr "Synlighet av profil" msgstr "Synlighet av profil"
#: snikket_web/user.py:74 #: snikket_web/user.py:76
msgid "Update profile" msgid "Update profile"
msgstr "Uppdatera profil" msgstr "Uppdatera profil"
#: snikket_web/user.py:99 #: snikket_web/user.py:82
msgid "Account data"
msgstr "Kontodata"
#: snikket_web/user.py:86
msgid "Upload"
msgstr "Ladda upp"
#: snikket_web/user.py:111
msgid "Incorrect password." msgid "Incorrect password."
msgstr "Fel lösenord." msgstr "Fel lösenord."
#: snikket_web/user.py:103 #: snikket_web/user.py:115
msgid "Password changed" msgid "Password changed"
msgstr "Lösenord ändrat" msgstr "Lösenord ändrat"
#: snikket_web/user.py:111 #: snikket_web/user.py:123
msgid "" msgid ""
"The chosen avatar is too big. To be able to upload larger avatars, please " "The chosen avatar is too big. To be able to upload larger avatars, please "
"use the app." "use the app."
@@ -307,13 +367,17 @@ msgstr ""
"Den valda profilbilden är för stor. Vänligen använd appen för att kunna " "Den valda profilbilden är för stor. Vänligen använd appen för att kunna "
"välja större bilder." "välja större bilder."
#: snikket_web/user.py:159 #: snikket_web/user.py:170
msgid "Profile updated" msgid "Profile updated"
msgstr "Profilen uppdaterad" msgstr "Profilen uppdaterad"
#: snikket_web/templates/unauth.html:18 snikket_web/user.py:167 #: snikket_web/user.py:184
msgid "Error" msgid "Export"
msgstr "Fel" msgstr "Exportera"
#: snikket_web/user.py:202
msgid "You currently have no account data to export."
msgstr "Du har för närvarande inget data att exportera."
#: snikket_web/templates/_footer.html:4 #: snikket_web/templates/_footer.html:4
#, python-format #, python-format
@@ -405,7 +469,7 @@ msgstr ""
msgid "Software Versions" msgid "Software Versions"
msgstr "Mjukvaruversioner" msgstr "Mjukvaruversioner"
#: snikket_web/templates/about.html:29 #: snikket_web/templates/about.html:32
msgid "Back to the main page" msgid "Back to the main page"
msgstr "Tillbaka till huvudsidan" msgstr "Tillbaka till huvudsidan"
@@ -444,6 +508,7 @@ msgid "Members"
msgstr "Medlemmar" msgstr "Medlemmar"
#: snikket_web/templates/admin_circles.html:15 #: snikket_web/templates/admin_circles.html:15
#: snikket_web/templates/admin_edit_circle.html:61
#: snikket_web/templates/admin_invites.html:24 #: snikket_web/templates/admin_invites.html:24
#: snikket_web/templates/admin_users.html:10 #: snikket_web/templates/admin_users.html:10
msgid "Actions" msgid "Actions"
@@ -525,7 +590,7 @@ msgid "Delete user %(user_name)s"
msgstr "Radera användaren %(user_name)s" msgstr "Radera användaren %(user_name)s"
#: snikket_web/templates/admin_delete_user.html:6 #: snikket_web/templates/admin_delete_user.html:6
#: snikket_web/templates/admin_edit_user.html:54 #: snikket_web/templates/admin_edit_user.html:53
msgid "Delete user" msgid "Delete user"
msgstr "Radera användare" msgstr "Radera användare"
@@ -550,6 +615,7 @@ msgstr ""
#: snikket_web/templates/admin_delete_user.html:19 #: snikket_web/templates/admin_delete_user.html:19
#: snikket_web/templates/admin_reset_user_password.html:25 #: snikket_web/templates/admin_reset_user_password.html:25
#: snikket_web/templates/user_logout.html:10 #: snikket_web/templates/user_logout.html:10
#: snikket_web/templates/user_manage_data.html:14
#: snikket_web/templates/user_passwd.html:27 #: snikket_web/templates/user_passwd.html:27
#: snikket_web/templates/user_profile.html:32 #: snikket_web/templates/user_profile.html:32
msgid "Back" msgid "Back"
@@ -599,28 +665,37 @@ msgstr "Användare i en krets raderas inte när kretsen raderas."
msgid "Circle members" msgid "Circle members"
msgstr "Medlemmar i krets" msgstr "Medlemmar i krets"
#: snikket_web/templates/admin_edit_circle.html:70 #: snikket_web/templates/admin_edit_circle.html:71
msgid "The user has been deleted from the server."
msgstr "Användaren har raderats från servern."
#: snikket_web/templates/admin_edit_circle.html:71
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "raderad"
#: snikket_web/templates/admin_edit_circle.html:77
#, python-format #, python-format
msgid "Remove user %(username)s from circle" msgid "Remove user %(username)s from circle"
msgstr "Radera användaren %(username)s från krets" msgstr "Radera användaren %(username)s från krets"
#: snikket_web/templates/admin_edit_circle.html:78 #: snikket_web/templates/admin_edit_circle.html:85
msgid "This circle currently has no members." msgid "This circle currently has no members."
msgstr "Denna krets har för närvarande inga medlemmar." msgstr "Denna krets har för närvarande inga medlemmar."
#: snikket_web/templates/admin_edit_circle.html:80 #: snikket_web/templates/admin_edit_circle.html:87
msgid "Invite more members" msgid "Invite more members"
msgstr "Bjud in fler medlemmar" msgstr "Bjud in fler medlemmar"
#: snikket_web/templates/admin_edit_circle.html:83 #: snikket_web/templates/admin_edit_circle.html:90
msgid "Add existing user" msgid "Add existing user"
msgstr "Lägg till befintlig användare" msgstr "Lägg till befintlig användare"
#: snikket_web/templates/admin_edit_circle.html:94 #: snikket_web/templates/admin_edit_circle.html:101
msgid "All users added" msgid "All users added"
msgstr "Alla användare tillagda" msgstr "Alla användare tillagda"
#: snikket_web/templates/admin_edit_circle.html:95 #: snikket_web/templates/admin_edit_circle.html:102
msgid "All users on this service are already in this circle." msgid "All users on this service are already in this circle."
msgstr "Alla användare på den här tjänsten är redan i denna krets." msgstr "Alla användare på den här tjänsten är redan i denna krets."
@@ -704,15 +779,15 @@ msgstr ""
msgid "Edit user %(user_name)s" msgid "Edit user %(user_name)s"
msgstr "Redigera användaren %(user_name)s" msgstr "Redigera användaren %(user_name)s"
#: snikket_web/templates/admin_edit_user.html:23 #: snikket_web/templates/admin_edit_user.html:22
msgid "Edit user" msgid "Edit user"
msgstr "Redigera användare" msgstr "Redigera användare"
#: snikket_web/templates/admin_edit_user.html:27 #: snikket_web/templates/admin_edit_user.html:26
msgid "The login name cannot be changed." msgid "The login name cannot be changed."
msgstr "Inloggningsnamnet kan inte ändras." msgstr "Inloggningsnamnet kan inte ändras."
#: snikket_web/templates/admin_edit_user.html:34 #: snikket_web/templates/admin_edit_user.html:33
msgid "" msgid ""
"The access level of a user determines what interactions are allowed for them " "The access level of a user determines what interactions are allowed for them "
"on your Snikket service." "on your Snikket service."
@@ -720,24 +795,24 @@ msgstr ""
"Användarnivåer bestämmer vilka interaktioner är tillåtna för användare på " "Användarnivåer bestämmer vilka interaktioner är tillåtna för användare på "
"din Snikket-tjänst." "din Snikket-tjänst."
#: snikket_web/templates/admin_edit_user.html:41 #: snikket_web/templates/admin_edit_user.html:40
#, python-format #, python-format
msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgid "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>" msgstr "<strong>%(title)s%(icon)s</strong><p>%(description)s</p>"
#: snikket_web/templates/admin_edit_user.html:51 #: snikket_web/templates/admin_edit_user.html:50
msgid "Return to user list" msgid "Return to user list"
msgstr "Tillbaka till användarlistan" msgstr "Tillbaka till användarlistan"
#: snikket_web/templates/admin_edit_user.html:59 #: snikket_web/templates/admin_edit_user.html:58
msgid "Further actions" msgid "Further actions"
msgstr "Fler handlingar" msgstr "Fler handlingar"
#: snikket_web/templates/admin_edit_user.html:61 #: snikket_web/templates/admin_edit_user.html:60
msgid "Reset password" msgid "Reset password"
msgstr "Återställ lösenord" msgstr "Återställ lösenord"
#: snikket_web/templates/admin_edit_user.html:64 #: snikket_web/templates/admin_edit_user.html:63
msgid "" msgid ""
"If the user has lost their password, you can use the button below to create " "If the user has lost their password, you can use the button below to create "
"a special link which allows to change the password of the account, once." "a special link which allows to change the password of the account, once."
@@ -745,11 +820,11 @@ msgstr ""
"Om användaren har tappat bort sitt lösenord så kan du använda knappen nedan " "Om användaren har tappat bort sitt lösenord så kan du använda knappen nedan "
"för att skapa en speciell engångslänk som låter dem ange ett nytt lösenord." "för att skapa en speciell engångslänk som låter dem ange ett nytt lösenord."
#: snikket_web/templates/admin_edit_user.html:69 #: snikket_web/templates/admin_edit_user.html:68
msgid "Debug information" msgid "Debug information"
msgstr "Felsökningsinformation" msgstr "Felsökningsinformation"
#: snikket_web/templates/admin_edit_user.html:71 #: snikket_web/templates/admin_edit_user.html:70
msgid "" msgid ""
"In some cases, extended information about the user account and the connected " "In some cases, extended information about the user account and the connected "
"devices is necessary to troubleshoot issues. The button below reveals this " "devices is necessary to troubleshoot issues. The button below reveals this "
@@ -758,7 +833,7 @@ msgstr ""
"Ibland behövs utökad information om användarkontot och anslutna enheter för " "Ibland behövs utökad information om användarkontot och anslutna enheter för "
"att felsöka problem. Knappen nedan visar denna (känsliga) information." "att felsöka problem. Knappen nedan visar denna (känsliga) information."
#: snikket_web/templates/admin_edit_user.html:75 #: snikket_web/templates/admin_edit_user.html:74
msgid "Show debug information" msgid "Show debug information"
msgstr "Visa felsökningsinformation" msgstr "Visa felsökningsinformation"
@@ -801,11 +876,28 @@ msgstr "Skapa, återkalla och kopiera inbjudningar."
msgid "Manage invitations" msgid "Manage invitations"
msgstr "Hantera inbjudningar" msgstr "Hantera inbjudningar"
#: snikket_web/templates/admin_home.html:36 #: snikket_web/templates/admin_home.html:35
msgid "System health"
msgstr "Systemhälsa"
#: snikket_web/templates/admin_home.html:38
msgid "View the server status or send a broadcast message to all users."
msgstr "Visa serverns status eller skicka meddelande till alla användare."
#: snikket_web/templates/admin_home.html:40
msgid "Send a broadcast message to all users."
msgstr "Skicka ett meddelande till alla användare."
#: snikket_web/templates/admin_home.html:43
#: snikket_web/templates/admin_system.html:4
msgid "Manage system"
msgstr "Hantera system"
#: snikket_web/templates/admin_home.html:48
msgid "Go back to your user's web portal page." msgid "Go back to your user's web portal page."
msgstr "Gå tillbaka till din användares webbportalsida." msgstr "Gå tillbaka till din användares webbportalsida."
#: snikket_web/templates/admin_home.html:38 #: snikket_web/templates/admin_home.html:50
msgid "Exit admin panel" msgid "Exit admin panel"
msgstr "Lämna administrationspanelen" msgstr "Lämna administrationspanelen"
@@ -858,6 +950,86 @@ msgstr ""
msgid "Destroy link" msgid "Destroy link"
msgstr "Förstör länk" msgstr "Förstör länk"
#: snikket_web/templates/admin_system.html:6
msgid "Overall system status"
msgstr "Övergripande systemstatus"
#: snikket_web/templates/admin_system.html:9
msgid "System load (5 minute average)"
msgstr "Systemlast (5 minuters medelvärde)"
#: snikket_web/templates/admin_system.html:14
#: snikket_web/templates/admin_system.html:22
#: snikket_web/templates/admin_system.html:37
#: snikket_web/templates/admin_system.html:45
#: snikket_web/templates/admin_system.html:60
#: snikket_web/templates/admin_system.html:68
#: snikket_web/templates/admin_system.html:76
#: snikket_web/templates/admin_system.html:84
msgid "unknown"
msgstr "okänd"
#: snikket_web/templates/admin_system.html:17
msgid "Memory use"
msgstr "Minnesanvändning"
#: snikket_web/templates/admin_system.html:20
#, python-format
msgid ""
"%(percentage_global)s of %(mem_available)s. Of that, Snikket uses "
"%(percentage_snikket)s."
msgstr ""
"%(percentage_global)s av %(mem_available)s. Av det använder Snikket "
"%(percentage_snikket)s."
#: snikket_web/templates/admin_system.html:27
msgid "Web portal status"
msgstr "Webbportalstatus"
#: snikket_web/templates/admin_system.html:30
#: snikket_web/templates/admin_system.html:53
msgid "Version"
msgstr "Version"
#: snikket_web/templates/admin_system.html:31
#: snikket_web/templates/admin_system.html:54
msgid "View all versions"
msgstr "Visa alla versioner"
#: snikket_web/templates/admin_system.html:32
#: snikket_web/templates/admin_system.html:55
msgid "Average CPU use"
msgstr "Genomsnittlig processoranvändning"
#: snikket_web/templates/admin_system.html:40
#: snikket_web/templates/admin_system.html:63
msgid "Current memory use"
msgstr "Nuvarande minnesanvändning"
#: snikket_web/templates/admin_system.html:50
msgid "Snikket server status"
msgstr "Snikket-serverstatus"
#: snikket_web/templates/admin_system.html:71
msgid "Storage used by shared files"
msgstr "Utrymme används av delade filer"
#: snikket_web/templates/admin_system.html:79
msgid "Connected devices"
msgstr "Anslutna enheter"
#: snikket_web/templates/admin_system.html:90
msgid "Broadcast message"
msgstr "Tillkännagivande"
#: snikket_web/templates/admin_system.html:92
msgid ""
"This form allows you to send a message to all users currently online on your "
"Snikket server. Use it wisely."
msgstr ""
"Det här formuläret låter dig skicka ett tillkännagivande till alla användare "
"som just nu är online på din Snikket-server. Använd det med vishet."
#: snikket_web/templates/admin_users.html:19 #: snikket_web/templates/admin_users.html:19
msgid "The user is an administrator." msgid "The user is an administrator."
msgstr "Användaren är en administratör." msgstr "Användaren är en administratör."
@@ -969,8 +1141,8 @@ msgstr "Appen redan installerad?"
#: snikket_web/templates/invite_register.html:16 #: snikket_web/templates/invite_register.html:16
#: snikket_web/templates/invite_reset_view.html:21 #: snikket_web/templates/invite_reset_view.html:21
#: snikket_web/templates/invite_view.html:41 #: snikket_web/templates/invite_view.html:41
#: snikket_web/templates/invite_view.html:106 #: snikket_web/templates/invite_view.html:84
#: snikket_web/templates/invite_view.html:134 #: snikket_web/templates/invite_view.html:112
msgid "Open the app" msgid "Open the app"
msgstr "Öppna appen" msgstr "Öppna appen"
@@ -1035,7 +1207,6 @@ msgid "You can now log in using your new password."
msgstr "Nu kan du logga in med ditt nya lösenord." msgstr "Nu kan du logga in med ditt nya lösenord."
#: snikket_web/templates/invite_reset_success.html:12 #: snikket_web/templates/invite_reset_success.html:12
#: snikket_web/templates/invite_success.html:18
msgid "You can now safely close this page." msgid "You can now safely close this page."
msgstr "Du kan nu stänga den här sidan utan risk." msgstr "Du kan nu stänga den här sidan utan risk."
@@ -1070,7 +1241,6 @@ msgstr ""
"Scanna-knappen överst." "Scanna-knappen överst."
#: snikket_web/templates/invite_reset_view.html:26 #: snikket_web/templates/invite_reset_view.html:26
#: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"Your camera will turn on. Point it at the square code below until it is " "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 " "within the highlighted square on your screen, and wait until the app "
@@ -1125,6 +1295,43 @@ msgstr ""
"Nu kan du sätta upp din generiska XMPP-klient med ovanstående adress och " "Nu kan du sätta upp din generiska XMPP-klient med ovanstående adress och "
"lösenordet du angav vid registrering." "lösenordet du angav vid registrering."
#: snikket_web/templates/invite_success.html:18
#, python-format
msgid ""
"You can now safely close this page, or log in to the web portal to <a href="
"\"%(login_url)s\">manage your account</a>."
msgstr ""
"Du kan nu stänga den här sidan utan risk, eller logga in till webbportalen "
"för att <a href=\"%(login_url)s\">hantera ditt konto</a>."
#: snikket_web/templates/invite_success.html:21
msgid "Import successful"
msgstr "Importen lyckades"
#: snikket_web/templates/invite_success.html:22
msgid "Congratulations! Your account data has been successfully imported."
msgstr "Grattulerar! Importen av ditt kontodata lyckades."
#: snikket_web/templates/invite_success.html:26
msgid "Moving to Snikket?"
msgstr "Flyttar till Snikket?"
#: snikket_web/templates/invite_success.html:27
msgid ""
"If you are moving from a different Snikket instance or another XMPP-"
"compatible service, you may optionally import the data (contacts, profile "
"information, etc.) from your previous account. When you have exported the "
"data from your previous account, upload it using the form below."
msgstr ""
"Om du flyttar från en annan Snikket-instans eller annan XMPP-kompatibel "
"tjänst så kan du om du vill importera data (kontakter, profilinformation, "
"etc.) från ditt förra konto. När du exporterat data från förra kontot, ladda "
"upp det med formuläret nedan."
#: snikket_web/templates/invite_success.html:30
msgid "Upload account data"
msgstr "Ladda upp kontodata"
#: snikket_web/templates/invite_view.html:6 #: snikket_web/templates/invite_view.html:6
#, python-format #, python-format
msgid "Invite to %(site_name)s | Snikket" msgid "Invite to %(site_name)s | Snikket"
@@ -1170,7 +1377,7 @@ msgid "Get it on Google Play"
msgstr "Hämta den på Google Play" msgstr "Hämta den på Google Play"
#: snikket_web/templates/invite_view.html:30 #: snikket_web/templates/invite_view.html:30
#: snikket_web/templates/invite_view.html:102 #: snikket_web/templates/invite_view.html:80
msgid "Download on the App Store" msgid "Download on the App Store"
msgstr "Hämta på App Store" msgstr "Hämta på App Store"
@@ -1206,11 +1413,11 @@ msgid "Scan invite code"
msgstr "Scanna inbjudningskoden" msgstr "Scanna inbjudningskoden"
#: snikket_web/templates/invite_view.html:55 #: snikket_web/templates/invite_view.html:55
#: snikket_web/templates/invite_view.html:84 #: snikket_web/templates/invite_view.html:62
#: snikket_web/templates/invite_view.html:96 #: snikket_web/templates/invite_view.html:74
#: snikket_web/templates/invite_view.html:112 #: snikket_web/templates/invite_view.html:90
#: snikket_web/templates/invite_view.html:124 #: snikket_web/templates/invite_view.html:102
#: snikket_web/templates/invite_view.html:140 #: snikket_web/templates/invite_view.html:118
msgid "Close" msgid "Close"
msgstr "Stäng" msgstr "Stäng"
@@ -1223,33 +1430,11 @@ msgstr ""
"koden med din kamera. Du kan antingen använda en app för att scanna QR-koder " "koden med din kamera. Du kan antingen använda en app för att scanna QR-koder "
"eller Snikket-appen själv." "eller Snikket-appen själv."
#: snikket_web/templates/invite_view.html:63 #: snikket_web/templates/invite_view.html:71
msgid "Using a QR code scanner"
msgstr "Med en QR-kodsläsare"
#: snikket_web/templates/invite_view.html:65
msgid "Using the Snikket app"
msgstr "Med Snikket-appen"
#: snikket_web/templates/invite_view.html:70
msgid ""
"Use a <em>QR code</em> scanner on your mobile device to scan the code below:"
msgstr ""
"Scanna koden nedan med en <em>QR-kods</em> scanner på din mobila enhet:"
#: snikket_web/templates/invite_view.html:76
msgid ""
"Install the Snikket app on your mobile device, open it, and tap the 'Scan' "
"button at the top."
msgstr ""
"Installera Snikket-appen på din mobila enhet, öppna den, och tryck på "
"'Scanna'-knappen överst."
#: snikket_web/templates/invite_view.html:93
msgid "Install on iOS" msgid "Install on iOS"
msgstr "Installera på iOS" msgstr "Installera på iOS"
#: snikket_web/templates/invite_view.html:99 #: snikket_web/templates/invite_view.html:77
msgid "" msgid ""
"After downloading Snikket from the App Store, you have to return to this " "After downloading Snikket from the App Store, you have to return to this "
"invite link and tap on \"Open the app\" to proceed." "invite link and tap on \"Open the app\" to proceed."
@@ -1257,12 +1442,12 @@ msgstr ""
"Efter att ha laddat ner Snikket från App Store behöver du komma tillbaka " "Efter att ha laddat ner Snikket från App Store behöver du komma tillbaka "
"till den här inbjudan och klicka på \"Öppna appen\" för att fortsätta." "till den här inbjudan och klicka på \"Öppna appen\" för att fortsätta."
#: snikket_web/templates/invite_view.html:101 #: snikket_web/templates/invite_view.html:79
msgid "First download Snikket from the App Store using the button below:" msgid "First download Snikket from the App Store using the button below:"
msgstr "Ladda först ner Snikket från App Store med knappen nedan:" msgstr "Ladda först ner Snikket från App Store med knappen nedan:"
#: snikket_web/templates/invite_view.html:103 #: snikket_web/templates/invite_view.html:81
#: snikket_web/templates/invite_view.html:131 #: snikket_web/templates/invite_view.html:109
msgid "" msgid ""
"After the installation is complete, you can return to this page and tap the " "After the installation is complete, you can return to this page and tap the "
"\"Open the app\" button to continue with the setup:" "\"Open the app\" button to continue with the setup:"
@@ -1270,12 +1455,12 @@ msgstr ""
"Efter att installationen är färdig behöver du komma tillbaka till den här " "Efter att installationen är färdig behöver du komma tillbaka till den här "
"inbjudan och klicka på \"Öppna appen\" för att fortsätta:" "inbjudan och klicka på \"Öppna appen\" för att fortsätta:"
#: snikket_web/templates/invite_view.html:121 #: snikket_web/templates/invite_view.html:99
#: snikket_web/templates/invite_view.html:130 #: snikket_web/templates/invite_view.html:108
msgid "Install via F-Droid" msgid "Install via F-Droid"
msgstr "Installera via F-Droid" msgstr "Installera via F-Droid"
#: snikket_web/templates/invite_view.html:127 #: snikket_web/templates/invite_view.html:105
msgid "" msgid ""
"After installing Snikket via F-Droid, you have to return to this invite link " "After installing Snikket via F-Droid, you have to return to this invite link "
"and tap on \"Open the app\" to proceed." "and tap on \"Open the app\" to proceed."
@@ -1283,7 +1468,7 @@ msgstr ""
"Efter att ha installerat Snikket via F-Droid behöver du komma tillbaka till " "Efter att ha installerat Snikket via F-Droid behöver du komma tillbaka till "
"den här inbjudan och klicka på \"Öppna appen\" för att fortsätta." "den här inbjudan och klicka på \"Öppna appen\" för att fortsätta."
#: snikket_web/templates/invite_view.html:129 #: snikket_web/templates/invite_view.html:107
msgid "First install Snikket from F-Droid using the button below:" msgid "First install Snikket from F-Droid using the button below:"
msgstr "Installera först Snikket från F-Droid med knappen nedan:" msgstr "Installera först Snikket från F-Droid med knappen nedan:"
@@ -1295,10 +1480,6 @@ msgstr "Kopiera länk"
msgid "Invalid input" msgid "Invalid input"
msgstr "Ogiltigt indata" msgstr "Ogiltigt indata"
#: snikket_web/templates/library.j2:108
msgid "deleted"
msgstr "raderad"
#: snikket_web/templates/library.j2:122 #: snikket_web/templates/library.j2:122
msgid "Can be used multiple times to create accounts on this Snikket service." msgid "Can be used multiple times to create accounts on this Snikket service."
msgstr "" msgstr ""
@@ -1355,15 +1536,20 @@ msgstr "Din XMPP-adress"
msgid "Edit profile" msgid "Edit profile"
msgstr "Redigera profil" msgstr "Redigera profil"
#: snikket_web/templates/user_home.html:38 #: snikket_web/templates/user_home.html:33
#: snikket_web/templates/user_manage_data.html:4
msgid "Manage your data"
msgstr "Hantera ditt data"
#: snikket_web/templates/user_home.html:39
msgid "Your Snikket" msgid "Your Snikket"
msgstr "Ditt Snikket" msgstr "Ditt Snikket"
#: snikket_web/templates/user_home.html:40 #: snikket_web/templates/user_home.html:41
msgid "Manage users, invitations and circles of your Snikket service." msgid "Manage users, invitations and circles of your Snikket service."
msgstr "Hantera användare, inbjudningar och kretsar i din Snikket-tjänst." msgstr "Hantera användare, inbjudningar och kretsar i din Snikket-tjänst."
#: snikket_web/templates/user_home.html:42 #: snikket_web/templates/user_home.html:43
msgid "Admin panel" msgid "Admin panel"
msgstr "Administrationspanel" msgstr "Administrationspanel"
@@ -1379,6 +1565,18 @@ msgstr ""
"Klicka nedanför för att logga ut dig ur webbportalen. Detta påverkar inte " "Klicka nedanför för att logga ut dig ur webbportalen. Detta påverkar inte "
"några av dina anslutna enheter." "några av dina anslutna enheter."
#: snikket_web/templates/user_manage_data.html:8
msgid "Export account"
msgstr "Exportera konto"
#: snikket_web/templates/user_manage_data.html:9
msgid ""
"Download your account data as a file for backup purposes or to move your "
"account to another service."
msgstr ""
"Ladda ner ditt kontodata som en fil att ha som säkerhetskopia eller om du "
"vill flytta ditt konto till en annan tjänst."
#: snikket_web/templates/user_passwd.html:5 #: snikket_web/templates/user_passwd.html:5
msgid "Change your password" msgid "Change your password"
msgstr "Ändra ditt lösenord" msgstr "Ändra ditt lösenord"
@@ -1421,6 +1619,25 @@ msgstr ""
"Den här avdelningen låter dig hantera vilka som kan se din profil, såsom din " "Den här avdelningen låter dig hantera vilka som kan se din profil, såsom din "
"profilbild och visningsnamn." "profilbild och visningsnamn."
#~ msgid "Using a QR code scanner"
#~ msgstr "Med en QR-kodsläsare"
#~ msgid "Using the Snikket app"
#~ msgstr "Med Snikket-appen"
#~ msgid ""
#~ "Use a <em>QR code</em> scanner on your mobile device to scan the code "
#~ "below:"
#~ msgstr ""
#~ "Scanna koden nedan med en <em>QR-kods</em> scanner på din mobila enhet:"
#~ msgid ""
#~ "Install the Snikket app on your mobile device, open it, and tap the "
#~ "'Scan' button at the top."
#~ msgstr ""
#~ "Installera Snikket-appen på din mobila enhet, öppna den, och tryck på "
#~ "'Scanna'-knappen överst."
#~ msgid "Create password reset link for %(user_name)s" #~ msgid "Create password reset link for %(user_name)s"
#~ msgstr "Skapa länk för att återställa lösenord för %(user_name)s" #~ msgstr "Skapa länk för att återställa lösenord för %(user_name)s"

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,11 @@
import asyncio import asyncio
import typing import typing
import urllib
import quart
import quart.flask_patch import quart.flask_patch
from quart import ( from quart import (
Blueprint, Blueprint,
Response,
render_template, render_template,
request, request,
redirect, redirect,
@@ -58,7 +59,7 @@ _ACCESS_MODEL_CHOICES = [
class ProfileForm(BaseForm): class ProfileForm(BaseForm):
nickname = wtforms.TextField( nickname = wtforms.StringField(
_l("Display name"), _l("Display name"),
) )
@@ -76,16 +77,26 @@ class ProfileForm(BaseForm):
) )
@bp.route("/") # type:ignore class ImportAccountDataForm(BaseForm):
account_data_file = wtforms.FileField(
_l("Account data")
)
action_upload = wtforms.SubmitField(
_l("Upload"),
)
@bp.route("/")
@client.require_session() @client.require_session()
async def index() -> str: async def index() -> str:
user_info = await client.get_user_info() user_info = await client.get_user_info()
return await render_template("user_home.html", user_info=user_info) return await render_template("user_home.html", user_info=user_info)
@bp.route('/passwd', methods=["GET", "POST"]) # type:ignore @bp.route('/passwd', methods=["GET", "POST"])
@client.require_session() @client.require_session()
async def change_pw() -> typing.Union[str, quart.Response]: async def change_pw() -> typing.Union[str, werkzeug.Response]:
form = ChangePasswordForm() form = ChangePasswordForm()
if form.validate_on_submit(): if form.validate_on_submit():
try: try:
@@ -115,9 +126,9 @@ EAVATARTOOBIG = _l(
) )
@bp.route("/profile", methods=["GET", "POST"]) # type:ignore @bp.route("/profile", methods=["GET", "POST"])
@client.require_session() @client.require_session()
async def profile() -> typing.Union[str, quart.Response]: async def profile() -> typing.Union[str, werkzeug.Response]:
max_avatar_size = current_app.config["MAX_AVATAR_SIZE"] max_avatar_size = current_app.config["MAX_AVATAR_SIZE"]
form = ProfileForm() form = ProfileForm()
@@ -139,7 +150,6 @@ async def profile() -> typing.Union[str, quart.Response]:
mimetype = file_info.mimetype mimetype = file_info.mimetype
data = file_info.stream.read() data = file_info.stream.read()
if len(data) > max_avatar_size: if len(data) > max_avatar_size:
print(len(data), max_avatar_size)
form.avatar.errors.append(EAVATARTOOBIG) form.avatar.errors.append(EAVATARTOOBIG)
ok = False ok = False
elif len(data) > 0: elif len(data) > 0:
@@ -169,9 +179,49 @@ async def profile() -> typing.Union[str, quart.Response]:
avatar_too_big_warning=EAVATARTOOBIG) avatar_too_big_warning=EAVATARTOOBIG)
@bp.route("/logout", methods=["GET", "POST"]) # type:ignore class DataExportForm(BaseForm):
action_export = wtforms.SubmitField(
_l("Export")
)
@bp.route("/manage_data", methods=["GET", "POST"])
@client.require_session() @client.require_session()
async def logout() -> typing.Union[quart.Response, str]: async def manage_data() -> typing.Union[str, quart.Response]:
form = DataExportForm()
if form.validate_on_submit():
user_info = await client.get_user_info()
# The UTF-8 version of the filename needs to be percent-encoded
encoded_address = urllib.parse.quote(
user_info["address"].encode(encoding='utf-8', errors='strict')
)
account_data = await client.export_account_data()
if account_data is None:
await flash(
_("You currently have no account data to export."),
"alert"
)
else:
return Response(account_data,
mimetype="application/xml",
headers={
# We provide the UTF-8 filename, but the ASCII
# one will be used as a fallback for legacy
# browsers (RFC 5987)
"Content-Disposition": (
'attachment; filename="account-data.xml"; '
'filename*="UTF-8\'\'account-data-{}.xml"'
).format(encoded_address)
})
return await render_template("user_manage_data.html",
form=form,
)
@bp.route("/logout", methods=["GET", "POST"])
@client.require_session()
async def logout() -> typing.Union[werkzeug.Response, str]:
form = LogoutForm() form = LogoutForm()
if form.validate_on_submit(): if form.validate_on_submit():
await client.logout() await client.logout()

View File

@@ -207,7 +207,7 @@ def make_avatar_metadata_set_request(
item, item,
"metadata", xmlns=NS_USER_AVATAR_METADATA) "metadata", xmlns=NS_USER_AVATAR_METADATA)
attr: typing.MutableMapping[str, str] = { attr: typing.Dict[str, str] = {
"id": id_, "id": id_,
"bytes": str(size), "bytes": str(size),
"type": mimetype, "type": mimetype,
@@ -217,7 +217,12 @@ def make_avatar_metadata_set_request(
if height is not None: if height is not None:
attr["height"] = str(height) attr["height"] = str(height)
ET.SubElement(metadata_wrap, "info", xmlns=NS_USER_AVATAR_METADATA, **attr) ET.SubElement(
metadata_wrap,
"info",
xmlns=NS_USER_AVATAR_METADATA,
**attr, # type: ignore
)
return req return req

View File

@@ -6,13 +6,19 @@ action/logout:logout
action/login:login action/login:login
action/exit_to_app:exit_to_app action/exit_to_app:exit_to_app
action/lock:lock action/lock:lock
communication/import_export:import_export
communication/qr_code:qrcode communication/qr_code:qrcode
communication/vpn_key:passwd communication/vpn_key:passwd
communication/rss_feed:broadcast
content/add_circle_outline:add content/add_circle_outline:add
content/add_link:create_link content/add_link:create_link
content/remove_circle_outline:remove content/remove_circle_outline:remove
content/content_copy:copy content/content_copy:copy
content/link_off:remove_link content/link_off:remove_link
content/send:send
file/file_download:download
file/file_upload:upload
file/folder:folder
navigation/arrow_back:back navigation/arrow_back:back
navigation/arrow_forward:forward navigation/arrow_forward:forward
navigation/cancel:cancel navigation/cancel:cancel
@@ -26,3 +32,4 @@ navigation/close:close
image/edit:edit image/edit:edit
action/admin_panel_settings:admin action/admin_panel_settings:admin
content/link:link content/link:link
content/insights:insights