mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-21 18:22:27 +02:00
Compare commits
21 Commits
4385d2af8b
...
2e037190d2
Author | SHA1 | Date | |
---|---|---|---|
|
2e037190d2 | ||
|
b02827cb3f | ||
|
2bcc0570ad | ||
|
a3ea0c65a1 | ||
|
5e526da11c | ||
|
5c79265f90 | ||
|
eb0134e716 | ||
|
afde1f4729 | ||
|
5c6dda0eac | ||
|
af453bc772 | ||
|
e13674e886 | ||
|
e3e856b826 | ||
|
9d1cd23a8f | ||
|
148f7c116f | ||
|
33e7134d6f | ||
|
fb799551aa | ||
|
7b95051fe1 | ||
|
efb6a6db4f | ||
|
478aa1aa12 | ||
|
751e55ed6c | ||
|
0dd47e72bc |
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class AnalyticsConfig(AppConfig):
|
class AnalyticsConfig(AppConfig):
|
||||||
name = 'allianceauth.analytics'
|
name = 'allianceauth.analytics'
|
||||||
label = 'analytics'
|
label = 'analytics'
|
||||||
|
verbose_name = _('Analytics')
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.core.checks import register, Tags
|
from django.core.checks import register, Tags
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class AuthenticationConfig(AppConfig):
|
class AuthenticationConfig(AppConfig):
|
||||||
name = "allianceauth.authentication"
|
name = "allianceauth.authentication"
|
||||||
label = "authentication"
|
label = "authentication"
|
||||||
|
verbose_name = _("Authentication")
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
from allianceauth.authentication import checks, signals # noqa: F401
|
from allianceauth.authentication import checks, signals # noqa: F401
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from django.contrib.auth.models import User, Permission
|
from django.contrib.auth.models import User, Permission
|
||||||
from django.db import models, transaction
|
from django.db import models, transaction
|
||||||
@ -27,7 +28,7 @@ class State(models.Model):
|
|||||||
help_text="Factions to whose members this state is available.")
|
help_text="Factions to whose members this state is available.")
|
||||||
public = models.BooleanField(default=False, help_text="Make this state available to any character.")
|
public = models.BooleanField(default=False, help_text="Make this state available to any character.")
|
||||||
|
|
||||||
objects = StateManager()
|
objects: ClassVar[StateManager] = StateManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['-priority']
|
ordering = ['-priority']
|
||||||
@ -137,8 +138,10 @@ class UserProfile(models.Model):
|
|||||||
sender=self.__class__, user=self.user, state=self.state
|
sender=self.__class__, user=self.user, state=self.state
|
||||||
)
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self) -> str:
|
||||||
return str(self.user)
|
return str(self.user)
|
||||||
|
|
||||||
|
|
||||||
class CharacterOwnership(models.Model):
|
class CharacterOwnership(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
default_permissions = ('change', 'delete')
|
default_permissions = ('change', 'delete')
|
||||||
@ -148,7 +151,7 @@ class CharacterOwnership(models.Model):
|
|||||||
owner_hash = models.CharField(max_length=28, unique=True)
|
owner_hash = models.CharField(max_length=28, unique=True)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='character_ownerships')
|
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='character_ownerships')
|
||||||
|
|
||||||
objects = CharacterOwnershipManager()
|
objects: ClassVar[CharacterOwnershipManager] = CharacterOwnershipManager()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.user}: {self.character}"
|
return f"{self.user}: {self.character}"
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class CorpUtilsConfig(AppConfig):
|
class CorpUtilsConfig(AppConfig):
|
||||||
name = 'allianceauth.corputils'
|
name = 'allianceauth.corputils'
|
||||||
label = 'corputils'
|
label = 'corputils'
|
||||||
|
verbose_name = _('Corporation Stats')
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from allianceauth.authentication.models import CharacterOwnership, UserProfile
|
from allianceauth.authentication.models import CharacterOwnership, UserProfile
|
||||||
from bravado.exception import HTTPForbidden
|
from bravado.exception import HTTPForbidden
|
||||||
@ -40,9 +41,9 @@ class CorpStats(models.Model):
|
|||||||
verbose_name = "corp stats"
|
verbose_name = "corp stats"
|
||||||
verbose_name_plural = "corp stats"
|
verbose_name_plural = "corp stats"
|
||||||
|
|
||||||
objects = CorpStatsManager()
|
objects: ClassVar[CorpStatsManager] = CorpStatsManager()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self) -> str:
|
||||||
return f"{self.__class__.__name__} for {self.corp}"
|
return f"{self.__class__.__name__} for {self.corp}"
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
|
@ -3,6 +3,7 @@ Crontab App Config
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class CrontabConfig(AppConfig):
|
class CrontabConfig(AppConfig):
|
||||||
@ -12,3 +13,4 @@ class CrontabConfig(AppConfig):
|
|||||||
|
|
||||||
name = "allianceauth.crontab"
|
name = "allianceauth.crontab"
|
||||||
label = "crontab"
|
label = "crontab"
|
||||||
|
verbose_name = _("Crontab")
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class EveonlineConfig(AppConfig):
|
class EveonlineConfig(AppConfig):
|
||||||
name = 'allianceauth.eveonline'
|
name = 'allianceauth.eveonline'
|
||||||
label = 'eveonline'
|
label = 'eveonline'
|
||||||
|
verbose_name = _('EVE Online')
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class EveAutogroupsConfig(AppConfig):
|
class EveAutogroupsConfig(AppConfig):
|
||||||
name = 'allianceauth.eveonline.autogroups'
|
name = 'allianceauth.eveonline.autogroups'
|
||||||
label = 'eve_autogroups'
|
label = 'eve_autogroups'
|
||||||
|
verbose_name = _('EVE Online Autogroups')
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
import allianceauth.eveonline.autogroups.signals
|
import allianceauth.eveonline.autogroups.signals
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
from typing import ClassVar
|
||||||
from django.db import models, transaction
|
from django.db import models, transaction
|
||||||
from django.contrib.auth.models import Group, User
|
from django.contrib.auth.models import Group, User
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
@ -78,7 +79,7 @@ class AutogroupsConfig(models.Model):
|
|||||||
max_length=10, default='', blank=True,
|
max_length=10, default='', blank=True,
|
||||||
help_text='Any spaces in the group name will be replaced with this.')
|
help_text='Any spaces in the group name will be replaced with this.')
|
||||||
|
|
||||||
objects = AutogroupsConfigManager()
|
objects: ClassVar[AutogroupsConfigManager] = AutogroupsConfigManager()
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
@ -14,10 +14,10 @@ class EveCharacterProviderManager:
|
|||||||
class EveCharacterManager(models.Manager):
|
class EveCharacterManager(models.Manager):
|
||||||
provider = EveCharacterProviderManager()
|
provider = EveCharacterProviderManager()
|
||||||
|
|
||||||
def create_character(self, character_id):
|
def create_character(self, character_id) -> models.Model:
|
||||||
return self.create_character_obj(self.provider.get_character(character_id))
|
return self.create_character_obj(self.provider.get_character(character_id))
|
||||||
|
|
||||||
def create_character_obj(self, character: providers.Character):
|
def create_character_obj(self, character: providers.Character) -> models.Model:
|
||||||
return self.create(
|
return self.create(
|
||||||
character_id=character.id,
|
character_id=character.id,
|
||||||
character_name=character.name,
|
character_name=character.name,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
from typing import Union
|
from typing import ClassVar, Union
|
||||||
|
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.db import models
|
from django.db import models
|
||||||
@ -75,8 +75,8 @@ class EveAllianceInfo(models.Model):
|
|||||||
alliance_ticker = models.CharField(max_length=254)
|
alliance_ticker = models.CharField(max_length=254)
|
||||||
executor_corp_id = models.PositiveIntegerField()
|
executor_corp_id = models.PositiveIntegerField()
|
||||||
|
|
||||||
objects = EveAllianceManager()
|
objects: ClassVar[EveAllianceManager] = EveAllianceManager()
|
||||||
provider = EveAllianceProviderManager()
|
provider: ClassVar[EveAllianceProviderManager] = EveAllianceProviderManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
indexes = [models.Index(fields=['executor_corp_id',])]
|
indexes = [models.Index(fields=['executor_corp_id',])]
|
||||||
@ -147,7 +147,7 @@ class EveCorporationInfo(models.Model):
|
|||||||
EveAllianceInfo, blank=True, null=True, on_delete=models.SET_NULL
|
EveAllianceInfo, blank=True, null=True, on_delete=models.SET_NULL
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = EveCorporationManager()
|
objects: ClassVar[EveCorporationManager] = EveCorporationManager()
|
||||||
provider = EveCorporationProviderManager()
|
provider = EveCorporationProviderManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -214,7 +214,7 @@ class EveCharacter(models.Model):
|
|||||||
faction_id = models.PositiveIntegerField(blank=True, null=True, default=None)
|
faction_id = models.PositiveIntegerField(blank=True, null=True, default=None)
|
||||||
faction_name = models.CharField(max_length=254, blank=True, null=True, default='')
|
faction_name = models.CharField(max_length=254, blank=True, null=True, default='')
|
||||||
|
|
||||||
objects = EveCharacterManager()
|
objects: ClassVar[EveCharacterManager] = EveCharacterManager()
|
||||||
provider = EveCharacterProviderManager()
|
provider = EveCharacterProviderManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class FatConfig(AppConfig):
|
class FatConfig(AppConfig):
|
||||||
name = 'allianceauth.fleetactivitytracking'
|
name = 'allianceauth.fleetactivitytracking'
|
||||||
label = 'fleetactivitytracking'
|
label = 'fleetactivitytracking'
|
||||||
|
verbose_name = _('Fleet Activity Tracking')
|
||||||
|
@ -3,6 +3,7 @@ Framework App Config
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class FrameworkConfig(AppConfig):
|
class FrameworkConfig(AppConfig):
|
||||||
@ -12,3 +13,4 @@ class FrameworkConfig(AppConfig):
|
|||||||
|
|
||||||
name = "allianceauth.framework"
|
name = "allianceauth.framework"
|
||||||
label = "framework"
|
label = "framework"
|
||||||
|
verbose_name = _("Framework")
|
||||||
|
@ -5,6 +5,24 @@
|
|||||||
* to be used throughout Alliance Auth and its Community Apps
|
* to be used throughout Alliance Auth and its Community Apps
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* General
|
||||||
|
------------------------------------------------------------------------------------- */
|
||||||
|
@media all {
|
||||||
|
.navbar-toggler.collapsed {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#nav-right:has(li) + ul#nav-right-character-control > li:first-child {
|
||||||
|
display: list-item !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (max-width: 991px) {
|
||||||
|
ul#nav-left:has(li) + ul#nav-right + ul#nav-right-character-control > li:first-child {
|
||||||
|
display: list-item !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Bootstrap fixes
|
/* Bootstrap fixes
|
||||||
------------------------------------------------------------------------------------- */
|
------------------------------------------------------------------------------------- */
|
||||||
@media all {
|
@media all {
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class GroupManagementConfig(AppConfig):
|
class GroupManagementConfig(AppConfig):
|
||||||
name = 'allianceauth.groupmanagement'
|
name = 'allianceauth.groupmanagement'
|
||||||
label = 'groupmanagement'
|
label = 'groupmanagement'
|
||||||
verbose_name = 'Group Management'
|
verbose_name = _('Group Management')
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
from . import signals # noqa: F401
|
from . import signals # noqa: F401
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class HRApplicationsConfig(AppConfig):
|
class HRApplicationsConfig(AppConfig):
|
||||||
name = 'allianceauth.hrapplications'
|
name = 'allianceauth.hrapplications'
|
||||||
label = 'hrapplications'
|
label = 'hrapplications'
|
||||||
|
verbose_name = _('HR Applications')
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from typing import ClassVar
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from sortedm2m.fields import SortedManyToManyField
|
from sortedm2m.fields import SortedManyToManyField
|
||||||
@ -40,7 +41,7 @@ class Application(models.Model):
|
|||||||
reviewer_character = models.ForeignKey(EveCharacter, on_delete=models.SET_NULL, blank=True, null=True)
|
reviewer_character = models.ForeignKey(EveCharacter, on_delete=models.SET_NULL, blank=True, null=True)
|
||||||
created = models.DateTimeField(auto_now_add=True)
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
objects = ApplicationManager()
|
objects: ClassVar[ApplicationManager] = ApplicationManager()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.user) + " Application To " + str(self.form)
|
return str(self.user) + " Application To " + str(self.form)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
# Fegpawn Kaundur, 2023
|
# Fegpawn Kaundur, 2023
|
||||||
# frank1210 <francolopez_16@hotmail.com>, 2023
|
# frank1210 <francolopez_16@hotmail.com>, 2023
|
||||||
# Joel Falknau <ozirascal@gmail.com>, 2023
|
# Joel Falknau <ozirascal@gmail.com>, 2023
|
||||||
# trenus, 2023
|
# trenus, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -17,7 +17,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
||||||
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
||||||
"Last-Translator: trenus, 2023\n"
|
"Last-Translator: trenus, 2025\n"
|
||||||
"Language-Team: Spanish (https://app.transifex.com/alliance-auth/teams/107430/es/)\n"
|
"Language-Team: Spanish (https://app.transifex.com/alliance-auth/teams/107430/es/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -64,7 +64,7 @@ msgstr "Inglés"
|
|||||||
|
|
||||||
#: allianceauth/authentication/models.py:71
|
#: allianceauth/authentication/models.py:71
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr ""
|
msgstr "Checo"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:72
|
#: allianceauth/authentication/models.py:72
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||||
@ -104,22 +104,22 @@ msgstr "Ruso"
|
|||||||
#: allianceauth/authentication/models.py:79
|
#: allianceauth/authentication/models.py:79
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr ""
|
msgstr "Holandés"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr ""
|
msgstr "Polaco"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr ""
|
msgstr "Ucraniano"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||||
msgid "Simplified Chinese"
|
msgid "Simplified Chinese"
|
||||||
msgstr ""
|
msgstr "Chino Simplificado"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:98
|
#: allianceauth/authentication/models.py:98
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:42
|
#: allianceauth/menu/templates/menu/menu-user.html:42
|
||||||
@ -134,7 +134,7 @@ msgstr "Modo Nocturno"
|
|||||||
#: allianceauth/authentication/models.py:107
|
#: allianceauth/authentication/models.py:107
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:46
|
#: allianceauth/menu/templates/menu/menu-user.html:46
|
||||||
msgid "Theme"
|
msgid "Theme"
|
||||||
msgstr ""
|
msgstr "Tema"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:124
|
#: allianceauth/authentication/models.py:124
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -195,17 +195,17 @@ msgstr "Allianza"
|
|||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard_groups.html:5
|
#: allianceauth/authentication/templates/authentication/dashboard_groups.html:5
|
||||||
msgid "Membership"
|
msgid "Membership"
|
||||||
msgstr ""
|
msgstr "Membresía"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/dashboard_groups.html:10
|
#: allianceauth/authentication/templates/authentication/dashboard_groups.html:10
|
||||||
msgid "State:"
|
msgid "State:"
|
||||||
msgstr ""
|
msgstr "Estado:"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/tokens.html:7
|
#: allianceauth/authentication/templates/authentication/tokens.html:7
|
||||||
#: allianceauth/authentication/templates/authentication/tokens.html:11
|
#: allianceauth/authentication/templates/authentication/tokens.html:11
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
|
||||||
msgid "Token Management"
|
msgid "Token Management"
|
||||||
msgstr ""
|
msgstr "Gestión de Tokens"
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/tokens.html:17
|
#: allianceauth/authentication/templates/authentication/tokens.html:17
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -346,7 +346,7 @@ msgstr "Corporaciones"
|
|||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/base.html:35
|
#: allianceauth/corputils/templates/corputils/base.html:35
|
||||||
msgid "Add corporation"
|
msgid "Add corporation"
|
||||||
msgstr ""
|
msgstr "Añadir corporación"
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/base.html:51
|
#: allianceauth/corputils/templates/corputils/base.html:51
|
||||||
msgid "Search all corporations..."
|
msgid "Search all corporations..."
|
||||||
@ -371,11 +371,11 @@ msgstr "Ultima Actualizacion:"
|
|||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:86
|
#: allianceauth/corputils/templates/corputils/corpstats.html:86
|
||||||
msgid "Update Now"
|
msgid "Update Now"
|
||||||
msgstr ""
|
msgstr "Actualizar Ahora"
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:101
|
#: allianceauth/corputils/templates/corputils/corpstats.html:101
|
||||||
msgid "Main character"
|
msgid "Main character"
|
||||||
msgstr ""
|
msgstr "Personaje principal"
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:102
|
#: allianceauth/corputils/templates/corputils/corpstats.html:102
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:29
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:29
|
||||||
@ -549,7 +549,7 @@ msgstr "Editar Fatlink"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:21
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:21
|
||||||
msgid "Are you sure?"
|
msgid "Are you sure?"
|
||||||
msgstr ""
|
msgstr "¿Estás seguro?"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:22
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:22
|
||||||
msgid "Delete fat"
|
msgid "Delete fat"
|
||||||
@ -692,7 +692,7 @@ msgstr "Promedio de participacion"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:6
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:6
|
||||||
msgid "Fatlink Statistics"
|
msgid "Fatlink Statistics"
|
||||||
msgstr ""
|
msgstr "Estadísticas Fatlink"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:32
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkstatisticsview.html:32
|
||||||
msgid "Ticker"
|
msgid "Ticker"
|
||||||
@ -1940,19 +1940,19 @@ msgstr "Cuenta IPSuite4 desactivada."
|
|||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:7
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:7
|
||||||
msgid "Mumble"
|
msgid "Mumble"
|
||||||
msgstr ""
|
msgstr "Mumble"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:11
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:11
|
||||||
msgid "Mumble History"
|
msgid "Mumble History"
|
||||||
msgstr ""
|
msgstr "Historial de Mumble"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:23
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:23
|
||||||
msgid "Server Connection History"
|
msgid "Server Connection History"
|
||||||
msgstr ""
|
msgstr "Historial de Conexiones al Servidor"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:32
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:32
|
||||||
msgid "Displayed Name"
|
msgid "Displayed Name"
|
||||||
msgstr ""
|
msgstr "Nombre Visualizado"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:33
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:33
|
||||||
msgid "Release"
|
msgid "Release"
|
||||||
@ -1961,24 +1961,24 @@ msgstr ""
|
|||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:34
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:34
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:68
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:68
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr ""
|
msgstr "Versión"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:35
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:35
|
||||||
msgid "Last Connect"
|
msgid "Last Connect"
|
||||||
msgstr ""
|
msgstr "Última Conexión"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:36
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:36
|
||||||
msgid "Last Disconnect"
|
msgid "Last Disconnect"
|
||||||
msgstr ""
|
msgstr "Última Desconexión"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:48
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:48
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:60
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:60
|
||||||
msgid "Server Connection Breakdown"
|
msgid "Server Connection Breakdown"
|
||||||
msgstr ""
|
msgstr "Desglose de la Conexión al Servidor"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:69
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:69
|
||||||
msgid "Number"
|
msgid "Number"
|
||||||
msgstr ""
|
msgstr "Número"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:28
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:28
|
||||||
#: allianceauth/services/templates/services/service_password.html:26
|
#: allianceauth/services/templates/services/service_password.html:26
|
||||||
@ -1987,11 +1987,11 @@ msgstr "Cambiar Contraseña"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:46
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:46
|
||||||
msgid "Connect"
|
msgid "Connect"
|
||||||
msgstr ""
|
msgstr "Conectar"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:52
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:52
|
||||||
msgid "Mumble Connection History"
|
msgid "Mumble Connection History"
|
||||||
msgstr ""
|
msgstr "Historia de Conexión Mumble"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/auth_hooks.py:27
|
#: allianceauth/services/modules/openfire/auth_hooks.py:27
|
||||||
msgid "Jabber"
|
msgid "Jabber"
|
||||||
@ -2214,7 +2214,7 @@ msgstr "Cambiar contraseña en %(service_name)s"
|
|||||||
|
|
||||||
#: allianceauth/services/templates/services/service_status.html:5
|
#: allianceauth/services/templates/services/service_status.html:5
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr ""
|
msgstr "Habilitado"
|
||||||
|
|
||||||
#: allianceauth/services/templates/services/service_status.html:7
|
#: allianceauth/services/templates/services/service_status.html:7
|
||||||
#: allianceauth/srp/templates/srp/management.html:78
|
#: allianceauth/srp/templates/srp/management.html:78
|
||||||
@ -2299,11 +2299,11 @@ msgstr "Crear SRP"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/add.html:26
|
#: allianceauth/srp/templates/srp/add.html:26
|
||||||
msgid "SRP fleet details"
|
msgid "SRP fleet details"
|
||||||
msgstr ""
|
msgstr "Detalles de la flota SRP"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/add.html:40
|
#: allianceauth/srp/templates/srp/add.html:40
|
||||||
msgid "Create SRP fleet"
|
msgid "Create SRP fleet"
|
||||||
msgstr ""
|
msgstr "Crear flota SRP"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/add.html:46
|
#: allianceauth/srp/templates/srp/add.html:46
|
||||||
msgid "Give this link to the line members."
|
msgid "Give this link to the line members."
|
||||||
@ -2316,7 +2316,7 @@ msgstr "Informacion de SRP de la flota"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:17
|
#: allianceauth/srp/templates/srp/data.html:17
|
||||||
msgid "View Fleets"
|
msgid "View Fleets"
|
||||||
msgstr ""
|
msgstr "Ver Flotas"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:26
|
#: allianceauth/srp/templates/srp/data.html:26
|
||||||
msgid "Mark Incomplete"
|
msgid "Mark Incomplete"
|
||||||
@ -2435,11 +2435,11 @@ msgstr "Crear solicitud de SRP"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/request.html:22
|
#: allianceauth/srp/templates/srp/request.html:22
|
||||||
msgid "Your SRP request"
|
msgid "Your SRP request"
|
||||||
msgstr ""
|
msgstr "Tu solicitud SRP"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/request.html:35
|
#: allianceauth/srp/templates/srp/request.html:35
|
||||||
msgid "Create SRP request"
|
msgid "Create SRP request"
|
||||||
msgstr ""
|
msgstr "Crear solicitud SRP"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/update.html:7
|
#: allianceauth/srp/templates/srp/update.html:7
|
||||||
#: allianceauth/srp/templates/srp/update.html:16
|
#: allianceauth/srp/templates/srp/update.html:16
|
||||||
@ -2456,7 +2456,7 @@ msgstr "No existe el SRP para esa flota"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/update.html:40
|
#: allianceauth/srp/templates/srp/update.html:40
|
||||||
msgid "Update AAR link"
|
msgid "Update AAR link"
|
||||||
msgstr ""
|
msgstr "Actualizar enlace AAR"
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:85
|
#: allianceauth/srp/views.py:85
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -2568,7 +2568,7 @@ msgstr "Cerrado"
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:24
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:24
|
||||||
msgid "No notifications at this time"
|
msgid "No notifications at this time"
|
||||||
msgstr ""
|
msgstr "No hay notificaciones en este momento"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:33
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:33
|
||||||
msgid "Powered by GitLab"
|
msgid "Powered by GitLab"
|
||||||
@ -2617,11 +2617,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:116
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:116
|
||||||
msgid "running"
|
msgid "running"
|
||||||
msgstr ""
|
msgstr "ejecutando"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/overview.html:117
|
#: allianceauth/templates/allianceauth/admin-status/overview.html:117
|
||||||
msgid "queued"
|
msgid "queued"
|
||||||
msgstr ""
|
msgstr "en cola"
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
|
||||||
msgid "AA Documentation"
|
msgid "AA Documentation"
|
||||||
@ -2646,7 +2646,7 @@ msgstr "Navegacion"
|
|||||||
|
|
||||||
#: allianceauth/theme/templates/theme/theme_select.html:7
|
#: allianceauth/theme/templates/theme/theme_select.html:7
|
||||||
msgid "Select Theme"
|
msgid "Select Theme"
|
||||||
msgstr ""
|
msgstr "Seleccionar tema"
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:36
|
#: allianceauth/timerboard/form.py:36
|
||||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:14
|
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:14
|
||||||
@ -2677,7 +2677,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/timerboard/form.py:43
|
#: allianceauth/timerboard/form.py:43
|
||||||
msgid "Date and Time"
|
msgid "Date and Time"
|
||||||
msgstr ""
|
msgstr "Fecha y hora"
|
||||||
|
|
||||||
#: allianceauth/timerboard/form.py:44
|
#: allianceauth/timerboard/form.py:44
|
||||||
msgid "Days Remaining"
|
msgid "Days Remaining"
|
||||||
@ -2744,35 +2744,35 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:31
|
#: allianceauth/timerboard/models.py:31
|
||||||
msgid "Astrahus"
|
msgid "Astrahus"
|
||||||
msgstr ""
|
msgstr "Astrahus"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:32
|
#: allianceauth/timerboard/models.py:32
|
||||||
msgid "Fortizar"
|
msgid "Fortizar"
|
||||||
msgstr ""
|
msgstr "Fortizar"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:33
|
#: allianceauth/timerboard/models.py:33
|
||||||
msgid "Keepstar"
|
msgid "Keepstar"
|
||||||
msgstr ""
|
msgstr "Keepstar"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:34
|
#: allianceauth/timerboard/models.py:34
|
||||||
msgid "Raitaru"
|
msgid "Raitaru"
|
||||||
msgstr ""
|
msgstr "Raitaru"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:35
|
#: allianceauth/timerboard/models.py:35
|
||||||
msgid "Azbel"
|
msgid "Azbel"
|
||||||
msgstr ""
|
msgstr "Azbel"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:36
|
#: allianceauth/timerboard/models.py:36
|
||||||
msgid "Sotiyo"
|
msgid "Sotiyo"
|
||||||
msgstr ""
|
msgstr "Sotiyo"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:37
|
#: allianceauth/timerboard/models.py:37
|
||||||
msgid "Athanor"
|
msgid "Athanor"
|
||||||
msgstr ""
|
msgstr "Athanor"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:38
|
#: allianceauth/timerboard/models.py:38
|
||||||
msgid "Tatara"
|
msgid "Tatara"
|
||||||
msgstr ""
|
msgstr "Tatara"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:39
|
#: allianceauth/timerboard/models.py:39
|
||||||
msgid "Cyno Beacon"
|
msgid "Cyno Beacon"
|
||||||
@ -2832,7 +2832,7 @@ msgstr "Desanclando"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:59
|
#: allianceauth/timerboard/models.py:59
|
||||||
msgid "Abandoned"
|
msgid "Abandoned"
|
||||||
msgstr ""
|
msgstr "Abandonado"
|
||||||
|
|
||||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
||||||
@ -2906,17 +2906,19 @@ msgstr "Se guardaron los cambios en el timer."
|
|||||||
|
|
||||||
#: allianceauth/views.py:55
|
#: allianceauth/views.py:55
|
||||||
msgid "Bad Request"
|
msgid "Bad Request"
|
||||||
msgstr ""
|
msgstr "Mala solicitud"
|
||||||
|
|
||||||
#: allianceauth/views.py:57 allianceauth/views.py:87
|
#: allianceauth/views.py:57 allianceauth/views.py:87
|
||||||
msgid ""
|
msgid ""
|
||||||
"Auth encountered an error processing your request, please try again. If the "
|
"Auth encountered an error processing your request, please try again. If the "
|
||||||
"error persists, please contact the administrators."
|
"error persists, please contact the administrators."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Auth ha encontrado un error al procesar su solicitud, por favor inténtelo de"
|
||||||
|
" nuevo. Si el error persiste, póngase en contacto con los administradores."
|
||||||
|
|
||||||
#: allianceauth/views.py:65
|
#: allianceauth/views.py:65
|
||||||
msgid "Permission Denied"
|
msgid "Permission Denied"
|
||||||
msgstr ""
|
msgstr "Permiso Denegado"
|
||||||
|
|
||||||
#: allianceauth/views.py:67
|
#: allianceauth/views.py:67
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -2926,14 +2928,16 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/views.py:75
|
#: allianceauth/views.py:75
|
||||||
msgid "Page Not Found"
|
msgid "Page Not Found"
|
||||||
msgstr ""
|
msgstr "Página No Encontrada"
|
||||||
|
|
||||||
#: allianceauth/views.py:77
|
#: allianceauth/views.py:77
|
||||||
msgid ""
|
msgid ""
|
||||||
"Page does not exist. If you believe this is in error please contact the "
|
"Page does not exist. If you believe this is in error please contact the "
|
||||||
"administrators. "
|
"administrators. "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"La página no existe. Si cree que se trata de un error, póngase en contacto "
|
||||||
|
"con los administradores. "
|
||||||
|
|
||||||
#: allianceauth/views.py:85
|
#: allianceauth/views.py:85
|
||||||
msgid "Internal Server Error"
|
msgid "Internal Server Error"
|
||||||
msgstr ""
|
msgstr "Error Interno del Servidor"
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
# Kristof Swensen, 2023
|
# Kristof Swensen, 2023
|
||||||
# Денис Ивченко, 2024
|
# Денис Ивченко, 2024
|
||||||
# Andrii Yukhymchak, 2024
|
# Andrii Yukhymchak, 2024
|
||||||
|
# Bandera Primary, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -15,7 +16,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
||||||
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
||||||
"Last-Translator: Andrii Yukhymchak, 2024\n"
|
"Last-Translator: Bandera Primary, 2025\n"
|
||||||
"Language-Team: Ukrainian (https://app.transifex.com/alliance-auth/teams/107430/uk/)\n"
|
"Language-Team: Ukrainian (https://app.transifex.com/alliance-auth/teams/107430/uk/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -67,7 +68,7 @@ msgstr "Англійська"
|
|||||||
|
|
||||||
#: allianceauth/authentication/models.py:71
|
#: allianceauth/authentication/models.py:71
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr ""
|
msgstr "Чеська"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:72
|
#: allianceauth/authentication/models.py:72
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||||
@ -107,12 +108,12 @@ msgstr "Російська"
|
|||||||
#: allianceauth/authentication/models.py:79
|
#: allianceauth/authentication/models.py:79
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr ""
|
msgstr "Нідерландська"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr ""
|
msgstr "Польська"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||||
@ -122,7 +123,7 @@ msgstr "Українська"
|
|||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||||
msgid "Simplified Chinese"
|
msgid "Simplified Chinese"
|
||||||
msgstr ""
|
msgstr "Cпрощена китайська"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:98
|
#: allianceauth/authentication/models.py:98
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:42
|
#: allianceauth/menu/templates/menu/menu-user.html:42
|
||||||
@ -216,6 +217,9 @@ msgid ""
|
|||||||
"your tokens. Always revoke tokens on "
|
"your tokens. Always revoke tokens on "
|
||||||
"https://developers.eveonline.com/authorized-apps where possible."
|
"https://developers.eveonline.com/authorized-apps where possible."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Тут ви може видалити токени, але резервні копії або логи бази даних все ще "
|
||||||
|
"можуть містити їх. Завжди анульовуйте токени на "
|
||||||
|
"https://developers.eveonline.com/authorized-apps, коли є можливість."
|
||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/tokens.html:23
|
#: allianceauth/authentication/templates/authentication/tokens.html:23
|
||||||
msgid "Scopes"
|
msgid "Scopes"
|
||||||
@ -446,36 +450,36 @@ msgstr "Не вдалося зібрати статистику корпорац
|
|||||||
|
|
||||||
#: allianceauth/crontab/models.py:13
|
#: allianceauth/crontab/models.py:13
|
||||||
msgid "Minute Offset"
|
msgid "Minute Offset"
|
||||||
msgstr ""
|
msgstr "Зміщення хвилини"
|
||||||
|
|
||||||
#: allianceauth/crontab/models.py:14
|
#: allianceauth/crontab/models.py:14
|
||||||
msgid "Hour Offset"
|
msgid "Hour Offset"
|
||||||
msgstr ""
|
msgstr "Зміщення години"
|
||||||
|
|
||||||
#: allianceauth/crontab/models.py:15
|
#: allianceauth/crontab/models.py:15
|
||||||
msgid "Day of Month Offset"
|
msgid "Day of Month Offset"
|
||||||
msgstr ""
|
msgstr "Зміщення дня місяця"
|
||||||
|
|
||||||
#: allianceauth/crontab/models.py:16
|
#: allianceauth/crontab/models.py:16
|
||||||
msgid "Month of Year Offset"
|
msgid "Month of Year Offset"
|
||||||
msgstr ""
|
msgstr "Зміщення місяця року"
|
||||||
|
|
||||||
#: allianceauth/crontab/models.py:17
|
#: allianceauth/crontab/models.py:17
|
||||||
msgid "Day of Week Offset"
|
msgid "Day of Week Offset"
|
||||||
msgstr ""
|
msgstr "Зміщення дня тижня"
|
||||||
|
|
||||||
#: allianceauth/custom_css/apps.py:13 allianceauth/custom_css/models.py:36
|
#: allianceauth/custom_css/apps.py:13 allianceauth/custom_css/models.py:36
|
||||||
#: allianceauth/custom_css/models.py:37 allianceauth/custom_css/models.py:47
|
#: allianceauth/custom_css/models.py:37 allianceauth/custom_css/models.py:47
|
||||||
msgid "Custom CSS"
|
msgid "Custom CSS"
|
||||||
msgstr ""
|
msgstr "Користувацький CSS"
|
||||||
|
|
||||||
#: allianceauth/custom_css/models.py:25
|
#: allianceauth/custom_css/models.py:25
|
||||||
msgid "Your custom CSS"
|
msgid "Your custom CSS"
|
||||||
msgstr ""
|
msgstr "Ваш користувацький CSS"
|
||||||
|
|
||||||
#: allianceauth/custom_css/models.py:26
|
#: allianceauth/custom_css/models.py:26
|
||||||
msgid "This CSS will be added to the site after the default CSS."
|
msgid "This CSS will be added to the site after the default CSS."
|
||||||
msgstr ""
|
msgstr "Цей CSS буде додано до сайту після базового CSS."
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/auth_hooks.py:10
|
#: allianceauth/fleetactivitytracking/auth_hooks.py:10
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:10
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/characternotexisting.html:10
|
||||||
@ -1951,45 +1955,45 @@ msgstr "Деактивовано обліковий запис IPSuite4."
|
|||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:7
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:7
|
||||||
msgid "Mumble"
|
msgid "Mumble"
|
||||||
msgstr ""
|
msgstr "Mumble"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:11
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:11
|
||||||
msgid "Mumble History"
|
msgid "Mumble History"
|
||||||
msgstr ""
|
msgstr "Історія Mumble"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:23
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:23
|
||||||
msgid "Server Connection History"
|
msgid "Server Connection History"
|
||||||
msgstr ""
|
msgstr "Історія підключень до сервера"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:32
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:32
|
||||||
msgid "Displayed Name"
|
msgid "Displayed Name"
|
||||||
msgstr ""
|
msgstr "Відображене ім'я"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:33
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:33
|
||||||
msgid "Release"
|
msgid "Release"
|
||||||
msgstr ""
|
msgstr "Реліз"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:34
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:34
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:68
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:68
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr ""
|
msgstr "Версія"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:35
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:35
|
||||||
msgid "Last Connect"
|
msgid "Last Connect"
|
||||||
msgstr ""
|
msgstr "Останнє підключення"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:36
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:36
|
||||||
msgid "Last Disconnect"
|
msgid "Last Disconnect"
|
||||||
msgstr ""
|
msgstr "Останнє відключення"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:48
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:48
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:60
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:60
|
||||||
msgid "Server Connection Breakdown"
|
msgid "Server Connection Breakdown"
|
||||||
msgstr ""
|
msgstr "Розбір підключення до сервера"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:69
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:69
|
||||||
msgid "Number"
|
msgid "Number"
|
||||||
msgstr ""
|
msgstr "Кількість"
|
||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:28
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:28
|
||||||
#: allianceauth/services/templates/services/service_password.html:26
|
#: allianceauth/services/templates/services/service_password.html:26
|
||||||
@ -2002,7 +2006,7 @@ msgstr "Підєднатись"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:52
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:52
|
||||||
msgid "Mumble Connection History"
|
msgid "Mumble Connection History"
|
||||||
msgstr ""
|
msgstr "Історія підключень до Mumble"
|
||||||
|
|
||||||
#: allianceauth/services/modules/openfire/auth_hooks.py:27
|
#: allianceauth/services/modules/openfire/auth_hooks.py:27
|
||||||
msgid "Jabber"
|
msgid "Jabber"
|
||||||
@ -2740,11 +2744,11 @@ msgstr "POCO"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:25
|
#: allianceauth/timerboard/models.py:25
|
||||||
msgid "Orbital Skyhook"
|
msgid "Orbital Skyhook"
|
||||||
msgstr ""
|
msgstr "Орбітальний скайхук"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:26
|
#: allianceauth/timerboard/models.py:26
|
||||||
msgid "Sovereignty Hub"
|
msgid "Sovereignty Hub"
|
||||||
msgstr ""
|
msgstr "Суверенітетний хаб"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:27
|
#: allianceauth/timerboard/models.py:27
|
||||||
msgid "TCU"
|
msgid "TCU"
|
||||||
@ -2808,7 +2812,7 @@ msgstr "Мост Ансіблекс"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:42
|
#: allianceauth/timerboard/models.py:42
|
||||||
msgid "Mercenary Den"
|
msgid "Mercenary Den"
|
||||||
msgstr ""
|
msgstr "Кубло найманців"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:43
|
#: allianceauth/timerboard/models.py:43
|
||||||
msgid "Moon Mining Cycle"
|
msgid "Moon Mining Cycle"
|
||||||
@ -2816,7 +2820,7 @@ msgstr "Цикл видобутку супутника"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:44
|
#: allianceauth/timerboard/models.py:44
|
||||||
msgid "Metenox Moon Drill"
|
msgid "Metenox Moon Drill"
|
||||||
msgstr ""
|
msgstr "Бур Метенокс"
|
||||||
|
|
||||||
#: allianceauth/timerboard/models.py:45
|
#: allianceauth/timerboard/models.py:45
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
@ -2852,7 +2856,7 @@ msgstr "Зняття з якорю"
|
|||||||
|
|
||||||
#: allianceauth/timerboard/models.py:59
|
#: allianceauth/timerboard/models.py:59
|
||||||
msgid "Abandoned"
|
msgid "Abandoned"
|
||||||
msgstr ""
|
msgstr "Покинуто"
|
||||||
|
|
||||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
|
||||||
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
#: allianceauth/timerboard/templates/timerboard/view.html:54
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
# 85b931f94c2441449e78b527e0a313ae_baf2e99 <639a60f913241ffb1c9bd90bc93a541f_869335>, 2023
|
# 85b931f94c2441449e78b527e0a313ae_baf2e99 <639a60f913241ffb1c9bd90bc93a541f_869335>, 2023
|
||||||
# Aaron BuBu <351793078@qq.com>, 2023
|
# Aaron BuBu <351793078@qq.com>, 2023
|
||||||
# Joel Falknau <ozirascal@gmail.com>, 2023
|
# Joel Falknau <ozirascal@gmail.com>, 2023
|
||||||
|
# Aika Yu, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -16,7 +17,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
"POT-Creation-Date: 2025-02-25 19:17+1000\n"
|
||||||
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
|
||||||
"Last-Translator: Joel Falknau <ozirascal@gmail.com>, 2023\n"
|
"Last-Translator: Aika Yu, 2025\n"
|
||||||
"Language-Team: Chinese Simplified (https://app.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
|
"Language-Team: Chinese Simplified (https://app.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -61,7 +62,7 @@ msgstr "英语"
|
|||||||
|
|
||||||
#: allianceauth/authentication/models.py:71
|
#: allianceauth/authentication/models.py:71
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
msgstr ""
|
msgstr "捷克语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:72
|
#: allianceauth/authentication/models.py:72
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||||
@ -101,22 +102,22 @@ msgstr "俄语"
|
|||||||
#: allianceauth/authentication/models.py:79
|
#: allianceauth/authentication/models.py:79
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr ""
|
msgstr "荷兰语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr ""
|
msgstr "波兰语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr ""
|
msgstr "乌克兰语"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:117
|
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||||
msgid "Simplified Chinese"
|
msgid "Simplified Chinese"
|
||||||
msgstr ""
|
msgstr "简体中文"
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:98
|
#: allianceauth/authentication/models.py:98
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:42
|
#: allianceauth/menu/templates/menu/menu-user.html:42
|
||||||
@ -283,7 +284,7 @@ msgstr "不能修改主角色为%(char)s:这个角色被另一个账户所拥
|
|||||||
#: allianceauth/authentication/views.py:164
|
#: allianceauth/authentication/views.py:164
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Changed main character to %s"
|
msgid "Changed main character to %s"
|
||||||
msgstr ""
|
msgstr "修改主角色为%s"
|
||||||
|
|
||||||
#: allianceauth/authentication/views.py:178
|
#: allianceauth/authentication/views.py:178
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -359,11 +360,11 @@ msgstr "最后一次更新"
|
|||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:86
|
#: allianceauth/corputils/templates/corputils/corpstats.html:86
|
||||||
msgid "Update Now"
|
msgid "Update Now"
|
||||||
msgstr ""
|
msgstr "立刻更新"
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:101
|
#: allianceauth/corputils/templates/corputils/corpstats.html:101
|
||||||
msgid "Main character"
|
msgid "Main character"
|
||||||
msgstr ""
|
msgstr "主要角色"
|
||||||
|
|
||||||
#: allianceauth/corputils/templates/corputils/corpstats.html:102
|
#: allianceauth/corputils/templates/corputils/corpstats.html:102
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:29
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:29
|
||||||
@ -536,7 +537,7 @@ msgstr "编辑一个PAP"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:21
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:21
|
||||||
msgid "Are you sure?"
|
msgid "Are you sure?"
|
||||||
msgstr ""
|
msgstr "是否确认?"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:22
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:22
|
||||||
msgid "Delete fat"
|
msgid "Delete fat"
|
||||||
@ -575,7 +576,7 @@ msgstr "EVE时间"
|
|||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:49
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:49
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:52
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:52
|
||||||
msgid "Docked in"
|
msgid "Docked in"
|
||||||
msgstr ""
|
msgstr "停靠在"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:6
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalmonthlystatisticsview.html:6
|
||||||
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalstatisticsview.html:6
|
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkpersonalstatisticsview.html:6
|
||||||
@ -711,11 +712,11 @@ msgstr "记录中找不到已创建的PAP链接"
|
|||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:218
|
#: allianceauth/fleetactivitytracking/views.py:218
|
||||||
msgid "Character does not exist"
|
msgid "Character does not exist"
|
||||||
msgstr ""
|
msgstr "角色不存在"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:221
|
#: allianceauth/fleetactivitytracking/views.py:221
|
||||||
msgid "User does not exist"
|
msgid "User does not exist"
|
||||||
msgstr ""
|
msgstr "用户不存在"
|
||||||
|
|
||||||
#: allianceauth/fleetactivitytracking/views.py:299
|
#: allianceauth/fleetactivitytracking/views.py:299
|
||||||
msgid "Fleet participation registered."
|
msgid "Fleet participation registered."
|
||||||
@ -935,7 +936,7 @@ msgstr "用户组成员"
|
|||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:13
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:13
|
||||||
msgid "Join/Leave Requests"
|
msgid "Join/Leave Requests"
|
||||||
msgstr ""
|
msgstr "加入/退出申请"
|
||||||
|
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:24
|
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:24
|
||||||
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:33
|
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:33
|
||||||
@ -1444,13 +1445,13 @@ msgstr "管理员"
|
|||||||
|
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:82
|
#: allianceauth/menu/templates/menu/menu-user.html:82
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr ""
|
msgstr "登出"
|
||||||
|
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:86
|
#: allianceauth/menu/templates/menu/menu-user.html:86
|
||||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
|
#: 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:18
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr ""
|
msgstr "登入"
|
||||||
|
|
||||||
#: allianceauth/notifications/models.py:21
|
#: allianceauth/notifications/models.py:21
|
||||||
msgid "danger"
|
msgid "danger"
|
||||||
@ -1494,7 +1495,7 @@ msgstr "标题"
|
|||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/list_partial.html:28
|
#: allianceauth/notifications/templates/notifications/list_partial.html:28
|
||||||
msgid "No notifications."
|
msgid "No notifications."
|
||||||
msgstr ""
|
msgstr "暂无通知"
|
||||||
|
|
||||||
#: allianceauth/notifications/templates/notifications/view.html:5
|
#: allianceauth/notifications/templates/notifications/view.html:5
|
||||||
#: allianceauth/notifications/templates/notifications/view.html:9
|
#: allianceauth/notifications/templates/notifications/view.html:9
|
||||||
@ -1584,7 +1585,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:7
|
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:7
|
||||||
msgid "Upcoming Fleets"
|
msgid "Upcoming Fleets"
|
||||||
msgstr ""
|
msgstr "接下来的队"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:14
|
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:14
|
||||||
msgid "Operation"
|
msgid "Operation"
|
||||||
@ -1598,7 +1599,7 @@ msgstr "集结点"
|
|||||||
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:17
|
#: allianceauth/optimer/templates/optimer/dashboard.ops.html:17
|
||||||
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:18
|
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:18
|
||||||
msgid "EVE Time"
|
msgid "EVE Time"
|
||||||
msgstr ""
|
msgstr "EVE时间"
|
||||||
|
|
||||||
#: allianceauth/optimer/templates/optimer/fleetoptable.html:14
|
#: allianceauth/optimer/templates/optimer/fleetoptable.html:14
|
||||||
#: allianceauth/timerboard/templates/timerboard/timertable.html:13
|
#: allianceauth/timerboard/templates/timerboard/timertable.html:13
|
||||||
@ -1793,17 +1794,17 @@ msgstr ""
|
|||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:26
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:26
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:22
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:22
|
||||||
msgid "Activate"
|
msgid "Activate"
|
||||||
msgstr ""
|
msgstr "激活"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:32
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:32
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:34
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:34
|
||||||
msgid "Reset Password"
|
msgid "Reset Password"
|
||||||
msgstr ""
|
msgstr "重置密码"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:38
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:38
|
||||||
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:40
|
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_service_ctrl.html:40
|
||||||
msgid "Deactivate"
|
msgid "Deactivate"
|
||||||
msgstr ""
|
msgstr "停用"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:45
|
#: allianceauth/services/modules/discord/templates/services/discord/discord_service_ctrl.html:45
|
||||||
msgid "Link Discord Server"
|
msgid "Link Discord Server"
|
||||||
@ -1820,7 +1821,7 @@ msgstr "在处理你的Discord账户时出错。"
|
|||||||
|
|
||||||
#: allianceauth/services/modules/discord/views.py:102
|
#: allianceauth/services/modules/discord/views.py:102
|
||||||
msgid "Your Discord account has been successfully activated."
|
msgid "Your Discord account has been successfully activated."
|
||||||
msgstr ""
|
msgstr "你的discord账户已成功停用"
|
||||||
|
|
||||||
#: allianceauth/services/modules/discord/views.py:108
|
#: allianceauth/services/modules/discord/views.py:108
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -2232,7 +2233,7 @@ msgstr "补损舰队创建"
|
|||||||
#: allianceauth/srp/templates/srp/request.html:11
|
#: allianceauth/srp/templates/srp/request.html:11
|
||||||
#: allianceauth/srp/templates/srp/update.html:11
|
#: allianceauth/srp/templates/srp/update.html:11
|
||||||
msgid "Ship Replacement Program"
|
msgid "Ship Replacement Program"
|
||||||
msgstr ""
|
msgstr "补损"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/add.html:20
|
#: allianceauth/srp/templates/srp/add.html:20
|
||||||
msgid "Create SRP Fleet"
|
msgid "Create SRP Fleet"
|
||||||
@ -2257,7 +2258,7 @@ msgstr "舰队补损信息"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:17
|
#: allianceauth/srp/templates/srp/data.html:17
|
||||||
msgid "View Fleets"
|
msgid "View Fleets"
|
||||||
msgstr ""
|
msgstr "查看舰队"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/data.html:26
|
#: allianceauth/srp/templates/srp/data.html:26
|
||||||
msgid "Mark Incomplete"
|
msgid "Mark Incomplete"
|
||||||
@ -2374,11 +2375,11 @@ msgstr "创建补损请求"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/request.html:22
|
#: allianceauth/srp/templates/srp/request.html:22
|
||||||
msgid "Your SRP request"
|
msgid "Your SRP request"
|
||||||
msgstr ""
|
msgstr "你的补损请求"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/request.html:35
|
#: allianceauth/srp/templates/srp/request.html:35
|
||||||
msgid "Create SRP request"
|
msgid "Create SRP request"
|
||||||
msgstr ""
|
msgstr "创建补损请求"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/update.html:7
|
#: allianceauth/srp/templates/srp/update.html:7
|
||||||
#: allianceauth/srp/templates/srp/update.html:16
|
#: allianceauth/srp/templates/srp/update.html:16
|
||||||
@ -2387,7 +2388,7 @@ msgstr "上传战报链接"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/update.html:22
|
#: allianceauth/srp/templates/srp/update.html:22
|
||||||
msgid "After Action Report"
|
msgid "After Action Report"
|
||||||
msgstr ""
|
msgstr "战报"
|
||||||
|
|
||||||
#: allianceauth/srp/templates/srp/update.html:31
|
#: allianceauth/srp/templates/srp/update.html:31
|
||||||
msgid "SRP Fleet Does Not Exist"
|
msgid "SRP Fleet Does Not Exist"
|
||||||
@ -2395,7 +2396,7 @@ msgstr "补损舰队不存在啊,老哥你在好好看看?"
|
|||||||
|
|
||||||
#: allianceauth/srp/templates/srp/update.html:40
|
#: allianceauth/srp/templates/srp/update.html:40
|
||||||
msgid "Update AAR link"
|
msgid "Update AAR link"
|
||||||
msgstr ""
|
msgstr "更新战报链接"
|
||||||
|
|
||||||
#: allianceauth/srp/views.py:85
|
#: allianceauth/srp/views.py:85
|
||||||
#, python-format
|
#, python-format
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -12,6 +13,7 @@ logger = logging.getLogger(__name__)
|
|||||||
class MenuConfig(AppConfig):
|
class MenuConfig(AppConfig):
|
||||||
name = "allianceauth.menu"
|
name = "allianceauth.menu"
|
||||||
label = "menu"
|
label = "menu"
|
||||||
|
verbose_name = _("Menu")
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
from allianceauth.menu.core import smart_sync
|
from allianceauth.menu.core import smart_sync
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from typing import ClassVar
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
@ -68,7 +69,7 @@ class MenuItem(models.Model):
|
|||||||
help_text=_("External URL this menu items will link to"),
|
help_text=_("External URL this menu items will link to"),
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = MenuItemManager()
|
objects: ClassVar[MenuItemManager] = MenuItemManager()
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return self.text
|
return self.text
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class NotificationsConfig(AppConfig):
|
class NotificationsConfig(AppConfig):
|
||||||
name = 'allianceauth.notifications'
|
name = 'allianceauth.notifications'
|
||||||
label = 'notifications'
|
label = 'notifications'
|
||||||
|
verbose_name = _('Notifications')
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
@ -56,7 +57,7 @@ class Notification(models.Model):
|
|||||||
timestamp = models.DateTimeField(auto_now_add=True, db_index=True)
|
timestamp = models.DateTimeField(auto_now_add=True, db_index=True)
|
||||||
viewed = models.BooleanField(default=False, db_index=True)
|
viewed = models.BooleanField(default=False, db_index=True)
|
||||||
|
|
||||||
objects = NotificationManager()
|
objects: ClassVar[NotificationManager] = NotificationManager()
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f"{self.user}: {self.title}"
|
return f"{self.user}: {self.title}"
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class OptimerConfig(AppConfig):
|
class OptimerConfig(AppConfig):
|
||||||
name = 'allianceauth.optimer'
|
name = 'allianceauth.optimer'
|
||||||
label = 'optimer'
|
label = 'optimer'
|
||||||
|
verbose_name = _('Fleet Operations')
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class PermissionsToolConfig(AppConfig):
|
class PermissionsToolConfig(AppConfig):
|
||||||
name = 'allianceauth.permissions_tool'
|
name = 'allianceauth.permissions_tool'
|
||||||
label = 'permissions_tool'
|
label = 'permissions_tool'
|
||||||
|
verbose_name = _('Permissions Audit')
|
||||||
|
@ -26,7 +26,7 @@ app.conf.task_default_priority = 5 # anything called with the task.delay() will
|
|||||||
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
|
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
|
||||||
|
|
||||||
app.conf.ONCE = {
|
app.conf.ONCE = {
|
||||||
'backend': 'allianceauth.services.tasks.DjangoBackend',
|
'backend': 'allianceauth.services.celery_once.backends.DjangoBackend',
|
||||||
'settings': {}
|
'settings': {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@ CELERYBEAT_SCHEDULE = {
|
|||||||
'esi_cleanup_token': {
|
'esi_cleanup_token': {
|
||||||
'task': 'esi.tasks.cleanup_token',
|
'task': 'esi.tasks.cleanup_token',
|
||||||
'schedule': crontab(minute='0', hour='0'),
|
'schedule': crontab(minute='0', hour='0'),
|
||||||
|
'apply_offset': True,
|
||||||
},
|
},
|
||||||
'run_model_update': {
|
'run_model_update': {
|
||||||
'task': 'allianceauth.eveonline.tasks.run_model_update',
|
'task': 'allianceauth.eveonline.tasks.run_model_update',
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class ServicesConfig(AppConfig):
|
class ServicesConfig(AppConfig):
|
||||||
name = 'allianceauth.services'
|
name = 'allianceauth.services'
|
||||||
label = 'services'
|
label = 'services'
|
||||||
|
verbose_name = _('Services')
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
from . import signals
|
from . import signals
|
||||||
|
0
allianceauth/services/celery_once/__init__.py
Normal file
0
allianceauth/services/celery_once/__init__.py
Normal file
19
allianceauth/services/celery_once/backends.py
Normal file
19
allianceauth/services/celery_once/backends.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from celery_once import AlreadyQueued
|
||||||
|
from django.core.cache import cache
|
||||||
|
|
||||||
|
|
||||||
|
class DjangoBackend:
|
||||||
|
"""Locking backend for celery once."""
|
||||||
|
|
||||||
|
def __init__(self, settings):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def raise_or_lock(key, timeout):
|
||||||
|
acquired = cache.add(key=key, value="lock", timeout=timeout)
|
||||||
|
if not acquired:
|
||||||
|
raise AlreadyQueued(int(cache.ttl(key)))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def clear_lock(key):
|
||||||
|
return cache.delete(key)
|
8
allianceauth/services/celery_once/tasks.py
Normal file
8
allianceauth/services/celery_once/tasks.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from celery_once import QueueOnce as BaseTask
|
||||||
|
|
||||||
|
|
||||||
|
class QueueOnce(BaseTask):
|
||||||
|
"""QueueOnce class with custom defaults."""
|
||||||
|
|
||||||
|
once = BaseTask.once
|
||||||
|
once["graceful"] = True
|
47
allianceauth/services/celery_once/tests.py
Normal file
47
allianceauth/services/celery_once/tests.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
from celery_once import AlreadyQueued
|
||||||
|
from django.core.cache import cache
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from allianceauth.services.celery_once.backends import DjangoBackend
|
||||||
|
|
||||||
|
|
||||||
|
class TestDjangoBackend(TestCase):
|
||||||
|
TEST_KEY = "my-django-backend-test-key"
|
||||||
|
TIMEOUT = 1800
|
||||||
|
|
||||||
|
def setUp(self) -> None:
|
||||||
|
cache.delete(self.TEST_KEY)
|
||||||
|
self.backend = DjangoBackend(dict())
|
||||||
|
|
||||||
|
def test_can_get_lock(self):
|
||||||
|
"""
|
||||||
|
when lock can be acquired
|
||||||
|
then set it with timeout
|
||||||
|
"""
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
self.assertIsNotNone(cache.get(self.TEST_KEY))
|
||||||
|
self.assertAlmostEqual(cache.ttl(self.TEST_KEY), self.TIMEOUT, delta=2)
|
||||||
|
|
||||||
|
def test_when_cant_get_lock_raise_exception(self):
|
||||||
|
"""
|
||||||
|
when lock can bot be acquired
|
||||||
|
then raise AlreadyQueued exception with countdown
|
||||||
|
"""
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
except Exception as ex:
|
||||||
|
self.assertIsInstance(ex, AlreadyQueued)
|
||||||
|
self.assertAlmostEqual(ex.countdown, self.TIMEOUT, delta=2)
|
||||||
|
|
||||||
|
def test_can_clear_lock(self):
|
||||||
|
"""
|
||||||
|
when a lock exists
|
||||||
|
then can get a new lock after clearing it
|
||||||
|
"""
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
|
||||||
|
self.backend.clear_lock(self.TEST_KEY)
|
||||||
|
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
||||||
|
self.assertIsNotNone(cache.get(self.TEST_KEY))
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class DiscordServiceConfig(AppConfig):
|
class DiscordServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.discord'
|
name = 'allianceauth.services.modules.discord'
|
||||||
label = 'discord'
|
label = 'discord'
|
||||||
|
verbose_name = _('Discord Service')
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
from typing import Optional
|
from typing import ClassVar, Optional
|
||||||
|
|
||||||
from requests.exceptions import HTTPError
|
from requests.exceptions import HTTPError
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ class DiscordUser(models.Model):
|
|||||||
help_text='Date & time this service account was activated'
|
help_text='Date & time this service account was activated'
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = DiscordUserManager()
|
objects: ClassVar[DiscordUserManager] = DiscordUserManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class DiscourseServiceConfig(AppConfig):
|
class DiscourseServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.discourse'
|
name = 'allianceauth.services.modules.discourse'
|
||||||
label = 'discourse'
|
label = 'discourse'
|
||||||
|
verbose_name = _('Discourse Service')
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class ExampleServiceConfig(AppConfig):
|
class ExampleServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.example'
|
name = 'allianceauth.services.modules.example'
|
||||||
label = 'example_service'
|
label = 'example_service'
|
||||||
|
verbose_name = _('Example Service')
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class Ips4ServiceConfig(AppConfig):
|
class Ips4ServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.ips4'
|
name = 'allianceauth.services.modules.ips4'
|
||||||
label = 'ips4'
|
label = 'ips4'
|
||||||
|
verbose_name = _('IPS4 Service')
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class MumbleServiceConfig(AppConfig):
|
class MumbleServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.mumble'
|
name = 'allianceauth.services.modules.mumble'
|
||||||
label = 'mumble'
|
label = 'mumble'
|
||||||
|
verbose_name = _('Mumble Service')
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
|
from typing import ClassVar
|
||||||
from passlib.hash import bcrypt_sha256
|
from passlib.hash import bcrypt_sha256
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
@ -116,7 +117,7 @@ class MumbleUser(AbstractServiceModel):
|
|||||||
help_text="Timestamp of the users Last Disconnection to Mumble"
|
help_text="Timestamp of the users Last Disconnection to Mumble"
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = MumbleManager()
|
objects: ClassVar[MumbleManager] = MumbleManager()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.username
|
return self.username
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class OpenfireServiceConfig(AppConfig):
|
class OpenfireServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.openfire'
|
name = 'allianceauth.services.modules.openfire'
|
||||||
label = 'openfire'
|
label = 'openfire'
|
||||||
|
verbose_name = _('Openfire Service')
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class Phpbb3ServiceConfig(AppConfig):
|
class Phpbb3ServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.phpbb3'
|
name = 'allianceauth.services.modules.phpbb3'
|
||||||
label = 'phpbb3'
|
label = 'phpbb3'
|
||||||
|
verbose_name = _('phpBB3 Service')
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class SmfServiceConfig(AppConfig):
|
class SmfServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.smf'
|
name = 'allianceauth.services.modules.smf'
|
||||||
label = 'smf'
|
label = 'smf'
|
||||||
|
verbose_name = _('SMF Service')
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class Teamspeak3ServiceConfig(AppConfig):
|
class Teamspeak3ServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.teamspeak3'
|
name = 'allianceauth.services.modules.teamspeak3'
|
||||||
label = 'teamspeak3'
|
label = 'teamspeak3'
|
||||||
|
verbose_name = _('TeamSpeak 3 Service')
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
from . import signals
|
from . import signals
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class XenforoServiceConfig(AppConfig):
|
class XenforoServiceConfig(AppConfig):
|
||||||
name = 'allianceauth.services.modules.xenforo'
|
name = 'allianceauth.services.modules.xenforo'
|
||||||
label = 'xenforo'
|
label = 'xenforo'
|
||||||
|
verbose_name = _('Xenforo Service')
|
||||||
|
@ -3,33 +3,11 @@ import logging
|
|||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from .hooks import ServicesHook
|
from .hooks import ServicesHook
|
||||||
from celery_once import QueueOnce as BaseTask, AlreadyQueued
|
from .celery_once.tasks import QueueOnce # noqa: F401 - for backwards compatibility
|
||||||
from django.core.cache import cache
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class QueueOnce(BaseTask):
|
|
||||||
once = BaseTask.once
|
|
||||||
once['graceful'] = True
|
|
||||||
|
|
||||||
|
|
||||||
class DjangoBackend:
|
|
||||||
def __init__(self, settings):
|
|
||||||
pass
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def raise_or_lock(key, timeout):
|
|
||||||
acquired = cache.add(key=key, value="lock", timeout=timeout)
|
|
||||||
if not acquired:
|
|
||||||
raise AlreadyQueued(int(cache.ttl(key)))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def clear_lock(key):
|
|
||||||
return cache.delete(key)
|
|
||||||
|
|
||||||
|
|
||||||
@shared_task(bind=True)
|
@shared_task(bind=True)
|
||||||
def validate_services(self, pk):
|
def validate_services(self, pk):
|
||||||
user = User.objects.get(pk=pk)
|
user = User.objects.get(pk=pk)
|
||||||
@ -38,7 +16,7 @@ def validate_services(self, pk):
|
|||||||
for svc in ServicesHook.get_services():
|
for svc in ServicesHook.get_services():
|
||||||
try:
|
try:
|
||||||
svc.validate_user(user)
|
svc.validate_user(user)
|
||||||
except:
|
except Exception:
|
||||||
logger.exception(f'Exception running validate_user for services module {svc} on user {user}')
|
logger.exception(f'Exception running validate_user for services module {svc} on user {user}')
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
<div class="card text-center m-2" style="min-width: 18rem; min-height: 18rem;">
|
<div class="card text-center mx-2 mb-3" style="min-width: 18rem; min-height: 18rem;">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">{% block title %}{% endblock title %}</h5>
|
<h5 class="card-title">{% block title %}{% endblock title %}</h5>
|
||||||
|
|
||||||
|
@ -1,15 +1,10 @@
|
|||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
from celery_once import AlreadyQueued
|
|
||||||
|
|
||||||
from django.core.cache import cache
|
|
||||||
from django.test import override_settings, TestCase
|
from django.test import override_settings, TestCase
|
||||||
|
|
||||||
from allianceauth.tests.auth_utils import AuthUtils
|
from allianceauth.tests.auth_utils import AuthUtils
|
||||||
from allianceauth.services.tasks import validate_services, update_groups_for_user
|
from allianceauth.services.tasks import validate_services, update_groups_for_user
|
||||||
|
|
||||||
from ..tasks import DjangoBackend
|
|
||||||
|
|
||||||
|
|
||||||
@override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True)
|
@override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True)
|
||||||
class ServicesTasksTestCase(TestCase):
|
class ServicesTasksTestCase(TestCase):
|
||||||
@ -46,46 +41,3 @@ class ServicesTasksTestCase(TestCase):
|
|||||||
self.assertTrue(svc.update_groups.called)
|
self.assertTrue(svc.update_groups.called)
|
||||||
args, _ = svc.update_groups.call_args
|
args, _ = svc.update_groups.call_args
|
||||||
self.assertEqual(self.member, args[0]) # Assert correct user
|
self.assertEqual(self.member, args[0]) # Assert correct user
|
||||||
|
|
||||||
|
|
||||||
class TestDjangoBackend(TestCase):
|
|
||||||
|
|
||||||
TEST_KEY = "my-django-backend-test-key"
|
|
||||||
TIMEOUT = 1800
|
|
||||||
|
|
||||||
def setUp(self) -> None:
|
|
||||||
cache.delete(self.TEST_KEY)
|
|
||||||
self.backend = DjangoBackend(dict())
|
|
||||||
|
|
||||||
def test_can_get_lock(self):
|
|
||||||
"""
|
|
||||||
when lock can be acquired
|
|
||||||
then set it with timetout
|
|
||||||
"""
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
self.assertIsNotNone(cache.get(self.TEST_KEY))
|
|
||||||
self.assertAlmostEqual(cache.ttl(self.TEST_KEY), self.TIMEOUT, delta=2)
|
|
||||||
|
|
||||||
def test_when_cant_get_lock_raise_exception(self):
|
|
||||||
"""
|
|
||||||
when lock can bot be acquired
|
|
||||||
then raise AlreadyQueued exception with countdown
|
|
||||||
"""
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
except Exception as ex:
|
|
||||||
self.assertIsInstance(ex, AlreadyQueued)
|
|
||||||
self.assertAlmostEqual(ex.countdown, self.TIMEOUT, delta=2)
|
|
||||||
|
|
||||||
def test_can_clear_lock(self):
|
|
||||||
"""
|
|
||||||
when a lock exists
|
|
||||||
then can get a new lock after clearing it
|
|
||||||
"""
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
|
|
||||||
self.backend.clear_lock(self.TEST_KEY)
|
|
||||||
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
|
|
||||||
self.assertIsNotNone(cache.get(self.TEST_KEY))
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class SRPConfig(AppConfig):
|
class SRPConfig(AppConfig):
|
||||||
name = 'allianceauth.srp'
|
name = 'allianceauth.srp'
|
||||||
label = 'srp'
|
label = 'srp'
|
||||||
|
verbose_name = _('Ship Replacement')
|
||||||
|
@ -12,11 +12,7 @@
|
|||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
{% for notif in notifications %}
|
{% for notif in notifications %}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
{% if notif.state == 'opened' %}
|
|
||||||
<span class="badge bg-success me-2">{% translate "Open" %}</span>
|
<span class="badge bg-success me-2">{% translate "Open" %}</span>
|
||||||
{% else %}
|
|
||||||
<span class="badge bg-danger me-2">{% translate "Closed" %}</span>
|
|
||||||
{% endif %}
|
|
||||||
<a href="{{ notif.web_url }}" target="_blank">#{{ notif.iid }} {{ notif.title }}</a>
|
<a href="{{ notif.web_url }}" target="_blank">#{{ notif.iid }} {{ notif.title }}</a>
|
||||||
</li>
|
</li>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
|
@ -24,14 +24,12 @@
|
|||||||
{% include 'bundles/auth-framework-css.html' %}
|
{% include 'bundles/auth-framework-css.html' %}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.navbar-toggler.collapsed{
|
@media all {
|
||||||
transform: rotate(180deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-padding {
|
.nav-padding {
|
||||||
margin-top: {% header_padding_size %} !important;
|
margin-top: {% header_padding_size %} !important;
|
||||||
max-height: calc(100vh - {% header_padding_size %}) !important;
|
max-height: calc(100vh - {% header_padding_size %}) !important;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
{% block extra_css %}{% endblock extra_css %}
|
{% block extra_css %}{% endblock extra_css %}
|
||||||
@ -63,6 +61,11 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<ul id="nav-right-character-control" class="nav navbar-nav">
|
<ul id="nav-right-character-control" class="nav navbar-nav">
|
||||||
|
<li class="nav-item ms-lg-2 py-2 py-lg-1 col-12 col-lg-auto d-none">
|
||||||
|
<div class="vr d-none d-lg-flex h-100 mx-2 text-white-50"></div>
|
||||||
|
<hr class="d-lg-none my-2 text-body text-white-50">
|
||||||
|
</li>
|
||||||
|
|
||||||
{% block header_nav_user_character_control %} <!-- Default to add char and swap main -->
|
{% block header_nav_user_character_control %} <!-- Default to add char and swap main -->
|
||||||
{% include 'allianceauth/top-menu-rh-default.html' %}
|
{% include 'allianceauth/top-menu-rh-default.html' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -67,6 +67,26 @@ def get_datatables_language_static(language: str) -> str:
|
|||||||
|
|
||||||
return static_url
|
return static_url
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def get_relative_datatables_language_path(language: str) -> str:
|
||||||
|
"""
|
||||||
|
Get the correct language code URL for DataTables (relative path to the static folder)
|
||||||
|
|
||||||
|
:param language: Django's language code
|
||||||
|
:type language: str
|
||||||
|
:return: Mapped language code
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
mapped_language = get_datatable_language_code(language)
|
||||||
|
static_url = (
|
||||||
|
f"allianceauth/libs/DataTables/Plugins/2.2.1/i18n/{mapped_language}.json"
|
||||||
|
if mapped_language
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
|
||||||
|
return static_url
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag
|
@register.simple_tag
|
||||||
def get_momentjs_language_static(language: str) -> str:
|
def get_momentjs_language_static(language: str) -> str:
|
||||||
@ -88,3 +108,24 @@ def get_momentjs_language_static(language: str) -> str:
|
|||||||
)
|
)
|
||||||
|
|
||||||
return static_url
|
return static_url
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def get_relative_momentjs_language_path(language: str) -> str:
|
||||||
|
"""
|
||||||
|
Get the correct language code URL for Moment.JS (relative path to the static folder)
|
||||||
|
|
||||||
|
:param language: Django's language code
|
||||||
|
:type language: str
|
||||||
|
:return: Mapped language code path
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
mapped_language = get_momentjs_language_code(language)
|
||||||
|
|
||||||
|
static_url = (
|
||||||
|
f"allianceauth/libs/moment.js/2.29.4/locale/{mapped_language}.js"
|
||||||
|
if mapped_language
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
|
||||||
|
return static_url
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class TimerBoardConfig(AppConfig):
|
class TimerBoardConfig(AppConfig):
|
||||||
name = 'allianceauth.timerboard'
|
name = 'allianceauth.timerboard'
|
||||||
label = 'timerboard'
|
label = 'timerboard'
|
||||||
|
verbose_name = _('Structure Timers')
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.2.16 on 2025-03-26 20:53
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('timerboard', '0007_alter_timer_structure'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='timer',
|
||||||
|
name='timer_type',
|
||||||
|
field=models.CharField(choices=[('UNSPECIFIED', 'Not Specified'), ('SHIELD', 'Shield'), ('ARMOR', 'Armor'), ('HULL', 'Hull'), ('FINAL', 'Final'), ('ANCHORING', 'Anchoring'), ('UNANCHORING', 'Unanchoring'), ('ABANDONED', 'Abandoned'), ('THEFT', 'Theft')], default='UNSPECIFIED', max_length=254),
|
||||||
|
),
|
||||||
|
]
|
@ -57,6 +57,7 @@ class Timer(models.Model):
|
|||||||
ANCHORING = "ANCHORING", _("Anchoring")
|
ANCHORING = "ANCHORING", _("Anchoring")
|
||||||
UNANCHORING = "UNANCHORING", _("Unanchoring")
|
UNANCHORING = "UNANCHORING", _("Unanchoring")
|
||||||
ABANDONED = "ABANDONED", _("Abandoned")
|
ABANDONED = "ABANDONED", _("Abandoned")
|
||||||
|
THEFT = "THEFT", _("Theft")
|
||||||
|
|
||||||
details = models.CharField(max_length=254, default="")
|
details = models.CharField(max_length=254, default="")
|
||||||
system = models.CharField(max_length=254, default="")
|
system = models.CharField(max_length=254, default="")
|
||||||
|
@ -26,7 +26,7 @@ app.conf.task_default_priority = 5 # anything called with the task.delay() will
|
|||||||
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
|
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
|
||||||
|
|
||||||
app.conf.ONCE = {
|
app.conf.ONCE = {
|
||||||
'backend': 'allianceauth.services.tasks.DjangoBackend',
|
'backend': 'allianceauth.services.celery_once.backends.DjangoBackend',
|
||||||
'settings': {}
|
'settings': {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user