mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-13 10:36:25 +01:00
Compare commits
97 Commits
v4.9.0
...
af872caaaa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af872caaaa | ||
|
|
bca4f7e2f4 | ||
|
|
b5075089f0 | ||
|
|
8228209383 | ||
|
|
88ef2138ca | ||
|
|
44bae0162a | ||
|
|
190ef15c2c | ||
|
|
2615b76762 | ||
|
|
4e36ed77a1 | ||
|
|
49c748b46e | ||
|
|
4104555f55 | ||
|
|
e46c9b66f1 | ||
|
|
1a5ff48ae7 | ||
|
|
528febf678 | ||
|
|
4e16140d03 | ||
|
|
14c5aecd59 | ||
|
|
b78c778e4e | ||
|
|
724fa99ef4 | ||
|
|
e02e31ba34 | ||
|
|
30ab2f95e4 | ||
|
|
086dc9e5eb | ||
|
|
c679ec0646 | ||
|
|
69a51bb08a | ||
|
|
442c893c39 | ||
|
|
33df15f882 | ||
|
|
5d56f0a66c | ||
|
|
0fbdbf3a8d | ||
|
|
5291bf6896 | ||
|
|
bd6c0fede5 | ||
|
|
23fe1703c3 | ||
|
|
9139b0da56 | ||
|
|
80145b313f | ||
|
|
e96bdd12f9 | ||
|
|
513b7b88f4 | ||
|
|
5e3fc5c1cb | ||
|
|
d3069db046 | ||
|
|
24863eaf9e | ||
|
|
d138bd61c5 | ||
|
|
bff20ddd5d | ||
|
|
493e694410 | ||
|
|
8c41d9da58 | ||
|
|
9e0358a3ce | ||
|
|
19bb6856a2 | ||
|
|
9751315b97 | ||
|
|
99df847e1f | ||
|
|
60ba82c653 | ||
|
|
bd7f13358a | ||
|
|
4edd0fab9e | ||
|
|
fced909b4d | ||
|
|
e2b96da460 | ||
|
|
ecd27b823e | ||
|
|
dae4afddb1 | ||
|
|
d507663316 | ||
|
|
67081ab465 | ||
|
|
bce90344f8 | ||
|
|
29c6fa292a | ||
|
|
295361a541 | ||
|
|
92a1bd40a3 | ||
|
|
b8bbd0d1c1 | ||
|
|
b7a6c9379a | ||
|
|
e5f3a67919 | ||
|
|
58cc4b84dd | ||
|
|
331dc7d4d0 | ||
|
|
01991b78c9 | ||
|
|
466113e6cb | ||
|
|
b1f5aad9f9 | ||
|
|
464016ac05 | ||
|
|
cc76f09a6e | ||
|
|
a7f6a74211 | ||
|
|
8898c665cf | ||
|
|
313305ab22 | ||
|
|
86559fc11f | ||
|
|
1835b04dc8 | ||
|
|
30180f9fe9 | ||
|
|
f1eac7b84f | ||
|
|
793df66f7a | ||
|
|
188295daac | ||
|
|
0447697106 | ||
|
|
1608950d43 | ||
|
|
23c283c0bb | ||
|
|
b76fa4282a | ||
|
|
d88cb57cf0 | ||
|
|
787140dd7e | ||
|
|
735e890de4 | ||
|
|
77caa5543d | ||
|
|
b2f0962527 | ||
|
|
efc0fcf11d | ||
|
|
1b49ea571e | ||
|
|
3c21a3857a | ||
|
|
d0a769f524 | ||
|
|
222547187e | ||
|
|
ce872d67bb | ||
|
|
fcffb3d2ff | ||
|
|
1930dfab77 | ||
|
|
b4418c8c36 | ||
|
|
295e5a04d8 | ||
|
|
d67ab108a0 |
@@ -25,7 +25,7 @@ before_script:
|
||||
pre-commit-check:
|
||||
<<: *only-default
|
||||
stage: pre-commit
|
||||
image: python:3.11-bookworm
|
||||
image: python:3.11-trixie
|
||||
# variables:
|
||||
# PRE_COMMIT_HOME: ${CI_PROJECT_DIR}/.cache/pre-commit
|
||||
# cache:
|
||||
@@ -65,7 +65,7 @@ test-3.8-core:
|
||||
|
||||
test-3.9-core:
|
||||
<<: *only-default
|
||||
image: python:3.9-bookworm
|
||||
image: python:3.9-trixie
|
||||
script:
|
||||
- tox -e py39-core
|
||||
artifacts:
|
||||
@@ -77,7 +77,7 @@ test-3.9-core:
|
||||
|
||||
test-3.10-core:
|
||||
<<: *only-default
|
||||
image: python:3.10-bookworm
|
||||
image: python:3.10-trixie
|
||||
script:
|
||||
- tox -e py310-core
|
||||
artifacts:
|
||||
@@ -89,7 +89,7 @@ test-3.10-core:
|
||||
|
||||
test-3.11-core:
|
||||
<<: *only-default
|
||||
image: python:3.11-bookworm
|
||||
image: python:3.11-trixie
|
||||
script:
|
||||
- tox -e py311-core
|
||||
artifacts:
|
||||
@@ -101,7 +101,7 @@ test-3.11-core:
|
||||
|
||||
test-3.12-core:
|
||||
<<: *only-default
|
||||
image: python:3.12-bookworm
|
||||
image: python:3.12-trixie
|
||||
script:
|
||||
- tox -e py312-core
|
||||
artifacts:
|
||||
@@ -125,7 +125,7 @@ test-3.8-all:
|
||||
|
||||
test-3.9-all:
|
||||
<<: *only-default
|
||||
image: python:3.9-bookworm
|
||||
image: python:3.9-trixie
|
||||
script:
|
||||
- tox -e py39-all
|
||||
artifacts:
|
||||
@@ -137,7 +137,7 @@ test-3.9-all:
|
||||
|
||||
test-3.10-all:
|
||||
<<: *only-default
|
||||
image: python:3.10-bookworm
|
||||
image: python:3.10-trixie
|
||||
script:
|
||||
- tox -e py310-all
|
||||
artifacts:
|
||||
@@ -149,7 +149,7 @@ test-3.10-all:
|
||||
|
||||
test-3.11-all:
|
||||
<<: *only-default
|
||||
image: python:3.11-bookworm
|
||||
image: python:3.11-trixie
|
||||
script:
|
||||
- tox -e py311-all
|
||||
artifacts:
|
||||
@@ -162,7 +162,7 @@ test-3.11-all:
|
||||
|
||||
test-3.12-all:
|
||||
<<: *only-default
|
||||
image: python:3.12-bookworm
|
||||
image: python:3.12-trixie
|
||||
script:
|
||||
- tox -e py312-all
|
||||
artifacts:
|
||||
@@ -174,7 +174,7 @@ test-3.12-all:
|
||||
|
||||
build-test:
|
||||
stage: test
|
||||
image: python:3.11-bookworm
|
||||
image: python:3.11-trixie
|
||||
|
||||
before_script:
|
||||
- python -m pip install --upgrade pip
|
||||
@@ -193,13 +193,13 @@ build-test:
|
||||
|
||||
test-docs:
|
||||
<<: *only-default
|
||||
image: python:3.11-bookworm
|
||||
image: python:3.11-trixie
|
||||
script:
|
||||
- tox -e docs
|
||||
|
||||
deploy_production:
|
||||
stage: deploy
|
||||
image: python:3.11-bookworm
|
||||
image: python:3.11-trixie
|
||||
|
||||
before_script:
|
||||
- python -m pip install --upgrade pip
|
||||
|
||||
@@ -25,19 +25,19 @@ exclude: |
|
||||
repos:
|
||||
# Code Upgrades
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v3.20.0
|
||||
rev: v3.21.1
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
args: [--py38-plus]
|
||||
- repo: https://github.com/adamchainz/django-upgrade
|
||||
rev: 1.25.0
|
||||
rev: 1.29.1
|
||||
hooks:
|
||||
- id: django-upgrade
|
||||
args: [--target-version=4.2]
|
||||
|
||||
# Formatting
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v5.0.0
|
||||
rev: v6.0.0
|
||||
hooks:
|
||||
# Identify invalid files
|
||||
- id: check-ast
|
||||
@@ -55,8 +55,6 @@ repos:
|
||||
# - id: check-docstring-first
|
||||
- id: debug-statements
|
||||
# - id: requirements-txt-fixer
|
||||
- id: fix-encoding-pragma
|
||||
args: [--remove]
|
||||
- id: fix-byte-order-marker
|
||||
# General quality checks
|
||||
- id: mixed-line-ending
|
||||
@@ -66,7 +64,7 @@ repos:
|
||||
- id: check-executables-have-shebangs
|
||||
- id: end-of-file-fixer
|
||||
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
|
||||
rev: 3.2.1
|
||||
rev: 3.4.1
|
||||
hooks:
|
||||
- id: editorconfig-checker
|
||||
- repo: https://github.com/igorshubovych/markdownlint-cli
|
||||
@@ -78,7 +76,7 @@ repos:
|
||||
- --disable=MD013
|
||||
# Infrastructure
|
||||
- repo: https://github.com/tox-dev/pyproject-fmt
|
||||
rev: v2.6.0
|
||||
rev: v2.11.1
|
||||
hooks:
|
||||
- id: pyproject-fmt
|
||||
name: pyproject.toml formatter
|
||||
@@ -86,7 +84,7 @@ repos:
|
||||
args:
|
||||
- --indent=4
|
||||
additional_dependencies:
|
||||
- tox==4.24.1 # https://github.com/tox-dev/tox/releases/latest
|
||||
- tox==4.32.0 # https://github.com/tox-dev/tox/releases/latest
|
||||
- repo: https://github.com/abravalheri/validate-pyproject
|
||||
rev: v0.24.1
|
||||
hooks:
|
||||
|
||||
1
CODEOWNERS
Normal file
1
CODEOWNERS
Normal file
@@ -0,0 +1 @@
|
||||
* @allianceauth
|
||||
@@ -89,6 +89,6 @@ Alliance Auth is maintained and developed by the community and we welcome every
|
||||
|
||||
To see what needs to be worked on please review our issue list or chat with our active developers on Discord.
|
||||
|
||||
Also, please make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at [https://developers.eveonline.com](https://developers.eveonline.com) before submitting any pull requests.
|
||||
Also, please make sure you have signed the [License Agreement](https://developers.eveonline.com/license-agreement) by logging in at [https://developers.eveonline.com](https://developers.eveonline.com) before submitting any pull requests.
|
||||
|
||||
In addition to the core AA system we also very much welcome contributions to our growing list of 3rd party services and plugin apps. Please see [AA Community Creations](https://gitlab.com/allianceauth/community-creations) for details.
|
||||
|
||||
@@ -5,7 +5,7 @@ manage online service access.
|
||||
# This will make sure the app is always imported when
|
||||
# Django starts so that shared_task will use this app.
|
||||
|
||||
__version__ = '4.9.0'
|
||||
__version__ = '4.11.1'
|
||||
__title__ = 'Alliance Auth'
|
||||
__title_useragent__ = 'AllianceAuth'
|
||||
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
||||
|
||||
@@ -52,4 +52,10 @@ class UserSettingsMiddleware(MiddlewareMixin):
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
|
||||
# Minimize Menu
|
||||
try:
|
||||
request.session["MINIMIZE_SIDEBAR"] = request.user.profile.minimize_sidebar
|
||||
except Exception as e:
|
||||
pass # We don't care that an anonymous user has no profile (not logged in)
|
||||
|
||||
return response
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Generated by Django 4.2.25 on 2025-10-14 22:02
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("authentication", "0024_alter_userprofile_language"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="userprofile",
|
||||
name="minimize_sidebar",
|
||||
field=models.BooleanField(
|
||||
default=False,
|
||||
help_text="Keep the sidebar menu minimized",
|
||||
verbose_name="Minimize Sidebar Menu",
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -97,7 +97,8 @@ class UserProfile(models.Model):
|
||||
on_delete=models.SET_DEFAULT,
|
||||
default=get_guest_state_pk)
|
||||
language = models.CharField(
|
||||
_("Language"), max_length=10,
|
||||
_("Language"),
|
||||
max_length=10,
|
||||
choices=Language.choices,
|
||||
blank=True,
|
||||
default='')
|
||||
@@ -112,6 +113,12 @@ class UserProfile(models.Model):
|
||||
null=True,
|
||||
help_text="Bootstrap 5 Themes from https://bootswatch.com/ or Community Apps"
|
||||
)
|
||||
minimize_sidebar = models.BooleanField(
|
||||
_("Minimize Sidebar Menu"),
|
||||
default=False,
|
||||
help_text=_("Keep the sidebar menu minimized")
|
||||
)
|
||||
|
||||
|
||||
def assign_state(self, state=None, commit=True):
|
||||
if not state:
|
||||
|
||||
@@ -27,7 +27,7 @@ def dashboard_results(hours: int) -> _TaskCounts:
|
||||
my_earliest = events.first_event(earliest=earliest)
|
||||
return [my_earliest] if my_earliest else []
|
||||
|
||||
earliest = dt.datetime.utcnow() - dt.timedelta(hours=hours)
|
||||
earliest = dt.datetime.now(dt.timezone.utc) - dt.timedelta(hours=hours)
|
||||
earliest_events = []
|
||||
succeeded_count = succeeded_tasks.count(earliest=earliest)
|
||||
earliest_events += earliest_if_exists(succeeded_tasks, earliest)
|
||||
|
||||
@@ -42,7 +42,7 @@ class EventSeries:
|
||||
- event_time: timestamp of event. Will use current time if not specified.
|
||||
"""
|
||||
if not event_time:
|
||||
event_time = dt.datetime.utcnow()
|
||||
event_time = dt.datetime.now(dt.timezone.utc)
|
||||
my_id = self._redis.incr(self._key_counter)
|
||||
self._redis.zadd(self._key_sorted_set, {my_id: event_time.timestamp()})
|
||||
|
||||
|
||||
@@ -88,6 +88,7 @@ class TestUserSettingsMiddlewareLoginFlow(TestCase):
|
||||
self.request.LANGUAGE_CODE = 'en'
|
||||
self.request.user.profile.language = 'de'
|
||||
self.request.user.profile.night_mode = True
|
||||
self.request.user.profile.minimize_sidebar = False
|
||||
self.request.user.is_anonymous = False
|
||||
self.response = Mock()
|
||||
self.response.content = 'hello world'
|
||||
@@ -173,3 +174,26 @@ class TestUserSettingsMiddlewareLoginFlow(TestCase):
|
||||
self.response
|
||||
)
|
||||
self.assertEqual(self.request.session["NIGHT_MODE"], True)
|
||||
|
||||
def test_middleware_set_mimimize_sidebar(self):
|
||||
"""
|
||||
tests the middleware will always set minimize_sidebar to False (default)
|
||||
"""
|
||||
|
||||
response = self.middleware.process_response(
|
||||
self.request,
|
||||
self.response
|
||||
)
|
||||
self.assertEqual(self.request.session["MINIMIZE_SIDEBAR"], False)
|
||||
|
||||
def test_middleware_minimize_sidebar_when_set(self):
|
||||
"""
|
||||
tests the middleware will set mimimize_sidebar to True from DB
|
||||
"""
|
||||
|
||||
self.request.user.profile.minimize_sidebar = True
|
||||
response = self.middleware.process_response(
|
||||
self.request,
|
||||
self.response
|
||||
)
|
||||
self.assertEqual(self.request.session["MINIMIZE_SIDEBAR"], True)
|
||||
|
||||
@@ -9,6 +9,7 @@ from allianceauth.tests.auth_utils import AuthUtils
|
||||
from allianceauth.authentication.constants import ESI_ERROR_MESSAGE_OVERRIDES
|
||||
|
||||
MODULE_PATH = "allianceauth.authentication.views"
|
||||
TEMPLATETAGS_PATH = "allianceauth.templatetags.admin_status"
|
||||
|
||||
|
||||
def jsonresponse_to_dict(response) -> dict:
|
||||
@@ -17,6 +18,7 @@ def jsonresponse_to_dict(response) -> dict:
|
||||
|
||||
@patch(MODULE_PATH + ".queued_tasks_count")
|
||||
@patch(MODULE_PATH + ".active_tasks_count")
|
||||
@patch(MODULE_PATH + "._celery_stats")
|
||||
class TestRunningTasksCount(TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls) -> None:
|
||||
@@ -26,36 +28,64 @@ class TestRunningTasksCount(TestCase):
|
||||
cls.user.is_superuser = True
|
||||
cls.user.save()
|
||||
|
||||
def test_should_return_data(
|
||||
self, mock_active_tasks_count, mock_queued_tasks_count
|
||||
):
|
||||
def test_should_return_data(self, mock_celery_stats, mock_tasks_queued, mock_tasks_running):
|
||||
# given
|
||||
mock_active_tasks_count.return_value = 2
|
||||
mock_queued_tasks_count.return_value = 3
|
||||
mock_tasks_running.return_value = 2
|
||||
mock_tasks_queued.return_value = 3
|
||||
mock_celery_stats.return_value = {
|
||||
"tasks_succeeded": 5,
|
||||
"tasks_retried": 1,
|
||||
"tasks_failed": 4,
|
||||
"tasks_total": 11,
|
||||
"tasks_hours": 24,
|
||||
"earliest_task": "2025-08-14T22:47:54.853Z",
|
||||
}
|
||||
|
||||
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}
|
||||
jsonresponse_to_dict(response),
|
||||
{
|
||||
"tasks_succeeded": 5,
|
||||
"tasks_retried": 1,
|
||||
"tasks_failed": 4,
|
||||
"tasks_total": 11,
|
||||
"tasks_hours": 24,
|
||||
"earliest_task": "2025-08-14T22:47:54.853Z",
|
||||
"tasks_running": 3,
|
||||
"tasks_queued": 2,
|
||||
}
|
||||
)
|
||||
|
||||
def test_su_only(
|
||||
self, mock_active_tasks_count, mock_queued_tasks_count
|
||||
):
|
||||
def test_su_only(self, mock_celery_stats, mock_tasks_queued, mock_tasks_running):
|
||||
self.user.is_superuser = False
|
||||
self.user.save()
|
||||
self.user.refresh_from_db()
|
||||
|
||||
# given
|
||||
mock_active_tasks_count.return_value = 2
|
||||
mock_queued_tasks_count.return_value = 3
|
||||
mock_tasks_running.return_value = 2
|
||||
mock_tasks_queued.return_value = 3
|
||||
mock_celery_stats.return_value = {
|
||||
"tasks_succeeded": 5,
|
||||
"tasks_retried": 1,
|
||||
"tasks_failed": 4,
|
||||
"tasks_total": 11,
|
||||
"tasks_hours": 24,
|
||||
"earliest_task": "2025-08-14T22:47:54.853Z",
|
||||
}
|
||||
|
||||
request = self.factory.get("/")
|
||||
request.user = self.user
|
||||
|
||||
# when
|
||||
response = task_counts(request)
|
||||
|
||||
# then
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ from allianceauth.hooks import get_hooks
|
||||
|
||||
from .constants import ESI_ERROR_MESSAGE_OVERRIDES
|
||||
from .core.celery_workers import active_tasks_count, queued_tasks_count
|
||||
from allianceauth.templatetags.admin_status import _celery_stats
|
||||
from .forms import RegistrationForm
|
||||
from .models import CharacterOwnership
|
||||
|
||||
@@ -370,10 +371,10 @@ def registration_closed(request):
|
||||
@user_passes_test(lambda u: u.is_superuser)
|
||||
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()
|
||||
}
|
||||
data = _celery_stats()
|
||||
data.update(
|
||||
{"tasks_running": active_tasks_count(), "tasks_queued": queued_tasks_count()}
|
||||
)
|
||||
return JsonResponse(data)
|
||||
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ class StartProject(BaseStartProject):
|
||||
parser.add_argument('--celery', help='The path to the celery executable.')
|
||||
parser.add_argument('--gunicorn', help='The path to the gunicorn executable.')
|
||||
parser.add_argument('--memmon', help='The path to the memmon executable.')
|
||||
parser.add_argument('--venv_directory', help='The path to the virtual environment directory.')
|
||||
|
||||
|
||||
def create_project(parser, options, args):
|
||||
@@ -27,7 +28,7 @@ def create_project(parser, options, args):
|
||||
allianceauth_path = os.path.dirname(allianceauth.__file__)
|
||||
template_path = os.path.join(allianceauth_path, 'project_template')
|
||||
|
||||
# Determine locations of commands to render supervisor cond
|
||||
# Determine locations of commands to render supervisor configuration
|
||||
command_options = {
|
||||
'template': template_path,
|
||||
'python': shutil.which('python'),
|
||||
@@ -35,6 +36,7 @@ def create_project(parser, options, args):
|
||||
'celery': shutil.which('celery'),
|
||||
'memmon': shutil.which('memmon'),
|
||||
'extensions': ['py', 'conf', 'json'],
|
||||
'venv_directory': os.getenv('VIRTUAL_ENV'),
|
||||
}
|
||||
|
||||
# Strip 'start' out of the arguments, leaving project name (and optionally destination dir)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
{% endblock header_nav_brand %}
|
||||
|
||||
{% block header_nav_collapse_left %}
|
||||
<li class="nav-item dropdown">
|
||||
<li class="nav-item dropdown mb-2 mb-lg-0">
|
||||
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">
|
||||
{% translate "Corporations" %}
|
||||
</a>
|
||||
@@ -26,11 +26,7 @@
|
||||
{% endfor %}
|
||||
|
||||
{% if perms.corputils.add_corpstats %}
|
||||
{% if available.count >= 1 %}
|
||||
<li> </li>
|
||||
{% endif %}
|
||||
|
||||
<li>
|
||||
<li class="mt-3">
|
||||
<a class="dropdown-item" href="{% url 'corputils:add' %}">
|
||||
{% translate "Add corporation" %}
|
||||
</a>
|
||||
|
||||
@@ -320,8 +320,8 @@ def click_fatlink_view(request, token, fat_hash=None):
|
||||
messages.warning(
|
||||
request,
|
||||
_(
|
||||
f"Cannot register the fleet participation for {character.character_name}. The character needs to be online."
|
||||
),
|
||||
"Cannot register the fleet participation for {character_name}. The character needs to be online."
|
||||
).format(character_name=character.character_name)
|
||||
)
|
||||
|
||||
return redirect('fatlink:view')
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
------------------------------------------------------------------------------------- */
|
||||
@media all {
|
||||
.table {
|
||||
--bs-table-bg: transparent;
|
||||
--bs-table-bg: transparent !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,6 +47,12 @@
|
||||
/* Side Navigation
|
||||
------------------------------------------------------------------------------------- */
|
||||
@media all {
|
||||
.sidemenu-total-notifications-badge {
|
||||
position: absolute;
|
||||
left: 28px;
|
||||
font-size: 42.5% !important;
|
||||
}
|
||||
|
||||
#sidebar > div {
|
||||
width: 325px;
|
||||
}
|
||||
|
||||
@@ -272,6 +272,49 @@ function objectDeepMerge (target, ...sources) {
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a number according to the specified locale.
|
||||
* This function uses the Intl.NumberFormat API to format the number.
|
||||
*
|
||||
* @usage
|
||||
* In your Django template get the current language code:
|
||||
* ```django
|
||||
* {% get_current_language as LANGUAGE_CODE %}
|
||||
* ```
|
||||
* Then use it in your JavaScript:
|
||||
* ```javascript
|
||||
* const userLocale = '{{ LANGUAGE_CODE }}'; // e.g., 'en-US', 'de-DE'
|
||||
* const number = 1234567.89;
|
||||
* const formattedNumber = numberFormatter({
|
||||
* value: number,
|
||||
* locales: userLocale,
|
||||
* options: {
|
||||
* style: 'currency',
|
||||
* currency: 'ISK'
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* // Output will vary based on locale
|
||||
* // e.g., '1,234,567.89' for 'en-US', '1.234.567,89' for 'de-DE'
|
||||
* console.log(formattedNumber);
|
||||
* ```
|
||||
*
|
||||
* @param {number} value The number to format
|
||||
* @param {string | string[]} locales The locale(s) to use for formatting (e.g., 'en-US', 'de-DE', ['en-US', 'de-DE']). If not provided, the browser's default locale will be used and any language settings from the user will be ignored.
|
||||
* @param {Object} [options={}] Additional options for number formatting (see `Intl.NumberFormat` documentation - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat)
|
||||
* @return {string} The formatted number as a string
|
||||
*/
|
||||
const numberFormatter = ({value, locales, options = {}}) => {
|
||||
console.log('Formatting number:', value, 'for locale(s):', locales, 'with options:', options);
|
||||
const formatter = new Intl.NumberFormat(locales, {
|
||||
maximumFractionDigits: 2,
|
||||
minimumFractionDigits: 0,
|
||||
...options
|
||||
});
|
||||
|
||||
return formatter.format(value);
|
||||
};
|
||||
|
||||
/**
|
||||
* When the document is ready …
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<li class="nav-item">
|
||||
<a href="{{ url }}" class="nav-link py-lg-0">
|
||||
<span class="btn btn-{{ btn_modifier|default:'primary' }} d-none d-lg-inline-block">
|
||||
{% if fa_icon and icon_on_desktop %}<i class="{{ fa_icon }} me-2"></i>{% endif %}
|
||||
{{ title }}
|
||||
</span>
|
||||
|
||||
<span class="d-inline-block d-lg-none">
|
||||
{% if fa_icon and icon_on_mobile %}<i class="{{ fa_icon }} fa-fw me-2"></i>{% endif %}
|
||||
{{ title }}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
@@ -0,0 +1,12 @@
|
||||
<li class="nav-item">
|
||||
<a href="{{ url }}" class="nav-link">
|
||||
<span class="d-none d-lg-inline-block" title="{{ title }}">
|
||||
<i class="{{ fa_icon }}"></i>
|
||||
</span>
|
||||
|
||||
<span class="d-inline-block d-lg-none">
|
||||
{% if icon_on_mobile %}<i class="{{ fa_icon }} me-2 fa-fw"></i>{% endif %}
|
||||
{{ title }}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
@@ -15,9 +15,61 @@
|
||||
<animate attributeName="stroke-dasharray" dur="1.5s" calcMode="spline" values="0 150;42 150;42 150;42 150" keyTimes="0;0.475;0.95;1" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" repeatCount="indefinite" />
|
||||
<animate attributeName="stroke-dashoffset" dur="1.5s" calcMode="spline" values="0;-16;-59;-59" keyTimes="0;0.475;0.95;1" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" repeatCount="indefinite" />
|
||||
</circle>
|
||||
|
||||
<animateTransform attributeName="transform" type="rotate" dur="2s" values="0 12 12;360 12 12" repeatCount="indefinite" />
|
||||
</g>
|
||||
</symbol>
|
||||
|
||||
<!-- Mumble Logo -->
|
||||
<symbol id="aa-mumble-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">
|
||||
<defs>
|
||||
<radialGradient id="c" cx="206.64" cy="214.43" r="190.25" gradientTransform="matrix(.97267 .016175 -.016656 .97474 9.2188 2.0744)" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-opacity="0" offset="0" />
|
||||
<stop stop-opacity=".019608" offset=".81721" />
|
||||
<stop stop-opacity=".1451" offset=".89931" />
|
||||
<stop stop-opacity=".20784" offset=".91199" />
|
||||
<stop stop-opacity=".25098" offset=".95598" />
|
||||
<stop stop-opacity=".33333" offset="1" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<g transform="translate(0 -652.36)">
|
||||
<path transform="matrix(1.0811 0 0 1.1043 -22.438 617.98)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" fill="#1a1a1a" stroke="#000" stroke-linejoin="round" stroke-width="4.576" />
|
||||
<path transform="matrix(1.0706 0 0 1.101 -22.082 583.62)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" opacity="0" />
|
||||
<path transform="matrix(1.0423 0 0 1.0695 -13.736 622.74)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" fill="#fff" opacity=".9" />
|
||||
<path transform="matrix(1.0641 0 0 1.0787 -20.794 620.64)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" fill="#fff" stroke="#333" stroke-linejoin="round" stroke-width="1.4127" />
|
||||
<path transform="matrix(1.0857 0 0 1.109 -24.345 616.21)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" fill="none" stroke="#000" stroke-linejoin="round" stroke-width="1.8304" />
|
||||
</g>
|
||||
<g>
|
||||
<path transform="matrix(1.0765 0 0 1.1009 -20.514 -34.696)" d="m385.62 214.43a178.98 174.05 0 1 1-357.96 0 178.98 174.05 0 1 1 357.96 0z" fill="url(#c)" opacity=".75" />
|
||||
</g>
|
||||
<g fill-rule="evenodd">
|
||||
<path transform="matrix(1.05 0 0 1.05 -5.3555 .50955)" d="m152.41 31.61c-24.652-0.61541-49.623 15.705-55.853 40.126-1.4511 5.9204-2.0429 11.533-2.1475 17.251v63.623h25c0.0881-22.382-0.12668-44.644 0.1701-67.072 0.76858-14.243 11.773-29.258 27.049-29.084 0.11203 22.669-0.22918 45.351 0.18004 68.011 1.3028 18.426 18.762 33.676 37.243 32.114 11.546-0.2802 23.178 0.67313 34.648-0.72475 17.466-3.2744 29.553-21.063 27.929-38.449v-60.857c15.888-1.1603 27.938 14.263 28.642 29.084 0.29501 22.427 0.0825 44.692 0.1701 67.072h25v-67.5c-0.81797-7.2761-1.9718-16.18-5.9149-23.198-10.229-20.751-34.153-31.948-56.717-30.261-6.591-0.83713-13.681 3.6197-15.487 9.8666 0.10876 26.739 0.18577 53.486-0.015 80.22-0.75343 11.2-11.79 19.764-22.805 18.342-7.7921 0.33854-16.594 0.0136-21.908-6.6817-7.1623-7.5704-4.7632-18.405-5.1836-27.812 0.0193-21.719-0.0713-43.418 0.1249-65.1-3.2593-6.5913-10.503-9.9936-17.679-8.9119l-1.1877-0.01641-1.2582-0.04042h2.5e-4z" stroke="#fff" />
|
||||
<path d="m107.27 156.26v177.84c-35.128-3.8535-62.737-42.188-62.737-88.922 0-46.734 27.609-85.068 62.737-88.922z" fill="url(#l)" opacity=".9666" />
|
||||
</g>
|
||||
<g fill-rule="evenodd" stroke="#fff">
|
||||
<path transform="matrix(1.05 0 0 1.05 -5.3555 .50955)" d="m290.42 313.16c-0.69916-7e-3 -3.3105-0.57507-3.9404-0.16697 0 0-1.0356 3.0168-4.6042 5.6725-3.1327 2.3314-6.1076 4.5662-9.2946 6.6625-2.8616 1.8823-5.9328 3.9177-8.8098 5.3024-2.264 1.0896-4.114 1.2482-4.114 1.2482h-32.22c-2.0127 0-3.6618 1.5872-3.6618 3.5625v0.875c0 1.9753 1.649 3.5938 3.6618 3.5938h33.879c0.77968 0 3.5971-0.82022 5.2725-1.5553 4.1768-1.8326 6.899-4.166 11.71-7.0274 5.1144-3.2712 14.573-10.886 14.573-10.886 1.6797-1.0883 2.1278-3.289 1.0189-4.9375l-0.47763-0.75c-0.69304-1.0303-1.8278-1.5824-2.9931-1.5938z" />
|
||||
<path transform="matrix(1.05 0 0 1.05 -5.3555 .50955)" d="m288.25 148.44v169.38c33.455-3.67 59.75-40.179 59.75-84.688s-26.295-81.018-59.75-84.688z" opacity=".9666" />
|
||||
<path transform="matrix(1.05 0 0 1.05 -5.3555 .50955)" d="m106.22 149.34v169.38c-33.455-3.67-59.75-40.179-59.75-84.688s26.295-81.018 59.75-84.688z" opacity=".9666" />
|
||||
<path transform="matrix(1.3048 0 0 1.2146 -20.461 -43.8)" d="m194.74 325.86a22.13 13.831 0 1 1-44.26 0 22.13 13.831 0 1 1 44.26 0z" opacity=".9666" />
|
||||
<rect transform="matrix(1.0433 0 0 1.05 -4.6563 .094873)" x="274.72" y="146.09" width="13.329" height="171.95" rx="3.8877" ry="3.5401" opacity=".9666" stroke-width="1.0538" />
|
||||
<rect transform="matrix(1.0433 0 0 1.05 -3.8348 .094873)" x="106.56" y="147.08" width="13.063" height="171.96" rx="3.8101" ry="3.5403" opacity=".9666" stroke-width="1.0432" />
|
||||
</g>
|
||||
<g>
|
||||
<rect x="131.64" y="188.83" width="140.83" height="111.89" fill-rule="evenodd" />
|
||||
<path transform="matrix(1.1007 0 0 2.0001 -23.812 -190.28)" d="m189.84 226.69c-4e-5 2.3125-0.43754 4.3438-1.3125 6.0938-0.87504 1.75-2.0521 3.1979-3.5312 4.3438-1.75 1.375-3.6719 2.3542-5.7656 2.9375-2.0938 0.58334-4.7552 0.875-7.9844 0.875h-18.625v-46.531h16.438c3.4166 5e-5 6.0052 0.13026 7.7656 0.39063 1.7604 0.26046 3.4114 0.80734 4.9531 1.6406 1.6666 0.89588 2.9114 2.0938 3.7344 3.5938 0.82288 1.5 1.2343 3.2292 1.2344 5.1875-4e-5 2.2709-0.56775 4.2917-1.7031 6.0625-1.1354 1.7709-2.7032 3.073-4.7031 3.9062v0.25c2.875 0.6042 5.177 1.8386 6.9062 3.7031 1.7291 1.8646 2.5937 4.3802 2.5938 7.5469zm-14.969-19.125c-3e-5 -0.74996-0.19274-1.5208-0.57813-2.3125-0.38544-0.79163-0.9844-1.3645-1.7969-1.7188-0.77086-0.33329-1.6823-0.51558-2.7344-0.54687-1.0521-0.0312-2.6198-0.0468-4.7031-0.0469h-0.8125v9.8438h1.4688c2 3e-5 3.401-0.0208 4.2031-0.0625 0.80207-0.0416 1.6302-0.26038 2.4844-0.65625 0.93747-0.43747 1.5833-1.0416 1.9375-1.8125 0.35414-0.7708 0.53122-1.6666 0.53125-2.6875zm2.9375 18.906c-3e-5 -1.4375-0.2917-2.5625-0.875-3.375-0.58336-0.81248-1.4584-1.4271-2.625-1.8438-0.70836-0.27081-1.6823-0.42185-2.9219-0.45312-1.2396-0.0312-2.9011-0.0469-4.9844-0.0469h-2.1562v11.656h0.625c3.0416 1e-5 5.1458-0.0208 6.3125-0.0625 1.1666-0.0416 2.3541-0.3229 3.5625-0.84375 1.0625-0.45832 1.8385-1.1302 2.3281-2.0156 0.48956-0.88541 0.73435-1.8906 0.73438-3.0156z" fill="url(#f)" />
|
||||
<path transform="matrix(1.1007 0 0 2.0001 -28.291 -190.6)" d="m189.84 226.69c-4e-5 2.3125-0.43754 4.3438-1.3125 6.0938-0.87504 1.75-2.0521 3.1979-3.5312 4.3438-1.75 1.375-3.6719 2.3542-5.7656 2.9375-2.0938 0.58334-4.7552 0.875-7.9844 0.875h-18.625v-46.531h16.438c3.4166 5e-5 6.0052 0.13026 7.7656 0.39063 1.7604 0.26046 3.4114 0.80734 4.9531 1.6406 1.6666 0.89588 2.9114 2.0938 3.7344 3.5938 0.82288 1.5 1.2343 3.2292 1.2344 5.1875-4e-5 2.2709-0.56775 4.2917-1.7031 6.0625-1.1354 1.7709-2.7032 3.073-4.7031 3.9062v0.25c2.875 0.6042 5.177 1.8386 6.9062 3.7031 1.7291 1.8646 2.5937 4.3802 2.5938 7.5469zm-14.969-19.125c-3e-5 -0.74996-0.19274-1.5208-0.57813-2.3125-0.38544-0.79163-0.9844-1.3645-1.7969-1.7188-0.77086-0.33329-1.6823-0.51558-2.7344-0.54687-1.0521-0.0312-2.6198-0.0468-4.7031-0.0469h-0.8125v9.8438h1.4688c2 3e-5 3.401-0.0208 4.2031-0.0625 0.80207-0.0416 1.6302-0.26038 2.4844-0.65625 0.93747-0.43747 1.5833-1.0416 1.9375-1.8125 0.35414-0.7708 0.53122-1.6666 0.53125-2.6875zm2.9375 18.906c-3e-5 -1.4375-0.2917-2.5625-0.875-3.375-0.58336-0.81248-1.4584-1.4271-2.625-1.8438-0.70836-0.27081-1.6823-0.42185-2.9219-0.45312-1.2396-0.0312-2.9011-0.0469-4.9844-0.0469h-2.1562v11.656h0.625c3.0416 1e-5 5.1458-0.0208 6.3125-0.0625 1.1666-0.0416 2.3541-0.3229 3.5625-0.84375 1.0625-0.45832 1.8385-1.1302 2.3281-2.0156 0.48956-0.88541 0.73435-1.8906 0.73438-3.0156z" fill="#fff" />
|
||||
<path transform="matrix(1.1007 0 0 2.0001 -23.812 -190.28)" d="m227.56 240.94h-31.062v-46.531h11.688v37.656h19.375z" fill="url(#e)" />
|
||||
<path d="m187.31 197.56v94.531h14.125 0.0625 21.375v-19.25h-21.375v-75.281h-14.188z" fill="#fff" />
|
||||
<path transform="matrix(1.1007 0 0 2.0001 -23.812 -190.28)" d="m233.12 240.94v-46.531h31.469v8.875h-19.844v8.1562h18.281v8.875h-18.281v11.75h19.844v8.875z" fill="url(#d)" />
|
||||
<path d="m227.81 197.5v94.531h14.188 21.375v-19.25h-21.375v-22.281h19.656v-18.656h-19.656v-15.094h21.375v-19.25h-21.375-0.0625-14.125z" fill="#fff" />
|
||||
</g>
|
||||
<g fill-rule="evenodd">
|
||||
<path d="m155.37 33.01c-25.884-0.64618-52.104 16.49-58.645 42.133-1.5237 6.2165-2.1451 12.11-2.2549 18.114v66.804h26.25c0.0925-23.501-0.13301-46.876 0.17861-70.426 0.807-14.955 12.362-30.721 28.401-30.539 0.11763 23.802-0.24064 47.619 0.18905 71.412 1.368 19.347 19.7 35.36 39.106 33.72 12.123-0.29421 24.336 0.70678 36.38-0.76099 18.339-3.4381 31.031-22.116 29.325-40.372v-63.9c16.682-1.2183 29.334 14.976 30.074 30.539 0.30976 23.549 0.0866 46.927 0.17861 70.426h26.25v-70.875c-0.85887-7.6399-2.0704-16.989-6.2106-24.358-10.74-21.789-35.861-33.545-59.553-31.774-6.9206-0.87899-14.366 3.8007-16.261 10.36 0.1142 28.075 0.19506 56.161-0.0157 84.231-0.7911 11.76-12.38 20.752-23.945 19.259-8.1817 0.35546-17.423 0.0143-23.004-7.0158-7.5204-7.949-5.0013-19.326-5.4428-29.202 0.0203-22.805-0.0749-45.589 0.13115-68.355-3.4223-6.9208-11.028-10.493-18.563-9.3575l-1.2471-0.01723-1.3211-0.04244h2.6e-4z" fill="url(#i)" />
|
||||
<path d="m154.53 34.269c-31.655 0-56.169 21.233-59.981 48.759h26.972c3.6448-12.426 13.114-21.517 24.511-22.575 0.74035-0.69976 1.772-1.1484 2.9203-1.1484h26.611l0.0984-15.619s-2.3784-3.7253-4.2984-5.4797c-2.1754-1.9877-5.1118-3.4283-8.0062-3.7406-2.4252-0.26165-5.1996-0.04115-8.8266-0.19688z" fill="url(#j)" />
|
||||
<path transform="matrix(1.3048 0 0 1.2146 -20.434 -43.907)" d="m194.74 325.86a22.13 13.831 0 1 1-44.26 0 22.13 13.831 0 1 1 44.26 0z" fill="url(#b)" opacity=".9666" />
|
||||
<path d="m298.66 157.26v177.84c35.128-3.8535 62.738-42.188 62.738-88.922 0-46.734-27.609-85.068-62.738-88.922z" fill="url(#k)" opacity=".9666" />
|
||||
<path d="m247.97 33.422c31.655 0 56.169 21.233 59.981 48.759h-26.972c-3.6448-12.426-13.114-21.517-24.511-22.575-0.74036-0.69976-1.772-1.1484-2.9203-1.1484h-26.611l-0.0984-15.619s2.3784-3.7253 4.2984-5.4797c2.1754-1.9877 5.1118-3.4283 8.0062-3.7406 2.4252-0.26165 5.1996-0.04115 8.8266-0.19688z" fill="url(#h)" />
|
||||
<path d="m107.92 156.15v177.84c-35.128-3.8535-62.737-42.188-62.737-88.922 0-46.734 27.609-85.068 62.737-88.922z" fill="url(#g)" opacity=".9666" />
|
||||
</g>
|
||||
</symbol>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 13 KiB |
@@ -11,7 +11,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-06-19 20:23+1000\n"
|
||||
"POT-Creation-Date: 2025-09-21 13:44+1000\n"
|
||||
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
||||
"Last-Translator: Tomas Skarecky <t.skarecky@gmail.com>, 2024\n"
|
||||
"Language-Team: Czech (Czech Republic) (https://app.transifex.com/alliance-auth/teams/107430/cs_CZ/)\n"
|
||||
@@ -62,7 +62,7 @@ msgstr ""
|
||||
"přístupem:%s"
|
||||
|
||||
#: allianceauth/authentication/models.py:72
|
||||
#: allianceauth/project_template/project_name/settings/base.py:106
|
||||
#: allianceauth/project_template/project_name/settings/base.py:104
|
||||
msgid "English"
|
||||
msgstr "Angličtina"
|
||||
|
||||
@@ -71,57 +71,57 @@ msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:74
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
#: allianceauth/project_template/project_name/settings/base.py:106
|
||||
msgid "German"
|
||||
msgstr "Němčina"
|
||||
|
||||
#: allianceauth/authentication/models.py:75
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||
msgid "Spanish"
|
||||
msgstr "Španělština"
|
||||
|
||||
#: allianceauth/authentication/models.py:76
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
msgid "Italian"
|
||||
msgstr "Italština"
|
||||
|
||||
#: allianceauth/authentication/models.py:77
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
msgid "Japanese"
|
||||
msgstr "Japonština"
|
||||
|
||||
#: allianceauth/authentication/models.py:78
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
msgid "Korean"
|
||||
msgstr "Korejština"
|
||||
|
||||
#: allianceauth/authentication/models.py:79
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
msgid "French"
|
||||
msgstr "Francouzština"
|
||||
|
||||
#: allianceauth/authentication/models.py:80
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
msgid "Russian"
|
||||
msgstr "Ruština"
|
||||
|
||||
#: allianceauth/authentication/models.py:81
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:82
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:83
|
||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
msgid "Ukrainian"
|
||||
msgstr "Ukrajinština"
|
||||
|
||||
#: allianceauth/authentication/models.py:84
|
||||
#: allianceauth/project_template/project_name/settings/base.py:118
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
msgid "Simplified Chinese"
|
||||
msgstr ""
|
||||
|
||||
@@ -166,14 +166,12 @@ msgstr "Postavy"
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:4
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
|
||||
msgid "Add Character"
|
||||
msgstr "Přidat postavu"
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:10
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:8
|
||||
msgid "Change Main"
|
||||
msgstr "Změnit postavu"
|
||||
|
||||
@@ -230,8 +228,8 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:168
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:94
|
||||
#: allianceauth/srp/templates/srp/data.html:83
|
||||
#: allianceauth/srp/templates/srp/management.html:53
|
||||
#: allianceauth/srp/templates/srp/data.html:81
|
||||
#: allianceauth/srp/templates/srp/management.html:51
|
||||
msgid "Actions"
|
||||
msgstr "Akce"
|
||||
|
||||
@@ -282,7 +280,7 @@ msgstr "Registrace"
|
||||
msgid "Invalid or expired activation link."
|
||||
msgstr "Nevalidní, nebo expirovaný aktivační odkaz."
|
||||
|
||||
#: allianceauth/authentication/views.py:158
|
||||
#: allianceauth/authentication/views.py:159
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Cannot change main character to %(char)s: character owned by a different "
|
||||
@@ -290,22 +288,22 @@ msgid ""
|
||||
msgstr ""
|
||||
"Není možné změnit hlavní postavu na %(char)s: postava patří pod jiný účet."
|
||||
|
||||
#: allianceauth/authentication/views.py:165
|
||||
#: allianceauth/authentication/views.py:166
|
||||
#, python-format
|
||||
msgid "Changed main character to %s"
|
||||
msgstr "Hlavní postava změněna na %s"
|
||||
|
||||
#: allianceauth/authentication/views.py:179
|
||||
#: allianceauth/authentication/views.py:180
|
||||
#, python-format
|
||||
msgid "Added %(name)s to your account."
|
||||
msgstr "%(name)spřidána k vačenu účtu"
|
||||
|
||||
#: allianceauth/authentication/views.py:181
|
||||
#: allianceauth/authentication/views.py:182
|
||||
#, python-format
|
||||
msgid "Failed to add %(name)s to your account: they already have an account."
|
||||
msgstr "Přidání %(name)sk vašemu účtu se nezdařilo: již mají účet"
|
||||
|
||||
#: allianceauth/authentication/views.py:226
|
||||
#: allianceauth/authentication/views.py:227
|
||||
msgid ""
|
||||
"Unable to authenticate as the selected character. Please log in with the "
|
||||
"main character associated with this account."
|
||||
@@ -313,11 +311,11 @@ msgstr ""
|
||||
"Není možné váš ověřit pomocí vybrané postavu. Prosím přihlaste se pomocí "
|
||||
"hlavní postavy spojené s tímto účtem."
|
||||
|
||||
#: allianceauth/authentication/views.py:293
|
||||
#: allianceauth/authentication/views.py:294
|
||||
msgid "Registration token has expired."
|
||||
msgstr "Registrační token expiroval"
|
||||
|
||||
#: allianceauth/authentication/views.py:354
|
||||
#: allianceauth/authentication/views.py:355
|
||||
msgid ""
|
||||
"Sent confirmation email. Please follow the link to confirm your email "
|
||||
"address."
|
||||
@@ -325,11 +323,11 @@ msgstr ""
|
||||
"Byl vám odeslán potvrzovací email. Otevřete prosím odkaz pro potvrzení "
|
||||
"emailové adresy. "
|
||||
|
||||
#: allianceauth/authentication/views.py:360
|
||||
#: allianceauth/authentication/views.py:361
|
||||
msgid "Confirmed your email address. Please login to continue."
|
||||
msgstr "Emailová adresa potvrzena. Přihlaste se prosím."
|
||||
|
||||
#: allianceauth/authentication/views.py:366
|
||||
#: allianceauth/authentication/views.py:367
|
||||
msgid "Registration of new accounts is not allowed at this time."
|
||||
msgstr "Momentálně není povolena registrace nových účtů."
|
||||
|
||||
@@ -346,11 +344,11 @@ msgstr ""
|
||||
msgid "Corporations"
|
||||
msgstr "Korporace"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:35
|
||||
#: allianceauth/corputils/templates/corputils/base.html:31
|
||||
msgid "Add corporation"
|
||||
msgstr "Přidat korporaci"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:51
|
||||
#: allianceauth/corputils/templates/corputils/base.html:47
|
||||
msgid "Search all corporations..."
|
||||
msgstr "Vyhledat všechny korporace"
|
||||
|
||||
@@ -498,7 +496,7 @@ msgid "Fleet Activity Tracking"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8
|
||||
#: allianceauth/srp/templates/srp/management.html:44
|
||||
#: allianceauth/srp/templates/srp/management.html:42
|
||||
msgid "Fleet Name"
|
||||
msgstr "Jméno flotily"
|
||||
|
||||
@@ -988,7 +986,7 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:123
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:167
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
|
||||
#: allianceauth/srp/templates/srp/data.html:81
|
||||
#: allianceauth/srp/templates/srp/data.html:79
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
@@ -1001,7 +999,7 @@ msgid "Hidden"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
|
||||
@@ -1046,17 +1044,9 @@ msgstr ""
|
||||
msgid "Leave"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
|
||||
#: allianceauth/srp/templates/srp/data.html:120
|
||||
#: allianceauth/srp/templates/srp/management.html:87
|
||||
msgid "Pending"
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
|
||||
msgid "Request pending"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
|
||||
@@ -1067,7 +1057,11 @@ msgstr ""
|
||||
msgid "Request"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:99
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:93
|
||||
msgid "Retract"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:103
|
||||
msgid "No groups available."
|
||||
msgstr ""
|
||||
|
||||
@@ -1196,6 +1190,19 @@ msgstr ""
|
||||
msgid "Applied to leave group %(group)s."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:438
|
||||
msgid "You cannot retract that request"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:450
|
||||
#, python-format
|
||||
msgid "Retracted application to group %(group)s."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:458
|
||||
msgid "You have no open request for that group."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/apps.py:8
|
||||
msgid "HR Applications"
|
||||
msgstr ""
|
||||
@@ -1266,12 +1273,23 @@ msgstr ""
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
|
||||
#: allianceauth/srp/templates/srp/data.html:118
|
||||
#: allianceauth/srp/templates/srp/management.html:85
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:48
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:141
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:185
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:21
|
||||
#: allianceauth/srp/templates/srp/data.html:112
|
||||
#: allianceauth/srp/templates/srp/data.html:110
|
||||
msgid "Approved"
|
||||
msgstr ""
|
||||
|
||||
@@ -1279,7 +1297,7 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:187
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
|
||||
#: allianceauth/srp/templates/srp/data.html:116
|
||||
#: allianceauth/srp/templates/srp/data.html:114
|
||||
msgid "Rejected"
|
||||
msgstr ""
|
||||
|
||||
@@ -1514,8 +1532,8 @@ msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:155
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:158
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
|
||||
msgid "Sign In"
|
||||
msgstr ""
|
||||
|
||||
@@ -1543,11 +1561,11 @@ msgstr ""
|
||||
msgid "Read"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/list.html:32
|
||||
#: allianceauth/notifications/templates/notifications/list.html:31
|
||||
msgid "Mark all notifications as read"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/list.html:38
|
||||
#: allianceauth/notifications/templates/notifications/list.html:35
|
||||
msgid "Delete all read notifications"
|
||||
msgstr ""
|
||||
|
||||
@@ -1612,12 +1630,12 @@ msgid "Operation Type"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/form.py:17
|
||||
#: allianceauth/srp/templates/srp/management.html:47
|
||||
#: allianceauth/srp/templates/srp/management.html:45
|
||||
msgid "Fleet Commander"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
|
||||
#: allianceauth/srp/templates/srp/data.html:72
|
||||
#: allianceauth/srp/templates/srp/data.html:70
|
||||
msgid "Additional Info"
|
||||
msgstr ""
|
||||
|
||||
@@ -1626,7 +1644,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/add.html:8
|
||||
#: allianceauth/optimer/templates/optimer/management.html:18
|
||||
#: allianceauth/optimer/templates/optimer/management.html:16
|
||||
msgid "Create Operation"
|
||||
msgstr ""
|
||||
|
||||
@@ -1675,26 +1693,26 @@ msgstr ""
|
||||
msgid "Fleet Operation Management"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:28
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:32
|
||||
#: allianceauth/optimer/templates/optimer/management.html:26
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:30
|
||||
msgid "Current EVE time:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:36
|
||||
#: allianceauth/optimer/templates/optimer/management.html:34
|
||||
msgid "Next Fleet Operations"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:44
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:63
|
||||
#: allianceauth/optimer/templates/optimer/management.html:42
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:61
|
||||
msgid "No upcoming timers."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:52
|
||||
#: allianceauth/optimer/templates/optimer/management.html:50
|
||||
msgid "Past Fleet Operations"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:60
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:81
|
||||
#: allianceauth/optimer/templates/optimer/management.html:58
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:79
|
||||
msgid "No past timers."
|
||||
msgstr ""
|
||||
|
||||
@@ -2262,7 +2280,7 @@ msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/templates/services/service_status.html:7
|
||||
#: allianceauth/srp/templates/srp/management.html:78
|
||||
#: allianceauth/srp/templates/srp/management.html:76
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@@ -2300,12 +2318,12 @@ msgid "Ship Replacement"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:9
|
||||
#: allianceauth/srp/templates/srp/management.html:45
|
||||
#: allianceauth/srp/templates/srp/management.html:43
|
||||
msgid "Fleet Time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:10
|
||||
#: allianceauth/srp/templates/srp/management.html:46
|
||||
#: allianceauth/srp/templates/srp/management.html:44
|
||||
msgid "Fleet Doctrine"
|
||||
msgstr ""
|
||||
|
||||
@@ -2354,7 +2372,7 @@ msgid "Give this link to the line members."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:8
|
||||
#: allianceauth/srp/templates/srp/data.html:39
|
||||
#: allianceauth/srp/templates/srp/data.html:37
|
||||
msgid "SRP Fleet Data"
|
||||
msgstr ""
|
||||
|
||||
@@ -2362,64 +2380,64 @@ msgstr ""
|
||||
msgid "View Fleets"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:26
|
||||
#: allianceauth/srp/templates/srp/data.html:24
|
||||
msgid "Mark Incomplete"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:30
|
||||
#: allianceauth/srp/templates/srp/data.html:28
|
||||
msgid "Mark Completed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:48
|
||||
#: allianceauth/srp/templates/srp/data.html:142
|
||||
#: allianceauth/srp/templates/srp/data.html:46
|
||||
#: allianceauth/srp/templates/srp/data.html:140
|
||||
msgid "Total Losses:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:49
|
||||
#: allianceauth/srp/templates/srp/data.html:143
|
||||
#: allianceauth/srp/templates/srp/management.html:36
|
||||
#: allianceauth/srp/templates/srp/data.html:47
|
||||
#: allianceauth/srp/templates/srp/data.html:141
|
||||
#: allianceauth/srp/templates/srp/management.html:34
|
||||
msgid "Total ISK Cost:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:60
|
||||
#: allianceauth/srp/templates/srp/data.html:154
|
||||
#: allianceauth/srp/templates/srp/data.html:58
|
||||
#: allianceauth/srp/templates/srp/data.html:152
|
||||
msgid "Are you sure you want to delete SRP requests?"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:70
|
||||
#: allianceauth/srp/templates/srp/data.html:68
|
||||
msgid "Pilot Name"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:71
|
||||
#: allianceauth/srp/templates/srp/data.html:69
|
||||
msgid "Killboard Link"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:73
|
||||
#: allianceauth/srp/templates/srp/data.html:71
|
||||
msgid "Ship Type"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:74
|
||||
#: allianceauth/srp/templates/srp/data.html:72
|
||||
msgid "Killboard Loss Amt"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:76
|
||||
#: allianceauth/srp/templates/srp/data.html:74
|
||||
msgid "SRP ISK Cost"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:77
|
||||
#: allianceauth/srp/templates/srp/data.html:75
|
||||
msgid "Click value to edit Enter to save & next ESC to cancel"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:80
|
||||
#: allianceauth/srp/templates/srp/data.html:78
|
||||
msgid "Post Time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:102
|
||||
#: allianceauth/srp/templates/srp/management.html:70
|
||||
#: allianceauth/srp/templates/srp/data.html:100
|
||||
#: allianceauth/srp/templates/srp/management.html:68
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:163
|
||||
#: allianceauth/srp/templates/srp/data.html:161
|
||||
msgid "No SRP requests for this fleet."
|
||||
msgstr ""
|
||||
|
||||
@@ -2431,39 +2449,39 @@ msgstr ""
|
||||
msgid "View All"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:27
|
||||
#: allianceauth/srp/templates/srp/management.html:25
|
||||
msgid "Add SRP Fleet"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:48
|
||||
#: allianceauth/srp/templates/srp/management.html:46
|
||||
msgid "Fleet AAR"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:49
|
||||
#: allianceauth/srp/templates/srp/management.html:47
|
||||
msgid "Fleet SRP Code"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:50
|
||||
#: allianceauth/srp/templates/srp/management.html:48
|
||||
msgid "Fleet ISK Cost"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:51
|
||||
#: allianceauth/srp/templates/srp/management.html:49
|
||||
msgid "SRP Status"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:52
|
||||
#: allianceauth/srp/templates/srp/management.html:50
|
||||
msgid "Pending Requests"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:91
|
||||
#: allianceauth/srp/templates/srp/management.html:89
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:108
|
||||
#: allianceauth/srp/templates/srp/management.html:106
|
||||
msgid "Are you sure you want to delete this SRP code and its contents?"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:129
|
||||
#: allianceauth/srp/templates/srp/management.html:127
|
||||
msgid "No SRP fleets created."
|
||||
msgstr ""
|
||||
|
||||
@@ -2599,67 +2617,120 @@ msgstr ""
|
||||
msgid "Your Server received an ESI error response code of "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
|
||||
msgid "Alliance Auth Notifications"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:11
|
||||
msgid "second"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
|
||||
msgid "No notifications at this time"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:12
|
||||
msgid "seconds"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
|
||||
msgid "Powered by GitLab"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:13
|
||||
msgid "minute"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
|
||||
msgid "Support Discord"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:14
|
||||
msgid "minutes"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:49
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||
msgid "Software Version"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
|
||||
msgid "hour"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:56
|
||||
msgid "Current"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:16
|
||||
msgid "hours"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
|
||||
msgid "Latest Stable"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:17
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:68
|
||||
msgid "Update available"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:18
|
||||
msgid "ERROR"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
|
||||
msgid "Latest Pre-Release"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
|
||||
msgid "Pre-Release available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
|
||||
msgid "Task Queue"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" Status of %(total)s processed tasks • last %(latest)s\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:112
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:19
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:113
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
|
||||
msgid "queued"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:21
|
||||
msgid "succeeded"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:22
|
||||
msgid "retried"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:23
|
||||
msgid "failed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
|
||||
msgid "Debug mode"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:34
|
||||
msgid ""
|
||||
"Debug mode is currently turned on!<br>Make sure to turn it off as soon as "
|
||||
"you are finished testing."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:46
|
||||
msgid "Alliance Auth Notifications"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:58
|
||||
msgid "No notifications at this time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:67
|
||||
msgid "Powered by GitLab"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:73
|
||||
msgid "Support Discord"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:87
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
|
||||
msgid "Software Version"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:94
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:101
|
||||
msgid "Latest Stable"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:106
|
||||
msgid "Update available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:114
|
||||
msgid "Latest Pre-Release"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:119
|
||||
msgid "Pre-Release available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:129
|
||||
msgid "Task Queue"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:134
|
||||
msgid ""
|
||||
"\n"
|
||||
" Status of <span id=\"total-task-count\">?</span> processed tasks • last <span id=\"celery-uptime\">?</span>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
||||
msgid "AA Documentation"
|
||||
msgstr ""
|
||||
@@ -2883,7 +2954,7 @@ msgid "Theft"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:52
|
||||
msgid "Upcoming Timers"
|
||||
msgstr ""
|
||||
|
||||
@@ -2911,7 +2982,7 @@ msgid "Create Timer"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:22
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:20
|
||||
msgid "Create Structure Timer"
|
||||
msgstr ""
|
||||
|
||||
@@ -2929,11 +3000,11 @@ msgstr ""
|
||||
msgid "Structure Timer Management"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:41
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:39
|
||||
msgid "Corporation Timers"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:72
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:70
|
||||
msgid "Past Timers"
|
||||
msgstr ""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-07-03 09:07+1000\n"
|
||||
"POT-Creation-Date: 2025-11-13 10:19+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -57,7 +57,7 @@ msgid "You are not allowed to add or remove these restricted groups: %s"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:72
|
||||
#: allianceauth/project_template/project_name/settings/base.py:104
|
||||
#: allianceauth/project_template/project_name/settings/base.py:105
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
@@ -66,57 +66,57 @@ msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:74
|
||||
#: allianceauth/project_template/project_name/settings/base.py:106
|
||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:75
|
||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:76
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:77
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:78
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
msgid "Korean"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:79
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:80
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:81
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:82
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:83
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
msgid "Ukrainian"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:84
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||
msgid "Simplified Chinese"
|
||||
msgstr ""
|
||||
|
||||
@@ -125,22 +125,30 @@ msgstr ""
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:105
|
||||
#: allianceauth/authentication/models.py:106
|
||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||
msgid "Night Mode"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:109
|
||||
#: allianceauth/authentication/models.py:110
|
||||
#: allianceauth/theme/templates/theme/theme_select.html:4
|
||||
msgid "Theme"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:126
|
||||
#: allianceauth/authentication/models.py:117
|
||||
msgid "Minimize Sidebar Menu"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:119
|
||||
msgid "Keep the sidebar menu minimized"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:133
|
||||
#, python-format
|
||||
msgid "State changed to: %s"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:127
|
||||
#: allianceauth/authentication/models.py:134
|
||||
#, python-format
|
||||
msgid "Your user's state is now: %(state)s"
|
||||
msgstr ""
|
||||
@@ -161,14 +169,12 @@ msgstr ""
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:4
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
|
||||
msgid "Add Character"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:10
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:8
|
||||
msgid "Change Main"
|
||||
msgstr ""
|
||||
|
||||
@@ -202,8 +208,8 @@ msgstr ""
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/tokens.html:7
|
||||
#: allianceauth/authentication/templates/authentication/tokens.html:11
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:133
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:136
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:158
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:161
|
||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
|
||||
msgid "Token Management"
|
||||
msgstr ""
|
||||
@@ -225,8 +231,8 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:168
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:94
|
||||
#: allianceauth/srp/templates/srp/data.html:83
|
||||
#: allianceauth/srp/templates/srp/management.html:53
|
||||
#: allianceauth/srp/templates/srp/data.html:81
|
||||
#: allianceauth/srp/templates/srp/management.html:51
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
|
||||
@@ -277,49 +283,49 @@ msgstr ""
|
||||
msgid "Invalid or expired activation link."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:158
|
||||
#: allianceauth/authentication/views.py:159
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Cannot change main character to %(char)s: character owned by a different "
|
||||
"account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:165
|
||||
#: allianceauth/authentication/views.py:166
|
||||
#, python-format
|
||||
msgid "Changed main character to %s"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:179
|
||||
#: allianceauth/authentication/views.py:180
|
||||
#, python-format
|
||||
msgid "Added %(name)s to your account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:181
|
||||
#: allianceauth/authentication/views.py:182
|
||||
#, python-format
|
||||
msgid "Failed to add %(name)s to your account: they already have an account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:226
|
||||
#: allianceauth/authentication/views.py:227
|
||||
msgid ""
|
||||
"Unable to authenticate as the selected character. Please log in with the "
|
||||
"main character associated with this account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:293
|
||||
#: allianceauth/authentication/views.py:294
|
||||
msgid "Registration token has expired."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:354
|
||||
#: allianceauth/authentication/views.py:355
|
||||
msgid ""
|
||||
"Sent confirmation email. Please follow the link to confirm your email "
|
||||
"address."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:360
|
||||
#: allianceauth/authentication/views.py:361
|
||||
msgid "Confirmed your email address. Please login to continue."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:366
|
||||
#: allianceauth/authentication/views.py:367
|
||||
msgid "Registration of new accounts is not allowed at this time."
|
||||
msgstr ""
|
||||
|
||||
@@ -336,11 +342,11 @@ msgstr ""
|
||||
msgid "Corporations"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:35
|
||||
#: allianceauth/corputils/templates/corputils/base.html:31
|
||||
msgid "Add corporation"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:51
|
||||
#: allianceauth/corputils/templates/corputils/base.html:47
|
||||
msgid "Search all corporations..."
|
||||
msgstr ""
|
||||
|
||||
@@ -488,7 +494,7 @@ msgid "Fleet Activity Tracking"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8
|
||||
#: allianceauth/srp/templates/srp/management.html:44
|
||||
#: allianceauth/srp/templates/srp/management.html:42
|
||||
msgid "Fleet Name"
|
||||
msgstr ""
|
||||
|
||||
@@ -749,8 +755,8 @@ msgstr ""
|
||||
#: allianceauth/fleetactivitytracking/views.py:323
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Cannot register the fleet participation for {character.character_name}. The "
|
||||
"character needs to be online."
|
||||
"Cannot register the fleet participation for {character_name}. The character "
|
||||
"needs to be online."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/framework/apps.py:16
|
||||
@@ -973,7 +979,7 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:123
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:167
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
|
||||
#: allianceauth/srp/templates/srp/data.html:81
|
||||
#: allianceauth/srp/templates/srp/data.html:79
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
@@ -986,7 +992,7 @@ msgid "Hidden"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
|
||||
@@ -1031,17 +1037,9 @@ msgstr ""
|
||||
msgid "Leave"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
|
||||
#: allianceauth/srp/templates/srp/data.html:120
|
||||
#: allianceauth/srp/templates/srp/management.html:87
|
||||
msgid "Pending"
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
|
||||
msgid "Request pending"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
|
||||
@@ -1052,7 +1050,11 @@ msgstr ""
|
||||
msgid "Request"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:99
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:93
|
||||
msgid "Retract"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:103
|
||||
msgid "No groups available."
|
||||
msgstr ""
|
||||
|
||||
@@ -1181,6 +1183,19 @@ msgstr ""
|
||||
msgid "Applied to leave group %(group)s."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:438
|
||||
msgid "You cannot retract that request"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:450
|
||||
#, python-format
|
||||
msgid "Retracted application to group %(group)s."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:458
|
||||
msgid "You have no open request for that group."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/apps.py:8
|
||||
msgid "HR Applications"
|
||||
msgstr ""
|
||||
@@ -1251,12 +1266,23 @@ msgstr ""
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
|
||||
#: allianceauth/srp/templates/srp/data.html:118
|
||||
#: allianceauth/srp/templates/srp/management.html:85
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:48
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:141
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:185
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:21
|
||||
#: allianceauth/srp/templates/srp/data.html:112
|
||||
#: allianceauth/srp/templates/srp/data.html:110
|
||||
msgid "Approved"
|
||||
msgstr ""
|
||||
|
||||
@@ -1264,7 +1290,7 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:187
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
|
||||
#: allianceauth/srp/templates/srp/data.html:116
|
||||
#: allianceauth/srp/templates/srp/data.html:114
|
||||
msgid "Rejected"
|
||||
msgstr ""
|
||||
|
||||
@@ -1468,39 +1494,47 @@ msgid "Notifications"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:77
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:93
|
||||
msgid "Minimize Sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:102
|
||||
msgid "Super User"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:83
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:86
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:108
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:111
|
||||
msgid "Alliance Auth Documentation"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:94
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:97
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:119
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:122
|
||||
msgid "Alliance Auth Discord"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:105
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:108
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:130
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:133
|
||||
msgid "Alliance Auth Git"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:118
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:121
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:143
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:146
|
||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:144
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:147
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:169
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:172
|
||||
msgid "Sign Out"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:155
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:158
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:180
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:183
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
|
||||
msgid "Sign In"
|
||||
msgstr ""
|
||||
|
||||
@@ -1528,11 +1562,11 @@ msgstr ""
|
||||
msgid "Read"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/list.html:32
|
||||
#: allianceauth/notifications/templates/notifications/list.html:31
|
||||
msgid "Mark all notifications as read"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/list.html:38
|
||||
#: allianceauth/notifications/templates/notifications/list.html:35
|
||||
msgid "Delete all read notifications"
|
||||
msgstr ""
|
||||
|
||||
@@ -1597,12 +1631,12 @@ msgid "Operation Type"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/form.py:17
|
||||
#: allianceauth/srp/templates/srp/management.html:47
|
||||
#: allianceauth/srp/templates/srp/management.html:45
|
||||
msgid "Fleet Commander"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
|
||||
#: allianceauth/srp/templates/srp/data.html:72
|
||||
#: allianceauth/srp/templates/srp/data.html:70
|
||||
msgid "Additional Info"
|
||||
msgstr ""
|
||||
|
||||
@@ -1611,7 +1645,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/add.html:8
|
||||
#: allianceauth/optimer/templates/optimer/management.html:18
|
||||
#: allianceauth/optimer/templates/optimer/management.html:16
|
||||
msgid "Create Operation"
|
||||
msgstr ""
|
||||
|
||||
@@ -1660,26 +1694,26 @@ msgstr ""
|
||||
msgid "Fleet Operation Management"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:28
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:32
|
||||
#: allianceauth/optimer/templates/optimer/management.html:26
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:30
|
||||
msgid "Current EVE time:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:36
|
||||
#: allianceauth/optimer/templates/optimer/management.html:34
|
||||
msgid "Next Fleet Operations"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:44
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:63
|
||||
#: allianceauth/optimer/templates/optimer/management.html:42
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:61
|
||||
msgid "No upcoming timers."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:52
|
||||
#: allianceauth/optimer/templates/optimer/management.html:50
|
||||
msgid "Past Fleet Operations"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:60
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:81
|
||||
#: allianceauth/optimer/templates/optimer/management.html:58
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:79
|
||||
msgid "No past timers."
|
||||
msgstr ""
|
||||
|
||||
@@ -1759,9 +1793,9 @@ msgstr ""
|
||||
msgid "That service account already exists"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/abstract.py:103
|
||||
#: allianceauth/services/abstract.py:105
|
||||
#, python-brace-format
|
||||
msgid "Successfully set your {self.service_name} password"
|
||||
msgid "Successfully set your {service_name} password"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12
|
||||
@@ -2246,7 +2280,7 @@ msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/templates/services/service_status.html:7
|
||||
#: allianceauth/srp/templates/srp/management.html:78
|
||||
#: allianceauth/srp/templates/srp/management.html:76
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
@@ -2283,12 +2317,12 @@ msgstr ""
|
||||
msgid "Ship Replacement"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:9 allianceauth/srp/templates/srp/management.html:45
|
||||
#: allianceauth/srp/form.py:9 allianceauth/srp/templates/srp/management.html:43
|
||||
msgid "Fleet Time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:10
|
||||
#: allianceauth/srp/templates/srp/management.html:46
|
||||
#: allianceauth/srp/templates/srp/management.html:44
|
||||
msgid "Fleet Doctrine"
|
||||
msgstr ""
|
||||
|
||||
@@ -2300,11 +2334,11 @@ msgstr ""
|
||||
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:46
|
||||
#: allianceauth/srp/form.py:49
|
||||
msgid "Invalid Link. Please post a direct link to a killmail."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:53
|
||||
#: allianceauth/srp/form.py:56
|
||||
msgid "After Action Report Link"
|
||||
msgstr ""
|
||||
|
||||
@@ -2337,7 +2371,7 @@ msgid "Give this link to the line members."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:8
|
||||
#: allianceauth/srp/templates/srp/data.html:39
|
||||
#: allianceauth/srp/templates/srp/data.html:37
|
||||
msgid "SRP Fleet Data"
|
||||
msgstr ""
|
||||
|
||||
@@ -2345,64 +2379,64 @@ msgstr ""
|
||||
msgid "View Fleets"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:26
|
||||
#: allianceauth/srp/templates/srp/data.html:24
|
||||
msgid "Mark Incomplete"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:30
|
||||
#: allianceauth/srp/templates/srp/data.html:28
|
||||
msgid "Mark Completed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:48
|
||||
#: allianceauth/srp/templates/srp/data.html:142
|
||||
#: allianceauth/srp/templates/srp/data.html:46
|
||||
#: allianceauth/srp/templates/srp/data.html:140
|
||||
msgid "Total Losses:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:49
|
||||
#: allianceauth/srp/templates/srp/data.html:143
|
||||
#: allianceauth/srp/templates/srp/management.html:36
|
||||
#: allianceauth/srp/templates/srp/data.html:47
|
||||
#: allianceauth/srp/templates/srp/data.html:141
|
||||
#: allianceauth/srp/templates/srp/management.html:34
|
||||
msgid "Total ISK Cost:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:60
|
||||
#: allianceauth/srp/templates/srp/data.html:154
|
||||
#: allianceauth/srp/templates/srp/data.html:58
|
||||
#: allianceauth/srp/templates/srp/data.html:152
|
||||
msgid "Are you sure you want to delete SRP requests?"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:70
|
||||
#: allianceauth/srp/templates/srp/data.html:68
|
||||
msgid "Pilot Name"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:71
|
||||
#: allianceauth/srp/templates/srp/data.html:69
|
||||
msgid "Killboard Link"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:73
|
||||
#: allianceauth/srp/templates/srp/data.html:71
|
||||
msgid "Ship Type"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:74
|
||||
#: allianceauth/srp/templates/srp/data.html:72
|
||||
msgid "Killboard Loss Amt"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:76
|
||||
#: allianceauth/srp/templates/srp/data.html:74
|
||||
msgid "SRP ISK Cost"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:77
|
||||
#: allianceauth/srp/templates/srp/data.html:75
|
||||
msgid "Click value to edit Enter to save & next ESC to cancel"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:80
|
||||
#: allianceauth/srp/templates/srp/data.html:78
|
||||
msgid "Post Time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:102
|
||||
#: allianceauth/srp/templates/srp/management.html:70
|
||||
#: allianceauth/srp/templates/srp/data.html:100
|
||||
#: allianceauth/srp/templates/srp/management.html:68
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:163
|
||||
#: allianceauth/srp/templates/srp/data.html:161
|
||||
msgid "No SRP requests for this fleet."
|
||||
msgstr ""
|
||||
|
||||
@@ -2414,39 +2448,39 @@ msgstr ""
|
||||
msgid "View All"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:27
|
||||
#: allianceauth/srp/templates/srp/management.html:25
|
||||
msgid "Add SRP Fleet"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:48
|
||||
#: allianceauth/srp/templates/srp/management.html:46
|
||||
msgid "Fleet AAR"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:49
|
||||
#: allianceauth/srp/templates/srp/management.html:47
|
||||
msgid "Fleet SRP Code"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:50
|
||||
#: allianceauth/srp/templates/srp/management.html:48
|
||||
msgid "Fleet ISK Cost"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:51
|
||||
#: allianceauth/srp/templates/srp/management.html:49
|
||||
msgid "SRP Status"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:52
|
||||
#: allianceauth/srp/templates/srp/management.html:50
|
||||
msgid "Pending Requests"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:91
|
||||
#: allianceauth/srp/templates/srp/management.html:89
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:108
|
||||
#: allianceauth/srp/templates/srp/management.html:106
|
||||
msgid "Are you sure you want to delete this SRP code and its contents?"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:129
|
||||
#: allianceauth/srp/templates/srp/management.html:127
|
||||
msgid "No SRP fleets created."
|
||||
msgstr ""
|
||||
|
||||
@@ -2578,72 +2612,125 @@ msgstr ""
|
||||
msgid "Saved changes to SRP fleet %(fleetname)s"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:4
|
||||
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:5
|
||||
msgid "Your Server received an ESI error response code of "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
|
||||
msgid "Alliance Auth Notifications"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:11
|
||||
msgid "second"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
|
||||
msgid "No notifications at this time"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:12
|
||||
msgid "seconds"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
|
||||
msgid "Powered by GitLab"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:13
|
||||
msgid "minute"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
|
||||
msgid "Support Discord"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:14
|
||||
msgid "minutes"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:49
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||
msgid "Software Version"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
|
||||
msgid "hour"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:56
|
||||
msgid "Current"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:16
|
||||
msgid "hours"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
|
||||
msgid "Latest Stable"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:17
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:68
|
||||
msgid "Update available"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:18
|
||||
msgid "ERROR"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
|
||||
msgid "Latest Pre-Release"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
|
||||
msgid "Pre-Release available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
|
||||
msgid "Task Queue"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" Status of %(total)s processed tasks • last "
|
||||
"%(latest)s\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:112
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:19
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:113
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
|
||||
msgid "queued"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:21
|
||||
msgid "succeeded"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:22
|
||||
msgid "retried"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:23
|
||||
msgid "failed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
|
||||
msgid "Debug mode"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:34
|
||||
msgid ""
|
||||
"Debug mode is currently turned on!<br>Make sure to turn it off as soon as "
|
||||
"you are finished testing."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:46
|
||||
msgid "Alliance Auth Notifications"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:58
|
||||
msgid "No notifications at this time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:67
|
||||
msgid "Powered by GitLab"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:73
|
||||
msgid "Support Discord"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:87
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
|
||||
msgid "Software Version"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:94
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:101
|
||||
msgid "Latest Stable"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:106
|
||||
msgid "Update available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:114
|
||||
msgid "Latest Pre-Release"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:119
|
||||
msgid "Pre-Release available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:129
|
||||
msgid "Task Queue"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:134
|
||||
msgid ""
|
||||
"\n"
|
||||
" Status of <span id=\"total-task-count\">?</span> "
|
||||
"processed tasks • last <span id=\"celery-uptime\">?</span>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
||||
msgid "AA Documentation"
|
||||
msgstr ""
|
||||
@@ -2867,7 +2954,7 @@ msgid "Theft"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:52
|
||||
msgid "Upcoming Timers"
|
||||
msgstr ""
|
||||
|
||||
@@ -2895,7 +2982,7 @@ msgid "Create Timer"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:22
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:20
|
||||
msgid "Create Structure Timer"
|
||||
msgstr ""
|
||||
|
||||
@@ -2913,11 +3000,11 @@ msgstr ""
|
||||
msgid "Structure Timer Management"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:41
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:39
|
||||
msgid "Corporation Timers"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:72
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:70
|
||||
msgid "Past Timers"
|
||||
msgstr ""
|
||||
|
||||
@@ -2930,36 +3017,36 @@ msgstr ""
|
||||
msgid "Saved changes to the timer."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:55
|
||||
#: allianceauth/views.py:78
|
||||
msgid "Bad Request"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:57 allianceauth/views.py:87
|
||||
#: allianceauth/views.py:80 allianceauth/views.py:110
|
||||
msgid ""
|
||||
"Auth encountered an error processing your request, please try again. If the "
|
||||
"error persists, please contact the administrators."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:65
|
||||
#: allianceauth/views.py:88
|
||||
msgid "Permission Denied"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:67
|
||||
#: allianceauth/views.py:90
|
||||
msgid ""
|
||||
"You do not have permission to access the requested page. If you believe this "
|
||||
"is in error please contact the administrators."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:75
|
||||
#: allianceauth/views.py:98
|
||||
msgid "Page Not Found"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:77
|
||||
#: allianceauth/views.py:100
|
||||
msgid ""
|
||||
"Page does not exist. If you believe this is in error please contact the "
|
||||
"administrators. "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:85
|
||||
#: allianceauth/views.py:108
|
||||
msgid "Internal Server Error"
|
||||
msgstr ""
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -13,7 +13,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-06-19 20:23+1000\n"
|
||||
"POT-Creation-Date: 2025-09-21 13:44+1000\n"
|
||||
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
||||
"Last-Translator: Machiel Broekman, 2025\n"
|
||||
"Language-Team: Dutch (Netherlands) (https://app.transifex.com/alliance-auth/teams/107430/nl_NL/)\n"
|
||||
@@ -71,7 +71,7 @@ msgstr ""
|
||||
"Je bent niet gemachtigd om de volgende beperkte groepen te verwijderen: %s"
|
||||
|
||||
#: allianceauth/authentication/models.py:72
|
||||
#: allianceauth/project_template/project_name/settings/base.py:106
|
||||
#: allianceauth/project_template/project_name/settings/base.py:104
|
||||
msgid "English"
|
||||
msgstr "Engels"
|
||||
|
||||
@@ -80,57 +80,57 @@ msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:74
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
#: allianceauth/project_template/project_name/settings/base.py:106
|
||||
msgid "German"
|
||||
msgstr "Duits"
|
||||
|
||||
#: allianceauth/authentication/models.py:75
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||
msgid "Spanish"
|
||||
msgstr "Spaans"
|
||||
|
||||
#: allianceauth/authentication/models.py:76
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
msgid "Italian"
|
||||
msgstr "Italiaans"
|
||||
|
||||
#: allianceauth/authentication/models.py:77
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
msgid "Japanese"
|
||||
msgstr "Japans"
|
||||
|
||||
#: allianceauth/authentication/models.py:78
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
msgid "Korean"
|
||||
msgstr "Koreaans"
|
||||
|
||||
#: allianceauth/authentication/models.py:79
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
msgid "French"
|
||||
msgstr "Frans"
|
||||
|
||||
#: allianceauth/authentication/models.py:80
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
msgid "Russian"
|
||||
msgstr "Russisch"
|
||||
|
||||
#: allianceauth/authentication/models.py:81
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
msgid "Dutch"
|
||||
msgstr "Nederlands"
|
||||
|
||||
#: allianceauth/authentication/models.py:82
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
msgid "Polish"
|
||||
msgstr "Pools"
|
||||
|
||||
#: allianceauth/authentication/models.py:83
|
||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
msgid "Ukrainian"
|
||||
msgstr "Oekraïens"
|
||||
|
||||
#: allianceauth/authentication/models.py:84
|
||||
#: allianceauth/project_template/project_name/settings/base.py:118
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
msgid "Simplified Chinese"
|
||||
msgstr "Eenvoudig Chinees"
|
||||
|
||||
@@ -175,14 +175,12 @@ msgstr "Karakter"
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:4
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
|
||||
msgid "Add Character"
|
||||
msgstr "Personages toevoegen"
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:10
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:8
|
||||
msgid "Change Main"
|
||||
msgstr "Verander Main"
|
||||
|
||||
@@ -242,8 +240,8 @@ msgstr "Scopes"
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:168
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:94
|
||||
#: allianceauth/srp/templates/srp/data.html:83
|
||||
#: allianceauth/srp/templates/srp/management.html:53
|
||||
#: allianceauth/srp/templates/srp/data.html:81
|
||||
#: allianceauth/srp/templates/srp/management.html:51
|
||||
msgid "Actions"
|
||||
msgstr "Acties"
|
||||
|
||||
@@ -294,7 +292,7 @@ msgstr "Registreer"
|
||||
msgid "Invalid or expired activation link."
|
||||
msgstr "Ongeldige of verlopen activeringslink."
|
||||
|
||||
#: allianceauth/authentication/views.py:158
|
||||
#: allianceauth/authentication/views.py:159
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Cannot change main character to %(char)s: character owned by a different "
|
||||
@@ -303,23 +301,23 @@ msgstr ""
|
||||
"Het hoofdkarakter kan niet worden gewijzigd naar %(char)s: Karakter is "
|
||||
"eigendom van een ander account."
|
||||
|
||||
#: allianceauth/authentication/views.py:165
|
||||
#: allianceauth/authentication/views.py:166
|
||||
#, python-format
|
||||
msgid "Changed main character to %s"
|
||||
msgstr "Hoofdkarakter veranderd naar %s"
|
||||
|
||||
#: allianceauth/authentication/views.py:179
|
||||
#: allianceauth/authentication/views.py:180
|
||||
#, python-format
|
||||
msgid "Added %(name)s to your account."
|
||||
msgstr "%(name)s aan uw account toegevoegd."
|
||||
|
||||
#: allianceauth/authentication/views.py:181
|
||||
#: allianceauth/authentication/views.py:182
|
||||
#, python-format
|
||||
msgid "Failed to add %(name)s to your account: they already have an account."
|
||||
msgstr ""
|
||||
"Toevoegen van %(name)s aan uw account is mislukt: ze hebben al een account."
|
||||
|
||||
#: allianceauth/authentication/views.py:226
|
||||
#: allianceauth/authentication/views.py:227
|
||||
msgid ""
|
||||
"Unable to authenticate as the selected character. Please log in with the "
|
||||
"main character associated with this account."
|
||||
@@ -327,11 +325,11 @@ msgstr ""
|
||||
"Niet mogelijk om te authenticeren als de geselecteerde karakter. Log "
|
||||
"alstublieft in met het hoofdkarakter dat aan dit account is gekoppeld."
|
||||
|
||||
#: allianceauth/authentication/views.py:293
|
||||
#: allianceauth/authentication/views.py:294
|
||||
msgid "Registration token has expired."
|
||||
msgstr "Registratietoken is verlopen."
|
||||
|
||||
#: allianceauth/authentication/views.py:354
|
||||
#: allianceauth/authentication/views.py:355
|
||||
msgid ""
|
||||
"Sent confirmation email. Please follow the link to confirm your email "
|
||||
"address."
|
||||
@@ -339,11 +337,11 @@ msgstr ""
|
||||
"E-mail met bevestiging verzonden. Volg de link om uw e-mailadres te "
|
||||
"bevestigen."
|
||||
|
||||
#: allianceauth/authentication/views.py:360
|
||||
#: allianceauth/authentication/views.py:361
|
||||
msgid "Confirmed your email address. Please login to continue."
|
||||
msgstr "Uw e-mailadres is bevestigd. Gelieve in te loggen om verder te gaan."
|
||||
|
||||
#: allianceauth/authentication/views.py:366
|
||||
#: allianceauth/authentication/views.py:367
|
||||
msgid "Registration of new accounts is not allowed at this time."
|
||||
msgstr "Registratie van nieuwe accounts in momenteel niet toegestaan."
|
||||
|
||||
@@ -360,11 +358,11 @@ msgstr "Gegevens van bedrijfsleden"
|
||||
msgid "Corporations"
|
||||
msgstr "Bedrijven"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:35
|
||||
#: allianceauth/corputils/templates/corputils/base.html:31
|
||||
msgid "Add corporation"
|
||||
msgstr "Voeg bedrijf toe"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:51
|
||||
#: allianceauth/corputils/templates/corputils/base.html:47
|
||||
msgid "Search all corporations..."
|
||||
msgstr "Zoek in alle bedrijven..."
|
||||
|
||||
@@ -514,7 +512,7 @@ msgid "Fleet Activity Tracking"
|
||||
msgstr "Fleetactiviteit Tracking"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8
|
||||
#: allianceauth/srp/templates/srp/management.html:44
|
||||
#: allianceauth/srp/templates/srp/management.html:42
|
||||
msgid "Fleet Name"
|
||||
msgstr "Fleet naam"
|
||||
|
||||
@@ -1002,7 +1000,7 @@ msgstr "Beschrijving"
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:123
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:167
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
|
||||
#: allianceauth/srp/templates/srp/data.html:81
|
||||
#: allianceauth/srp/templates/srp/data.html:79
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
@@ -1015,7 +1013,7 @@ msgid "Hidden"
|
||||
msgstr "verborgen"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||
msgid "Open"
|
||||
msgstr "Open"
|
||||
|
||||
@@ -1060,18 +1058,10 @@ msgstr "Groep"
|
||||
msgid "Leave"
|
||||
msgstr "Verlaat"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
|
||||
#: allianceauth/srp/templates/srp/data.html:120
|
||||
#: allianceauth/srp/templates/srp/management.html:87
|
||||
msgid "Pending"
|
||||
msgstr "In behandeling"
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
|
||||
msgid "Request pending"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
|
||||
msgid "Join"
|
||||
@@ -1081,7 +1071,11 @@ msgstr "Toetreden"
|
||||
msgid "Request"
|
||||
msgstr "Aanvraag"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:99
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:93
|
||||
msgid "Retract"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:103
|
||||
msgid "No groups available."
|
||||
msgstr ""
|
||||
|
||||
@@ -1210,6 +1204,19 @@ msgstr ""
|
||||
msgid "Applied to leave group %(group)s."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:438
|
||||
msgid "You cannot retract that request"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:450
|
||||
#, python-format
|
||||
msgid "Retracted application to group %(group)s."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:458
|
||||
msgid "You have no open request for that group."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/apps.py:8
|
||||
msgid "HR Applications"
|
||||
msgstr ""
|
||||
@@ -1280,12 +1287,23 @@ msgstr ""
|
||||
msgid "Username"
|
||||
msgstr "Gebruikersnaam"
|
||||
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
|
||||
#: allianceauth/srp/templates/srp/data.html:118
|
||||
#: allianceauth/srp/templates/srp/management.html:85
|
||||
msgid "Pending"
|
||||
msgstr "In behandeling"
|
||||
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:48
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:141
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:185
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:21
|
||||
#: allianceauth/srp/templates/srp/data.html:112
|
||||
#: allianceauth/srp/templates/srp/data.html:110
|
||||
msgid "Approved"
|
||||
msgstr "Aanvaard"
|
||||
|
||||
@@ -1293,7 +1311,7 @@ msgstr "Aanvaard"
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:187
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
|
||||
#: allianceauth/srp/templates/srp/data.html:116
|
||||
#: allianceauth/srp/templates/srp/data.html:114
|
||||
msgid "Rejected"
|
||||
msgstr "Afgewezen"
|
||||
|
||||
@@ -1528,8 +1546,8 @@ msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:155
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:158
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
|
||||
msgid "Sign In"
|
||||
msgstr ""
|
||||
|
||||
@@ -1557,11 +1575,11 @@ msgstr "Ongelezen"
|
||||
msgid "Read"
|
||||
msgstr "Gelezen"
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/list.html:32
|
||||
#: allianceauth/notifications/templates/notifications/list.html:31
|
||||
msgid "Mark all notifications as read"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/list.html:38
|
||||
#: allianceauth/notifications/templates/notifications/list.html:35
|
||||
msgid "Delete all read notifications"
|
||||
msgstr ""
|
||||
|
||||
@@ -1626,12 +1644,12 @@ msgid "Operation Type"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/form.py:17
|
||||
#: allianceauth/srp/templates/srp/management.html:47
|
||||
#: allianceauth/srp/templates/srp/management.html:45
|
||||
msgid "Fleet Commander"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
|
||||
#: allianceauth/srp/templates/srp/data.html:72
|
||||
#: allianceauth/srp/templates/srp/data.html:70
|
||||
msgid "Additional Info"
|
||||
msgstr ""
|
||||
|
||||
@@ -1640,7 +1658,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/add.html:8
|
||||
#: allianceauth/optimer/templates/optimer/management.html:18
|
||||
#: allianceauth/optimer/templates/optimer/management.html:16
|
||||
msgid "Create Operation"
|
||||
msgstr ""
|
||||
|
||||
@@ -1689,26 +1707,26 @@ msgstr "Vloot Commandant"
|
||||
msgid "Fleet Operation Management"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:28
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:32
|
||||
#: allianceauth/optimer/templates/optimer/management.html:26
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:30
|
||||
msgid "Current EVE time:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:36
|
||||
#: allianceauth/optimer/templates/optimer/management.html:34
|
||||
msgid "Next Fleet Operations"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:44
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:63
|
||||
#: allianceauth/optimer/templates/optimer/management.html:42
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:61
|
||||
msgid "No upcoming timers."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:52
|
||||
#: allianceauth/optimer/templates/optimer/management.html:50
|
||||
msgid "Past Fleet Operations"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:60
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:81
|
||||
#: allianceauth/optimer/templates/optimer/management.html:58
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:79
|
||||
msgid "No past timers."
|
||||
msgstr ""
|
||||
|
||||
@@ -2276,7 +2294,7 @@ msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/templates/services/service_status.html:7
|
||||
#: allianceauth/srp/templates/srp/management.html:78
|
||||
#: allianceauth/srp/templates/srp/management.html:76
|
||||
msgid "Disabled"
|
||||
msgstr "Uitgeschakeld"
|
||||
|
||||
@@ -2314,12 +2332,12 @@ msgid "Ship Replacement"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:9
|
||||
#: allianceauth/srp/templates/srp/management.html:45
|
||||
#: allianceauth/srp/templates/srp/management.html:43
|
||||
msgid "Fleet Time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:10
|
||||
#: allianceauth/srp/templates/srp/management.html:46
|
||||
#: allianceauth/srp/templates/srp/management.html:44
|
||||
msgid "Fleet Doctrine"
|
||||
msgstr ""
|
||||
|
||||
@@ -2368,7 +2386,7 @@ msgid "Give this link to the line members."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:8
|
||||
#: allianceauth/srp/templates/srp/data.html:39
|
||||
#: allianceauth/srp/templates/srp/data.html:37
|
||||
msgid "SRP Fleet Data"
|
||||
msgstr ""
|
||||
|
||||
@@ -2376,64 +2394,64 @@ msgstr ""
|
||||
msgid "View Fleets"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:26
|
||||
#: allianceauth/srp/templates/srp/data.html:24
|
||||
msgid "Mark Incomplete"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:30
|
||||
#: allianceauth/srp/templates/srp/data.html:28
|
||||
msgid "Mark Completed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:48
|
||||
#: allianceauth/srp/templates/srp/data.html:142
|
||||
#: allianceauth/srp/templates/srp/data.html:46
|
||||
#: allianceauth/srp/templates/srp/data.html:140
|
||||
msgid "Total Losses:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:49
|
||||
#: allianceauth/srp/templates/srp/data.html:143
|
||||
#: allianceauth/srp/templates/srp/management.html:36
|
||||
#: allianceauth/srp/templates/srp/data.html:47
|
||||
#: allianceauth/srp/templates/srp/data.html:141
|
||||
#: allianceauth/srp/templates/srp/management.html:34
|
||||
msgid "Total ISK Cost:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:60
|
||||
#: allianceauth/srp/templates/srp/data.html:154
|
||||
#: allianceauth/srp/templates/srp/data.html:58
|
||||
#: allianceauth/srp/templates/srp/data.html:152
|
||||
msgid "Are you sure you want to delete SRP requests?"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:70
|
||||
#: allianceauth/srp/templates/srp/data.html:68
|
||||
msgid "Pilot Name"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:71
|
||||
#: allianceauth/srp/templates/srp/data.html:69
|
||||
msgid "Killboard Link"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:73
|
||||
#: allianceauth/srp/templates/srp/data.html:71
|
||||
msgid "Ship Type"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:74
|
||||
#: allianceauth/srp/templates/srp/data.html:72
|
||||
msgid "Killboard Loss Amt"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:76
|
||||
#: allianceauth/srp/templates/srp/data.html:74
|
||||
msgid "SRP ISK Cost"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:77
|
||||
#: allianceauth/srp/templates/srp/data.html:75
|
||||
msgid "Click value to edit Enter to save & next ESC to cancel"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:80
|
||||
#: allianceauth/srp/templates/srp/data.html:78
|
||||
msgid "Post Time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:102
|
||||
#: allianceauth/srp/templates/srp/management.html:70
|
||||
#: allianceauth/srp/templates/srp/data.html:100
|
||||
#: allianceauth/srp/templates/srp/management.html:68
|
||||
msgid "Link"
|
||||
msgstr "Link"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:163
|
||||
#: allianceauth/srp/templates/srp/data.html:161
|
||||
msgid "No SRP requests for this fleet."
|
||||
msgstr ""
|
||||
|
||||
@@ -2445,39 +2463,39 @@ msgstr ""
|
||||
msgid "View All"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:27
|
||||
#: allianceauth/srp/templates/srp/management.html:25
|
||||
msgid "Add SRP Fleet"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:48
|
||||
#: allianceauth/srp/templates/srp/management.html:46
|
||||
msgid "Fleet AAR"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:49
|
||||
#: allianceauth/srp/templates/srp/management.html:47
|
||||
msgid "Fleet SRP Code"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:50
|
||||
#: allianceauth/srp/templates/srp/management.html:48
|
||||
msgid "Fleet ISK Cost"
|
||||
msgstr "Vloot ISK Kost"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:51
|
||||
#: allianceauth/srp/templates/srp/management.html:49
|
||||
msgid "SRP Status"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:52
|
||||
#: allianceauth/srp/templates/srp/management.html:50
|
||||
msgid "Pending Requests"
|
||||
msgstr "Lopende Aanvragen"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:91
|
||||
#: allianceauth/srp/templates/srp/management.html:89
|
||||
msgid "Completed"
|
||||
msgstr "Voltooid"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:108
|
||||
#: allianceauth/srp/templates/srp/management.html:106
|
||||
msgid "Are you sure you want to delete this SRP code and its contents?"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:129
|
||||
#: allianceauth/srp/templates/srp/management.html:127
|
||||
msgid "No SRP fleets created."
|
||||
msgstr ""
|
||||
|
||||
@@ -2613,67 +2631,120 @@ msgstr ""
|
||||
msgid "Your Server received an ESI error response code of "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
|
||||
msgid "Alliance Auth Notifications"
|
||||
msgstr "Alliantie Authenticatie Notificaties"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
|
||||
msgid "No notifications at this time"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:11
|
||||
msgid "second"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
|
||||
msgid "Powered by GitLab"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:12
|
||||
msgid "seconds"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
|
||||
msgid "Support Discord"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:13
|
||||
msgid "minute"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:49
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||
msgid "Software Version"
|
||||
msgstr "Software Versie"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:56
|
||||
msgid "Current"
|
||||
msgstr "Huidige"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
|
||||
msgid "Latest Stable"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:14
|
||||
msgid "minutes"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:68
|
||||
msgid "Update available"
|
||||
msgstr "Update Beschikbaar"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
|
||||
msgid "Latest Pre-Release"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
|
||||
msgid "hour"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
|
||||
msgid "Pre-Release available"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:16
|
||||
msgid "hours"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
|
||||
msgid "Task Queue"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:17
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" Status of %(total)s processed tasks • last %(latest)s\n"
|
||||
" "
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:18
|
||||
msgid "ERROR"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:112
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:19
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:113
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
|
||||
msgid "queued"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:21
|
||||
msgid "succeeded"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:22
|
||||
msgid "retried"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:23
|
||||
msgid "failed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
|
||||
msgid "Debug mode"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:34
|
||||
msgid ""
|
||||
"Debug mode is currently turned on!<br>Make sure to turn it off as soon as "
|
||||
"you are finished testing."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:46
|
||||
msgid "Alliance Auth Notifications"
|
||||
msgstr "Alliantie Authenticatie Notificaties"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:58
|
||||
msgid "No notifications at this time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:67
|
||||
msgid "Powered by GitLab"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:73
|
||||
msgid "Support Discord"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:87
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
|
||||
msgid "Software Version"
|
||||
msgstr "Software Versie"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:94
|
||||
msgid "Current"
|
||||
msgstr "Huidige"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:101
|
||||
msgid "Latest Stable"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:106
|
||||
msgid "Update available"
|
||||
msgstr "Update Beschikbaar"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:114
|
||||
msgid "Latest Pre-Release"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:119
|
||||
msgid "Pre-Release available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:129
|
||||
msgid "Task Queue"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:134
|
||||
msgid ""
|
||||
"\n"
|
||||
" Status of <span id=\"total-task-count\">?</span> processed tasks • last <span id=\"celery-uptime\">?</span>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
||||
msgid "AA Documentation"
|
||||
msgstr "AA Documentatie"
|
||||
@@ -2897,7 +2968,7 @@ msgid "Theft"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:52
|
||||
msgid "Upcoming Timers"
|
||||
msgstr ""
|
||||
|
||||
@@ -2925,7 +2996,7 @@ msgid "Create Timer"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:22
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:20
|
||||
msgid "Create Structure Timer"
|
||||
msgstr ""
|
||||
|
||||
@@ -2943,11 +3014,11 @@ msgstr "Constructie"
|
||||
msgid "Structure Timer Management"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:41
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:39
|
||||
msgid "Corporation Timers"
|
||||
msgstr "Corporatie Timers"
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:72
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:70
|
||||
msgid "Past Timers"
|
||||
msgstr "Verlopen Timers."
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -7,17 +7,17 @@
|
||||
# Shen Yang, 2023
|
||||
# 85b931f94c2441449e78b527e0a313ae_baf2e99 <639a60f913241ffb1c9bd90bc93a541f_869335>, 2023
|
||||
# Aaron BuBu <351793078@qq.com>, 2023
|
||||
# Joel Falknau <ozirascal@gmail.com>, 2023
|
||||
# Aika Yu, 2025
|
||||
# Joel Falknau <ozirascal@gmail.com>, 2025
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-06-19 20:23+1000\n"
|
||||
"POT-Creation-Date: 2026-01-21 15:33+1000\n"
|
||||
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
||||
"Last-Translator: Aika Yu, 2025\n"
|
||||
"Last-Translator: Joel Falknau <ozirascal@gmail.com>, 2025\n"
|
||||
"Language-Team: Chinese Simplified (https://app.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -64,7 +64,7 @@ msgid "You are not allowed to add or remove these restricted groups: %s"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:72
|
||||
#: allianceauth/project_template/project_name/settings/base.py:106
|
||||
#: allianceauth/project_template/project_name/settings/base.py:105
|
||||
msgid "English"
|
||||
msgstr "英语"
|
||||
|
||||
@@ -73,57 +73,57 @@ msgid "Czech"
|
||||
msgstr "捷克语"
|
||||
|
||||
#: allianceauth/authentication/models.py:74
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||
msgid "German"
|
||||
msgstr "德语"
|
||||
|
||||
#: allianceauth/authentication/models.py:75
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||
msgid "Spanish"
|
||||
msgstr "西班牙语"
|
||||
|
||||
#: allianceauth/authentication/models.py:76
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||
msgid "Italian"
|
||||
msgstr "意大利语"
|
||||
|
||||
#: allianceauth/authentication/models.py:77
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||
msgid "Japanese"
|
||||
msgstr "日语"
|
||||
|
||||
#: allianceauth/authentication/models.py:78
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||
msgid "Korean"
|
||||
msgstr "韩语"
|
||||
|
||||
#: allianceauth/authentication/models.py:79
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||
msgid "French"
|
||||
msgstr "法语"
|
||||
|
||||
#: allianceauth/authentication/models.py:80
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
msgid "Russian"
|
||||
msgstr "俄语"
|
||||
|
||||
#: allianceauth/authentication/models.py:81
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||
msgid "Dutch"
|
||||
msgstr "荷兰语"
|
||||
|
||||
#: allianceauth/authentication/models.py:82
|
||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||
msgid "Polish"
|
||||
msgstr "波兰语"
|
||||
|
||||
#: allianceauth/authentication/models.py:83
|
||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||
msgid "Ukrainian"
|
||||
msgstr "乌克兰语"
|
||||
|
||||
#: allianceauth/authentication/models.py:84
|
||||
#: allianceauth/project_template/project_name/settings/base.py:118
|
||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||
msgid "Simplified Chinese"
|
||||
msgstr "简体中文"
|
||||
|
||||
@@ -132,22 +132,30 @@ msgstr "简体中文"
|
||||
msgid "Language"
|
||||
msgstr "语言"
|
||||
|
||||
#: allianceauth/authentication/models.py:105
|
||||
#: allianceauth/authentication/models.py:106
|
||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||
msgid "Night Mode"
|
||||
msgstr "夜间模式"
|
||||
|
||||
#: allianceauth/authentication/models.py:109
|
||||
#: allianceauth/authentication/models.py:110
|
||||
#: allianceauth/theme/templates/theme/theme_select.html:4
|
||||
msgid "Theme"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:126
|
||||
#: allianceauth/authentication/models.py:117
|
||||
msgid "Minimize Sidebar Menu"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:119
|
||||
msgid "Keep the sidebar menu minimized"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:133
|
||||
#, python-format
|
||||
msgid "State changed to: %s"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/models.py:127
|
||||
#: allianceauth/authentication/models.py:134
|
||||
#, python-format
|
||||
msgid "Your user's state is now: %(state)s"
|
||||
msgstr ""
|
||||
@@ -168,14 +176,12 @@ msgstr "角色"
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:4
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
|
||||
msgid "Add Character"
|
||||
msgstr "添加角色"
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
|
||||
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:10
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:8
|
||||
msgid "Change Main"
|
||||
msgstr "修改主要角色"
|
||||
|
||||
@@ -209,8 +215,8 @@ msgstr ""
|
||||
|
||||
#: allianceauth/authentication/templates/authentication/tokens.html:7
|
||||
#: allianceauth/authentication/templates/authentication/tokens.html:11
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:133
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:136
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:158
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:161
|
||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
|
||||
msgid "Token Management"
|
||||
msgstr ""
|
||||
@@ -232,8 +238,8 @@ msgstr ""
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:168
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:94
|
||||
#: allianceauth/srp/templates/srp/data.html:83
|
||||
#: allianceauth/srp/templates/srp/management.html:53
|
||||
#: allianceauth/srp/templates/srp/data.html:81
|
||||
#: allianceauth/srp/templates/srp/management.html:51
|
||||
msgid "Actions"
|
||||
msgstr "操作"
|
||||
|
||||
@@ -246,8 +252,8 @@ msgstr "操作"
|
||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:41
|
||||
#: 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:118
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:54
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:129
|
||||
msgid "Character"
|
||||
msgstr "角色"
|
||||
|
||||
@@ -284,49 +290,49 @@ msgstr "注册"
|
||||
msgid "Invalid or expired activation link."
|
||||
msgstr "激活链接无效或过期"
|
||||
|
||||
#: allianceauth/authentication/views.py:158
|
||||
#: allianceauth/authentication/views.py:159
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Cannot change main character to %(char)s: character owned by a different "
|
||||
"account."
|
||||
msgstr "不能修改主角色为%(char)s:这个角色被另一个账户所拥有"
|
||||
|
||||
#: allianceauth/authentication/views.py:165
|
||||
#: allianceauth/authentication/views.py:166
|
||||
#, python-format
|
||||
msgid "Changed main character to %s"
|
||||
msgstr "修改主角色为%s"
|
||||
|
||||
#: allianceauth/authentication/views.py:179
|
||||
#: allianceauth/authentication/views.py:180
|
||||
#, python-format
|
||||
msgid "Added %(name)s to your account."
|
||||
msgstr "添加%(name)s到您的账户"
|
||||
|
||||
#: allianceauth/authentication/views.py:181
|
||||
#: allianceauth/authentication/views.py:182
|
||||
#, python-format
|
||||
msgid "Failed to add %(name)s to your account: they already have an account."
|
||||
msgstr "添加%(name)s到您的账户失败:他们已经在一个账户中了"
|
||||
|
||||
#: allianceauth/authentication/views.py:226
|
||||
#: allianceauth/authentication/views.py:227
|
||||
msgid ""
|
||||
"Unable to authenticate as the selected character. Please log in with the "
|
||||
"main character associated with this account."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/authentication/views.py:293
|
||||
#: allianceauth/authentication/views.py:294
|
||||
msgid "Registration token has expired."
|
||||
msgstr "注册令牌过期。"
|
||||
|
||||
#: allianceauth/authentication/views.py:354
|
||||
#: allianceauth/authentication/views.py:355
|
||||
msgid ""
|
||||
"Sent confirmation email. Please follow the link to confirm your email "
|
||||
"address."
|
||||
msgstr "已经发送了确认邮件。请按照链接确定您的电邮地址"
|
||||
|
||||
#: allianceauth/authentication/views.py:360
|
||||
#: allianceauth/authentication/views.py:361
|
||||
msgid "Confirmed your email address. Please login to continue."
|
||||
msgstr "已确认您的电邮地址。请登录以继续"
|
||||
|
||||
#: allianceauth/authentication/views.py:366
|
||||
#: allianceauth/authentication/views.py:367
|
||||
msgid "Registration of new accounts is not allowed at this time."
|
||||
msgstr ""
|
||||
|
||||
@@ -343,11 +349,11 @@ msgstr "军团成员数据"
|
||||
msgid "Corporations"
|
||||
msgstr "所有公司"
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:35
|
||||
#: allianceauth/corputils/templates/corputils/base.html:31
|
||||
msgid "Add corporation"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/corputils/templates/corputils/base.html:51
|
||||
#: allianceauth/corputils/templates/corputils/base.html:47
|
||||
msgid "Search all corporations..."
|
||||
msgstr "搜索所有公司"
|
||||
|
||||
@@ -384,6 +390,8 @@ msgstr "注册过的角色"
|
||||
#: allianceauth/corputils/templates/corputils/corpstats.html:125
|
||||
#: allianceauth/corputils/templates/corputils/search.html:18
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:31
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:58
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:133
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:35
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:122
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:166
|
||||
@@ -495,7 +503,7 @@ msgid "Fleet Activity Tracking"
|
||||
msgstr "舰队活动历史"
|
||||
|
||||
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8
|
||||
#: allianceauth/srp/templates/srp/management.html:44
|
||||
#: allianceauth/srp/templates/srp/management.html:42
|
||||
msgid "Fleet Name"
|
||||
msgstr "舰队名"
|
||||
|
||||
@@ -754,14 +762,18 @@ msgstr "PAP链接已过期"
|
||||
#: allianceauth/fleetactivitytracking/views.py:323
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Cannot register the fleet participation for {character.character_name}. The "
|
||||
"character needs to be online."
|
||||
"Cannot register the fleet participation for {character_name}. The character "
|
||||
"needs to be online."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/framework/apps.py:16
|
||||
msgid "Framework"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/framework/templates/framework/datatables/process-indicator.html:8
|
||||
msgid "Loading …"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/apps.py:8
|
||||
#: allianceauth/groupmanagement/auth_hooks.py:18
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:18
|
||||
@@ -933,8 +945,8 @@ msgid "Group Members"
|
||||
msgstr "群组成员"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:30
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:56
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:119
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:55
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:130
|
||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:33
|
||||
msgid "Organization"
|
||||
msgstr "组织"
|
||||
@@ -946,7 +958,9 @@ msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:61
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:85
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:148
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:106
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:160
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:181
|
||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit_row.html:18
|
||||
msgid "(unknown)"
|
||||
msgstr ""
|
||||
@@ -979,7 +993,7 @@ msgstr "描述"
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:123
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:167
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
|
||||
#: allianceauth/srp/templates/srp/data.html:81
|
||||
#: allianceauth/srp/templates/srp/data.html:79
|
||||
msgid "Status"
|
||||
msgstr "状态"
|
||||
|
||||
@@ -992,7 +1006,7 @@ msgid "Hidden"
|
||||
msgstr "已隐藏"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||
msgid "Open"
|
||||
msgstr "公开"
|
||||
|
||||
@@ -1026,8 +1040,8 @@ msgid "Leaders"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:37
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:57
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:120
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:56
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:131
|
||||
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:30
|
||||
#: allianceauth/services/modules/openfire/forms.py:6
|
||||
msgid "Group"
|
||||
@@ -1037,18 +1051,10 @@ msgstr "用户组"
|
||||
msgid "Leave"
|
||||
msgstr "离开"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
|
||||
#: allianceauth/srp/templates/srp/data.html:120
|
||||
#: allianceauth/srp/templates/srp/management.html:87
|
||||
msgid "Pending"
|
||||
msgstr "待定"
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
|
||||
msgid "Request pending"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
|
||||
msgid "Join"
|
||||
@@ -1058,7 +1064,11 @@ msgstr "加入"
|
||||
msgid "Request"
|
||||
msgstr "申请"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:99
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:93
|
||||
msgid "Retract"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:103
|
||||
msgid "No groups available."
|
||||
msgstr "没有可用用户组"
|
||||
|
||||
@@ -1080,22 +1090,22 @@ msgstr "离组的请求"
|
||||
msgid "Group Membership"
|
||||
msgstr "用户组成员"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:93
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:156
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:96
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:171
|
||||
msgid "Accept"
|
||||
msgstr "接受"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:96
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:160
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:99
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:174
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:104
|
||||
msgid "Reject"
|
||||
msgstr "拒绝"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:106
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:117
|
||||
msgid "No group add requests."
|
||||
msgstr "没有加入用户组的请求,小老弟你是不是摇不到人"
|
||||
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:169
|
||||
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:190
|
||||
msgid "No group leave requests."
|
||||
msgstr "没有离开用户组的请求,小老弟你人缘可以啊?"
|
||||
|
||||
@@ -1187,6 +1197,19 @@ msgstr "你已经有了该组的未决离开请求"
|
||||
msgid "Applied to leave group %(group)s."
|
||||
msgstr "已经离开群组%(group)s"
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:438
|
||||
msgid "You cannot retract that request"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:450
|
||||
#, python-format
|
||||
msgid "Retracted application to group %(group)s."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/groupmanagement/views.py:458
|
||||
msgid "You have no open request for that group."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/hrapplications/apps.py:8
|
||||
msgid "HR Applications"
|
||||
msgstr ""
|
||||
@@ -1257,12 +1280,23 @@ msgstr "创建申请"
|
||||
msgid "Username"
|
||||
msgstr "用户名"
|
||||
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
|
||||
#: allianceauth/srp/templates/srp/data.html:118
|
||||
#: allianceauth/srp/templates/srp/management.html:85
|
||||
msgid "Pending"
|
||||
msgstr "待定"
|
||||
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:48
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:141
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:185
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
|
||||
#: allianceauth/hrapplications/templates/hrapplications/view.html:21
|
||||
#: allianceauth/srp/templates/srp/data.html:112
|
||||
#: allianceauth/srp/templates/srp/data.html:110
|
||||
msgid "Approved"
|
||||
msgstr "通过"
|
||||
|
||||
@@ -1270,7 +1304,7 @@ msgstr "通过"
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
|
||||
#: allianceauth/hrapplications/templates/hrapplications/management.html:187
|
||||
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
|
||||
#: allianceauth/srp/templates/srp/data.html:116
|
||||
#: allianceauth/srp/templates/srp/data.html:114
|
||||
msgid "Rejected"
|
||||
msgstr "拒绝"
|
||||
|
||||
@@ -1474,39 +1508,47 @@ msgid "Notifications"
|
||||
msgstr "通知"
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:77
|
||||
msgid "Sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:93
|
||||
msgid "Minimize Sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:102
|
||||
msgid "Super User"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:83
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:86
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:108
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:111
|
||||
msgid "Alliance Auth Documentation"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:94
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:97
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:119
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:122
|
||||
msgid "Alliance Auth Discord"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:105
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:108
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:130
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:133
|
||||
msgid "Alliance Auth Git"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:118
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:121
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:143
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:146
|
||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
||||
msgid "Admin"
|
||||
msgstr "管理员"
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:144
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:147
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:169
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:172
|
||||
msgid "Sign Out"
|
||||
msgstr "登出"
|
||||
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:155
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:158
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:180
|
||||
#: allianceauth/menu/templates/menu/menu-user.html:183
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
|
||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
|
||||
msgid "Sign In"
|
||||
msgstr "登入"
|
||||
|
||||
@@ -1534,11 +1576,11 @@ msgstr "未读"
|
||||
msgid "Read"
|
||||
msgstr "已读"
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/list.html:32
|
||||
#: allianceauth/notifications/templates/notifications/list.html:31
|
||||
msgid "Mark all notifications as read"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/notifications/templates/notifications/list.html:38
|
||||
#: allianceauth/notifications/templates/notifications/list.html:35
|
||||
msgid "Delete all read notifications"
|
||||
msgstr ""
|
||||
|
||||
@@ -1603,12 +1645,12 @@ msgid "Operation Type"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/form.py:17
|
||||
#: allianceauth/srp/templates/srp/management.html:47
|
||||
#: allianceauth/srp/templates/srp/management.html:45
|
||||
msgid "Fleet Commander"
|
||||
msgstr "FC"
|
||||
|
||||
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
|
||||
#: allianceauth/srp/templates/srp/data.html:72
|
||||
#: allianceauth/srp/templates/srp/data.html:70
|
||||
msgid "Additional Info"
|
||||
msgstr "其他信息"
|
||||
|
||||
@@ -1617,7 +1659,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/add.html:8
|
||||
#: allianceauth/optimer/templates/optimer/management.html:18
|
||||
#: allianceauth/optimer/templates/optimer/management.html:16
|
||||
msgid "Create Operation"
|
||||
msgstr "起一个队"
|
||||
|
||||
@@ -1666,26 +1708,26 @@ msgstr "FC"
|
||||
msgid "Fleet Operation Management"
|
||||
msgstr "管理搞事队"
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:28
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:32
|
||||
#: allianceauth/optimer/templates/optimer/management.html:26
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:30
|
||||
msgid "Current EVE time:"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:36
|
||||
#: allianceauth/optimer/templates/optimer/management.html:34
|
||||
msgid "Next Fleet Operations"
|
||||
msgstr "下一个舰队任务"
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:44
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:63
|
||||
#: allianceauth/optimer/templates/optimer/management.html:42
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:61
|
||||
msgid "No upcoming timers."
|
||||
msgstr "没有快到的时间节点,歇一会吧"
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:52
|
||||
#: allianceauth/optimer/templates/optimer/management.html:50
|
||||
msgid "Past Fleet Operations"
|
||||
msgstr "过去的舰队任务"
|
||||
|
||||
#: allianceauth/optimer/templates/optimer/management.html:60
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:81
|
||||
#: allianceauth/optimer/templates/optimer/management.html:58
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:79
|
||||
msgid "No past timers."
|
||||
msgstr "没有已经结束的时间节点啦"
|
||||
|
||||
@@ -1765,9 +1807,9 @@ msgstr "声望"
|
||||
msgid "That service account already exists"
|
||||
msgstr "该服务账户仍然存在"
|
||||
|
||||
#: allianceauth/services/abstract.py:103
|
||||
#: allianceauth/services/abstract.py:105
|
||||
#, python-brace-format
|
||||
msgid "Successfully set your {self.service_name} password"
|
||||
msgid "Successfully set your {service_name} password"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12
|
||||
@@ -2253,7 +2295,7 @@ msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/services/templates/services/service_status.html:7
|
||||
#: allianceauth/srp/templates/srp/management.html:78
|
||||
#: allianceauth/srp/templates/srp/management.html:76
|
||||
msgid "Disabled"
|
||||
msgstr "失效了"
|
||||
|
||||
@@ -2291,12 +2333,12 @@ msgid "Ship Replacement"
|
||||
msgstr "补损"
|
||||
|
||||
#: allianceauth/srp/form.py:9
|
||||
#: allianceauth/srp/templates/srp/management.html:45
|
||||
#: allianceauth/srp/templates/srp/management.html:43
|
||||
msgid "Fleet Time"
|
||||
msgstr "集结时间"
|
||||
|
||||
#: allianceauth/srp/form.py:10
|
||||
#: allianceauth/srp/templates/srp/management.html:46
|
||||
#: allianceauth/srp/templates/srp/management.html:44
|
||||
msgid "Fleet Doctrine"
|
||||
msgstr "舰队船型"
|
||||
|
||||
@@ -2308,11 +2350,11 @@ msgstr ""
|
||||
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:46
|
||||
#: allianceauth/srp/form.py:49
|
||||
msgid "Invalid Link. Please post a direct link to a killmail."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/form.py:53
|
||||
#: allianceauth/srp/form.py:56
|
||||
msgid "After Action Report Link"
|
||||
msgstr "战报链接"
|
||||
|
||||
@@ -2345,7 +2387,7 @@ msgid "Give this link to the line members."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:8
|
||||
#: allianceauth/srp/templates/srp/data.html:39
|
||||
#: allianceauth/srp/templates/srp/data.html:37
|
||||
msgid "SRP Fleet Data"
|
||||
msgstr "舰队补损信息"
|
||||
|
||||
@@ -2353,64 +2395,64 @@ msgstr "舰队补损信息"
|
||||
msgid "View Fleets"
|
||||
msgstr "查看舰队"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:26
|
||||
#: allianceauth/srp/templates/srp/data.html:24
|
||||
msgid "Mark Incomplete"
|
||||
msgstr "标记为未完成"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:30
|
||||
#: allianceauth/srp/templates/srp/data.html:28
|
||||
msgid "Mark Completed"
|
||||
msgstr "标记为已完成"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:48
|
||||
#: allianceauth/srp/templates/srp/data.html:142
|
||||
#: allianceauth/srp/templates/srp/data.html:46
|
||||
#: allianceauth/srp/templates/srp/data.html:140
|
||||
msgid "Total Losses:"
|
||||
msgstr "损失总额:"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:49
|
||||
#: allianceauth/srp/templates/srp/data.html:143
|
||||
#: allianceauth/srp/templates/srp/management.html:36
|
||||
#: allianceauth/srp/templates/srp/data.html:47
|
||||
#: allianceauth/srp/templates/srp/data.html:141
|
||||
#: allianceauth/srp/templates/srp/management.html:34
|
||||
msgid "Total ISK Cost:"
|
||||
msgstr "ISK花费总额:"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:60
|
||||
#: allianceauth/srp/templates/srp/data.html:154
|
||||
#: allianceauth/srp/templates/srp/data.html:58
|
||||
#: allianceauth/srp/templates/srp/data.html:152
|
||||
msgid "Are you sure you want to delete SRP requests?"
|
||||
msgstr "老哥,你确定要删了补损请求么?"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:70
|
||||
#: allianceauth/srp/templates/srp/data.html:68
|
||||
msgid "Pilot Name"
|
||||
msgstr "玩家ID"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:71
|
||||
#: allianceauth/srp/templates/srp/data.html:69
|
||||
msgid "Killboard Link"
|
||||
msgstr "KB网链接"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:73
|
||||
#: allianceauth/srp/templates/srp/data.html:71
|
||||
msgid "Ship Type"
|
||||
msgstr "船型"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:74
|
||||
#: allianceauth/srp/templates/srp/data.html:72
|
||||
msgid "Killboard Loss Amt"
|
||||
msgstr "KB网总损失"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:76
|
||||
#: allianceauth/srp/templates/srp/data.html:74
|
||||
msgid "SRP ISK Cost"
|
||||
msgstr "补损ISK花费"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:77
|
||||
#: allianceauth/srp/templates/srp/data.html:75
|
||||
msgid "Click value to edit Enter to save & next ESC to cancel"
|
||||
msgstr "点击数值就可以编辑啦,按回车确认,按ESC取消"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:80
|
||||
#: allianceauth/srp/templates/srp/data.html:78
|
||||
msgid "Post Time"
|
||||
msgstr "发布时间"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:102
|
||||
#: allianceauth/srp/templates/srp/management.html:70
|
||||
#: allianceauth/srp/templates/srp/data.html:100
|
||||
#: allianceauth/srp/templates/srp/management.html:68
|
||||
msgid "Link"
|
||||
msgstr "链接"
|
||||
|
||||
#: allianceauth/srp/templates/srp/data.html:163
|
||||
#: allianceauth/srp/templates/srp/data.html:161
|
||||
msgid "No SRP requests for this fleet."
|
||||
msgstr "这次起队没有补损请求!大捷"
|
||||
|
||||
@@ -2422,39 +2464,39 @@ msgstr "补损管理"
|
||||
msgid "View All"
|
||||
msgstr "查看全部"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:27
|
||||
#: allianceauth/srp/templates/srp/management.html:25
|
||||
msgid "Add SRP Fleet"
|
||||
msgstr "添加补损舰队"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:48
|
||||
#: allianceauth/srp/templates/srp/management.html:46
|
||||
msgid "Fleet AAR"
|
||||
msgstr "舰队战报"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:49
|
||||
#: allianceauth/srp/templates/srp/management.html:47
|
||||
msgid "Fleet SRP Code"
|
||||
msgstr "补损编号"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:50
|
||||
#: allianceauth/srp/templates/srp/management.html:48
|
||||
msgid "Fleet ISK Cost"
|
||||
msgstr "舰队ISK花费"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:51
|
||||
#: allianceauth/srp/templates/srp/management.html:49
|
||||
msgid "SRP Status"
|
||||
msgstr "补损状态"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:52
|
||||
#: allianceauth/srp/templates/srp/management.html:50
|
||||
msgid "Pending Requests"
|
||||
msgstr "待处理请求"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:91
|
||||
#: allianceauth/srp/templates/srp/management.html:89
|
||||
msgid "Completed"
|
||||
msgstr "已完成"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:108
|
||||
#: allianceauth/srp/templates/srp/management.html:106
|
||||
msgid "Are you sure you want to delete this SRP code and its contents?"
|
||||
msgstr "老哥,你确认要把这次补损的编号和内容都删了?"
|
||||
|
||||
#: allianceauth/srp/templates/srp/management.html:129
|
||||
#: allianceauth/srp/templates/srp/management.html:127
|
||||
msgid "No SRP fleets created."
|
||||
msgstr "没有创建任何补损舰队,你快灭灯了吧?"
|
||||
|
||||
@@ -2586,71 +2628,124 @@ msgstr "找不到ID是%(requestid)s的补损申请呀,老哥眼花了?"
|
||||
msgid "Saved changes to SRP fleet %(fleetname)s"
|
||||
msgstr "你做的修改已经保存到%(fleetname)s这个补损舰队啦,尽情白给吧!"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:4
|
||||
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:5
|
||||
msgid "Your Server received an ESI error response code of "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
|
||||
msgid "Alliance Auth Notifications"
|
||||
msgstr "系统通知"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
|
||||
msgid "No notifications at this time"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:11
|
||||
msgid "second"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
|
||||
msgid "Powered by GitLab"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:12
|
||||
msgid "seconds"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
|
||||
msgid "Support Discord"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:13
|
||||
msgid "minute"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:49
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
|
||||
msgid "Software Version"
|
||||
msgstr "软件版本"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:14
|
||||
msgid "minutes"
|
||||
msgstr "分钟数"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:56
|
||||
msgid "Current"
|
||||
msgstr "当前版本"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
|
||||
msgid "Latest Stable"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
|
||||
msgid "hour"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:68
|
||||
msgid "Update available"
|
||||
msgstr "有更新!"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
|
||||
msgid "Latest Pre-Release"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:16
|
||||
msgid "hours"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
|
||||
msgid "Pre-Release available"
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:17
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
|
||||
msgid "Task Queue"
|
||||
msgstr "任务队列"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
" Status of %(total)s processed tasks • last %(latest)s\n"
|
||||
" "
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:18
|
||||
msgid "ERROR"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:112
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:19
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:113
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
|
||||
msgid "queued"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:21
|
||||
msgid "succeeded"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:22
|
||||
msgid "retried"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:23
|
||||
msgid "failed"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
|
||||
msgid "Debug mode"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:34
|
||||
msgid ""
|
||||
"Debug mode is currently turned on!<br>Make sure to turn it off as soon as "
|
||||
"you are finished testing."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:46
|
||||
msgid "Alliance Auth Notifications"
|
||||
msgstr "系统通知"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:58
|
||||
msgid "No notifications at this time"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:67
|
||||
msgid "Powered by GitLab"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:73
|
||||
msgid "Support Discord"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:87
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
|
||||
msgid "Software Version"
|
||||
msgstr "软件版本"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:94
|
||||
msgid "Current"
|
||||
msgstr "当前版本"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:101
|
||||
msgid "Latest Stable"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:106
|
||||
msgid "Update available"
|
||||
msgstr "有更新!"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:114
|
||||
msgid "Latest Pre-Release"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:119
|
||||
msgid "Pre-Release available"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:129
|
||||
msgid "Task Queue"
|
||||
msgstr "任务队列"
|
||||
|
||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:134
|
||||
msgid ""
|
||||
"\n"
|
||||
" Status of <span id=\"total-task-count\">?</span> processed tasks • last <span id=\"celery-uptime\">?</span>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
||||
msgid "AA Documentation"
|
||||
msgstr ""
|
||||
@@ -2874,7 +2969,7 @@ msgid "Theft"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:52
|
||||
msgid "Upcoming Timers"
|
||||
msgstr ""
|
||||
|
||||
@@ -2902,7 +2997,7 @@ msgid "Create Timer"
|
||||
msgstr "创建时间计划表"
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:22
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:20
|
||||
msgid "Create Structure Timer"
|
||||
msgstr "创建建筑时间表"
|
||||
|
||||
@@ -2920,11 +3015,11 @@ msgstr "建筑"
|
||||
msgid "Structure Timer Management"
|
||||
msgstr "管理建筑时间表"
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:41
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:39
|
||||
msgid "Corporation Timers"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:72
|
||||
#: allianceauth/timerboard/templates/timerboard/view.html:70
|
||||
msgid "Past Timers"
|
||||
msgstr "已经过去的时间节点"
|
||||
|
||||
@@ -2937,36 +3032,36 @@ msgstr "已经把%(system)s星系里%(time)s的时间节点设置好了!CTA!
|
||||
msgid "Saved changes to the timer."
|
||||
msgstr "保存至新的计划表"
|
||||
|
||||
#: allianceauth/views.py:55
|
||||
#: allianceauth/views.py:78
|
||||
msgid "Bad Request"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:57 allianceauth/views.py:87
|
||||
#: allianceauth/views.py:80 allianceauth/views.py:110
|
||||
msgid ""
|
||||
"Auth encountered an error processing your request, please try again. If the "
|
||||
"error persists, please contact the administrators."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:65
|
||||
#: allianceauth/views.py:88
|
||||
msgid "Permission Denied"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:67
|
||||
#: allianceauth/views.py:90
|
||||
msgid ""
|
||||
"You do not have permission to access the requested page. If you believe this"
|
||||
" is in error please contact the administrators."
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:75
|
||||
#: allianceauth/views.py:98
|
||||
msgid "Page Not Found"
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:77
|
||||
#: allianceauth/views.py:100
|
||||
msgid ""
|
||||
"Page does not exist. If you believe this is in error please contact the "
|
||||
"administrators. "
|
||||
msgstr ""
|
||||
|
||||
#: allianceauth/views.py:85
|
||||
#: allianceauth/views.py:108
|
||||
msgid "Internal Server Error"
|
||||
msgstr ""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import annotations
|
||||
from __future__ import annotations # Still needed for Python 3.8, replaced with better implementations in Py39+
|
||||
|
||||
import logging
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
<li class="nav-item" id="menu_item_notifications">
|
||||
<a class="nav-link {% navactive request 'notifications:' %}" href="{% url 'notifications:list' %}">
|
||||
{% with unread_count=request.user|user_unread_notification_count %}
|
||||
<i class="fa-solid fa-bell{% if unread_count %} text-danger{% endif %}"></i>
|
||||
<i class="fa-solid fa-bell me-2 fa-fw{% if unread_count %} text-danger{% endif %}"></i>
|
||||
{% endwith %}
|
||||
|
||||
<span class="d-lg-none d-md-inline m-2">
|
||||
<span class="d-lg-none d-md-inline">
|
||||
{% translate "Notifications" %}
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@@ -72,6 +72,31 @@
|
||||
|
||||
{% theme_select %}
|
||||
|
||||
{% if user.is_authenticated and not request.is_mobile_device %}
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><h6 class="dropdown-header">{% translate "Sidebar" %}</h6></li>
|
||||
|
||||
<li>
|
||||
<form class="dropdown-item" action="{% url 'minimize_sidebar' %}?next={{ request.path|urlencode }}" method="post">
|
||||
{% csrf_token %}
|
||||
|
||||
<div class="form-check form-switch">
|
||||
<input
|
||||
class="form-check-input"
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
id="toggle-sidebar"
|
||||
onchange="this.form.submit()"
|
||||
{% if request.session.MINIMIZE_SIDEBAR %}checked{% endif %}
|
||||
>
|
||||
<label class="form-check-label" for="toggle-sidebar">
|
||||
{% translate "Minimize Sidebar" %}
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if user.is_superuser %}
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><h6 class="dropdown-header">{% translate "Super User" %}</h6></li>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{% load menu_menu_items %}
|
||||
|
||||
<div class="col-auto px-0">
|
||||
<div class="collapse collapse-horizontal" tabindex="-1" id="sidebar">
|
||||
<div class="collapse collapse-horizontal {% if user.is_authenticated and not request.is_mobile_device and not request.session.MINIMIZE_SIDEBAR %}show{% endif %}" tabindex="-1" id="sidebar">
|
||||
<div>
|
||||
<div class="nav-padding navbar-dark text-bg-dark px-0 d-flex flex-column overflow-hidden vh-100 {% if not user.is_authenticated %}position-relative{% endif %}">
|
||||
{% if user.is_authenticated %}
|
||||
|
||||
65
allianceauth/middleware.py
Normal file
65
allianceauth/middleware.py
Normal file
@@ -0,0 +1,65 @@
|
||||
"""
|
||||
Alliance Auth Middleware
|
||||
"""
|
||||
|
||||
from user_agents import parse
|
||||
|
||||
|
||||
class DeviceDetectionMiddleware:
|
||||
"""
|
||||
Middleware to detect the type of device making the request.
|
||||
Sets flags on the request object for easy access in views and templates.
|
||||
|
||||
Flags include:
|
||||
- is_mobile: True if the device is a mobile phone.
|
||||
- is_tablet: True if the device is a tablet.
|
||||
- is_mobile_device: True if the device is either a mobile phone or a tablet.
|
||||
- is_touch_capable: True if the device has touch capabilities.
|
||||
- is_pc: True if the device is a desktop or laptop computer.
|
||||
- is_bot: True if the device is identified as a bot or crawler.
|
||||
"""
|
||||
|
||||
def __init__(self, get_response):
|
||||
"""
|
||||
Initialize the middleware with the get_response callable.
|
||||
|
||||
:param get_response:
|
||||
:type get_response:
|
||||
"""
|
||||
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
"""
|
||||
Process the incoming request to determine if it's from a mobile device.
|
||||
|
||||
This method is called when the middleware is invoked. It inspects the
|
||||
`user-agent` header of the incoming HTTP request to determine the type
|
||||
of client making the request (e.g., mobile, tablet, PC, bot, etc.).
|
||||
Flags are set on the `request` object to indicate the client type.
|
||||
|
||||
:param request: The HTTP request object.
|
||||
:type request: HttpRequest
|
||||
:return: The HTTP response object after processing the request.
|
||||
:rtype: HttpResponse
|
||||
"""
|
||||
|
||||
# Retrieve the user-agent string from the request headers
|
||||
user_agent_string = request.headers.get("user-agent", "")
|
||||
|
||||
# Parse the user-agent string to extract client information
|
||||
user_agent = parse(user_agent_string)
|
||||
|
||||
# Set flags on the request object based on the client type
|
||||
request.is_mobile = user_agent.is_mobile # True if the client is a mobile phone
|
||||
request.is_tablet = user_agent.is_tablet # True if the client is a tablet
|
||||
request.is_mobile_device = user_agent.is_mobile or user_agent.is_tablet # True if mobile phone or tablet
|
||||
request.is_touch_capable = user_agent.is_touch_capable # True if the client supports touch input
|
||||
request.is_pc = user_agent.is_pc # True if the client is a PC
|
||||
request.is_bot = user_agent.is_bot # True if the client is a bot
|
||||
|
||||
# Pass the request to the next middleware or view and get the response
|
||||
response = self.get_response(request)
|
||||
|
||||
# Return the processed response
|
||||
return response
|
||||
@@ -28,17 +28,13 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block header_nav_collapse_right %}
|
||||
<li class="nav-item">
|
||||
<a href="{% url 'notifications:mark_all_read' %}" class="nav-link" title="{% translate 'Mark all notifications as read' %}">
|
||||
<i class="fa-solid fa-check-double"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% translate "Mark all notifications as read" as nav_item_title %}
|
||||
{% url "notifications:mark_all_read" as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-icon.html" with fa_icon="fa-solid fa-check-double" url=nav_item_link title=nav_item_title icon_on_mobile=True %}
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{% url 'notifications:delete_all_read' %}" class="nav-link" title="{% translate 'Delete all read notifications' %}">
|
||||
<i class="fa-solid fa-trash-can"></i>
|
||||
</a>
|
||||
</li>
|
||||
{% translate "Delete all read notifications" as nav_item_title %}
|
||||
{% url "notifications:mark_all_read" as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-icon.html" with fa_icon="fa-solid fa-trash-can" url=nav_item_link title=nav_item_title icon_on_mobile=True %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
{% for ops in timers %}
|
||||
<tbody>
|
||||
<tbody>
|
||||
{% for ops in timers %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ ops.operation_name }}
|
||||
@@ -55,8 +55,8 @@
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</tbody>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
||||
@@ -13,11 +13,9 @@
|
||||
|
||||
{% block header_nav_collapse_right %}
|
||||
{% if perms.auth.optimer_management %}
|
||||
<li class="nav-item">
|
||||
<a class="btn btn-success" href="{% url 'optimer:add' %}">
|
||||
{% translate "Create Operation" %}
|
||||
</a>
|
||||
</li>
|
||||
{% translate "Create Operation" as nav_item_title %}
|
||||
{% url "optimer:add" as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-button.html" with btn_modifier="success" url=nav_item_link title=nav_item_title fa_icon="fa-solid fa-plus" icon_on_mobile=True %}
|
||||
{% endif %}
|
||||
{% endblock header_nav_collapse_right %}
|
||||
|
||||
@@ -67,83 +65,85 @@
|
||||
{% include 'bundles/timers-js.html' %}
|
||||
|
||||
<script>
|
||||
// Data
|
||||
const timers = [
|
||||
{% for op in optimer %}
|
||||
{
|
||||
'id': {{ op.id }},
|
||||
'start': moment("{{ op.start | date:"c" }}"),
|
||||
'expired': false
|
||||
},
|
||||
{% endfor %}
|
||||
];
|
||||
$(document).ready(() => {
|
||||
// Data
|
||||
const timers = [
|
||||
{% for op in optimer %}
|
||||
{
|
||||
'id': {{ op.id }},
|
||||
'start': moment("{{ op.start | date:"c" }}"),
|
||||
'expired': false
|
||||
},
|
||||
{% endfor %}
|
||||
];
|
||||
|
||||
/**
|
||||
* Update a timer
|
||||
* @param timer Timer information
|
||||
*/
|
||||
const updateTimer = (timer) => {
|
||||
if (timer.start.isAfter(Date.now())) {
|
||||
const duration = moment.duration(timer.start - moment(), 'milliseconds');
|
||||
/**
|
||||
* Update a timer
|
||||
* @param timer Timer information
|
||||
*/
|
||||
const updateTimer = (timer) => {
|
||||
if (timer.start.isAfter(Date.now())) {
|
||||
const duration = moment.duration(timer.start - moment(), 'milliseconds');
|
||||
|
||||
document.getElementById("countdown" + timer.id).innerHTML = getDurationString(duration);
|
||||
} else {
|
||||
timer.expired = true;
|
||||
document.getElementById("countdown" + timer.id).innerHTML = getDurationString(duration);
|
||||
} else {
|
||||
timer.expired = true;
|
||||
|
||||
document.getElementById("countdown" + timer.id).innerHTML = "";
|
||||
}
|
||||
};
|
||||
document.getElementById("countdown" + timer.id).innerHTML = "";
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Update all timers
|
||||
*/
|
||||
const updateAllTimers = () => {
|
||||
const l = timers.length;
|
||||
/**
|
||||
* Update all timers
|
||||
*/
|
||||
const updateAllTimers = () => {
|
||||
const l = timers.length;
|
||||
|
||||
for (let i=0; i < l; ++i) {
|
||||
if (timers[i].expired) continue;
|
||||
for (let i=0; i < l; ++i) {
|
||||
if (timers[i].expired) continue;
|
||||
|
||||
updateTimer(timers[i]);
|
||||
}
|
||||
};
|
||||
updateTimer(timers[i]);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the local time info for the timer
|
||||
* @param timer Timer information
|
||||
*/
|
||||
const setLocalTime = (timer) => {
|
||||
document.getElementById("localtime" + timer.id).innerHTML = timer.start.format("ddd @ LT");
|
||||
};
|
||||
/**
|
||||
* Set the local time info for the timer
|
||||
* @param timer Timer information
|
||||
*/
|
||||
const setLocalTime = (timer) => {
|
||||
document.getElementById("localtime" + timer.id).innerHTML = timer.start.format("ddd @ LT");
|
||||
};
|
||||
|
||||
/**
|
||||
* Set all local time fields
|
||||
*/
|
||||
const setAllLocalTimes = () => {
|
||||
const l = timers.length;
|
||||
/**
|
||||
* Set all local time fields
|
||||
*/
|
||||
const setAllLocalTimes = () => {
|
||||
const l = timers.length;
|
||||
|
||||
for (let i=0; i < l; ++i) {
|
||||
setLocalTime(timers[i]);
|
||||
}
|
||||
};
|
||||
for (let i=0; i < l; ++i) {
|
||||
setLocalTime(timers[i]);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the current EVE time as a string
|
||||
* @returns {string} EVE time string
|
||||
*/
|
||||
const updateClock = () => {
|
||||
document.getElementById("current-time").innerHTML = getCurrentEveTimeString();
|
||||
};
|
||||
/**
|
||||
* Get the current EVE time as a string
|
||||
* @returns {string} EVE time string
|
||||
*/
|
||||
const updateClock = () => {
|
||||
document.getElementById("current-time").innerHTML = getCurrentEveTimeString();
|
||||
};
|
||||
|
||||
const timedUpdate = () => {
|
||||
updateClock();
|
||||
updateAllTimers();
|
||||
};
|
||||
const timedUpdate = () => {
|
||||
updateClock();
|
||||
updateAllTimers();
|
||||
};
|
||||
|
||||
// Set initial values
|
||||
setAllLocalTimes();
|
||||
timedUpdate();
|
||||
// Set initial values
|
||||
setAllLocalTimes();
|
||||
timedUpdate();
|
||||
|
||||
// Start timed updates
|
||||
setInterval(timedUpdate, 1000);
|
||||
// Start timed updates
|
||||
setInterval(timedUpdate, 1000);
|
||||
});
|
||||
</script>
|
||||
{% endblock content %}
|
||||
|
||||
@@ -88,6 +88,7 @@ MIDDLEWARE = [
|
||||
"django.middleware.security.SecurityMiddleware",
|
||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||
"allianceauth.authentication.middleware.UserSettingsMiddleware",
|
||||
"allianceauth.middleware.DeviceDetectionMiddleware",
|
||||
"django.middleware.locale.LocaleMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
"django.middleware.csrf.CsrfViewMiddleware",
|
||||
|
||||
@@ -1,22 +1,37 @@
|
||||
[supervisord]
|
||||
environment =
|
||||
AA_USER = allianceserver, ; The user under which the processes will run
|
||||
AA_PROJECT_NAME = {{ project_name }}, ; The name of the project
|
||||
AA_PROJECT_DIRECTORY = {{ project_directory }}, ; The directory of the project
|
||||
AA_VENV_DIRECTORY = {{ venv_directory }}, ; The directory of the virtual environment
|
||||
AA_COMMAND_CELERY = {{ celery }}, ; The command to run Celery
|
||||
AA_COMMAND_GUNICORN = {{ gunicorn }}, ; The command to run Gunicorn
|
||||
AA_COMMAND_MEMMON = {{ memmon }} ; The command to run Memmon
|
||||
|
||||
[program:beat]
|
||||
command = {{ celery }} -A {{ project_name }} beat
|
||||
directory = {{ project_directory }}
|
||||
user = allianceserver
|
||||
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
command = %(ENV_AA_COMMAND_CELERY)s
|
||||
-A %(ENV_AA_PROJECT_NAME)s beat
|
||||
directory = %(ENV_AA_PROJECT_DIRECTORY)s
|
||||
user = %(ENV_AA_USER)s
|
||||
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||
autostart = true
|
||||
autorestart = true
|
||||
startsecs = 10
|
||||
priority = 998
|
||||
|
||||
[program:worker]
|
||||
command = {{ celery }} -A {{ project_name }} worker --pool=threads --concurrency=5 -n %(program_name)s_%(process_num)02d
|
||||
directory = {{ project_directory }}
|
||||
user = allianceserver
|
||||
command = %(ENV_AA_COMMAND_CELERY)s
|
||||
-A %(ENV_AA_PROJECT_NAME)s worker
|
||||
--pool=threads
|
||||
--concurrency=5
|
||||
-n %(program_name)s_%(process_num)02d
|
||||
directory = %(ENV_AA_PROJECT_DIRECTORY)s
|
||||
user = %(ENV_AA_USER)s
|
||||
numprocs = 1
|
||||
process_name = %(program_name)s_%(process_num)02d
|
||||
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||
autostart = true
|
||||
autorestart = true
|
||||
startsecs = 10
|
||||
@@ -26,22 +41,26 @@ priority = 998
|
||||
|
||||
{% if gunicorn %}
|
||||
[program:gunicorn]
|
||||
user = allianceserver
|
||||
directory = {{ project_directory }}
|
||||
command = {{ gunicorn }} {{ project_name }}.wsgi --workers=3 --timeout 120
|
||||
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log
|
||||
user = %(ENV_AA_USER)s
|
||||
directory = %(ENV_AA_PROJECT_DIRECTORY)s
|
||||
command = %(ENV_AA_COMMAND_GUNICORN)s %(ENV_AA_PROJECT_NAME)s.wsgi
|
||||
--workers=3
|
||||
--timeout 120
|
||||
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||
autostart = true
|
||||
autorestart = true
|
||||
stopsignal = INT
|
||||
{% endif %}
|
||||
|
||||
[eventlistener:memmon]
|
||||
command = {{ memmon }} -p worker_00=256MB -p gunicorn=256MB
|
||||
directory = {{ project_directory }}
|
||||
command = %(ENV_AA_COMMAND_MEMMON)s
|
||||
-p worker_00=256MB
|
||||
-p gunicorn=256MB
|
||||
directory = %(ENV_AA_PROJECT_DIRECTORY)s
|
||||
events = TICK_60
|
||||
stdout_logfile = {{ project_directory }}/log/memmon.log
|
||||
stderr_logfile = {{ project_directory }}/log/memmon.log
|
||||
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/memmon.log
|
||||
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/memmon.log
|
||||
|
||||
[group:{{ project_name }}]
|
||||
programs = beat,worker{% if gunicorn %},gunicorn{% endif %}
|
||||
|
||||
@@ -100,7 +100,10 @@ class BaseSetPasswordServiceAccountView(ServicesCRUDMixin, BaseServiceView, Upda
|
||||
def post(self, request, *args, **kwargs):
|
||||
result = super().post(request, *args, **kwargs)
|
||||
if self.get_form().is_valid():
|
||||
messages.success(request, _(f"Successfully set your {self.service_name} password"))
|
||||
messages.success(
|
||||
request,
|
||||
_("Successfully set your {service_name} password").format(service_name=self.service_name)
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
|
||||
@@ -16,8 +16,7 @@ from redis import Redis
|
||||
|
||||
from allianceauth.utils.cache import get_redis_client
|
||||
|
||||
from allianceauth import __title__ as AUTH_TITLE
|
||||
from allianceauth import __url__, __version__
|
||||
from allianceauth import __title_useragent__, __url__, __version__
|
||||
|
||||
from .. import __title__
|
||||
from ..utils import LoggerAddTag
|
||||
@@ -647,7 +646,7 @@ class DiscordClient:
|
||||
if self.is_rate_limited:
|
||||
self._ensure_rate_limed_not_exhausted(uid)
|
||||
headers = {
|
||||
'User-Agent': f'{AUTH_TITLE} ({__url__}, {__version__})',
|
||||
'User-Agent': f'{__title_useragent__}/{__version__} (+{__url__})',
|
||||
'accept': 'application/json',
|
||||
'X-RateLimit-Precision': 'millisecond',
|
||||
'authorization': str(authorization)
|
||||
@@ -675,10 +674,12 @@ class DiscordClient:
|
||||
)
|
||||
logger.debug('%s: response:\n%s', uid, r.text)
|
||||
if not r.ok:
|
||||
member_id = url.split("/")[-1]
|
||||
logger.error(
|
||||
'%s: Discord API returned error code %d and this response: %s',
|
||||
'%s: Discord API returned error code %d for member ID %s with this response: %s.',
|
||||
uid,
|
||||
r.status_code,
|
||||
member_id,
|
||||
r.text
|
||||
)
|
||||
|
||||
|
||||
@@ -7,8 +7,7 @@ import requests_mock
|
||||
from redis import Redis
|
||||
from requests.exceptions import HTTPError
|
||||
|
||||
from allianceauth import __title__ as AUTH_TITLE
|
||||
from allianceauth import __url__, __version__
|
||||
from allianceauth import __title_useragent__, __url__, __version__
|
||||
from allianceauth.utils.testing import NoSocketsTestCase
|
||||
|
||||
from ...utils import set_logger_to_file
|
||||
@@ -46,7 +45,7 @@ API_BASE_URL = 'https://discord.com/api/'
|
||||
TEST_RETRY_AFTER = 3000
|
||||
|
||||
DEFAULT_REQUEST_HEADERS = {
|
||||
'User-Agent': f'{AUTH_TITLE} ({__url__}, {__version__})',
|
||||
'User-Agent': f'{__title_useragent__}/{__version__} (+{__url__})',
|
||||
'accept': 'application/json',
|
||||
'authorization': 'Bot ' + TEST_BOT_TOKEN
|
||||
}
|
||||
|
||||
@@ -100,13 +100,13 @@ def jabber_broadcast_view(request):
|
||||
if main_char is not None:
|
||||
message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + \
|
||||
main_char.character_name + " TO: " + \
|
||||
form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime(
|
||||
form.cleaned_data['group'] + " WHEN: " + datetime.datetime.now(datetime.timezone.utc).strftime(
|
||||
"%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n"
|
||||
group_to_send = form.cleaned_data['group']
|
||||
|
||||
else:
|
||||
message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "No character but can send pings?" + " TO: " + \
|
||||
form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime(
|
||||
form.cleaned_data['group'] + " WHEN: " + datetime.datetime.now(datetime.timezone.utc).strftime(
|
||||
"%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n"
|
||||
group_to_send = form.cleaned_data['group']
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import random
|
||||
import string
|
||||
import calendar
|
||||
import re
|
||||
from datetime import datetime
|
||||
import datetime as dt
|
||||
|
||||
from passlib.apps import phpbb3_context
|
||||
from django.db import connections
|
||||
@@ -128,7 +128,7 @@ class Phpbb3Manager:
|
||||
|
||||
@staticmethod
|
||||
def __get_current_utc_date():
|
||||
d = datetime.utcnow()
|
||||
d = dt.datetime.now(dt.timezone.utc)
|
||||
unixtime = calendar.timegm(d.utctimetuple())
|
||||
return unixtime
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import random
|
||||
import string
|
||||
import calendar
|
||||
from datetime import datetime
|
||||
import datetime as dt
|
||||
import hashlib
|
||||
import logging
|
||||
import re
|
||||
@@ -105,7 +105,7 @@ class SmfManager:
|
||||
|
||||
@staticmethod
|
||||
def get_current_utc_date():
|
||||
d = datetime.utcnow()
|
||||
d = dt.datetime.now(dt.timezone.utc)
|
||||
unixtime = calendar.timegm(d.utctimetuple())
|
||||
return unixtime
|
||||
|
||||
|
||||
@@ -111,11 +111,11 @@ class Teamspeak3Manager:
|
||||
outlist = {}
|
||||
|
||||
if type(groups) == list:
|
||||
logger.debug("Recieved multiple groups. Iterating.")
|
||||
logger.debug("Received multiple groups. Iterating.")
|
||||
for group in groups:
|
||||
outlist[group['keys']['name']] = group['keys']['sgid']
|
||||
elif type(groups) == dict:
|
||||
logger.debug("Recieved single group.")
|
||||
logger.debug("Received single group.")
|
||||
outlist[groups['keys']['name']] = groups['keys']['sgid']
|
||||
logger.debug("Returning name/id pairing: %s" % outlist)
|
||||
return outlist
|
||||
|
||||
@@ -34,6 +34,9 @@ class SrpFleetUserRequestForm(forms.Form):
|
||||
_("Invalid Link. Please use zkillboard.com or kb.evetools.org")
|
||||
)
|
||||
|
||||
if re.match(r"^http[s]?:\/\/zkillboard\.com\/", data) and not data.endswith("/"):
|
||||
data += "/"
|
||||
|
||||
# Check if it's an actual kill mail
|
||||
if not any(
|
||||
re.match(regex, data)
|
||||
|
||||
@@ -4,7 +4,7 @@ import requests
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from allianceauth import NAME
|
||||
from allianceauth import __title_useragent__, __url__, __version__
|
||||
from allianceauth.srp.providers import esi
|
||||
|
||||
from .models import SrpUserRequest
|
||||
@@ -24,7 +24,7 @@ class SRPManager:
|
||||
def get_kill_data(kill_id):
|
||||
url = ("https://zkillboard.com/api/killID/%s/" % kill_id)
|
||||
headers = {
|
||||
'User-Agent': NAME,
|
||||
'User-Agent': f'{__title_useragent__}/{__version__} (+{__url__})',
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
r = requests.get(url, headers=headers)
|
||||
|
||||
@@ -20,17 +20,15 @@
|
||||
|
||||
{% block header_nav_collapse_right %}
|
||||
{% if perms.auth.srp_management %}
|
||||
<li class="nav-item">
|
||||
{% if fleet_status == "Completed" %}
|
||||
<a class="btn btn-warning" href="{% url 'srp:mark_uncompleted' fleet_id %}">
|
||||
{% translate "Mark Incomplete" %}
|
||||
</a>
|
||||
{% else %}
|
||||
<a class="btn btn-success" href="{% url 'srp:mark_completed' fleet_id %}">
|
||||
{% translate "Mark Completed" %}
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% if fleet_status == "Completed" %}
|
||||
{% translate "Mark Incomplete" as nav_item_title %}
|
||||
{% url "srp:mark_uncompleted" fleet_id as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-button.html" with btn_modifier="warning" url=nav_item_link title=nav_item_title %}
|
||||
{% else %}
|
||||
{% translate "Mark Completed" as nav_item_title %}
|
||||
{% url "srp:mark_completed" fleet_id as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-button.html" with btn_modifier="warning" url=nav_item_link title=nav_item_title %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock header_nav_collapse_right %}
|
||||
|
||||
|
||||
@@ -22,11 +22,9 @@
|
||||
{% endblock header_nav_collapse_left %}
|
||||
{% block header_nav_collapse_right %}
|
||||
{% if perms.srp.add_srpfleetmain or perms.auth.srp_management %}
|
||||
<li class="nav-item">
|
||||
<a class="btn btn-success" href="{% url 'srp:add' %}">
|
||||
{% translate "Add SRP Fleet" %}
|
||||
</a>
|
||||
</li>
|
||||
{% translate "Add SRP Fleet" as nav_item_title %}
|
||||
{% url "srp:add" as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-button.html" with btn_modifier="success" url=nav_item_link title=nav_item_title fa_icon="fa-solid fa-plus" icon_on_mobile=True %}
|
||||
{% endif %}
|
||||
{% endblock header_nav_collapse_right %}
|
||||
{% block content %}
|
||||
|
||||
27
allianceauth/srp/tests/test_form.py
Normal file
27
allianceauth/srp/tests/test_form.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from django.test import TestCase
|
||||
|
||||
from allianceauth.srp.form import SrpFleetUserRequestForm
|
||||
|
||||
|
||||
class TestForms(TestCase):
|
||||
|
||||
def test_allow_missing_trailing_slash_zkillboard(self):
|
||||
form = SrpFleetUserRequestForm(
|
||||
data = {
|
||||
"killboard_link": "https://zkillboard.com/kill/130429493",
|
||||
"additional_info": "Details",
|
||||
}
|
||||
)
|
||||
form.cleaned_data = {"killboard_link": "https://zkillboard.com/kill/130429493"}
|
||||
|
||||
self.assertEqual("https://zkillboard.com/kill/130429493/", form.clean_killboard_link())
|
||||
|
||||
def test_not_add_trailling_slash_kb_evetools(self):
|
||||
form = SrpFleetUserRequestForm(
|
||||
data = {
|
||||
"killboard_link": "https://kb.evetools.org/kill/130429493",
|
||||
}
|
||||
)
|
||||
form.cleaned_data = {"killboard_link": "https://kb.evetools.org/kill/130429493"}
|
||||
|
||||
self.assertEqual("https://kb.evetools.org/kill/130429493", form.clean_killboard_link())
|
||||
@@ -0,0 +1,207 @@
|
||||
/* global fetchGet, numberFormatter, taskQueueSettings */
|
||||
|
||||
$(document).ready(() => {
|
||||
'use strict';
|
||||
|
||||
const elements = {
|
||||
total: document.getElementById('total-task-count'),
|
||||
uptime: document.getElementById('celery-uptime'),
|
||||
running: document.getElementById('running-task-count'),
|
||||
queued: document.getElementById('queued-tasks-count'),
|
||||
succeeded: document.getElementById('succeeded-tasks-count'),
|
||||
retried: document.getElementById('retried-tasks-count'),
|
||||
failed: document.getElementById('failed-tasks-count')
|
||||
};
|
||||
|
||||
/**
|
||||
* Fetches the task queue status and updates the UI elements accordingly.
|
||||
* It retrieves the total number of tasks, running tasks, queued tasks,
|
||||
* succeeded tasks, retried tasks, and failed tasks, and updates the
|
||||
* corresponding HTML elements with the fetched data.
|
||||
* It also updates the progress bars for succeeded, retried, and failed tasks.
|
||||
* The function is called immediately and then every 30 seconds to keep the
|
||||
* task queue status up to date.
|
||||
*/
|
||||
const updateTaskCount = () => {
|
||||
fetchGet({url: taskQueueSettings.url})
|
||||
.then((data) => {
|
||||
const elemProgressBar = document.getElementById('celery-tasks-progress-bar');
|
||||
const progressElements = {
|
||||
succeeded: {
|
||||
bar: document.getElementById('celery-progress-bar-succeeded'),
|
||||
text: document.getElementById('celery-progress-bar-succeeded-progress')
|
||||
},
|
||||
retried: {
|
||||
bar: document.getElementById('celery-progress-bar-retried'),
|
||||
text: document.getElementById('celery-progress-bar-retried-progress')
|
||||
},
|
||||
failed: {
|
||||
bar: document.getElementById('celery-progress-bar-failed'),
|
||||
text: document.getElementById('celery-progress-bar-failed-progress')
|
||||
}
|
||||
};
|
||||
|
||||
// Assign progress data from the fetched data to variables
|
||||
const {
|
||||
earliest_task: earliestTask,
|
||||
tasks_total: tasksTotal,
|
||||
tasks_running: tasksRunning,
|
||||
tasks_queued: tasksQueued,
|
||||
tasks_succeeded: tasksSucceeded,
|
||||
tasks_retried: tasksRetried,
|
||||
tasks_failed: tasksFailed
|
||||
} = data;
|
||||
|
||||
/**
|
||||
* Updates the text content of the specified HTML element with the given value.
|
||||
* If the value is null, it sets the text to 'N/A'.
|
||||
* Otherwise, it formats the number using the locale-specific format.
|
||||
*
|
||||
* @param {HTMLElement} element The HTML element to update.
|
||||
* @param {number|null} value The value to set in the element.
|
||||
*/
|
||||
const updateTaskCount = (element, value) => {
|
||||
element.textContent = value === null ? taskQueueSettings.l10n.na : numberFormatter({value: value, locales: taskQueueSettings.l10n.language});
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculates the time since the given timestamp and returns a formatted string.
|
||||
* If the timestamp is null or undefined, it returns 'N/A'.
|
||||
* The returned string is in the format of "X hours, Y minutes" or "X minutes, Y seconds".
|
||||
*
|
||||
* @param {string|null} timestamp The timestamp to calculate the time since.
|
||||
* @returns {string} A formatted string representing the time since the timestamp.
|
||||
*/
|
||||
const timeSince = (timestamp) => {
|
||||
if (!timestamp) {
|
||||
return taskQueueSettings.l10n.na;
|
||||
}
|
||||
|
||||
const diffSecs = Math.floor((Date.now() - new Date(timestamp)) / 1000);
|
||||
|
||||
if (diffSecs >= 3600) {
|
||||
const hours = Math.floor(diffSecs / 3600);
|
||||
const minutes = Math.floor((diffSecs % 3600) / 60);
|
||||
|
||||
if (minutes > 0) {
|
||||
const hourText = hours === 1 ? taskQueueSettings.l10n.hour_singular : taskQueueSettings.l10n.hour_plural;
|
||||
const minuteText = minutes === 1 ? taskQueueSettings.l10n.minute_singular : taskQueueSettings.l10n.minute_plural;
|
||||
|
||||
return `${hours} ${hourText}, ${minutes} ${minuteText}`;
|
||||
}
|
||||
|
||||
const hourText = hours === 1 ? taskQueueSettings.l10n.hour_singular : taskQueueSettings.l10n.hour_plural;
|
||||
|
||||
return `${hours} ${hourText}`;
|
||||
}
|
||||
|
||||
const units = [
|
||||
[
|
||||
60,
|
||||
taskQueueSettings.l10n.minute_singular,
|
||||
taskQueueSettings.l10n.minute_plural
|
||||
],
|
||||
[
|
||||
1,
|
||||
taskQueueSettings.l10n.second_singular,
|
||||
taskQueueSettings.l10n.second_plural
|
||||
]
|
||||
];
|
||||
|
||||
for (const [seconds, singular, plural] of units) {
|
||||
const value = Math.floor(diffSecs / seconds);
|
||||
|
||||
if (value > 0) {
|
||||
return `${value} ${value > 1 ? plural : singular}`;
|
||||
}
|
||||
}
|
||||
|
||||
return `0 ${taskQueueSettings.l10n.second_plural}`;
|
||||
};
|
||||
|
||||
/**
|
||||
* Updates the progress bar element and its text content based on the given value and total.
|
||||
* It calculates the percentage of completion and updates the aria attributes and styles accordingly.
|
||||
*
|
||||
* @param {HTMLElement} element The progress bar element to update.
|
||||
* @param {HTMLElement} textElement The text element to update with the percentage.
|
||||
* @param {number} value The current value to set in the progress bar.
|
||||
* @param {number} total The total value for calculating the percentage.
|
||||
*/
|
||||
const updateProgressBar = (element, textElement, value, total) => {
|
||||
const percentage = total ? (value / total) * 100 : 0;
|
||||
|
||||
element.setAttribute('aria-valuenow', percentage.toString());
|
||||
textElement.textContent = `${numberFormatter({value: percentage.toFixed(0), locales: taskQueueSettings.l10n.language})}%`;
|
||||
element.style.width = `${percentage}%`;
|
||||
};
|
||||
|
||||
// Update task counts
|
||||
[
|
||||
[elements.total, tasksTotal],
|
||||
[elements.running, tasksRunning],
|
||||
[elements.queued, tasksQueued],
|
||||
[elements.succeeded, tasksSucceeded],
|
||||
[elements.retried, tasksRetried],
|
||||
[elements.failed, tasksFailed]
|
||||
].forEach(([element, value]) => {
|
||||
updateTaskCount(element, value);
|
||||
});
|
||||
|
||||
// Update uptime
|
||||
elements.uptime.textContent = timeSince(earliestTask);
|
||||
|
||||
// Update progress bar title
|
||||
const [
|
||||
titleTextSucceeded,
|
||||
titleTextRetried,
|
||||
titleTextFailed
|
||||
] = [
|
||||
[tasksSucceeded, taskQueueSettings.l10n.succeeded],
|
||||
[tasksRetried, taskQueueSettings.l10n.retried],
|
||||
[tasksFailed, taskQueueSettings.l10n.failed]
|
||||
].map(([count, label]) => {
|
||||
return `${numberFormatter({value: count, locales: taskQueueSettings.l10n.language})} ${label}`;
|
||||
});
|
||||
|
||||
// Set the title attribute for the progress bar
|
||||
elemProgressBar.setAttribute(
|
||||
'title',
|
||||
`${titleTextSucceeded}, ${titleTextRetried}, ${titleTextFailed}`
|
||||
);
|
||||
|
||||
// Update progress bars
|
||||
[
|
||||
tasksSucceeded,
|
||||
tasksRetried,
|
||||
tasksFailed
|
||||
].forEach((count, index) => {
|
||||
const type = ['succeeded', 'retried', 'failed'][index];
|
||||
|
||||
updateProgressBar(
|
||||
progressElements[type].bar,
|
||||
progressElements[type].text,
|
||||
count,
|
||||
tasksTotal
|
||||
);
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error fetching task queue:', error);
|
||||
|
||||
// If there is an error fetching the task queue, set all elements to 'ERROR'
|
||||
[
|
||||
elements.running,
|
||||
elements.queued,
|
||||
elements.succeeded,
|
||||
elements.retried,
|
||||
elements.failed
|
||||
].forEach((elem) => {
|
||||
elem.textContent = taskQueueSettings.l10n.error;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
updateTaskCount();
|
||||
setInterval(updateTaskCount, 30000);
|
||||
});
|
||||
57
allianceauth/static/allianceauth/js/sidebar.js
Normal file
57
allianceauth/static/allianceauth/js/sidebar.js
Normal file
@@ -0,0 +1,57 @@
|
||||
$(document).ready(() => {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Collect all badges in the sidebar menu that are not part of a collapsible submenu, and calculate the total notification count.
|
||||
* Show a total notification badge in the navbar if there are any notifications.
|
||||
*/
|
||||
const totalNotificationsBadge = () => {
|
||||
const badges = [];
|
||||
let notificationCount = 0;
|
||||
|
||||
document.querySelectorAll('#sidebar-menu .badge').forEach(b => {
|
||||
const li = b.closest('li');
|
||||
|
||||
if (!li || !li.querySelector('ul.collapse')) {
|
||||
badges.push(b);
|
||||
notificationCount += parseInt(b.textContent);
|
||||
}
|
||||
});
|
||||
|
||||
if (badges.length > 0 && notificationCount > 0) {
|
||||
const notificationBadge = document.createElement('span');
|
||||
|
||||
notificationBadge.classList.add(
|
||||
'badge',
|
||||
'text-bg-danger',
|
||||
'align-self-center',
|
||||
'sidemenu-notification-badge',
|
||||
'sidemenu-total-notifications-badge'
|
||||
);
|
||||
notificationBadge.textContent = String(notificationCount);
|
||||
|
||||
document.querySelector('a.navbar-brand i.fa-solid').prepend(notificationBadge);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Find the active child menu item in the sidebar menu, if any, and ensure its parent submenu is expanded.
|
||||
*/
|
||||
const expandChildMenu = () => {
|
||||
const activeChildMenuItem = document.querySelector('ul#sidebar-menu ul.collapse a.active');
|
||||
|
||||
if (activeChildMenuItem) {
|
||||
const activeChildMenuUl = activeChildMenuItem.closest('ul');
|
||||
activeChildMenuUl.classList.add('show');
|
||||
|
||||
document.querySelectorAll(`[data-bs-target^="#${activeChildMenuUl.id}"]`)
|
||||
.forEach(element => element.setAttribute('aria-expanded', 'true'));
|
||||
}
|
||||
};
|
||||
|
||||
// Execute functions on document ready
|
||||
[
|
||||
totalNotificationsBadge,
|
||||
expandChildMenu
|
||||
].forEach(fn => fn());
|
||||
});
|
||||
@@ -2,6 +2,7 @@
|
||||
{% load admin_status %}
|
||||
|
||||
<div
|
||||
id="celery-progress-bar-{{ label }}"
|
||||
class="progress-bar text-bg-{{ level }} task-status-progress-bar"
|
||||
role="progressbar"
|
||||
aria-valuenow="{% decimal_widthratio tasks_count tasks_total 100 %}"
|
||||
@@ -9,5 +10,5 @@
|
||||
aria-valuemax="100"
|
||||
style="width: {% decimal_widthratio tasks_count tasks_total 100 %}%;"
|
||||
>
|
||||
<span>{% widthratio tasks_count tasks_total 100 %}%</span>
|
||||
<span id="celery-progress-bar-{{ label }}-progress">{% widthratio tasks_count tasks_total 100 %}%</span>
|
||||
</div>
|
||||
|
||||
@@ -1,29 +1,32 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div id="esi-alert" class="col-12 collapse">
|
||||
<div class="alert alert-warning">
|
||||
<p class="text-center ">{% translate 'Your Server received an ESI error response code of ' %}<b id="esi-code">?</b></p>
|
||||
<hr>
|
||||
<pre id="esi-data" class="text-center text-wrap"></pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const elemCard = document.getElementById('esi-alert');
|
||||
const elemMessage = document.getElementById('esi-data');
|
||||
const elemCode = document.getElementById('esi-code');
|
||||
<script>
|
||||
$(document).ready(() => {
|
||||
const elements = {
|
||||
card: document.getElementById('esi-alert'),
|
||||
message: document.getElementById('esi-data'),
|
||||
code: document.getElementById('esi-code')
|
||||
};
|
||||
|
||||
fetchGet({url: '{% url "authentication:esi_check" %}'})
|
||||
.then((data) => {
|
||||
console.log('ESI Check: ', JSON.stringify(data, null, 2));
|
||||
fetchGet({url: '{% url "authentication:esi_check" %}'})
|
||||
.then(({status, data}) => {
|
||||
console.log('ESI Check:', JSON.stringify({status, data}, null, 2));
|
||||
|
||||
if (data.status !== 200) {
|
||||
elemCode.textContent = data.status;
|
||||
elemMessage.textContent = data.data.error;
|
||||
if (status !== 200) {
|
||||
elements.code.textContent = status;
|
||||
elements.message.textContent = data.error;
|
||||
|
||||
new bootstrap.Collapse(elemCard, {toggle: true});
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error fetching ESI check:', error);
|
||||
new bootstrap.Collapse(elements.card, {toggle: true});
|
||||
}
|
||||
})
|
||||
.catch((error) => console.error('Error fetching ESI check:', error));
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,27 @@
|
||||
{% load i18n %}
|
||||
{% load humanize %}
|
||||
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
|
||||
{% comment %}
|
||||
Some translations used in the HTML and JavaScript code below.
|
||||
We define them here so that they can be used in the JavaScript code as well with
|
||||
the escapejs filter without having to redefine them later.
|
||||
{% endcomment %}
|
||||
{% translate "second" as l10nSecondSingular %}
|
||||
{% translate "seconds" as l10nSecondPlural %}
|
||||
{% translate "minute" as l10nMinuteSingular %}
|
||||
{% translate "minutes" as l10nMinutePlural %}
|
||||
{% translate "hour" as l10nHourSingular %}
|
||||
{% translate "hours" as l10nHourPlural %}
|
||||
{% translate "N/A" as l10nNA %}
|
||||
{% translate "ERROR" as l10nError %}
|
||||
{% translate "running" as l10nRunning %}
|
||||
{% translate "queued" as l10nQueued %}
|
||||
{% translate "succeeded" as l10nSucceeded %}
|
||||
{% translate "retried" as l10nRetried %}
|
||||
{% translate "failed" as l10nFailed %}
|
||||
|
||||
{% if debug %}
|
||||
<div id="aa-dashboard-panel-debug" class="col-12 mb-3">
|
||||
<div class="card text-bg-warning">
|
||||
@@ -111,23 +132,27 @@
|
||||
<div>
|
||||
<p>
|
||||
{% blocktranslate with total=tasks_total|intcomma latest=earliest_task|timesince|default:"?" %}
|
||||
Status of {{ total }} processed tasks • last {{ latest }}
|
||||
Status of <span id="total-task-count">?</span> processed tasks • last <span id="celery-uptime">?</span>
|
||||
{% endblocktranslate %}
|
||||
</p>
|
||||
|
||||
<div
|
||||
class="progress"
|
||||
id="celery-tasks-progress-bar"
|
||||
class="progress mb-2"
|
||||
style="height: 21px;"
|
||||
title="{{ tasks_succeeded|intcomma }} succeeded, {{ tasks_retried|intcomma }} retried, {{ tasks_failed|intcomma }} failed"
|
||||
title="? {{ l10nSucceeded }}, ? {{ l10nRetried }}, ? {{ l10nFailed }}"
|
||||
>
|
||||
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="suceeded" level="success" tasks_count=tasks_succeeded %}
|
||||
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="retried" level="info" tasks_count=tasks_retried %}
|
||||
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="failed" level="danger" tasks_count=tasks_failed %}
|
||||
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="succeeded" level="success" tasks_count=0 %}
|
||||
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="retried" level="info" tasks_count=0 %}
|
||||
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="failed" level="danger" tasks_count=0 %}
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<span id="task-counts">?</span> {% translate 'running' %} |
|
||||
<span id="queued-tasks-count">?</span> {% translate 'queued' %}
|
||||
<span id="running-task-count">?</span> {{ l10nRunning }} |
|
||||
<span id="queued-tasks-count">?</span> {{ l10nQueued }} |
|
||||
<span id="succeeded-tasks-count">?</span> {{ l10nSucceeded }} |
|
||||
<span id="retried-tasks-count">?</span> {{ l10nRetried }} |
|
||||
<span id="failed-tasks-count">?</span> {{ l10nFailed }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -136,24 +161,24 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const elemRunning = document.getElementById('task-counts');
|
||||
const elemQueued = document.getElementById('queued-tasks-count');
|
||||
|
||||
fetchGet({url: '{% url "authentication:task_counts" %}'})
|
||||
.then((data) => {
|
||||
const running = data.tasks_running;
|
||||
const queued = data.tasks_queued;
|
||||
|
||||
const updateTaskCount = (element, value) => {
|
||||
element.textContent = value == null ? 'N/A' : value.toLocaleString();
|
||||
};
|
||||
|
||||
updateTaskCount(elemRunning, running);
|
||||
updateTaskCount(elemQueued, queued);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error fetching task queue:', error);
|
||||
|
||||
[elemRunning, elemQueued].forEach(elem => elem.textContent = 'ERROR');
|
||||
});
|
||||
const taskQueueSettings = {
|
||||
url: '{% url "authentication:task_counts" %}',
|
||||
l10n: {
|
||||
language: '{{ LANGUAGE_CODE }}',
|
||||
second_singular: '{{ l10nSecondSingular|escapejs }}',
|
||||
second_plural: '{{ l10nSecondPlural|escapejs }}',
|
||||
minute_singular: '{{ l10nMinuteSingular|escapejs }}',
|
||||
minute_plural: '{{ l10nMinutePlural|escapejs }}',
|
||||
hour_singular: '{{ l10nHourSingular|escapejs }}',
|
||||
hour_plural: '{{ l10nHourPlural|escapejs }}',
|
||||
na: '{{ l10nNA|escapejs }}',
|
||||
error: '{{ l10nError|escapejs }}',
|
||||
running: '{{ l10nRunning|escapejs }}',
|
||||
queued: '{{ l10nQueued|escapejs }}',
|
||||
succeeded: '{{ l10nSucceeded|escapejs }}',
|
||||
retried: '{{ l10nRetried|escapejs }}',
|
||||
failed: '{{ l10nFailed|escapejs }}'
|
||||
}
|
||||
};
|
||||
</script>
|
||||
{% include "bundles/auth-dashboard-task-queue-js.html" %}
|
||||
|
||||
@@ -18,10 +18,11 @@
|
||||
|
||||
<title>{% block title %}{% block page_title %}{% endblock page_title %} - {{ SITE_NAME }}{% endblock title %}</title>
|
||||
|
||||
{% include 'bundles/auth-framework-css.html' %}
|
||||
|
||||
{% theme_css %}
|
||||
|
||||
{% include 'bundles/fontawesome.html' %}
|
||||
{% include 'bundles/auth-framework-css.html' %}
|
||||
|
||||
{% include 'bundles/jquery-js.html' %}
|
||||
{% include 'bundles/auth-framework-js.html' %}
|
||||
@@ -101,44 +102,7 @@
|
||||
</main>
|
||||
<!-- End Body -->
|
||||
|
||||
<script>
|
||||
(() => {
|
||||
// TODO Move to own JS file
|
||||
const sidebar = document.getElementById('sidebar');
|
||||
const sidebarKey = `sidebar_${sidebar.id}`;
|
||||
|
||||
sidebar.addEventListener('shown.bs.collapse', (event) => {
|
||||
if (event.target.id === sidebar.id) {
|
||||
localStorage.removeItem(sidebarKey);
|
||||
}
|
||||
});
|
||||
|
||||
sidebar.addEventListener('hidden.bs.collapse', (event) => {
|
||||
if (event.target.id === sidebar.id) {
|
||||
localStorage.setItem(sidebarKey, 'closed');
|
||||
}
|
||||
});
|
||||
|
||||
if (localStorage.getItem(sidebarKey) === 'closed') {
|
||||
sidebar.classList.remove('show');
|
||||
} else {
|
||||
sidebar.classList.add('show');
|
||||
}
|
||||
|
||||
const activeChildMenuItem = document.querySelector('#sidebar-menu li ul li a.active');
|
||||
|
||||
if (activeChildMenuItem) {
|
||||
const activeChildMenuUl = activeChildMenuItem.parentElement.parentElement;
|
||||
const elementsToToggle = document.querySelectorAll(`[data-bs-target^="#${activeChildMenuUl.id}"]`);
|
||||
|
||||
activeChildMenuUl.classList.add('show');
|
||||
|
||||
elementsToToggle.forEach((element) => {
|
||||
element.setAttribute('aria-expanded', true);
|
||||
});
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
{% include "bundles/auth-sidebar-collapse-js.html" %}
|
||||
|
||||
{% theme_js %}
|
||||
|
||||
|
||||
@@ -1,21 +1,17 @@
|
||||
{% load i18n %}
|
||||
|
||||
{% if user.is_authenticated %}
|
||||
<li class="nav-item">
|
||||
<a href="{% url 'authentication:add_character' %}" class="nav-link" title="{% translate 'Add Character' %}">
|
||||
<i class="fa-solid fa-user-plus"></i>
|
||||
<span class="d-lg-none d-md-inline m-2">{% translate "Add Character" %}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{% url 'authentication:change_main_character' %}" class="nav-link" title="{% translate 'Change Main' %}">
|
||||
<i class="fa-solid fa-shuffle"></i>
|
||||
<span class="d-lg-none d-md-inline m-2">{% translate "Change Main" %}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% translate "Add Character" as nav_item_title %}
|
||||
{% url "authentication:add_character" as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-icon.html" with fa_icon="fa-solid fa-user-plus" url=nav_item_link title=nav_item_title icon_on_mobile=True %}
|
||||
|
||||
{% translate "Change Main" as nav_item_title %}
|
||||
{% url "authentication:change_main_character" as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-icon.html" with fa_icon="fa-solid fa-shuffle" url=nav_item_link title=nav_item_title icon_on_mobile=True %}
|
||||
{% else %}
|
||||
<li class="nav-item">
|
||||
<a href="{% url 'authentication:login' %}" class="nav-link" title="{% translate 'Sign In' %}">
|
||||
<i class="fa-solid fa-right-to-bracket fa-fw "></i> {% translate "Sign In" %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{% url 'authentication:login' %}" class="nav-link" title="{% translate 'Sign In' %}">
|
||||
<i class="fa-solid fa-right-to-bracket fa-fw me-2"></i> {% translate "Sign In" %}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{% load sri %}
|
||||
|
||||
{% sri_static 'allianceauth/js/dashboard-update-task-queue.js' %}
|
||||
@@ -0,0 +1,3 @@
|
||||
{% load sri %}
|
||||
|
||||
{% sri_static 'allianceauth/js/sidebar.js' %}
|
||||
11
allianceauth/templates/django_bootstrap5/field_errors.html
Normal file
11
allianceauth/templates/django_bootstrap5/field_errors.html
Normal file
@@ -0,0 +1,11 @@
|
||||
{# Template override to display the errors of django Forms when using `boostrap_form` form the `django-bootstrap5` #}
|
||||
{# library. #}
|
||||
{# See: https://github.com/zostera/django-bootstrap5/pull/767 #}
|
||||
|
||||
{% if field_errors %}
|
||||
<div id="{{ field.auto_id }}_error" class="invalid-feedback">
|
||||
{% for text in field_errors %}
|
||||
<div>{{ text }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@@ -37,7 +37,8 @@ def get_theme(request):
|
||||
|
||||
def get_theme_context(request):
|
||||
return {
|
||||
'theme': get_theme(request)
|
||||
'theme': get_theme(request),
|
||||
'request': request
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -17,11 +17,9 @@
|
||||
|
||||
{% block header_nav_collapse_right %}
|
||||
{% if perms.auth.timer_management %}
|
||||
<li class="nav-item">
|
||||
<a class="btn btn-success" href="{% url 'timerboard:add' %}">
|
||||
{% translate "Create Structure Timer" %}
|
||||
</a>
|
||||
</li>
|
||||
{% translate "Create Structure Timer" as nav_item_title %}
|
||||
{% url "timerboard:add" as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-button.html" with btn_modifier="success" url=nav_item_link title=nav_item_title fa_icon="fa-solid fa-plus" icon_on_mobile=True %}
|
||||
{% endif %}
|
||||
{% endblock header_nav_collapse_right %}
|
||||
|
||||
@@ -98,86 +96,86 @@
|
||||
{% get_datatables_language_static LANGUAGE_CODE as DT_LANG_PATH %}
|
||||
|
||||
<script>
|
||||
const timers = [
|
||||
{% for timer in timers %}
|
||||
{
|
||||
'id': {{ timer.id }},
|
||||
'targetDate': moment("{{ timer.eve_time | date:"c" }}"),
|
||||
'expired': false
|
||||
},
|
||||
{% endfor %}
|
||||
|
||||
{% for timer in corp_timers %}
|
||||
{
|
||||
'id': {{ timer.id }},
|
||||
'targetDate': moment("{{ timer.eve_time | date:"c" }}"),
|
||||
'expired': false
|
||||
},
|
||||
{% endfor %}
|
||||
];
|
||||
|
||||
/**
|
||||
* Update a timer
|
||||
* @param timer Timer information
|
||||
*/
|
||||
const updateTimer = (timer) => {
|
||||
if (timer.targetDate.isAfter(Date.now())) {
|
||||
const duration = moment.duration(timer.targetDate - moment(), 'milliseconds');
|
||||
|
||||
document.getElementById("countdown" + timer.id).innerHTML = getDurationString(duration);
|
||||
} else {
|
||||
timer.expired = true;
|
||||
|
||||
document.getElementById("countdown" + timer.id).innerHTML = "";
|
||||
}
|
||||
};
|
||||
|
||||
const updateAllTimers = () => {
|
||||
const l = timers.length;
|
||||
|
||||
for (let i=0; i < l; ++i) {
|
||||
if (timers[i].expired) continue;
|
||||
|
||||
updateTimer(timers[i]);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the local time info for the timer
|
||||
* @param timer Timer information
|
||||
*/
|
||||
const setLocalTime = (timer) => {
|
||||
document.getElementById("localtime" + timer.id).innerHTML = timer.targetDate.format("ddd @ LT");
|
||||
};
|
||||
|
||||
/**
|
||||
* Set all local time fields
|
||||
*/
|
||||
const setAllLocalTimes = () => {
|
||||
const l = timers.length;
|
||||
|
||||
for (let i=0; i < l; ++i) {
|
||||
setLocalTime(timers[i]);
|
||||
}
|
||||
};
|
||||
|
||||
const updateClock = () => {
|
||||
document.getElementById("current-time").innerHTML = getCurrentEveTimeString();
|
||||
};
|
||||
|
||||
const timedUpdate = () => {
|
||||
updateClock();
|
||||
updateAllTimers();
|
||||
}
|
||||
|
||||
// Set initial values
|
||||
setAllLocalTimes();
|
||||
timedUpdate();
|
||||
|
||||
// Start timed updates
|
||||
setInterval(timedUpdate, 1000);
|
||||
|
||||
$(document).ready(() => {
|
||||
const timers = [
|
||||
{% for timer in timers %}
|
||||
{
|
||||
'id': {{ timer.id }},
|
||||
'targetDate': moment("{{ timer.eve_time | date:"c" }}"),
|
||||
'expired': false
|
||||
},
|
||||
{% endfor %}
|
||||
|
||||
{% for timer in corp_timers %}
|
||||
{
|
||||
'id': {{ timer.id }},
|
||||
'targetDate': moment("{{ timer.eve_time | date:"c" }}"),
|
||||
'expired': false
|
||||
},
|
||||
{% endfor %}
|
||||
];
|
||||
|
||||
/**
|
||||
* Update a timer
|
||||
* @param timer Timer information
|
||||
*/
|
||||
const updateTimer = (timer) => {
|
||||
if (timer.targetDate.isAfter(Date.now())) {
|
||||
const duration = moment.duration(timer.targetDate - moment(), 'milliseconds');
|
||||
|
||||
document.getElementById("countdown" + timer.id).innerHTML = getDurationString(duration);
|
||||
} else {
|
||||
timer.expired = true;
|
||||
|
||||
document.getElementById("countdown" + timer.id).innerHTML = "";
|
||||
}
|
||||
};
|
||||
|
||||
const updateAllTimers = () => {
|
||||
const l = timers.length;
|
||||
|
||||
for (let i=0; i < l; ++i) {
|
||||
if (timers[i].expired) continue;
|
||||
|
||||
updateTimer(timers[i]);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the local time info for the timer
|
||||
* @param timer Timer information
|
||||
*/
|
||||
const setLocalTime = (timer) => {
|
||||
document.getElementById("localtime" + timer.id).innerHTML = timer.targetDate.format("ddd @ LT");
|
||||
};
|
||||
|
||||
/**
|
||||
* Set all local time fields
|
||||
*/
|
||||
const setAllLocalTimes = () => {
|
||||
const l = timers.length;
|
||||
|
||||
for (let i=0; i < l; ++i) {
|
||||
setLocalTime(timers[i]);
|
||||
}
|
||||
};
|
||||
|
||||
const updateClock = () => {
|
||||
document.getElementById("current-time").innerHTML = getCurrentEveTimeString();
|
||||
};
|
||||
|
||||
const timedUpdate = () => {
|
||||
updateClock();
|
||||
updateAllTimers();
|
||||
}
|
||||
|
||||
// Set initial values
|
||||
setAllLocalTimes();
|
||||
timedUpdate();
|
||||
|
||||
// Start timed updates
|
||||
setInterval(timedUpdate, 1000);
|
||||
|
||||
const dtOptions = {
|
||||
language: {url: '{{ DT_LANG_PATH }}'},
|
||||
order: [
|
||||
@@ -187,7 +185,10 @@
|
||||
|
||||
{% if perms.auth.timer_management %}
|
||||
dtOptions['columnDefs'] = [
|
||||
{ "orderable": false, "targets": 7 }
|
||||
{
|
||||
"orderable": false,
|
||||
"targets": 7
|
||||
}
|
||||
];
|
||||
{% endif %}
|
||||
|
||||
|
||||
@@ -80,7 +80,10 @@ urlpatterns = [
|
||||
path('night/', views.NightModeRedirectView.as_view(), name='nightmode'),
|
||||
|
||||
# Theme Change
|
||||
path('theme/', views.ThemeRedirectView.as_view(), name='theme')
|
||||
path('theme/', views.ThemeRedirectView.as_view(), name='theme'),
|
||||
|
||||
# Minimize Menu
|
||||
path('minimize-sidebar/', views.MinimizeSidebarRedirectView.as_view(), name='minimize_sidebar')
|
||||
]
|
||||
|
||||
url_hooks = get_hooks("url_hook")
|
||||
|
||||
@@ -48,6 +48,29 @@ class ThemeRedirectView(View):
|
||||
|
||||
return HttpResponseRedirect(request.GET.get("next", "/"))
|
||||
|
||||
class MinimizeSidebarRedirectView(View):
|
||||
SESSION_VAR = "MINIMIZE_SIDEBAR"
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
request.session[self.SESSION_VAR] = not self.minimize_sidebar_state(request)
|
||||
if not request.user.is_anonymous:
|
||||
try:
|
||||
request.user.profile.minimize_sidebar = request.session[self.SESSION_VAR]
|
||||
request.user.profile.save()
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
|
||||
return HttpResponseRedirect(request.GET.get("next", "/"))
|
||||
|
||||
@classmethod
|
||||
def minimize_sidebar_state(cls, request):
|
||||
try:
|
||||
return request.session.get(cls.SESSION_VAR, False)
|
||||
except AttributeError:
|
||||
# Session is middleware
|
||||
# Sometimes request wont have a session attribute
|
||||
return False
|
||||
|
||||
|
||||
# TODO: error views should be renamed to a proper function name when possible
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
PROTOCOL=https://
|
||||
AUTH_SUBDOMAIN=%AUTH_SUBDOMAIN%
|
||||
DOMAIN=%DOMAIN%
|
||||
AA_DOCKER_TAG=registry.gitlab.com/allianceauth/allianceauth/auth:v4.9.0
|
||||
AA_DOCKER_TAG=registry.gitlab.com/allianceauth/allianceauth/auth:v4.11.1
|
||||
|
||||
# Nginx Proxy Manager
|
||||
PROXY_HTTP_PORT=80
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
FROM python:3.11-slim
|
||||
ARG AUTH_VERSION=v4.9.0
|
||||
ARG AUTH_VERSION=v4.11.1
|
||||
ARG AUTH_PACKAGE=allianceauth==${AUTH_VERSION}
|
||||
ENV AUTH_USER=allianceauth
|
||||
ENV AUTH_GROUP=allianceauth
|
||||
|
||||
@@ -122,3 +122,44 @@ const merged = objectDeepMerge(target, source1, source2);
|
||||
|
||||
console.log(merged); // {a: 5, b: {c: 6, d: 3}, e: 4}
|
||||
```
|
||||
|
||||
### numberFormatter()
|
||||
|
||||
Formats a number according to the specified locale.
|
||||
Usage:
|
||||
|
||||
In your template get the current language code:
|
||||
|
||||
```django
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
```
|
||||
|
||||
Then use it in your JavaScript code:
|
||||
|
||||
```javascript
|
||||
/* global numberFormatter */
|
||||
|
||||
const userLocale = '{{ LANGUAGE_CODE }}'; // e.g., 'en-US', 'de-DE'
|
||||
const number = 1234567.89;
|
||||
|
||||
const formattedNumber = numberFormatter({
|
||||
value: number,
|
||||
locales: userLocale,
|
||||
options: {
|
||||
style: 'currency',
|
||||
currency: 'ISK'
|
||||
}
|
||||
});
|
||||
|
||||
console.log(formattedNumber); // e.g. "ISK 1,234,567.89" or "1.234.567,89 ISK" depending on locale
|
||||
```
|
||||
|
||||
#### numberFormatter() Parameters
|
||||
|
||||
- `value`: The number to format.
|
||||
- `locales`: The locale(s) to use for formatting (e.g., `en-US`, `de-DE`, `['en-US',
|
||||
'de-DE']`). If not provided, the browser's default locale will be used and any
|
||||
language settings from the user will be ignored.
|
||||
- `options`: Additional options for number formatting (see [`Intl.NumberFormat` documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat))
|
||||
- `minimumFractionDigits` is set to 0 by default if not provided.
|
||||
- `maximumFractionDigits` is set to 2 by default if not provided.
|
||||
|
||||
@@ -48,3 +48,13 @@ The loading spinner can be used with the following code:
|
||||
<use href="#aa-loading-spinner"></use>
|
||||
</svg>
|
||||
```
|
||||
|
||||
### Mumble Logo
|
||||
|
||||
The Mumble logo can be used with the following code:
|
||||
|
||||
```html
|
||||
<svg>
|
||||
<use href="#aa-mumble-logo"></use>
|
||||
</svg>
|
||||
```
|
||||
|
||||
@@ -66,3 +66,53 @@ To use it, you can use the following code in your template:
|
||||
</div>
|
||||
{% endblock %}
|
||||
```
|
||||
|
||||
### Top Navigation Buttons
|
||||
|
||||
To ensure a unified style for top navigation buttons, we provide a template partial for this.
|
||||
To use it, you can use the following code in your template:
|
||||
|
||||
```django
|
||||
{% block header_nav_collapse_right %}
|
||||
{% translate "My Awesome Link" as nav_item_title %}
|
||||
{% url "my_app:my_function" as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-button.html" with btn_modifier="success" url=nav_item_link title=nav_item_title fa_icon="fa-solid fa-plus" icon_on_mobile=True icon_on_desktop=True %}
|
||||
{% endblock header_nav_collapse_right %}
|
||||
```
|
||||
|
||||
This template takes care of the mobile responsiveness and the styling. In mobile view,
|
||||
the button will be changed to a text link. The icon will be placed in front of the text
|
||||
link if `icon_on_mobile` is set to `True`.
|
||||
|
||||
#### Button Parameters
|
||||
|
||||
- `btn_modifier`: (Optional) The button modifier class, e.g. `primary`, `secondary`, `success`, `danger`, `warning`, `info`, `light`, `dark`, `link`. Default is `primary`.
|
||||
- `url`: The URL the button should point to.
|
||||
- `title`: The title of the button.
|
||||
- `fa_icon`: (Optional) The FontAwesome icon class to use, e.g. `fa-solid fa-plus`.
|
||||
- `icon_on_mobile`: (Optional) Boolean to indicate if the icon should be shown on mobile devices in front of the text link. Default is `False`.
|
||||
- `icon_on_desktop`: (Optional) Boolean to indicate if the icon should be shown on desktop devices in front of the button text. Default is `False`.
|
||||
|
||||
### Top Navigation FontAwesome Icons
|
||||
|
||||
To ensure a unified style for top navigation FontAwesome icons, we provide a template partial for this.
|
||||
To use it, you can use the following code in your template:
|
||||
|
||||
```django
|
||||
{% block header_nav_collapse_right %}
|
||||
{% translate "My Awesome Link as FontAwesome Icon" as nav_item_title %}
|
||||
{% url "my_app:my_function" as nav_item_link %}
|
||||
{% include "framework/header/nav-collapse-icon.html" with fa_icon="fa-solid fa-check-double" url=nav_item_link title=nav_item_title icon_on_mobile=True %}
|
||||
{% endblock header_nav_collapse_right %}
|
||||
```
|
||||
|
||||
This template takes care of the mobile responsiveness and the styling. In mobile view,
|
||||
the icon will be changed to a text link. The icon will be placed in front of the text
|
||||
link if `icon_on_mobile` is set to `True`.
|
||||
|
||||
#### Icon Parameters
|
||||
|
||||
- `fa_icon`: The FontAwesome icon class to use, e.g. `fa-solid fa-check-double`.
|
||||
- `url`: The URL the icon should point to.
|
||||
- `title`: The title of the icon (used as tooltip).
|
||||
- `icon_on_mobile`: (Optional) Boolean to indicate if the icon should be shown on mobile devices in front of the text link. Default is `False`.
|
||||
|
||||
@@ -69,7 +69,7 @@ Next, we need to install Python and related development tools.
|
||||
Use the following command to install Python 3 with all required libraries with the default version:
|
||||
|
||||
```shell
|
||||
sudo apt-get install python3 python3-dev python3-venv python3-setuptools python3-pip python-pip
|
||||
sudo apt-get install python3 python3-dev python3-venv python3-setuptools python3-pip
|
||||
```
|
||||
|
||||
### Install redis and other tools
|
||||
@@ -89,7 +89,7 @@ sudo redis-server --daemonize yes
|
||||
Install MySQL and required libraries with the following command:
|
||||
|
||||
```shell
|
||||
sudo apt-get install mariadb-server mariadb-client libmariadbclient-dev
|
||||
sudo apt-get install mariadb-server mariadb-client libmariadb-dev-compat libmariadb-dev
|
||||
```
|
||||
|
||||
Start the mysql server
|
||||
|
||||
@@ -15,7 +15,7 @@ license = { file = "LICENSE" }
|
||||
authors = [
|
||||
{ name = "Alliance Auth", email = "adarnof@gmail.com" },
|
||||
]
|
||||
requires-python = ">=3.8"
|
||||
requires-python = ">=3.8,<3.13"
|
||||
classifiers = [
|
||||
"Environment :: Web Environment",
|
||||
"Framework :: Celery",
|
||||
@@ -31,7 +31,6 @@ classifiers = [
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Topic :: Internet :: WWW/HTTP",
|
||||
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
|
||||
]
|
||||
@@ -40,7 +39,7 @@ dynamic = [
|
||||
"version",
|
||||
]
|
||||
dependencies = [
|
||||
"bcrypt",
|
||||
"bcrypt<5",
|
||||
"beautifulsoup4",
|
||||
"celery>=5.2,<6",
|
||||
"celery-once>=3.0.1",
|
||||
@@ -61,11 +60,14 @@ dependencies = [
|
||||
"passlib",
|
||||
"pydiscourse",
|
||||
"python-slugify>=1.2",
|
||||
"pyyaml",
|
||||
"redis>=4",
|
||||
"requests>=2.9.1",
|
||||
"requests-oauthlib",
|
||||
"semantic-version",
|
||||
"slixmpp<1.9",
|
||||
"ua-parser",
|
||||
"user-agents",
|
||||
]
|
||||
optional-dependencies.docs = [
|
||||
"myst-parser",
|
||||
|
||||
Reference in New Issue
Block a user