mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-05 06:36:19 +01:00
Compare commits
141 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ce1939040 | ||
|
|
322131cd4f | ||
|
|
55e6e92da5 | ||
|
|
e5d29629a5 | ||
|
|
26e187e4c8 | ||
|
|
3480c4e0e8 | ||
|
|
1544f097e0 | ||
|
|
2477c31656 | ||
|
|
0dc631d69e | ||
|
|
2a9981cdb9 | ||
|
|
424246df26 | ||
|
|
563e2210ef | ||
|
|
02a1078005 | ||
|
|
30107de44e | ||
|
|
77a08cd218 | ||
|
|
e5a09027e5 | ||
|
|
52b6c5d341 | ||
|
|
8b895b76b5 | ||
|
|
babd71702f | ||
|
|
3ec3cbdff7 | ||
|
|
51611e1237 | ||
|
|
39519bab91 | ||
|
|
90dc6a4d4c | ||
|
|
53ffd7f885 | ||
|
|
efc7475228 | ||
|
|
380c41400b | ||
|
|
079c12a72e | ||
|
|
4f1ebedc44 | ||
|
|
66822107e3 | ||
|
|
7856cd5ce4 | ||
|
|
36b3077caa | ||
|
|
1786f3a642 | ||
|
|
55927c6f15 | ||
|
|
8fbe0ba45d | ||
|
|
1563805ddb | ||
|
|
c58ed53369 | ||
|
|
32128ace1c | ||
|
|
7290eaad7e | ||
|
|
f23d4f4dd1 | ||
|
|
ab3f10e6f2 | ||
|
|
20187cc73e | ||
|
|
1f55fbfccc | ||
|
|
12383d79c8 | ||
|
|
56e2875650 | ||
|
|
d0118e6c0b | ||
|
|
7075ccdf7a | ||
|
|
b2d540c010 | ||
|
|
7cb7e2c77b | ||
|
|
5d6a4ab1a9 | ||
|
|
1122d617bd | ||
|
|
ef33501e45 | ||
|
|
08fd86db8f | ||
|
|
c4193c15fc | ||
|
|
903074080e | ||
|
|
3046a26a02 | ||
|
|
951c4135c2 | ||
|
|
b256a0c5e1 | ||
|
|
212b9b0f60 | ||
|
|
fc29d7e80d | ||
|
|
ec536c66a0 | ||
|
|
749ece45e2 | ||
|
|
b04c8873d0 | ||
|
|
9a77175bf3 | ||
|
|
5d4c7b9030 | ||
|
|
5f80259d57 | ||
|
|
dcd6bd1b36 | ||
|
|
6f4dffe930 | ||
|
|
56d70e6c74 | ||
|
|
5e14ea4573 | ||
|
|
c743eca0f7 | ||
|
|
2002f24178 | ||
|
|
6412aedf53 | ||
|
|
939df08b95 | ||
|
|
d8506aa753 | ||
|
|
3f2cdac658 | ||
|
|
d57ab01ff3 | ||
|
|
91b62bbe9d | ||
|
|
557a52e3c8 | ||
|
|
f8fefd92a5 | ||
|
|
f2c43ee921 | ||
|
|
99945b0146 | ||
|
|
abb9dc4db6 | ||
|
|
eba5b80cde | ||
|
|
5b39c887a5 | ||
|
|
183363e789 | ||
|
|
d8704f4d8f | ||
|
|
165ee44a63 | ||
|
|
e8f508cecb | ||
|
|
3044f18900 | ||
|
|
1cae20fe5f | ||
|
|
79637020f3 | ||
|
|
2d34422e2d | ||
|
|
6b932b1188 | ||
|
|
f62153c746 | ||
|
|
88216c3f81 | ||
|
|
dc983c31e3 | ||
|
|
4204c44bde | ||
|
|
8da0122d17 | ||
|
|
c9fcf6e6bf | ||
|
|
36866cc59b | ||
|
|
298bdd98ed | ||
|
|
819018748d | ||
|
|
32e8e0fdd0 | ||
|
|
7625060a12 | ||
|
|
672cb13bfe | ||
|
|
7170f75b89 | ||
|
|
8f60c7a00a | ||
|
|
34ae6e402c | ||
|
|
0905e48994 | ||
|
|
02fcf7d500 | ||
|
|
8d8da50946 | ||
|
|
c1499d173f | ||
|
|
b149baa4e5 | ||
|
|
4807c69b5e | ||
|
|
ebefa0e307 | ||
|
|
468e7433f9 | ||
|
|
3ca313f907 | ||
|
|
820065fc04 | ||
|
|
3eddeefe28 | ||
|
|
82d7d7e3bf | ||
|
|
93194b4f2d | ||
|
|
fa335253d3 | ||
|
|
d1af9416b3 | ||
|
|
f4ac2ea400 | ||
|
|
31c1f8bb7d | ||
|
|
57f7178f1e | ||
|
|
17d4a4c415 | ||
|
|
18ce433fa0 | ||
|
|
1eadb1d934 | ||
|
|
59a8f8a967 | ||
|
|
2dc07b5519 | ||
|
|
3454520dfe | ||
|
|
7a195d4158 | ||
|
|
b73072dec0 | ||
|
|
1ca5e38bd9 | ||
|
|
ecb737c6a5 | ||
|
|
7063f53cdf | ||
|
|
017424b9d4 | ||
|
|
f6c26cf2ec | ||
|
|
9a422bd4ca | ||
|
|
47fec23f2e |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -69,11 +69,7 @@ celerybeat-schedule
|
|||||||
#gitlab configs
|
#gitlab configs
|
||||||
.gitlab/
|
.gitlab/
|
||||||
|
|
||||||
#transifex
|
|
||||||
.tx/
|
|
||||||
|
|
||||||
#other
|
#other
|
||||||
.flake8
|
.flake8
|
||||||
.pylintrc
|
.pylintrc
|
||||||
Makefile
|
Makefile
|
||||||
.isort.cfg
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ before_script:
|
|||||||
pre-commit-check:
|
pre-commit-check:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
stage: pre-commit
|
stage: pre-commit
|
||||||
image: python:3.8-bullseye
|
image: python:3.10-bullseye
|
||||||
variables:
|
variables:
|
||||||
PRE_COMMIT_HOME: ${CI_PROJECT_DIR}/.cache/pre-commit
|
PRE_COMMIT_HOME: ${CI_PROJECT_DIR}/.cache/pre-commit
|
||||||
cache:
|
cache:
|
||||||
@@ -89,7 +89,7 @@ test-3.10-core:
|
|||||||
|
|
||||||
test-3.11-core:
|
test-3.11-core:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.11-rc-bullseye
|
image: python:3.11-bullseye
|
||||||
script:
|
script:
|
||||||
- tox -e py311-core
|
- tox -e py311-core
|
||||||
artifacts:
|
artifacts:
|
||||||
@@ -98,6 +98,18 @@ test-3.11-core:
|
|||||||
coverage_report:
|
coverage_report:
|
||||||
coverage_format: cobertura
|
coverage_format: cobertura
|
||||||
path: coverage.xml
|
path: coverage.xml
|
||||||
|
|
||||||
|
test-pvpy-core:
|
||||||
|
<<: *only-default
|
||||||
|
image: pypy:3.9-bullseye
|
||||||
|
script:
|
||||||
|
- tox -e pypy-all
|
||||||
|
artifacts:
|
||||||
|
when: always
|
||||||
|
reports:
|
||||||
|
coverage_report:
|
||||||
|
coverage_format: cobertura
|
||||||
|
path: coverage.xml
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
test-3.8-all:
|
test-3.8-all:
|
||||||
@@ -138,7 +150,7 @@ test-3.10-all:
|
|||||||
|
|
||||||
test-3.11-all:
|
test-3.11-all:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.11-rc-bullseye
|
image: python:3.11-bullseye
|
||||||
script:
|
script:
|
||||||
- tox -e py311-all
|
- tox -e py311-all
|
||||||
artifacts:
|
artifacts:
|
||||||
@@ -147,6 +159,19 @@ test-3.11-all:
|
|||||||
coverage_report:
|
coverage_report:
|
||||||
coverage_format: cobertura
|
coverage_format: cobertura
|
||||||
path: coverage.xml
|
path: coverage.xml
|
||||||
|
coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
|
||||||
|
|
||||||
|
test-pvpy-all:
|
||||||
|
<<: *only-default
|
||||||
|
image: pypy:3.9-bullseye
|
||||||
|
script:
|
||||||
|
- tox -e pypy-all
|
||||||
|
artifacts:
|
||||||
|
when: always
|
||||||
|
reports:
|
||||||
|
coverage_report:
|
||||||
|
coverage_format: cobertura
|
||||||
|
path: coverage.xml
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
build-test:
|
build-test:
|
||||||
|
|||||||
@@ -5,14 +5,35 @@
|
|||||||
|
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.3.0
|
rev: v4.4.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: check-case-conflict
|
# Identify invalid files
|
||||||
- id: check-json
|
- id: check-ast
|
||||||
- id: check-xml
|
|
||||||
- id: check-yaml
|
- id: check-yaml
|
||||||
|
- id: check-json
|
||||||
|
- id: check-toml
|
||||||
|
- id: check-xml
|
||||||
|
|
||||||
|
# git checks
|
||||||
|
- id: check-merge-conflict
|
||||||
|
- id: check-added-large-files
|
||||||
|
args: [ --maxkb=1000 ]
|
||||||
|
- id: detect-private-key
|
||||||
|
- id: check-case-conflict
|
||||||
|
|
||||||
|
# Python checks
|
||||||
|
# - id: check-docstring-first
|
||||||
|
- id: debug-statements
|
||||||
|
# - id: requirements-txt-fixer
|
||||||
|
- id: fix-encoding-pragma
|
||||||
|
args: [ --remove ]
|
||||||
- id: fix-byte-order-marker
|
- id: fix-byte-order-marker
|
||||||
|
|
||||||
|
# General quality checks
|
||||||
|
- id: mixed-line-ending
|
||||||
|
args: [ --fix=lf ]
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
|
args: [ --markdown-linebreak-ext=md ]
|
||||||
exclude: |
|
exclude: |
|
||||||
(?x)(
|
(?x)(
|
||||||
\.min\.css|
|
\.min\.css|
|
||||||
@@ -21,6 +42,7 @@ repos:
|
|||||||
\.mo|
|
\.mo|
|
||||||
swagger\.json
|
swagger\.json
|
||||||
)
|
)
|
||||||
|
- id: check-executables-have-shebangs
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
exclude: |
|
exclude: |
|
||||||
(?x)(
|
(?x)(
|
||||||
@@ -30,13 +52,9 @@ repos:
|
|||||||
\.mo|
|
\.mo|
|
||||||
swagger\.json
|
swagger\.json
|
||||||
)
|
)
|
||||||
- id: mixed-line-ending
|
|
||||||
args: [ '--fix=lf' ]
|
|
||||||
- id: fix-encoding-pragma
|
|
||||||
args: [ '--remove' ]
|
|
||||||
|
|
||||||
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
|
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
|
||||||
rev: 2.4.0
|
rev: 2.7.2
|
||||||
hooks:
|
hooks:
|
||||||
- id: editorconfig-checker
|
- id: editorconfig-checker
|
||||||
exclude: |
|
exclude: |
|
||||||
@@ -48,13 +66,14 @@ repos:
|
|||||||
swagger\.json
|
swagger\.json
|
||||||
)
|
)
|
||||||
|
|
||||||
|
- repo: https://github.com/adamchainz/django-upgrade
|
||||||
|
rev: 1.14.0
|
||||||
|
hooks:
|
||||||
|
- id: django-upgrade
|
||||||
|
args: [ --target-version=4.0 ]
|
||||||
|
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
rev: v2.34.0
|
rev: v3.10.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: pyupgrade
|
||||||
args: [ --py38-plus ]
|
args: [ --py38-plus ]
|
||||||
|
|
||||||
- repo: https://github.com/asottile/setup-cfg-fmt
|
|
||||||
rev: v1.20.1
|
|
||||||
hooks:
|
|
||||||
- id: setup-cfg-fmt
|
|
||||||
|
|||||||
10
.tx/config
Normal file
10
.tx/config
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[main]
|
||||||
|
host = https://app.transifex.com
|
||||||
|
lang_map = zh-Hans: zh_Hans
|
||||||
|
|
||||||
|
[o:alliance-auth:p:alliance-auth:r:django-po]
|
||||||
|
file_filter = allianceauth/locale/<lang>/LC_MESSAGES/django.po
|
||||||
|
source_file = allianceauth/locale/en/LC_MESSAGES/django.po
|
||||||
|
source_lang = en
|
||||||
|
type = PO
|
||||||
|
minimum_perc = 0
|
||||||
10
.tx/transifex.yml
Normal file
10
.tx/transifex.yml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
filters:
|
||||||
|
- filter_type: file
|
||||||
|
file_format: PO
|
||||||
|
source_file: allianceauth/locale/en/LC_MESSAGES/django.po
|
||||||
|
source_language: en
|
||||||
|
translation_files_expression: allianceauth/locale/<lang>/LC_MESSAGES/django.po
|
||||||
|
|
||||||
|
settings:
|
||||||
|
language_mapping:
|
||||||
|
zh-Hans: zh_Hans
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
include LICENSE
|
|
||||||
include README.md
|
|
||||||
include MANIFEST.in
|
|
||||||
graft allianceauth
|
|
||||||
|
|
||||||
global-exclude __pycache__
|
|
||||||
global-exclude *.py[co]
|
|
||||||
6
README.md
Executable file → Normal file
6
README.md
Executable file → Normal file
@@ -36,7 +36,7 @@ Main features:
|
|||||||
|
|
||||||
- Can be easily extended with additional services and apps. Many are provided by the community and can be found here: [Community Creations](https://gitlab.com/allianceauth/community-creations)
|
- Can be easily extended with additional services and apps. Many are provided by the community and can be found here: [Community Creations](https://gitlab.com/allianceauth/community-creations)
|
||||||
|
|
||||||
- English :flag_gb:, Chinese :flag_cn:, German :flag_de:, Spanish :flag_es:, Korean :flag_kr: and Russian :flag_ru: localization
|
- English :flag_gb:, Chinese :flag_cn:, German :flag_de:, Spanish :flag_es:, Korean :flag_kr:, Russian :flag_ru:, Italian :flag_it:, French :flag_fr:, Japanese :flag_jp: and Ukrainian :flag_ua: Localization
|
||||||
|
|
||||||
For further details about AA - including an installation guide and a full list of included services and plugin apps - please see the [official documentation](http://allianceauth.rtfd.io).
|
For further details about AA - including an installation guide and a full list of included services and plugin apps - please see the [official documentation](http://allianceauth.rtfd.io).
|
||||||
|
|
||||||
@@ -56,13 +56,15 @@ Here is an example of the Alliance Auth web site with some plug-ins apps and ser
|
|||||||
|
|
||||||
- [Aaron Kable](https://gitlab.com/aaronkable/)
|
- [Aaron Kable](https://gitlab.com/aaronkable/)
|
||||||
- [Ariel Rin](https://gitlab.com/soratidus999/)
|
- [Ariel Rin](https://gitlab.com/soratidus999/)
|
||||||
- [Basraah](https://gitlab.com/basraah/)
|
|
||||||
- [Col Crunch](https://gitlab.com/colcrunch/)
|
- [Col Crunch](https://gitlab.com/colcrunch/)
|
||||||
- [Erik Kalkoken](https://gitlab.com/ErikKalkoken/)
|
- [Erik Kalkoken](https://gitlab.com/ErikKalkoken/)
|
||||||
|
- [Rounon Dax](https://gitlab.com/ppfeufer)
|
||||||
|
- [snipereagle1](https://gitlab.com/mckernanin)
|
||||||
|
|
||||||
### Former Developers
|
### Former Developers
|
||||||
|
|
||||||
- [Adarnof](https://gitlab.com/adarnof/)
|
- [Adarnof](https://gitlab.com/adarnof/)
|
||||||
|
- [Basraah](https://gitlab.com/basraah/)
|
||||||
|
|
||||||
### Beta Testers / Bug Fixers
|
### Beta Testers / Bug Fixers
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
|
"""An auth system for EVE Online to help in-game organizations
|
||||||
|
manage online service access.
|
||||||
|
"""
|
||||||
|
|
||||||
# This will make sure the app is always imported when
|
# This will make sure the app is always imported when
|
||||||
# Django starts so that shared_task will use this app.
|
# Django starts so that shared_task will use this app.
|
||||||
|
|
||||||
__version__ = '3.3.0'
|
__version__ = '3.8.0'
|
||||||
__title__ = 'Alliance Auth'
|
__title__ = 'Alliance Auth'
|
||||||
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
||||||
NAME = f'{__title__} v{__version__}'
|
NAME = f'{__title__} v{__version__}'
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class StateBackend(ModelBackend):
|
|||||||
# we've seen this character owner before. Re-attach to their old user account
|
# we've seen this character owner before. Re-attach to their old user account
|
||||||
user = records[0].user
|
user = records[0].user
|
||||||
if user.profile.main_character:
|
if user.profile.main_character:
|
||||||
if ownership.user.profile.main_character.character_id != token.character_id:
|
if user.profile.main_character.character_id != token.character_id:
|
||||||
## this is an alt, enforce main only due to trust issues in SSO.
|
## this is an alt, enforce main only due to trust issues in SSO.
|
||||||
if request:
|
if request:
|
||||||
messages.error("Unable to authenticate with this Character, Please log in with the main character associated with this account. Then add this character from the dashboard.")
|
messages.error("Unable to authenticate with this Character, Please log in with the main character associated with this account. Then add this character from the dashboard.")
|
||||||
|
|||||||
0
allianceauth/authentication/core/__init__.py
Normal file
0
allianceauth/authentication/core/__init__.py
Normal file
48
allianceauth/authentication/core/celery_workers.py
Normal file
48
allianceauth/authentication/core/celery_workers.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
"""API for interacting with celery workers."""
|
||||||
|
|
||||||
|
import itertools
|
||||||
|
import logging
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from amqp.exceptions import ChannelError
|
||||||
|
from celery import current_app
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def active_tasks_count() -> Optional[int]:
|
||||||
|
"""Return count of currently active tasks
|
||||||
|
or None if celery workers are not online.
|
||||||
|
"""
|
||||||
|
inspect = current_app.control.inspect()
|
||||||
|
return _tasks_count(inspect.active())
|
||||||
|
|
||||||
|
|
||||||
|
def _tasks_count(data: dict) -> Optional[int]:
|
||||||
|
"""Return count of tasks in data from celery inspect API."""
|
||||||
|
try:
|
||||||
|
tasks = itertools.chain(*data.values())
|
||||||
|
except AttributeError:
|
||||||
|
return None
|
||||||
|
return len(list(tasks))
|
||||||
|
|
||||||
|
|
||||||
|
def queued_tasks_count() -> Optional[int]:
|
||||||
|
"""Return count of queued tasks. Return None if there was an error."""
|
||||||
|
try:
|
||||||
|
with current_app.connection_or_acquire() as conn:
|
||||||
|
result = conn.default_channel.queue_declare(
|
||||||
|
queue=getattr(settings, "CELERY_DEFAULT_QUEUE", "celery"), passive=True
|
||||||
|
)
|
||||||
|
return result.message_count
|
||||||
|
|
||||||
|
except ChannelError:
|
||||||
|
# Queue doesn't exist, probably empty
|
||||||
|
return 0
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
logger.exception("Failed to get celery queue length")
|
||||||
|
|
||||||
|
return None
|
||||||
@@ -1,18 +1,28 @@
|
|||||||
from django.conf.urls import include
|
|
||||||
from django.contrib.auth.decorators import user_passes_test
|
|
||||||
from django.core.exceptions import PermissionDenied
|
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from django.shortcuts import redirect
|
from typing import Callable, Iterable, Optional
|
||||||
|
|
||||||
|
from django.urls import include
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||||
|
from django.core.exceptions import PermissionDenied
|
||||||
|
from django.shortcuts import redirect
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.contrib.auth.decorators import login_required
|
|
||||||
|
|
||||||
|
|
||||||
def user_has_main_character(user):
|
def user_has_main_character(user):
|
||||||
return bool(user.profile.main_character)
|
return bool(user.profile.main_character)
|
||||||
|
|
||||||
|
|
||||||
def decorate_url_patterns(urls, decorator):
|
def decorate_url_patterns(
|
||||||
|
urls, decorator: Callable, excluded_views: Optional[Iterable] = None
|
||||||
|
):
|
||||||
|
"""Decorate views given in url patterns except when they are explicitly excluded.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
- urls: Django URL patterns
|
||||||
|
- decorator: Decorator to be added to each view
|
||||||
|
- exclude_views: Optional iterable of view names to be excluded
|
||||||
|
"""
|
||||||
url_list, app_name, namespace = include(urls)
|
url_list, app_name, namespace = include(urls)
|
||||||
|
|
||||||
def process_patterns(url_patterns):
|
def process_patterns(url_patterns):
|
||||||
@@ -22,6 +32,8 @@ def decorate_url_patterns(urls, decorator):
|
|||||||
process_patterns(pattern.url_patterns)
|
process_patterns(pattern.url_patterns)
|
||||||
else:
|
else:
|
||||||
# this is a pattern
|
# this is a pattern
|
||||||
|
if excluded_views and pattern.lookup_str in excluded_views:
|
||||||
|
return
|
||||||
pattern.callback = decorator(pattern.callback)
|
pattern.callback = decorator(pattern.callback)
|
||||||
|
|
||||||
process_patterns(url_list)
|
process_patterns(url_list)
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
from django.conf.urls import include
|
|
||||||
|
|
||||||
from allianceauth.authentication import views
|
from allianceauth.authentication import views
|
||||||
from django.urls import re_path
|
from django.urls import include, re_path, path
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('activate/complete/', views.activation_complete, name='registration_activation_complete'),
|
path('activate/complete/', views.activation_complete, name='registration_activation_complete'),
|
||||||
|
|||||||
0
allianceauth/authentication/managers.py
Executable file → Normal file
0
allianceauth/authentication/managers.py
Executable file → Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# Generated by Django 4.0.10 on 2023-05-28 15:36
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("authentication", "0020_userprofile_language_userprofile_night_mode"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="userprofile",
|
||||||
|
name="language",
|
||||||
|
field=models.CharField(
|
||||||
|
blank=True,
|
||||||
|
choices=[
|
||||||
|
("en", "English"),
|
||||||
|
("de", "German"),
|
||||||
|
("es", "Spanish"),
|
||||||
|
("zh-hans", "Chinese Simplified"),
|
||||||
|
("ru", "Russian"),
|
||||||
|
("ko", "Korean"),
|
||||||
|
("fr", "French"),
|
||||||
|
("ja", "Japanese"),
|
||||||
|
("it", "Italian"),
|
||||||
|
("uk", "Ukrainian"),
|
||||||
|
],
|
||||||
|
default="",
|
||||||
|
max_length=10,
|
||||||
|
verbose_name="Language",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
29
allianceauth/authentication/models.py
Executable file → Normal file
29
allianceauth/authentication/models.py
Executable file → Normal file
@@ -63,6 +63,22 @@ class UserProfile(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
default_permissions = ('change',)
|
default_permissions = ('change',)
|
||||||
|
|
||||||
|
class Language(models.TextChoices):
|
||||||
|
"""
|
||||||
|
Choices for UserProfile.language
|
||||||
|
"""
|
||||||
|
|
||||||
|
ENGLISH = 'en', _('English')
|
||||||
|
GERMAN = 'de', _('German')
|
||||||
|
SPANISH = 'es', _('Spanish')
|
||||||
|
CHINESE = 'zh-hans', _('Chinese Simplified')
|
||||||
|
RUSSIAN = 'ru', _('Russian')
|
||||||
|
KOREAN = 'ko', _('Korean')
|
||||||
|
FRENCH = 'fr', _('French')
|
||||||
|
JAPANESE = 'ja', _('Japanese')
|
||||||
|
ITALIAN = 'it', _('Italian')
|
||||||
|
UKRAINIAN = 'uk', _('Ukrainian')
|
||||||
|
|
||||||
user = models.OneToOneField(
|
user = models.OneToOneField(
|
||||||
User,
|
User,
|
||||||
related_name='profile',
|
related_name='profile',
|
||||||
@@ -76,20 +92,9 @@ class UserProfile(models.Model):
|
|||||||
State,
|
State,
|
||||||
on_delete=models.SET_DEFAULT,
|
on_delete=models.SET_DEFAULT,
|
||||||
default=get_guest_state_pk)
|
default=get_guest_state_pk)
|
||||||
LANGUAGE_CHOICES = [
|
|
||||||
('en', _('English')),
|
|
||||||
('de', _('German')),
|
|
||||||
('es', _('Spanish')),
|
|
||||||
('zh-hans', _('Chinese Simplified')),
|
|
||||||
('ru', _('Russian')),
|
|
||||||
('ko', _('Korean')),
|
|
||||||
('fr', _('French')),
|
|
||||||
('ja', _('Japanese')),
|
|
||||||
('it', _('Italian')),
|
|
||||||
]
|
|
||||||
language = models.CharField(
|
language = models.CharField(
|
||||||
_("Language"), max_length=10,
|
_("Language"), max_length=10,
|
||||||
choices=LANGUAGE_CHOICES,
|
choices=Language.choices,
|
||||||
blank=True,
|
blank=True,
|
||||||
default='')
|
default='')
|
||||||
night_mode = models.BooleanField(
|
night_mode = models.BooleanField(
|
||||||
|
|||||||
@@ -1,29 +1,34 @@
|
|||||||
from collections import namedtuple
|
"""Counters for Task Statistics."""
|
||||||
|
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
|
from typing import NamedTuple, Optional
|
||||||
|
|
||||||
from .event_series import EventSeries
|
from .event_series import EventSeries
|
||||||
|
|
||||||
|
# Global series for counting task events.
|
||||||
"""Global series for counting task events."""
|
|
||||||
succeeded_tasks = EventSeries("SUCCEEDED_TASKS")
|
succeeded_tasks = EventSeries("SUCCEEDED_TASKS")
|
||||||
retried_tasks = EventSeries("RETRIED_TASKS")
|
retried_tasks = EventSeries("RETRIED_TASKS")
|
||||||
failed_tasks = EventSeries("FAILED_TASKS")
|
failed_tasks = EventSeries("FAILED_TASKS")
|
||||||
|
|
||||||
|
|
||||||
_TaskCounts = namedtuple(
|
class _TaskCounts(NamedTuple):
|
||||||
"_TaskCounts", ["succeeded", "retried", "failed", "total", "earliest_task", "hours"]
|
succeeded: int
|
||||||
)
|
retried: int
|
||||||
|
failed: int
|
||||||
|
total: int
|
||||||
|
earliest_task: Optional[dt.datetime]
|
||||||
|
hours: int
|
||||||
|
|
||||||
|
|
||||||
def dashboard_results(hours: int) -> _TaskCounts:
|
def dashboard_results(hours: int) -> _TaskCounts:
|
||||||
"""Counts of all task events within the given timeframe."""
|
"""Counts of all task events within the given time frame."""
|
||||||
|
|
||||||
def earliest_if_exists(events: EventSeries, earliest: dt.datetime) -> list:
|
def earliest_if_exists(events: EventSeries, earliest: dt.datetime) -> list:
|
||||||
my_earliest = events.first_event(earliest=earliest)
|
my_earliest = events.first_event(earliest=earliest)
|
||||||
return [my_earliest] if my_earliest else []
|
return [my_earliest] if my_earliest else []
|
||||||
|
|
||||||
earliest = dt.datetime.utcnow() - dt.timedelta(hours=hours)
|
earliest = dt.datetime.utcnow() - dt.timedelta(hours=hours)
|
||||||
earliest_events = list()
|
earliest_events = []
|
||||||
succeeded_count = succeeded_tasks.count(earliest=earliest)
|
succeeded_count = succeeded_tasks.count(earliest=earliest)
|
||||||
earliest_events += earliest_if_exists(succeeded_tasks, earliest)
|
earliest_events += earliest_if_exists(succeeded_tasks, earliest)
|
||||||
retried_count = retried_tasks.count(earliest=earliest)
|
retried_count = retried_tasks.count(earliest=earliest)
|
||||||
|
|||||||
@@ -1,61 +1,31 @@
|
|||||||
|
"""Event series for Task Statistics."""
|
||||||
|
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
import logging
|
import logging
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from pytz import utc
|
from pytz import utc
|
||||||
from redis import Redis, RedisError
|
from redis import Redis
|
||||||
|
|
||||||
from allianceauth.utils.cache import get_redis_client
|
from .helpers import get_redis_client_or_stub
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class _RedisStub:
|
|
||||||
"""Stub of a Redis client.
|
|
||||||
|
|
||||||
It's purpose is to prevent EventSeries objects from trying to access Redis
|
|
||||||
when it is not available. e.g. when the Sphinx docs are rendered by readthedocs.org.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def delete(self, *args, **kwargs):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def incr(self, *args, **kwargs):
|
|
||||||
return 0
|
|
||||||
|
|
||||||
def zadd(self, *args, **kwargs):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def zcount(self, *args, **kwargs):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def zrangebyscore(self, *args, **kwargs):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class EventSeries:
|
class EventSeries:
|
||||||
"""API for recording and analyzing a series of events."""
|
"""API for recording and analyzing a series of events."""
|
||||||
|
|
||||||
_ROOT_KEY = "ALLIANCEAUTH_EVENT_SERIES"
|
_ROOT_KEY = "ALLIANCEAUTH_EVENT_SERIES"
|
||||||
|
|
||||||
def __init__(self, key_id: str, redis: Redis = None) -> None:
|
def __init__(self, key_id: str, redis: Optional[Redis] = None) -> None:
|
||||||
self._redis = get_redis_client() if not redis else redis
|
self._redis = get_redis_client_or_stub() if not redis else redis
|
||||||
try:
|
|
||||||
if not self._redis.ping():
|
|
||||||
raise RuntimeError()
|
|
||||||
except (AttributeError, RedisError, RuntimeError):
|
|
||||||
logger.exception(
|
|
||||||
"Failed to establish a connection with Redis. "
|
|
||||||
"This EventSeries object is disabled.",
|
|
||||||
)
|
|
||||||
self._redis = _RedisStub()
|
|
||||||
self._key_id = str(key_id)
|
self._key_id = str(key_id)
|
||||||
self.clear()
|
self.clear()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_disabled(self):
|
def is_disabled(self):
|
||||||
"""True when this object is disabled, e.g. Redis was not available at startup."""
|
"""True when this object is disabled, e.g. Redis was not available at startup."""
|
||||||
return isinstance(self._redis, _RedisStub)
|
return hasattr(self._redis, "IS_STUB")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _key_counter(self):
|
def _key_counter(self):
|
||||||
@@ -73,8 +43,8 @@ class EventSeries:
|
|||||||
"""
|
"""
|
||||||
if not event_time:
|
if not event_time:
|
||||||
event_time = dt.datetime.utcnow()
|
event_time = dt.datetime.utcnow()
|
||||||
id = self._redis.incr(self._key_counter)
|
my_id = self._redis.incr(self._key_counter)
|
||||||
self._redis.zadd(self._key_sorted_set, {id: event_time.timestamp()})
|
self._redis.zadd(self._key_sorted_set, {my_id: event_time.timestamp()})
|
||||||
|
|
||||||
def all(self) -> List[dt.datetime]:
|
def all(self) -> List[dt.datetime]:
|
||||||
"""List of all known events."""
|
"""List of all known events."""
|
||||||
@@ -95,15 +65,15 @@ class EventSeries:
|
|||||||
self._redis.delete(self._key_counter)
|
self._redis.delete(self._key_counter)
|
||||||
|
|
||||||
def count(self, earliest: dt.datetime = None, latest: dt.datetime = None) -> int:
|
def count(self, earliest: dt.datetime = None, latest: dt.datetime = None) -> int:
|
||||||
"""Count of events, can be restricted to given timeframe.
|
"""Count of events, can be restricted to given time frame.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
- earliest: Date of first events to count(inclusive), or -infinite if not specified
|
- earliest: Date of first events to count(inclusive), or -infinite if not specified
|
||||||
- latest: Date of last events to count(inclusive), or +infinite if not specified
|
- latest: Date of last events to count(inclusive), or +infinite if not specified
|
||||||
"""
|
"""
|
||||||
min = "-inf" if not earliest else earliest.timestamp()
|
minimum = "-inf" if not earliest else earliest.timestamp()
|
||||||
max = "+inf" if not latest else latest.timestamp()
|
maximum = "+inf" if not latest else latest.timestamp()
|
||||||
return self._redis.zcount(self._key_sorted_set, min=min, max=max)
|
return self._redis.zcount(self._key_sorted_set, min=minimum, max=maximum)
|
||||||
|
|
||||||
def first_event(self, earliest: dt.datetime = None) -> Optional[dt.datetime]:
|
def first_event(self, earliest: dt.datetime = None) -> Optional[dt.datetime]:
|
||||||
"""Date/Time of first event. Returns `None` if series has no events.
|
"""Date/Time of first event. Returns `None` if series has no events.
|
||||||
@@ -111,10 +81,10 @@ class EventSeries:
|
|||||||
Args:
|
Args:
|
||||||
- earliest: Date of first events to count(inclusive), or any if not specified
|
- earliest: Date of first events to count(inclusive), or any if not specified
|
||||||
"""
|
"""
|
||||||
min = "-inf" if not earliest else earliest.timestamp()
|
minimum = "-inf" if not earliest else earliest.timestamp()
|
||||||
event = self._redis.zrangebyscore(
|
event = self._redis.zrangebyscore(
|
||||||
self._key_sorted_set,
|
self._key_sorted_set,
|
||||||
min,
|
minimum,
|
||||||
"+inf",
|
"+inf",
|
||||||
withscores=True,
|
withscores=True,
|
||||||
start=0,
|
start=0,
|
||||||
|
|||||||
49
allianceauth/authentication/task_statistics/helpers.py
Normal file
49
allianceauth/authentication/task_statistics/helpers.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
"""Helpers for Task Statistics."""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from redis import Redis, RedisError
|
||||||
|
|
||||||
|
from allianceauth.utils.cache import get_redis_client
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class _RedisStub:
|
||||||
|
"""Stub of a Redis client.
|
||||||
|
|
||||||
|
It's purpose is to prevent EventSeries objects from trying to access Redis
|
||||||
|
when it is not available. e.g. when the Sphinx docs are rendered by readthedocs.org.
|
||||||
|
"""
|
||||||
|
|
||||||
|
IS_STUB = True
|
||||||
|
|
||||||
|
def delete(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def incr(self, *args, **kwargs):
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def zadd(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def zcount(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def zrangebyscore(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def get_redis_client_or_stub() -> Redis:
|
||||||
|
"""Return AA's default cache client or a stub if Redis is not available."""
|
||||||
|
redis = get_redis_client()
|
||||||
|
try:
|
||||||
|
if not redis.ping():
|
||||||
|
raise RuntimeError()
|
||||||
|
except (AttributeError, RedisError, RuntimeError):
|
||||||
|
logger.exception(
|
||||||
|
"Failed to establish a connection with Redis. "
|
||||||
|
"This EventSeries object is disabled.",
|
||||||
|
)
|
||||||
|
return _RedisStub()
|
||||||
|
return redis
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
|
"""Signals for Task Statistics."""
|
||||||
|
|
||||||
from celery.signals import (
|
from celery.signals import (
|
||||||
task_failure,
|
task_failure, task_internal_error, task_retry, task_success, worker_ready,
|
||||||
task_internal_error,
|
|
||||||
task_retry,
|
|
||||||
task_success,
|
|
||||||
worker_ready
|
|
||||||
)
|
)
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -19,6 +17,7 @@ def reset_counters():
|
|||||||
|
|
||||||
|
|
||||||
def is_enabled() -> bool:
|
def is_enabled() -> bool:
|
||||||
|
"""Return True if task statistics are enabled, else return False."""
|
||||||
return not bool(
|
return not bool(
|
||||||
getattr(settings, "ALLIANCEAUTH_DASHBOARD_TASK_STATISTICS_DISABLED", False)
|
getattr(settings, "ALLIANCEAUTH_DASHBOARD_TASK_STATISTICS_DISABLED", False)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,29 +4,30 @@ from django.test import TestCase
|
|||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|
||||||
from allianceauth.authentication.task_statistics.counters import (
|
from allianceauth.authentication.task_statistics.counters import (
|
||||||
dashboard_results,
|
dashboard_results, failed_tasks, retried_tasks, succeeded_tasks,
|
||||||
succeeded_tasks,
|
|
||||||
retried_tasks,
|
|
||||||
failed_tasks,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestDashboardResults(TestCase):
|
class TestDashboardResults(TestCase):
|
||||||
def test_should_return_counts_for_given_timeframe_only(self):
|
def test_should_return_counts_for_given_time_frame_only(self):
|
||||||
# given
|
# given
|
||||||
earliest_task = now() - dt.timedelta(minutes=15)
|
earliest_task = now() - dt.timedelta(minutes=15)
|
||||||
|
|
||||||
succeeded_tasks.clear()
|
succeeded_tasks.clear()
|
||||||
succeeded_tasks.add(now() - dt.timedelta(hours=1, seconds=1))
|
succeeded_tasks.add(now() - dt.timedelta(hours=1, seconds=1))
|
||||||
succeeded_tasks.add(earliest_task)
|
succeeded_tasks.add(earliest_task)
|
||||||
succeeded_tasks.add()
|
succeeded_tasks.add()
|
||||||
succeeded_tasks.add()
|
succeeded_tasks.add()
|
||||||
|
|
||||||
retried_tasks.clear()
|
retried_tasks.clear()
|
||||||
retried_tasks.add(now() - dt.timedelta(hours=1, seconds=1))
|
retried_tasks.add(now() - dt.timedelta(hours=1, seconds=1))
|
||||||
retried_tasks.add(now() - dt.timedelta(seconds=30))
|
retried_tasks.add(now() - dt.timedelta(seconds=30))
|
||||||
retried_tasks.add()
|
retried_tasks.add()
|
||||||
|
|
||||||
failed_tasks.clear()
|
failed_tasks.clear()
|
||||||
failed_tasks.add(now() - dt.timedelta(hours=1, seconds=1))
|
failed_tasks.add(now() - dt.timedelta(hours=1, seconds=1))
|
||||||
failed_tasks.add()
|
failed_tasks.add()
|
||||||
|
|
||||||
# when
|
# when
|
||||||
results = dashboard_results(hours=1)
|
results = dashboard_results(hours=1)
|
||||||
# then
|
# then
|
||||||
|
|||||||
@@ -1,48 +1,19 @@
|
|||||||
import datetime as dt
|
import datetime as dt
|
||||||
from unittest.mock import patch
|
|
||||||
|
|
||||||
from pytz import utc
|
from pytz import utc
|
||||||
from redis import RedisError
|
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|
||||||
from allianceauth.authentication.task_statistics.event_series import (
|
from allianceauth.authentication.task_statistics.event_series import (
|
||||||
EventSeries,
|
EventSeries,
|
||||||
_RedisStub,
|
|
||||||
)
|
)
|
||||||
|
from allianceauth.authentication.task_statistics.helpers import _RedisStub
|
||||||
|
|
||||||
MODULE_PATH = "allianceauth.authentication.task_statistics.event_series"
|
MODULE_PATH = "allianceauth.authentication.task_statistics.event_series"
|
||||||
|
|
||||||
|
|
||||||
class TestEventSeries(TestCase):
|
class TestEventSeries(TestCase):
|
||||||
def test_should_abort_without_redis_client(self):
|
|
||||||
# when
|
|
||||||
with patch(MODULE_PATH + ".get_redis_client") as mock:
|
|
||||||
mock.return_value = None
|
|
||||||
events = EventSeries("dummy")
|
|
||||||
# then
|
|
||||||
self.assertTrue(events._redis, _RedisStub)
|
|
||||||
self.assertTrue(events.is_disabled)
|
|
||||||
|
|
||||||
def test_should_disable_itself_if_redis_not_available_1(self):
|
|
||||||
# when
|
|
||||||
with patch(MODULE_PATH + ".get_redis_client") as mock_get_master_client:
|
|
||||||
mock_get_master_client.return_value.ping.side_effect = RedisError
|
|
||||||
events = EventSeries("dummy")
|
|
||||||
# then
|
|
||||||
self.assertIsInstance(events._redis, _RedisStub)
|
|
||||||
self.assertTrue(events.is_disabled)
|
|
||||||
|
|
||||||
def test_should_disable_itself_if_redis_not_available_2(self):
|
|
||||||
# when
|
|
||||||
with patch(MODULE_PATH + ".get_redis_client") as mock_get_master_client:
|
|
||||||
mock_get_master_client.return_value.ping.return_value = False
|
|
||||||
events = EventSeries("dummy")
|
|
||||||
# then
|
|
||||||
self.assertIsInstance(events._redis, _RedisStub)
|
|
||||||
self.assertTrue(events.is_disabled)
|
|
||||||
|
|
||||||
def test_should_add_event(self):
|
def test_should_add_event(self):
|
||||||
# given
|
# given
|
||||||
events = EventSeries("dummy")
|
events = EventSeries("dummy")
|
||||||
@@ -166,3 +137,15 @@ class TestEventSeries(TestCase):
|
|||||||
results = events.all()
|
results = events.all()
|
||||||
# then
|
# then
|
||||||
self.assertEqual(len(results), 2)
|
self.assertEqual(len(results), 2)
|
||||||
|
|
||||||
|
def test_should_not_report_as_disabled_when_initialized_normally(self):
|
||||||
|
# given
|
||||||
|
events = EventSeries("dummy")
|
||||||
|
# when/then
|
||||||
|
self.assertFalse(events.is_disabled)
|
||||||
|
|
||||||
|
def test_should_report_as_disabled_when_initialized_with_redis_stub(self):
|
||||||
|
# given
|
||||||
|
events = EventSeries("dummy", redis=_RedisStub())
|
||||||
|
# when/then
|
||||||
|
self.assertTrue(events.is_disabled)
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
from unittest import TestCase
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from redis import RedisError
|
||||||
|
|
||||||
|
from allianceauth.authentication.task_statistics.helpers import (
|
||||||
|
_RedisStub, get_redis_client_or_stub,
|
||||||
|
)
|
||||||
|
|
||||||
|
MODULE_PATH = "allianceauth.authentication.task_statistics.helpers"
|
||||||
|
|
||||||
|
|
||||||
|
class TestGetRedisClient(TestCase):
|
||||||
|
def test_should_return_mock_if_redis_not_available_1(self):
|
||||||
|
# when
|
||||||
|
with patch(MODULE_PATH + ".get_redis_client") as mock_get_master_client:
|
||||||
|
mock_get_master_client.return_value.ping.side_effect = RedisError
|
||||||
|
result = get_redis_client_or_stub()
|
||||||
|
# then
|
||||||
|
self.assertIsInstance(result, _RedisStub)
|
||||||
|
|
||||||
|
def test_should_return_mock_if_redis_not_available_2(self):
|
||||||
|
# when
|
||||||
|
with patch(MODULE_PATH + ".get_redis_client") as mock_get_master_client:
|
||||||
|
mock_get_master_client.return_value.ping.return_value = False
|
||||||
|
result = get_redis_client_or_stub()
|
||||||
|
# then
|
||||||
|
self.assertIsInstance(result, _RedisStub)
|
||||||
@@ -17,16 +17,17 @@ from allianceauth.eveonline.tasks import update_character
|
|||||||
|
|
||||||
|
|
||||||
@override_settings(
|
@override_settings(
|
||||||
CELERY_ALWAYS_EAGER=True,ALLIANCEAUTH_DASHBOARD_TASK_STATISTICS_DISABLED=False
|
CELERY_ALWAYS_EAGER=True, ALLIANCEAUTH_DASHBOARD_TASK_STATISTICS_DISABLED=False
|
||||||
)
|
)
|
||||||
class TestTaskSignals(TestCase):
|
class TestTaskSignals(TestCase):
|
||||||
fixtures = ["disable_analytics"]
|
fixtures = ["disable_analytics"]
|
||||||
|
|
||||||
def test_should_record_successful_task(self):
|
def setUp(self) -> None:
|
||||||
# given
|
|
||||||
succeeded_tasks.clear()
|
succeeded_tasks.clear()
|
||||||
retried_tasks.clear()
|
retried_tasks.clear()
|
||||||
failed_tasks.clear()
|
failed_tasks.clear()
|
||||||
|
|
||||||
|
def test_should_record_successful_task(self):
|
||||||
# when
|
# when
|
||||||
with patch(
|
with patch(
|
||||||
"allianceauth.eveonline.tasks.EveCharacter.objects.update_character"
|
"allianceauth.eveonline.tasks.EveCharacter.objects.update_character"
|
||||||
@@ -39,10 +40,6 @@ class TestTaskSignals(TestCase):
|
|||||||
self.assertEqual(failed_tasks.count(), 0)
|
self.assertEqual(failed_tasks.count(), 0)
|
||||||
|
|
||||||
def test_should_record_retried_task(self):
|
def test_should_record_retried_task(self):
|
||||||
# given
|
|
||||||
succeeded_tasks.clear()
|
|
||||||
retried_tasks.clear()
|
|
||||||
failed_tasks.clear()
|
|
||||||
# when
|
# when
|
||||||
with patch(
|
with patch(
|
||||||
"allianceauth.eveonline.tasks.EveCharacter.objects.update_character"
|
"allianceauth.eveonline.tasks.EveCharacter.objects.update_character"
|
||||||
@@ -55,10 +52,6 @@ class TestTaskSignals(TestCase):
|
|||||||
self.assertEqual(retried_tasks.count(), 1)
|
self.assertEqual(retried_tasks.count(), 1)
|
||||||
|
|
||||||
def test_should_record_failed_task(self):
|
def test_should_record_failed_task(self):
|
||||||
# given
|
|
||||||
succeeded_tasks.clear()
|
|
||||||
retried_tasks.clear()
|
|
||||||
failed_tasks.clear()
|
|
||||||
# when
|
# when
|
||||||
with patch(
|
with patch(
|
||||||
"allianceauth.eveonline.tasks.EveCharacter.objects.update_character"
|
"allianceauth.eveonline.tasks.EveCharacter.objects.update_character"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<select onchange="this.form.submit()" class="form-control" id="lang-select" name="language">
|
<select onchange="this.form.submit()" class="form-control" id="lang-select" name="language">
|
||||||
{% get_language_info_list for LANGUAGES as languages %}
|
{% get_language_info_list for LANGUAGES as languages %}
|
||||||
{% for language in languages %}
|
{% for language in languages %}
|
||||||
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
|
<option lang="{{ language.code }}" value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
|
||||||
{{ language.name_local|capfirst }} ({{ language.code }})
|
{{ language.name_local|capfirst }} ({{ language.code }})
|
||||||
</option>
|
</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
{% block page_title %}{% translate "Login" %}{% endblock %}
|
{% block page_title %}{% translate "Login" %}{% endblock %}
|
||||||
|
|
||||||
{% block middle_box_content %}
|
{% block middle_box_content %}
|
||||||
<a href="{% url 'auth_sso_login' %}{% if request.GET.next %}?next={{request.GET.next}}{%endif%}">
|
<a href="{% url 'auth_sso_login' %}{% if request.GET.next %}?next={{request.GET.next | urlencode}}{%endif%}">
|
||||||
<img class="img-responsive center-block" src="{% static 'allianceauth/authentication/img/sso/EVE_SSO_Login_Buttons_Large_Black.png' %}" alt="{% translate 'Login with Eve SSO' %}">
|
<img class="img-responsive center-block" src="{% static 'allianceauth/authentication/img/sso/EVE_SSO_Login_Buttons_Large_Black.png' %}" alt="{% translate 'Login with Eve SSO' %}">
|
||||||
</a>
|
</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
0
allianceauth/authentication/tests/core/__init__.py
Normal file
0
allianceauth/authentication/tests/core/__init__.py
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from amqp.exceptions import ChannelError
|
||||||
|
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from allianceauth.authentication.core.celery_workers import (
|
||||||
|
active_tasks_count, queued_tasks_count,
|
||||||
|
)
|
||||||
|
|
||||||
|
MODULE_PATH = "allianceauth.authentication.core.celery_workers"
|
||||||
|
|
||||||
|
|
||||||
|
@patch(MODULE_PATH + ".current_app")
|
||||||
|
class TestActiveTasksCount(TestCase):
|
||||||
|
def test_should_return_correct_count_when_no_active_tasks(self, mock_current_app):
|
||||||
|
# given
|
||||||
|
mock_current_app.control.inspect.return_value.active.return_value = {
|
||||||
|
"queue": []
|
||||||
|
}
|
||||||
|
# when
|
||||||
|
result = active_tasks_count()
|
||||||
|
# then
|
||||||
|
self.assertEqual(result, 0)
|
||||||
|
|
||||||
|
def test_should_return_correct_task_count_for_active_tasks(self, mock_current_app):
|
||||||
|
# given
|
||||||
|
mock_current_app.control.inspect.return_value.active.return_value = {
|
||||||
|
"queue": [1, 2, 3]
|
||||||
|
}
|
||||||
|
# when
|
||||||
|
result = active_tasks_count()
|
||||||
|
# then
|
||||||
|
self.assertEqual(result, 3)
|
||||||
|
|
||||||
|
def test_should_return_correct_task_count_for_multiple_queues(
|
||||||
|
self, mock_current_app
|
||||||
|
):
|
||||||
|
# given
|
||||||
|
mock_current_app.control.inspect.return_value.active.return_value = {
|
||||||
|
"queue_1": [1, 2],
|
||||||
|
"queue_2": [3, 4],
|
||||||
|
}
|
||||||
|
# when
|
||||||
|
result = active_tasks_count()
|
||||||
|
# then
|
||||||
|
self.assertEqual(result, 4)
|
||||||
|
|
||||||
|
def test_should_return_none_when_celery_not_available(self, mock_current_app):
|
||||||
|
# given
|
||||||
|
mock_current_app.control.inspect.return_value.active.return_value = None
|
||||||
|
# when
|
||||||
|
result = active_tasks_count()
|
||||||
|
# then
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
|
||||||
|
@patch(MODULE_PATH + ".current_app")
|
||||||
|
class TestQueuedTasksCount(TestCase):
|
||||||
|
def test_should_return_queue_length_when_queue_exists(self, mock_current_app):
|
||||||
|
# given
|
||||||
|
mock_conn = (
|
||||||
|
mock_current_app.connection_or_acquire.return_value.__enter__.return_value
|
||||||
|
)
|
||||||
|
mock_conn.default_channel.queue_declare.return_value.message_count = 7
|
||||||
|
# when
|
||||||
|
result = queued_tasks_count()
|
||||||
|
# then
|
||||||
|
self.assertEqual(result, 7)
|
||||||
|
|
||||||
|
def test_should_return_0_when_queue_does_not_exists(self, mock_current_app):
|
||||||
|
# given
|
||||||
|
mock_current_app.connection_or_acquire.side_effect = ChannelError
|
||||||
|
# when
|
||||||
|
result = queued_tasks_count()
|
||||||
|
# then
|
||||||
|
self.assertEqual(result, 0)
|
||||||
|
|
||||||
|
def test_should_return_None_on_other_errors(self, mock_current_app):
|
||||||
|
# given
|
||||||
|
mock_current_app.connection_or_acquire.side_effect = RuntimeError
|
||||||
|
# when
|
||||||
|
result = queued_tasks_count()
|
||||||
|
# then
|
||||||
|
self.assertIsNone(result)
|
||||||
@@ -4,16 +4,16 @@ from urllib import parse
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
from django.http.response import HttpResponse
|
from django.http.response import HttpResponse
|
||||||
from django.shortcuts import reverse
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test.client import RequestFactory
|
from django.test.client import RequestFactory
|
||||||
|
from django.urls import reverse, URLPattern
|
||||||
|
|
||||||
from allianceauth.eveonline.models import EveCharacter
|
from allianceauth.eveonline.models import EveCharacter
|
||||||
from allianceauth.tests.auth_utils import AuthUtils
|
from allianceauth.tests.auth_utils import AuthUtils
|
||||||
|
|
||||||
from ..decorators import main_character_required
|
|
||||||
from ..models import CharacterOwnership
|
|
||||||
|
|
||||||
|
from ..decorators import decorate_url_patterns, main_character_required
|
||||||
|
from ..models import CharacterOwnership
|
||||||
|
|
||||||
MODULE_PATH = 'allianceauth.authentication'
|
MODULE_PATH = 'allianceauth.authentication'
|
||||||
|
|
||||||
@@ -66,3 +66,33 @@ class DecoratorTestCase(TestCase):
|
|||||||
setattr(self.request, 'user', self.main_user)
|
setattr(self.request, 'user', self.main_user)
|
||||||
response = self.dummy_view(self.request)
|
response = self.dummy_view(self.request)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
|
||||||
|
class TestDecorateUrlPatterns(TestCase):
|
||||||
|
def test_should_add_decorator_by_default(self):
|
||||||
|
# given
|
||||||
|
decorator = mock.MagicMock(name="decorator")
|
||||||
|
view = mock.MagicMock(name="view")
|
||||||
|
path = mock.MagicMock(spec=URLPattern, name="path")
|
||||||
|
path.callback = view
|
||||||
|
path.lookup_str = "my_lookup_str"
|
||||||
|
urls = [path]
|
||||||
|
urlconf_module = urls
|
||||||
|
# when
|
||||||
|
decorate_url_patterns(urlconf_module, decorator)
|
||||||
|
# then
|
||||||
|
self.assertEqual(path.callback, decorator(view))
|
||||||
|
|
||||||
|
def test_should_not_add_decorator_when_excluded(self):
|
||||||
|
# given
|
||||||
|
decorator = mock.MagicMock(name="decorator")
|
||||||
|
view = mock.MagicMock(name="view")
|
||||||
|
path = mock.MagicMock(spec=URLPattern, name="path")
|
||||||
|
path.callback = view
|
||||||
|
path.lookup_str = "my_lookup_str"
|
||||||
|
urls = [path]
|
||||||
|
urlconf_module = urls
|
||||||
|
# when
|
||||||
|
decorate_url_patterns(urlconf_module, decorator, excluded_views=["my_lookup_str"])
|
||||||
|
# then
|
||||||
|
self.assertEqual(path.callback, view)
|
||||||
|
|||||||
@@ -9,12 +9,8 @@ from django.core.cache import cache
|
|||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from allianceauth.templatetags.admin_status import (
|
from allianceauth.templatetags.admin_status import (
|
||||||
status_overview,
|
_current_notifications, _current_version_summary, _fetch_list_from_gitlab,
|
||||||
_fetch_list_from_gitlab,
|
_fetch_notification_issues_from_gitlab, _latests_versions, status_overview,
|
||||||
_current_notifications,
|
|
||||||
_current_version_summary,
|
|
||||||
_fetch_notification_issues_from_gitlab,
|
|
||||||
_latests_versions
|
|
||||||
)
|
)
|
||||||
|
|
||||||
MODULE_PATH = 'allianceauth.templatetags'
|
MODULE_PATH = 'allianceauth.templatetags'
|
||||||
@@ -56,14 +52,10 @@ TEST_VERSION = '2.6.5'
|
|||||||
|
|
||||||
class TestStatusOverviewTag(TestCase):
|
class TestStatusOverviewTag(TestCase):
|
||||||
@patch(MODULE_PATH + '.admin_status.__version__', TEST_VERSION)
|
@patch(MODULE_PATH + '.admin_status.__version__', TEST_VERSION)
|
||||||
@patch(MODULE_PATH + '.admin_status._fetch_celery_queue_length')
|
|
||||||
@patch(MODULE_PATH + '.admin_status._current_version_summary')
|
@patch(MODULE_PATH + '.admin_status._current_version_summary')
|
||||||
@patch(MODULE_PATH + '.admin_status._current_notifications')
|
@patch(MODULE_PATH + '.admin_status._current_notifications')
|
||||||
def test_status_overview(
|
def test_status_overview(
|
||||||
self,
|
self, mock_current_notifications, mock_current_version_info
|
||||||
mock_current_notifications,
|
|
||||||
mock_current_version_info,
|
|
||||||
mock_fetch_celery_queue_length
|
|
||||||
):
|
):
|
||||||
# given
|
# given
|
||||||
notifications = {
|
notifications = {
|
||||||
@@ -82,7 +74,6 @@ class TestStatusOverviewTag(TestCase):
|
|||||||
'latest_beta_version': '2.4.4a1',
|
'latest_beta_version': '2.4.4a1',
|
||||||
}
|
}
|
||||||
mock_current_version_info.return_value = version_info
|
mock_current_version_info.return_value = version_info
|
||||||
mock_fetch_celery_queue_length.return_value = 3
|
|
||||||
# when
|
# when
|
||||||
result = status_overview()
|
result = status_overview()
|
||||||
# then
|
# then
|
||||||
@@ -96,7 +87,6 @@ class TestStatusOverviewTag(TestCase):
|
|||||||
self.assertEqual(result["latest_minor_version"], '2.4.0')
|
self.assertEqual(result["latest_minor_version"], '2.4.0')
|
||||||
self.assertEqual(result["latest_patch_version"], '2.4.5')
|
self.assertEqual(result["latest_patch_version"], '2.4.5')
|
||||||
self.assertEqual(result["latest_beta_version"], '2.4.4a1')
|
self.assertEqual(result["latest_beta_version"], '2.4.4a1')
|
||||||
self.assertEqual(result["task_queue_length"], 3)
|
|
||||||
|
|
||||||
|
|
||||||
class TestNotifications(TestCase):
|
class TestNotifications(TestCase):
|
||||||
|
|||||||
39
allianceauth/authentication/tests/test_views.py
Normal file
39
allianceauth/authentication/tests/test_views.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import json
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from django.test import RequestFactory, TestCase
|
||||||
|
|
||||||
|
from allianceauth.authentication.views import task_counts
|
||||||
|
from allianceauth.tests.auth_utils import AuthUtils
|
||||||
|
|
||||||
|
MODULE_PATH = "allianceauth.authentication.views"
|
||||||
|
|
||||||
|
|
||||||
|
def jsonresponse_to_dict(response) -> dict:
|
||||||
|
return json.loads(response.content)
|
||||||
|
|
||||||
|
|
||||||
|
@patch(MODULE_PATH + ".queued_tasks_count")
|
||||||
|
@patch(MODULE_PATH + ".active_tasks_count")
|
||||||
|
class TestRunningTasksCount(TestCase):
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls) -> None:
|
||||||
|
super().setUpClass()
|
||||||
|
cls.factory = RequestFactory()
|
||||||
|
cls.user = AuthUtils.create_user("bruce_wayne")
|
||||||
|
|
||||||
|
def test_should_return_data(
|
||||||
|
self, mock_active_tasks_count, mock_queued_tasks_count
|
||||||
|
):
|
||||||
|
# given
|
||||||
|
mock_active_tasks_count.return_value = 2
|
||||||
|
mock_queued_tasks_count.return_value = 3
|
||||||
|
request = self.factory.get("/")
|
||||||
|
request.user = self.user
|
||||||
|
# when
|
||||||
|
response = task_counts(request)
|
||||||
|
# then
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertDictEqual(
|
||||||
|
jsonresponse_to_dict(response), {"tasks_running": 2, "tasks_queued": 3}
|
||||||
|
)
|
||||||
@@ -38,4 +38,5 @@ urlpatterns = [
|
|||||||
name='token_refresh'
|
name='token_refresh'
|
||||||
),
|
),
|
||||||
path('dashboard/', views.dashboard, name='dashboard'),
|
path('dashboard/', views.dashboard, name='dashboard'),
|
||||||
|
path('task-counts/', views.task_counts, name='task_counts'),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,31 +1,31 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from django_registration.backends.activation.views import (
|
||||||
|
REGISTRATION_SALT, ActivationView as BaseActivationView,
|
||||||
|
RegistrationView as BaseRegistrationView,
|
||||||
|
)
|
||||||
|
from django_registration.signals import user_registered
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth import login, authenticate
|
from django.contrib.auth import authenticate, login
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core import signing
|
from django.core import signing
|
||||||
from django.core.mail import EmailMultiAlternatives
|
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from allianceauth.eveonline.models import EveCharacter
|
|
||||||
from esi.decorators import token_required
|
from esi.decorators import token_required
|
||||||
from esi.models import Token
|
from esi.models import Token
|
||||||
|
|
||||||
from django_registration.backends.activation.views import (
|
from allianceauth.eveonline.models import EveCharacter
|
||||||
RegistrationView as BaseRegistrationView,
|
|
||||||
ActivationView as BaseActivationView,
|
|
||||||
REGISTRATION_SALT
|
|
||||||
)
|
|
||||||
from django_registration.signals import user_registered
|
|
||||||
|
|
||||||
from .models import CharacterOwnership
|
from .core.celery_workers import active_tasks_count, queued_tasks_count
|
||||||
from .forms import RegistrationForm
|
from .forms import RegistrationForm
|
||||||
|
from .models import CharacterOwnership
|
||||||
|
|
||||||
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
||||||
_has_auto_groups = True
|
_has_auto_groups = True
|
||||||
@@ -61,6 +61,7 @@ def dashboard(request):
|
|||||||
}
|
}
|
||||||
return render(request, 'authentication/dashboard.html', context)
|
return render(request, 'authentication/dashboard.html', context)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def token_management(request):
|
def token_management(request):
|
||||||
tokens = request.user.token_set.all()
|
tokens = request.user.token_set.all()
|
||||||
@@ -70,6 +71,7 @@ def token_management(request):
|
|||||||
}
|
}
|
||||||
return render(request, 'authentication/tokens.html', context)
|
return render(request, 'authentication/tokens.html', context)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def token_delete(request, token_id=None):
|
def token_delete(request, token_id=None):
|
||||||
try:
|
try:
|
||||||
@@ -83,6 +85,7 @@ def token_delete(request, token_id=None):
|
|||||||
messages.warning(request, "Token does not exist")
|
messages.warning(request, "Token does not exist")
|
||||||
return redirect('authentication:token_management')
|
return redirect('authentication:token_management')
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def token_refresh(request, token_id=None):
|
def token_refresh(request, token_id=None):
|
||||||
try:
|
try:
|
||||||
@@ -127,7 +130,7 @@ def main_character_change(request, token):
|
|||||||
def add_character(request, token):
|
def add_character(request, token):
|
||||||
if CharacterOwnership.objects.filter(character__character_id=token.character_id).filter(
|
if CharacterOwnership.objects.filter(character__character_id=token.character_id).filter(
|
||||||
owner_hash=token.character_owner_hash).filter(user=request.user).exists():
|
owner_hash=token.character_owner_hash).filter(user=request.user).exists():
|
||||||
messages.success(request, _('Added %(name)s to your account.'% ({'name': token.character_name})))
|
messages.success(request, _('Added %(name)s to your account.' % ({'name': token.character_name})))
|
||||||
else:
|
else:
|
||||||
messages.error(request, _('Failed to add %(name)s to your account: they already have an account.' % ({'name': token.character_name})))
|
messages.error(request, _('Failed to add %(name)s to your account: they already have an account.' % ({'name': token.character_name})))
|
||||||
return redirect('authentication:dashboard')
|
return redirect('authentication:dashboard')
|
||||||
@@ -268,8 +271,11 @@ class ActivationView(BaseActivationView):
|
|||||||
|
|
||||||
def validate_key(self, activation_key):
|
def validate_key(self, activation_key):
|
||||||
try:
|
try:
|
||||||
dump = signing.loads(activation_key, salt=REGISTRATION_SALT,
|
dump = signing.loads(
|
||||||
max_age=settings.ACCOUNT_ACTIVATION_DAYS * 86400)
|
activation_key,
|
||||||
|
salt=REGISTRATION_SALT,
|
||||||
|
max_age=settings.ACCOUNT_ACTIVATION_DAYS * 86400
|
||||||
|
)
|
||||||
return dump
|
return dump
|
||||||
except signing.BadSignature:
|
except signing.BadSignature:
|
||||||
return None
|
return None
|
||||||
@@ -299,3 +305,12 @@ def activation_complete(request):
|
|||||||
def registration_closed(request):
|
def registration_closed(request):
|
||||||
messages.error(request, _('Registration of new accounts is not allowed at this time.'))
|
messages.error(request, _('Registration of new accounts is not allowed at this time.'))
|
||||||
return redirect('authentication:login')
|
return redirect('authentication:login')
|
||||||
|
|
||||||
|
|
||||||
|
def task_counts(request) -> JsonResponse:
|
||||||
|
"""Return task counts as JSON for an AJAX call."""
|
||||||
|
data = {
|
||||||
|
"tasks_running": active_tasks_count(),
|
||||||
|
"tasks_queued": queued_tasks_count()
|
||||||
|
}
|
||||||
|
return JsonResponse(data)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ def sync_user_groups(modeladmin, request, queryset):
|
|||||||
agc.update_all_states_group_membership()
|
agc.update_all_states_group_membership()
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(AutogroupsConfig)
|
||||||
class AutogroupsConfigAdmin(admin.ModelAdmin):
|
class AutogroupsConfigAdmin(admin.ModelAdmin):
|
||||||
formfield_overrides = {
|
formfield_overrides = {
|
||||||
models.CharField: {'strip': False}
|
models.CharField: {'strip': False}
|
||||||
@@ -36,6 +37,5 @@ class AutogroupsConfigAdmin(admin.ModelAdmin):
|
|||||||
return actions
|
return actions
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(AutogroupsConfig, AutogroupsConfigAdmin)
|
|
||||||
admin.site.register(ManagedCorpGroup)
|
admin.site.register(ManagedCorpGroup)
|
||||||
admin.site.register(ManagedAllianceGroup)
|
admin.site.register(ManagedAllianceGroup)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from django.conf import settings
|
|||||||
from esi.clients import esi_client_factory
|
from esi.clients import esi_client_factory
|
||||||
|
|
||||||
from allianceauth import __version__
|
from allianceauth import __version__
|
||||||
|
from allianceauth.utils.django import StartupCommand
|
||||||
|
|
||||||
|
|
||||||
SWAGGER_SPEC_PATH = os.path.join(os.path.dirname(
|
SWAGGER_SPEC_PATH = os.path.join(os.path.dirname(
|
||||||
@@ -175,15 +176,16 @@ class EveProvider:
|
|||||||
|
|
||||||
class EveSwaggerProvider(EveProvider):
|
class EveSwaggerProvider(EveProvider):
|
||||||
def __init__(self, token=None, adapter=None):
|
def __init__(self, token=None, adapter=None):
|
||||||
if settings.DEBUG:
|
if settings.DEBUG or StartupCommand().is_management_command:
|
||||||
self._client = None
|
self._client = None
|
||||||
logger.info(
|
logger.info('ESI client will be loaded on-demand')
|
||||||
'DEBUG mode detected: ESI client will be loaded on-demand.'
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
|
logger.info('Loading ESI client')
|
||||||
try:
|
try:
|
||||||
self._client = esi_client_factory(
|
self._client = esi_client_factory(
|
||||||
token=token, spec_file=SWAGGER_SPEC_PATH, app_info_text=("allianceauth v" + __version__)
|
token=token,
|
||||||
|
spec_file=SWAGGER_SPEC_PATH,
|
||||||
|
app_info_text=f"allianceauth v{__version__}"
|
||||||
)
|
)
|
||||||
except (HTTPError, RefResolutionError):
|
except (HTTPError, RefResolutionError):
|
||||||
logger.exception(
|
logger.exception(
|
||||||
|
|||||||
0
allianceauth/eveonline/views.py
Executable file → Normal file
0
allianceauth/eveonline/views.py
Executable file → Normal file
@@ -1,6 +1,10 @@
|
|||||||
|
import functools
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.admin.widgets import FilteredSelectMultiple
|
||||||
|
from django.contrib.auth.models import Group, User
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.db.models.functions import Lower
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
@@ -8,6 +12,39 @@ from .models import ReservedGroupName
|
|||||||
|
|
||||||
|
|
||||||
class GroupAdminForm(forms.ModelForm):
|
class GroupAdminForm(forms.ModelForm):
|
||||||
|
users = forms.ModelMultipleChoiceField(
|
||||||
|
queryset=User.objects.order_by(Lower('username')),
|
||||||
|
required=False,
|
||||||
|
widget=FilteredSelectMultiple(verbose_name=_("Users"), is_stacked=False),
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
if self.instance and self.instance.pk:
|
||||||
|
self.fields["users"].initial = self.instance.user_set.all()
|
||||||
|
|
||||||
|
def save(self, commit=True):
|
||||||
|
group: Group = super().save(commit=False)
|
||||||
|
|
||||||
|
if commit:
|
||||||
|
group.save()
|
||||||
|
|
||||||
|
users = self.cleaned_data["users"]
|
||||||
|
if group.pk:
|
||||||
|
self._save_m2m_and_users(group, users)
|
||||||
|
else:
|
||||||
|
self.save_m2m = functools.partial(
|
||||||
|
self._save_m2m_and_users, group=group, users=users
|
||||||
|
)
|
||||||
|
|
||||||
|
return group
|
||||||
|
|
||||||
|
def _save_m2m_and_users(self, group, users):
|
||||||
|
"""Save m2m relations incl. users."""
|
||||||
|
group.user_set.set(users)
|
||||||
|
self._save_m2m()
|
||||||
|
|
||||||
def clean_name(self):
|
def clean_name(self):
|
||||||
my_name = self.cleaned_data['name']
|
my_name = self.cleaned_data['name']
|
||||||
if ReservedGroupName.objects.filter(name__iexact=my_name).exists():
|
if ReservedGroupName.objects.filter(name__iexact=my_name).exists():
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
from typing import Set
|
from typing import Set
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group, User
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
@@ -14,7 +13,7 @@ from allianceauth.notifications import notify
|
|||||||
class GroupRequest(models.Model):
|
class GroupRequest(models.Model):
|
||||||
"""Request from a user for joining or leaving a group."""
|
"""Request from a user for joining or leaving a group."""
|
||||||
|
|
||||||
leave_request = models.BooleanField(default=0)
|
leave_request = models.BooleanField(default=False)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
group = models.ForeignKey(Group, on_delete=models.CASCADE)
|
group = models.ForeignKey(Group, on_delete=models.CASCADE)
|
||||||
|
|
||||||
@@ -49,7 +48,7 @@ class RequestLog(models.Model):
|
|||||||
request_type = models.BooleanField(null=True)
|
request_type = models.BooleanField(null=True)
|
||||||
group = models.ForeignKey(Group, on_delete=models.CASCADE)
|
group = models.ForeignKey(Group, on_delete=models.CASCADE)
|
||||||
request_info = models.CharField(max_length=254)
|
request_info = models.CharField(max_length=254)
|
||||||
action = models.BooleanField(default=0)
|
action = models.BooleanField(default=False)
|
||||||
request_actor = models.ForeignKey(User, on_delete=models.CASCADE)
|
request_actor = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
date = models.DateTimeField(auto_now_add=True)
|
date = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{% if not auto_leave %}
|
{% if not show_leave_tab %}
|
||||||
<li>
|
<li>
|
||||||
<a data-toggle="tab" href="#leave">
|
<a data-toggle="tab" href="#leave">
|
||||||
{% translate "Leave Requests" %}
|
{% translate "Leave Requests" %}
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if not auto_leave %}
|
{% if not show_leave_tab %}
|
||||||
<div id="leave" class="tab-pane">
|
<div id="leave" class="tab-pane">
|
||||||
{% if leaverequests %}
|
{% if leaverequests %}
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
|
|||||||
@@ -6,22 +6,22 @@ from django.conf import settings
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.admin.sites import AdminSite
|
from django.contrib.admin.sites import AdminSite
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.test import TestCase, RequestFactory, Client, override_settings
|
from django.test import Client, RequestFactory, TestCase, override_settings
|
||||||
|
|
||||||
from allianceauth.authentication.models import CharacterOwnership, State
|
from allianceauth.authentication.models import CharacterOwnership, State
|
||||||
from allianceauth.eveonline.models import (
|
from allianceauth.eveonline.models import (
|
||||||
EveCharacter, EveCorporationInfo, EveAllianceInfo
|
EveAllianceInfo, EveCharacter, EveCorporationInfo,
|
||||||
)
|
)
|
||||||
from allianceauth.tests.auth_utils import AuthUtils
|
from allianceauth.tests.auth_utils import AuthUtils
|
||||||
|
|
||||||
from . import get_admin_change_view_url
|
from ..admin import Group, GroupAdmin, HasLeaderFilter
|
||||||
from ..admin import HasLeaderFilter, GroupAdmin, Group
|
|
||||||
from ..models import ReservedGroupName
|
from ..models import ReservedGroupName
|
||||||
|
from . import get_admin_change_view_url
|
||||||
|
|
||||||
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
if 'allianceauth.eveonline.autogroups' in settings.INSTALLED_APPS:
|
||||||
_has_auto_groups = True
|
_has_auto_groups = True
|
||||||
from allianceauth.eveonline.autogroups.models import AutogroupsConfig
|
from allianceauth.eveonline.autogroups.models import AutogroupsConfig
|
||||||
|
|
||||||
from ..admin import IsAutoGroupFilter
|
from ..admin import IsAutoGroupFilter
|
||||||
else:
|
else:
|
||||||
_has_auto_groups = False
|
_has_auto_groups = False
|
||||||
@@ -621,21 +621,16 @@ class TestGroupAdmin2(TestCase):
|
|||||||
response = self.client.post(
|
response = self.client.post(
|
||||||
f"/admin/groupmanagement/group/{group.pk}/change/",
|
f"/admin/groupmanagement/group/{group.pk}/change/",
|
||||||
data={
|
data={
|
||||||
"name": f"{group.name}",
|
"name": group.name,
|
||||||
"authgroup-TOTAL_FORMS": "1",
|
"users": [user_member.pk, user_guest.pk],
|
||||||
"authgroup-INITIAL_FORMS": "1",
|
"authgroup-TOTAL_FORMS": 1,
|
||||||
"authgroup-MIN_NUM_FORMS": "0",
|
"authgroup-INITIAL_FORMS": 1,
|
||||||
"authgroup-MAX_NUM_FORMS": "1",
|
"authgroup-MIN_NUM_FORMS": 0,
|
||||||
"authgroup-0-description": "",
|
"authgroup-MAX_NUM_FORMS": 1,
|
||||||
"authgroup-0-states": f"{member_state.pk}",
|
"authgroup-0-states": member_state.pk,
|
||||||
"authgroup-0-internal": "on",
|
"authgroup-0-internal": "on",
|
||||||
"authgroup-0-hidden": "on",
|
"authgroup-0-hidden": "on",
|
||||||
"authgroup-0-group": f"{group.pk}",
|
"authgroup-0-group": group.pk,
|
||||||
"authgroup-__prefix__-description": "",
|
|
||||||
"authgroup-__prefix__-internal": "on",
|
|
||||||
"authgroup-__prefix__-hidden": "on",
|
|
||||||
"authgroup-__prefix__-group": f"{group.pk}",
|
|
||||||
"_save": "Save"
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
# then
|
# then
|
||||||
@@ -644,6 +639,85 @@ class TestGroupAdmin2(TestCase):
|
|||||||
self.assertIn(group, user_member.groups.all())
|
self.assertIn(group, user_member.groups.all())
|
||||||
self.assertNotIn(group, user_guest.groups.all())
|
self.assertNotIn(group, user_guest.groups.all())
|
||||||
|
|
||||||
|
def test_should_add_user_to_existing_group(self):
|
||||||
|
# given
|
||||||
|
user_bruce = AuthUtils.create_user("Bruce Wayne")
|
||||||
|
user_lex = AuthUtils.create_user("Lex Luthor")
|
||||||
|
group = Group.objects.create(name="dummy")
|
||||||
|
user_bruce.groups.add(group)
|
||||||
|
self.client.force_login(self.superuser)
|
||||||
|
# when
|
||||||
|
response = self.client.post(
|
||||||
|
f"/admin/groupmanagement/group/{group.pk}/change/",
|
||||||
|
data={
|
||||||
|
"name": group.name,
|
||||||
|
"users": [user_bruce.pk, user_lex.pk],
|
||||||
|
"authgroup-TOTAL_FORMS": 1,
|
||||||
|
"authgroup-INITIAL_FORMS": 1,
|
||||||
|
"authgroup-MIN_NUM_FORMS": 0,
|
||||||
|
"authgroup-MAX_NUM_FORMS": 1,
|
||||||
|
"authgroup-0-internal": "on",
|
||||||
|
"authgroup-0-hidden": "on",
|
||||||
|
"authgroup-0-group": group.pk,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
# then
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
|
self.assertEqual(response.url, "/admin/groupmanagement/group/")
|
||||||
|
self.assertIn(group, user_bruce.groups.all())
|
||||||
|
self.assertIn(group, user_lex.groups.all())
|
||||||
|
|
||||||
|
def test_should_remove_user_from_existing_group(self):
|
||||||
|
# given
|
||||||
|
user_bruce = AuthUtils.create_user("Bruce Wayne")
|
||||||
|
user_lex = AuthUtils.create_user("Lex Luthor")
|
||||||
|
group = Group.objects.create(name="dummy")
|
||||||
|
user_bruce.groups.add(group)
|
||||||
|
user_lex.groups.add(group)
|
||||||
|
self.client.force_login(self.superuser)
|
||||||
|
# when
|
||||||
|
response = self.client.post(
|
||||||
|
f"/admin/groupmanagement/group/{group.pk}/change/",
|
||||||
|
data={
|
||||||
|
"name": group.name,
|
||||||
|
"users": user_bruce.pk,
|
||||||
|
"authgroup-TOTAL_FORMS": 1,
|
||||||
|
"authgroup-INITIAL_FORMS": 1,
|
||||||
|
"authgroup-MIN_NUM_FORMS": 0,
|
||||||
|
"authgroup-MAX_NUM_FORMS": 1,
|
||||||
|
"authgroup-0-internal": "on",
|
||||||
|
"authgroup-0-hidden": "on",
|
||||||
|
"authgroup-0-group": group.pk,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
# then
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
|
self.assertEqual(response.url, "/admin/groupmanagement/group/")
|
||||||
|
self.assertIn(group, user_bruce.groups.all())
|
||||||
|
self.assertNotIn(group, user_lex.groups.all())
|
||||||
|
|
||||||
|
def test_should_include_user_when_creating_group(self):
|
||||||
|
# given
|
||||||
|
user_bruce = AuthUtils.create_user("Bruce Wayne")
|
||||||
|
self.client.force_login(self.superuser)
|
||||||
|
# when
|
||||||
|
response = self.client.post(
|
||||||
|
"/admin/groupmanagement/group/add/",
|
||||||
|
data={
|
||||||
|
"name": "new group",
|
||||||
|
"users": user_bruce.pk,
|
||||||
|
"authgroup-TOTAL_FORMS": 1,
|
||||||
|
"authgroup-INITIAL_FORMS": 0,
|
||||||
|
"authgroup-MIN_NUM_FORMS": 0,
|
||||||
|
"authgroup-MAX_NUM_FORMS": 1,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
# then
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
|
self.assertEqual(response.url, "/admin/groupmanagement/group/")
|
||||||
|
group = Group.objects.get(name="new group")
|
||||||
|
self.assertIn(group, user_bruce.groups.all())
|
||||||
|
|
||||||
|
|
||||||
class TestReservedGroupNameAdmin(TestCase):
|
class TestReservedGroupNameAdmin(TestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from django.test import RequestFactory, TestCase, override_settings
|
from django.test import RequestFactory, TestCase, override_settings
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
|
from allianceauth.groupmanagement.models import Group, GroupRequest
|
||||||
from allianceauth.tests.auth_utils import AuthUtils
|
from allianceauth.tests.auth_utils import AuthUtils
|
||||||
|
|
||||||
from .. import views
|
from .. import views
|
||||||
@@ -16,6 +17,7 @@ class TestViews(TestCase):
|
|||||||
self.factory = RequestFactory()
|
self.factory = RequestFactory()
|
||||||
self.user = AuthUtils.create_user('Peter Parker')
|
self.user = AuthUtils.create_user('Peter Parker')
|
||||||
self.user_with_manage_permission = AuthUtils.create_user('Bruce Wayne')
|
self.user_with_manage_permission = AuthUtils.create_user('Bruce Wayne')
|
||||||
|
self.group = Group.objects.create(name="Example group")
|
||||||
|
|
||||||
# set permissions
|
# set permissions
|
||||||
AuthUtils.add_permission_to_user_by_name(
|
AuthUtils.add_permission_to_user_by_name(
|
||||||
@@ -83,3 +85,19 @@ class TestViews(TestCase):
|
|||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertNotIn('<a data-toggle="tab" href="#leave">', content)
|
self.assertNotIn('<a data-toggle="tab" href="#leave">', content)
|
||||||
self.assertNotIn('<div id="leave" class="tab-pane">', content)
|
self.assertNotIn('<div id="leave" class="tab-pane">', content)
|
||||||
|
|
||||||
|
@override_settings(GROUPMANAGEMENT_AUTO_LEAVE=True)
|
||||||
|
def test_should_not_hide_leave_requests_tab_when_there_are_open_requests(self):
|
||||||
|
# given
|
||||||
|
request = self.factory.get(reverse('groupmanagement:management'))
|
||||||
|
request.user = self.user_with_manage_permission
|
||||||
|
GroupRequest.objects.create(user=self.user, group=self.group, leave_request=True)
|
||||||
|
|
||||||
|
# when
|
||||||
|
response = views.group_management(request)
|
||||||
|
|
||||||
|
# then
|
||||||
|
content = response_content_to_str(response)
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertIn('<a data-toggle="tab" href="#leave">', content)
|
||||||
|
self.assertIn('<div id="leave" class="tab-pane">', content)
|
||||||
|
|||||||
13
allianceauth/groupmanagement/views.py
Executable file → Normal file
13
allianceauth/groupmanagement/views.py
Executable file → Normal file
@@ -2,13 +2,12 @@ import logging
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||||
from django.contrib.auth.decorators import user_passes_test
|
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.shortcuts import render, redirect, get_object_or_404
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from allianceauth.notifications import notify
|
from allianceauth.notifications import notify
|
||||||
@@ -16,7 +15,6 @@ from allianceauth.notifications import notify
|
|||||||
from .managers import GroupManager
|
from .managers import GroupManager
|
||||||
from .models import GroupRequest, RequestLog
|
from .models import GroupRequest, RequestLog
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@@ -45,10 +43,15 @@ def group_management(request):
|
|||||||
logger.debug("Providing user {} with {} acceptrequests and {} leaverequests.".format(
|
logger.debug("Providing user {} with {} acceptrequests and {} leaverequests.".format(
|
||||||
request.user, len(acceptrequests), len(leaverequests)))
|
request.user, len(acceptrequests), len(leaverequests)))
|
||||||
|
|
||||||
|
show_leave_tab = (
|
||||||
|
getattr(settings, 'GROUPMANAGEMENT_AUTO_LEAVE', False)
|
||||||
|
and not GroupRequest.objects.filter(leave_request=True).exists()
|
||||||
|
)
|
||||||
|
|
||||||
render_items = {
|
render_items = {
|
||||||
'acceptrequests': acceptrequests,
|
'acceptrequests': acceptrequests,
|
||||||
'leaverequests': leaverequests,
|
'leaverequests': leaverequests,
|
||||||
'auto_leave': getattr(settings, 'GROUPMANAGEMENT_AUTO_LEAVE', False),
|
'show_leave_tab': show_leave_tab,
|
||||||
}
|
}
|
||||||
|
|
||||||
return render(request, 'groupmanagement/index.html', context=render_items)
|
return render(request, 'groupmanagement/index.html', context=render_items)
|
||||||
|
|||||||
2
allianceauth/hrapplications/admin.py
Executable file → Normal file
2
allianceauth/hrapplications/admin.py
Executable file → Normal file
@@ -10,6 +10,7 @@ class ChoiceInline(admin.TabularInline):
|
|||||||
verbose_name_plural = 'Choices (optional)'
|
verbose_name_plural = 'Choices (optional)'
|
||||||
verbose_name= 'Choice'
|
verbose_name= 'Choice'
|
||||||
|
|
||||||
|
@admin.register(ApplicationQuestion)
|
||||||
class QuestionAdmin(admin.ModelAdmin):
|
class QuestionAdmin(admin.ModelAdmin):
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {'fields': ['title', 'help_text', 'multi_select']}),
|
(None, {'fields': ['title', 'help_text', 'multi_select']}),
|
||||||
@@ -18,6 +19,5 @@ class QuestionAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
admin.site.register(Application)
|
admin.site.register(Application)
|
||||||
admin.site.register(ApplicationComment)
|
admin.site.register(ApplicationComment)
|
||||||
admin.site.register(ApplicationQuestion, QuestionAdmin)
|
|
||||||
admin.site.register(ApplicationForm)
|
admin.site.register(ApplicationForm)
|
||||||
admin.site.register(ApplicationResponse)
|
admin.site.register(ApplicationResponse)
|
||||||
|
|||||||
0
allianceauth/hrapplications/forms.py
Executable file → Normal file
0
allianceauth/hrapplications/forms.py
Executable file → Normal file
0
allianceauth/hrapplications/models.py
Executable file → Normal file
0
allianceauth/hrapplications/models.py
Executable file → Normal file
18
allianceauth/hrapplications/views.py
Executable file → Normal file
18
allianceauth/hrapplications/views.py
Executable file → Normal file
@@ -57,7 +57,7 @@ def hr_application_create_view(request, form_id=None):
|
|||||||
app_form = get_object_or_404(ApplicationForm, id=form_id)
|
app_form = get_object_or_404(ApplicationForm, id=form_id)
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
if Application.objects.filter(user=request.user).filter(form=app_form).exists():
|
if Application.objects.filter(user=request.user).filter(form=app_form).exists():
|
||||||
logger.warn(f"User {request.user} attempting to duplicate application to {app_form.corp}")
|
logger.warning(f"User {request.user} attempting to duplicate application to {app_form.corp}")
|
||||||
else:
|
else:
|
||||||
application = Application(user=request.user, form=app_form)
|
application = Application(user=request.user, form=app_form)
|
||||||
application.save()
|
application.save()
|
||||||
@@ -92,7 +92,7 @@ def hr_application_personal_view(request, app_id):
|
|||||||
}
|
}
|
||||||
return render(request, 'hrapplications/view.html', context=context)
|
return render(request, 'hrapplications/view.html', context=context)
|
||||||
else:
|
else:
|
||||||
logger.warn(f"User {request.user} not authorized to view {app}")
|
logger.warning(f"User {request.user} not authorized to view {app}")
|
||||||
return redirect('hrapplications:personal_view')
|
return redirect('hrapplications:personal_view')
|
||||||
|
|
||||||
|
|
||||||
@@ -105,9 +105,9 @@ def hr_application_personal_removal(request, app_id):
|
|||||||
logger.info(f"User {request.user} deleting {app}")
|
logger.info(f"User {request.user} deleting {app}")
|
||||||
app.delete()
|
app.delete()
|
||||||
else:
|
else:
|
||||||
logger.warn(f"User {request.user} attempting to delete reviewed app {app}")
|
logger.warning(f"User {request.user} attempting to delete reviewed app {app}")
|
||||||
else:
|
else:
|
||||||
logger.warn(f"User {request.user} not authorized to delete {app}")
|
logger.warning(f"User {request.user} not authorized to delete {app}")
|
||||||
return redirect('hrapplications:index')
|
return redirect('hrapplications:index')
|
||||||
|
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@ def hr_application_view(request, app_id):
|
|||||||
logger.info(f"Saved comment by user {request.user} to {app}")
|
logger.info(f"Saved comment by user {request.user} to {app}")
|
||||||
return redirect('hrapplications:view', app_id)
|
return redirect('hrapplications:view', app_id)
|
||||||
else:
|
else:
|
||||||
logger.warn("User %s does not have permission to add ApplicationComments" % request.user)
|
logger.warning("User %s does not have permission to add ApplicationComments" % request.user)
|
||||||
return redirect('hrapplications:view', app_id)
|
return redirect('hrapplications:view', app_id)
|
||||||
else:
|
else:
|
||||||
logger.debug("Returning blank HRApplication comment form.")
|
logger.debug("Returning blank HRApplication comment form.")
|
||||||
@@ -171,7 +171,7 @@ def hr_application_approve(request, app_id):
|
|||||||
app.save()
|
app.save()
|
||||||
notify(app.user, "Application Accepted", message="Your application to %s has been approved." % app.form.corp, level="success")
|
notify(app.user, "Application Accepted", message="Your application to %s has been approved." % app.form.corp, level="success")
|
||||||
else:
|
else:
|
||||||
logger.warn(f"User {request.user} not authorized to approve {app}")
|
logger.warning(f"User {request.user} not authorized to approve {app}")
|
||||||
return redirect('hrapplications:index')
|
return redirect('hrapplications:index')
|
||||||
|
|
||||||
|
|
||||||
@@ -187,7 +187,7 @@ def hr_application_reject(request, app_id):
|
|||||||
app.save()
|
app.save()
|
||||||
notify(app.user, "Application Rejected", message="Your application to %s has been rejected." % app.form.corp, level="danger")
|
notify(app.user, "Application Rejected", message="Your application to %s has been rejected." % app.form.corp, level="danger")
|
||||||
else:
|
else:
|
||||||
logger.warn(f"User {request.user} not authorized to reject {app}")
|
logger.warning(f"User {request.user} not authorized to reject {app}")
|
||||||
return redirect('hrapplications:index')
|
return redirect('hrapplications:index')
|
||||||
|
|
||||||
|
|
||||||
@@ -208,7 +208,7 @@ def hr_application_search(request):
|
|||||||
app_list = app_list.filter(
|
app_list = app_list.filter(
|
||||||
form__corp__corporation_id=request.user.profile.main_character.corporation_id)
|
form__corp__corporation_id=request.user.profile.main_character.corporation_id)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
logger.warn(
|
logger.warning(
|
||||||
"User %s missing main character model: unable to filter applications to search" % request.user)
|
"User %s missing main character model: unable to filter applications to search" % request.user)
|
||||||
|
|
||||||
applications = app_list.filter(
|
applications = app_list.filter(
|
||||||
@@ -246,6 +246,6 @@ def hr_application_mark_in_progress(request, app_id):
|
|||||||
app.save()
|
app.save()
|
||||||
notify(app.user, "Application In Progress", message=f"Your application to {app.form.corp} is being reviewed by {app.reviewer_str}")
|
notify(app.user, "Application In Progress", message=f"Your application to {app.form.corp} is being reviewed by {app.reviewer_str}")
|
||||||
else:
|
else:
|
||||||
logger.warn(
|
logger.warning(
|
||||||
f"User {request.user} unable to mark {app} in progress: already being reviewed by {app.reviewer}")
|
f"User {request.user} unable to mark {app} in progress: already being reviewed by {app.reviewer}")
|
||||||
return redirect("hrapplications:view", app_id)
|
return redirect("hrapplications:view", app_id)
|
||||||
|
|||||||
Binary file not shown.
@@ -4,19 +4,19 @@
|
|||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Erik Kalkoken <erik.kalkoken@gmail.com>, 2020
|
# Erik Kalkoken <erik.kalkoken@gmail.com>, 2023
|
||||||
# Joel Falknau <ozirascal@gmail.com>, 2021
|
# Joel Falknau <ozirascal@gmail.com>, 2023
|
||||||
# Peter Pfeufer <rounon.dax@terra-nanotech.de>, 2022
|
# Peter Pfeufer, 2023
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-09-14 23:17+1000\n"
|
"POT-Creation-Date: 2022-10-09 18:20+1000\n"
|
||||||
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
"PO-Revision-Date: 2023-10-08 09:23+0000\n"
|
||||||
"Last-Translator: Peter Pfeufer <rounon.dax@terra-nanotech.de>, 2022\n"
|
"Last-Translator: Peter Pfeufer, 2023\n"
|
||||||
"Language-Team: German (https://www.transifex.com/alliance-auth/teams/107430/de/)\n"
|
"Language-Team: German (https://app.transifex.com/alliance-auth/teams/107430/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"
|
||||||
@@ -34,7 +34,8 @@ msgstr "Google Analytics V4"
|
|||||||
#: allianceauth/authentication/decorators.py:37
|
#: allianceauth/authentication/decorators.py:37
|
||||||
msgid "A main character is required to perform that action. Add one below."
|
msgid "A main character is required to perform that action. Add one below."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Für diese Aktion wird ein Hauptcharacter benötigt. Bitte füge einen hinzu."
|
"Zur Ausführung dieser Aktion ist ein Hauptcharakter erforderlich. Füge unten"
|
||||||
|
" einen hinzu."
|
||||||
|
|
||||||
#: allianceauth/authentication/forms.py:12
|
#: allianceauth/authentication/forms.py:12
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
@@ -47,47 +48,38 @@ msgstr ""
|
|||||||
"Du kannst diese eingeschränkten Gruppen nicht hinzufügen oder entfernen: %s"
|
"Du kannst diese eingeschränkten Gruppen nicht hinzufügen oder entfernen: %s"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:89
|
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Englisch"
|
msgstr "Englisch"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:90
|
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Deutsch"
|
msgstr "Deutsch"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:91
|
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Spanisch"
|
msgstr "Spanisch"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:83
|
#: allianceauth/authentication/models.py:83
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:92
|
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Chinesisch vereinfacht"
|
msgstr "Chinesisch vereinfacht"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:84
|
#: allianceauth/authentication/models.py:84
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:93
|
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Russisch"
|
msgstr "Russisch"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:85
|
#: allianceauth/authentication/models.py:85
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:94
|
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Koreanisch"
|
msgstr "Koreanisch"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:86
|
#: allianceauth/authentication/models.py:86
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:95
|
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Französisch"
|
msgstr "Französisch"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:87
|
#: allianceauth/authentication/models.py:87
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:96
|
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Japanisch"
|
msgstr "Japanisch"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:88
|
#: allianceauth/authentication/models.py:88
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:97
|
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Italienisch"
|
msgstr "Italienisch"
|
||||||
|
|
||||||
@@ -140,7 +132,7 @@ msgstr "Hauptcharakter ändern"
|
|||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:125
|
#: allianceauth/authentication/templates/authentication/dashboard.html:125
|
||||||
msgid "Group Memberships"
|
msgid "Group Memberships"
|
||||||
msgstr "Gruppen"
|
msgstr "Gruppenmitgliedschaften"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:145
|
#: allianceauth/authentication/templates/authentication/dashboard.html:145
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html:21
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html:21
|
||||||
@@ -215,7 +207,7 @@ msgstr ""
|
|||||||
#: allianceauth/authentication/views.py:83
|
#: allianceauth/authentication/views.py:83
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Changed main character to %(char)s"
|
msgid "Changed main character to %(char)s"
|
||||||
msgstr "Haupcharakter geändert zu %(char)s"
|
msgstr "Haupcharakter zu %(char)s geändert"
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:92
|
#: allianceauth/authentication/views.py:92
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -242,13 +234,12 @@ msgid ""
|
|||||||
"Sent confirmation email. Please follow the link to confirm your email "
|
"Sent confirmation email. Please follow the link to confirm your email "
|
||||||
"address."
|
"address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Bestätigungsmail gesendet. Bitte folge dem Link in der E-Mail zur "
|
"Bestätigungs-E-Mail gesendet. Bitte folge dem Link, um Deine E-Mail-Adresse "
|
||||||
"Bestätigung."
|
"zu bestätigen."
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:257
|
#: allianceauth/authentication/views.py:257
|
||||||
msgid "Confirmed your email address. Please login to continue."
|
msgid "Confirmed your email address. Please login to continue."
|
||||||
msgstr ""
|
msgstr "Deine E-Mail Adresse wurde bestätigt. Bitte einloggen zum Fortfahren."
|
||||||
"Deine E-Mail Adresse wurde bestätigt. Bitte log Dich ein um fortzufahren."
|
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:262
|
#: allianceauth/authentication/views.py:262
|
||||||
msgid "Registration of new accounts is not allowed at this time."
|
msgid "Registration of new accounts is not allowed at this time."
|
||||||
@@ -283,7 +274,7 @@ msgstr "Hauptcharaktere"
|
|||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:22
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:22
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:14
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:14
|
||||||
msgid "Members"
|
msgid "Members"
|
||||||
msgstr "Mitgliederzahl"
|
msgstr "Mitglieder"
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:35
|
#: allianceauth/corputils/templates/corputils/corpstats.html:35
|
||||||
msgid "Unregistered"
|
msgid "Unregistered"
|
||||||
@@ -291,7 +282,7 @@ msgstr "Nicht registriert"
|
|||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:38
|
#: allianceauth/corputils/templates/corputils/corpstats.html:38
|
||||||
msgid "Last update:"
|
msgid "Last update:"
|
||||||
msgstr "Letzes Update:"
|
msgstr "Letzte Aktualisierung:"
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:74
|
#: allianceauth/corputils/templates/corputils/corpstats.html:74
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:112
|
#: allianceauth/corputils/templates/corputils/corpstats.html:112
|
||||||
@@ -391,11 +382,11 @@ msgstr "Charakter nicht registriert!"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:19
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:19
|
||||||
msgid "This character is not associated with an auth account."
|
msgid "This character is not associated with an auth account."
|
||||||
msgstr "Dieser Charakter ist mit keinen Auth Konto verbunden."
|
msgstr "Dieser Charakter ist keinem Auth Konto zugeordnet."
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:19
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:19
|
||||||
msgid "Add it here"
|
msgid "Add it here"
|
||||||
msgstr "Füge es hier hinzu"
|
msgstr "Füge ihn hier hinzu"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:19
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:19
|
||||||
msgid "before attempting to click fleet attendance links."
|
msgid "before attempting to click fleet attendance links."
|
||||||
@@ -403,7 +394,7 @@ msgstr "bevor Du versuchst auf FAT-Links zu klicken."
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkformatter.html:5
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkformatter.html:5
|
||||||
msgid "Create Fatlink"
|
msgid "Create Fatlink"
|
||||||
msgstr "Erstelle FAT-Link"
|
msgstr "FAT-Link erstellen"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkformatter.html:9
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkformatter.html:9
|
||||||
#: allianceauth/optimer/templates/optimer/add.html:13
|
#: allianceauth/optimer/templates/optimer/add.html:13
|
||||||
@@ -418,20 +409,20 @@ msgstr "Fehlerhafte Anfrage!"
|
|||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkformatter.html:24
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkformatter.html:24
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:63
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:63
|
||||||
msgid "Create fatlink"
|
msgid "Create fatlink"
|
||||||
msgstr "Erstelle FAT-Link"
|
msgstr "FAT-Link erstellen"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:3
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:3
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:4
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:4
|
||||||
msgid "Fatlink view"
|
msgid "Fatlink view"
|
||||||
msgstr "FAT-Link sehen"
|
msgstr "FAT-Link ansehen"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:7
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:7
|
||||||
msgid "Edit fatlink"
|
msgid "Edit fatlink"
|
||||||
msgstr "Editiere FAT-Link"
|
msgstr "FAT-Link bearbeiten"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:11
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:11
|
||||||
msgid "Delete fat"
|
msgid "Delete fat"
|
||||||
msgstr "Lösche FAT"
|
msgstr "FAT löschen"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:17
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:17
|
||||||
msgid "Registered characters"
|
msgid "Registered characters"
|
||||||
@@ -506,7 +497,7 @@ msgstr[1] "%(user)s hat diesen Monat %(links)s FAT-Links eingesammelt."
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:26
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:26
|
||||||
msgid "Times used"
|
msgid "Times used"
|
||||||
msgstr "male genutzt"
|
msgstr "Wie oft genutzt"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:37
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:37
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -579,7 +570,7 @@ msgstr "FAT-Link Statistik"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:20
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:20
|
||||||
msgid "Ticker"
|
msgid "Ticker"
|
||||||
msgstr "Ticker: "
|
msgstr "Ticker"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:8
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:8
|
||||||
msgid "Participation data"
|
msgid "Participation data"
|
||||||
@@ -603,7 +594,7 @@ msgstr "Letzter FAT-Link"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:58
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:58
|
||||||
msgid "View statistics"
|
msgid "View statistics"
|
||||||
msgstr "Statistik"
|
msgstr "Statistiken ansehen"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:95
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:95
|
||||||
msgid "No created fatlinks on record."
|
msgid "No created fatlinks on record."
|
||||||
@@ -722,8 +713,8 @@ msgid ""
|
|||||||
"States listed here will have the ability to join this group provided they "
|
"States listed here will have the ability to join this group provided they "
|
||||||
"have the proper permissions.<br>"
|
"have the proper permissions.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Hier gelistete Ränge können dieser Gruppe beitreten, vorausgesetzt sie haben"
|
"Die hier aufgeführten Status können dieser Gruppe beitreten, sofern sie über"
|
||||||
" die entsprechenden Berechtigungen.<br>"
|
" die entsprechenden Berechtigungen verfügen.<br>"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:171
|
#: allianceauth/groupmanagement/models.py:171
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -823,7 +814,7 @@ msgstr "Gruppenmitglieder"
|
|||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:113
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:113
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:21
|
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:21
|
||||||
msgid "Organization"
|
msgid "Organization"
|
||||||
msgstr "Organization"
|
msgstr "Organisation"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:49
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:49
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:75
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:75
|
||||||
@@ -942,18 +933,18 @@ msgstr "Gruppenverwaltung"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:24
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:24
|
||||||
msgid "Join Requests"
|
msgid "Join Requests"
|
||||||
msgstr "Beitrittsgesuche"
|
msgstr "Beitrittsanfragen"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:35
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:35
|
||||||
msgid "Leave Requests"
|
msgid "Leave Requests"
|
||||||
msgstr "Austrittsgesuche"
|
msgstr "Austrittsanfragen"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:57
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:57
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:114
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:114
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:18
|
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:18
|
||||||
#: allianceauth/services/modules/openfire/forms.py:6
|
#: allianceauth/services/modules/openfire/forms.py:6
|
||||||
msgid "Group"
|
msgid "Group"
|
||||||
msgstr "Gruppen"
|
msgstr "Gruppe"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:88
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:88
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:145
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:145
|
||||||
@@ -977,7 +968,7 @@ msgstr "Keine Gruppenaustrittsanfragen"
|
|||||||
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:8
|
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:8
|
||||||
#: allianceauth/templates/allianceauth/top-menu.html:8
|
#: allianceauth/templates/allianceauth/top-menu.html:8
|
||||||
msgid "Toggle navigation"
|
msgid "Toggle navigation"
|
||||||
msgstr "Toggle Navigation"
|
msgstr "Navigation umschalten"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:19
|
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:19
|
||||||
msgid "Group Requests"
|
msgid "Group Requests"
|
||||||
@@ -1003,7 +994,7 @@ msgstr "Gruppe existiert nicht"
|
|||||||
#: allianceauth/groupmanagement/views.py:195
|
#: allianceauth/groupmanagement/views.py:195
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Accepted application from %(mainchar)s to %(group)s."
|
msgid "Accepted application from %(mainchar)s to %(group)s."
|
||||||
msgstr "Beitrittsgesuch von %(mainchar)s zur Gruppe %(group)s zugestimmt."
|
msgstr "Beitrittsanfrage von %(mainchar)s zur Gruppe %(group)s akzeptiert."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:201
|
#: allianceauth/groupmanagement/views.py:201
|
||||||
#: allianceauth/groupmanagement/views.py:232
|
#: allianceauth/groupmanagement/views.py:232
|
||||||
@@ -1012,18 +1003,18 @@ msgid ""
|
|||||||
"An unhandled error occurred while processing the application from "
|
"An unhandled error occurred while processing the application from "
|
||||||
"%(mainchar)s to %(group)s."
|
"%(mainchar)s to %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Bei der Bearbeitung des Beitrittsgesuchs von %(mainchar)s zur Gruppe "
|
"Bei der Bearbeitung des Beitrittsanfrage von %(mainchar)s zur Gruppe "
|
||||||
"%(group)s ist ein unbehandelter Fehler aufgetreten."
|
"%(group)s ist ein unbehandelter Fehler aufgetreten."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:226
|
#: allianceauth/groupmanagement/views.py:226
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Rejected application from %(mainchar)s to %(group)s."
|
msgid "Rejected application from %(mainchar)s to %(group)s."
|
||||||
msgstr "Beitrittsgesuch von %(mainchar)s zur Gruppe %(group)s abgelehnt."
|
msgstr "Beitrittsanfrage von %(mainchar)s zur Gruppe %(group)s abgelehnt."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:261
|
#: allianceauth/groupmanagement/views.py:261
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Accepted application from %(mainchar)s to leave %(group)s."
|
msgid "Accepted application from %(mainchar)s to leave %(group)s."
|
||||||
msgstr "Austrittsgesuch von %(mainchar)s für Gruppe %(group)s akzeptiert."
|
msgstr "Austrittsanfrage von %(mainchar)s für Gruppe %(group)s akzeptiert."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:266
|
#: allianceauth/groupmanagement/views.py:266
|
||||||
#: allianceauth/groupmanagement/views.py:298
|
#: allianceauth/groupmanagement/views.py:298
|
||||||
@@ -1032,13 +1023,13 @@ msgid ""
|
|||||||
"An unhandled error occurred while processing the application from "
|
"An unhandled error occurred while processing the application from "
|
||||||
"%(mainchar)s to leave %(group)s."
|
"%(mainchar)s to leave %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Bei der Bearbeitung des Austrittsgesuchs von %(mainchar)s für Gruppe "
|
"Bei der Bearbeitung des Austrittsanfrage von %(mainchar)s für Gruppe "
|
||||||
"%(group)s ist ein unbehandelter Fehler aufgetreten."
|
"%(group)s ist ein unbehandelter Fehler aufgetreten."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:292
|
#: allianceauth/groupmanagement/views.py:292
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Rejected application from %(mainchar)s to leave %(group)s."
|
msgid "Rejected application from %(mainchar)s to leave %(group)s."
|
||||||
msgstr "Austrittsgesuch von %(mainchar)s für Gruppe %(group)s abgelehnt."
|
msgstr "Austrittsanfrage von %(mainchar)s für Gruppe %(group)s abgelehnt."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:336
|
#: allianceauth/groupmanagement/views.py:336
|
||||||
#: allianceauth/groupmanagement/views.py:346
|
#: allianceauth/groupmanagement/views.py:346
|
||||||
@@ -1051,7 +1042,7 @@ msgstr "Du bist bereits Mitglied dieser Gruppe."
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:358
|
#: allianceauth/groupmanagement/views.py:358
|
||||||
msgid "You already have a pending application for that group."
|
msgid "You already have a pending application for that group."
|
||||||
msgstr "Du hast Dich bereits für diese Gruppe beworben."
|
msgstr "Du hast bereits für diese Gruppe angefragt."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:367
|
#: allianceauth/groupmanagement/views.py:367
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -1068,12 +1059,12 @@ msgstr "Du bist kein Mitglied dieser Gruppe"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:393
|
#: allianceauth/groupmanagement/views.py:393
|
||||||
msgid "You already have a pending leave request for that group."
|
msgid "You already have a pending leave request for that group."
|
||||||
msgstr "Du hast bereits ein ausstehendes Austrittsgesuch für diese Gruppe."
|
msgstr "Du hast bereits eine ausstehendes Austrittsanfrage für diese Gruppe."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:409
|
#: allianceauth/groupmanagement/views.py:409
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Applied to leave group %(group)s."
|
msgid "Applied to leave group %(group)s."
|
||||||
msgstr "Austrittsgesuch für Gruppe %(group)s gesendet."
|
msgstr "Austrittsanfrage für Gruppe %(group)s gesendet."
|
||||||
|
|
||||||
#: allianceauth/hrapplications/auth_hooks.py:14
|
#: allianceauth/hrapplications/auth_hooks.py:14
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
@@ -1095,11 +1086,11 @@ msgstr "Wähle eine Corporation"
|
|||||||
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/corpchoice.html:10
|
#: allianceauth/hrapplications/templates/hrapplications/corpchoice.html:10
|
||||||
msgid "Available Corps"
|
msgid "Available Corps"
|
||||||
msgstr "Zur Auswahl stehende Corporations"
|
msgstr "Verfügbare Corporationen"
|
||||||
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/corpchoice.html:22
|
#: allianceauth/hrapplications/templates/hrapplications/corpchoice.html:22
|
||||||
msgid "No corps are accepting applications at this time."
|
msgid "No corps are accepting applications at this time."
|
||||||
msgstr "Zur Zeit nimmt keine Corp Bewerbungen entgegen."
|
msgstr "Zur Zeit nimmt keine Corp Bewerbungen an."
|
||||||
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/create.html:4
|
#: allianceauth/hrapplications/templates/hrapplications/create.html:4
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/create.html:7
|
#: allianceauth/hrapplications/templates/hrapplications/create.html:7
|
||||||
@@ -1195,7 +1186,7 @@ msgstr "Keine angesehenen Bewerbungen"
|
|||||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:62
|
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:62
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:134
|
#: allianceauth/hrapplications/templates/hrapplications/view.html:134
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Geschlossen"
|
msgstr "Schließen"
|
||||||
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:177
|
#: allianceauth/hrapplications/templates/hrapplications/management.html:177
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:63
|
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:63
|
||||||
@@ -1209,7 +1200,7 @@ msgstr "Suche"
|
|||||||
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:11
|
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:11
|
||||||
msgid "Application Search Results"
|
msgid "Application Search Results"
|
||||||
msgstr "Bewerbungen Suchergebnisse"
|
msgstr "Ergebnisse der Bewerbungssuche"
|
||||||
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:22
|
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:22
|
||||||
msgid "Application ID"
|
msgid "Application ID"
|
||||||
@@ -1351,12 +1342,12 @@ msgstr "Operationsart"
|
|||||||
#: allianceauth/optimer/form.py:17
|
#: allianceauth/optimer/form.py:17
|
||||||
#: allianceauth/srp/templates/srp/management.html:38
|
#: allianceauth/srp/templates/srp/management.html:38
|
||||||
msgid "Fleet Commander"
|
msgid "Fleet Commander"
|
||||||
msgstr "Flottenkommandeur"
|
msgstr "Flottenkommandant"
|
||||||
|
|
||||||
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
|
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
|
||||||
#: allianceauth/srp/templates/srp/data.html:91
|
#: allianceauth/srp/templates/srp/data.html:91
|
||||||
msgid "Additional Info"
|
msgid "Additional Info"
|
||||||
msgstr "Zusätzliche Info"
|
msgstr "Zusätzliche Informationen"
|
||||||
|
|
||||||
#: allianceauth/optimer/form.py:23
|
#: allianceauth/optimer/form.py:23
|
||||||
msgid "(Optional) Describe the operation with a couple of short words."
|
msgid "(Optional) Describe the operation with a couple of short words."
|
||||||
@@ -1369,7 +1360,7 @@ msgstr "Operation erstellen"
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/fleetoptable.html:12
|
#: allianceauth/optimer/templates/optimer/fleetoptable.html:12
|
||||||
msgid "Form Up System"
|
msgid "Form Up System"
|
||||||
msgstr "Form Up System"
|
msgstr "Startsystem"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/fleetoptable.html:14
|
#: allianceauth/optimer/templates/optimer/fleetoptable.html:14
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:36
|
#: allianceauth/timerboard/templates/timerboard/view.html:36
|
||||||
@@ -1393,20 +1384,20 @@ msgstr "Flottenoperationen Zeiten"
|
|||||||
#: allianceauth/optimer/templates/optimer/management.html:20
|
#: allianceauth/optimer/templates/optimer/management.html:20
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:22
|
#: allianceauth/timerboard/templates/timerboard/view.html:22
|
||||||
msgid "Current Eve Time:"
|
msgid "Current Eve Time:"
|
||||||
msgstr "Momentane Eve Zeit"
|
msgstr "Aktuelle Eve Zeit"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:26
|
#: allianceauth/optimer/templates/optimer/management.html:26
|
||||||
msgid "Next Fleet Operations"
|
msgid "Next Fleet Operations"
|
||||||
msgstr "Anstehende Flottenoperationen"
|
msgstr "Anstehende Flotten"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:30
|
#: allianceauth/optimer/templates/optimer/management.html:30
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
||||||
msgid "No upcoming timers."
|
msgid "No upcoming timers."
|
||||||
msgstr "Keine kommenden Timer."
|
msgstr "Keine bevorstehenden Timer."
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:33
|
#: allianceauth/optimer/templates/optimer/management.html:33
|
||||||
msgid "Past Fleet Operations"
|
msgid "Past Fleet Operations"
|
||||||
msgstr "Vergangene Flottenoperationen"
|
msgstr "Vergangene Flotten"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:37
|
#: allianceauth/optimer/templates/optimer/management.html:37
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
||||||
@@ -1417,7 +1408,7 @@ msgstr "Keine vergangenen Timer."
|
|||||||
#: allianceauth/optimer/templates/optimer/update.html:15
|
#: allianceauth/optimer/templates/optimer/update.html:15
|
||||||
#: allianceauth/optimer/templates/optimer/update.html:27
|
#: allianceauth/optimer/templates/optimer/update.html:27
|
||||||
msgid "Update Fleet Operation"
|
msgid "Update Fleet Operation"
|
||||||
msgstr "Aktualisiere Flottenoperationen"
|
msgstr "Aktualisiere Flottenoperation"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/update.html:21
|
#: allianceauth/optimer/templates/optimer/update.html:21
|
||||||
msgid "Fleet Operation Does Not Exist"
|
msgid "Fleet Operation Does Not Exist"
|
||||||
@@ -1441,7 +1432,7 @@ msgstr "Änderungen für Operation timer %(opname)s gespeichert."
|
|||||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:4
|
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:4
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:8
|
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:8
|
||||||
msgid "Permissions Audit"
|
msgid "Permissions Audit"
|
||||||
msgstr "Berechtigungsübersicht"
|
msgstr "Berechtigungsprüfung"
|
||||||
|
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:20
|
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:20
|
||||||
msgid "User / Character"
|
msgid "User / Character"
|
||||||
@@ -1503,11 +1494,11 @@ msgstr "Dienste"
|
|||||||
|
|
||||||
#: allianceauth/services/forms.py:6
|
#: allianceauth/services/forms.py:6
|
||||||
msgid "Name of Fleet:"
|
msgid "Name of Fleet:"
|
||||||
msgstr "SRP Flotte erstellen:"
|
msgstr "Name der Flotte:"
|
||||||
|
|
||||||
#: allianceauth/services/forms.py:7
|
#: allianceauth/services/forms.py:7
|
||||||
msgid "Fleet Commander:"
|
msgid "Fleet Commander:"
|
||||||
msgstr "Flottenkommandeur:"
|
msgstr "Flottenkommandant:"
|
||||||
|
|
||||||
#: allianceauth/services/forms.py:8
|
#: allianceauth/services/forms.py:8
|
||||||
msgid "Fleet Comms:"
|
msgid "Fleet Comms:"
|
||||||
@@ -1523,11 +1514,11 @@ msgstr "Schiffspriorität:"
|
|||||||
|
|
||||||
#: allianceauth/services/forms.py:11
|
#: allianceauth/services/forms.py:11
|
||||||
msgid "Formup Location:"
|
msgid "Formup Location:"
|
||||||
msgstr "Formup Location:"
|
msgstr "Startsystem:"
|
||||||
|
|
||||||
#: allianceauth/services/forms.py:12
|
#: allianceauth/services/forms.py:12
|
||||||
msgid "Formup Time:"
|
msgid "Formup Time:"
|
||||||
msgstr "Formup Zeit:"
|
msgstr "Startzeit:"
|
||||||
|
|
||||||
#: allianceauth/services/forms.py:13
|
#: allianceauth/services/forms.py:13
|
||||||
msgid "Expected Duration:"
|
msgid "Expected Duration:"
|
||||||
@@ -1539,7 +1530,7 @@ msgstr "Grund:"
|
|||||||
|
|
||||||
#: allianceauth/services/forms.py:15
|
#: allianceauth/services/forms.py:15
|
||||||
msgid "Reimbursable?*"
|
msgid "Reimbursable?*"
|
||||||
msgstr "Erstattungsfähig?"
|
msgstr "Erstattungsfähig?*"
|
||||||
|
|
||||||
#: allianceauth/services/forms.py:15 allianceauth/services/forms.py:16
|
#: allianceauth/services/forms.py:15 allianceauth/services/forms.py:16
|
||||||
msgid "Yes"
|
msgid "Yes"
|
||||||
@@ -1551,7 +1542,7 @@ msgstr "Nein"
|
|||||||
|
|
||||||
#: allianceauth/services/forms.py:16
|
#: allianceauth/services/forms.py:16
|
||||||
msgid "Important?*"
|
msgid "Important?*"
|
||||||
msgstr "Wichtig?"
|
msgstr "Wichtig?*"
|
||||||
|
|
||||||
#: allianceauth/services/forms.py:21 allianceauth/services/forms.py:31
|
#: allianceauth/services/forms.py:21 allianceauth/services/forms.py:31
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
@@ -1559,7 +1550,7 @@ msgstr "Passwort"
|
|||||||
|
|
||||||
#: allianceauth/services/forms.py:26 allianceauth/services/forms.py:36
|
#: allianceauth/services/forms.py:26 allianceauth/services/forms.py:36
|
||||||
msgid "Password must be at least 8 characters long."
|
msgid "Password must be at least 8 characters long."
|
||||||
msgstr "Passwort muss mindestens 8 Zeichen lang sein"
|
msgstr "Das Passwort muss mindestens 8 Zeichen lang sein"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/models.py:187
|
#: allianceauth/services/modules/discord/models.py:187
|
||||||
msgid "Discord Account Disabled"
|
msgid "Discord Account Disabled"
|
||||||
@@ -1600,7 +1591,7 @@ msgstr "Discord Konto deaktiviert."
|
|||||||
#: allianceauth/services/modules/discord/views.py:36
|
#: allianceauth/services/modules/discord/views.py:36
|
||||||
#: allianceauth/services/modules/discord/views.py:59
|
#: allianceauth/services/modules/discord/views.py:59
|
||||||
msgid "An error occurred while processing your Discord account."
|
msgid "An error occurred while processing your Discord account."
|
||||||
msgstr "Es gab einen Fehler bei der Verarbeitung Deines Discord Kontos."
|
msgstr "Es gab einen Fehler während der Verarbeitung Deines Discord Kontos."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/views.py:102
|
#: allianceauth/services/modules/discord/views.py:102
|
||||||
msgid "Your Discord account has been successfully activated."
|
msgid "Your Discord account has been successfully activated."
|
||||||
@@ -1616,7 +1607,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/services/modules/discourse/views.py:29
|
#: allianceauth/services/modules/discourse/views.py:29
|
||||||
msgid "You are not authorized to access Discourse."
|
msgid "You are not authorized to access Discourse."
|
||||||
msgstr "Du bist nicht autorisiert auf Discorse zuzugreifen."
|
msgstr "Du bist nicht autorisiert auf Discourse zuzugreifen."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discourse/views.py:34
|
#: allianceauth/services/modules/discourse/views.py:34
|
||||||
msgid "You must have a main character set to access Discourse."
|
msgid "You must have a main character set to access Discourse."
|
||||||
@@ -1628,14 +1619,14 @@ msgid ""
|
|||||||
"No SSO payload or signature. Please contact support if this problem "
|
"No SSO payload or signature. Please contact support if this problem "
|
||||||
"persists."
|
"persists."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Keine SSO-Nutzdaten oder Signaturen. Bitte wenden Sie sich an den Support, "
|
"Keine SSO-Nutzdaten oder Signaturen. Bitte wende Dich an den Support, wenn "
|
||||||
"wenn das Problem weiterhin besteht."
|
"das Problem weiterhin besteht."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discourse/views.py:54
|
#: allianceauth/services/modules/discourse/views.py:54
|
||||||
#: allianceauth/services/modules/discourse/views.py:62
|
#: allianceauth/services/modules/discourse/views.py:62
|
||||||
msgid "Invalid payload. Please contact support if this problem persists."
|
msgid "Invalid payload. Please contact support if this problem persists."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ungültige Nutzdaten. Bitte wenden Sie sich an den Support, wenn das Problem "
|
"Ungültige Nutzdaten. Bitte wenden Dich an den Support, wenn das Problem "
|
||||||
"weiterhin besteht."
|
"weiterhin besteht."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:31
|
#: allianceauth/services/modules/ips4/views.py:31
|
||||||
@@ -1647,7 +1638,7 @@ msgstr "IP4Suite Konto aktiviert."
|
|||||||
#: allianceauth/services/modules/ips4/views.py:81
|
#: allianceauth/services/modules/ips4/views.py:81
|
||||||
#: allianceauth/services/modules/ips4/views.py:101
|
#: allianceauth/services/modules/ips4/views.py:101
|
||||||
msgid "An error occurred while processing your IPSuite4 account."
|
msgid "An error occurred while processing your IPSuite4 account."
|
||||||
msgstr "Es gab einen Fehler bei der Verarbeitung Deines IPSuite4 Kontos."
|
msgstr "Es gab einen Fehler während der Verarbeitung Deines IPSuite4 Kontos."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:52
|
#: allianceauth/services/modules/ips4/views.py:52
|
||||||
msgid "Reset IPSuite4 password."
|
msgid "Reset IPSuite4 password."
|
||||||
@@ -1669,7 +1660,7 @@ msgstr "Jabber"
|
|||||||
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:5
|
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:5
|
||||||
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:10
|
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:10
|
||||||
msgid "Jabber Broadcast"
|
msgid "Jabber Broadcast"
|
||||||
msgstr "Jabber Übertragung"
|
msgstr "Jabber Ankündigung"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/auth_hooks.py:94
|
#: allianceauth/services/modules/openfire/auth_hooks.py:94
|
||||||
msgid "Fleet Broadcast Formatter"
|
msgid "Fleet Broadcast Formatter"
|
||||||
@@ -1681,11 +1672,11 @@ msgstr "Nachricht"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:16
|
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:16
|
||||||
msgid "Broadcast Sent!!"
|
msgid "Broadcast Sent!!"
|
||||||
msgstr "Übertragung gesendet!!"
|
msgstr "Ankündigung gesendet!!"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:22
|
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:22
|
||||||
msgid "Broadcast"
|
msgid "Broadcast"
|
||||||
msgstr "Übertragungen"
|
msgstr "Ankündigung"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/views.py:35
|
#: allianceauth/services/modules/openfire/views.py:35
|
||||||
msgid "Activated jabber account."
|
msgid "Activated jabber account."
|
||||||
@@ -1696,7 +1687,7 @@ msgstr "Jabber Konto aktiviert."
|
|||||||
#: allianceauth/services/modules/openfire/views.py:76
|
#: allianceauth/services/modules/openfire/views.py:76
|
||||||
#: allianceauth/services/modules/openfire/views.py:147
|
#: allianceauth/services/modules/openfire/views.py:147
|
||||||
msgid "An error occurred while processing your jabber account."
|
msgid "An error occurred while processing your jabber account."
|
||||||
msgstr "Es gab einen Fehler bei der Verarbeitung Deines Jabber Kontos."
|
msgstr "Es gab einen Fehler während der Verarbeitung Deines Jabber Kontos."
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/views.py:69
|
#: allianceauth/services/modules/openfire/views.py:69
|
||||||
msgid "Reset jabber password."
|
msgid "Reset jabber password."
|
||||||
@@ -1705,7 +1696,7 @@ msgstr "Jabber Passwort zurücksetzen."
|
|||||||
#: allianceauth/services/modules/openfire/views.py:115
|
#: allianceauth/services/modules/openfire/views.py:115
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Sent jabber broadcast to %s"
|
msgid "Sent jabber broadcast to %s"
|
||||||
msgstr "Sende Jabber Durchsage an %s"
|
msgstr "Sende Jabber Ankündigung an %s"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/views.py:144
|
#: allianceauth/services/modules/openfire/views.py:144
|
||||||
msgid "Set jabber password."
|
msgid "Set jabber password."
|
||||||
@@ -1720,7 +1711,7 @@ msgstr "Forum Konto aktiviert."
|
|||||||
#: allianceauth/services/modules/phpbb3/views.py:78
|
#: allianceauth/services/modules/phpbb3/views.py:78
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:101
|
#: allianceauth/services/modules/phpbb3/views.py:101
|
||||||
msgid "An error occurred while processing your forum account."
|
msgid "An error occurred while processing your forum account."
|
||||||
msgstr "Es gab einen Fehler bei der Verarbeitung Deines Forum Kontos."
|
msgstr "Es gab einen Fehler während der Verarbeitung Deines Forum Kontos."
|
||||||
|
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:53
|
#: allianceauth/services/modules/phpbb3/views.py:53
|
||||||
msgid "Deactivated forum account."
|
msgid "Deactivated forum account."
|
||||||
@@ -1743,7 +1734,7 @@ msgstr "SMF Konto aktiviert."
|
|||||||
#: allianceauth/services/modules/smf/views.py:102
|
#: allianceauth/services/modules/smf/views.py:102
|
||||||
#: allianceauth/services/modules/smf/views.py:124
|
#: allianceauth/services/modules/smf/views.py:124
|
||||||
msgid "An error occurred while processing your SMF account."
|
msgid "An error occurred while processing your SMF account."
|
||||||
msgstr "Es gab einen Fehler bei der Verarbeitung Deines SMF Kontos."
|
msgstr "Es gab einen Fehler während der Verarbeitung Deines SMF Kontos."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:78
|
#: allianceauth/services/modules/smf/views.py:78
|
||||||
msgid "Deactivated SMF account."
|
msgid "Deactivated SMF account."
|
||||||
@@ -1760,7 +1751,7 @@ msgstr "Setze SMF Passwort."
|
|||||||
#: allianceauth/services/modules/teamspeak3/forms.py:14
|
#: allianceauth/services/modules/teamspeak3/forms.py:14
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Unable to locate user %s on server"
|
msgid "Unable to locate user %s on server"
|
||||||
msgstr "Kann den Benutzer %s auf dem Server nicht finden"
|
msgstr "Der Benutzer %s konnte auf dem Server nicht gefunden werden"
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/templates/admin/teamspeak3/authts/change_list.html:8
|
#: allianceauth/services/modules/teamspeak3/templates/admin/teamspeak3/authts/change_list.html:8
|
||||||
msgid "Update TS3 groups"
|
msgid "Update TS3 groups"
|
||||||
@@ -1792,7 +1783,8 @@ msgstr "TeamSpeak3 Konto aktiviert."
|
|||||||
#: allianceauth/services/modules/teamspeak3/views.py:74
|
#: allianceauth/services/modules/teamspeak3/views.py:74
|
||||||
#: allianceauth/services/modules/teamspeak3/views.py:100
|
#: allianceauth/services/modules/teamspeak3/views.py:100
|
||||||
msgid "An error occurred while processing your TeamSpeak3 account."
|
msgid "An error occurred while processing your TeamSpeak3 account."
|
||||||
msgstr "Es gab einen Fehler bei der Verarbeitung Deines TeamSpeak3 Kontos."
|
msgstr ""
|
||||||
|
"Es gab einen Fehler während der Verarbeitung Deines TeamSpeak3 Kontos."
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/views.py:71
|
#: allianceauth/services/modules/teamspeak3/views.py:71
|
||||||
msgid "Deactivated TeamSpeak3 account."
|
msgid "Deactivated TeamSpeak3 account."
|
||||||
@@ -1811,7 +1803,7 @@ msgstr "XenForo Konto aktiviert."
|
|||||||
#: allianceauth/services/modules/xenforo/views.py:73
|
#: allianceauth/services/modules/xenforo/views.py:73
|
||||||
#: allianceauth/services/modules/xenforo/views.py:94
|
#: allianceauth/services/modules/xenforo/views.py:94
|
||||||
msgid "An error occurred while processing your XenForo account."
|
msgid "An error occurred while processing your XenForo account."
|
||||||
msgstr "Es gab einen Fehler bei der Verarbeitung Deines XenForo Kontos."
|
msgstr "Es gab einen Fehler während der Verarbeitung Deines XenForo Kontos."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:50
|
#: allianceauth/services/modules/xenforo/views.py:50
|
||||||
msgid "Deactivated XenForo account."
|
msgid "Deactivated XenForo account."
|
||||||
@@ -1841,7 +1833,7 @@ msgstr "Formatieren"
|
|||||||
#: allianceauth/services/templates/services/service_confirm_delete.html:12
|
#: allianceauth/services/templates/services/service_confirm_delete.html:12
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Delete %(service_name)s Account?"
|
msgid "Delete %(service_name)s Account?"
|
||||||
msgstr "Konto %(service_name)s löschen?"
|
msgstr " %(service_name)s Konto löschen?"
|
||||||
|
|
||||||
#: allianceauth/services/templates/services/service_confirm_delete.html:20
|
#: allianceauth/services/templates/services/service_confirm_delete.html:20
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -1865,7 +1857,7 @@ msgstr "%(service_name)s Passwort ändern"
|
|||||||
#: allianceauth/services/templates/services/service_password.html:9
|
#: allianceauth/services/templates/services/service_password.html:9
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Set %(service_name)s Password"
|
msgid "Set %(service_name)s Password"
|
||||||
msgstr "%(service_name)s Passwort"
|
msgstr "%(service_name)s Passwort setzen"
|
||||||
|
|
||||||
#: allianceauth/services/templates/services/service_password.html:17
|
#: allianceauth/services/templates/services/service_password.html:17
|
||||||
msgid "Set Password"
|
msgid "Set Password"
|
||||||
@@ -1936,7 +1928,7 @@ msgstr "SRP Flotten Daten"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:50
|
#: allianceauth/srp/templates/srp/data.html:50
|
||||||
msgid "SRP Fleet Data"
|
msgid "SRP Fleet Data"
|
||||||
msgstr "SRP-Flotte Daten"
|
msgstr "SRP Flotte Daten"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:55
|
#: allianceauth/srp/templates/srp/data.html:55
|
||||||
msgid "Mark Incomplete"
|
msgid "Mark Incomplete"
|
||||||
@@ -2014,7 +2006,7 @@ msgstr "Füge SRP Flotte hinzu"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/management.html:39
|
#: allianceauth/srp/templates/srp/management.html:39
|
||||||
msgid "Fleet AAR"
|
msgid "Fleet AAR"
|
||||||
msgstr "Flotten AAR"
|
msgstr "Flottenbericht"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/management.html:40
|
#: allianceauth/srp/templates/srp/management.html:40
|
||||||
msgid "Fleet SRP Code"
|
msgid "Fleet SRP Code"
|
||||||
@@ -2042,7 +2034,7 @@ msgstr "Deaktiviert"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/management.html:83
|
#: allianceauth/srp/templates/srp/management.html:83
|
||||||
msgid "Completed"
|
msgid "Completed"
|
||||||
msgstr "Fertig"
|
msgstr "Abgeschlossen"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/management.html:101
|
#: allianceauth/srp/templates/srp/management.html:101
|
||||||
msgid "Are you sure you want to delete this SRP code and its contents?"
|
msgid "Are you sure you want to delete this SRP code and its contents?"
|
||||||
@@ -2095,7 +2087,7 @@ msgstr "SRP Link für %(fleetname)s aktiviert."
|
|||||||
#: allianceauth/srp/views.py:140
|
#: allianceauth/srp/views.py:140
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Marked SRP fleet %(fleetname)s as completed."
|
msgid "Marked SRP fleet %(fleetname)s as completed."
|
||||||
msgstr "SRP Flotte %(fleetname)s als vollständig markiert."
|
msgstr "SRP Flotte %(fleetname)s als abgeschlossen markiert."
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:153
|
#: allianceauth/srp/views.py:153
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -2213,7 +2205,7 @@ msgstr "Testversion verfügbar"
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:78
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:78
|
||||||
msgid "Task Queue"
|
msgid "Task Queue"
|
||||||
msgstr "Warteschlange"
|
msgstr "Task-Warteschlange"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -2258,7 +2250,7 @@ msgstr "Ausloggen"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/form.py:53
|
#: allianceauth/timerboard/form.py:53
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr "anderes"
|
msgstr "Anderes"
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:54
|
#: allianceauth/timerboard/form.py:54
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:62
|
#: allianceauth/timerboard/templates/timerboard/view.html:62
|
||||||
@@ -2362,7 +2354,7 @@ msgstr "Timer löschen"
|
|||||||
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:19
|
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:19
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Are you sure you want to delete timer \"%(object)s\"?"
|
msgid "Are you sure you want to delete timer \"%(object)s\"?"
|
||||||
msgstr "Bist Du sicher das Du Timer \"%(object)s\" löschen möchtest?"
|
msgstr "Bist Du sicher das Du Timer „%(object)s“ löschen möchtest?"
|
||||||
|
|
||||||
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:5
|
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:5
|
||||||
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:13
|
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:13
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-09-14 23:17+1000\n"
|
"POT-Creation-Date: 2023-11-08 23:55+1000\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"
|
||||||
@@ -26,7 +26,7 @@ msgstr ""
|
|||||||
msgid "Google Analytics V4"
|
msgid "Google Analytics V4"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/decorators.py:37
|
#: allianceauth/authentication/decorators.py:49
|
||||||
msgid "A main character is required to perform that action. Add one below."
|
msgid "A main character is required to perform that action. Add one below."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -39,72 +39,68 @@ msgstr ""
|
|||||||
msgid "You are not allowed to add or remove these restricted groups: %s"
|
msgid "You are not allowed to add or remove these restricted groups: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:71
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:89
|
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:72
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:90
|
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:73
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:91
|
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:83
|
#: allianceauth/authentication/models.py:74
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:92
|
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:84
|
#: allianceauth/authentication/models.py:75
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:93
|
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:85
|
#: allianceauth/authentication/models.py:76
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:94
|
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:86
|
#: allianceauth/authentication/models.py:77
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:95
|
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:87
|
#: allianceauth/authentication/models.py:78
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:96
|
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:88
|
#: allianceauth/authentication/models.py:79
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:97
|
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:91
|
#: allianceauth/authentication/models.py:80
|
||||||
msgid "Language"
|
msgid "Ukrainian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:96
|
#: allianceauth/authentication/models.py:96
|
||||||
|
msgid "Language"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/authentication/models.py:101
|
||||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||||
msgid "Night Mode"
|
msgid "Night Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:110
|
#: allianceauth/authentication/models.py:115
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "State changed to: %s"
|
msgid "State changed to: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:111
|
#: allianceauth/authentication/models.py:116
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Your user's state is now: %(state)s"
|
msgid "Your user's state is now: %(state)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:4
|
#: allianceauth/authentication/templates/authentication/dashboard.html:4
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:7
|
#: allianceauth/authentication/templates/authentication/dashboard.html:7
|
||||||
|
#: allianceauth/authentication/templates/authentication/tokens.html:4
|
||||||
#: allianceauth/templates/allianceauth/side-menu.html:10
|
#: allianceauth/templates/allianceauth/side-menu.html:10
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -160,8 +156,49 @@ msgstr ""
|
|||||||
msgid "Alliance"
|
msgid "Alliance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/authentication/templates/authentication/tokens.html:7
|
||||||
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
|
||||||
|
msgid "Token Management"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/authentication/templates/authentication/tokens.html:12
|
||||||
|
msgid "Scopes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/authentication/templates/authentication/tokens.html:13
|
||||||
|
#: allianceauth/hrapplications/templates/hrapplications/management.html:28
|
||||||
|
#: allianceauth/hrapplications/templates/hrapplications/management.html:83
|
||||||
|
#: allianceauth/hrapplications/templates/hrapplications/management.html:127
|
||||||
|
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:27
|
||||||
|
#: allianceauth/hrapplications/templates/hrapplications/view.html:73
|
||||||
|
#: allianceauth/srp/templates/srp/data.html:101
|
||||||
|
#: allianceauth/srp/templates/srp/management.html:44
|
||||||
|
msgid "Actions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/authentication/templates/authentication/tokens.html:14
|
||||||
|
#: allianceauth/corputils/templates/corputils/corpstats.html:74
|
||||||
|
#: allianceauth/corputils/templates/corputils/corpstats.html:112
|
||||||
|
#: allianceauth/corputils/templates/corputils/corpstats.html:156
|
||||||
|
#: allianceauth/corputils/templates/corputils/search.html:13
|
||||||
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:22
|
||||||
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:26
|
||||||
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:30
|
||||||
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:29
|
||||||
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:55
|
||||||
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:112
|
||||||
|
msgid "Character"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/authentication/templates/authentication/tokens.html:28
|
||||||
|
msgid ""
|
||||||
|
"This page is a best attempt, but backups or database logs can still contain "
|
||||||
|
"your tokens. Always revoke tokens on https://community.eveonline.com/support/"
|
||||||
|
"third-party-applications/ where possible."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/login.html:6
|
#: allianceauth/authentication/templates/public/login.html:6
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:58
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:69
|
||||||
msgid "Login"
|
msgid "Login"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -193,47 +230,47 @@ msgstr ""
|
|||||||
msgid "Invalid or expired activation link."
|
msgid "Invalid or expired activation link."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:77
|
#: allianceauth/authentication/views.py:118
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot change main character to %(char)s: character owned by a different "
|
"Cannot change main character to %(char)s: character owned by a different "
|
||||||
"account."
|
"account."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:83
|
#: allianceauth/authentication/views.py:124
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Changed main character to %(char)s"
|
msgid "Changed main character to %(char)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:92
|
#: allianceauth/authentication/views.py:133
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Added %(name)s to your account."
|
msgid "Added %(name)s to your account."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:94
|
#: allianceauth/authentication/views.py:135
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Failed to add %(name)s to your account: they already have an account."
|
msgid "Failed to add %(name)s to your account: they already have an account."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:133
|
#: allianceauth/authentication/views.py:174
|
||||||
msgid "Unable to authenticate as the selected character."
|
msgid "Unable to authenticate as the selected character."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:197
|
#: allianceauth/authentication/views.py:238
|
||||||
msgid "Registration token has expired."
|
msgid "Registration token has expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:252
|
#: allianceauth/authentication/views.py:296
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sent confirmation email. Please follow the link to confirm your email "
|
"Sent confirmation email. Please follow the link to confirm your email "
|
||||||
"address."
|
"address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:257
|
#: allianceauth/authentication/views.py:301
|
||||||
msgid "Confirmed your email address. Please login to continue."
|
msgid "Confirmed your email address. Please login to continue."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:262
|
#: allianceauth/authentication/views.py:306
|
||||||
msgid "Registration of new accounts is not allowed at this time."
|
msgid "Registration of new accounts is not allowed at this time."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -276,19 +313,6 @@ msgstr ""
|
|||||||
msgid "Last update:"
|
msgid "Last update:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:74
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:112
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:156
|
|
||||||
#: allianceauth/corputils/templates/corputils/search.html:13
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:22
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:26
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:30
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:29
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:55
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:112
|
|
||||||
msgid "Character"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:75
|
#: allianceauth/corputils/templates/corputils/corpstats.html:75
|
||||||
#: allianceauth/corputils/templates/corputils/search.html:14
|
#: allianceauth/corputils/templates/corputils/search.html:14
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:31
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:31
|
||||||
@@ -620,36 +644,41 @@ msgstr ""
|
|||||||
msgid "Group Management"
|
msgid "Group Management"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:15
|
#: allianceauth/groupmanagement/forms.py:18
|
||||||
|
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:35
|
||||||
|
msgid "Users"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/groupmanagement/forms.py:52
|
||||||
msgid "This name has been reserved and can not be used for groups."
|
msgid "This name has been reserved and can not be used for groups."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:25
|
#: allianceauth/groupmanagement/forms.py:62
|
||||||
msgid "(auto)"
|
msgid "(auto)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:34
|
#: allianceauth/groupmanagement/forms.py:71
|
||||||
msgid "There already exists a group with that name."
|
msgid "There already exists a group with that name."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:105
|
#: allianceauth/groupmanagement/models.py:104
|
||||||
msgid ""
|
msgid ""
|
||||||
"Internal group, users cannot see, join or request to join this group."
|
"Internal group, users cannot see, join or request to join this group."
|
||||||
"<br>Used for groups such as Members, Corp_*, Alliance_* etc.<br><b>Overrides "
|
"<br>Used for groups such as Members, Corp_*, Alliance_* etc.<br><b>Overrides "
|
||||||
"Hidden and Open options when selected.</b>"
|
"Hidden and Open options when selected.</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:113
|
#: allianceauth/groupmanagement/models.py:112
|
||||||
msgid "Group is hidden from users but can still join with the correct link."
|
msgid "Group is hidden from users but can still join with the correct link."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:119
|
#: allianceauth/groupmanagement/models.py:118
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group is open and users will be automatically added upon request.<br>If the "
|
"Group is open and users will be automatically added upon request.<br>If the "
|
||||||
"group is not open users will need their request manually approved."
|
"group is not open users will need their request manually approved."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:126
|
#: allianceauth/groupmanagement/models.py:125
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group is public. Any registered user is able to join this group, with "
|
"Group is public. Any registered user is able to join this group, with "
|
||||||
"visibility based on the other options set for this group.<br>Auth will not "
|
"visibility based on the other options set for this group.<br>Auth will not "
|
||||||
@@ -657,65 +686,65 @@ msgid ""
|
|||||||
"authenticated."
|
"authenticated."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:135
|
#: allianceauth/groupmanagement/models.py:134
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group is restricted. This means that adding or removing users for this group "
|
"Group is restricted. This means that adding or removing users for this group "
|
||||||
"requires a superuser admin."
|
"requires a superuser admin."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:144
|
#: allianceauth/groupmanagement/models.py:143
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group leaders can process requests for this group. Use the <code>auth."
|
"Group leaders can process requests for this group. Use the <code>auth."
|
||||||
"group_management</code> permission to allow a user to manage all groups.<br>"
|
"group_management</code> permission to allow a user to manage all groups.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:154
|
#: allianceauth/groupmanagement/models.py:153
|
||||||
msgid ""
|
msgid ""
|
||||||
"Members of leader groups can process requests for this group. Use the "
|
"Members of leader groups can process requests for this group. Use the "
|
||||||
"<code>auth.group_management</code> permission to allow a user to manage all "
|
"<code>auth.group_management</code> permission to allow a user to manage all "
|
||||||
"groups.<br>"
|
"groups.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:163
|
#: allianceauth/groupmanagement/models.py:162
|
||||||
msgid ""
|
msgid ""
|
||||||
"States listed here will have the ability to join this group provided they "
|
"States listed here will have the ability to join this group provided they "
|
||||||
"have the proper permissions.<br>"
|
"have the proper permissions.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:171
|
#: allianceauth/groupmanagement/models.py:170
|
||||||
msgid ""
|
msgid ""
|
||||||
"Short description <i>(max. 512 characters)</i> of the group shown to users."
|
"Short description <i>(max. 512 characters)</i> of the group shown to users."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:178
|
#: allianceauth/groupmanagement/models.py:177
|
||||||
msgid "Can request non-public groups"
|
msgid "Can request non-public groups"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:209
|
#: allianceauth/groupmanagement/models.py:208
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:212
|
#: allianceauth/groupmanagement/models.py:211
|
||||||
msgid "Name that can not be used for groups."
|
msgid "Name that can not be used for groups."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:214
|
||||||
msgid "reason"
|
msgid "reason"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:214
|
||||||
msgid "Reason why this name is reserved."
|
msgid "Reason why this name is reserved."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:218
|
#: allianceauth/groupmanagement/models.py:217
|
||||||
msgid "created by"
|
msgid "created by"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:223
|
#: allianceauth/groupmanagement/models.py:222
|
||||||
msgid "created at"
|
msgid "created at"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:223
|
#: allianceauth/groupmanagement/models.py:222
|
||||||
msgid "Date when this entry was created"
|
msgid "Date when this entry was created"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -942,86 +971,86 @@ msgstr ""
|
|||||||
msgid "Group Membership"
|
msgid "Group Membership"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:163
|
#: allianceauth/groupmanagement/views.py:166
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Removed user %(user)s from group %(group)s."
|
msgid "Removed user %(user)s from group %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:165
|
#: allianceauth/groupmanagement/views.py:168
|
||||||
msgid "User does not exist in that group"
|
msgid "User does not exist in that group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:168
|
#: allianceauth/groupmanagement/views.py:171
|
||||||
msgid "Group does not exist"
|
msgid "Group does not exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:195
|
#: allianceauth/groupmanagement/views.py:198
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Accepted application from %(mainchar)s to %(group)s."
|
msgid "Accepted application from %(mainchar)s to %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:201
|
#: allianceauth/groupmanagement/views.py:204
|
||||||
#: allianceauth/groupmanagement/views.py:232
|
#: allianceauth/groupmanagement/views.py:235
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"An unhandled error occurred while processing the application from "
|
"An unhandled error occurred while processing the application from "
|
||||||
"%(mainchar)s to %(group)s."
|
"%(mainchar)s to %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:226
|
#: allianceauth/groupmanagement/views.py:229
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Rejected application from %(mainchar)s to %(group)s."
|
msgid "Rejected application from %(mainchar)s to %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:261
|
#: allianceauth/groupmanagement/views.py:264
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Accepted application from %(mainchar)s to leave %(group)s."
|
msgid "Accepted application from %(mainchar)s to leave %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:266
|
#: allianceauth/groupmanagement/views.py:269
|
||||||
#: allianceauth/groupmanagement/views.py:298
|
#: allianceauth/groupmanagement/views.py:301
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"An unhandled error occurred while processing the application from "
|
"An unhandled error occurred while processing the application from "
|
||||||
"%(mainchar)s to leave %(group)s."
|
"%(mainchar)s to leave %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:292
|
#: allianceauth/groupmanagement/views.py:295
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Rejected application from %(mainchar)s to leave %(group)s."
|
msgid "Rejected application from %(mainchar)s to leave %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:336
|
#: allianceauth/groupmanagement/views.py:339
|
||||||
#: allianceauth/groupmanagement/views.py:346
|
#: allianceauth/groupmanagement/views.py:349
|
||||||
msgid "You cannot join that group"
|
msgid "You cannot join that group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:341
|
#: allianceauth/groupmanagement/views.py:344
|
||||||
msgid "You are already a member of that group."
|
msgid "You are already a member of that group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:358
|
#: allianceauth/groupmanagement/views.py:361
|
||||||
msgid "You already have a pending application for that group."
|
msgid "You already have a pending application for that group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:367
|
#: allianceauth/groupmanagement/views.py:370
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Applied to group %(group)s."
|
msgid "Applied to group %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:377
|
#: allianceauth/groupmanagement/views.py:380
|
||||||
msgid "You cannot leave that group"
|
msgid "You cannot leave that group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:381
|
#: allianceauth/groupmanagement/views.py:384
|
||||||
msgid "You are not a member of that group"
|
msgid "You are not a member of that group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:393
|
#: allianceauth/groupmanagement/views.py:396
|
||||||
msgid "You already have a pending leave request for that group."
|
msgid "You already have a pending leave request for that group."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:409
|
#: allianceauth/groupmanagement/views.py:412
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Applied to leave group %(group)s."
|
msgid "Applied to leave group %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1083,16 +1112,6 @@ msgstr ""
|
|||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:28
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:83
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:127
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:27
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:73
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:101
|
|
||||||
#: allianceauth/srp/templates/srp/management.html:44
|
|
||||||
msgid "Actions"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:38
|
#: allianceauth/hrapplications/templates/hrapplications/management.html:38
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:99
|
#: allianceauth/hrapplications/templates/hrapplications/management.html:99
|
||||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
|
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
|
||||||
@@ -1431,10 +1450,6 @@ msgstr ""
|
|||||||
msgid "Code Name"
|
msgid "Code Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:35
|
|
||||||
msgid "Users"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:41
|
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:41
|
||||||
msgid "States"
|
msgid "States"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -2155,11 +2170,11 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
||||||
#, python-format
|
msgid "running"
|
||||||
msgid ""
|
msgstr ""
|
||||||
"\n"
|
|
||||||
" %(queue_length)s queued tasks\n"
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
|
||||||
" "
|
msgid "queued"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
||||||
@@ -2175,11 +2190,11 @@ msgid "AA Support Discord"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:10
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:10
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:14
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:16
|
||||||
msgid "User Menu"
|
msgid "User Menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:56
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:67
|
||||||
msgid "Logout"
|
msgid "Logout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2235,22 +2250,30 @@ msgid "Objective"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:64
|
#: allianceauth/timerboard/form.py:64
|
||||||
msgid "Days Remaining"
|
msgid "Absolute Timer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:65
|
#: allianceauth/timerboard/form.py:65
|
||||||
msgid "Hours Remaining"
|
msgid "Date and Time"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/timerboard/form.py:66
|
||||||
|
msgid "Days Remaining"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:67
|
#: allianceauth/timerboard/form.py:67
|
||||||
msgid "Minutes Remaining"
|
msgid "Hours Remaining"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:69
|
#: allianceauth/timerboard/form.py:69
|
||||||
|
msgid "Minutes Remaining"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/timerboard/form.py:71
|
||||||
msgid "Important"
|
msgid "Important"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:70
|
#: allianceauth/timerboard/form.py:72
|
||||||
msgid "Corp-Restricted"
|
msgid "Corp-Restricted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -4,18 +4,21 @@
|
|||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# frank1210 <francolopez_16@hotmail.com>, 2021
|
# Fegpawn Kaundur, 2023
|
||||||
# Joel Falknau <ozirascal@gmail.com>, 2021
|
# frank1210 <francolopez_16@hotmail.com>, 2023
|
||||||
|
# trenus, 2023
|
||||||
|
# Joel Falknau <ozirascal@gmail.com>, 2023
|
||||||
|
# Young Anexo, 2023
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-09-14 23:17+1000\n"
|
"POT-Creation-Date: 2022-10-09 18:20+1000\n"
|
||||||
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
"PO-Revision-Date: 2023-10-08 09:23+0000\n"
|
||||||
"Last-Translator: Joel Falknau <ozirascal@gmail.com>, 2021\n"
|
"Last-Translator: Young Anexo, 2023\n"
|
||||||
"Language-Team: Spanish (https://www.transifex.com/alliance-auth/teams/107430/es/)\n"
|
"Language-Team: Spanish (https://app.transifex.com/alliance-auth/teams/107430/es/)\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"
|
||||||
@@ -24,16 +27,17 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/analytics/models.py:29
|
#: allianceauth/analytics/models.py:29
|
||||||
msgid "Google Analytics Universal"
|
msgid "Google Analytics Universal"
|
||||||
msgstr ""
|
msgstr "Google Analytics Universal"
|
||||||
|
|
||||||
#: allianceauth/analytics/models.py:30
|
#: allianceauth/analytics/models.py:30
|
||||||
msgid "Google Analytics V4"
|
msgid "Google Analytics V4"
|
||||||
msgstr ""
|
msgstr "Google Analytics V4"
|
||||||
|
|
||||||
#: allianceauth/authentication/decorators.py:37
|
#: allianceauth/authentication/decorators.py:37
|
||||||
msgid "A main character is required to perform that action. Add one below."
|
msgid "A main character is required to perform that action. Add one below."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Un personaje principal es requerido para completar esta accion. Agregue uno"
|
"Se necesita un personaje principal para realizar esa acción. Añade uno a "
|
||||||
|
"continuación."
|
||||||
|
|
||||||
#: allianceauth/authentication/forms.py:12
|
#: allianceauth/authentication/forms.py:12
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
@@ -42,77 +46,68 @@ msgstr "E-mail"
|
|||||||
#: allianceauth/authentication/forms.py:62
|
#: allianceauth/authentication/forms.py:62
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "You are not allowed to add or remove these restricted groups: %s"
|
msgid "You are not allowed to add or remove these restricted groups: %s"
|
||||||
msgstr ""
|
msgstr "No puedes añadir o eliminar estos grupos restringidos: %s"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:89
|
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Ingles"
|
msgstr "Inglés"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:90
|
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Aleman"
|
msgstr "Alemán"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:91
|
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Español"
|
msgstr "Español"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:83
|
#: allianceauth/authentication/models.py:83
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:92
|
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr ""
|
msgstr "Chino Simplificado"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:84
|
#: allianceauth/authentication/models.py:84
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:93
|
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Ruso"
|
msgstr "Ruso"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:85
|
#: allianceauth/authentication/models.py:85
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:94
|
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr "Coreano"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:86
|
#: allianceauth/authentication/models.py:86
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:95
|
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr ""
|
msgstr "Francés"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:87
|
#: allianceauth/authentication/models.py:87
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:96
|
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr ""
|
msgstr "Japonés"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:88
|
#: allianceauth/authentication/models.py:88
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:97
|
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr ""
|
msgstr "Italiano"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:91
|
#: allianceauth/authentication/models.py:91
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr ""
|
msgstr "Idioma"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:96
|
#: allianceauth/authentication/models.py:96
|
||||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||||
msgid "Night Mode"
|
msgid "Night Mode"
|
||||||
msgstr ""
|
msgstr "Modo Nocturno"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:110
|
#: allianceauth/authentication/models.py:110
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "State changed to: %s"
|
msgid "State changed to: %s"
|
||||||
msgstr ""
|
msgstr "Estado cambiado a: %s"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:111
|
#: allianceauth/authentication/models.py:111
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Your user's state is now: %(state)s"
|
msgid "Your user's state is now: %(state)s"
|
||||||
msgstr ""
|
msgstr "El estado de su usuario es ahora: %(state)s"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:4
|
#: allianceauth/authentication/templates/authentication/dashboard.html:4
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:7
|
#: allianceauth/authentication/templates/authentication/dashboard.html:7
|
||||||
#: allianceauth/templates/allianceauth/side-menu.html:10
|
#: allianceauth/templates/allianceauth/side-menu.html:10
|
||||||
msgid "Dashboard"
|
msgid "Dashboard"
|
||||||
msgstr "Pagina Principal"
|
msgstr "Página principal"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:17
|
#: allianceauth/authentication/templates/authentication/dashboard.html:17
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -121,6 +116,8 @@ msgid ""
|
|||||||
" Main Character (State: %(state)s)\n"
|
" Main Character (State: %(state)s)\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Personaje Principal (estado: %(state)s)"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:101
|
#: allianceauth/authentication/templates/authentication/dashboard.html:101
|
||||||
msgid "No main character set."
|
msgid "No main character set."
|
||||||
@@ -136,7 +133,7 @@ msgstr "Cambiar Personaje Principal"
|
|||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:125
|
#: allianceauth/authentication/templates/authentication/dashboard.html:125
|
||||||
msgid "Group Memberships"
|
msgid "Group Memberships"
|
||||||
msgstr ""
|
msgstr "Membresia de Grupos"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:145
|
#: allianceauth/authentication/templates/authentication/dashboard.html:145
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html:21
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticscorpview.html:21
|
||||||
@@ -172,23 +169,25 @@ msgstr "Ingresar"
|
|||||||
|
|
||||||
#: allianceauth/authentication/templates/public/login.html:10
|
#: allianceauth/authentication/templates/public/login.html:10
|
||||||
msgid "Login with Eve SSO"
|
msgid "Login with Eve SSO"
|
||||||
msgstr ""
|
msgstr "Iniciar Sesión con Eve SSO"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/middle_box.html:24
|
#: allianceauth/authentication/templates/public/middle_box.html:24
|
||||||
msgid "For information on SSO, ESI and security read the CCP Dev Blog"
|
msgid "For information on SSO, ESI and security read the CCP Dev Blog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Para más información sobre SSO, ESI y seguridad, lea el blog de desarrollo "
|
||||||
|
"de CCP."
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/middle_box.html:26
|
#: allianceauth/authentication/templates/public/middle_box.html:26
|
||||||
msgid "Introducing ESI - A New API For Eve Online"
|
msgid "Introducing ESI - A New API For Eve Online"
|
||||||
msgstr ""
|
msgstr "Presentación de ESI - Una nueva API para Eve Online"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/middle_box.html:32
|
#: allianceauth/authentication/templates/public/middle_box.html:32
|
||||||
msgid "Manage ESI Applications"
|
msgid "Manage ESI Applications"
|
||||||
msgstr ""
|
msgstr "Gestionar aplicaciones ESI"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/register.html:6
|
#: allianceauth/authentication/templates/public/register.html:6
|
||||||
msgid "Registration"
|
msgid "Registration"
|
||||||
msgstr ""
|
msgstr "Registro"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/register.html:21
|
#: allianceauth/authentication/templates/public/register.html:21
|
||||||
msgid "Register"
|
msgid "Register"
|
||||||
@@ -204,6 +203,8 @@ msgid ""
|
|||||||
"Cannot change main character to %(char)s: character owned by a different "
|
"Cannot change main character to %(char)s: character owned by a different "
|
||||||
"account."
|
"account."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"No se puede cambiar de personaje principal a %(char)s: personaje "
|
||||||
|
"perteneciente a otra cuenta."
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:83
|
#: allianceauth/authentication/views.py:83
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -245,7 +246,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/authentication/views.py:262
|
#: allianceauth/authentication/views.py:262
|
||||||
msgid "Registration of new accounts is not allowed at this time."
|
msgid "Registration of new accounts is not allowed at this time."
|
||||||
msgstr ""
|
msgstr "En este momento no se permite el registro de nuevas cuentas."
|
||||||
|
|
||||||
#: allianceauth/corputils/auth_hooks.py:11
|
#: allianceauth/corputils/auth_hooks.py:11
|
||||||
msgid "Corporation Stats"
|
msgid "Corporation Stats"
|
||||||
@@ -495,9 +496,9 @@ msgstr "Mes Siguiente"
|
|||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(user)s has collected one link this month."
|
msgid "%(user)s has collected one link this month."
|
||||||
msgid_plural "%(user)s has collected %(links)s links this month."
|
msgid_plural "%(user)s has collected %(links)s links this month."
|
||||||
msgstr[0] ""
|
msgstr[0] "%(user)s ha recopilado un enlace este mes."
|
||||||
msgstr[1] ""
|
msgstr[1] " %(user)s ha recopilado %(links)s enlaces este mes."
|
||||||
msgstr[2] ""
|
msgstr[2] "%(user)s ha recopilado %(links)s enlaces este mes."
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:26
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:26
|
||||||
msgid "Times used"
|
msgid "Times used"
|
||||||
@@ -507,9 +508,9 @@ msgstr "Utilizado"
|
|||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(user)s has created one link this month."
|
msgid "%(user)s has created one link this month."
|
||||||
msgid_plural "%(user)s has created %(links)s links this month."
|
msgid_plural "%(user)s has created %(links)s links this month."
|
||||||
msgstr[0] ""
|
msgstr[0] "%(user)s ha creado un enlace este mes."
|
||||||
msgstr[1] ""
|
msgstr[1] "%(user)s ha creado %(links)s enlaces este mes."
|
||||||
msgstr[2] ""
|
msgstr[2] "%(user)s ha creado %(links)s enlaces este mes."
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:46
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:46
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:25
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:25
|
||||||
@@ -607,11 +608,11 @@ msgstr "No hay fatlinks creados recientemente"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:218
|
#: allianceauth/fleetactivitytracking/views.py:218
|
||||||
msgid "Character does not exist"
|
msgid "Character does not exist"
|
||||||
msgstr ""
|
msgstr "Personaje no existe"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:221
|
#: allianceauth/fleetactivitytracking/views.py:221
|
||||||
msgid "User does not exist"
|
msgid "User does not exist"
|
||||||
msgstr ""
|
msgstr "Usuario no existe"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:299
|
#: allianceauth/fleetactivitytracking/views.py:299
|
||||||
msgid "Fleet participation registered."
|
msgid "Fleet participation registered."
|
||||||
@@ -627,6 +628,8 @@ msgid ""
|
|||||||
"Cannot register the fleet participation for {character.character_name}. The "
|
"Cannot register the fleet participation for {character.character_name}. The "
|
||||||
"character needs to be online."
|
"character needs to be online."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"No se puede registrar la participación en la flota para "
|
||||||
|
"{character.character_name}. El personaje debe estar en línea."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/auth_hooks.py:17
|
#: allianceauth/groupmanagement/auth_hooks.py:17
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:13
|
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:13
|
||||||
@@ -635,15 +638,15 @@ msgstr "Manejo de Grupo"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:15
|
#: allianceauth/groupmanagement/forms.py:15
|
||||||
msgid "This name has been reserved and can not be used for groups."
|
msgid "This name has been reserved and can not be used for groups."
|
||||||
msgstr ""
|
msgstr "Este nombre ha sido reservado y no puede utilizarse para grupos."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:25
|
#: allianceauth/groupmanagement/forms.py:25
|
||||||
msgid "(auto)"
|
msgid "(auto)"
|
||||||
msgstr ""
|
msgstr "(auto)"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:34
|
#: allianceauth/groupmanagement/forms.py:34
|
||||||
msgid "There already exists a group with that name."
|
msgid "There already exists a group with that name."
|
||||||
msgstr ""
|
msgstr "Ya existe un grupo con ese nombre."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:105
|
#: allianceauth/groupmanagement/models.py:105
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -651,16 +654,24 @@ msgid ""
|
|||||||
"group.<br>Used for groups such as Members, Corp_*, Alliance_* "
|
"group.<br>Used for groups such as Members, Corp_*, Alliance_* "
|
||||||
"etc.<br><b>Overrides Hidden and Open options when selected.</b>"
|
"etc.<br><b>Overrides Hidden and Open options when selected.</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Grupo interno, los usuarios no pueden ver, unirse o solicitar unirse a este "
|
||||||
|
"grupo.<br>Se utiliza para grupos como Miembros, Corp_*, Alliance_*, "
|
||||||
|
"etc.<br><b>Anula las opciones Oculto y Abierto cuando se selecciona.</b>"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:113
|
#: allianceauth/groupmanagement/models.py:113
|
||||||
msgid "Group is hidden from users but can still join with the correct link."
|
msgid "Group is hidden from users but can still join with the correct link."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"El grupo está oculto para los usuarios, pero aún pueden unirse con el enlace"
|
||||||
|
" correcto."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:119
|
#: allianceauth/groupmanagement/models.py:119
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group is open and users will be automatically added upon request.<br>If the "
|
"Group is open and users will be automatically added upon request.<br>If the "
|
||||||
"group is not open users will need their request manually approved."
|
"group is not open users will need their request manually approved."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"El grupo está abierto y los usuarios se añadirán automáticamente cuando lo "
|
||||||
|
"soliciten.<br>Si el grupo no está abierto, los usuarios necesitarán que su "
|
||||||
|
"solicitud sea aprobada manualmente."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:126
|
#: allianceauth/groupmanagement/models.py:126
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -669,12 +680,18 @@ msgid ""
|
|||||||
"remove users from this group automatically when they are no longer "
|
"remove users from this group automatically when they are no longer "
|
||||||
"authenticated."
|
"authenticated."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"El grupo es público. Cualquier usuario registrado puede unirse a este grupo,"
|
||||||
|
" con visibilidad basada en las otras opciones establecidas para este "
|
||||||
|
"grupo.<br>Auth no eliminará automáticamente a los usuarios de este grupo "
|
||||||
|
"cuando ya no estén autenticados."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:135
|
#: allianceauth/groupmanagement/models.py:135
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group is restricted. This means that adding or removing users for this group"
|
"Group is restricted. This means that adding or removing users for this group"
|
||||||
" requires a superuser admin."
|
" requires a superuser admin."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"El grupo está restringido. Esto significa que para añadir o eliminar "
|
||||||
|
"usuarios de este grupo se requiere un superusuario administrador."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:144
|
#: allianceauth/groupmanagement/models.py:144
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -682,6 +699,9 @@ msgid ""
|
|||||||
"<code>auth.group_management</code> permission to allow a user to manage all "
|
"<code>auth.group_management</code> permission to allow a user to manage all "
|
||||||
"groups.<br>"
|
"groups.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Los líderes de grupo pueden procesar solicitudes para este grupo. Utilice el"
|
||||||
|
" permiso <code>auth.group_management</code> para permitir que un usuario "
|
||||||
|
"gestione todos los grupos.<br>"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:154
|
#: allianceauth/groupmanagement/models.py:154
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -689,49 +709,56 @@ msgid ""
|
|||||||
"<code>auth.group_management</code> permission to allow a user to manage all "
|
"<code>auth.group_management</code> permission to allow a user to manage all "
|
||||||
"groups.<br>"
|
"groups.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Los miembros de los grupos líderes pueden procesar solicitudes para este "
|
||||||
|
"grupo. Utilice el <code>permiso auth.group_management</code> para permitir "
|
||||||
|
"que un usuario gestione todos los grupos.<br>"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:163
|
#: allianceauth/groupmanagement/models.py:163
|
||||||
msgid ""
|
msgid ""
|
||||||
"States listed here will have the ability to join this group provided they "
|
"States listed here will have the ability to join this group provided they "
|
||||||
"have the proper permissions.<br>"
|
"have the proper permissions.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Los estados que figuren en esta lista podrán unirse a este grupo siempre que"
|
||||||
|
" dispongan de los permisos adecuados.<br>"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:171
|
#: allianceauth/groupmanagement/models.py:171
|
||||||
msgid ""
|
msgid ""
|
||||||
"Short description <i>(max. 512 characters)</i> of the group shown to users."
|
"Short description <i>(max. 512 characters)</i> of the group shown to users."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Breve descripción <i>(máx. 512 caracteres)</i> del grupo que se muestra a "
|
||||||
|
"los usuarios."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:178
|
#: allianceauth/groupmanagement/models.py:178
|
||||||
msgid "Can request non-public groups"
|
msgid "Can request non-public groups"
|
||||||
msgstr ""
|
msgstr "Se pueden solicitar grupos no públicos"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:209
|
#: allianceauth/groupmanagement/models.py:209
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr ""
|
msgstr "nombre"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:212
|
#: allianceauth/groupmanagement/models.py:212
|
||||||
msgid "Name that can not be used for groups."
|
msgid "Name that can not be used for groups."
|
||||||
msgstr ""
|
msgstr "Nombre que no se puede utilizar para los grupos."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:215
|
||||||
msgid "reason"
|
msgid "reason"
|
||||||
msgstr ""
|
msgstr "razón"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:215
|
||||||
msgid "Reason why this name is reserved."
|
msgid "Reason why this name is reserved."
|
||||||
msgstr ""
|
msgstr "Razón por la que este nombre está reservado."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:218
|
#: allianceauth/groupmanagement/models.py:218
|
||||||
msgid "created by"
|
msgid "created by"
|
||||||
msgstr ""
|
msgstr "creado por"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:223
|
#: allianceauth/groupmanagement/models.py:223
|
||||||
msgid "created at"
|
msgid "created at"
|
||||||
msgstr ""
|
msgstr "creado en"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:223
|
#: allianceauth/groupmanagement/models.py:223
|
||||||
msgid "Date when this entry was created"
|
msgid "Date when this entry was created"
|
||||||
msgstr ""
|
msgstr "Fecha de creación de esta entrada"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:4
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:4
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:13
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:13
|
||||||
@@ -773,11 +800,11 @@ msgstr "Actor"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:48
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:48
|
||||||
msgid "Removed"
|
msgid "Removed"
|
||||||
msgstr ""
|
msgstr "Eliminado"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:60
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:60
|
||||||
msgid "All times displayed are EVE/UTC."
|
msgid "All times displayed are EVE/UTC."
|
||||||
msgstr ""
|
msgstr "Todas las horas indicadas son EVE/UTC."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:67
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:67
|
||||||
msgid "No entries found for this group."
|
msgid "No entries found for this group."
|
||||||
@@ -792,18 +819,18 @@ msgstr "Miembros del Grupo"
|
|||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:113
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:113
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:21
|
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:21
|
||||||
msgid "Organization"
|
msgid "Organization"
|
||||||
msgstr ""
|
msgstr "Organización"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:49
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:49
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:75
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:75
|
||||||
msgid "Group leader"
|
msgid "Group leader"
|
||||||
msgstr ""
|
msgstr "Líder de grupo"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:60
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:60
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:82
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:82
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:139
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:139
|
||||||
msgid "(unknown)"
|
msgid "(unknown)"
|
||||||
msgstr ""
|
msgstr "(desconocido)"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:65
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:65
|
||||||
msgid "Remove from group"
|
msgid "Remove from group"
|
||||||
@@ -865,7 +892,7 @@ msgstr "Auditar Miembros"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:63
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:63
|
||||||
msgid "Copy Direct Join Link"
|
msgid "Copy Direct Join Link"
|
||||||
msgstr ""
|
msgstr "Copiar enlace directo"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:74
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:74
|
||||||
msgid "No groups to list."
|
msgid "No groups to list."
|
||||||
@@ -911,11 +938,11 @@ msgstr "Manejo de Grupos"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:24
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:24
|
||||||
msgid "Join Requests"
|
msgid "Join Requests"
|
||||||
msgstr ""
|
msgstr "Solicitudes de ingreso"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:35
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:35
|
||||||
msgid "Leave Requests"
|
msgid "Leave Requests"
|
||||||
msgstr ""
|
msgstr "Abandonar solicitudes"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:57
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:57
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:114
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:114
|
||||||
@@ -1001,6 +1028,8 @@ msgid ""
|
|||||||
"An unhandled error occurred while processing the application from "
|
"An unhandled error occurred while processing the application from "
|
||||||
"%(mainchar)s to leave %(group)s."
|
"%(mainchar)s to leave %(group)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Se ha producido un error al procesar la solicitud de %(mainchar)s para "
|
||||||
|
"abandonar %(group)s."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:292
|
#: allianceauth/groupmanagement/views.py:292
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -1015,11 +1044,11 @@ msgstr "No puedes unirte a ese grupo"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:341
|
#: allianceauth/groupmanagement/views.py:341
|
||||||
msgid "You are already a member of that group."
|
msgid "You are already a member of that group."
|
||||||
msgstr ""
|
msgstr "Ya eres miembro de ese grupo."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:358
|
#: allianceauth/groupmanagement/views.py:358
|
||||||
msgid "You already have a pending application for that group."
|
msgid "You already have a pending application for that group."
|
||||||
msgstr ""
|
msgstr "Ya tiene una solicitud pendiente para ese grupo."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:367
|
#: allianceauth/groupmanagement/views.py:367
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -1036,7 +1065,7 @@ msgstr "No eres miembro de ese grupo"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:393
|
#: allianceauth/groupmanagement/views.py:393
|
||||||
msgid "You already have a pending leave request for that group."
|
msgid "You already have a pending leave request for that group."
|
||||||
msgstr ""
|
msgstr "Ya tiene una solicitud de baja pendiente para ese grupo."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/views.py:409
|
#: allianceauth/groupmanagement/views.py:409
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -1220,19 +1249,19 @@ msgstr "Agregar comentario"
|
|||||||
|
|
||||||
#: allianceauth/notifications/models.py:21
|
#: allianceauth/notifications/models.py:21
|
||||||
msgid "danger"
|
msgid "danger"
|
||||||
msgstr ""
|
msgstr "peligro"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:22
|
#: allianceauth/notifications/models.py:22
|
||||||
msgid "warning"
|
msgid "warning"
|
||||||
msgstr ""
|
msgstr "advertencia"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:23
|
#: allianceauth/notifications/models.py:23
|
||||||
msgid "info"
|
msgid "info"
|
||||||
msgstr ""
|
msgstr "info"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:24
|
#: allianceauth/notifications/models.py:24
|
||||||
msgid "success"
|
msgid "success"
|
||||||
msgstr ""
|
msgstr "éxito"
|
||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/list.html:4
|
#: allianceauth/notifications/templates/notifications/list.html:4
|
||||||
#: allianceauth/notifications/templates/notifications/list.html:7
|
#: allianceauth/notifications/templates/notifications/list.html:7
|
||||||
@@ -1266,7 +1295,7 @@ msgstr "Titulo"
|
|||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/list_partial.html:28
|
#: allianceauth/notifications/templates/notifications/list_partial.html:28
|
||||||
msgid "No notifications."
|
msgid "No notifications."
|
||||||
msgstr ""
|
msgstr "No hay notificaciones."
|
||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/view.html:4
|
#: allianceauth/notifications/templates/notifications/view.html:4
|
||||||
#: allianceauth/notifications/templates/notifications/view.html:8
|
#: allianceauth/notifications/templates/notifications/view.html:8
|
||||||
@@ -1314,7 +1343,7 @@ msgstr "Nombre de la operacion"
|
|||||||
|
|
||||||
#: allianceauth/optimer/form.py:16
|
#: allianceauth/optimer/form.py:16
|
||||||
msgid "Operation Type"
|
msgid "Operation Type"
|
||||||
msgstr ""
|
msgstr "Tipo de operación"
|
||||||
|
|
||||||
#: allianceauth/optimer/form.py:17
|
#: allianceauth/optimer/form.py:17
|
||||||
#: allianceauth/srp/templates/srp/management.html:38
|
#: allianceauth/srp/templates/srp/management.html:38
|
||||||
@@ -1328,7 +1357,7 @@ msgstr "Informacion Adicional"
|
|||||||
|
|
||||||
#: allianceauth/optimer/form.py:23
|
#: allianceauth/optimer/form.py:23
|
||||||
msgid "(Optional) Describe the operation with a couple of short words."
|
msgid "(Optional) Describe the operation with a couple of short words."
|
||||||
msgstr ""
|
msgstr "(Opcional) Describa la operación con un par de palabras breves."
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/add.html:6
|
#: allianceauth/optimer/templates/optimer/add.html:6
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:13
|
#: allianceauth/optimer/templates/optimer/management.html:13
|
||||||
@@ -1365,7 +1394,7 @@ msgstr "Tipo en EVE actual:"
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:26
|
#: allianceauth/optimer/templates/optimer/management.html:26
|
||||||
msgid "Next Fleet Operations"
|
msgid "Next Fleet Operations"
|
||||||
msgstr ""
|
msgstr "Próximas operaciones de flota"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:30
|
#: allianceauth/optimer/templates/optimer/management.html:30
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
||||||
@@ -1374,7 +1403,7 @@ msgstr "No hay proximos timers."
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:33
|
#: allianceauth/optimer/templates/optimer/management.html:33
|
||||||
msgid "Past Fleet Operations"
|
msgid "Past Fleet Operations"
|
||||||
msgstr ""
|
msgstr "Operaciones de flota pasadas"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:37
|
#: allianceauth/optimer/templates/optimer/management.html:37
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
||||||
@@ -1413,7 +1442,7 @@ msgstr "Auditar Permisos"
|
|||||||
|
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:20
|
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:20
|
||||||
msgid "User / Character"
|
msgid "User / Character"
|
||||||
msgstr ""
|
msgstr "Usuario / Personaje"
|
||||||
|
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:4
|
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:4
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:8
|
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:8
|
||||||
@@ -1458,16 +1487,16 @@ msgstr "Estados"
|
|||||||
|
|
||||||
#: allianceauth/services/abstract.py:72
|
#: allianceauth/services/abstract.py:72
|
||||||
msgid "That service account already exists"
|
msgid "That service account already exists"
|
||||||
msgstr ""
|
msgstr "Esa cuenta de servicio ya existe"
|
||||||
|
|
||||||
#: allianceauth/services/abstract.py:103
|
#: allianceauth/services/abstract.py:103
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Successfully set your {self.service_name} password"
|
msgid "Successfully set your {self.service_name} password"
|
||||||
msgstr ""
|
msgstr "Ha establecido correctamente su contraseña {self.service_name}."
|
||||||
|
|
||||||
#: allianceauth/services/auth_hooks.py:12
|
#: allianceauth/services/auth_hooks.py:12
|
||||||
msgid "Services"
|
msgid "Services"
|
||||||
msgstr ""
|
msgstr "Servicios"
|
||||||
|
|
||||||
#: allianceauth/services/forms.py:6
|
#: allianceauth/services/forms.py:6
|
||||||
msgid "Name of Fleet:"
|
msgid "Name of Fleet:"
|
||||||
@@ -1531,29 +1560,31 @@ msgstr "La contraseña tiene que tener 8 caracteres de largo minimo"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/discord/models.py:187
|
#: allianceauth/services/modules/discord/models.py:187
|
||||||
msgid "Discord Account Disabled"
|
msgid "Discord Account Disabled"
|
||||||
msgstr ""
|
msgstr "Cuenta de Discord desactivada"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/models.py:189
|
#: allianceauth/services/modules/discord/models.py:189
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your Discord account was disabled automatically by Auth. If you think this "
|
"Your Discord account was disabled automatically by Auth. If you think this "
|
||||||
"was a mistake, please contact an admin."
|
"was a mistake, please contact an admin."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Tu cuenta de Discord ha sido desactivada automáticamente por Auth. Si crees "
|
||||||
|
"que se trata de un error, ponte en contacto con un administrador."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:5
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:5
|
||||||
msgid "Discord"
|
msgid "Discord"
|
||||||
msgstr ""
|
msgstr "Discord"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:18
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:18
|
||||||
msgid "Join the Discord server"
|
msgid "Join the Discord server"
|
||||||
msgstr ""
|
msgstr "Unirse al servidor Discord"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:22
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:22
|
||||||
msgid "Leave- and rejoin the Discord Server (Reset)"
|
msgid "Leave- and rejoin the Discord Server (Reset)"
|
||||||
msgstr ""
|
msgstr "Salir y volver al servidor Discord (Reiniciar)"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:25
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:25
|
||||||
msgid "Leave the Discord server"
|
msgid "Leave the Discord server"
|
||||||
msgstr ""
|
msgstr "Abandonar el servidor de Discord"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:32
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:32
|
||||||
msgid "Link Discord Server"
|
msgid "Link Discord Server"
|
||||||
@@ -1561,68 +1592,74 @@ msgstr "Enlace a servidor de Discord"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/discord/views.py:30
|
#: allianceauth/services/modules/discord/views.py:30
|
||||||
msgid "Deactivated Discord account."
|
msgid "Deactivated Discord account."
|
||||||
msgstr ""
|
msgstr "Cuenta de Discord desactivada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/views.py:36
|
#: allianceauth/services/modules/discord/views.py:36
|
||||||
#: allianceauth/services/modules/discord/views.py:59
|
#: allianceauth/services/modules/discord/views.py:59
|
||||||
msgid "An error occurred while processing your Discord account."
|
msgid "An error occurred while processing your Discord account."
|
||||||
msgstr ""
|
msgstr "Se ha producido un error al procesar tu cuenta de Discord."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/views.py:102
|
#: allianceauth/services/modules/discord/views.py:102
|
||||||
msgid "Your Discord account has been successfully activated."
|
msgid "Your Discord account has been successfully activated."
|
||||||
msgstr ""
|
msgstr "Tu cuenta de Discord se ha activado correctamente."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/views.py:108
|
#: allianceauth/services/modules/discord/views.py:108
|
||||||
msgid ""
|
msgid ""
|
||||||
"An error occurred while trying to activate your Discord account. Please try "
|
"An error occurred while trying to activate your Discord account. Please try "
|
||||||
"again."
|
"again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Se ha producido un error al intentar activar tu cuenta de Discord. Inténtalo"
|
||||||
|
" de nuevo."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discourse/views.py:29
|
#: allianceauth/services/modules/discourse/views.py:29
|
||||||
msgid "You are not authorized to access Discourse."
|
msgid "You are not authorized to access Discourse."
|
||||||
msgstr ""
|
msgstr "No estás autorizado a acceder a Discourse."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discourse/views.py:34
|
#: allianceauth/services/modules/discourse/views.py:34
|
||||||
msgid "You must have a main character set to access Discourse."
|
msgid "You must have a main character set to access Discourse."
|
||||||
msgstr ""
|
msgstr "Para acceder a Discourse es necesario tener un personaje principal."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discourse/views.py:44
|
#: allianceauth/services/modules/discourse/views.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"No SSO payload or signature. Please contact support if this problem "
|
"No SSO payload or signature. Please contact support if this problem "
|
||||||
"persists."
|
"persists."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"No existe contenido ni firma SSO. Póngase en contacto con el servicio de "
|
||||||
|
"asistencia si este problema persiste."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discourse/views.py:54
|
#: allianceauth/services/modules/discourse/views.py:54
|
||||||
#: allianceauth/services/modules/discourse/views.py:62
|
#: allianceauth/services/modules/discourse/views.py:62
|
||||||
msgid "Invalid payload. Please contact support if this problem persists."
|
msgid "Invalid payload. Please contact support if this problem persists."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Contenido no válido. Póngase en contacto con el servicio de asistencia si "
|
||||||
|
"este problema persiste."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:31
|
#: allianceauth/services/modules/ips4/views.py:31
|
||||||
msgid "Activated IPSuite4 account."
|
msgid "Activated IPSuite4 account."
|
||||||
msgstr ""
|
msgstr "Cuenta IPSuite4 activada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:39
|
#: allianceauth/services/modules/ips4/views.py:39
|
||||||
#: allianceauth/services/modules/ips4/views.py:60
|
#: allianceauth/services/modules/ips4/views.py:60
|
||||||
#: allianceauth/services/modules/ips4/views.py:81
|
#: allianceauth/services/modules/ips4/views.py:81
|
||||||
#: allianceauth/services/modules/ips4/views.py:101
|
#: allianceauth/services/modules/ips4/views.py:101
|
||||||
msgid "An error occurred while processing your IPSuite4 account."
|
msgid "An error occurred while processing your IPSuite4 account."
|
||||||
msgstr ""
|
msgstr "Se ha producido un error al procesar su cuenta IPSuite4."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:52
|
#: allianceauth/services/modules/ips4/views.py:52
|
||||||
msgid "Reset IPSuite4 password."
|
msgid "Reset IPSuite4 password."
|
||||||
msgstr ""
|
msgstr "Restablecer la contraseña de IPSuite4."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:78
|
#: allianceauth/services/modules/ips4/views.py:78
|
||||||
msgid "Set IPSuite4 password."
|
msgid "Set IPSuite4 password."
|
||||||
msgstr ""
|
msgstr "Establecer contraseña de IPSuite4."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:98
|
#: allianceauth/services/modules/ips4/views.py:98
|
||||||
msgid "Deactivated IPSuite4 account."
|
msgid "Deactivated IPSuite4 account."
|
||||||
msgstr ""
|
msgstr "Cuenta IPSuite4 desactivada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/auth_hooks.py:26
|
#: allianceauth/services/modules/openfire/auth_hooks.py:26
|
||||||
msgid "Jabber"
|
msgid "Jabber"
|
||||||
msgstr ""
|
msgstr "Jabber"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/auth_hooks.py:79
|
#: allianceauth/services/modules/openfire/auth_hooks.py:79
|
||||||
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:5
|
#: allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html:5
|
||||||
@@ -1632,7 +1669,7 @@ msgstr "Anuncio por Jabber"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/openfire/auth_hooks.py:94
|
#: allianceauth/services/modules/openfire/auth_hooks.py:94
|
||||||
msgid "Fleet Broadcast Formatter"
|
msgid "Fleet Broadcast Formatter"
|
||||||
msgstr ""
|
msgstr "Formateador de difusión de flota"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/forms.py:7
|
#: allianceauth/services/modules/openfire/forms.py:7
|
||||||
msgid "Message"
|
msgid "Message"
|
||||||
@@ -1648,73 +1685,73 @@ msgstr "Anuncio"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/openfire/views.py:35
|
#: allianceauth/services/modules/openfire/views.py:35
|
||||||
msgid "Activated jabber account."
|
msgid "Activated jabber account."
|
||||||
msgstr ""
|
msgstr "Cuenta jabber activada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/views.py:43
|
#: allianceauth/services/modules/openfire/views.py:43
|
||||||
#: allianceauth/services/modules/openfire/views.py:56
|
#: allianceauth/services/modules/openfire/views.py:56
|
||||||
#: allianceauth/services/modules/openfire/views.py:76
|
#: allianceauth/services/modules/openfire/views.py:76
|
||||||
#: allianceauth/services/modules/openfire/views.py:147
|
#: allianceauth/services/modules/openfire/views.py:147
|
||||||
msgid "An error occurred while processing your jabber account."
|
msgid "An error occurred while processing your jabber account."
|
||||||
msgstr ""
|
msgstr "Se ha producido un error al procesar su cuenta jabber."
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/views.py:69
|
#: allianceauth/services/modules/openfire/views.py:69
|
||||||
msgid "Reset jabber password."
|
msgid "Reset jabber password."
|
||||||
msgstr ""
|
msgstr "Restablecer contraseña jabber."
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/views.py:115
|
#: allianceauth/services/modules/openfire/views.py:115
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Sent jabber broadcast to %s"
|
msgid "Sent jabber broadcast to %s"
|
||||||
msgstr ""
|
msgstr "Enviar difusión jabber a %s"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/views.py:144
|
#: allianceauth/services/modules/openfire/views.py:144
|
||||||
msgid "Set jabber password."
|
msgid "Set jabber password."
|
||||||
msgstr ""
|
msgstr "Establecer contraseña jabber."
|
||||||
|
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:34
|
#: allianceauth/services/modules/phpbb3/views.py:34
|
||||||
msgid "Activated forum account."
|
msgid "Activated forum account."
|
||||||
msgstr ""
|
msgstr "Cuenta del foro activada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:42
|
#: allianceauth/services/modules/phpbb3/views.py:42
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:56
|
#: allianceauth/services/modules/phpbb3/views.py:56
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:78
|
#: allianceauth/services/modules/phpbb3/views.py:78
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:101
|
#: allianceauth/services/modules/phpbb3/views.py:101
|
||||||
msgid "An error occurred while processing your forum account."
|
msgid "An error occurred while processing your forum account."
|
||||||
msgstr ""
|
msgstr "Se ha producido un error al procesar su cuenta del foro."
|
||||||
|
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:53
|
#: allianceauth/services/modules/phpbb3/views.py:53
|
||||||
msgid "Deactivated forum account."
|
msgid "Deactivated forum account."
|
||||||
msgstr ""
|
msgstr "Cuenta del foro desactivada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:70
|
#: allianceauth/services/modules/phpbb3/views.py:70
|
||||||
msgid "Reset forum password."
|
msgid "Reset forum password."
|
||||||
msgstr ""
|
msgstr "Restablecer contraseña del foro."
|
||||||
|
|
||||||
#: allianceauth/services/modules/phpbb3/views.py:98
|
#: allianceauth/services/modules/phpbb3/views.py:98
|
||||||
msgid "Set forum password."
|
msgid "Set forum password."
|
||||||
msgstr ""
|
msgstr "Establecer contraseña del foro."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:52
|
#: allianceauth/services/modules/smf/views.py:52
|
||||||
msgid "Activated SMF account."
|
msgid "Activated SMF account."
|
||||||
msgstr ""
|
msgstr "Cuenta SMF activada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:65
|
#: allianceauth/services/modules/smf/views.py:65
|
||||||
#: allianceauth/services/modules/smf/views.py:81
|
#: allianceauth/services/modules/smf/views.py:81
|
||||||
#: allianceauth/services/modules/smf/views.py:102
|
#: allianceauth/services/modules/smf/views.py:102
|
||||||
#: allianceauth/services/modules/smf/views.py:124
|
#: allianceauth/services/modules/smf/views.py:124
|
||||||
msgid "An error occurred while processing your SMF account."
|
msgid "An error occurred while processing your SMF account."
|
||||||
msgstr ""
|
msgstr "Se ha producido un error al procesar tu cuenta SMF."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:78
|
#: allianceauth/services/modules/smf/views.py:78
|
||||||
msgid "Deactivated SMF account."
|
msgid "Deactivated SMF account."
|
||||||
msgstr ""
|
msgstr "Cuenta SMF desactivada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:95
|
#: allianceauth/services/modules/smf/views.py:95
|
||||||
msgid "Reset SMF password."
|
msgid "Reset SMF password."
|
||||||
msgstr ""
|
msgstr "Restablecer contraseña de SMF."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:121
|
#: allianceauth/services/modules/smf/views.py:121
|
||||||
msgid "Set SMF password."
|
msgid "Set SMF password."
|
||||||
msgstr ""
|
msgstr "Establecer contraseña de SMF."
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/forms.py:14
|
#: allianceauth/services/modules/teamspeak3/forms.py:14
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -1723,7 +1760,7 @@ msgstr "No fue posible localizar tu usuario %s en el servidor"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/templates/admin/teamspeak3/authts/change_list.html:8
|
#: allianceauth/services/modules/teamspeak3/templates/admin/teamspeak3/authts/change_list.html:8
|
||||||
msgid "Update TS3 groups"
|
msgid "Update TS3 groups"
|
||||||
msgstr ""
|
msgstr "Actualizar los grupos de TS3"
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:5
|
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:5
|
||||||
msgid "Verify Teamspeak"
|
msgid "Verify Teamspeak"
|
||||||
@@ -1745,44 +1782,44 @@ msgstr "Continuar"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/views.py:35
|
#: allianceauth/services/modules/teamspeak3/views.py:35
|
||||||
msgid "Activated TeamSpeak3 account."
|
msgid "Activated TeamSpeak3 account."
|
||||||
msgstr ""
|
msgstr "Cuenta de TeamSpeak3 activada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/views.py:38
|
#: allianceauth/services/modules/teamspeak3/views.py:38
|
||||||
#: allianceauth/services/modules/teamspeak3/views.py:74
|
#: allianceauth/services/modules/teamspeak3/views.py:74
|
||||||
#: allianceauth/services/modules/teamspeak3/views.py:100
|
#: allianceauth/services/modules/teamspeak3/views.py:100
|
||||||
msgid "An error occurred while processing your TeamSpeak3 account."
|
msgid "An error occurred while processing your TeamSpeak3 account."
|
||||||
msgstr ""
|
msgstr "Se ha producido un error al procesar tu cuenta de TeamSpeak3."
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/views.py:71
|
#: allianceauth/services/modules/teamspeak3/views.py:71
|
||||||
msgid "Deactivated TeamSpeak3 account."
|
msgid "Deactivated TeamSpeak3 account."
|
||||||
msgstr ""
|
msgstr "Cuenta de TeamSpeak3 desactivada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/views.py:97
|
#: allianceauth/services/modules/teamspeak3/views.py:97
|
||||||
msgid "Reset TeamSpeak3 permission key."
|
msgid "Reset TeamSpeak3 permission key."
|
||||||
msgstr ""
|
msgstr "Restablecer la clave de permiso de TeamSpeak3."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:30
|
#: allianceauth/services/modules/xenforo/views.py:30
|
||||||
msgid "Activated XenForo account."
|
msgid "Activated XenForo account."
|
||||||
msgstr ""
|
msgstr "Cuenta de XenForo activada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:40
|
#: allianceauth/services/modules/xenforo/views.py:40
|
||||||
#: allianceauth/services/modules/xenforo/views.py:52
|
#: allianceauth/services/modules/xenforo/views.py:52
|
||||||
#: allianceauth/services/modules/xenforo/views.py:73
|
#: allianceauth/services/modules/xenforo/views.py:73
|
||||||
#: allianceauth/services/modules/xenforo/views.py:94
|
#: allianceauth/services/modules/xenforo/views.py:94
|
||||||
msgid "An error occurred while processing your XenForo account."
|
msgid "An error occurred while processing your XenForo account."
|
||||||
msgstr ""
|
msgstr "Se ha producido un error al procesar tu cuenta de XenForo."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:50
|
#: allianceauth/services/modules/xenforo/views.py:50
|
||||||
msgid "Deactivated XenForo account."
|
msgid "Deactivated XenForo account."
|
||||||
msgstr ""
|
msgstr "Cuenta de XenForo desactivada."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:65
|
#: allianceauth/services/modules/xenforo/views.py:65
|
||||||
msgid "Reset XenForo account password."
|
msgid "Reset XenForo account password."
|
||||||
msgstr ""
|
msgstr "Restablecer la contraseña de la cuenta de XenForo."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:91
|
#: allianceauth/services/modules/xenforo/views.py:91
|
||||||
msgid "Changed XenForo password."
|
msgid "Changed XenForo password."
|
||||||
msgstr ""
|
msgstr "Contraseña de XenForo cambiada."
|
||||||
|
|
||||||
#: allianceauth/services/templates/services/fleetformattertool.html:5
|
#: allianceauth/services/templates/services/fleetformattertool.html:5
|
||||||
msgid "Fleet Formatter Tool"
|
msgid "Fleet Formatter Tool"
|
||||||
@@ -1807,6 +1844,8 @@ msgstr "Eliminar tu cuenta en %(service_name)s ?"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Are you sure you want to delete your %(service_name)s account %(object)s?"
|
"Are you sure you want to delete your %(service_name)s account %(object)s?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"¿Estás seguro de que quieres eliminar tu cuenta de %(service_name)s "
|
||||||
|
"%(object)s?"
|
||||||
|
|
||||||
#: allianceauth/services/templates/services/service_credentials.html:4
|
#: allianceauth/services/templates/services/service_credentials.html:4
|
||||||
#: allianceauth/services/templates/services/service_credentials.html:8
|
#: allianceauth/services/templates/services/service_credentials.html:8
|
||||||
@@ -1860,15 +1899,16 @@ msgstr "Doctrina"
|
|||||||
|
|
||||||
#: allianceauth/srp/form.py:16
|
#: allianceauth/srp/form.py:16
|
||||||
msgid "Killboard Link (zkillboard.com or kb.evetools.org)"
|
msgid "Killboard Link (zkillboard.com or kb.evetools.org)"
|
||||||
msgstr ""
|
msgstr "Enlace Killboard (zkillboard.com o kb.evetools.org)"
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:34
|
#: allianceauth/srp/form.py:34
|
||||||
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
||||||
msgstr ""
|
msgstr "Enlace no válido. Por favor, utilice zkillboard.com o kb.evetools.org"
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:46
|
#: allianceauth/srp/form.py:46
|
||||||
msgid "Invalid Link. Please post a direct link to a killmail."
|
msgid "Invalid Link. Please post a direct link to a killmail."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Enlace no válido. Por favor, proporcione un enlace directo a un killmail."
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:53
|
#: allianceauth/srp/form.py:53
|
||||||
msgid "After Action Report Link"
|
msgid "After Action Report Link"
|
||||||
@@ -1889,7 +1929,7 @@ msgstr "Entregar este enlace a los miembros"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:5
|
#: allianceauth/srp/templates/srp/data.html:5
|
||||||
msgid "Srp Fleet Data"
|
msgid "Srp Fleet Data"
|
||||||
msgstr ""
|
msgstr "Informacion de SRP de la flota"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:50
|
#: allianceauth/srp/templates/srp/data.html:50
|
||||||
msgid "SRP Fleet Data"
|
msgid "SRP Fleet Data"
|
||||||
@@ -1942,6 +1982,8 @@ msgstr "Costo del SRP"
|
|||||||
#: allianceauth/srp/templates/srp/data.html:95
|
#: allianceauth/srp/templates/srp/data.html:95
|
||||||
msgid "Click value to edit Enter to save & next ESC to cancel"
|
msgid "Click value to edit Enter to save & next ESC to cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Haz clic en el valor para editar. Presiona Enter para guardar y continuar, o"
|
||||||
|
" ESC para cancelar"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:98
|
#: allianceauth/srp/templates/srp/data.html:98
|
||||||
msgid "Post Time"
|
msgid "Post Time"
|
||||||
@@ -2063,7 +2105,7 @@ msgstr "Imposible localizar el SRP con el codigo %(srpfleetid)s"
|
|||||||
|
|
||||||
#: allianceauth/srp/views.py:179
|
#: allianceauth/srp/views.py:179
|
||||||
msgid "This kill mail has already been posted."
|
msgid "This kill mail has already been posted."
|
||||||
msgstr ""
|
msgstr "Este correo mortal ya ha sido publicado."
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:200
|
#: allianceauth/srp/views.py:200
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -2132,11 +2174,11 @@ msgstr "Cerrado"
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:28
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:28
|
||||||
msgid "Powered by GitLab"
|
msgid "Powered by GitLab"
|
||||||
msgstr ""
|
msgstr "Desarrollado por GitLab"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
|
||||||
msgid "Support Discord"
|
msgid "Support Discord"
|
||||||
msgstr ""
|
msgstr "Soporte Discord"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:43
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:43
|
||||||
msgid "Software Version"
|
msgid "Software Version"
|
||||||
@@ -2148,7 +2190,7 @@ msgstr "Actual"
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||||
msgid "Latest Stable"
|
msgid "Latest Stable"
|
||||||
msgstr ""
|
msgstr "Último Estable"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:59
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:59
|
||||||
msgid "Update available"
|
msgid "Update available"
|
||||||
@@ -2156,11 +2198,11 @@ msgstr "Actualizacion Disponible"
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:64
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:64
|
||||||
msgid "Latest Pre-Release"
|
msgid "Latest Pre-Release"
|
||||||
msgstr ""
|
msgstr "Último Pre-Lanzamiento"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:70
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:70
|
||||||
msgid "Pre-Release available"
|
msgid "Pre-Release available"
|
||||||
msgstr ""
|
msgstr "Pre-Lanzamiento disponible"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:78
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:78
|
||||||
msgid "Task Queue"
|
msgid "Task Queue"
|
||||||
@@ -2173,6 +2215,8 @@ msgid ""
|
|||||||
" Status of %(total)s processed tasks • last %(latest)s\n"
|
" Status of %(total)s processed tasks • last %(latest)s\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Estado de %(total)s tareas procesadas • últimos %(latest)s"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -2181,6 +2225,8 @@ msgid ""
|
|||||||
" %(queue_length)s queued tasks\n"
|
" %(queue_length)s queued tasks\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"%(queue_length)s tareas en cola"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
||||||
msgid "Admin"
|
msgid "Admin"
|
||||||
@@ -2188,16 +2234,16 @@ msgstr "Administrador"
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
||||||
msgid "AA Documentation"
|
msgid "AA Documentation"
|
||||||
msgstr ""
|
msgstr "Documentación AA"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:26
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:26
|
||||||
msgid "AA Support Discord"
|
msgid "AA Support Discord"
|
||||||
msgstr ""
|
msgstr "Soporte Discord AA"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:10
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:10
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:14
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:14
|
||||||
msgid "User Menu"
|
msgid "User Menu"
|
||||||
msgstr ""
|
msgstr "Menú de usuario"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:56
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:56
|
||||||
msgid "Logout"
|
msgid "Logout"
|
||||||
@@ -2245,7 +2291,7 @@ msgstr "Tipo de Estructura"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/form.py:62
|
#: allianceauth/timerboard/form.py:62
|
||||||
msgid "Timer Type"
|
msgid "Timer Type"
|
||||||
msgstr ""
|
msgstr "Tipo de temporizador"
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:63
|
#: allianceauth/timerboard/form.py:63
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:32
|
#: allianceauth/timerboard/templates/timerboard/view.html:32
|
||||||
@@ -2276,15 +2322,15 @@ msgstr "Restringido a Corp"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:14
|
#: allianceauth/timerboard/models.py:14
|
||||||
msgid "Not Specified"
|
msgid "Not Specified"
|
||||||
msgstr ""
|
msgstr "Sin especificación"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:15
|
#: allianceauth/timerboard/models.py:15
|
||||||
msgid "Shield"
|
msgid "Shield"
|
||||||
msgstr ""
|
msgstr "Escudo"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:16
|
#: allianceauth/timerboard/models.py:16
|
||||||
msgid "Armor"
|
msgid "Armor"
|
||||||
msgstr ""
|
msgstr "Armadura"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:17
|
#: allianceauth/timerboard/models.py:17
|
||||||
msgid "Hull"
|
msgid "Hull"
|
||||||
@@ -2292,15 +2338,15 @@ msgstr "Tipo"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:18
|
#: allianceauth/timerboard/models.py:18
|
||||||
msgid "Final"
|
msgid "Final"
|
||||||
msgstr ""
|
msgstr "Final"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:19
|
#: allianceauth/timerboard/models.py:19
|
||||||
msgid "Anchoring"
|
msgid "Anchoring"
|
||||||
msgstr ""
|
msgstr "Anclando"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:20
|
#: allianceauth/timerboard/models.py:20
|
||||||
msgid "Unanchoring"
|
msgid "Unanchoring"
|
||||||
msgstr ""
|
msgstr "Desanclando"
|
||||||
|
|
||||||
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
||||||
msgid "Delete Timer"
|
msgid "Delete Timer"
|
||||||
|
|||||||
Binary file not shown.
@@ -4,22 +4,24 @@
|
|||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# François LACROIX-DURANT <umbre@fallenstarscreations.com>, 2020
|
# Keven D. <theenarki@gmail.com>, 2023
|
||||||
# Philippe Querin-Laporte <philippe.querin@hotmail.com>, 2020
|
# rockclodbuster, 2023
|
||||||
# Keven D. <theenarki@gmail.com>, 2020
|
# Geoffrey Fabbro, 2023
|
||||||
# Idea ., 2021
|
# Mohssine Daghghar, 2023
|
||||||
# Mickael PATTE, 2021
|
# François LACROIX-DURANT <umbre@fallenstarscreations.com>, 2023
|
||||||
# Geoffrey Fabbro, 2021
|
# Mickael PATTE, 2023
|
||||||
|
# Philippe Querin-Laporte <philippe.querin@hotmail.com>, 2023
|
||||||
|
# Idea ., 2023
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-09-14 23:17+1000\n"
|
"POT-Creation-Date: 2022-10-09 18:20+1000\n"
|
||||||
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
"PO-Revision-Date: 2023-10-08 09:23+0000\n"
|
||||||
"Last-Translator: Geoffrey Fabbro, 2021\n"
|
"Last-Translator: Idea ., 2023\n"
|
||||||
"Language-Team: French (France) (https://www.transifex.com/alliance-auth/teams/107430/fr_FR/)\n"
|
"Language-Team: French (France) (https://app.transifex.com/alliance-auth/teams/107430/fr_FR/)\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"
|
||||||
@@ -28,7 +30,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/analytics/models.py:29
|
#: allianceauth/analytics/models.py:29
|
||||||
msgid "Google Analytics Universal"
|
msgid "Google Analytics Universal"
|
||||||
msgstr ""
|
msgstr "Google Analytique Universelle"
|
||||||
|
|
||||||
#: allianceauth/analytics/models.py:30
|
#: allianceauth/analytics/models.py:30
|
||||||
msgid "Google Analytics V4"
|
msgid "Google Analytics V4"
|
||||||
@@ -48,55 +50,48 @@ msgstr "Email"
|
|||||||
#, python-format
|
#, python-format
|
||||||
msgid "You are not allowed to add or remove these restricted groups: %s"
|
msgid "You are not allowed to add or remove these restricted groups: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Vous n'avez pas l’autorisation d'ajouter ou d'enlever ces groupes "
|
||||||
|
"restreints: %s"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:89
|
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "Anglais"
|
msgstr "Anglais"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:90
|
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "Allemand"
|
msgstr "Allemand"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:91
|
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "Espagnol"
|
msgstr "Espagnol"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:83
|
#: allianceauth/authentication/models.py:83
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:92
|
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "Chinois simplifié"
|
msgstr "Chinois simplifié"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:84
|
#: allianceauth/authentication/models.py:84
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:93
|
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "Russe"
|
msgstr "Russe"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:85
|
#: allianceauth/authentication/models.py:85
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:94
|
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "Coréen"
|
msgstr "Coréen"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:86
|
#: allianceauth/authentication/models.py:86
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:95
|
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "Français"
|
msgstr "Français"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:87
|
#: allianceauth/authentication/models.py:87
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:96
|
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "Japonais"
|
msgstr "Japonais"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:88
|
#: allianceauth/authentication/models.py:88
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:97
|
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "Italien"
|
msgstr "Italien"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:91
|
#: allianceauth/authentication/models.py:91
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr ""
|
msgstr "Langue"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:96
|
#: allianceauth/authentication/models.py:96
|
||||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||||
@@ -179,19 +174,21 @@ msgstr "Connexion"
|
|||||||
|
|
||||||
#: allianceauth/authentication/templates/public/login.html:10
|
#: allianceauth/authentication/templates/public/login.html:10
|
||||||
msgid "Login with Eve SSO"
|
msgid "Login with Eve SSO"
|
||||||
msgstr ""
|
msgstr "Connexion avec Eve SSO"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/middle_box.html:24
|
#: allianceauth/authentication/templates/public/middle_box.html:24
|
||||||
msgid "For information on SSO, ESI and security read the CCP Dev Blog"
|
msgid "For information on SSO, ESI and security read the CCP Dev Blog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Pour de l'information sur le SSO, le ESI et la sécurité, lisez le blog de "
|
||||||
|
"développeur CCP"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/middle_box.html:26
|
#: allianceauth/authentication/templates/public/middle_box.html:26
|
||||||
msgid "Introducing ESI - A New API For Eve Online"
|
msgid "Introducing ESI - A New API For Eve Online"
|
||||||
msgstr ""
|
msgstr "Présentation d'ESI, une nouvelle API pour Eve Online."
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/middle_box.html:32
|
#: allianceauth/authentication/templates/public/middle_box.html:32
|
||||||
msgid "Manage ESI Applications"
|
msgid "Manage ESI Applications"
|
||||||
msgstr ""
|
msgstr "Gestion des Application ESI"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/register.html:6
|
#: allianceauth/authentication/templates/public/register.html:6
|
||||||
msgid "Registration"
|
msgid "Registration"
|
||||||
@@ -614,11 +611,11 @@ msgstr "Aucun lien FAT enregistré"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:218
|
#: allianceauth/fleetactivitytracking/views.py:218
|
||||||
msgid "Character does not exist"
|
msgid "Character does not exist"
|
||||||
msgstr ""
|
msgstr "Le personnage n'existe pas"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:221
|
#: allianceauth/fleetactivitytracking/views.py:221
|
||||||
msgid "User does not exist"
|
msgid "User does not exist"
|
||||||
msgstr ""
|
msgstr "L'utilisateur n'existe pas"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:299
|
#: allianceauth/fleetactivitytracking/views.py:299
|
||||||
msgid "Fleet participation registered."
|
msgid "Fleet participation registered."
|
||||||
@@ -634,6 +631,8 @@ msgid ""
|
|||||||
"Cannot register the fleet participation for {character.character_name}. The "
|
"Cannot register the fleet participation for {character.character_name}. The "
|
||||||
"character needs to be online."
|
"character needs to be online."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Impossible d'enregistrer la participation pour {character.character_name}. "
|
||||||
|
"Le personnage doit être en ligne."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/auth_hooks.py:17
|
#: allianceauth/groupmanagement/auth_hooks.py:17
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:13
|
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:13
|
||||||
@@ -642,15 +641,15 @@ msgstr "Gestion de groupe"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:15
|
#: allianceauth/groupmanagement/forms.py:15
|
||||||
msgid "This name has been reserved and can not be used for groups."
|
msgid "This name has been reserved and can not be used for groups."
|
||||||
msgstr ""
|
msgstr "Ce nom a été réserver et il ne peut être utilisé pour les groupes."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:25
|
#: allianceauth/groupmanagement/forms.py:25
|
||||||
msgid "(auto)"
|
msgid "(auto)"
|
||||||
msgstr ""
|
msgstr "(automatique)"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:34
|
#: allianceauth/groupmanagement/forms.py:34
|
||||||
msgid "There already exists a group with that name."
|
msgid "There already exists a group with that name."
|
||||||
msgstr ""
|
msgstr "Il existe déjà un groupe portant ce nom."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:105
|
#: allianceauth/groupmanagement/models.py:105
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -658,16 +657,25 @@ msgid ""
|
|||||||
"group.<br>Used for groups such as Members, Corp_*, Alliance_* "
|
"group.<br>Used for groups such as Members, Corp_*, Alliance_* "
|
||||||
"etc.<br><b>Overrides Hidden and Open options when selected.</b>"
|
"etc.<br><b>Overrides Hidden and Open options when selected.</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Groupe interne, les utilisateurs ne peuvent pas voir, rejoindre ou demander "
|
||||||
|
"de rejoindre ce groupe.<br> Utilisé pour les groupes comme, Membres, "
|
||||||
|
"Corporations _*, Alliance etc.<br><b> Annule les options masquer et exposer "
|
||||||
|
"quand sélectionner."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:113
|
#: allianceauth/groupmanagement/models.py:113
|
||||||
msgid "Group is hidden from users but can still join with the correct link."
|
msgid "Group is hidden from users but can still join with the correct link."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Le groupe est caché aux utilisateurs, mais ils peuvent toujours rejoindre "
|
||||||
|
"avec le bon lien."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:119
|
#: allianceauth/groupmanagement/models.py:119
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group is open and users will be automatically added upon request.<br>If the "
|
"Group is open and users will be automatically added upon request.<br>If the "
|
||||||
"group is not open users will need their request manually approved."
|
"group is not open users will need their request manually approved."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Le groupe est ouvert, et les utilisateurs seront automatiquement ajoutés sur"
|
||||||
|
" demande. <br> Si le groupe n’est pas ouvert, les utilisateurs auront besoin"
|
||||||
|
" que leurs demandes soit approuvées manuellement."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:126
|
#: allianceauth/groupmanagement/models.py:126
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -676,12 +684,18 @@ msgid ""
|
|||||||
"remove users from this group automatically when they are no longer "
|
"remove users from this group automatically when they are no longer "
|
||||||
"authenticated."
|
"authenticated."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Le groupe est public. Tout utilisateur enregistré peut rejoindre ce groupe, "
|
||||||
|
"avec une visibilité basée sur les autres options définies pour ce "
|
||||||
|
"groupe.<br> L' Auth ne supprimera pas automatiquement les utilisateurs de ce"
|
||||||
|
" groupe lorsqu’ils ne seront plus authentifiés."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:135
|
#: allianceauth/groupmanagement/models.py:135
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group is restricted. This means that adding or removing users for this group"
|
"Group is restricted. This means that adding or removing users for this group"
|
||||||
" requires a superuser admin."
|
" requires a superuser admin."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Le groupe est restreint. Cela signifie que l’ajout ou la suppression "
|
||||||
|
"d’utilisateurs pour ce groupe nécessite un administrateur superutilisateur."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:144
|
#: allianceauth/groupmanagement/models.py:144
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -707,38 +721,40 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Short description <i>(max. 512 characters)</i> of the group shown to users."
|
"Short description <i>(max. 512 characters)</i> of the group shown to users."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Brève description <i> (512 caractères maximum) </i> du groupe présenté aux "
|
||||||
|
"utilisateurs."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:178
|
#: allianceauth/groupmanagement/models.py:178
|
||||||
msgid "Can request non-public groups"
|
msgid "Can request non-public groups"
|
||||||
msgstr ""
|
msgstr "Peut demander des groupes non publics"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:209
|
#: allianceauth/groupmanagement/models.py:209
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr ""
|
msgstr "Nom"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:212
|
#: allianceauth/groupmanagement/models.py:212
|
||||||
msgid "Name that can not be used for groups."
|
msgid "Name that can not be used for groups."
|
||||||
msgstr ""
|
msgstr "Nom qui ne peut pas être utilisé pour les groupes."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:215
|
||||||
msgid "reason"
|
msgid "reason"
|
||||||
msgstr ""
|
msgstr "raison"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:215
|
||||||
msgid "Reason why this name is reserved."
|
msgid "Reason why this name is reserved."
|
||||||
msgstr ""
|
msgstr "Raison pour laquelle ce nom est réservé."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:218
|
#: allianceauth/groupmanagement/models.py:218
|
||||||
msgid "created by"
|
msgid "created by"
|
||||||
msgstr ""
|
msgstr "créé par"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:223
|
#: allianceauth/groupmanagement/models.py:223
|
||||||
msgid "created at"
|
msgid "created at"
|
||||||
msgstr ""
|
msgstr "créé à"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:223
|
#: allianceauth/groupmanagement/models.py:223
|
||||||
msgid "Date when this entry was created"
|
msgid "Date when this entry was created"
|
||||||
msgstr ""
|
msgstr "Date de création de cette entrée"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:4
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:4
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:13
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:13
|
||||||
@@ -868,7 +884,7 @@ msgstr "Voir les membres"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:59
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:59
|
||||||
msgid "Audit Members"
|
msgid "Audit Members"
|
||||||
msgstr ""
|
msgstr "Membres de l'audit"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:63
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:63
|
||||||
msgid "Copy Direct Join Link"
|
msgid "Copy Direct Join Link"
|
||||||
@@ -1274,7 +1290,7 @@ msgstr "Titre"
|
|||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/list_partial.html:28
|
#: allianceauth/notifications/templates/notifications/list_partial.html:28
|
||||||
msgid "No notifications."
|
msgid "No notifications."
|
||||||
msgstr ""
|
msgstr "Aucune notification."
|
||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/view.html:4
|
#: allianceauth/notifications/templates/notifications/view.html:4
|
||||||
#: allianceauth/notifications/templates/notifications/view.html:8
|
#: allianceauth/notifications/templates/notifications/view.html:8
|
||||||
@@ -1322,7 +1338,7 @@ msgstr "Nom de l'opération"
|
|||||||
|
|
||||||
#: allianceauth/optimer/form.py:16
|
#: allianceauth/optimer/form.py:16
|
||||||
msgid "Operation Type"
|
msgid "Operation Type"
|
||||||
msgstr ""
|
msgstr "Type d'opération"
|
||||||
|
|
||||||
#: allianceauth/optimer/form.py:17
|
#: allianceauth/optimer/form.py:17
|
||||||
#: allianceauth/srp/templates/srp/management.html:38
|
#: allianceauth/srp/templates/srp/management.html:38
|
||||||
@@ -1336,7 +1352,7 @@ msgstr "Information additionnelle"
|
|||||||
|
|
||||||
#: allianceauth/optimer/form.py:23
|
#: allianceauth/optimer/form.py:23
|
||||||
msgid "(Optional) Describe the operation with a couple of short words."
|
msgid "(Optional) Describe the operation with a couple of short words."
|
||||||
msgstr ""
|
msgstr "(Facultatif) Décrivez l'opération en quelques mots."
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/add.html:6
|
#: allianceauth/optimer/templates/optimer/add.html:6
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:13
|
#: allianceauth/optimer/templates/optimer/management.html:13
|
||||||
@@ -1373,7 +1389,7 @@ msgstr "Heure d'Eve actuelle:"
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:26
|
#: allianceauth/optimer/templates/optimer/management.html:26
|
||||||
msgid "Next Fleet Operations"
|
msgid "Next Fleet Operations"
|
||||||
msgstr ""
|
msgstr "Prochaines opérations de la flotte"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:30
|
#: allianceauth/optimer/templates/optimer/management.html:30
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
||||||
@@ -1382,7 +1398,7 @@ msgstr "Aucun minuteur à venir."
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:33
|
#: allianceauth/optimer/templates/optimer/management.html:33
|
||||||
msgid "Past Fleet Operations"
|
msgid "Past Fleet Operations"
|
||||||
msgstr ""
|
msgstr "Opérations passées de la flotte"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:37
|
#: allianceauth/optimer/templates/optimer/management.html:37
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
||||||
@@ -1830,7 +1846,7 @@ msgstr ""
|
|||||||
#: allianceauth/services/templates/services/service_credentials.html:8
|
#: allianceauth/services/templates/services/service_credentials.html:8
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(service_name)s Credentials"
|
msgid "%(service_name)s Credentials"
|
||||||
msgstr ""
|
msgstr "%(service_name)sInformations d'identification"
|
||||||
|
|
||||||
#: allianceauth/services/templates/services/service_password.html:5
|
#: allianceauth/services/templates/services/service_password.html:5
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -1890,7 +1906,7 @@ msgstr "Lien non valide. Veuillez poster un lien direct vers un Killmail."
|
|||||||
|
|
||||||
#: allianceauth/srp/form.py:53
|
#: allianceauth/srp/form.py:53
|
||||||
msgid "After Action Report Link"
|
msgid "After Action Report Link"
|
||||||
msgstr ""
|
msgstr "Lien vers le rapport après action"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/add.html:5
|
#: allianceauth/srp/templates/srp/add.html:5
|
||||||
msgid "SRP Fleet Create"
|
msgid "SRP Fleet Create"
|
||||||
@@ -1907,7 +1923,7 @@ msgstr "Donner ce lien aux membres de la flotte"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:5
|
#: allianceauth/srp/templates/srp/data.html:5
|
||||||
msgid "Srp Fleet Data"
|
msgid "Srp Fleet Data"
|
||||||
msgstr ""
|
msgstr "Données de flotte SRP"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:50
|
#: allianceauth/srp/templates/srp/data.html:50
|
||||||
msgid "SRP Fleet Data"
|
msgid "SRP Fleet Data"
|
||||||
@@ -1965,7 +1981,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:98
|
#: allianceauth/srp/templates/srp/data.html:98
|
||||||
msgid "Post Time"
|
msgid "Post Time"
|
||||||
msgstr ""
|
msgstr "Heure de publication"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:175
|
#: allianceauth/srp/templates/srp/data.html:175
|
||||||
msgid "No SRP requests for this fleet."
|
msgid "No SRP requests for this fleet."
|
||||||
@@ -2069,17 +2085,17 @@ msgstr "Flotte SRP %(fleetname)sActive."
|
|||||||
#: allianceauth/srp/views.py:140
|
#: allianceauth/srp/views.py:140
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Marked SRP fleet %(fleetname)s as completed."
|
msgid "Marked SRP fleet %(fleetname)s as completed."
|
||||||
msgstr ""
|
msgstr "Flotte SRP marquée %(fleetname)s comme terminée."
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:153
|
#: allianceauth/srp/views.py:153
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Marked SRP fleet %(fleetname)s as incomplete."
|
msgid "Marked SRP fleet %(fleetname)s as incomplete."
|
||||||
msgstr ""
|
msgstr "Flotte SRP %(fleetname)smarquée comme incomplète."
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:165
|
#: allianceauth/srp/views.py:165
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Unable to locate SRP code with ID %(srpfleetid)s"
|
msgid "Unable to locate SRP code with ID %(srpfleetid)s"
|
||||||
msgstr ""
|
msgstr "Impossible de localiser le code SRP avec l'ID %(srpfleetid)s"
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:179
|
#: allianceauth/srp/views.py:179
|
||||||
msgid "This kill mail has already been posted."
|
msgid "This kill mail has already been posted."
|
||||||
@@ -2096,7 +2112,7 @@ msgstr ""
|
|||||||
#: allianceauth/srp/views.py:212
|
#: allianceauth/srp/views.py:212
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Submitted SRP request for your %(ship)s."
|
msgid "Submitted SRP request for your %(ship)s."
|
||||||
msgstr ""
|
msgstr "Demande SRP soumise pour votre. %(ship)s"
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:216
|
#: allianceauth/srp/views.py:216
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -2104,6 +2120,8 @@ msgid ""
|
|||||||
"Character %(charid)s does not belong to your Auth account. Please add the "
|
"Character %(charid)s does not belong to your Auth account. Please add the "
|
||||||
"API key for this character and try again"
|
"API key for this character and try again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Le personnage%(charid)s n'appartient pas à votre compte Auth. Ajoutez la clé"
|
||||||
|
" API pour ce personnage et réessayez"
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:236 allianceauth/srp/views.py:262
|
#: allianceauth/srp/views.py:236 allianceauth/srp/views.py:262
|
||||||
#: allianceauth/srp/views.py:300
|
#: allianceauth/srp/views.py:300
|
||||||
@@ -2131,17 +2149,17 @@ msgstr "Impossible à trouver, veuillez sélectionner une autre requête SRP"
|
|||||||
#: allianceauth/srp/views.py:323
|
#: allianceauth/srp/views.py:323
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Rejected %(numrequests)s SRP requests."
|
msgid "Rejected %(numrequests)s SRP requests."
|
||||||
msgstr ""
|
msgstr "Requêtes %(numrequests)s SRP rejetées."
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:336
|
#: allianceauth/srp/views.py:336
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Unable to locate SRP request with ID %(requestid)s"
|
msgid "Unable to locate SRP request with ID %(requestid)s"
|
||||||
msgstr ""
|
msgstr "Impossible de localiser la demande SRP avec l'ID %(requestid)s"
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:360
|
#: allianceauth/srp/views.py:360
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Saved changes to SRP fleet %(fleetname)s"
|
msgid "Saved changes to SRP fleet %(fleetname)s"
|
||||||
msgstr ""
|
msgstr "Modifications enregistrées de la flotte SRP%(fleetname)s"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
|
||||||
msgid "Alliance Auth Notifications"
|
msgid "Alliance Auth Notifications"
|
||||||
@@ -2194,6 +2212,9 @@ msgid ""
|
|||||||
" Status of %(total)s processed tasks • last %(latest)s\n"
|
" Status of %(total)s processed tasks • last %(latest)s\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"État des tâches %(total)s traitées • dernier %(latest)s\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -2202,6 +2223,9 @@ msgid ""
|
|||||||
" %(queue_length)s queued tasks\n"
|
" %(queue_length)s queued tasks\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
" %(queue_length)stâches en file d'attente\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
||||||
msgid "Admin"
|
msgid "Admin"
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -4,23 +4,23 @@
|
|||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# None None <khd1226543@gmail.com>, 2020
|
# None None <khd1226543@gmail.com>, 2023
|
||||||
# Seowon Jung <seowon@hawaii.edu>, 2020
|
# Joel Falknau <ozirascal@gmail.com>, 2023
|
||||||
# Olgeda Choi <undead.choi@gmail.com>, 2020
|
# Seowon Jung <seowon@hawaii.edu>, 2023
|
||||||
# Lahty <js03js70@gmail.com>, 2020
|
# Olgeda Choi <undead.choi@gmail.com>, 2023
|
||||||
# Joel Falknau <ozirascal@gmail.com>, 2020
|
# ThatRagingKid, 2023
|
||||||
# ThatRagingKid, 2022
|
# Lahty <js03js70@gmail.com>, 2023
|
||||||
# jackfrost, 2022
|
# jackfrost, 2023
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-09-14 23:17+1000\n"
|
"POT-Creation-Date: 2022-10-09 18:20+1000\n"
|
||||||
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
"PO-Revision-Date: 2023-10-08 09:23+0000\n"
|
||||||
"Last-Translator: jackfrost, 2022\n"
|
"Last-Translator: jackfrost, 2023\n"
|
||||||
"Language-Team: Korean (Korea) (https://www.transifex.com/alliance-auth/teams/107430/ko_KR/)\n"
|
"Language-Team: Korean (Korea) (https://app.transifex.com/alliance-auth/teams/107430/ko_KR/)\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"
|
||||||
@@ -49,47 +49,38 @@ msgid "You are not allowed to add or remove these restricted groups: %s"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:89
|
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr "영어"
|
msgstr "영어"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:90
|
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "독일어"
|
msgstr "독일어"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:91
|
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr "스페인어"
|
msgstr "스페인어"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:83
|
#: allianceauth/authentication/models.py:83
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:92
|
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr "간체자"
|
msgstr "간체자"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:84
|
#: allianceauth/authentication/models.py:84
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:93
|
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr "러시아어"
|
msgstr "러시아어"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:85
|
#: allianceauth/authentication/models.py:85
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:94
|
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr "한국어"
|
msgstr "한국어"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:86
|
#: allianceauth/authentication/models.py:86
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:95
|
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr "프랑스어"
|
msgstr "프랑스어"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:87
|
#: allianceauth/authentication/models.py:87
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:96
|
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr "일본어"
|
msgstr "일본어"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:88
|
#: allianceauth/authentication/models.py:88
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:97
|
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr "이탈리아어"
|
msgstr "이탈리아어"
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -4,19 +4,20 @@
|
|||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Alexander Gess <de.alex.gess@gmail.com>, 2020
|
# Yuriy K <thedjcooltv@gmail.com>, 2023
|
||||||
# Yuriy K <thedjcooltv@gmail.com>, 2020
|
# Андрей Зубков <and.vareba81@gmail.com>, 2023
|
||||||
# Андрей Зубков <and.vareba81@gmail.com>, 2020
|
# Alexander Gess <de.alex.gess@gmail.com>, 2023
|
||||||
|
# Filipp Chertiev <f@fzfx.ru>, 2023
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-09-14 23:17+1000\n"
|
"POT-Creation-Date: 2022-10-09 18:20+1000\n"
|
||||||
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
"PO-Revision-Date: 2023-10-08 09:23+0000\n"
|
||||||
"Last-Translator: Андрей Зубков <and.vareba81@gmail.com>, 2020\n"
|
"Last-Translator: Filipp Chertiev <f@fzfx.ru>, 2023\n"
|
||||||
"Language-Team: Russian (https://www.transifex.com/alliance-auth/teams/107430/ru/)\n"
|
"Language-Team: Russian (https://app.transifex.com/alliance-auth/teams/107430/ru/)\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"
|
||||||
@@ -25,15 +26,16 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/analytics/models.py:29
|
#: allianceauth/analytics/models.py:29
|
||||||
msgid "Google Analytics Universal"
|
msgid "Google Analytics Universal"
|
||||||
msgstr ""
|
msgstr "Google Analytics Universal"
|
||||||
|
|
||||||
#: allianceauth/analytics/models.py:30
|
#: allianceauth/analytics/models.py:30
|
||||||
msgid "Google Analytics V4"
|
msgid "Google Analytics V4"
|
||||||
msgstr ""
|
msgstr "Google Analytics V4"
|
||||||
|
|
||||||
#: allianceauth/authentication/decorators.py:37
|
#: allianceauth/authentication/decorators.py:37
|
||||||
msgid "A main character is required to perform that action. Add one below."
|
msgid "A main character is required to perform that action. Add one below."
|
||||||
msgstr "Необходимо указать основного персонажа. Добавим?"
|
msgstr ""
|
||||||
|
"Для продолжения следует указать основного персонажа. Выберите его ниже."
|
||||||
|
|
||||||
#: allianceauth/authentication/forms.py:12
|
#: allianceauth/authentication/forms.py:12
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
@@ -42,61 +44,52 @@ msgstr "Email"
|
|||||||
#: allianceauth/authentication/forms.py:62
|
#: allianceauth/authentication/forms.py:62
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "You are not allowed to add or remove these restricted groups: %s"
|
msgid "You are not allowed to add or remove these restricted groups: %s"
|
||||||
msgstr ""
|
msgstr "Вам не разрешено добавлять или удалять эти ограниченные группы: %s"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:89
|
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr ""
|
msgstr "Английский"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:90
|
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr ""
|
msgstr "Немецкий"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:91
|
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr ""
|
msgstr "Испанский"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:83
|
#: allianceauth/authentication/models.py:83
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:92
|
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr ""
|
msgstr "Китайский упрощённый"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:84
|
#: allianceauth/authentication/models.py:84
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:93
|
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr ""
|
msgstr "Русский"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:85
|
#: allianceauth/authentication/models.py:85
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:94
|
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr "Корейский"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:86
|
#: allianceauth/authentication/models.py:86
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:95
|
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr ""
|
msgstr "Французский"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:87
|
#: allianceauth/authentication/models.py:87
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:96
|
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr ""
|
msgstr "Японский"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:88
|
#: allianceauth/authentication/models.py:88
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:97
|
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr ""
|
msgstr "Итальянский"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:91
|
#: allianceauth/authentication/models.py:91
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr ""
|
msgstr "Язык"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:96
|
#: allianceauth/authentication/models.py:96
|
||||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||||
msgid "Night Mode"
|
msgid "Night Mode"
|
||||||
msgstr ""
|
msgstr "Ночной режим"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:110
|
#: allianceauth/authentication/models.py:110
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -122,7 +115,7 @@ msgid ""
|
|||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
" Основной персонаж (статус: %(state)s)\n"
|
" Основной персонаж (статус: %(state)s)\n"
|
||||||
" "
|
" "
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard.html:101
|
#: allianceauth/authentication/templates/authentication/dashboard.html:101
|
||||||
@@ -175,23 +168,24 @@ msgstr "Вход"
|
|||||||
|
|
||||||
#: allianceauth/authentication/templates/public/login.html:10
|
#: allianceauth/authentication/templates/public/login.html:10
|
||||||
msgid "Login with Eve SSO"
|
msgid "Login with Eve SSO"
|
||||||
msgstr ""
|
msgstr "Зайти с помощью EVE SSO"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/middle_box.html:24
|
#: allianceauth/authentication/templates/public/middle_box.html:24
|
||||||
msgid "For information on SSO, ESI and security read the CCP Dev Blog"
|
msgid "For information on SSO, ESI and security read the CCP Dev Blog"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Информацию по SSO, ESI и вопросам безопасности читайте в блоге CCP Dev"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/middle_box.html:26
|
#: allianceauth/authentication/templates/public/middle_box.html:26
|
||||||
msgid "Introducing ESI - A New API For Eve Online"
|
msgid "Introducing ESI - A New API For Eve Online"
|
||||||
msgstr ""
|
msgstr "Введение в ESI — новое API для EVE Online"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/middle_box.html:32
|
#: allianceauth/authentication/templates/public/middle_box.html:32
|
||||||
msgid "Manage ESI Applications"
|
msgid "Manage ESI Applications"
|
||||||
msgstr ""
|
msgstr "Управление приложениями ESI"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/register.html:6
|
#: allianceauth/authentication/templates/public/register.html:6
|
||||||
msgid "Registration"
|
msgid "Registration"
|
||||||
msgstr ""
|
msgstr "Регистрация"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/public/register.html:21
|
#: allianceauth/authentication/templates/public/register.html:21
|
||||||
msgid "Register"
|
msgid "Register"
|
||||||
@@ -314,7 +308,7 @@ msgstr "Корпорация"
|
|||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:167
|
#: allianceauth/corputils/templates/corputils/corpstats.html:167
|
||||||
#: allianceauth/corputils/templates/corputils/search.html:27
|
#: allianceauth/corputils/templates/corputils/search.html:27
|
||||||
msgid "Killboard"
|
msgid "Killboard"
|
||||||
msgstr "zKillBoard"
|
msgstr "Killboard"
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:114
|
#: allianceauth/corputils/templates/corputils/corpstats.html:114
|
||||||
#: allianceauth/corputils/templates/corputils/search.html:16
|
#: allianceauth/corputils/templates/corputils/search.html:16
|
||||||
@@ -342,7 +336,7 @@ msgstr "Результаты поиска:"
|
|||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/search.html:15
|
#: allianceauth/corputils/templates/corputils/search.html:15
|
||||||
msgid "zKillboard"
|
msgid "zKillboard"
|
||||||
msgstr "zKillBoard"
|
msgstr "zKillboard"
|
||||||
|
|
||||||
#: allianceauth/corputils/views.py:54
|
#: allianceauth/corputils/views.py:54
|
||||||
msgid "Selected corp already has a statistics module."
|
msgid "Selected corp already has a statistics module."
|
||||||
@@ -607,11 +601,11 @@ msgstr "Нет закрепленных ФлАк ссылок в записи"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:218
|
#: allianceauth/fleetactivitytracking/views.py:218
|
||||||
msgid "Character does not exist"
|
msgid "Character does not exist"
|
||||||
msgstr ""
|
msgstr "Персонаж не существует"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:221
|
#: allianceauth/fleetactivitytracking/views.py:221
|
||||||
msgid "User does not exist"
|
msgid "User does not exist"
|
||||||
msgstr ""
|
msgstr "Пользователь не существует"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:299
|
#: allianceauth/fleetactivitytracking/views.py:299
|
||||||
msgid "Fleet participation registered."
|
msgid "Fleet participation registered."
|
||||||
@@ -627,6 +621,8 @@ msgid ""
|
|||||||
"Cannot register the fleet participation for {character.character_name}. The "
|
"Cannot register the fleet participation for {character.character_name}. The "
|
||||||
"character needs to be online."
|
"character needs to be online."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Не могу зарегистрировать ФлАк для {character.character_name}. Персонаж "
|
||||||
|
"должен быть онлайн."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/auth_hooks.py:17
|
#: allianceauth/groupmanagement/auth_hooks.py:17
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:13
|
#: allianceauth/groupmanagement/templates/groupmanagement/menu.html:13
|
||||||
@@ -636,14 +632,15 @@ msgstr "Управление Группой"
|
|||||||
#: allianceauth/groupmanagement/forms.py:15
|
#: allianceauth/groupmanagement/forms.py:15
|
||||||
msgid "This name has been reserved and can not be used for groups."
|
msgid "This name has been reserved and can not be used for groups."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Это имя является зарезервированным и не может быть использовано для групп."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:25
|
#: allianceauth/groupmanagement/forms.py:25
|
||||||
msgid "(auto)"
|
msgid "(auto)"
|
||||||
msgstr ""
|
msgstr "(авто)"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/forms.py:34
|
#: allianceauth/groupmanagement/forms.py:34
|
||||||
msgid "There already exists a group with that name."
|
msgid "There already exists a group with that name."
|
||||||
msgstr ""
|
msgstr "Группа с таким именем уже существует."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:105
|
#: allianceauth/groupmanagement/models.py:105
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -651,16 +648,25 @@ msgid ""
|
|||||||
"group.<br>Used for groups such as Members, Corp_*, Alliance_* "
|
"group.<br>Used for groups such as Members, Corp_*, Alliance_* "
|
||||||
"etc.<br><b>Overrides Hidden and Open options when selected.</b>"
|
"etc.<br><b>Overrides Hidden and Open options when selected.</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Внутренняя группа, пользователи не могут видеть эту группу, присоединяться к"
|
||||||
|
" ней или подавать запрос на присоединение.<br>Используется таких групп как "
|
||||||
|
"Members, Corp_*, Alliance_* и т. п.<br><b>Будучи выбранной, отменяет "
|
||||||
|
"настройки \"Скрытая\" и \"Открытая\".</b>"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:113
|
#: allianceauth/groupmanagement/models.py:113
|
||||||
msgid "Group is hidden from users but can still join with the correct link."
|
msgid "Group is hidden from users but can still join with the correct link."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Группы скрыты от пользователей, но к ним всё ещё можно присоединиться с "
|
||||||
|
"помощью корректной ссылки."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:119
|
#: allianceauth/groupmanagement/models.py:119
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group is open and users will be automatically added upon request.<br>If the "
|
"Group is open and users will be automatically added upon request.<br>If the "
|
||||||
"group is not open users will need their request manually approved."
|
"group is not open users will need their request manually approved."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Группа является открытой, пользователи будут автоматически добавлены в неё "
|
||||||
|
"при отправке запроса.<br>Если группа не является открытой, запросы от "
|
||||||
|
"пользователей будут требовать ручного подтверждения."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:126
|
#: allianceauth/groupmanagement/models.py:126
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -669,12 +675,18 @@ msgid ""
|
|||||||
"remove users from this group automatically when they are no longer "
|
"remove users from this group automatically when they are no longer "
|
||||||
"authenticated."
|
"authenticated."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Группа является публичной. Любые зарегистрированные пользователи могут "
|
||||||
|
"присоединиться к этой группе, настройки видимости будут основаны на других "
|
||||||
|
"настройках данной группы.<br>Auth не будет удалять пользователей из этой "
|
||||||
|
"группы автоматически при окончании срока их аутентификации."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:135
|
#: allianceauth/groupmanagement/models.py:135
|
||||||
msgid ""
|
msgid ""
|
||||||
"Group is restricted. This means that adding or removing users for this group"
|
"Group is restricted. This means that adding or removing users for this group"
|
||||||
" requires a superuser admin."
|
" requires a superuser admin."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Группа является ограниченной. Это значит что добавление пользователей в эту "
|
||||||
|
"группу или удаление из неё требует прав superuser admin."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:144
|
#: allianceauth/groupmanagement/models.py:144
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -682,6 +694,9 @@ msgid ""
|
|||||||
"<code>auth.group_management</code> permission to allow a user to manage all "
|
"<code>auth.group_management</code> permission to allow a user to manage all "
|
||||||
"groups.<br>"
|
"groups.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Лидеры группы могут обрабатывать запросы, относящиеся к этой группе. "
|
||||||
|
"Используйте разрешение <code>auth.group_management</code>, чтобы позволить "
|
||||||
|
"пользователю управлять всеми группами.<br>"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:154
|
#: allianceauth/groupmanagement/models.py:154
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -689,49 +704,56 @@ msgid ""
|
|||||||
"<code>auth.group_management</code> permission to allow a user to manage all "
|
"<code>auth.group_management</code> permission to allow a user to manage all "
|
||||||
"groups.<br>"
|
"groups.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Члены групп лидеров могут обрабатывать запросы, относящиеся к этой группе. "
|
||||||
|
"Используйте разрешение <code>auth.group_management</code>, чтобы позволить "
|
||||||
|
"пользователю управлять всеми группами.<br>"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:163
|
#: allianceauth/groupmanagement/models.py:163
|
||||||
msgid ""
|
msgid ""
|
||||||
"States listed here will have the ability to join this group provided they "
|
"States listed here will have the ability to join this group provided they "
|
||||||
"have the proper permissions.<br>"
|
"have the proper permissions.<br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Статусы, перечисленные здесь, смогут присоединиться к группе, если у них "
|
||||||
|
"есть соответствующие разрешения.<br>"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:171
|
#: allianceauth/groupmanagement/models.py:171
|
||||||
msgid ""
|
msgid ""
|
||||||
"Short description <i>(max. 512 characters)</i> of the group shown to users."
|
"Short description <i>(max. 512 characters)</i> of the group shown to users."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Краткое описание <i>(макс. 512 символов)</i> группы, отображаемое "
|
||||||
|
"пользователям."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:178
|
#: allianceauth/groupmanagement/models.py:178
|
||||||
msgid "Can request non-public groups"
|
msgid "Can request non-public groups"
|
||||||
msgstr ""
|
msgstr "Можно отправлять запрос на непубличную группу."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:209
|
#: allianceauth/groupmanagement/models.py:209
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr ""
|
msgstr "имя"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:212
|
#: allianceauth/groupmanagement/models.py:212
|
||||||
msgid "Name that can not be used for groups."
|
msgid "Name that can not be used for groups."
|
||||||
msgstr ""
|
msgstr "Имя, которое не может быть использовано для групп."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:215
|
||||||
msgid "reason"
|
msgid "reason"
|
||||||
msgstr ""
|
msgstr "причина"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:215
|
||||||
msgid "Reason why this name is reserved."
|
msgid "Reason why this name is reserved."
|
||||||
msgstr ""
|
msgstr "Причина, по которой это имя зарезервировано."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:218
|
#: allianceauth/groupmanagement/models.py:218
|
||||||
msgid "created by"
|
msgid "created by"
|
||||||
msgstr ""
|
msgstr "создано кем"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:223
|
#: allianceauth/groupmanagement/models.py:223
|
||||||
msgid "created at"
|
msgid "created at"
|
||||||
msgstr ""
|
msgstr "создано когда"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:223
|
#: allianceauth/groupmanagement/models.py:223
|
||||||
msgid "Date when this entry was created"
|
msgid "Date when this entry was created"
|
||||||
msgstr ""
|
msgstr "Дата, когда данное содержимое было создано"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:4
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:4
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:13
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:13
|
||||||
@@ -773,11 +795,11 @@ msgstr "Исполнитель"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:48
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:48
|
||||||
msgid "Removed"
|
msgid "Removed"
|
||||||
msgstr ""
|
msgstr "Удалено"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:60
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:60
|
||||||
msgid "All times displayed are EVE/UTC."
|
msgid "All times displayed are EVE/UTC."
|
||||||
msgstr ""
|
msgstr "Все значения времени отображаются в EVE/ET/UTC."
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:67
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:67
|
||||||
msgid "No entries found for this group."
|
msgid "No entries found for this group."
|
||||||
@@ -797,13 +819,13 @@ msgstr "Корпорация"
|
|||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:49
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:49
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:75
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:75
|
||||||
msgid "Group leader"
|
msgid "Group leader"
|
||||||
msgstr ""
|
msgstr "Лидер группы"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:60
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:60
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:82
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:82
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:139
|
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:139
|
||||||
msgid "(unknown)"
|
msgid "(unknown)"
|
||||||
msgstr ""
|
msgstr "(неизвестно)"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:65
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:65
|
||||||
msgid "Remove from group"
|
msgid "Remove from group"
|
||||||
@@ -1221,19 +1243,19 @@ msgstr "Откомментировать"
|
|||||||
|
|
||||||
#: allianceauth/notifications/models.py:21
|
#: allianceauth/notifications/models.py:21
|
||||||
msgid "danger"
|
msgid "danger"
|
||||||
msgstr ""
|
msgstr "опасн"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:22
|
#: allianceauth/notifications/models.py:22
|
||||||
msgid "warning"
|
msgid "warning"
|
||||||
msgstr ""
|
msgstr "упрежд"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:23
|
#: allianceauth/notifications/models.py:23
|
||||||
msgid "info"
|
msgid "info"
|
||||||
msgstr ""
|
msgstr "инфо"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:24
|
#: allianceauth/notifications/models.py:24
|
||||||
msgid "success"
|
msgid "success"
|
||||||
msgstr ""
|
msgstr "успех"
|
||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/list.html:4
|
#: allianceauth/notifications/templates/notifications/list.html:4
|
||||||
#: allianceauth/notifications/templates/notifications/list.html:7
|
#: allianceauth/notifications/templates/notifications/list.html:7
|
||||||
@@ -1267,7 +1289,7 @@ msgstr "Заголовок"
|
|||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/list_partial.html:28
|
#: allianceauth/notifications/templates/notifications/list_partial.html:28
|
||||||
msgid "No notifications."
|
msgid "No notifications."
|
||||||
msgstr ""
|
msgstr "Нет уведомлений."
|
||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/view.html:4
|
#: allianceauth/notifications/templates/notifications/view.html:4
|
||||||
#: allianceauth/notifications/templates/notifications/view.html:8
|
#: allianceauth/notifications/templates/notifications/view.html:8
|
||||||
@@ -1315,7 +1337,7 @@ msgstr "Название операции"
|
|||||||
|
|
||||||
#: allianceauth/optimer/form.py:16
|
#: allianceauth/optimer/form.py:16
|
||||||
msgid "Operation Type"
|
msgid "Operation Type"
|
||||||
msgstr ""
|
msgstr "Тип операции"
|
||||||
|
|
||||||
#: allianceauth/optimer/form.py:17
|
#: allianceauth/optimer/form.py:17
|
||||||
#: allianceauth/srp/templates/srp/management.html:38
|
#: allianceauth/srp/templates/srp/management.html:38
|
||||||
@@ -1329,7 +1351,7 @@ msgstr "Дополнительная информация"
|
|||||||
|
|
||||||
#: allianceauth/optimer/form.py:23
|
#: allianceauth/optimer/form.py:23
|
||||||
msgid "(Optional) Describe the operation with a couple of short words."
|
msgid "(Optional) Describe the operation with a couple of short words."
|
||||||
msgstr ""
|
msgstr "(Опционально) Опишите операцию несколькими короткими словами."
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/add.html:6
|
#: allianceauth/optimer/templates/optimer/add.html:6
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:13
|
#: allianceauth/optimer/templates/optimer/management.html:13
|
||||||
@@ -1366,7 +1388,7 @@ msgstr "Текущий EVE Time:"
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:26
|
#: allianceauth/optimer/templates/optimer/management.html:26
|
||||||
msgid "Next Fleet Operations"
|
msgid "Next Fleet Operations"
|
||||||
msgstr ""
|
msgstr "Грядущие Флотовые операции"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:30
|
#: allianceauth/optimer/templates/optimer/management.html:30
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
||||||
@@ -1375,7 +1397,7 @@ msgstr "Нет предстоящих таймеров"
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:33
|
#: allianceauth/optimer/templates/optimer/management.html:33
|
||||||
msgid "Past Fleet Operations"
|
msgid "Past Fleet Operations"
|
||||||
msgstr ""
|
msgstr "Прошлые Флотовые операции"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:37
|
#: allianceauth/optimer/templates/optimer/management.html:37
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
||||||
@@ -1455,7 +1477,7 @@ msgstr "Пользователи"
|
|||||||
|
|
||||||
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:41
|
#: allianceauth/permissions_tool/templates/permissions_tool/overview.html:41
|
||||||
msgid "States"
|
msgid "States"
|
||||||
msgstr "Состояния"
|
msgstr "Статусы"
|
||||||
|
|
||||||
#: allianceauth/services/abstract.py:72
|
#: allianceauth/services/abstract.py:72
|
||||||
msgid "That service account already exists"
|
msgid "That service account already exists"
|
||||||
@@ -1464,7 +1486,7 @@ msgstr "Этот сервис уже активирован"
|
|||||||
#: allianceauth/services/abstract.py:103
|
#: allianceauth/services/abstract.py:103
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Successfully set your {self.service_name} password"
|
msgid "Successfully set your {self.service_name} password"
|
||||||
msgstr ""
|
msgstr "Успешно установлен пароль для вашего {self.setvice_name}"
|
||||||
|
|
||||||
#: allianceauth/services/auth_hooks.py:12
|
#: allianceauth/services/auth_hooks.py:12
|
||||||
msgid "Services"
|
msgid "Services"
|
||||||
@@ -1508,7 +1530,7 @@ msgstr "Назначение:"
|
|||||||
|
|
||||||
#: allianceauth/services/forms.py:15
|
#: allianceauth/services/forms.py:15
|
||||||
msgid "Reimbursable?*"
|
msgid "Reimbursable?*"
|
||||||
msgstr "Конпенсировать?"
|
msgstr "Компенсировать?"
|
||||||
|
|
||||||
#: allianceauth/services/forms.py:15 allianceauth/services/forms.py:16
|
#: allianceauth/services/forms.py:15 allianceauth/services/forms.py:16
|
||||||
msgid "Yes"
|
msgid "Yes"
|
||||||
@@ -1539,10 +1561,12 @@ msgid ""
|
|||||||
"Your Discord account was disabled automatically by Auth. If you think this "
|
"Your Discord account was disabled automatically by Auth. If you think this "
|
||||||
"was a mistake, please contact an admin."
|
"was a mistake, please contact an admin."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Auth автоматически отключил ваш аккаунт Discord. Если вы думаете, что это "
|
||||||
|
"произошло по ошибке, пожалуйста свяжитесь с админом."
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:5
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:5
|
||||||
msgid "Discord"
|
msgid "Discord"
|
||||||
msgstr ""
|
msgstr "Discord"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:18
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:18
|
||||||
msgid "Join the Discord server"
|
msgid "Join the Discord server"
|
||||||
@@ -1550,7 +1574,7 @@ msgstr "Подключиться к серверу Discord"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:22
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:22
|
||||||
msgid "Leave- and rejoin the Discord Server (Reset)"
|
msgid "Leave- and rejoin the Discord Server (Reset)"
|
||||||
msgstr "Переподключиться к серверу Discord. "
|
msgstr "Переподключиться к серверу Discord (сброс). "
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:25
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:25
|
||||||
msgid "Leave the Discord server"
|
msgid "Leave the Discord server"
|
||||||
@@ -1605,29 +1629,31 @@ msgstr ""
|
|||||||
#: allianceauth/services/modules/discourse/views.py:62
|
#: allianceauth/services/modules/discourse/views.py:62
|
||||||
msgid "Invalid payload. Please contact support if this problem persists."
|
msgid "Invalid payload. Please contact support if this problem persists."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Недопустимая \"полезная нагрузка\". Пожалуйста свяжитесь с поддержкой, если "
|
||||||
|
"данная проблема будет продолжаться."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:31
|
#: allianceauth/services/modules/ips4/views.py:31
|
||||||
msgid "Activated IPSuite4 account."
|
msgid "Activated IPSuite4 account."
|
||||||
msgstr ""
|
msgstr "Активирован аккаунт IPSuite4."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:39
|
#: allianceauth/services/modules/ips4/views.py:39
|
||||||
#: allianceauth/services/modules/ips4/views.py:60
|
#: allianceauth/services/modules/ips4/views.py:60
|
||||||
#: allianceauth/services/modules/ips4/views.py:81
|
#: allianceauth/services/modules/ips4/views.py:81
|
||||||
#: allianceauth/services/modules/ips4/views.py:101
|
#: allianceauth/services/modules/ips4/views.py:101
|
||||||
msgid "An error occurred while processing your IPSuite4 account."
|
msgid "An error occurred while processing your IPSuite4 account."
|
||||||
msgstr ""
|
msgstr "Произошла ошибка при работе с вашим аккаунтом IPSuite4."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:52
|
#: allianceauth/services/modules/ips4/views.py:52
|
||||||
msgid "Reset IPSuite4 password."
|
msgid "Reset IPSuite4 password."
|
||||||
msgstr ""
|
msgstr "Сбросить пароль IPSuite4."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:78
|
#: allianceauth/services/modules/ips4/views.py:78
|
||||||
msgid "Set IPSuite4 password."
|
msgid "Set IPSuite4 password."
|
||||||
msgstr ""
|
msgstr "Установить пароль IPSuite4."
|
||||||
|
|
||||||
#: allianceauth/services/modules/ips4/views.py:98
|
#: allianceauth/services/modules/ips4/views.py:98
|
||||||
msgid "Deactivated IPSuite4 account."
|
msgid "Deactivated IPSuite4 account."
|
||||||
msgstr ""
|
msgstr "Деактивированный аккаунт IPSuite4."
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/auth_hooks.py:26
|
#: allianceauth/services/modules/openfire/auth_hooks.py:26
|
||||||
msgid "Jabber"
|
msgid "Jabber"
|
||||||
@@ -1641,7 +1667,7 @@ msgstr "Jabber Бродкаст"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/openfire/auth_hooks.py:94
|
#: allianceauth/services/modules/openfire/auth_hooks.py:94
|
||||||
msgid "Fleet Broadcast Formatter"
|
msgid "Fleet Broadcast Formatter"
|
||||||
msgstr ""
|
msgstr "Флотовый Оповещатель"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/forms.py:7
|
#: allianceauth/services/modules/openfire/forms.py:7
|
||||||
msgid "Message"
|
msgid "Message"
|
||||||
@@ -1704,26 +1730,26 @@ msgstr "Установить пароль на Форум."
|
|||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:52
|
#: allianceauth/services/modules/smf/views.py:52
|
||||||
msgid "Activated SMF account."
|
msgid "Activated SMF account."
|
||||||
msgstr ""
|
msgstr "Активированный аккаунт SMF."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:65
|
#: allianceauth/services/modules/smf/views.py:65
|
||||||
#: allianceauth/services/modules/smf/views.py:81
|
#: allianceauth/services/modules/smf/views.py:81
|
||||||
#: allianceauth/services/modules/smf/views.py:102
|
#: allianceauth/services/modules/smf/views.py:102
|
||||||
#: allianceauth/services/modules/smf/views.py:124
|
#: allianceauth/services/modules/smf/views.py:124
|
||||||
msgid "An error occurred while processing your SMF account."
|
msgid "An error occurred while processing your SMF account."
|
||||||
msgstr ""
|
msgstr "Произошла ошибка при работе с вашим аккаунтом SMF."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:78
|
#: allianceauth/services/modules/smf/views.py:78
|
||||||
msgid "Deactivated SMF account."
|
msgid "Deactivated SMF account."
|
||||||
msgstr ""
|
msgstr "Деактивированный аккаунт SMF."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:95
|
#: allianceauth/services/modules/smf/views.py:95
|
||||||
msgid "Reset SMF password."
|
msgid "Reset SMF password."
|
||||||
msgstr ""
|
msgstr "Сбросить пароль SMF."
|
||||||
|
|
||||||
#: allianceauth/services/modules/smf/views.py:121
|
#: allianceauth/services/modules/smf/views.py:121
|
||||||
msgid "Set SMF password."
|
msgid "Set SMF password."
|
||||||
msgstr ""
|
msgstr "Установить пароль SMF."
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/forms.py:14
|
#: allianceauth/services/modules/teamspeak3/forms.py:14
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -1732,7 +1758,7 @@ msgstr "Не могу найти %s на сервере"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/templates/admin/teamspeak3/authts/change_list.html:8
|
#: allianceauth/services/modules/teamspeak3/templates/admin/teamspeak3/authts/change_list.html:8
|
||||||
msgid "Update TS3 groups"
|
msgid "Update TS3 groups"
|
||||||
msgstr ""
|
msgstr "Обновить группы TS3"
|
||||||
|
|
||||||
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:5
|
#: allianceauth/services/modules/teamspeak3/templates/services/teamspeak3/teamspeakjoin.html:5
|
||||||
msgid "Verify Teamspeak"
|
msgid "Verify Teamspeak"
|
||||||
@@ -1772,26 +1798,26 @@ msgstr "Сбросить TeamSpeak3 ключ доступа."
|
|||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:30
|
#: allianceauth/services/modules/xenforo/views.py:30
|
||||||
msgid "Activated XenForo account."
|
msgid "Activated XenForo account."
|
||||||
msgstr ""
|
msgstr "Активированный аккаунт XenForo."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:40
|
#: allianceauth/services/modules/xenforo/views.py:40
|
||||||
#: allianceauth/services/modules/xenforo/views.py:52
|
#: allianceauth/services/modules/xenforo/views.py:52
|
||||||
#: allianceauth/services/modules/xenforo/views.py:73
|
#: allianceauth/services/modules/xenforo/views.py:73
|
||||||
#: allianceauth/services/modules/xenforo/views.py:94
|
#: allianceauth/services/modules/xenforo/views.py:94
|
||||||
msgid "An error occurred while processing your XenForo account."
|
msgid "An error occurred while processing your XenForo account."
|
||||||
msgstr ""
|
msgstr "Произошла ошибка при работе с вашим аккаунтом XenForo."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:50
|
#: allianceauth/services/modules/xenforo/views.py:50
|
||||||
msgid "Deactivated XenForo account."
|
msgid "Deactivated XenForo account."
|
||||||
msgstr ""
|
msgstr "Деактивированный аккаунт XenForo."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:65
|
#: allianceauth/services/modules/xenforo/views.py:65
|
||||||
msgid "Reset XenForo account password."
|
msgid "Reset XenForo account password."
|
||||||
msgstr ""
|
msgstr "Сбросить пароль XenForo."
|
||||||
|
|
||||||
#: allianceauth/services/modules/xenforo/views.py:91
|
#: allianceauth/services/modules/xenforo/views.py:91
|
||||||
msgid "Changed XenForo password."
|
msgid "Changed XenForo password."
|
||||||
msgstr ""
|
msgstr "Изменённый пароль XenForo."
|
||||||
|
|
||||||
#: allianceauth/services/templates/services/fleetformattertool.html:5
|
#: allianceauth/services/templates/services/fleetformattertool.html:5
|
||||||
msgid "Fleet Formatter Tool"
|
msgid "Fleet Formatter Tool"
|
||||||
@@ -1799,7 +1825,7 @@ msgstr "ФлитФорматер"
|
|||||||
|
|
||||||
#: allianceauth/services/templates/services/fleetformattertool.html:10
|
#: allianceauth/services/templates/services/fleetformattertool.html:10
|
||||||
msgid "Fleet Broadcast Formatter Tool"
|
msgid "Fleet Broadcast Formatter Tool"
|
||||||
msgstr "Флотовый Бродкастер"
|
msgstr "Флотовый Оповещатель"
|
||||||
|
|
||||||
#: allianceauth/services/templates/services/fleetformattertool.html:23
|
#: allianceauth/services/templates/services/fleetformattertool.html:23
|
||||||
msgid "Format"
|
msgid "Format"
|
||||||
@@ -1869,15 +1895,16 @@ msgstr "Флотовая Доктрина"
|
|||||||
|
|
||||||
#: allianceauth/srp/form.py:16
|
#: allianceauth/srp/form.py:16
|
||||||
msgid "Killboard Link (zkillboard.com or kb.evetools.org)"
|
msgid "Killboard Link (zkillboard.com or kb.evetools.org)"
|
||||||
msgstr ""
|
msgstr "Ссылка киллборды (zkillboard.com или kb.evetools.org)"
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:34
|
#: allianceauth/srp/form.py:34
|
||||||
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Неверная ссылка. Пожалуйста используйте zkillboard.com или kb.evetools.org"
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:46
|
#: allianceauth/srp/form.py:46
|
||||||
msgid "Invalid Link. Please post a direct link to a killmail."
|
msgid "Invalid Link. Please post a direct link to a killmail."
|
||||||
msgstr ""
|
msgstr "Неверная ссылка. Пожалуйста предоставьте прямую ссылку на киллмейл."
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:53
|
#: allianceauth/srp/form.py:53
|
||||||
msgid "After Action Report Link"
|
msgid "After Action Report Link"
|
||||||
@@ -1898,7 +1925,7 @@ msgstr "Поделиться ссылкой с рядовыми участник
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:5
|
#: allianceauth/srp/templates/srp/data.html:5
|
||||||
msgid "Srp Fleet Data"
|
msgid "Srp Fleet Data"
|
||||||
msgstr ""
|
msgstr "Данные флота по SRP"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:50
|
#: allianceauth/srp/templates/srp/data.html:50
|
||||||
msgid "SRP Fleet Data"
|
msgid "SRP Fleet Data"
|
||||||
@@ -1921,7 +1948,7 @@ msgstr "Суммарные потери:"
|
|||||||
#: allianceauth/srp/templates/srp/data.html:158
|
#: allianceauth/srp/templates/srp/data.html:158
|
||||||
#: allianceauth/srp/templates/srp/management.html:28
|
#: allianceauth/srp/templates/srp/management.html:28
|
||||||
msgid "Total ISK Cost:"
|
msgid "Total ISK Cost:"
|
||||||
msgstr "Оценочная стоимость (ISK):"
|
msgstr "Оценочная стоимость, ISK:"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:80
|
#: allianceauth/srp/templates/srp/data.html:80
|
||||||
#: allianceauth/srp/templates/srp/data.html:166
|
#: allianceauth/srp/templates/srp/data.html:166
|
||||||
@@ -1934,7 +1961,7 @@ msgstr "Имя Пилота"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:90
|
#: allianceauth/srp/templates/srp/data.html:90
|
||||||
msgid "Killboard Link"
|
msgid "Killboard Link"
|
||||||
msgstr "zKillBoard ссылка"
|
msgstr "Killboard ссылка"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:92
|
#: allianceauth/srp/templates/srp/data.html:92
|
||||||
msgid "Ship Type"
|
msgid "Ship Type"
|
||||||
@@ -1942,7 +1969,7 @@ msgstr "Тип корабля"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:93
|
#: allianceauth/srp/templates/srp/data.html:93
|
||||||
msgid "Killboard Loss Amt"
|
msgid "Killboard Loss Amt"
|
||||||
msgstr "потерь по zKillBoard на данный момент"
|
msgstr "Потерь по Killboard на данный момент"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:94
|
#: allianceauth/srp/templates/srp/data.html:94
|
||||||
msgid "SRP ISK Cost"
|
msgid "SRP ISK Cost"
|
||||||
@@ -1978,7 +2005,7 @@ msgstr "Добавить SRP флот"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/management.html:39
|
#: allianceauth/srp/templates/srp/management.html:39
|
||||||
msgid "Fleet AAR"
|
msgid "Fleet AAR"
|
||||||
msgstr "Флитовый AAR."
|
msgstr "Флитовый AAR"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/management.html:40
|
#: allianceauth/srp/templates/srp/management.html:40
|
||||||
msgid "Fleet SRP Code"
|
msgid "Fleet SRP Code"
|
||||||
@@ -2072,15 +2099,15 @@ msgstr "Не могу найти SRP код с ID %(srpfleetid)s"
|
|||||||
|
|
||||||
#: allianceauth/srp/views.py:179
|
#: allianceauth/srp/views.py:179
|
||||||
msgid "This kill mail has already been posted."
|
msgid "This kill mail has already been posted."
|
||||||
msgstr ""
|
msgstr "Этот киллмейл уже был предоставлен ранее."
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:200
|
#: allianceauth/srp/views.py:200
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your SRP request Killmail link is invalid. Please make sure you are using "
|
"Your SRP request Killmail link is invalid. Please make sure you are using "
|
||||||
"zKillboard."
|
"zKillboard."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ваш SRP запрос Killmail неправильный. Пожалуйста убедитесь в правильности "
|
"Ссылка на киллмейл в вашем SRP запросе неправильная. Пожалуйста убедитесь в "
|
||||||
"ссылки. "
|
"правильности ссылки. "
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:212
|
#: allianceauth/srp/views.py:212
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -2144,11 +2171,11 @@ msgstr "Закрыт"
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:28
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:28
|
||||||
msgid "Powered by GitLab"
|
msgid "Powered by GitLab"
|
||||||
msgstr ""
|
msgstr "При поддержке GitLab"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
|
||||||
msgid "Support Discord"
|
msgid "Support Discord"
|
||||||
msgstr ""
|
msgstr "Поддержка Discord"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:43
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:43
|
||||||
msgid "Software Version"
|
msgid "Software Version"
|
||||||
@@ -2185,6 +2212,8 @@ msgid ""
|
|||||||
" Status of %(total)s processed tasks • last %(latest)s\n"
|
" Status of %(total)s processed tasks • last %(latest)s\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
" Статус %(total)s обработанных задач • последние %(latest)s"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:95
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -2193,6 +2222,8 @@ msgid ""
|
|||||||
" %(queue_length)s queued tasks\n"
|
" %(queue_length)s queued tasks\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
" %(queue_length)s запланированных задач"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
||||||
msgid "Admin"
|
msgid "Admin"
|
||||||
@@ -2200,16 +2231,16 @@ msgstr "Администратор"
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
||||||
msgid "AA Documentation"
|
msgid "AA Documentation"
|
||||||
msgstr ""
|
msgstr "Документация AA"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:26
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:26
|
||||||
msgid "AA Support Discord"
|
msgid "AA Support Discord"
|
||||||
msgstr ""
|
msgstr "Discord поддержки AA"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:10
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:10
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:14
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:14
|
||||||
msgid "User Menu"
|
msgid "User Menu"
|
||||||
msgstr ""
|
msgstr "Меню пользователя"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:56
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:56
|
||||||
msgid "Logout"
|
msgid "Logout"
|
||||||
@@ -2257,7 +2288,7 @@ msgstr "Тип структуры"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/form.py:62
|
#: allianceauth/timerboard/form.py:62
|
||||||
msgid "Timer Type"
|
msgid "Timer Type"
|
||||||
msgstr ""
|
msgstr "Тип таймера"
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:63
|
#: allianceauth/timerboard/form.py:63
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:32
|
#: allianceauth/timerboard/templates/timerboard/view.html:32
|
||||||
@@ -2288,31 +2319,31 @@ msgstr "Корпорация зарегистрированна"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:14
|
#: allianceauth/timerboard/models.py:14
|
||||||
msgid "Not Specified"
|
msgid "Not Specified"
|
||||||
msgstr ""
|
msgstr "Не указано"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:15
|
#: allianceauth/timerboard/models.py:15
|
||||||
msgid "Shield"
|
msgid "Shield"
|
||||||
msgstr ""
|
msgstr "Щит"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:16
|
#: allianceauth/timerboard/models.py:16
|
||||||
msgid "Armor"
|
msgid "Armor"
|
||||||
msgstr ""
|
msgstr "Броня"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:17
|
#: allianceauth/timerboard/models.py:17
|
||||||
msgid "Hull"
|
msgid "Hull"
|
||||||
msgstr ""
|
msgstr "Структура"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:18
|
#: allianceauth/timerboard/models.py:18
|
||||||
msgid "Final"
|
msgid "Final"
|
||||||
msgstr ""
|
msgstr "Финальный"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:19
|
#: allianceauth/timerboard/models.py:19
|
||||||
msgid "Anchoring"
|
msgid "Anchoring"
|
||||||
msgstr ""
|
msgstr "Постановка на якорь"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:20
|
#: allianceauth/timerboard/models.py:20
|
||||||
msgid "Unanchoring"
|
msgid "Unanchoring"
|
||||||
msgstr ""
|
msgstr "Снятие с якоря"
|
||||||
|
|
||||||
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
||||||
msgid "Delete Timer"
|
msgid "Delete Timer"
|
||||||
@@ -2372,4 +2403,4 @@ msgstr "Добавлен таймер в %(system)s на %(time)s."
|
|||||||
|
|
||||||
#: allianceauth/timerboard/views.py:82
|
#: allianceauth/timerboard/views.py:82
|
||||||
msgid "Saved changes to the timer."
|
msgid "Saved changes to the timer."
|
||||||
msgstr "Изменения сохранены"
|
msgstr "Изменения таймера сохранены."
|
||||||
|
|||||||
BIN
allianceauth/locale/uk/LC_MESSAGES/django.mo
Normal file
BIN
allianceauth/locale/uk/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
2410
allianceauth/locale/uk/LC_MESSAGES/django.po
Normal file
2410
allianceauth/locale/uk/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -4,19 +4,20 @@
|
|||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Joel Falknau <ozirascal@gmail.com>, 2020
|
# Jesse . <sgeine@hotmail.com>, 2023
|
||||||
# Jesse . <sgeine@hotmail.com>, 2020
|
# Aaron BuBu <351793078@qq.com>, 2023
|
||||||
# Aaron BuBu <351793078@qq.com>, 2020
|
# Joel Falknau <ozirascal@gmail.com>, 2023
|
||||||
|
# Shen Yang, 2023
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-09-14 23:17+1000\n"
|
"POT-Creation-Date: 2022-10-09 18:20+1000\n"
|
||||||
"PO-Revision-Date: 2020-02-18 03:14+0000\n"
|
"PO-Revision-Date: 2023-10-08 09:23+0000\n"
|
||||||
"Last-Translator: Aaron BuBu <351793078@qq.com>, 2020\n"
|
"Last-Translator: Shen Yang, 2023\n"
|
||||||
"Language-Team: Chinese Simplified (https://www.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
|
"Language-Team: Chinese Simplified (https://app.transifex.com/alliance-auth/teams/107430/zh-Hans/)\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"
|
||||||
@@ -45,58 +46,49 @@ msgid "You are not allowed to add or remove these restricted groups: %s"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:89
|
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr ""
|
msgstr "英语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:90
|
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr ""
|
msgstr "德语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:91
|
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr ""
|
msgstr "西班牙语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:83
|
#: allianceauth/authentication/models.py:83
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:92
|
|
||||||
msgid "Chinese Simplified"
|
msgid "Chinese Simplified"
|
||||||
msgstr ""
|
msgstr "简体中文"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:84
|
#: allianceauth/authentication/models.py:84
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:93
|
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr ""
|
msgstr "俄语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:85
|
#: allianceauth/authentication/models.py:85
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:94
|
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr "韩语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:86
|
#: allianceauth/authentication/models.py:86
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:95
|
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr ""
|
msgstr "法语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:87
|
#: allianceauth/authentication/models.py:87
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:96
|
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr ""
|
msgstr "日语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:88
|
#: allianceauth/authentication/models.py:88
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:97
|
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr ""
|
msgstr "意大利语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:91
|
#: allianceauth/authentication/models.py:91
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr ""
|
msgstr "语言"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:96
|
#: allianceauth/authentication/models.py:96
|
||||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||||
msgid "Night Mode"
|
msgid "Night Mode"
|
||||||
msgstr ""
|
msgstr "夜间模式"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:110
|
#: allianceauth/authentication/models.py:110
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -705,7 +697,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:215
|
||||||
msgid "reason"
|
msgid "reason"
|
||||||
msgstr ""
|
msgstr "原因"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/models.py:215
|
#: allianceauth/groupmanagement/models.py:215
|
||||||
msgid "Reason why this name is reserved."
|
msgid "Reason why this name is reserved."
|
||||||
@@ -763,7 +755,7 @@ msgstr "操作者"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:48
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:48
|
||||||
msgid "Removed"
|
msgid "Removed"
|
||||||
msgstr ""
|
msgstr "已移除"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:60
|
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:60
|
||||||
msgid "All times displayed are EVE/UTC."
|
msgid "All times displayed are EVE/UTC."
|
||||||
@@ -1207,11 +1199,11 @@ msgstr "添加评论"
|
|||||||
|
|
||||||
#: allianceauth/notifications/models.py:21
|
#: allianceauth/notifications/models.py:21
|
||||||
msgid "danger"
|
msgid "danger"
|
||||||
msgstr ""
|
msgstr "危险"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:22
|
#: allianceauth/notifications/models.py:22
|
||||||
msgid "warning"
|
msgid "warning"
|
||||||
msgstr ""
|
msgstr "警告"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:23
|
#: allianceauth/notifications/models.py:23
|
||||||
msgid "info"
|
msgid "info"
|
||||||
@@ -1352,7 +1344,7 @@ msgstr "当前EVE游戏内时间"
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:26
|
#: allianceauth/optimer/templates/optimer/management.html:26
|
||||||
msgid "Next Fleet Operations"
|
msgid "Next Fleet Operations"
|
||||||
msgstr ""
|
msgstr "下一个舰队任务"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:30
|
#: allianceauth/optimer/templates/optimer/management.html:30
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
#: allianceauth/timerboard/templates/timerboard/view.html:362
|
||||||
@@ -1361,7 +1353,7 @@ msgstr "没有快到的时间节点,歇一会吧"
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:33
|
#: allianceauth/optimer/templates/optimer/management.html:33
|
||||||
msgid "Past Fleet Operations"
|
msgid "Past Fleet Operations"
|
||||||
msgstr ""
|
msgstr "过去的舰队任务"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/management.html:37
|
#: allianceauth/optimer/templates/optimer/management.html:37
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
#: allianceauth/timerboard/templates/timerboard/view.html:535
|
||||||
@@ -2266,15 +2258,15 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:15
|
#: allianceauth/timerboard/models.py:15
|
||||||
msgid "Shield"
|
msgid "Shield"
|
||||||
msgstr ""
|
msgstr "护盾"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:16
|
#: allianceauth/timerboard/models.py:16
|
||||||
msgid "Armor"
|
msgid "Armor"
|
||||||
msgstr ""
|
msgstr "装甲"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:17
|
#: allianceauth/timerboard/models.py:17
|
||||||
msgid "Hull"
|
msgid "Hull"
|
||||||
msgstr ""
|
msgstr "结构"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:18
|
#: allianceauth/timerboard/models.py:18
|
||||||
msgid "Final"
|
msgid "Final"
|
||||||
@@ -2282,11 +2274,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:19
|
#: allianceauth/timerboard/models.py:19
|
||||||
msgid "Anchoring"
|
msgid "Anchoring"
|
||||||
msgstr ""
|
msgstr "铆钉"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:20
|
#: allianceauth/timerboard/models.py:20
|
||||||
msgid "Unanchoring"
|
msgid "Unanchoring"
|
||||||
msgstr ""
|
msgstr "解锚"
|
||||||
|
|
||||||
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
#: allianceauth/timerboard/templates/timerboard/timer_confirm_delete.html:11
|
||||||
msgid "Delete Timer"
|
msgid "Delete Timer"
|
||||||
|
|||||||
@@ -1,3 +1 @@
|
|||||||
from .core import notify # noqa: F401
|
from .core import notify # noqa: F401
|
||||||
|
|
||||||
default_app_config = 'allianceauth.notifications.apps.NotificationsConfig'
|
|
||||||
|
|||||||
@@ -15,18 +15,22 @@ class NotificationAdmin(admin.ModelAdmin):
|
|||||||
ordering = ("-timestamp", )
|
ordering = ("-timestamp", )
|
||||||
search_fields = ["user__username", "user__profile__main_character__character_name"]
|
search_fields = ["user__username", "user__profile__main_character__character_name"]
|
||||||
|
|
||||||
|
@admin.display(
|
||||||
|
ordering="user__profile__main_character__character_name"
|
||||||
|
)
|
||||||
def _main(self, obj):
|
def _main(self, obj):
|
||||||
try:
|
try:
|
||||||
return obj.user.profile.main_character
|
return obj.user.profile.main_character
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return obj.user
|
return obj.user
|
||||||
|
|
||||||
_main.admin_order_field = "user__profile__main_character__character_name"
|
|
||||||
|
|
||||||
|
@admin.display(
|
||||||
|
ordering="user__profile__state__name"
|
||||||
|
)
|
||||||
def _state(self, obj):
|
def _state(self, obj):
|
||||||
return obj.user.profile.state
|
return obj.user.profile.state
|
||||||
|
|
||||||
_state.admin_order_field = "user__profile__state__name"
|
|
||||||
|
|
||||||
def has_change_permission(self, request, obj=None):
|
def has_change_permission(self, request, obj=None):
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ def notification_view(request, notif_id):
|
|||||||
notif.mark_viewed()
|
notif.mark_viewed()
|
||||||
return render(request, 'notifications/view.html', context)
|
return render(request, 'notifications/view.html', context)
|
||||||
else:
|
else:
|
||||||
logger.warn(
|
logger.warning(
|
||||||
"User %s not authorized to view notif_id %s belonging to user %s",
|
"User %s not authorized to view notif_id %s belonging to user %s",
|
||||||
request.user,
|
request.user,
|
||||||
notif_id, notif.user
|
notif_id, notif.user
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ app = Celery('{{ project_name }}')
|
|||||||
# the configuration object to child processes.
|
# the configuration object to child processes.
|
||||||
app.config_from_object('django.conf:settings')
|
app.config_from_object('django.conf:settings')
|
||||||
|
|
||||||
|
# Automatically try to establish the connection to the AMQP broker on
|
||||||
|
# Celery startup if it is unavailable.
|
||||||
|
app.conf.broker_connection_retry_on_startup = True
|
||||||
|
|
||||||
# setup priorities ( 0 Highest, 9 Lowest )
|
# setup priorities ( 0 Highest, 9 Lowest )
|
||||||
app.conf.broker_transport_options = {
|
app.conf.broker_transport_options = {
|
||||||
'priority_steps': list(range(10)), # setup que to have 10 steps
|
'priority_steps': list(range(10)), # setup que to have 10 steps
|
||||||
|
|||||||
@@ -41,23 +41,23 @@ CELERYBEAT_SCHEDULER = "django_celery_beat.schedulers.DatabaseScheduler"
|
|||||||
CELERYBEAT_SCHEDULE = {
|
CELERYBEAT_SCHEDULE = {
|
||||||
'esi_cleanup_callbackredirect': {
|
'esi_cleanup_callbackredirect': {
|
||||||
'task': 'esi.tasks.cleanup_callbackredirect',
|
'task': 'esi.tasks.cleanup_callbackredirect',
|
||||||
'schedule': crontab(minute=0, hour='*/4'),
|
'schedule': crontab(minute='0', hour='*/4'),
|
||||||
},
|
},
|
||||||
'esi_cleanup_token': {
|
'esi_cleanup_token': {
|
||||||
'task': 'esi.tasks.cleanup_token',
|
'task': 'esi.tasks.cleanup_token',
|
||||||
'schedule': crontab(minute=0, hour=0),
|
'schedule': crontab(minute='0', hour='0'),
|
||||||
},
|
},
|
||||||
'run_model_update': {
|
'run_model_update': {
|
||||||
'task': 'allianceauth.eveonline.tasks.run_model_update',
|
'task': 'allianceauth.eveonline.tasks.run_model_update',
|
||||||
'schedule': crontab(minute=0, hour="*/6"),
|
'schedule': crontab(minute='0', hour="*/6"),
|
||||||
},
|
},
|
||||||
'check_all_character_ownership': {
|
'check_all_character_ownership': {
|
||||||
'task': 'allianceauth.authentication.tasks.check_all_character_ownership',
|
'task': 'allianceauth.authentication.tasks.check_all_character_ownership',
|
||||||
'schedule': crontab(minute=0, hour='*/4'),
|
'schedule': crontab(minute='0', hour='*/4'),
|
||||||
},
|
},
|
||||||
'analytics_daily_stats': {
|
'analytics_daily_stats': {
|
||||||
'task': 'allianceauth.analytics.tasks.analytics_daily_stats',
|
'task': 'allianceauth.analytics.tasks.analytics_daily_stats',
|
||||||
'schedule': crontab(minute=0, hour=2),
|
'schedule': crontab(minute='0', hour='2'),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,6 +94,7 @@ LANGUAGES = (
|
|||||||
("fr", "French"),
|
("fr", "French"),
|
||||||
("ja", "Japanese"),
|
("ja", "Japanese"),
|
||||||
("it", "Italian"),
|
("it", "Italian"),
|
||||||
|
("uk", "Ukrainian"),
|
||||||
)
|
)
|
||||||
|
|
||||||
TEMPLATES = [
|
TEMPLATES = [
|
||||||
|
|||||||
@@ -32,6 +32,13 @@ INSTALLED_APPS += [
|
|||||||
# To change the logging level for extensions, uncomment the following line.
|
# To change the logging level for extensions, uncomment the following line.
|
||||||
# LOGGING['handlers']['extension_file']['level'] = 'DEBUG'
|
# LOGGING['handlers']['extension_file']['level'] = 'DEBUG'
|
||||||
|
|
||||||
|
# By default, apps are prevented from having public views for security reasons.
|
||||||
|
# To allow specific apps to have public views, add them to APPS_WITH_PUBLIC_VIEWS
|
||||||
|
# » The format is the same as in INSTALLED_APPS
|
||||||
|
# » The app developer must also explicitly allow public views for their app
|
||||||
|
APPS_WITH_PUBLIC_VIEWS = [
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
# Enter credentials to use MySQL/MariaDB. Comment out to use sqlite3
|
# Enter credentials to use MySQL/MariaDB. Comment out to use sqlite3
|
||||||
DATABASES['default'] = {
|
DATABASES['default'] = {
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
from django.conf.urls import include
|
|
||||||
from allianceauth import urls
|
from allianceauth import urls
|
||||||
from django.urls import re_path
|
from django.urls import include, path
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
re_path(r'', include(urls)),
|
path('', include(urls)),
|
||||||
]
|
]
|
||||||
|
|
||||||
handler500 = 'allianceauth.views.Generic500Redirect'
|
handler500 = 'allianceauth.views.Generic500Redirect'
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ class NameFormatConfigAdmin(admin.ModelAdmin):
|
|||||||
form = NameFormatConfigForm
|
form = NameFormatConfigForm
|
||||||
list_display = ('service_name', 'get_state_display_string')
|
list_display = ('service_name', 'get_state_display_string')
|
||||||
|
|
||||||
|
@admin.display(
|
||||||
|
description='States'
|
||||||
|
)
|
||||||
def get_state_display_string(self, obj):
|
def get_state_display_string(self, obj):
|
||||||
return ', '.join([state.name for state in obj.states.all()])
|
return ', '.join([state.name for state in obj.states.all()])
|
||||||
get_state_display_string.short_description = 'States'
|
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
from django.conf.urls import include
|
from string import Formatter
|
||||||
from django.urls import re_path
|
from typing import Iterable, Optional
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
|
from django.urls import include, re_path
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.conf import settings
|
|
||||||
from string import Formatter
|
|
||||||
|
|
||||||
from allianceauth.hooks import get_hooks
|
from allianceauth.hooks import get_hooks
|
||||||
|
|
||||||
from .models import NameFormatConfig
|
from .models import NameFormatConfig
|
||||||
|
|
||||||
|
|
||||||
def get_extension_logger(name):
|
def get_extension_logger(name):
|
||||||
"""
|
"""
|
||||||
Takes the name of a plugin/extension and generates a child logger of the extensions logger
|
Takes the name of a plugin/extension and generates a child logger of the extensions logger
|
||||||
@@ -156,8 +158,32 @@ class MenuItemHook:
|
|||||||
|
|
||||||
|
|
||||||
class UrlHook:
|
class UrlHook:
|
||||||
def __init__(self, urls, namespace, base_url):
|
"""A hook for registering the URLs of a Django app.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
- urls: The urls module to include
|
||||||
|
- namespace: The URL namespace to apply. This is usually just the app name.
|
||||||
|
- base_url: The URL prefix to match against in regex form.
|
||||||
|
Example ``r'^app_name/'``.
|
||||||
|
This prefix will be applied in front of all URL patterns included.
|
||||||
|
It is possible to use the same prefix as existing apps (or no prefix at all),
|
||||||
|
but standard URL resolution ordering applies
|
||||||
|
(hook URLs are the last ones registered).
|
||||||
|
- excluded_views: Optional list of views to be excluded
|
||||||
|
from auto-decorating them with the
|
||||||
|
default ``main_character_required`` decorator, e.g. to make them public.
|
||||||
|
Views must be specified by their qualified name,
|
||||||
|
e.g. ``["example.views.my_public_view"]``
|
||||||
|
"""
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
urls,
|
||||||
|
namespace: str,
|
||||||
|
base_url: str,
|
||||||
|
excluded_views : Optional[Iterable[str]] = None
|
||||||
|
):
|
||||||
self.include_pattern = re_path(base_url, include(urls, namespace=namespace))
|
self.include_pattern = re_path(base_url, include(urls, namespace=namespace))
|
||||||
|
self.excluded_views = set(excluded_views or [])
|
||||||
|
|
||||||
|
|
||||||
class NameFormatter:
|
class NameFormatter:
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from ...admin import ServicesUserAdmin
|
|||||||
from . import __title__
|
from . import __title__
|
||||||
from .models import DiscordUser
|
from .models import DiscordUser
|
||||||
from .utils import LoggerAddTag
|
from .utils import LoggerAddTag
|
||||||
|
from .auth_hooks import DiscordService
|
||||||
|
|
||||||
logger = LoggerAddTag(logging.getLogger(__name__), __title__)
|
logger = LoggerAddTag(logging.getLogger(__name__), __title__)
|
||||||
|
|
||||||
@@ -27,6 +28,6 @@ class DiscordUserAdmin(ServicesUserAdmin):
|
|||||||
|
|
||||||
@admin.display(description='Discord Username', ordering='username')
|
@admin.display(description='Discord Username', ordering='username')
|
||||||
def _username(self, obj):
|
def _username(self, obj):
|
||||||
if obj.username and obj.discriminator:
|
return DiscordService.get_discord_username(
|
||||||
return f'{obj.username}#{obj.discriminator}'
|
username=obj.username, discriminator=obj.discriminator
|
||||||
return ''
|
)
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ from .models import DiscordUser
|
|||||||
from .urls import urlpatterns
|
from .urls import urlpatterns
|
||||||
from .utils import LoggerAddTag
|
from .utils import LoggerAddTag
|
||||||
from . import tasks, __title__
|
from . import tasks, __title__
|
||||||
|
from .app_settings import (
|
||||||
|
DISCORD_SYNC_NAMES
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
logger = LoggerAddTag(logging.getLogger(__name__), __title__)
|
logger = LoggerAddTag(logging.getLogger(__name__), __title__)
|
||||||
@@ -30,6 +33,29 @@ class DiscordService(ServicesHook):
|
|||||||
self.access_perm = 'discord.access_discord'
|
self.access_perm = 'discord.access_discord'
|
||||||
self.name_format = '{character_name}'
|
self.name_format = '{character_name}'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_discord_username(username:str, discriminator:str) -> str:
|
||||||
|
"""
|
||||||
|
Determine the Discord username (Old and new format)
|
||||||
|
:param username:
|
||||||
|
:type username:
|
||||||
|
:param discriminator:
|
||||||
|
:type discriminator:
|
||||||
|
:return:
|
||||||
|
:rtype:
|
||||||
|
"""
|
||||||
|
|
||||||
|
if username and discriminator:
|
||||||
|
discord_username = f'{username}#{discriminator}'
|
||||||
|
|
||||||
|
# New Discord user name format
|
||||||
|
if discriminator == '0':
|
||||||
|
discord_username = f'@{username}'
|
||||||
|
else:
|
||||||
|
discord_username = ''
|
||||||
|
|
||||||
|
return discord_username
|
||||||
|
|
||||||
def delete_user(self, user: User, notify_user: bool = False) -> None:
|
def delete_user(self, user: User, notify_user: bool = False) -> None:
|
||||||
if self.user_has_account(user):
|
if self.user_has_account(user):
|
||||||
logger.debug('Deleting user %s %s account', user, self.name)
|
logger.debug('Deleting user %s %s account', user, self.name)
|
||||||
@@ -43,10 +69,19 @@ class DiscordService(ServicesHook):
|
|||||||
user_has_account = True
|
user_has_account = True
|
||||||
username = request.user.discord.username
|
username = request.user.discord.username
|
||||||
discriminator = request.user.discord.discriminator
|
discriminator = request.user.discord.discriminator
|
||||||
if username and discriminator:
|
|
||||||
discord_username = f'{username}#{discriminator}'
|
discord_username = self.get_discord_username(
|
||||||
else:
|
username=username, discriminator=discriminator
|
||||||
discord_username = ''
|
)
|
||||||
|
|
||||||
|
# if username and discriminator:
|
||||||
|
# discord_username = f'{username}#{discriminator}'
|
||||||
|
#
|
||||||
|
# # New Discord user name format
|
||||||
|
# if discriminator == '0':
|
||||||
|
# discord_username = f'@{username}'
|
||||||
|
# else:
|
||||||
|
# discord_username = ''
|
||||||
else:
|
else:
|
||||||
discord_username = ''
|
discord_username = ''
|
||||||
user_has_account = False
|
user_has_account = False
|
||||||
@@ -67,17 +102,18 @@ class DiscordService(ServicesHook):
|
|||||||
return has_perms
|
return has_perms
|
||||||
|
|
||||||
def sync_nickname(self, user):
|
def sync_nickname(self, user):
|
||||||
logger.debug('Syncing %s nickname for user %s', self.name, user)
|
if DISCORD_SYNC_NAMES:
|
||||||
if self.user_has_account(user):
|
logger.debug('Syncing %s nickname for user %s', self.name, user)
|
||||||
tasks.update_nickname.apply_async(
|
if self.user_has_account(user):
|
||||||
kwargs={
|
tasks.update_nickname.apply_async(
|
||||||
'user_pk': user.pk,
|
kwargs={
|
||||||
# since the new nickname is not yet in the DB we need to
|
'user_pk': user.pk,
|
||||||
# provide it manually to the task
|
# since the new nickname is not yet in the DB we need to
|
||||||
'nickname': user_formatted_nick(user)
|
# provide it manually to the task
|
||||||
},
|
'nickname': user_formatted_nick(user)
|
||||||
priority=SINGLE_TASK_PRIORITY
|
},
|
||||||
)
|
priority=SINGLE_TASK_PRIORITY
|
||||||
|
)
|
||||||
|
|
||||||
def sync_nicknames_bulk(self, users: list):
|
def sync_nicknames_bulk(self, users: list):
|
||||||
"""Sync nickname for a list of users in bulk.
|
"""Sync nickname for a list of users in bulk.
|
||||||
|
|||||||
@@ -588,16 +588,17 @@ class DiscordClient:
|
|||||||
return None # User is no longer a member
|
return None # User is no longer a member
|
||||||
guild_roles = RolesSet(self.guild_roles(guild_id=guild_id))
|
guild_roles = RolesSet(self.guild_roles(guild_id=guild_id))
|
||||||
logger.debug('Current guild roles: %s', guild_roles.ids())
|
logger.debug('Current guild roles: %s', guild_roles.ids())
|
||||||
|
_roles = set(member_info.roles)
|
||||||
if not guild_roles.has_roles(member_info.roles):
|
if not guild_roles.has_roles(member_info.roles):
|
||||||
guild_roles = RolesSet(
|
guild_roles = RolesSet(
|
||||||
self.guild_roles(guild_id=guild_id, use_cache=False)
|
self.guild_roles(guild_id=guild_id, use_cache=False)
|
||||||
)
|
)
|
||||||
if not guild_roles.has_roles(member_info.roles):
|
if not guild_roles.has_roles(member_info.roles):
|
||||||
role_ids = set(member_info.roles).difference(guild_roles.ids())
|
role_ids = set(member_info.roles).difference(guild_roles.ids())
|
||||||
raise RuntimeError(
|
logger.warning(f'Discord user {user_id} has unknown roles: {role_ids}')
|
||||||
f'Discord user {user_id} has unknown roles: {role_ids}'
|
for _r in role_ids:
|
||||||
)
|
_roles.remove(_r)
|
||||||
return guild_roles.subset(member_info.roles)
|
return guild_roles.subset(_roles)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _is_member_unknown_error(cls, r: requests.Response) -> bool:
|
def _is_member_unknown_error(cls, r: requests.Response) -> bool:
|
||||||
|
|||||||
@@ -899,8 +899,8 @@ class TestGuildMemberRoles(NoSocketsTestCase):
|
|||||||
mock_guild_roles.return_value = {role_a, role_b}
|
mock_guild_roles.return_value = {role_a, role_b}
|
||||||
client = DiscordClientStub(TEST_BOT_TOKEN, mock_redis)
|
client = DiscordClientStub(TEST_BOT_TOKEN, mock_redis)
|
||||||
# when/then
|
# when/then
|
||||||
with self.assertRaises(RuntimeError):
|
roles = client.guild_member_roles(TEST_GUILD_ID, TEST_USER_ID)
|
||||||
client.guild_member_roles(TEST_GUILD_ID, TEST_USER_ID)
|
self.assertEqual(roles, RolesSet([role_a]))
|
||||||
|
|
||||||
# TODO: Re-enable after adding Discord general error handling
|
# TODO: Re-enable after adding Discord general error handling
|
||||||
# def test_should_raise_exception_if_member_info_is_invalid(
|
# def test_should_raise_exception_if_member_info_is_invalid(
|
||||||
|
|||||||
0
allianceauth/services/modules/discord/tests/piloting_tasks.py
Executable file → Normal file
0
allianceauth/services/modules/discord/tests/piloting_tasks.py
Executable file → Normal file
@@ -81,11 +81,18 @@ class TestDiscordService(NoSocketsTestCase):
|
|||||||
self.assertFalse(DiscordUser.objects.filter(user=self.none_member).exists())
|
self.assertFalse(DiscordUser.objects.filter(user=self.none_member).exists())
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.tasks.update_nickname')
|
@patch(MODULE_PATH + '.tasks.update_nickname')
|
||||||
|
@patch(MODULE_PATH + '.auth_hooks.DISCORD_SYNC_NAMES', True)
|
||||||
def test_sync_nickname(self, mock_update_nickname):
|
def test_sync_nickname(self, mock_update_nickname):
|
||||||
service = self.service()
|
service = self.service()
|
||||||
service.sync_nickname(self.member)
|
service.sync_nickname(self.member)
|
||||||
self.assertTrue(mock_update_nickname.apply_async.called)
|
self.assertTrue(mock_update_nickname.apply_async.called)
|
||||||
|
|
||||||
|
@patch(MODULE_PATH + '.tasks.update_nickname')
|
||||||
|
def test_sync_nickname_no_setting(self, mock_update_nickname):
|
||||||
|
service = self.service()
|
||||||
|
service.sync_nickname(self.member)
|
||||||
|
self.assertFalse(mock_update_nickname.apply_async.called)
|
||||||
|
|
||||||
@patch(MODULE_PATH + '.tasks.update_nicknames_bulk')
|
@patch(MODULE_PATH + '.tasks.update_nicknames_bulk')
|
||||||
def test_sync_nicknames_bulk(self, mock_update_nicknames_bulk):
|
def test_sync_nicknames_bulk(self, mock_update_nicknames_bulk):
|
||||||
service = self.service()
|
service = self.service()
|
||||||
@@ -150,3 +157,23 @@ class TestDiscordService(NoSocketsTestCase):
|
|||||||
self.assertTemplateUsed(service.service_ctrl_template)
|
self.assertTemplateUsed(service.service_ctrl_template)
|
||||||
self.assertIn('/discord/reset/', response)
|
self.assertIn('/discord/reset/', response)
|
||||||
self.assertIn('/discord/deactivate/', response)
|
self.assertIn('/discord/deactivate/', response)
|
||||||
|
|
||||||
|
def test_new_discord_username_format(self):
|
||||||
|
"""
|
||||||
|
Test if we get Discord's new username format
|
||||||
|
:return:
|
||||||
|
:rtype:
|
||||||
|
"""
|
||||||
|
|
||||||
|
# given
|
||||||
|
username = 'william_riker'
|
||||||
|
discriminator = '0' # Seems to be returned as 0 for Discord's new username format
|
||||||
|
|
||||||
|
# when
|
||||||
|
discord_username = DiscordService.get_discord_username(
|
||||||
|
username=username, discriminator=discriminator
|
||||||
|
)
|
||||||
|
|
||||||
|
# then
|
||||||
|
expected_username = '@william_riker'
|
||||||
|
self.assertEqual(first=discord_username, second=expected_username)
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ class TestServiceFeatures(TransactionTestCase):
|
|||||||
self.discord_user = DiscordUser.objects.create(user=self.user, uid=TEST_USER_ID)
|
self.discord_user = DiscordUser.objects.create(user=self.user, uid=TEST_USER_ID)
|
||||||
self.assertTrue(DiscordUser.objects.user_has_account(self.user))
|
self.assertTrue(DiscordUser.objects.user_has_account(self.user))
|
||||||
|
|
||||||
|
@patch(MODULE_PATH + '.auth_hooks.DISCORD_SYNC_NAMES', True)
|
||||||
def test_when_name_of_main_changes_then_discord_nick_is_updated(
|
def test_when_name_of_main_changes_then_discord_nick_is_updated(
|
||||||
self, requests_mocker
|
self, requests_mocker
|
||||||
):
|
):
|
||||||
@@ -185,6 +186,7 @@ class TestServiceFeatures(TransactionTestCase):
|
|||||||
self.assertTrue(nick_updated)
|
self.assertTrue(nick_updated)
|
||||||
self.assertTrue(DiscordUser.objects.user_has_account(self.user))
|
self.assertTrue(DiscordUser.objects.user_has_account(self.user))
|
||||||
|
|
||||||
|
@patch(MODULE_PATH + '.auth_hooks.DISCORD_SYNC_NAMES', True)
|
||||||
def test_when_name_of_main_changes_and_user_deleted_then_account_is_deleted(
|
def test_when_name_of_main_changes_and_user_deleted_then_account_is_deleted(
|
||||||
self, requests_mocker
|
self, requests_mocker
|
||||||
):
|
):
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from django.conf.urls import include
|
from django.urls import include, path
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class DiscourseTasks:
|
|||||||
DiscourseManager.update_groups(user)
|
DiscourseManager.update_groups(user)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(e)
|
logger.exception(e)
|
||||||
logger.warn("Discourse group sync failed for %s, retrying in 10 mins" % user)
|
logger.warning("Discourse group sync failed for %s, retrying in 10 mins" % user)
|
||||||
raise self.retry(countdown=60 * 10)
|
raise self.retry(countdown=60 * 10)
|
||||||
logger.debug("Updated user %s discourse groups." % user)
|
logger.debug("Updated user %s discourse groups." % user)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from django.conf.urls import include
|
from django.urls import include, path
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
app_name = 'example'
|
app_name = 'example'
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ from django.contrib import admin
|
|||||||
from .models import Ips4User
|
from .models import Ips4User
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(Ips4User)
|
||||||
class Ips4UserAdmin(admin.ModelAdmin):
|
class Ips4UserAdmin(admin.ModelAdmin):
|
||||||
list_display = ('user', 'username', 'id')
|
list_display = ('user', 'username', 'id')
|
||||||
search_fields = ('user__username', 'username', 'id')
|
search_fields = ('user__username', 'username', 'id')
|
||||||
|
|
||||||
admin.site.register(Ips4User, Ips4UserAdmin)
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from django.conf.urls import include
|
from django.urls import include, path
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="text-center">{{ service_name }}</td>
|
<td class="text-center">{{ service_name }}</td>
|
||||||
<td class="text-center">{{ username }}</td>
|
<td class="text-center">{{ username }}</td>
|
||||||
<td class="text-center"><a href="mumble://{{ service_url }}">{{ service_url }}</a></td>
|
|
||||||
<td class="text-center">
|
|
||||||
{% if username == "" %}
|
{% if username == "" %}
|
||||||
|
<td class="text-center">{{ service_url }}</td>
|
||||||
|
<td class="text-center">
|
||||||
<a href="{% url 'mumble:activate' %}" title="Activate" class="btn btn-warning">
|
<a href="{% url 'mumble:activate' %}" title="Activate" class="btn btn-warning">
|
||||||
<span class="glyphicon glyphicon-ok"></span>
|
<span class="glyphicon glyphicon-ok"></span>
|
||||||
</a>
|
</a>
|
||||||
|
</td>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
<td class="text-center"><a href="mumble://{{ connect_url }}">{{ service_url }}</a></td>
|
||||||
|
<td class="text-center">
|
||||||
<a href="{% url 'mumble:set_password' %}" title="Set Password" class="btn btn-warning">
|
<a href="{% url 'mumble:set_password' %}" title="Set Password" class="btn btn-warning">
|
||||||
<span class="glyphicon glyphicon-pencil"></span>
|
<span class="glyphicon glyphicon-pencil"></span>
|
||||||
</a>
|
</a>
|
||||||
@@ -17,9 +20,9 @@
|
|||||||
<a href="{% url 'mumble:deactivate' %}" title="Deactivate" class="btn btn-danger">
|
<a href="{% url 'mumble:deactivate' %}" title="Deactivate" class="btn btn-danger">
|
||||||
<span class="glyphicon glyphicon-remove"></span>
|
<span class="glyphicon glyphicon-remove"></span>
|
||||||
</a>
|
</a>
|
||||||
<a href="mumble://{{ connect_url }}" class="btn btn-success" title="Connect">
|
<a href="mumble://{{ connect_url }}" class="btn btn-success" title="Connect">
|
||||||
<span class="glyphicon glyphicon-arrow-right"></span>
|
<span class="glyphicon glyphicon-arrow-right"></span>
|
||||||
</a>
|
</a>
|
||||||
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from django.conf.urls import include
|
from django.urls import include, path
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|||||||
0
allianceauth/services/modules/openfire/manager.py
Executable file → Normal file
0
allianceauth/services/modules/openfire/manager.py
Executable file → Normal file
0
allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html
Executable file → Normal file
0
allianceauth/services/modules/openfire/templates/services/openfire/broadcast.html
Executable file → Normal file
@@ -1,5 +1,4 @@
|
|||||||
from django.conf.urls import include
|
from django.urls import include, path
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|||||||
2
allianceauth/services/modules/phpbb3/manager.py
Executable file → Normal file
2
allianceauth/services/modules/phpbb3/manager.py
Executable file → Normal file
@@ -176,7 +176,7 @@ class Phpbb3Manager:
|
|||||||
logger.debug(f"Proceeding to add phpbb user {username_clean} and pwhash starting with {pwhash[0:5]}")
|
logger.debug(f"Proceeding to add phpbb user {username_clean} and pwhash starting with {pwhash[0:5]}")
|
||||||
# check if the username was simply revoked
|
# check if the username was simply revoked
|
||||||
if Phpbb3Manager.check_user(username_clean):
|
if Phpbb3Manager.check_user(username_clean):
|
||||||
logger.warn("Unable to add phpbb user with username %s - already exists. Updating user instead." % username)
|
logger.warning("Unable to add phpbb user with username %s - already exists. Updating user instead." % username)
|
||||||
Phpbb3Manager.__update_user_info(username_clean, email, pwhash)
|
Phpbb3Manager.__update_user_info(username_clean, email, pwhash)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from django.conf.urls import include
|
from django.urls import include, path
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from django.conf.urls import include
|
from django.urls import include, path
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|||||||
@@ -36,10 +36,12 @@ class AuthTSgroupAdmin(admin.ModelAdmin):
|
|||||||
kwargs['queryset'] = TSgroup.objects.exclude(ts_group_name__in=ReservedGroupName.objects.values_list('name', flat=True))
|
kwargs['queryset'] = TSgroup.objects.exclude(ts_group_name__in=ReservedGroupName.objects.values_list('name', flat=True))
|
||||||
return super().formfield_for_manytomany(db_field, request, **kwargs)
|
return super().formfield_for_manytomany(db_field, request, **kwargs)
|
||||||
|
|
||||||
|
@admin.display(
|
||||||
|
description='ts groups'
|
||||||
|
)
|
||||||
def _ts_group(self, obj):
|
def _ts_group(self, obj):
|
||||||
return [x for x in obj.ts_group.all().order_by('ts_group_id')]
|
return [x for x in obj.ts_group.all().order_by('ts_group_id')]
|
||||||
|
|
||||||
_ts_group.short_description = 'ts groups'
|
|
||||||
# _ts_group.admin_order_field = 'profile__state'
|
# _ts_group.admin_order_field = 'profile__state'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
0
allianceauth/services/modules/teamspeak3/manager.py
Executable file → Normal file
0
allianceauth/services/modules/teamspeak3/manager.py
Executable file → Normal file
@@ -457,7 +457,7 @@ class Teamspeak3AdminTestCase(TestCase):
|
|||||||
cls.site = AdminSite()
|
cls.site = AdminSite()
|
||||||
cls.admin = AuthTSgroupAdmin(AuthTS, cls.site)
|
cls.admin = AuthTSgroupAdmin(AuthTS, cls.site)
|
||||||
cls.group = Group.objects.create(name='test')
|
cls.group = Group.objects.create(name='test')
|
||||||
cls.ts_group = TSgroup.objects.create(ts_group_name='test')
|
cls.ts_group = TSgroup.objects.create(ts_group_id=1, ts_group_name='test')
|
||||||
|
|
||||||
def test_field_queryset_no_reserved_names(self):
|
def test_field_queryset_no_reserved_names(self):
|
||||||
"""Ensure all groups are listed when no reserved names"""
|
"""Ensure all groups are listed when no reserved names"""
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from django.conf.urls import include
|
from django.urls import include, path
|
||||||
from django.urls import path
|
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|||||||
0
allianceauth/services/modules/teamspeak3/util/__init__.py
Executable file → Normal file
0
allianceauth/services/modules/teamspeak3/util/__init__.py
Executable file → Normal file
0
allianceauth/services/modules/teamspeak3/util/ts3.py
Executable file → Normal file
0
allianceauth/services/modules/teamspeak3/util/ts3.py
Executable file → Normal file
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user