Compare commits

...

108 Commits

Author SHA1 Message Date
Sava Georgiev
64a6e1f79c Merge branch 'docker-redis-config' into 'master'
Default redis configuration for docker setup

See merge request allianceauth/allianceauth!1787
2026-01-21 18:57:06 +00:00
Ariel Rin
1e0b64d1e0 Merge branch 'translations_7f31a07ccd4e4a66b1dd7b6bc2dbddb5' into 'master'
Updates for project Alliance Auth

See merge request allianceauth/allianceauth!1779
2026-01-21 05:40:40 +00:00
Ariel Rin
17b0b802b3 Updates for project Alliance Auth 2026-01-21 05:40:39 +00:00
Joel Falknau
1ef7a35d67 update source en 2026-01-21 15:34:15 +10:00
Joel Falknau
654ebb031f update pre-commit 2026-01-21 15:33:59 +10:00
Ariel Rin
77ce2311c9 Merge branch 'fix-pagination' into 'master'
[FIX] Count filtered records before applying the limit

See merge request allianceauth/allianceauth!1790
2026-01-21 05:23:06 +00:00
Peter Pfeufer
843c3ccf9a [FIX] Count filtered records before applying the limit 2026-01-20 23:19:35 +01:00
Ariel Rin
c19f7e6e79 Merge branch 'update-serverside-datatables-docs' into 'master'
[CHANGE] Update serverside datatables docs

See merge request allianceauth/allianceauth!1789
2026-01-20 08:22:25 +00:00
Peter Pfeufer
df6a25067d [CHANGE] Update serverside datatables docs 2026-01-20 08:22:25 +00:00
Ariel Rin
ee132b6e60 Merge branch 'group-manager' into 'master'
[Feature] Group Management - Async Join/Leave and Datatables

See merge request allianceauth/allianceauth!1784
2026-01-20 05:04:15 +00:00
Ariel Rin
78988fee04 Merge branch 'update-datatable-translations' into 'master'
[CHANGE] Update DataTable Translations

See merge request allianceauth/allianceauth!1788
2026-01-20 05:03:45 +00:00
Ariel Rin
ed3cd08d40 Merge branch 'datatables-framework' into 'master'
[Feature] Basic framework for datatables server rendering

See merge request allianceauth/allianceauth!1785
2026-01-20 04:38:22 +00:00
Aaron Kable
543e4169e4 [Feature] Basic framework for datatables server rendering 2026-01-20 04:38:22 +00:00
Ariel Rin
d696777ba5 Merge branch 'datatables2' into 'master'
Add Data Tables 2 and Column Control Plugin bundles

See merge request allianceauth/allianceauth!1786
2026-01-20 04:37:33 +00:00
Aaron Kable
5caa9c8012 Add Data Tables 2 and Column Control Plugin bundles 2026-01-20 04:37:33 +00:00
Peter Pfeufer
5cff1df48d [CHANGE] Update DataTable Translations 2026-01-16 14:12:11 +01:00
Sava Georgiev
9a25a53d18 Default redis configuration for docker setup 2026-01-11 23:04:52 +01:00
Aaron Kable
2a3d775a9b add icon remoaval 2026-01-09 12:23:04 +08:00
Aaron Kable
648733d537 reset counters 2026-01-09 11:47:44 +08:00
Aaron Kable
70caf7606c Add the id's for counters 2026-01-09 11:33:16 +08:00
Ariel Rin
99c65d2a5d Merge branch 'helpful-comments' into 'master'
[ADD] Some helpful comments

See merge request allianceauth/allianceauth!1780
2026-01-02 02:43:08 +00:00
Ariel Rin
55125a8ff3 Merge branch 'missing-logo' into 'master'
[ADD] Missing logo to list of available SVG logos

See merge request allianceauth/allianceauth!1781
2026-01-02 02:35:23 +00:00
Ariel Rin
2fd0fcdbcb Merge branch 'notifications_fix' into 'master'
[Fix] wrong delete read url

See merge request allianceauth/allianceauth!1783
2026-01-02 02:35:11 +00:00
Swashman
2fe7bcf20e [Fix] wrong delete read url 2026-01-02 02:35:11 +00:00
Aaron Kable
0c0f2fd5ba minor fixes 2025-12-21 15:30:26 +08:00
Aaron Kable
b32f4ab243 Async Join/Leave, and Datatables 2025-12-21 15:21:27 +08:00
Ariel Rin
70f314e578 Merge branch 'development-team' into 'master'
[CHANGE] Update development team

See merge request allianceauth/allianceauth!1782
2025-12-10 08:57:02 +00:00
Peter Pfeufer
bc1b1c3a8f [CHANGE] Update development team 2025-12-10 09:40:47 +01:00
Peter Pfeufer
453512db64 [ADD] Missing logo to list of available SVG logos 2025-11-23 14:02:30 +01:00
Peter Pfeufer
4047159fd1 [ADD] Some helpful comments
Since this is one of the most occurring issues when editing `local.py`
2025-11-22 22:29:24 +01:00
Joel Falknau
f5ddbb8004 version Bump 4.11.2 2025-11-13 11:48:01 +10:00
Joel Falknau
c45d5d7325 Allow the older ua generator to still pass on old python 2025-11-13 11:35:17 +10:00
Joel Falknau
c679ec0646 Version Bump 4.11.1 2025-11-13 10:24:14 +10:00
Joel Falknau
69a51bb08a update pre-commit 2025-11-13 10:17:23 +10:00
Ariel Rin
442c893c39 Merge branch 'master' into 'master'
Edit manager.py

See merge request allianceauth/allianceauth!1778
2025-11-03 10:33:00 +00:00
salartarium
33df15f882 Edit manager.py 2025-11-02 05:52:03 +00:00
Ariel Rin
5d56f0a66c Merge branch 'limit-max-python-version' into 'master'
[CHANGE] Limit max. Python version to what we test for

See merge request allianceauth/allianceauth!1773
2025-10-29 10:41:46 +00:00
Ariel Rin
0fbdbf3a8d Merge branch 'sidebar-total-notification-counter' into 'master'
Sidebar total notification counter

See merge request allianceauth/allianceauth!1774
2025-10-29 10:31:51 +00:00
Ariel Rin
5291bf6896 Merge branch 'translation-fixes' into 'master'
[FIX] Django `makemessages` is ignoring f-strings for translations now

See merge request allianceauth/allianceauth!1772
2025-10-29 00:23:39 +00:00
Ariel Rin
bd6c0fede5 Merge branch 'fix-directories' into 'master'
[HOTFIX] Directories

See merge request allianceauth/allianceauth!1775
2025-10-29 00:23:04 +00:00
Peter Pfeufer
23fe1703c3 [FIX] Directories 2025-10-28 22:33:33 +01:00
Peter Pfeufer
9139b0da56 [CHANGE] JS filename to better reflect what it is for 2025-10-28 09:41:33 +01:00
Peter Pfeufer
80145b313f [ADD] Total notification counter to sidebar 2025-10-28 09:38:20 +01:00
Peter Pfeufer
e96bdd12f9 [CHANGE] Limit max. Python version to what we test for 2025-10-27 11:23:03 +01:00
Joel Falknau
513b7b88f4 another trixie runner, not available to python 3.8 2025-10-27 20:08:15 +10:00
Joel Falknau
5e3fc5c1cb i dont understand this behaviour but okay fine 2025-10-27 19:51:29 +10:00
Ariel Rin
d3069db046 Merge branch 'srp_allow-missing-trailling-slash' into 'master'
SRP - Allow zkillboard links without a trailling slash to be pasted without errors

See merge request allianceauth/allianceauth!1771
2025-10-26 06:26:48 +00:00
Ariel Rin
24863eaf9e Merge branch 'srp_diplay-errors' into 'master'
SRP - Display form errors

See merge request allianceauth/allianceauth!1770
2025-10-26 06:25:27 +00:00
Joel Falknau
d138bd61c5 py38 not available on debian trixie 2025-10-26 12:45:49 +10:00
Joel Falknau
bff20ddd5d remove deprecated future 2025-10-26 11:25:06 +10:00
Joel Falknau
493e694410 update precommit 2025-10-26 11:24:57 +10:00
Peter Pfeufer
8c41d9da58 [FIX] Django makemessages is ignoring f-strings for translations now 2025-10-25 11:14:41 +02:00
Joel Falknau
9e0358a3ce bump test images to trixie 2025-10-25 18:39:24 +10:00
T'rahk Rokym
19bb6856a2 Allow zkillboard links without a trailling slash to be pasted without errors 2025-10-18 00:02:29 +02:00
T'rahk Rokym
9751315b97 Cleaner error display applied to any bootstrap_form in allianceauth
Credit to @ppfeufer for the code snipet
2025-10-17 23:15:42 +02:00
Joel Falknau
99df847e1f Version Bump 4.11.0 (again) 2025-10-17 16:00:45 +10:00
Joel Falknau
60ba82c653 Merge branch 'master' of gitlab.com:allianceauth/allianceauth 2025-10-17 14:38:34 +10:00
Joel Falknau
bd7f13358a Version Bump 4.11.0 2025-10-17 14:37:45 +10:00
Joel Falknau
4edd0fab9e update precommit 2025-10-17 14:34:56 +10:00
Ariel Rin
fced909b4d Merge branch 'translations_7f31a07ccd4e4a66b1dd7b6bc2dbddb5' into 'master'
Updates for project Alliance Auth

See merge request allianceauth/allianceauth!1764
2025-10-17 04:28:59 +00:00
Ariel Rin
e2b96da460 Updates for project Alliance Auth 2025-10-17 04:28:59 +00:00
Ariel Rin
ecd27b823e Merge branch 'supervisor-env-variables' into 'master'
[ADD] Environment variables to supervisor config

See merge request allianceauth/allianceauth!1739
2025-10-17 04:20:22 +00:00
Ariel Rin
dae4afddb1 Merge branch 'hide-menu' into 'master'
[ADD] User setting to keep the sidebar menu minimized

See merge request allianceauth/allianceauth!1769
2025-10-17 04:20:10 +00:00
Peter Pfeufer
d507663316 [CHANGE] Hide setting on mobile devices to avoid confusion 2025-10-15 10:54:44 +02:00
Peter Pfeufer
67081ab465 [ADD] Device detection and always minimize the sidebar on mobile 2025-10-15 10:40:44 +02:00
Peter Pfeufer
bce90344f8 [CHANGE] Always minimize when not authenticated
We have no user settings here, so keep it minimized on public pages.
2025-10-15 09:45:15 +02:00
Peter Pfeufer
29c6fa292a [REMOVE] JS local storage usage
To make it an actual choice through the setting
2025-10-15 09:42:07 +02:00
Peter Pfeufer
295361a541 [ADD] User setting to keep the sidebar menu minimized 2025-10-15 01:13:42 +02:00
Ariel Rin
92a1bd40a3 Merge branch 'inline-js-overhaul' into 'master'
[CHANGE] InlineJS overhaul

See merge request allianceauth/allianceauth!1766
2025-10-10 09:54:36 +00:00
Ariel Rin
b8bbd0d1c1 Merge branch 'fix-deprecated-utcnow' into 'master'
[FIX] Calls to deprecated `utcnow` method of `datetime.datetime`

See merge request allianceauth/allianceauth!1767
2025-10-10 09:52:45 +00:00
Peter Pfeufer
b7a6c9379a Merge remote-tracking branch 'origin/fix-deprecated-utcnow' into fix-deprecated-utcnow 2025-09-27 07:51:53 +02:00
Peter Pfeufer
e5f3a67919 [FIX] Calls to deprecated utcnow method of datetime.datetime
datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).

```python
@classmethod
@deprecated("Use timezone-aware objects to represent datetimes in UTC; e.g. by calling .now(datetime.UTC)")
def utcnow(cls) -> Self
```
2025-09-27 07:51:46 +02:00
Ariel Rin
58cc4b84dd Merge branch 'codeowners' into 'master'
[ADD] CODEOWNERS file

See merge request allianceauth/allianceauth!1765
2025-09-26 23:37:55 +00:00
Ariel Rin
331dc7d4d0 Merge branch 'limit-bcrypt-version' into 'master'
[CHANGE] Temporarily limit `bcyrpt` to below v5.0.0

See merge request allianceauth/allianceauth!1768
2025-09-26 23:32:56 +00:00
Peter Pfeufer
01991b78c9 [CHANGE] Temporarily limit bcyrpt to below v5.0.0
See: https://gitlab.com/allianceauth/allianceauth/-/issues/1436
2025-09-26 17:47:50 +02:00
Peter Pfeufer
466113e6cb [FIX] Calls to deprecated utcnow method of datetime.datetime
datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).

```python
@classmethod
@deprecated("Use timezone-aware objects to represent datetimes in UTC; e.g. by calling .now(datetime.UTC)")
def utcnow(cls) -> Self
```
2025-09-26 17:20:40 +02:00
Peter Pfeufer
b1f5aad9f9 [CHANGE] Move inline JS into $(document).ready(()) block 2025-09-25 09:38:20 +02:00
Peter Pfeufer
464016ac05 [CHANGE] Move task queue update JS into its own file 2025-09-25 09:14:03 +02:00
Peter Pfeufer
cc76f09a6e [CHANGE Move sidebar collapse JS into its own file 2025-09-25 08:11:17 +02:00
Peter Pfeufer
a7f6a74211 [ADD] CODEOWNERS file
See: https://docs.gitlab.com/user/project/codeowners/
2025-09-24 08:53:28 +02:00
Joel Falknau
8898c665cf Version Bump 4.10.0 2025-09-21 13:58:11 +10:00
Ariel Rin
313305ab22 Merge branch 'translations_7f31a07ccd4e4a66b1dd7b6bc2dbddb5' into 'master'
Updates for project Alliance Auth

See merge request allianceauth/allianceauth!1757
2025-09-21 03:43:37 +00:00
Ariel Rin
86559fc11f Merge branch 'refresh-task-queue' into 'master'
[CHANGE] Frequently update task queue section on dashboard

See merge request allianceauth/allianceauth!1752
2025-09-21 02:45:39 +00:00
Ariel Rin
1835b04dc8 Merge branch 'mumble-logo-svg' into 'master'
[ADD] Mumble logo to SVG sprite

See merge request allianceauth/allianceauth!1755
2025-09-21 02:45:03 +00:00
Ariel Rin
30180f9fe9 Merge branch 'number-formatt-to-js-framework' into 'master'
[ADD] Number formatter to JS framework

See merge request allianceauth/allianceauth!1756
2025-09-21 02:44:45 +00:00
Ariel Rin
f1eac7b84f Merge branch 'framework-css-position' into 'master'
[CHANGE] Load Framework CSS before theme CSS

See merge request allianceauth/allianceauth!1758
2025-09-21 02:43:56 +00:00
Ariel Rin
793df66f7a Merge branch 'doc-update' into 'master'
Change the installation instructions to match the correct packages

See merge request allianceauth/allianceauth!1759
2025-09-21 02:43:43 +00:00
Ariel Rin
188295daac Merge branch 'optimer-html-fix' into 'master'
[FIX] Optimer table HTML

See merge request allianceauth/allianceauth!1760
2025-09-21 02:43:26 +00:00
Ariel Rin
0447697106 Merge branch 'make-request-available' into 'master'
[CHANGE] Make the `request` object available in theme js/css templates

See merge request allianceauth/allianceauth!1761
2025-09-21 02:43:19 +00:00
Ariel Rin
1608950d43 Merge branch 'user-agent' into 'master'
[CHANGE] User-Agent to our proposed default format

See merge request allianceauth/allianceauth!1762
2025-09-21 02:41:49 +00:00
Ariel Rin
23c283c0bb Merge branch 'mobile-menu-template' into 'master'
[ADD] Mobile menu templates to framework

See merge request allianceauth/allianceauth!1763
2025-09-21 02:41:20 +00:00
Peter Pfeufer
b76fa4282a [ADD] Mobile menu templates to framework 2025-09-11 12:52:48 +02:00
Peter Pfeufer
d88cb57cf0 [CHANGE] User-Agent to our proposed default format 2025-09-09 11:06:37 +02:00
Peter Pfeufer
787140dd7e [CHANGE] Make the request object available in theme js/css templates 2025-09-07 09:39:22 +02:00
Peter Pfeufer
735e890de4 [FIX] Don't let Bootstrap override our override 2025-09-06 16:16:20 +02:00
Peter Pfeufer
77caa5543d [FIX] Optimer table HTML 2025-09-06 15:47:59 +02:00
r0kym
b2f0962527 Change the installation instructions to match the correct packages 2025-09-01 23:10:28 +02:00
Peter Pfeufer
efc0fcf11d [CHANGE] Load Framework CSS before theme CSS
So it's available when the theme CSS starts loading.
2025-08-31 18:04:56 +02:00
Ariel Rin
1b49ea571e Translate django.po in ru
82% of minimum 50% translated source file: 'django.po'
on 'ru'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format
2025-08-29 13:48:48 +00:00
Peter Pfeufer
3c21a3857a [ADD] Number formatter 2025-08-27 20:22:24 +02:00
Peter Pfeufer
d0a769f524 [ADD] Mumble logo to SVG sprite
Could be used in at least 2 community apps.
- Mumble Temp Links (https://github.com/Solar-Helix-Independent-Transport/allianceauth-mumble-temp)
- AA Mumble Quick Connect (https://github.com/ppfeufer/aa-mumble-quick-connect)
2025-08-18 16:23:15 +02:00
Ariel Rin
222547187e Merge branch 'master' into 'master'
Added member id on error to make error message more useful

See merge request allianceauth/allianceauth!1754
2025-08-18 06:00:33 +00:00
Rapid Fire
ce872d67bb Added Peter Pfeufer's rewording.
https://gitlab.com/allianceauth/allianceauth/-/merge_requests/1754#note_2691552686
2025-08-18 05:34:29 +00:00
Rapid Fire
fcffb3d2ff Added member id on error to make error message more useful 2025-08-18 01:41:15 +00:00
Ariel Rin
1930dfab77 Merge branch 'patch-1' into 'master'
fix 404

See merge request allianceauth/allianceauth!1753
2025-08-15 06:36:30 +00:00
salartarium
b4418c8c36 fix 404 2025-08-15 06:36:29 +00:00
Peter Pfeufer
295e5a04d8 [CHANGE] Frequently update task queue section on dashboard 2025-08-15 02:16:08 +02:00
Peter Pfeufer
d67ab108a0 [ADD] Environment variables to supervisor config 2025-08-10 12:59:56 +02:00
116 changed files with 8358 additions and 4636 deletions

View File

@@ -25,7 +25,7 @@ before_script:
pre-commit-check:
<<: *only-default
stage: pre-commit
image: python:3.11-bookworm
image: python:3.11-trixie
# variables:
# PRE_COMMIT_HOME: ${CI_PROJECT_DIR}/.cache/pre-commit
# cache:
@@ -65,7 +65,7 @@ test-3.8-core:
test-3.9-core:
<<: *only-default
image: python:3.9-bookworm
image: python:3.9-trixie
script:
- tox -e py39-core
artifacts:
@@ -77,7 +77,7 @@ test-3.9-core:
test-3.10-core:
<<: *only-default
image: python:3.10-bookworm
image: python:3.10-trixie
script:
- tox -e py310-core
artifacts:
@@ -89,7 +89,7 @@ test-3.10-core:
test-3.11-core:
<<: *only-default
image: python:3.11-bookworm
image: python:3.11-trixie
script:
- tox -e py311-core
artifacts:
@@ -101,7 +101,7 @@ test-3.11-core:
test-3.12-core:
<<: *only-default
image: python:3.12-bookworm
image: python:3.12-trixie
script:
- tox -e py312-core
artifacts:
@@ -125,7 +125,7 @@ test-3.8-all:
test-3.9-all:
<<: *only-default
image: python:3.9-bookworm
image: python:3.9-trixie
script:
- tox -e py39-all
artifacts:
@@ -137,7 +137,7 @@ test-3.9-all:
test-3.10-all:
<<: *only-default
image: python:3.10-bookworm
image: python:3.10-trixie
script:
- tox -e py310-all
artifacts:
@@ -149,7 +149,7 @@ test-3.10-all:
test-3.11-all:
<<: *only-default
image: python:3.11-bookworm
image: python:3.11-trixie
script:
- tox -e py311-all
artifacts:
@@ -162,7 +162,7 @@ test-3.11-all:
test-3.12-all:
<<: *only-default
image: python:3.12-bookworm
image: python:3.12-trixie
script:
- tox -e py312-all
artifacts:
@@ -174,7 +174,7 @@ test-3.12-all:
build-test:
stage: test
image: python:3.11-bookworm
image: python:3.11-trixie
before_script:
- python -m pip install --upgrade pip
@@ -193,13 +193,13 @@ build-test:
test-docs:
<<: *only-default
image: python:3.11-bookworm
image: python:3.11-trixie
script:
- tox -e docs
deploy_production:
stage: deploy
image: python:3.11-bookworm
image: python:3.11-trixie
before_script:
- python -m pip install --upgrade pip

View File

@@ -25,19 +25,19 @@ exclude: |
repos:
# Code Upgrades
- repo: https://github.com/asottile/pyupgrade
rev: v3.20.0
rev: v3.21.2
hooks:
- id: pyupgrade
args: [--py38-plus]
- repo: https://github.com/adamchainz/django-upgrade
rev: 1.25.0
rev: 1.29.1
hooks:
- id: django-upgrade
args: [--target-version=4.2]
# Formatting
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
rev: v6.0.0
hooks:
# Identify invalid files
- id: check-ast
@@ -55,8 +55,6 @@ repos:
# - id: check-docstring-first
- id: debug-statements
# - id: requirements-txt-fixer
- id: fix-encoding-pragma
args: [--remove]
- id: fix-byte-order-marker
# General quality checks
- id: mixed-line-ending
@@ -66,11 +64,11 @@ repos:
- id: check-executables-have-shebangs
- id: end-of-file-fixer
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
rev: 3.2.1
rev: 3.6.0
hooks:
- id: editorconfig-checker
- repo: https://github.com/igorshubovych/markdownlint-cli
rev: v0.45.0
rev: v0.47.0
hooks:
- id: markdownlint
language: node
@@ -78,7 +76,7 @@ repos:
- --disable=MD013
# Infrastructure
- repo: https://github.com/tox-dev/pyproject-fmt
rev: v2.6.0
rev: v2.11.1
hooks:
- id: pyproject-fmt
name: pyproject.toml formatter
@@ -86,7 +84,7 @@ repos:
args:
- --indent=4
additional_dependencies:
- tox==4.24.1 # https://github.com/tox-dev/tox/releases/latest
- tox==4.32.0 # https://github.com/tox-dev/tox/releases/latest
- repo: https://github.com/abravalheri/validate-pyproject
rev: v0.24.1
hooks:

1
CODEOWNERS Normal file
View File

@@ -0,0 +1 @@
* @allianceauth

View File

@@ -63,7 +63,6 @@ Here is an example of the Alliance Auth web site with a mixture of Services, App
- [Aaron Kable](https://gitlab.com/aaronkable/)
- [Ariel Rin](https://gitlab.com/soratidus999/)
- [Col Crunch](https://gitlab.com/colcrunch/)
- [Erik Kalkoken](https://gitlab.com/ErikKalkoken/)
- [Rounon Dax](https://gitlab.com/ppfeufer)
- [snipereagle1](https://gitlab.com/mckernanin)
@@ -71,6 +70,7 @@ Here is an example of the Alliance Auth web site with a mixture of Services, App
- [Adarnof](https://gitlab.com/adarnof/)
- [Basraah](https://gitlab.com/basraah/)
- [Erik Kalkoken](https://gitlab.com/ErikKalkoken/)
### Beta Testers / Bug Fixers
@@ -89,6 +89,6 @@ Alliance Auth is maintained and developed by the community and we welcome every
To see what needs to be worked on please review our issue list or chat with our active developers on Discord.
Also, please make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at [https://developers.eveonline.com](https://developers.eveonline.com) before submitting any pull requests.
Also, please make sure you have signed the [License Agreement](https://developers.eveonline.com/license-agreement) by logging in at [https://developers.eveonline.com](https://developers.eveonline.com) before submitting any pull requests.
In addition to the core AA system we also very much welcome contributions to our growing list of 3rd party services and plugin apps. Please see [AA Community Creations](https://gitlab.com/allianceauth/community-creations) for details.

View File

@@ -5,7 +5,7 @@ manage online service access.
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
__version__ = '4.9.0'
__version__ = '4.11.2'
__title__ = 'Alliance Auth'
__title_useragent__ = 'AllianceAuth'
__url__ = 'https://gitlab.com/allianceauth/allianceauth'

View File

@@ -52,4 +52,10 @@ class UserSettingsMiddleware(MiddlewareMixin):
except Exception as e:
logger.exception(e)
# Minimize Menu
try:
request.session["MINIMIZE_SIDEBAR"] = request.user.profile.minimize_sidebar
except Exception as e:
pass # We don't care that an anonymous user has no profile (not logged in)
return response

View File

@@ -0,0 +1,22 @@
# Generated by Django 4.2.25 on 2025-10-14 22:02
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("authentication", "0024_alter_userprofile_language"),
]
operations = [
migrations.AddField(
model_name="userprofile",
name="minimize_sidebar",
field=models.BooleanField(
default=False,
help_text="Keep the sidebar menu minimized",
verbose_name="Minimize Sidebar Menu",
),
),
]

View File

@@ -97,7 +97,8 @@ class UserProfile(models.Model):
on_delete=models.SET_DEFAULT,
default=get_guest_state_pk)
language = models.CharField(
_("Language"), max_length=10,
_("Language"),
max_length=10,
choices=Language.choices,
blank=True,
default='')
@@ -112,6 +113,12 @@ class UserProfile(models.Model):
null=True,
help_text="Bootstrap 5 Themes from https://bootswatch.com/ or Community Apps"
)
minimize_sidebar = models.BooleanField(
_("Minimize Sidebar Menu"),
default=False,
help_text=_("Keep the sidebar menu minimized")
)
def assign_state(self, state=None, commit=True):
if not state:

View File

@@ -27,7 +27,7 @@ def dashboard_results(hours: int) -> _TaskCounts:
my_earliest = events.first_event(earliest=earliest)
return [my_earliest] if my_earliest else []
earliest = dt.datetime.utcnow() - dt.timedelta(hours=hours)
earliest = dt.datetime.now(dt.timezone.utc) - dt.timedelta(hours=hours)
earliest_events = []
succeeded_count = succeeded_tasks.count(earliest=earliest)
earliest_events += earliest_if_exists(succeeded_tasks, earliest)

View File

@@ -42,7 +42,7 @@ class EventSeries:
- event_time: timestamp of event. Will use current time if not specified.
"""
if not event_time:
event_time = dt.datetime.utcnow()
event_time = dt.datetime.now(dt.timezone.utc)
my_id = self._redis.incr(self._key_counter)
self._redis.zadd(self._key_sorted_set, {my_id: event_time.timestamp()})

View File

@@ -88,6 +88,7 @@ class TestUserSettingsMiddlewareLoginFlow(TestCase):
self.request.LANGUAGE_CODE = 'en'
self.request.user.profile.language = 'de'
self.request.user.profile.night_mode = True
self.request.user.profile.minimize_sidebar = False
self.request.user.is_anonymous = False
self.response = Mock()
self.response.content = 'hello world'
@@ -173,3 +174,26 @@ class TestUserSettingsMiddlewareLoginFlow(TestCase):
self.response
)
self.assertEqual(self.request.session["NIGHT_MODE"], True)
def test_middleware_set_mimimize_sidebar(self):
"""
tests the middleware will always set minimize_sidebar to False (default)
"""
response = self.middleware.process_response(
self.request,
self.response
)
self.assertEqual(self.request.session["MINIMIZE_SIDEBAR"], False)
def test_middleware_minimize_sidebar_when_set(self):
"""
tests the middleware will set mimimize_sidebar to True from DB
"""
self.request.user.profile.minimize_sidebar = True
response = self.middleware.process_response(
self.request,
self.response
)
self.assertEqual(self.request.session["MINIMIZE_SIDEBAR"], True)

View File

@@ -9,6 +9,7 @@ from allianceauth.tests.auth_utils import AuthUtils
from allianceauth.authentication.constants import ESI_ERROR_MESSAGE_OVERRIDES
MODULE_PATH = "allianceauth.authentication.views"
TEMPLATETAGS_PATH = "allianceauth.templatetags.admin_status"
def jsonresponse_to_dict(response) -> dict:
@@ -17,6 +18,7 @@ def jsonresponse_to_dict(response) -> dict:
@patch(MODULE_PATH + ".queued_tasks_count")
@patch(MODULE_PATH + ".active_tasks_count")
@patch(MODULE_PATH + "._celery_stats")
class TestRunningTasksCount(TestCase):
@classmethod
def setUpClass(cls) -> None:
@@ -26,36 +28,64 @@ class TestRunningTasksCount(TestCase):
cls.user.is_superuser = True
cls.user.save()
def test_should_return_data(
self, mock_active_tasks_count, mock_queued_tasks_count
):
def test_should_return_data(self, mock_celery_stats, mock_tasks_queued, mock_tasks_running):
# given
mock_active_tasks_count.return_value = 2
mock_queued_tasks_count.return_value = 3
mock_tasks_running.return_value = 2
mock_tasks_queued.return_value = 3
mock_celery_stats.return_value = {
"tasks_succeeded": 5,
"tasks_retried": 1,
"tasks_failed": 4,
"tasks_total": 11,
"tasks_hours": 24,
"earliest_task": "2025-08-14T22:47:54.853Z",
}
request = self.factory.get("/")
request.user = self.user
# when
response = task_counts(request)
# then
self.assertEqual(response.status_code, 200)
self.assertDictEqual(
jsonresponse_to_dict(response), {
"tasks_running": 2, "tasks_queued": 3}
jsonresponse_to_dict(response),
{
"tasks_succeeded": 5,
"tasks_retried": 1,
"tasks_failed": 4,
"tasks_total": 11,
"tasks_hours": 24,
"earliest_task": "2025-08-14T22:47:54.853Z",
"tasks_running": 3,
"tasks_queued": 2,
}
)
def test_su_only(
self, mock_active_tasks_count, mock_queued_tasks_count
):
def test_su_only(self, mock_celery_stats, mock_tasks_queued, mock_tasks_running):
self.user.is_superuser = False
self.user.save()
self.user.refresh_from_db()
# given
mock_active_tasks_count.return_value = 2
mock_queued_tasks_count.return_value = 3
mock_tasks_running.return_value = 2
mock_tasks_queued.return_value = 3
mock_celery_stats.return_value = {
"tasks_succeeded": 5,
"tasks_retried": 1,
"tasks_failed": 4,
"tasks_total": 11,
"tasks_hours": 24,
"earliest_task": "2025-08-14T22:47:54.853Z",
}
request = self.factory.get("/")
request.user = self.user
# when
response = task_counts(request)
# then
self.assertEqual(response.status_code, 302)

View File

@@ -27,6 +27,7 @@ from allianceauth.hooks import get_hooks
from .constants import ESI_ERROR_MESSAGE_OVERRIDES
from .core.celery_workers import active_tasks_count, queued_tasks_count
from allianceauth.templatetags.admin_status import _celery_stats
from .forms import RegistrationForm
from .models import CharacterOwnership
@@ -370,10 +371,10 @@ def registration_closed(request):
@user_passes_test(lambda u: u.is_superuser)
def task_counts(request) -> JsonResponse:
"""Return task counts as JSON for an AJAX call."""
data = {
"tasks_running": active_tasks_count(),
"tasks_queued": queued_tasks_count()
}
data = _celery_stats()
data.update(
{"tasks_running": active_tasks_count(), "tasks_queued": queued_tasks_count()}
)
return JsonResponse(data)

View File

@@ -13,6 +13,7 @@ class StartProject(BaseStartProject):
parser.add_argument('--celery', help='The path to the celery executable.')
parser.add_argument('--gunicorn', help='The path to the gunicorn executable.')
parser.add_argument('--memmon', help='The path to the memmon executable.')
parser.add_argument('--venv_directory', help='The path to the virtual environment directory.')
def create_project(parser, options, args):
@@ -27,7 +28,7 @@ def create_project(parser, options, args):
allianceauth_path = os.path.dirname(allianceauth.__file__)
template_path = os.path.join(allianceauth_path, 'project_template')
# Determine locations of commands to render supervisor cond
# Determine locations of commands to render supervisor configuration
command_options = {
'template': template_path,
'python': shutil.which('python'),
@@ -35,6 +36,7 @@ def create_project(parser, options, args):
'celery': shutil.which('celery'),
'memmon': shutil.which('memmon'),
'extensions': ['py', 'conf', 'json'],
'venv_directory': os.getenv('VIRTUAL_ENV'),
}
# Strip 'start' out of the arguments, leaving project name (and optionally destination dir)

View File

@@ -11,7 +11,7 @@
{% endblock header_nav_brand %}
{% block header_nav_collapse_left %}
<li class="nav-item dropdown">
<li class="nav-item dropdown mb-2 mb-lg-0">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">
{% translate "Corporations" %}
</a>
@@ -26,11 +26,7 @@
{% endfor %}
{% if perms.corputils.add_corpstats %}
{% if available.count >= 1 %}
<li>&nbsp;</li>
{% endif %}
<li>
<li class="mt-3">
<a class="dropdown-item" href="{% url 'corputils:add' %}">
{% translate "Add corporation" %}
</a>

View File

@@ -727,7 +727,8 @@ class TestEveSwaggerProvider(TestCase):
my_provider = EveSwaggerProvider()
my_client = my_provider.client
operation = my_client.Universe.get_universe_factions()
self.assertEqual(
operation.future.request.headers['User-Agent'],
f'AllianceAuth/{aa_version} (dummy@example.net; +{aa_url}) Django-ESI/{esi_version} (+{esi_url})'
)
expected_variants = {
f'AllianceAuth/{aa_version} (dummy@example.net; +{aa_url}) DjangoEsi/{esi_version} (+{esi_url})', # Django-ESI 8.0.0
f'AllianceAuth/{aa_version} (dummy@example.net; +{aa_url}) Django-ESI/{esi_version} (+{esi_url})' # Django-ESI 7.x, Py38 Py39
}
self.assertIn(operation.future.request.headers['User-Agent'], expected_variants)

View File

@@ -320,8 +320,8 @@ def click_fatlink_view(request, token, fat_hash=None):
messages.warning(
request,
_(
f"Cannot register the fleet participation for {character.character_name}. The character needs to be online."
),
"Cannot register the fleet participation for {character_name}. The character needs to be online."
).format(character_name=character.character_name)
)
return redirect('fatlink:view')

View File

@@ -0,0 +1,219 @@
from collections import defaultdict
import re
from typing import List
from django.db.models import Model, Q
from django.http import HttpRequest, JsonResponse
from django.template import Context, Template
from django.template.loader import render_to_string
from django.views import View
from allianceauth.services.hooks import get_extension_logger
logger = get_extension_logger(__name__)
class nested_param_dict(dict):
"""
Helper to create infinite depth default dicts for setting from params
"""
def __setitem__(self, item, value):
if "." in item:
head, path = item.split(".", 1)
try:
head = int(head)
except ValueError:
pass
obj = self.setdefault(head, nested_param_dict())
obj[path] = value
else:
super().__setitem__(item, value)
def defaultdict_to_dict(d):
"""
Helper to convert default dict back to dict
"""
if isinstance(d, defaultdict):
d = {k: defaultdict_to_dict(v) for k, v in d.items()}
return d
class DataTablesView(View):
model: Model = None
columns: List[tuple] = []
def get_model_qs(self, request: HttpRequest, *args, **kwargs):
return self.model.objects
def filter_qs(self, table_conf: dict):
# Search
filter_qs = Q()
for id, c in table_conf["columns"].items():
_c = self.columns[int(id)][0]
if c.get("searchable", False) and len(_c) > 0:
if c.get("columnControl", False):
_sv = str(c["columnControl"]["search"]["value"])
"""contains, equal, ends, starts, empty"""
_logic = str(c["columnControl"]["search"]["logic"])
"""text, date, num"""
_type = str(c["columnControl"]["search"]["type"])
if _type == "text":
if _logic == "empty":
filter_qs &= Q(**{f'{_c}': ""})
elif len(_sv) > 0:
if _logic == "contains":
filter_qs &= Q(**{f'{_c}__icontains': _sv})
elif _logic == "starts":
filter_qs &= Q(**{f'{_c}__istartswith': _sv})
elif _logic == "ends":
filter_qs &= Q(**{f'{_c}__iendswith': _sv})
elif _logic == "equal":
filter_qs &= Q(**{f'{_c}': _sv})
elif _type == "num":
if _logic == "empty":
filter_qs &= Q(**{f'{_c}__isnull': True})
elif len(_sv) > 0:
try:
if _logic == "greater":
filter_qs &= Q(**{f'{_c}__gt': float(_sv)})
elif _logic == "less":
filter_qs &= Q(**{f'{_c}__lt': float(_sv)})
elif _logic == "greaterOrEqual":
filter_qs &= Q(**{f'{_c}__gte': float(_sv)})
elif _logic == "lessOrEqual":
filter_qs &= Q(**{f'{_c}__lte': float(_sv)})
elif _logic == "equal":
filter_qs &= Q(**{f'{_c}': float(_sv)})
except ValueError:
pass
else:
_sv = str(c["search"]["value"])
if len(_sv) > 0:
if c["search"]["regex"]:
filter_qs |= Q(**{f'{_c}__iregex': _sv})
else:
filter_qs |= Q(**{f'{_c}__icontains': _sv})
_gsv = str(table_conf["search"]["value"])
if len(_gsv) > 0:
filter_qs |= Q(**{f'{_c}__icontains': _gsv})
return filter_qs
def except_qs(self, table_conf: dict):
# Search
except_qs = Q()
for id, c in table_conf["columns"].items():
_c = self.columns[int(id)][0]
if c.get("searchable", False) and len(_c) > 0:
if c.get("columnControl", False):
_sv = str(c["columnControl"]["search"]["value"])
"""notContains, notEqual, notEmpty"""
_logic = str(c["columnControl"]["search"]["logic"])
"""text, date, num"""
_type = str(c["columnControl"]["search"]["type"])
if _type == "text":
if _logic == "notEmpty":
except_qs |= Q(**{f'{_c}': ""})
elif len(_sv) > 0:
if _logic == "notContains":
except_qs |= Q(**{f'{_c}__icontains': _sv})
elif _logic == "notEqual":
except_qs |= Q(**{f'{_c}': _sv})
elif _type == "num":
if _logic == "notEmpty":
except_qs |= Q(**{f'{_c}__isnull': False})
elif len(_sv) > 0:
if _logic == "notEqual":
try:
except_qs |= Q(**{f'{_c}': float(_sv)})
except ValueError:
pass
return except_qs
def get_table_config(self, get: dict):
_cols = nested_param_dict()
for c, v in get.items():
_keys = [_k for _k in c.replace("]", "").split("[")]
_v = v
if v in ["true", "false"]:
_v = _v == "true"
else:
try:
_v = int(_v)
except ValueError:
pass # not an integer
_cols[".".join(_keys)] = _v
return defaultdict_to_dict(_cols)
def get_order(self, table_conf: dict):
order = []
for oc, od in table_conf.get("order", {}).items():
_c = table_conf["columns"][od["column"]]
if _c["orderable"]:
if od["dir"] == "desc":
order.append("-" + self.columns[int(od["column"])][0])
else:
order.append(self.columns[int(od["column"])][0])
return order
def render_template(self, request: HttpRequest, template: str, ctx: dict):
if "{{" in template:
_template = Template(template)
return _template.render(Context(ctx))
else:
return render_to_string(
template,
ctx,
request
)
def get(self, request: HttpRequest, *args, **kwargs):
table_conf = self.get_table_config(request.GET)
draw = int(table_conf["draw"])
start = int(table_conf["start"])
length = int(table_conf["length"])
if length <= 0:
logger.warning(
"Using no pagination is not recommended for server side rendered datatables"
)
limit = start + length
# Build response rows
items = []
qs = self.get_model_qs(
request,
*args,
**kwargs
).filter(
self.filter_qs(table_conf)
).exclude(
self.except_qs(table_conf)
).order_by(
*self.get_order(table_conf)
)
# Get the count after filtering
qs_count = qs.count()
# build output
if length > 0:
qs = qs[start:limit]
for row in qs:
ctx = {"row": row}
row = []
for t in self.columns:
row.append(self.render_template(request, t[1], ctx))
items.append(row)
# Build our output dict
datatables_data = {}
datatables_data['draw'] = draw
datatables_data['recordsTotal'] = self.get_model_qs(request, *args, **kwargs).all().count()
datatables_data['recordsFiltered'] = qs_count
datatables_data['data'] = items
return JsonResponse(datatables_data)

View File

@@ -31,7 +31,7 @@
------------------------------------------------------------------------------------- */
@media all {
.table {
--bs-table-bg: transparent;
--bs-table-bg: transparent !important;
}
}
@@ -47,6 +47,12 @@
/* Side Navigation
------------------------------------------------------------------------------------- */
@media all {
.sidemenu-total-notifications-badge {
position: absolute;
left: 28px;
font-size: 42.5% !important;
}
#sidebar > div {
width: 325px;
}
@@ -173,3 +179,34 @@
border-left-color: var(--bs-warning);
}
}
/* DataTables 2
------------------------------------------------------------------------------------- */
@media all {
/* DataTables Processing Indicator
--------------------------------------------------------------------------------- */
div.dt-processing {
padding-top: 0.5rem !important;
}
div.dt-processing > div {
display: none;
}
svg.aa-datatables-process-indicator {
width: 2rem;
height: 2rem;
}
/* DataTables Extension: ColumnControl
--------------------------------------------------------------------------------- */
table.dataTable span.dtcc div.dtcc-search > div select {
background-color: var(--bs-body-bg);
color: var(--bs-body-color);
padding: 0.375rem;
}
table.dataTable .dt-column-header div.dtcc-search-title {
display: none;
}
}

View File

@@ -272,6 +272,49 @@ function objectDeepMerge (target, ...sources) {
return target;
}
/**
* Formats a number according to the specified locale.
* This function uses the Intl.NumberFormat API to format the number.
*
* @usage
* In your Django template get the current language code:
* ```django
* {% get_current_language as LANGUAGE_CODE %}
* ```
* Then use it in your JavaScript:
* ```javascript
* const userLocale = '{{ LANGUAGE_CODE }}'; // e.g., 'en-US', 'de-DE'
* const number = 1234567.89;
* const formattedNumber = numberFormatter({
* value: number,
* locales: userLocale,
* options: {
* style: 'currency',
* currency: 'ISK'
* }
* });
*
* // Output will vary based on locale
* // e.g., '1,234,567.89' for 'en-US', '1.234.567,89' for 'de-DE'
* console.log(formattedNumber);
* ```
*
* @param {number} value The number to format
* @param {string | string[]} locales The locale(s) to use for formatting (e.g., 'en-US', 'de-DE', ['en-US', 'de-DE']). If not provided, the browser's default locale will be used and any language settings from the user will be ignored.
* @param {Object} [options={}] Additional options for number formatting (see `Intl.NumberFormat` documentation - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat)
* @return {string} The formatted number as a string
*/
const numberFormatter = ({value, locales, options = {}}) => {
console.log('Formatting number:', value, 'for locale(s):', locales, 'with options:', options);
const formatter = new Intl.NumberFormat(locales, {
maximumFractionDigits: 2,
minimumFractionDigits: 0,
...options
});
return formatter.format(value);
};
/**
* When the document is ready …
*/

View File

@@ -0,0 +1,9 @@
{% load i18n %}
<svg class="aa-datatables-process-indicator">
<use href="#aa-loading-spinner"></use>
</svg>
<p class="my-1">
{% translate "Loading …" %}
</p>

View File

@@ -0,0 +1,13 @@
<li class="nav-item">
<a href="{{ url }}" class="nav-link py-lg-0">
<span class="btn btn-{{ btn_modifier|default:'primary' }} d-none d-lg-inline-block">
{% if fa_icon and icon_on_desktop %}<i class="{{ fa_icon }} me-2"></i>{% endif %}
{{ title }}
</span>
<span class="d-inline-block d-lg-none">
{% if fa_icon and icon_on_mobile %}<i class="{{ fa_icon }} fa-fw me-2"></i>{% endif %}
{{ title }}
</span>
</a>
</li>

View File

@@ -0,0 +1,12 @@
<li class="nav-item">
<a href="{{ url }}" class="nav-link">
<span class="d-none d-lg-inline-block" title="{{ title }}">
<i class="{{ fa_icon }}"></i>
</span>
<span class="d-inline-block d-lg-none">
{% if icon_on_mobile %}<i class="{{ fa_icon }} me-2 fa-fw"></i>{% endif %}
{{ title }}
</span>
</a>
</li>

View File

@@ -15,9 +15,61 @@
<animate attributeName="stroke-dasharray" dur="1.5s" calcMode="spline" values="0 150;42 150;42 150;42 150" keyTimes="0;0.475;0.95;1" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" repeatCount="indefinite" />
<animate attributeName="stroke-dashoffset" dur="1.5s" calcMode="spline" values="0;-16;-59;-59" keyTimes="0;0.475;0.95;1" keySplines="0.42,0,0.58,1;0.42,0,0.58,1;0.42,0,0.58,1" repeatCount="indefinite" />
</circle>
<animateTransform attributeName="transform" type="rotate" dur="2s" values="0 12 12;360 12 12" repeatCount="indefinite" />
</g>
</symbol>
<!-- Mumble Logo -->
<symbol id="aa-mumble-logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">
<defs>
<radialGradient id="c" cx="206.64" cy="214.43" r="190.25" gradientTransform="matrix(.97267 .016175 -.016656 .97474 9.2188 2.0744)" gradientUnits="userSpaceOnUse">
<stop stop-opacity="0" offset="0" />
<stop stop-opacity=".019608" offset=".81721" />
<stop stop-opacity=".1451" offset=".89931" />
<stop stop-opacity=".20784" offset=".91199" />
<stop stop-opacity=".25098" offset=".95598" />
<stop stop-opacity=".33333" offset="1" />
</radialGradient>
</defs>
<g transform="translate(0 -652.36)">
<path transform="matrix(1.0811 0 0 1.1043 -22.438 617.98)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" fill="#1a1a1a" stroke="#000" stroke-linejoin="round" stroke-width="4.576" />
<path transform="matrix(1.0706 0 0 1.101 -22.082 583.62)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" opacity="0" />
<path transform="matrix(1.0423 0 0 1.0695 -13.736 622.74)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" fill="#fff" opacity=".9" />
<path transform="matrix(1.0641 0 0 1.0787 -20.794 620.64)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" fill="#fff" stroke="#333" stroke-linejoin="round" stroke-width="1.4127" />
<path transform="matrix(1.0857 0 0 1.109 -24.345 616.21)" d="m385.62 214.43c0 96.124-80.133 174.05-178.98 174.05-98.849 0-178.98-77.924-178.98-174.05s80.133-174.05 178.98-174.05c98.849 0 178.98 77.924 178.98 174.05z" fill="none" stroke="#000" stroke-linejoin="round" stroke-width="1.8304" />
</g>
<g>
<path transform="matrix(1.0765 0 0 1.1009 -20.514 -34.696)" d="m385.62 214.43a178.98 174.05 0 1 1-357.96 0 178.98 174.05 0 1 1 357.96 0z" fill="url(#c)" opacity=".75" />
</g>
<g fill-rule="evenodd">
<path transform="matrix(1.05 0 0 1.05 -5.3555 .50955)" d="m152.41 31.61c-24.652-0.61541-49.623 15.705-55.853 40.126-1.4511 5.9204-2.0429 11.533-2.1475 17.251v63.623h25c0.0881-22.382-0.12668-44.644 0.1701-67.072 0.76858-14.243 11.773-29.258 27.049-29.084 0.11203 22.669-0.22918 45.351 0.18004 68.011 1.3028 18.426 18.762 33.676 37.243 32.114 11.546-0.2802 23.178 0.67313 34.648-0.72475 17.466-3.2744 29.553-21.063 27.929-38.449v-60.857c15.888-1.1603 27.938 14.263 28.642 29.084 0.29501 22.427 0.0825 44.692 0.1701 67.072h25v-67.5c-0.81797-7.2761-1.9718-16.18-5.9149-23.198-10.229-20.751-34.153-31.948-56.717-30.261-6.591-0.83713-13.681 3.6197-15.487 9.8666 0.10876 26.739 0.18577 53.486-0.015 80.22-0.75343 11.2-11.79 19.764-22.805 18.342-7.7921 0.33854-16.594 0.0136-21.908-6.6817-7.1623-7.5704-4.7632-18.405-5.1836-27.812 0.0193-21.719-0.0713-43.418 0.1249-65.1-3.2593-6.5913-10.503-9.9936-17.679-8.9119l-1.1877-0.01641-1.2582-0.04042h2.5e-4z" stroke="#fff" />
<path d="m107.27 156.26v177.84c-35.128-3.8535-62.737-42.188-62.737-88.922 0-46.734 27.609-85.068 62.737-88.922z" fill="url(#l)" opacity=".9666" />
</g>
<g fill-rule="evenodd" stroke="#fff">
<path transform="matrix(1.05 0 0 1.05 -5.3555 .50955)" d="m290.42 313.16c-0.69916-7e-3 -3.3105-0.57507-3.9404-0.16697 0 0-1.0356 3.0168-4.6042 5.6725-3.1327 2.3314-6.1076 4.5662-9.2946 6.6625-2.8616 1.8823-5.9328 3.9177-8.8098 5.3024-2.264 1.0896-4.114 1.2482-4.114 1.2482h-32.22c-2.0127 0-3.6618 1.5872-3.6618 3.5625v0.875c0 1.9753 1.649 3.5938 3.6618 3.5938h33.879c0.77968 0 3.5971-0.82022 5.2725-1.5553 4.1768-1.8326 6.899-4.166 11.71-7.0274 5.1144-3.2712 14.573-10.886 14.573-10.886 1.6797-1.0883 2.1278-3.289 1.0189-4.9375l-0.47763-0.75c-0.69304-1.0303-1.8278-1.5824-2.9931-1.5938z" />
<path transform="matrix(1.05 0 0 1.05 -5.3555 .50955)" d="m288.25 148.44v169.38c33.455-3.67 59.75-40.179 59.75-84.688s-26.295-81.018-59.75-84.688z" opacity=".9666" />
<path transform="matrix(1.05 0 0 1.05 -5.3555 .50955)" d="m106.22 149.34v169.38c-33.455-3.67-59.75-40.179-59.75-84.688s26.295-81.018 59.75-84.688z" opacity=".9666" />
<path transform="matrix(1.3048 0 0 1.2146 -20.461 -43.8)" d="m194.74 325.86a22.13 13.831 0 1 1-44.26 0 22.13 13.831 0 1 1 44.26 0z" opacity=".9666" />
<rect transform="matrix(1.0433 0 0 1.05 -4.6563 .094873)" x="274.72" y="146.09" width="13.329" height="171.95" rx="3.8877" ry="3.5401" opacity=".9666" stroke-width="1.0538" />
<rect transform="matrix(1.0433 0 0 1.05 -3.8348 .094873)" x="106.56" y="147.08" width="13.063" height="171.96" rx="3.8101" ry="3.5403" opacity=".9666" stroke-width="1.0432" />
</g>
<g>
<rect x="131.64" y="188.83" width="140.83" height="111.89" fill-rule="evenodd" />
<path transform="matrix(1.1007 0 0 2.0001 -23.812 -190.28)" d="m189.84 226.69c-4e-5 2.3125-0.43754 4.3438-1.3125 6.0938-0.87504 1.75-2.0521 3.1979-3.5312 4.3438-1.75 1.375-3.6719 2.3542-5.7656 2.9375-2.0938 0.58334-4.7552 0.875-7.9844 0.875h-18.625v-46.531h16.438c3.4166 5e-5 6.0052 0.13026 7.7656 0.39063 1.7604 0.26046 3.4114 0.80734 4.9531 1.6406 1.6666 0.89588 2.9114 2.0938 3.7344 3.5938 0.82288 1.5 1.2343 3.2292 1.2344 5.1875-4e-5 2.2709-0.56775 4.2917-1.7031 6.0625-1.1354 1.7709-2.7032 3.073-4.7031 3.9062v0.25c2.875 0.6042 5.177 1.8386 6.9062 3.7031 1.7291 1.8646 2.5937 4.3802 2.5938 7.5469zm-14.969-19.125c-3e-5 -0.74996-0.19274-1.5208-0.57813-2.3125-0.38544-0.79163-0.9844-1.3645-1.7969-1.7188-0.77086-0.33329-1.6823-0.51558-2.7344-0.54687-1.0521-0.0312-2.6198-0.0468-4.7031-0.0469h-0.8125v9.8438h1.4688c2 3e-5 3.401-0.0208 4.2031-0.0625 0.80207-0.0416 1.6302-0.26038 2.4844-0.65625 0.93747-0.43747 1.5833-1.0416 1.9375-1.8125 0.35414-0.7708 0.53122-1.6666 0.53125-2.6875zm2.9375 18.906c-3e-5 -1.4375-0.2917-2.5625-0.875-3.375-0.58336-0.81248-1.4584-1.4271-2.625-1.8438-0.70836-0.27081-1.6823-0.42185-2.9219-0.45312-1.2396-0.0312-2.9011-0.0469-4.9844-0.0469h-2.1562v11.656h0.625c3.0416 1e-5 5.1458-0.0208 6.3125-0.0625 1.1666-0.0416 2.3541-0.3229 3.5625-0.84375 1.0625-0.45832 1.8385-1.1302 2.3281-2.0156 0.48956-0.88541 0.73435-1.8906 0.73438-3.0156z" fill="url(#f)" />
<path transform="matrix(1.1007 0 0 2.0001 -28.291 -190.6)" d="m189.84 226.69c-4e-5 2.3125-0.43754 4.3438-1.3125 6.0938-0.87504 1.75-2.0521 3.1979-3.5312 4.3438-1.75 1.375-3.6719 2.3542-5.7656 2.9375-2.0938 0.58334-4.7552 0.875-7.9844 0.875h-18.625v-46.531h16.438c3.4166 5e-5 6.0052 0.13026 7.7656 0.39063 1.7604 0.26046 3.4114 0.80734 4.9531 1.6406 1.6666 0.89588 2.9114 2.0938 3.7344 3.5938 0.82288 1.5 1.2343 3.2292 1.2344 5.1875-4e-5 2.2709-0.56775 4.2917-1.7031 6.0625-1.1354 1.7709-2.7032 3.073-4.7031 3.9062v0.25c2.875 0.6042 5.177 1.8386 6.9062 3.7031 1.7291 1.8646 2.5937 4.3802 2.5938 7.5469zm-14.969-19.125c-3e-5 -0.74996-0.19274-1.5208-0.57813-2.3125-0.38544-0.79163-0.9844-1.3645-1.7969-1.7188-0.77086-0.33329-1.6823-0.51558-2.7344-0.54687-1.0521-0.0312-2.6198-0.0468-4.7031-0.0469h-0.8125v9.8438h1.4688c2 3e-5 3.401-0.0208 4.2031-0.0625 0.80207-0.0416 1.6302-0.26038 2.4844-0.65625 0.93747-0.43747 1.5833-1.0416 1.9375-1.8125 0.35414-0.7708 0.53122-1.6666 0.53125-2.6875zm2.9375 18.906c-3e-5 -1.4375-0.2917-2.5625-0.875-3.375-0.58336-0.81248-1.4584-1.4271-2.625-1.8438-0.70836-0.27081-1.6823-0.42185-2.9219-0.45312-1.2396-0.0312-2.9011-0.0469-4.9844-0.0469h-2.1562v11.656h0.625c3.0416 1e-5 5.1458-0.0208 6.3125-0.0625 1.1666-0.0416 2.3541-0.3229 3.5625-0.84375 1.0625-0.45832 1.8385-1.1302 2.3281-2.0156 0.48956-0.88541 0.73435-1.8906 0.73438-3.0156z" fill="#fff" />
<path transform="matrix(1.1007 0 0 2.0001 -23.812 -190.28)" d="m227.56 240.94h-31.062v-46.531h11.688v37.656h19.375z" fill="url(#e)" />
<path d="m187.31 197.56v94.531h14.125 0.0625 21.375v-19.25h-21.375v-75.281h-14.188z" fill="#fff" />
<path transform="matrix(1.1007 0 0 2.0001 -23.812 -190.28)" d="m233.12 240.94v-46.531h31.469v8.875h-19.844v8.1562h18.281v8.875h-18.281v11.75h19.844v8.875z" fill="url(#d)" />
<path d="m227.81 197.5v94.531h14.188 21.375v-19.25h-21.375v-22.281h19.656v-18.656h-19.656v-15.094h21.375v-19.25h-21.375-0.0625-14.125z" fill="#fff" />
</g>
<g fill-rule="evenodd">
<path d="m155.37 33.01c-25.884-0.64618-52.104 16.49-58.645 42.133-1.5237 6.2165-2.1451 12.11-2.2549 18.114v66.804h26.25c0.0925-23.501-0.13301-46.876 0.17861-70.426 0.807-14.955 12.362-30.721 28.401-30.539 0.11763 23.802-0.24064 47.619 0.18905 71.412 1.368 19.347 19.7 35.36 39.106 33.72 12.123-0.29421 24.336 0.70678 36.38-0.76099 18.339-3.4381 31.031-22.116 29.325-40.372v-63.9c16.682-1.2183 29.334 14.976 30.074 30.539 0.30976 23.549 0.0866 46.927 0.17861 70.426h26.25v-70.875c-0.85887-7.6399-2.0704-16.989-6.2106-24.358-10.74-21.789-35.861-33.545-59.553-31.774-6.9206-0.87899-14.366 3.8007-16.261 10.36 0.1142 28.075 0.19506 56.161-0.0157 84.231-0.7911 11.76-12.38 20.752-23.945 19.259-8.1817 0.35546-17.423 0.0143-23.004-7.0158-7.5204-7.949-5.0013-19.326-5.4428-29.202 0.0203-22.805-0.0749-45.589 0.13115-68.355-3.4223-6.9208-11.028-10.493-18.563-9.3575l-1.2471-0.01723-1.3211-0.04244h2.6e-4z" fill="url(#i)" />
<path d="m154.53 34.269c-31.655 0-56.169 21.233-59.981 48.759h26.972c3.6448-12.426 13.114-21.517 24.511-22.575 0.74035-0.69976 1.772-1.1484 2.9203-1.1484h26.611l0.0984-15.619s-2.3784-3.7253-4.2984-5.4797c-2.1754-1.9877-5.1118-3.4283-8.0062-3.7406-2.4252-0.26165-5.1996-0.04115-8.8266-0.19688z" fill="url(#j)" />
<path transform="matrix(1.3048 0 0 1.2146 -20.434 -43.907)" d="m194.74 325.86a22.13 13.831 0 1 1-44.26 0 22.13 13.831 0 1 1 44.26 0z" fill="url(#b)" opacity=".9666" />
<path d="m298.66 157.26v177.84c35.128-3.8535 62.738-42.188 62.738-88.922 0-46.734-27.609-85.068-62.738-88.922z" fill="url(#k)" opacity=".9666" />
<path d="m247.97 33.422c31.655 0 56.169 21.233 59.981 48.759h-26.972c-3.6448-12.426-13.114-21.517-24.511-22.575-0.74036-0.69976-1.772-1.1484-2.9203-1.1484h-26.611l-0.0984-15.619s2.3784-3.7253 4.2984-5.4797c2.1754-1.9877 5.1118-3.4283 8.0062-3.7406 2.4252-0.26165 5.1996-0.04115 8.8266-0.19688z" fill="url(#h)" />
<path d="m107.92 156.15v177.84c-35.128-3.8535-62.737-42.188-62.737-88.922 0-46.734 27.609-85.068 62.737-88.922z" fill="url(#g)" opacity=".9666" />
</g>
</symbol>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,288 @@
"""
Test sentinel user
"""
import json
import re
# Django
from allianceauth.tests.auth_utils import AuthUtils
from django.test import RequestFactory, TestCase
from django.http import HttpRequest
# Alliance Auth
from allianceauth.framework.datatables import DataTablesView
from allianceauth.eveonline.models import EveCharacter
class TestView(DataTablesView):
model=EveCharacter
columns = [
("", "{{ row.character_id }}"),
("character_name", "{{ row.character_name }}"),
("corporation_name", "{{ row.corporation_name }}"),
("alliance_name", "{{ row.alliance_name }}"),
]
class TestDataTables(TestCase):
def setUp(self):
self.get_params = {
'draw': '1',
'columns[0][data]': '0',
'columns[0][name]': '',
'columns[0][searchable]': 'false',
'columns[0][orderable]': 'false',
'columns[0][search][value]': '',
'columns[0][search][regex]': 'false',
'columns[1][data]': '1',
'columns[1][name]': '',
'columns[1][searchable]': 'true',
'columns[1][orderable]': 'true',
'columns[1][search][value]': '',
'columns[1][search][regex]': 'false',
'columns[2][data]': '2',
'columns[2][name]': '',
'columns[2][searchable]': 'true',
'columns[2][orderable]': 'false',
'columns[2][search][value]': '',
'columns[2][search][regex]': 'false',
'columns[3][data]': '3',
'columns[3][name]': '',
'columns[3][searchable]': 'true',
'columns[3][orderable]': 'true',
'columns[3][search][value]': '',
'columns[3][search][regex]': 'false',
'order[0][column]': '1',
'order[0][dir]': 'asc',
'start': '0',
'length': '10',
'search[value]': '',
'search[regex]': 'false',
'_': '123456789'
}
@classmethod
def setUpClass(cls) -> None:
"""
Set up eve models
"""
super().setUpClass()
cls.factory = RequestFactory()
cls.user = AuthUtils.create_user("bruce_wayne")
cls.user.is_superuser = True
cls.user.save()
EveCharacter.objects.all().delete()
for i in range(1,16):
EveCharacter.objects.create(
character_id=1000+i,
character_name=f"{1000+i} - Test Character - {1000+i}",
corporation_id=2000+i,
corporation_name=f"{2000+i} - Test Corporation",
)
for i in range(16,21):
EveCharacter.objects.create(
character_id=1000+i,
character_name=f"{1000+i} - Test Character - {1000+i}",
corporation_id=2000+i,
corporation_name=f"{2000+i} - Test Corporation",
alliance_id=3000+i,
alliance_name=f"{3000+i} - Test Alliance",
)
def test_view_default(self):
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(data[0][0], "1001")
self.assertEqual(data[9][0], "1010")
def test_view_reverse_sort(self):
self.get_params["order[0][dir]"] = "desc"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(data[0][0], "1020")
self.assertEqual(data[9][0], "1011")
def test_view_no_sort(self):
self.get_params.pop("order[0][column]")
self.get_params.pop("order[0][dir]")
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(data[0][0], "1001")
self.assertEqual(data[9][0], "1010")
def test_view_non_sortable_sort(self):
self.get_params["order[0][dir]"] = "desc"
self.get_params["order[0][column]"] = "0"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(data[0][0], "1001")
self.assertEqual(data[9][0], "1010")
def test_view_20_rows(self):
self.get_params["length"] = "20"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(data[0][0], "1001")
self.assertEqual(data[19][0], "1020")
def test_records_filtered(self):
self.get_params["length"] = "20"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
content = json.loads(response.get(request).content)
self.assertEqual(content["recordsFiltered"], 20)
self.assertEqual(content["recordsTotal"], 20)
def test_view_global_search(self):
self.get_params["search[value]"] = "1020"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 1)
self.assertEqual(data[0][0], "1020")
def test_view_col_1_search(self):
self.get_params["columns[1][search][value]"] = "1020"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 1)
self.assertEqual(data[0][0], "1020")
def test_view_col_1_search_empty(self):
self.get_params["columns[1][search][value]"] = "zzz"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 0)
def test_view_cc_3_search_empty(self):
self.get_params["columns[3][columnControl][search][value]"] = ""
self.get_params["columns[3][columnControl][search][logic]"] = "empty"
self.get_params["columns[3][columnControl][search][type]"] = "text"
self.get_params["length"] = "20"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 15)
def test_view_cc_3_search_not_empty(self):
self.get_params["columns[3][columnControl][search][value]"] = ""
self.get_params["columns[3][columnControl][search][logic]"] = "notEmpty"
self.get_params["columns[3][columnControl][search][type]"] = "text"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 5)
def test_view_cc_1_search_ends_with(self):
self.get_params["columns[1][columnControl][search][value]"] = "9"
self.get_params["columns[1][columnControl][search][logic]"] = "ends"
self.get_params["columns[1][columnControl][search][type]"] = "text"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 2)
def test_view_cc_1_search_starts_with(self):
self.get_params["columns[1][columnControl][search][value]"] = "1009"
self.get_params["columns[1][columnControl][search][logic]"] = "starts"
self.get_params["columns[1][columnControl][search][type]"] = "text"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 1)
def test_view_cc_1_search_not_contains(self):
self.get_params["columns[1][columnControl][search][value]"] = "100"
self.get_params["columns[1][columnControl][search][logic]"] = "notContains"
self.get_params["columns[1][columnControl][search][type]"] = "text"
self.get_params["length"] = "20"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 11)
def test_view_cc_1_search_contains(self):
self.get_params["columns[1][columnControl][search][value]"] = "100"
self.get_params["columns[1][columnControl][search][logic]"] = "contains"
self.get_params["columns[1][columnControl][search][type]"] = "text"
self.get_params["length"] = "20"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 9)
def test_view_cc_1_search_equal(self):
self.get_params["columns[1][columnControl][search][value]"] = "1001 - Test Character - 1001"
self.get_params["columns[1][columnControl][search][logic]"] = "equal"
self.get_params["columns[1][columnControl][search][type]"] = "text"
self.get_params["length"] = "20"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 1)
def test_view_cc_1_search_not_equal(self):
self.get_params["columns[1][columnControl][search][value]"] = "1001 - Test Character - 1001"
self.get_params["columns[1][columnControl][search][logic]"] = "notEqual"
self.get_params["columns[1][columnControl][search][type]"] = "text"
self.get_params["length"] = "20"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 19)
def test_view_cc_no_pagination(self):
self.get_params["length"] = "-1"
self.client.force_login(self.user)
request = self.factory.get('/fake-url/', data=self.get_params)
response = TestView()
response.setup(request)
data = json.loads(response.get(request).content)["data"]
self.assertEqual(len(data), 20)

View File

@@ -19,7 +19,7 @@
{% translate "Join Requests" %}
{% if acceptrequests %}
<span class="badge text-bg-secondary">{{ acceptrequests|length }}</span>
<span id="acceptRequestsCounter" class="badge text-bg-secondary">{{ acceptrequests|length }}</span>
{% endif %}
</a>
</li>
@@ -30,7 +30,7 @@
{% translate "Leave Requests" %}
{% if leaverequests %}
<span class="badge text-bg-secondary">{{ leaverequests|length }}</span>
<span id="leaveRequestsCounter" class="badge text-bg-secondary">{{ leaverequests|length }}</span>
{% endif %}
</a>
</li>
@@ -43,19 +43,19 @@
</li>
{% endblock header_nav_collapse_left %}
{% block content %}
<div class="tab-content">
<div id="add" class="tab-pane active">
{% if acceptrequests %}
<div class="table-responsive">
<table class="table">
<div>
<table id="table-add" class="table table-responsive w-100">
<thead>
<tr>
<th>{% translate "Character" %}</th>
<th>{% translate "Organization" %}</th>
<th>{% translate "Group" %}</th>
<th></th>
<th>{% translate "Corporation" %}</th>
</tr>
</thead>
@@ -89,13 +89,24 @@
<td>{{ acceptrequest.group.name }}</td>
<td class="text-end">
<a href="{% url 'groupmanagement:accept_request' acceptrequest.id %}" class="btn btn-success">
<div class="spinner-border spinner-border-sm mt-2 btns-join-{{acceptrequest.id}} d-none" role="status">
<span class="sr-only">Loading...</span>
</div>
<a id="{{acceptrequest.id}}" class="btn btn-success join-accept btns-join-{{acceptrequest.id}}">
{% translate "Accept" %}
</a>
<a href="{% url 'groupmanagement:reject_request' acceptrequest.id %}" class="btn btn-danger">
<a id="{{acceptrequest.id}}" class="btn btn-danger join-reject btns-join-{{acceptrequest.id}}">
{% translate "Reject" %}
</a>
</td>
<td>
{% if acceptrequest.main_char %}
{{ acceptrequest.main_char.corporation_name }}
{% else %}
{% translate "(unknown)" %}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
@@ -111,14 +122,15 @@
{% if not show_leave_tab %}
<div id="leave" class="tab-pane">
{% if leaverequests %}
<div class="table-responsive">
<table class="table">
<div>
<table id="table-rem" class="table table-responsive w-100">
<thead>
<tr>
<th>{% translate "Character" %}</th>
<th>{% translate "Organization" %}</th>
<th>{% translate "Group" %}</th>
<th></th>
<th>{% translate "Corporation" %}</th>
</tr>
</thead>
@@ -152,14 +164,23 @@
<td>{{ leaverequest.group.name }}</td>
<td class="text-end">
<a href="{% url 'groupmanagement:leave_accept_request' leaverequest.id %}" class="btn btn-success">
<div class="spinner-border spinner-border-sm mt-2 btns-leave-{{leaverequest.id}} d-none" role="status">
<span class="sr-only">Loading...</span>
</div>
<a id="{{leaverequest.id}}" class="btn btn-success accept leave-accept btns-leave-{{leaverequest.id}}">
{% translate "Accept" %}
</a>
<a href="{% url 'groupmanagement:leave_reject_request' leaverequest.id %}" class="btn btn-danger">
<a id="{{leaverequest.id}}" class="btn btn-danger reject leave-reject btns-leave-{{leaverequest.id}}">
{% translate "Reject" %}
</a>
</td>
<td>
{% if leaverequest.main_char %}
{{ leaverequest.main_char.corporation_name }}
{% else %}
{% translate "(unknown)" %}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
@@ -172,3 +193,189 @@
{% endif %}
</div>
{% endblock content %}
{% block extra_javascript %}
{% include 'bundles/datatables-js-bs5.html' %}
{% include "bundles/filterdropdown-js.html" %}
<script>
$(document).ready(function () {
let tableAdd = $("#table-add").DataTable({
filterDropDown: {
columns: [
{
idx: 4,
},
{
idx: 2,
}
],
bootstrap: true,
bootstrap_version: 5
},
columnDefs: [
{
target: 4,
visible: false,
},
],
paging: false,
responsive: true,
pageLength: -1
});
let tableRem = $("#table-rem").DataTable({
filterDropDown: {
columns: [
{
idx: 4,
},
{
idx: 2,
}
],
bootstrap: true,
bootstrap_version: 5
},
columnDefs: [
{
target: 4,
visible: false,
},
],
paging: false,
responsive: true,
pageLength: -1
});
// URL's for fetch requests
let acceptJoinURL = "{% url 'groupmanagement:accept_request' 0 %}";
acceptJoinURL = acceptJoinURL.substring(0, acceptJoinURL.length-2);
let rejectJoinURL = "{% url 'groupmanagement:reject_request' 0 %}";
rejectJoinURL = rejectJoinURL.substring(0, rejectJoinURL.length-2);
let acceptLeaveURL = "{% url 'groupmanagement:leave_accept_request' 0 %}";
acceptLeaveURL = acceptLeaveURL.substring(0, acceptLeaveURL.length-2);
let rejectLeaveURL = "{% url 'groupmanagement:leave_reject_request' 0 %}";
rejectLeaveURL = rejectLeaveURL.substring(0, rejectLeaveURL.length-2);
function removeRow(table, classLookup){
let btn = $(classLookup);
table.row($(btn[0]).parents('tr')).remove().draw();
}
function toggleButtons(classLookup){
let elems = document.querySelectorAll(classLookup);
elems.forEach(
function(e) {
e.classList.toggle('d-none');
}
);
}
function hitAuth(classLookup, table, URL){
toggleButtons(classLookup);
let output = fetch(URL)
.then(response => {
if (!response.ok) {
toggleButtons(classLookup);
return true;
}
removeRow(table, classLookup)
})
.catch(error => {
toggleButtons(classLookup);
return false;
});
toggleButtons(classLookup);
return output;
}
function decreaseCounterElement(elem){
count = Number(elem.innerText);
count -= 1;
if (!count){
elem.classList.add("d-none");
} else {
elem.innerText = count;
}
}
function decreaseCounter(id){
elem = document.getElementById(id);
if (elem){decreaseCounterElement(elem)}
}
function decreaseMenuCounter(){
decreaseCounter("globalNotificationCount");
let elem = document.querySelector("a[href='{% url "groupmanagement:management" %}']");
if (elem) {
let badge = elem.parentElement.querySelector("span");
if (badge){decreaseCounterElement(badge)}
if (elem.parentElement.parentElement.parentElement.tagName === "LI"){
let folderBadge = elem.parentElement.parentElement.parentElement.querySelector("span");
if (folderBadge){decreaseCounterElement(folderBadge)}
}
}
}
let acceptJoinButtons = document.querySelectorAll(".join-accept");
acceptJoinButtons.forEach(function(elem) {
elem.addEventListener("click", function(event) {
url = `${acceptJoinURL}${event.target.id}/`
let elemClass = `.btns-join-${event.target.id}`
if (hitAuth(elemClass, tableAdd, url)){
decreaseCounter("acceptRequestsCounter")
decreaseMenuCounter()
}
});
});
let rejectJoinButtons = document.querySelectorAll(".join-reject");
rejectJoinButtons.forEach(function(elem) {
elem.addEventListener("click", function(event) {
url = `${rejectJoinURL}${event.target.id}/`
let elemClass = `.btns-join-${event.target.id}`
if (hitAuth(elemClass, tableAdd, url)){
decreaseCounter("acceptRequestsCounter")
decreaseMenuCounter()
}
});
});
let acceptLeaveButtons = document.querySelectorAll(".leave-accept");
acceptLeaveButtons.forEach(function(elem) {
elem.addEventListener("click", function(event) {
url = `${acceptLeaveURL}${event.target.id}/`
let elemClass = `.btns-leave-${event.target.id}`
if (hitAuth(elemClass, tableRem, url)){
decreaseCounter("leaveRequestsCounter")
decreaseMenuCounter()
}
});
});
let rejectLeaveButtons = document.querySelectorAll(".leave-reject");
rejectLeaveButtons.forEach(function(elem) {
elem.addEventListener("click", function(event) {
url = `${rejectLeaveURL}${event.target.id}/`
let elemClass = `.btns-leave-${event.target.id}`
if (hitAuth(elemClass, tableRem, url)){
decreaseCounter("leaveRequestsCounter")
decreaseMenuCounter()
}
});
});
// Filter Dropdown sets widths so lets remove them when we tab change so they actually show.
$('a[data-bs-toggle="tab"]').on('shown.bs.tab', function (e) {
let elems = document.querySelectorAll(".form-select");
elems.forEach(
function(e) {
e.style.maxWidth = "";
}
);
});
});
</script>
{% endblock extra_javascript %}
{% block extra_css %}
{% include 'bundles/datatables-css-bs5.html' %}
{% endblock %}

View File

@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-19 20:23+1000\n"
"POT-Creation-Date: 2025-09-21 13:44+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Tomas Skarecky <t.skarecky@gmail.com>, 2024\n"
"Language-Team: Czech (Czech Republic) (https://app.transifex.com/alliance-auth/teams/107430/cs_CZ/)\n"
@@ -62,7 +62,7 @@ msgstr ""
"přístupem:%s"
#: allianceauth/authentication/models.py:72
#: allianceauth/project_template/project_name/settings/base.py:106
#: allianceauth/project_template/project_name/settings/base.py:104
msgid "English"
msgstr "Angličtina"
@@ -71,57 +71,57 @@ msgid "Czech"
msgstr ""
#: allianceauth/authentication/models.py:74
#: allianceauth/project_template/project_name/settings/base.py:108
#: allianceauth/project_template/project_name/settings/base.py:106
msgid "German"
msgstr "Němčina"
#: allianceauth/authentication/models.py:75
#: allianceauth/project_template/project_name/settings/base.py:109
#: allianceauth/project_template/project_name/settings/base.py:107
msgid "Spanish"
msgstr "Španělština"
#: allianceauth/authentication/models.py:76
#: allianceauth/project_template/project_name/settings/base.py:110
#: allianceauth/project_template/project_name/settings/base.py:108
msgid "Italian"
msgstr "Italština"
#: allianceauth/authentication/models.py:77
#: allianceauth/project_template/project_name/settings/base.py:111
#: allianceauth/project_template/project_name/settings/base.py:109
msgid "Japanese"
msgstr "Japonština"
#: allianceauth/authentication/models.py:78
#: allianceauth/project_template/project_name/settings/base.py:112
#: allianceauth/project_template/project_name/settings/base.py:110
msgid "Korean"
msgstr "Korejština"
#: allianceauth/authentication/models.py:79
#: allianceauth/project_template/project_name/settings/base.py:113
#: allianceauth/project_template/project_name/settings/base.py:111
msgid "French"
msgstr "Francouzština"
#: allianceauth/authentication/models.py:80
#: allianceauth/project_template/project_name/settings/base.py:116
#: allianceauth/project_template/project_name/settings/base.py:114
msgid "Russian"
msgstr "Ruština"
#: allianceauth/authentication/models.py:81
#: allianceauth/project_template/project_name/settings/base.py:114
#: allianceauth/project_template/project_name/settings/base.py:112
msgid "Dutch"
msgstr ""
#: allianceauth/authentication/models.py:82
#: allianceauth/project_template/project_name/settings/base.py:115
#: allianceauth/project_template/project_name/settings/base.py:113
msgid "Polish"
msgstr ""
#: allianceauth/authentication/models.py:83
#: allianceauth/project_template/project_name/settings/base.py:117
#: allianceauth/project_template/project_name/settings/base.py:115
msgid "Ukrainian"
msgstr "Ukrajinština"
#: allianceauth/authentication/models.py:84
#: allianceauth/project_template/project_name/settings/base.py:118
#: allianceauth/project_template/project_name/settings/base.py:116
msgid "Simplified Chinese"
msgstr ""
@@ -166,14 +166,12 @@ msgstr "Postavy"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:4
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
msgid "Add Character"
msgstr "Přidat postavu"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:10
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:8
msgid "Change Main"
msgstr "Změnit postavu"
@@ -230,8 +228,8 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:168
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
#: allianceauth/hrapplications/templates/hrapplications/view.html:94
#: allianceauth/srp/templates/srp/data.html:83
#: allianceauth/srp/templates/srp/management.html:53
#: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/management.html:51
msgid "Actions"
msgstr "Akce"
@@ -282,7 +280,7 @@ msgstr "Registrace"
msgid "Invalid or expired activation link."
msgstr "Nevalidní, nebo expirovaný aktivační odkaz."
#: allianceauth/authentication/views.py:158
#: allianceauth/authentication/views.py:159
#, python-format
msgid ""
"Cannot change main character to %(char)s: character owned by a different "
@@ -290,22 +288,22 @@ msgid ""
msgstr ""
"Není možné změnit hlavní postavu na %(char)s: postava patří pod jiný účet."
#: allianceauth/authentication/views.py:165
#: allianceauth/authentication/views.py:166
#, python-format
msgid "Changed main character to %s"
msgstr "Hlavní postava změněna na %s"
#: allianceauth/authentication/views.py:179
#: allianceauth/authentication/views.py:180
#, python-format
msgid "Added %(name)s to your account."
msgstr "%(name)spřidána k vačenu účtu"
#: allianceauth/authentication/views.py:181
#: allianceauth/authentication/views.py:182
#, python-format
msgid "Failed to add %(name)s to your account: they already have an account."
msgstr "Přidání %(name)sk vašemu účtu se nezdařilo: již mají účet"
#: allianceauth/authentication/views.py:226
#: allianceauth/authentication/views.py:227
msgid ""
"Unable to authenticate as the selected character. Please log in with the "
"main character associated with this account."
@@ -313,11 +311,11 @@ msgstr ""
"Není možné váš ověřit pomocí vybrané postavu. Prosím přihlaste se pomocí "
"hlavní postavy spojené s tímto účtem."
#: allianceauth/authentication/views.py:293
#: allianceauth/authentication/views.py:294
msgid "Registration token has expired."
msgstr "Registrační token expiroval"
#: allianceauth/authentication/views.py:354
#: allianceauth/authentication/views.py:355
msgid ""
"Sent confirmation email. Please follow the link to confirm your email "
"address."
@@ -325,11 +323,11 @@ msgstr ""
"Byl vám odeslán potvrzovací email. Otevřete prosím odkaz pro potvrzení "
"emailové adresy. "
#: allianceauth/authentication/views.py:360
#: allianceauth/authentication/views.py:361
msgid "Confirmed your email address. Please login to continue."
msgstr "Emailová adresa potvrzena. Přihlaste se prosím."
#: allianceauth/authentication/views.py:366
#: allianceauth/authentication/views.py:367
msgid "Registration of new accounts is not allowed at this time."
msgstr "Momentálně není povolena registrace nových účtů."
@@ -346,11 +344,11 @@ msgstr ""
msgid "Corporations"
msgstr "Korporace"
#: allianceauth/corputils/templates/corputils/base.html:35
#: allianceauth/corputils/templates/corputils/base.html:31
msgid "Add corporation"
msgstr "Přidat korporaci"
#: allianceauth/corputils/templates/corputils/base.html:51
#: allianceauth/corputils/templates/corputils/base.html:47
msgid "Search all corporations..."
msgstr "Vyhledat všechny korporace"
@@ -498,7 +496,7 @@ msgid "Fleet Activity Tracking"
msgstr ""
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8
#: allianceauth/srp/templates/srp/management.html:44
#: allianceauth/srp/templates/srp/management.html:42
msgid "Fleet Name"
msgstr "Jméno flotily"
@@ -988,7 +986,7 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:123
#: allianceauth/hrapplications/templates/hrapplications/management.html:167
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
#: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/data.html:79
msgid "Status"
msgstr ""
@@ -1001,7 +999,7 @@ msgid "Hidden"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
msgid "Open"
msgstr ""
@@ -1046,17 +1044,9 @@ msgstr ""
msgid "Leave"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
#: allianceauth/srp/templates/srp/data.html:120
#: allianceauth/srp/templates/srp/management.html:87
msgid "Pending"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
msgid "Request pending"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
@@ -1067,7 +1057,11 @@ msgstr ""
msgid "Request"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:99
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:93
msgid "Retract"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:103
msgid "No groups available."
msgstr ""
@@ -1196,6 +1190,19 @@ msgstr ""
msgid "Applied to leave group %(group)s."
msgstr ""
#: allianceauth/groupmanagement/views.py:438
msgid "You cannot retract that request"
msgstr ""
#: allianceauth/groupmanagement/views.py:450
#, python-format
msgid "Retracted application to group %(group)s."
msgstr ""
#: allianceauth/groupmanagement/views.py:458
msgid "You have no open request for that group."
msgstr ""
#: allianceauth/hrapplications/apps.py:8
msgid "HR Applications"
msgstr ""
@@ -1266,12 +1273,23 @@ msgstr ""
msgid "Username"
msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
#: allianceauth/srp/templates/srp/data.html:118
#: allianceauth/srp/templates/srp/management.html:85
msgid "Pending"
msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:48
#: allianceauth/hrapplications/templates/hrapplications/management.html:141
#: allianceauth/hrapplications/templates/hrapplications/management.html:185
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
#: allianceauth/hrapplications/templates/hrapplications/view.html:21
#: allianceauth/srp/templates/srp/data.html:112
#: allianceauth/srp/templates/srp/data.html:110
msgid "Approved"
msgstr ""
@@ -1279,7 +1297,7 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
#: allianceauth/hrapplications/templates/hrapplications/management.html:187
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
#: allianceauth/srp/templates/srp/data.html:116
#: allianceauth/srp/templates/srp/data.html:114
msgid "Rejected"
msgstr ""
@@ -1514,8 +1532,8 @@ msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
msgid "Sign In"
msgstr ""
@@ -1543,11 +1561,11 @@ msgstr ""
msgid "Read"
msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:32
#: allianceauth/notifications/templates/notifications/list.html:31
msgid "Mark all notifications as read"
msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:38
#: allianceauth/notifications/templates/notifications/list.html:35
msgid "Delete all read notifications"
msgstr ""
@@ -1612,12 +1630,12 @@ msgid "Operation Type"
msgstr ""
#: allianceauth/optimer/form.py:17
#: allianceauth/srp/templates/srp/management.html:47
#: allianceauth/srp/templates/srp/management.html:45
msgid "Fleet Commander"
msgstr ""
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
#: allianceauth/srp/templates/srp/data.html:72
#: allianceauth/srp/templates/srp/data.html:70
msgid "Additional Info"
msgstr ""
@@ -1626,7 +1644,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
msgstr ""
#: allianceauth/optimer/templates/optimer/add.html:8
#: allianceauth/optimer/templates/optimer/management.html:18
#: allianceauth/optimer/templates/optimer/management.html:16
msgid "Create Operation"
msgstr ""
@@ -1675,26 +1693,26 @@ msgstr ""
msgid "Fleet Operation Management"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:28
#: allianceauth/timerboard/templates/timerboard/view.html:32
#: allianceauth/optimer/templates/optimer/management.html:26
#: allianceauth/timerboard/templates/timerboard/view.html:30
msgid "Current EVE time:"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:36
#: allianceauth/optimer/templates/optimer/management.html:34
msgid "Next Fleet Operations"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:44
#: allianceauth/timerboard/templates/timerboard/view.html:63
#: allianceauth/optimer/templates/optimer/management.html:42
#: allianceauth/timerboard/templates/timerboard/view.html:61
msgid "No upcoming timers."
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:52
#: allianceauth/optimer/templates/optimer/management.html:50
msgid "Past Fleet Operations"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:60
#: allianceauth/timerboard/templates/timerboard/view.html:81
#: allianceauth/optimer/templates/optimer/management.html:58
#: allianceauth/timerboard/templates/timerboard/view.html:79
msgid "No past timers."
msgstr ""
@@ -2262,7 +2280,7 @@ msgid "Enabled"
msgstr ""
#: allianceauth/services/templates/services/service_status.html:7
#: allianceauth/srp/templates/srp/management.html:78
#: allianceauth/srp/templates/srp/management.html:76
msgid "Disabled"
msgstr ""
@@ -2300,12 +2318,12 @@ msgid "Ship Replacement"
msgstr ""
#: allianceauth/srp/form.py:9
#: allianceauth/srp/templates/srp/management.html:45
#: allianceauth/srp/templates/srp/management.html:43
msgid "Fleet Time"
msgstr ""
#: allianceauth/srp/form.py:10
#: allianceauth/srp/templates/srp/management.html:46
#: allianceauth/srp/templates/srp/management.html:44
msgid "Fleet Doctrine"
msgstr ""
@@ -2354,7 +2372,7 @@ msgid "Give this link to the line members."
msgstr ""
#: allianceauth/srp/templates/srp/data.html:8
#: allianceauth/srp/templates/srp/data.html:39
#: allianceauth/srp/templates/srp/data.html:37
msgid "SRP Fleet Data"
msgstr ""
@@ -2362,64 +2380,64 @@ msgstr ""
msgid "View Fleets"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:26
#: allianceauth/srp/templates/srp/data.html:24
msgid "Mark Incomplete"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:30
#: allianceauth/srp/templates/srp/data.html:28
msgid "Mark Completed"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:48
#: allianceauth/srp/templates/srp/data.html:142
#: allianceauth/srp/templates/srp/data.html:46
#: allianceauth/srp/templates/srp/data.html:140
msgid "Total Losses:"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:49
#: allianceauth/srp/templates/srp/data.html:143
#: allianceauth/srp/templates/srp/management.html:36
#: allianceauth/srp/templates/srp/data.html:47
#: allianceauth/srp/templates/srp/data.html:141
#: allianceauth/srp/templates/srp/management.html:34
msgid "Total ISK Cost:"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:60
#: allianceauth/srp/templates/srp/data.html:154
#: allianceauth/srp/templates/srp/data.html:58
#: allianceauth/srp/templates/srp/data.html:152
msgid "Are you sure you want to delete SRP requests?"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:70
#: allianceauth/srp/templates/srp/data.html:68
msgid "Pilot Name"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:71
#: allianceauth/srp/templates/srp/data.html:69
msgid "Killboard Link"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:73
#: allianceauth/srp/templates/srp/data.html:71
msgid "Ship Type"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:74
#: allianceauth/srp/templates/srp/data.html:72
msgid "Killboard Loss Amt"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:76
#: allianceauth/srp/templates/srp/data.html:74
msgid "SRP ISK Cost"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:77
#: allianceauth/srp/templates/srp/data.html:75
msgid "Click value to edit Enter to save & next ESC to cancel"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:80
#: allianceauth/srp/templates/srp/data.html:78
msgid "Post Time"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:102
#: allianceauth/srp/templates/srp/management.html:70
#: allianceauth/srp/templates/srp/data.html:100
#: allianceauth/srp/templates/srp/management.html:68
msgid "Link"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:163
#: allianceauth/srp/templates/srp/data.html:161
msgid "No SRP requests for this fleet."
msgstr ""
@@ -2431,39 +2449,39 @@ msgstr ""
msgid "View All"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:27
#: allianceauth/srp/templates/srp/management.html:25
msgid "Add SRP Fleet"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:48
#: allianceauth/srp/templates/srp/management.html:46
msgid "Fleet AAR"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:49
#: allianceauth/srp/templates/srp/management.html:47
msgid "Fleet SRP Code"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:50
#: allianceauth/srp/templates/srp/management.html:48
msgid "Fleet ISK Cost"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:51
#: allianceauth/srp/templates/srp/management.html:49
msgid "SRP Status"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:52
#: allianceauth/srp/templates/srp/management.html:50
msgid "Pending Requests"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:91
#: allianceauth/srp/templates/srp/management.html:89
msgid "Completed"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:108
#: allianceauth/srp/templates/srp/management.html:106
msgid "Are you sure you want to delete this SRP code and its contents?"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:129
#: allianceauth/srp/templates/srp/management.html:127
msgid "No SRP fleets created."
msgstr ""
@@ -2599,67 +2617,120 @@ msgstr ""
msgid "Your Server received an ESI error response code of "
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
msgid "Alliance Auth Notifications"
#: allianceauth/templates/allianceauth/admin-status/overview.html:11
msgid "second"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "No notifications at this time"
#: allianceauth/templates/allianceauth/admin-status/overview.html:12
msgid "seconds"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
msgid "Powered by GitLab"
#: allianceauth/templates/allianceauth/admin-status/overview.html:13
msgid "minute"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
msgid "Support Discord"
#: allianceauth/templates/allianceauth/admin-status/overview.html:14
msgid "minutes"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:49
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
msgid "Software Version"
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
msgid "hour"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:56
msgid "Current"
#: allianceauth/templates/allianceauth/admin-status/overview.html:16
msgid "hours"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
msgid "Latest Stable"
#: allianceauth/templates/allianceauth/admin-status/overview.html:17
msgid "N/A"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:68
msgid "Update available"
#: allianceauth/templates/allianceauth/admin-status/overview.html:18
msgid "ERROR"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
msgid "Latest Pre-Release"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
msgid "Pre-Release available"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
msgid "Task Queue"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
#, python-format
msgid ""
"\n"
" Status of %(total)s processed tasks • last %(latest)s\n"
" "
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:112
#: allianceauth/templates/allianceauth/admin-status/overview.html:19
msgid "running"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:113
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "queued"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:21
msgid "succeeded"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:22
msgid "retried"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:23
msgid "failed"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
msgid "Debug mode"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:34
msgid ""
"Debug mode is currently turned on!<br>Make sure to turn it off as soon as "
"you are finished testing."
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:46
msgid "Alliance Auth Notifications"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:58
msgid "No notifications at this time"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:67
msgid "Powered by GitLab"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:73
msgid "Support Discord"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:87
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
msgid "Software Version"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:94
msgid "Current"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:101
msgid "Latest Stable"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:106
msgid "Update available"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:114
msgid "Latest Pre-Release"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:119
msgid "Pre-Release available"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:129
msgid "Task Queue"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:134
msgid ""
"\n"
" Status of <span id=\"total-task-count\">?</span> processed tasks • last <span id=\"celery-uptime\">?</span>\n"
" "
msgstr ""
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
msgid "AA Documentation"
msgstr ""
@@ -2883,7 +2954,7 @@ msgid "Theft"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
#: allianceauth/timerboard/templates/timerboard/view.html:54
#: allianceauth/timerboard/templates/timerboard/view.html:52
msgid "Upcoming Timers"
msgstr ""
@@ -2911,7 +2982,7 @@ msgid "Create Timer"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9
#: allianceauth/timerboard/templates/timerboard/view.html:22
#: allianceauth/timerboard/templates/timerboard/view.html:20
msgid "Create Structure Timer"
msgstr ""
@@ -2929,11 +3000,11 @@ msgstr ""
msgid "Structure Timer Management"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:41
#: allianceauth/timerboard/templates/timerboard/view.html:39
msgid "Corporation Timers"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:72
#: allianceauth/timerboard/templates/timerboard/view.html:70
msgid "Past Timers"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-07-03 09:07+1000\n"
"POT-Creation-Date: 2026-01-21 15:33+1000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -57,7 +57,7 @@ msgid "You are not allowed to add or remove these restricted groups: %s"
msgstr ""
#: allianceauth/authentication/models.py:72
#: allianceauth/project_template/project_name/settings/base.py:104
#: allianceauth/project_template/project_name/settings/base.py:105
msgid "English"
msgstr ""
@@ -66,57 +66,57 @@ msgid "Czech"
msgstr ""
#: allianceauth/authentication/models.py:74
#: allianceauth/project_template/project_name/settings/base.py:106
#: allianceauth/project_template/project_name/settings/base.py:107
msgid "German"
msgstr ""
#: allianceauth/authentication/models.py:75
#: allianceauth/project_template/project_name/settings/base.py:107
#: allianceauth/project_template/project_name/settings/base.py:108
msgid "Spanish"
msgstr ""
#: allianceauth/authentication/models.py:76
#: allianceauth/project_template/project_name/settings/base.py:108
#: allianceauth/project_template/project_name/settings/base.py:109
msgid "Italian"
msgstr ""
#: allianceauth/authentication/models.py:77
#: allianceauth/project_template/project_name/settings/base.py:109
#: allianceauth/project_template/project_name/settings/base.py:110
msgid "Japanese"
msgstr ""
#: allianceauth/authentication/models.py:78
#: allianceauth/project_template/project_name/settings/base.py:110
#: allianceauth/project_template/project_name/settings/base.py:111
msgid "Korean"
msgstr ""
#: allianceauth/authentication/models.py:79
#: allianceauth/project_template/project_name/settings/base.py:111
#: allianceauth/project_template/project_name/settings/base.py:112
msgid "French"
msgstr ""
#: allianceauth/authentication/models.py:80
#: allianceauth/project_template/project_name/settings/base.py:114
#: allianceauth/project_template/project_name/settings/base.py:115
msgid "Russian"
msgstr ""
#: allianceauth/authentication/models.py:81
#: allianceauth/project_template/project_name/settings/base.py:112
#: allianceauth/project_template/project_name/settings/base.py:113
msgid "Dutch"
msgstr ""
#: allianceauth/authentication/models.py:82
#: allianceauth/project_template/project_name/settings/base.py:113
#: allianceauth/project_template/project_name/settings/base.py:114
msgid "Polish"
msgstr ""
#: allianceauth/authentication/models.py:83
#: allianceauth/project_template/project_name/settings/base.py:115
#: allianceauth/project_template/project_name/settings/base.py:116
msgid "Ukrainian"
msgstr ""
#: allianceauth/authentication/models.py:84
#: allianceauth/project_template/project_name/settings/base.py:116
#: allianceauth/project_template/project_name/settings/base.py:117
msgid "Simplified Chinese"
msgstr ""
@@ -125,22 +125,30 @@ msgstr ""
msgid "Language"
msgstr ""
#: allianceauth/authentication/models.py:105
#: allianceauth/authentication/models.py:106
#: allianceauth/templates/allianceauth/night-toggle.html:6
msgid "Night Mode"
msgstr ""
#: allianceauth/authentication/models.py:109
#: allianceauth/authentication/models.py:110
#: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme"
msgstr ""
#: allianceauth/authentication/models.py:126
#: allianceauth/authentication/models.py:117
msgid "Minimize Sidebar Menu"
msgstr ""
#: allianceauth/authentication/models.py:119
msgid "Keep the sidebar menu minimized"
msgstr ""
#: allianceauth/authentication/models.py:133
#, python-format
msgid "State changed to: %s"
msgstr ""
#: allianceauth/authentication/models.py:127
#: allianceauth/authentication/models.py:134
#, python-format
msgid "Your user's state is now: %(state)s"
msgstr ""
@@ -161,14 +169,12 @@ msgstr ""
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:4
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
msgid "Add Character"
msgstr ""
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:10
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:8
msgid "Change Main"
msgstr ""
@@ -202,8 +208,8 @@ msgstr ""
#: allianceauth/authentication/templates/authentication/tokens.html:7
#: allianceauth/authentication/templates/authentication/tokens.html:11
#: allianceauth/menu/templates/menu/menu-user.html:133
#: allianceauth/menu/templates/menu/menu-user.html:136
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/menu/templates/menu/menu-user.html:161
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
msgid "Token Management"
msgstr ""
@@ -225,8 +231,8 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:168
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
#: allianceauth/hrapplications/templates/hrapplications/view.html:94
#: allianceauth/srp/templates/srp/data.html:83
#: allianceauth/srp/templates/srp/management.html:53
#: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/management.html:51
msgid "Actions"
msgstr ""
@@ -239,8 +245,8 @@ msgstr ""
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:41
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:30
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:29
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:55
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:118
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:54
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:129
msgid "Character"
msgstr ""
@@ -277,49 +283,49 @@ msgstr ""
msgid "Invalid or expired activation link."
msgstr ""
#: allianceauth/authentication/views.py:158
#: allianceauth/authentication/views.py:159
#, python-format
msgid ""
"Cannot change main character to %(char)s: character owned by a different "
"account."
msgstr ""
#: allianceauth/authentication/views.py:165
#: allianceauth/authentication/views.py:166
#, python-format
msgid "Changed main character to %s"
msgstr ""
#: allianceauth/authentication/views.py:179
#: allianceauth/authentication/views.py:180
#, python-format
msgid "Added %(name)s to your account."
msgstr ""
#: allianceauth/authentication/views.py:181
#: allianceauth/authentication/views.py:182
#, python-format
msgid "Failed to add %(name)s to your account: they already have an account."
msgstr ""
#: allianceauth/authentication/views.py:226
#: allianceauth/authentication/views.py:227
msgid ""
"Unable to authenticate as the selected character. Please log in with the "
"main character associated with this account."
msgstr ""
#: allianceauth/authentication/views.py:293
#: allianceauth/authentication/views.py:294
msgid "Registration token has expired."
msgstr ""
#: allianceauth/authentication/views.py:354
#: allianceauth/authentication/views.py:355
msgid ""
"Sent confirmation email. Please follow the link to confirm your email "
"address."
msgstr ""
#: allianceauth/authentication/views.py:360
#: allianceauth/authentication/views.py:361
msgid "Confirmed your email address. Please login to continue."
msgstr ""
#: allianceauth/authentication/views.py:366
#: allianceauth/authentication/views.py:367
msgid "Registration of new accounts is not allowed at this time."
msgstr ""
@@ -336,11 +342,11 @@ msgstr ""
msgid "Corporations"
msgstr ""
#: allianceauth/corputils/templates/corputils/base.html:35
#: allianceauth/corputils/templates/corputils/base.html:31
msgid "Add corporation"
msgstr ""
#: allianceauth/corputils/templates/corputils/base.html:51
#: allianceauth/corputils/templates/corputils/base.html:47
msgid "Search all corporations..."
msgstr ""
@@ -377,6 +383,8 @@ msgstr ""
#: allianceauth/corputils/templates/corputils/corpstats.html:125
#: allianceauth/corputils/templates/corputils/search.html:18
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:31
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:58
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:133
#: allianceauth/hrapplications/templates/hrapplications/management.html:35
#: allianceauth/hrapplications/templates/hrapplications/management.html:122
#: allianceauth/hrapplications/templates/hrapplications/management.html:166
@@ -488,7 +496,7 @@ msgid "Fleet Activity Tracking"
msgstr ""
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8
#: allianceauth/srp/templates/srp/management.html:44
#: allianceauth/srp/templates/srp/management.html:42
msgid "Fleet Name"
msgstr ""
@@ -749,14 +757,18 @@ msgstr ""
#: allianceauth/fleetactivitytracking/views.py:323
#, python-brace-format
msgid ""
"Cannot register the fleet participation for {character.character_name}. The "
"character needs to be online."
"Cannot register the fleet participation for {character_name}. The character "
"needs to be online."
msgstr ""
#: allianceauth/framework/apps.py:16
msgid "Framework"
msgstr ""
#: allianceauth/framework/templates/framework/datatables/process-indicator.html:8
msgid "Loading …"
msgstr ""
#: allianceauth/groupmanagement/apps.py:8
#: allianceauth/groupmanagement/auth_hooks.py:18
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:18
@@ -818,8 +830,9 @@ msgstr ""
#: allianceauth/groupmanagement/models.py:143
msgid ""
"Group leaders can process requests for this group. Use the <code>auth."
"group_management</code> permission to allow a user to manage all groups.<br>"
"Group leaders can process requests for this group. Use the "
"<code>auth.group_management</code> permission to allow a user to manage all "
"groups.<br>"
msgstr ""
#: allianceauth/groupmanagement/models.py:153
@@ -927,8 +940,8 @@ msgid "Group Members"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:30
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:56
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:119
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:55
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:130
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:33
msgid "Organization"
msgstr ""
@@ -940,7 +953,9 @@ msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:61
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:85
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:148
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:106
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:160
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:181
#: allianceauth/permissions_tool/templates/permissions_tool/audit_row.html:18
msgid "(unknown)"
msgstr ""
@@ -973,7 +988,7 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:123
#: allianceauth/hrapplications/templates/hrapplications/management.html:167
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
#: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/data.html:79
msgid "Status"
msgstr ""
@@ -986,7 +1001,7 @@ msgid "Hidden"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
msgid "Open"
msgstr ""
@@ -1020,8 +1035,8 @@ msgid "Leaders"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:37
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:57
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:120
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:56
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:131
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:30
#: allianceauth/services/modules/openfire/forms.py:6
msgid "Group"
@@ -1031,17 +1046,9 @@ msgstr ""
msgid "Leave"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
#: allianceauth/srp/templates/srp/data.html:120
#: allianceauth/srp/templates/srp/management.html:87
msgid "Pending"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
msgid "Request pending"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
@@ -1052,7 +1059,11 @@ msgstr ""
msgid "Request"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:99
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:93
msgid "Retract"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:103
msgid "No groups available."
msgstr ""
@@ -1074,22 +1085,22 @@ msgstr ""
msgid "Group Membership"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:93
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:156
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:96
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:171
msgid "Accept"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:96
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:160
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:99
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:174
#: allianceauth/hrapplications/templates/hrapplications/view.html:104
msgid "Reject"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:106
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:117
msgid "No group add requests."
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:169
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:190
msgid "No group leave requests."
msgstr ""
@@ -1181,6 +1192,19 @@ msgstr ""
msgid "Applied to leave group %(group)s."
msgstr ""
#: allianceauth/groupmanagement/views.py:438
msgid "You cannot retract that request"
msgstr ""
#: allianceauth/groupmanagement/views.py:450
#, python-format
msgid "Retracted application to group %(group)s."
msgstr ""
#: allianceauth/groupmanagement/views.py:458
msgid "You have no open request for that group."
msgstr ""
#: allianceauth/hrapplications/apps.py:8
msgid "HR Applications"
msgstr ""
@@ -1251,12 +1275,23 @@ msgstr ""
msgid "Username"
msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
#: allianceauth/srp/templates/srp/data.html:118
#: allianceauth/srp/templates/srp/management.html:85
msgid "Pending"
msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:48
#: allianceauth/hrapplications/templates/hrapplications/management.html:141
#: allianceauth/hrapplications/templates/hrapplications/management.html:185
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
#: allianceauth/hrapplications/templates/hrapplications/view.html:21
#: allianceauth/srp/templates/srp/data.html:112
#: allianceauth/srp/templates/srp/data.html:110
msgid "Approved"
msgstr ""
@@ -1264,7 +1299,7 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
#: allianceauth/hrapplications/templates/hrapplications/management.html:187
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
#: allianceauth/srp/templates/srp/data.html:116
#: allianceauth/srp/templates/srp/data.html:114
msgid "Rejected"
msgstr ""
@@ -1468,39 +1503,47 @@ msgid "Notifications"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Sidebar"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:93
msgid "Minimize Sidebar"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:102
msgid "Super User"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
#: allianceauth/menu/templates/menu/menu-user.html:108
#: allianceauth/menu/templates/menu/menu-user.html:111
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
#: allianceauth/menu/templates/menu/menu-user.html:119
#: allianceauth/menu/templates/menu/menu-user.html:122
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
#: allianceauth/menu/templates/menu/menu-user.html:130
#: allianceauth/menu/templates/menu/menu-user.html:133
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: allianceauth/menu/templates/menu/menu-user.html:143
#: allianceauth/menu/templates/menu/menu-user.html:146
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
msgid "Admin"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
#: allianceauth/menu/templates/menu/menu-user.html:169
#: allianceauth/menu/templates/menu/menu-user.html:172
msgid "Sign Out"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
#: allianceauth/menu/templates/menu/menu-user.html:180
#: allianceauth/menu/templates/menu/menu-user.html:183
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
msgid "Sign In"
msgstr ""
@@ -1528,11 +1571,11 @@ msgstr ""
msgid "Read"
msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:32
#: allianceauth/notifications/templates/notifications/list.html:31
msgid "Mark all notifications as read"
msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:38
#: allianceauth/notifications/templates/notifications/list.html:35
msgid "Delete all read notifications"
msgstr ""
@@ -1597,12 +1640,12 @@ msgid "Operation Type"
msgstr ""
#: allianceauth/optimer/form.py:17
#: allianceauth/srp/templates/srp/management.html:47
#: allianceauth/srp/templates/srp/management.html:45
msgid "Fleet Commander"
msgstr ""
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
#: allianceauth/srp/templates/srp/data.html:72
#: allianceauth/srp/templates/srp/data.html:70
msgid "Additional Info"
msgstr ""
@@ -1611,7 +1654,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
msgstr ""
#: allianceauth/optimer/templates/optimer/add.html:8
#: allianceauth/optimer/templates/optimer/management.html:18
#: allianceauth/optimer/templates/optimer/management.html:16
msgid "Create Operation"
msgstr ""
@@ -1660,26 +1703,26 @@ msgstr ""
msgid "Fleet Operation Management"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:28
#: allianceauth/timerboard/templates/timerboard/view.html:32
#: allianceauth/optimer/templates/optimer/management.html:26
#: allianceauth/timerboard/templates/timerboard/view.html:30
msgid "Current EVE time:"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:36
#: allianceauth/optimer/templates/optimer/management.html:34
msgid "Next Fleet Operations"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:44
#: allianceauth/timerboard/templates/timerboard/view.html:63
#: allianceauth/optimer/templates/optimer/management.html:42
#: allianceauth/timerboard/templates/timerboard/view.html:61
msgid "No upcoming timers."
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:52
#: allianceauth/optimer/templates/optimer/management.html:50
msgid "Past Fleet Operations"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:60
#: allianceauth/timerboard/templates/timerboard/view.html:81
#: allianceauth/optimer/templates/optimer/management.html:58
#: allianceauth/timerboard/templates/timerboard/view.html:79
msgid "No past timers."
msgstr ""
@@ -1759,9 +1802,9 @@ msgstr ""
msgid "That service account already exists"
msgstr ""
#: allianceauth/services/abstract.py:103
#: allianceauth/services/abstract.py:105
#, python-brace-format
msgid "Successfully set your {self.service_name} password"
msgid "Successfully set your {service_name} password"
msgstr ""
#: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12
@@ -2246,7 +2289,7 @@ msgid "Enabled"
msgstr ""
#: allianceauth/services/templates/services/service_status.html:7
#: allianceauth/srp/templates/srp/management.html:78
#: allianceauth/srp/templates/srp/management.html:76
msgid "Disabled"
msgstr ""
@@ -2283,12 +2326,12 @@ msgstr ""
msgid "Ship Replacement"
msgstr ""
#: allianceauth/srp/form.py:9 allianceauth/srp/templates/srp/management.html:45
#: allianceauth/srp/form.py:9 allianceauth/srp/templates/srp/management.html:43
msgid "Fleet Time"
msgstr ""
#: allianceauth/srp/form.py:10
#: allianceauth/srp/templates/srp/management.html:46
#: allianceauth/srp/templates/srp/management.html:44
msgid "Fleet Doctrine"
msgstr ""
@@ -2300,11 +2343,11 @@ msgstr ""
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
msgstr ""
#: allianceauth/srp/form.py:46
#: allianceauth/srp/form.py:49
msgid "Invalid Link. Please post a direct link to a killmail."
msgstr ""
#: allianceauth/srp/form.py:53
#: allianceauth/srp/form.py:56
msgid "After Action Report Link"
msgstr ""
@@ -2337,7 +2380,7 @@ msgid "Give this link to the line members."
msgstr ""
#: allianceauth/srp/templates/srp/data.html:8
#: allianceauth/srp/templates/srp/data.html:39
#: allianceauth/srp/templates/srp/data.html:37
msgid "SRP Fleet Data"
msgstr ""
@@ -2345,64 +2388,64 @@ msgstr ""
msgid "View Fleets"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:26
#: allianceauth/srp/templates/srp/data.html:24
msgid "Mark Incomplete"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:30
#: allianceauth/srp/templates/srp/data.html:28
msgid "Mark Completed"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:48
#: allianceauth/srp/templates/srp/data.html:142
#: allianceauth/srp/templates/srp/data.html:46
#: allianceauth/srp/templates/srp/data.html:140
msgid "Total Losses:"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:49
#: allianceauth/srp/templates/srp/data.html:143
#: allianceauth/srp/templates/srp/management.html:36
#: allianceauth/srp/templates/srp/data.html:47
#: allianceauth/srp/templates/srp/data.html:141
#: allianceauth/srp/templates/srp/management.html:34
msgid "Total ISK Cost:"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:60
#: allianceauth/srp/templates/srp/data.html:154
#: allianceauth/srp/templates/srp/data.html:58
#: allianceauth/srp/templates/srp/data.html:152
msgid "Are you sure you want to delete SRP requests?"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:70
#: allianceauth/srp/templates/srp/data.html:68
msgid "Pilot Name"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:71
#: allianceauth/srp/templates/srp/data.html:69
msgid "Killboard Link"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:73
#: allianceauth/srp/templates/srp/data.html:71
msgid "Ship Type"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:74
#: allianceauth/srp/templates/srp/data.html:72
msgid "Killboard Loss Amt"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:76
#: allianceauth/srp/templates/srp/data.html:74
msgid "SRP ISK Cost"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:77
#: allianceauth/srp/templates/srp/data.html:75
msgid "Click value to edit Enter to save & next ESC to cancel"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:80
#: allianceauth/srp/templates/srp/data.html:78
msgid "Post Time"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:102
#: allianceauth/srp/templates/srp/management.html:70
#: allianceauth/srp/templates/srp/data.html:100
#: allianceauth/srp/templates/srp/management.html:68
msgid "Link"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:163
#: allianceauth/srp/templates/srp/data.html:161
msgid "No SRP requests for this fleet."
msgstr ""
@@ -2414,39 +2457,39 @@ msgstr ""
msgid "View All"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:27
#: allianceauth/srp/templates/srp/management.html:25
msgid "Add SRP Fleet"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:48
#: allianceauth/srp/templates/srp/management.html:46
msgid "Fleet AAR"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:49
#: allianceauth/srp/templates/srp/management.html:47
msgid "Fleet SRP Code"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:50
#: allianceauth/srp/templates/srp/management.html:48
msgid "Fleet ISK Cost"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:51
#: allianceauth/srp/templates/srp/management.html:49
msgid "SRP Status"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:52
#: allianceauth/srp/templates/srp/management.html:50
msgid "Pending Requests"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:91
#: allianceauth/srp/templates/srp/management.html:89
msgid "Completed"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:108
#: allianceauth/srp/templates/srp/management.html:106
msgid "Are you sure you want to delete this SRP code and its contents?"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:129
#: allianceauth/srp/templates/srp/management.html:127
msgid "No SRP fleets created."
msgstr ""
@@ -2578,72 +2621,125 @@ msgstr ""
msgid "Saved changes to SRP fleet %(fleetname)s"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:4
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:5
msgid "Your Server received an ESI error response code of "
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
msgid "Alliance Auth Notifications"
#: allianceauth/templates/allianceauth/admin-status/overview.html:11
msgid "second"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "No notifications at this time"
#: allianceauth/templates/allianceauth/admin-status/overview.html:12
msgid "seconds"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
msgid "Powered by GitLab"
#: allianceauth/templates/allianceauth/admin-status/overview.html:13
msgid "minute"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
msgid "Support Discord"
#: allianceauth/templates/allianceauth/admin-status/overview.html:14
msgid "minutes"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:49
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
msgid "Software Version"
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
msgid "hour"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:56
msgid "Current"
#: allianceauth/templates/allianceauth/admin-status/overview.html:16
msgid "hours"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
msgid "Latest Stable"
#: allianceauth/templates/allianceauth/admin-status/overview.html:17
msgid "N/A"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:68
msgid "Update available"
#: allianceauth/templates/allianceauth/admin-status/overview.html:18
msgid "ERROR"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
msgid "Latest Pre-Release"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
msgid "Pre-Release available"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
msgid "Task Queue"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
#, python-format
msgid ""
"\n"
" Status of %(total)s processed tasks • last "
"%(latest)s\n"
" "
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:112
#: allianceauth/templates/allianceauth/admin-status/overview.html:19
msgid "running"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:113
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "queued"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:21
msgid "succeeded"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:22
msgid "retried"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:23
msgid "failed"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
msgid "Debug mode"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:34
msgid ""
"Debug mode is currently turned on!<br>Make sure to turn it off as soon as "
"you are finished testing."
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:46
msgid "Alliance Auth Notifications"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:58
msgid "No notifications at this time"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:67
msgid "Powered by GitLab"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:73
msgid "Support Discord"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:87
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
msgid "Software Version"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:94
msgid "Current"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:101
msgid "Latest Stable"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:106
msgid "Update available"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:114
msgid "Latest Pre-Release"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:119
msgid "Pre-Release available"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:129
msgid "Task Queue"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:134
msgid ""
"\n"
" Status of <span id=\"total-task-count\">?</span> "
"processed tasks • last <span id=\"celery-uptime\">?</span>\n"
" "
msgstr ""
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
msgid "AA Documentation"
msgstr ""
@@ -2867,7 +2963,7 @@ msgid "Theft"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
#: allianceauth/timerboard/templates/timerboard/view.html:54
#: allianceauth/timerboard/templates/timerboard/view.html:52
msgid "Upcoming Timers"
msgstr ""
@@ -2895,7 +2991,7 @@ msgid "Create Timer"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9
#: allianceauth/timerboard/templates/timerboard/view.html:22
#: allianceauth/timerboard/templates/timerboard/view.html:20
msgid "Create Structure Timer"
msgstr ""
@@ -2913,11 +3009,11 @@ msgstr ""
msgid "Structure Timer Management"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:41
#: allianceauth/timerboard/templates/timerboard/view.html:39
msgid "Corporation Timers"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:72
#: allianceauth/timerboard/templates/timerboard/view.html:70
msgid "Past Timers"
msgstr ""
@@ -2930,36 +3026,36 @@ msgstr ""
msgid "Saved changes to the timer."
msgstr ""
#: allianceauth/views.py:55
#: allianceauth/views.py:78
msgid "Bad Request"
msgstr ""
#: allianceauth/views.py:57 allianceauth/views.py:87
#: allianceauth/views.py:80 allianceauth/views.py:110
msgid ""
"Auth encountered an error processing your request, please try again. If the "
"error persists, please contact the administrators."
msgstr ""
#: allianceauth/views.py:65
#: allianceauth/views.py:88
msgid "Permission Denied"
msgstr ""
#: allianceauth/views.py:67
#: allianceauth/views.py:90
msgid ""
"You do not have permission to access the requested page. If you believe this "
"is in error please contact the administrators."
msgstr ""
#: allianceauth/views.py:75
#: allianceauth/views.py:98
msgid "Page Not Found"
msgstr ""
#: allianceauth/views.py:77
#: allianceauth/views.py:100
msgid ""
"Page does not exist. If you believe this is in error please contact the "
"administrators. "
msgstr ""
#: allianceauth/views.py:85
#: allianceauth/views.py:108
msgid "Internal Server Error"
msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-19 20:23+1000\n"
"POT-Creation-Date: 2025-09-21 13:44+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Machiel Broekman, 2025\n"
"Language-Team: Dutch (Netherlands) (https://app.transifex.com/alliance-auth/teams/107430/nl_NL/)\n"
@@ -71,7 +71,7 @@ msgstr ""
"Je bent niet gemachtigd om de volgende beperkte groepen te verwijderen: %s"
#: allianceauth/authentication/models.py:72
#: allianceauth/project_template/project_name/settings/base.py:106
#: allianceauth/project_template/project_name/settings/base.py:104
msgid "English"
msgstr "Engels"
@@ -80,57 +80,57 @@ msgid "Czech"
msgstr ""
#: allianceauth/authentication/models.py:74
#: allianceauth/project_template/project_name/settings/base.py:108
#: allianceauth/project_template/project_name/settings/base.py:106
msgid "German"
msgstr "Duits"
#: allianceauth/authentication/models.py:75
#: allianceauth/project_template/project_name/settings/base.py:109
#: allianceauth/project_template/project_name/settings/base.py:107
msgid "Spanish"
msgstr "Spaans"
#: allianceauth/authentication/models.py:76
#: allianceauth/project_template/project_name/settings/base.py:110
#: allianceauth/project_template/project_name/settings/base.py:108
msgid "Italian"
msgstr "Italiaans"
#: allianceauth/authentication/models.py:77
#: allianceauth/project_template/project_name/settings/base.py:111
#: allianceauth/project_template/project_name/settings/base.py:109
msgid "Japanese"
msgstr "Japans"
#: allianceauth/authentication/models.py:78
#: allianceauth/project_template/project_name/settings/base.py:112
#: allianceauth/project_template/project_name/settings/base.py:110
msgid "Korean"
msgstr "Koreaans"
#: allianceauth/authentication/models.py:79
#: allianceauth/project_template/project_name/settings/base.py:113
#: allianceauth/project_template/project_name/settings/base.py:111
msgid "French"
msgstr "Frans"
#: allianceauth/authentication/models.py:80
#: allianceauth/project_template/project_name/settings/base.py:116
#: allianceauth/project_template/project_name/settings/base.py:114
msgid "Russian"
msgstr "Russisch"
#: allianceauth/authentication/models.py:81
#: allianceauth/project_template/project_name/settings/base.py:114
#: allianceauth/project_template/project_name/settings/base.py:112
msgid "Dutch"
msgstr "Nederlands"
#: allianceauth/authentication/models.py:82
#: allianceauth/project_template/project_name/settings/base.py:115
#: allianceauth/project_template/project_name/settings/base.py:113
msgid "Polish"
msgstr "Pools"
#: allianceauth/authentication/models.py:83
#: allianceauth/project_template/project_name/settings/base.py:117
#: allianceauth/project_template/project_name/settings/base.py:115
msgid "Ukrainian"
msgstr "Oekraïens"
#: allianceauth/authentication/models.py:84
#: allianceauth/project_template/project_name/settings/base.py:118
#: allianceauth/project_template/project_name/settings/base.py:116
msgid "Simplified Chinese"
msgstr "Eenvoudig Chinees"
@@ -175,14 +175,12 @@ msgstr "Karakter"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:4
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
msgid "Add Character"
msgstr "Personages toevoegen"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:10
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:8
msgid "Change Main"
msgstr "Verander Main"
@@ -242,8 +240,8 @@ msgstr "Scopes"
#: allianceauth/hrapplications/templates/hrapplications/management.html:168
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
#: allianceauth/hrapplications/templates/hrapplications/view.html:94
#: allianceauth/srp/templates/srp/data.html:83
#: allianceauth/srp/templates/srp/management.html:53
#: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/management.html:51
msgid "Actions"
msgstr "Acties"
@@ -294,7 +292,7 @@ msgstr "Registreer"
msgid "Invalid or expired activation link."
msgstr "Ongeldige of verlopen activeringslink."
#: allianceauth/authentication/views.py:158
#: allianceauth/authentication/views.py:159
#, python-format
msgid ""
"Cannot change main character to %(char)s: character owned by a different "
@@ -303,23 +301,23 @@ msgstr ""
"Het hoofdkarakter kan niet worden gewijzigd naar %(char)s: Karakter is "
"eigendom van een ander account."
#: allianceauth/authentication/views.py:165
#: allianceauth/authentication/views.py:166
#, python-format
msgid "Changed main character to %s"
msgstr "Hoofdkarakter veranderd naar %s"
#: allianceauth/authentication/views.py:179
#: allianceauth/authentication/views.py:180
#, python-format
msgid "Added %(name)s to your account."
msgstr "%(name)s aan uw account toegevoegd."
#: allianceauth/authentication/views.py:181
#: allianceauth/authentication/views.py:182
#, python-format
msgid "Failed to add %(name)s to your account: they already have an account."
msgstr ""
"Toevoegen van %(name)s aan uw account is mislukt: ze hebben al een account."
#: allianceauth/authentication/views.py:226
#: allianceauth/authentication/views.py:227
msgid ""
"Unable to authenticate as the selected character. Please log in with the "
"main character associated with this account."
@@ -327,11 +325,11 @@ msgstr ""
"Niet mogelijk om te authenticeren als de geselecteerde karakter. Log "
"alstublieft in met het hoofdkarakter dat aan dit account is gekoppeld."
#: allianceauth/authentication/views.py:293
#: allianceauth/authentication/views.py:294
msgid "Registration token has expired."
msgstr "Registratietoken is verlopen."
#: allianceauth/authentication/views.py:354
#: allianceauth/authentication/views.py:355
msgid ""
"Sent confirmation email. Please follow the link to confirm your email "
"address."
@@ -339,11 +337,11 @@ msgstr ""
"E-mail met bevestiging verzonden. Volg de link om uw e-mailadres te "
"bevestigen."
#: allianceauth/authentication/views.py:360
#: allianceauth/authentication/views.py:361
msgid "Confirmed your email address. Please login to continue."
msgstr "Uw e-mailadres is bevestigd. Gelieve in te loggen om verder te gaan."
#: allianceauth/authentication/views.py:366
#: allianceauth/authentication/views.py:367
msgid "Registration of new accounts is not allowed at this time."
msgstr "Registratie van nieuwe accounts in momenteel niet toegestaan."
@@ -360,11 +358,11 @@ msgstr "Gegevens van bedrijfsleden"
msgid "Corporations"
msgstr "Bedrijven"
#: allianceauth/corputils/templates/corputils/base.html:35
#: allianceauth/corputils/templates/corputils/base.html:31
msgid "Add corporation"
msgstr "Voeg bedrijf toe"
#: allianceauth/corputils/templates/corputils/base.html:51
#: allianceauth/corputils/templates/corputils/base.html:47
msgid "Search all corporations..."
msgstr "Zoek in alle bedrijven..."
@@ -514,7 +512,7 @@ msgid "Fleet Activity Tracking"
msgstr "Fleetactiviteit Tracking"
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8
#: allianceauth/srp/templates/srp/management.html:44
#: allianceauth/srp/templates/srp/management.html:42
msgid "Fleet Name"
msgstr "Fleet naam"
@@ -1002,7 +1000,7 @@ msgstr "Beschrijving"
#: allianceauth/hrapplications/templates/hrapplications/management.html:123
#: allianceauth/hrapplications/templates/hrapplications/management.html:167
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
#: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/data.html:79
msgid "Status"
msgstr "Status"
@@ -1015,7 +1013,7 @@ msgid "Hidden"
msgstr "verborgen"
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
msgid "Open"
msgstr "Open"
@@ -1060,18 +1058,10 @@ msgstr "Groep"
msgid "Leave"
msgstr "Verlaat"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
#: allianceauth/srp/templates/srp/data.html:120
#: allianceauth/srp/templates/srp/management.html:87
msgid "Pending"
msgstr "In behandeling"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
msgid "Request pending"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
msgid "Join"
@@ -1081,7 +1071,11 @@ msgstr "Toetreden"
msgid "Request"
msgstr "Aanvraag"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:99
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:93
msgid "Retract"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:103
msgid "No groups available."
msgstr ""
@@ -1210,6 +1204,19 @@ msgstr ""
msgid "Applied to leave group %(group)s."
msgstr ""
#: allianceauth/groupmanagement/views.py:438
msgid "You cannot retract that request"
msgstr ""
#: allianceauth/groupmanagement/views.py:450
#, python-format
msgid "Retracted application to group %(group)s."
msgstr ""
#: allianceauth/groupmanagement/views.py:458
msgid "You have no open request for that group."
msgstr ""
#: allianceauth/hrapplications/apps.py:8
msgid "HR Applications"
msgstr ""
@@ -1280,12 +1287,23 @@ msgstr ""
msgid "Username"
msgstr "Gebruikersnaam"
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
#: allianceauth/srp/templates/srp/data.html:118
#: allianceauth/srp/templates/srp/management.html:85
msgid "Pending"
msgstr "In behandeling"
#: allianceauth/hrapplications/templates/hrapplications/management.html:48
#: allianceauth/hrapplications/templates/hrapplications/management.html:141
#: allianceauth/hrapplications/templates/hrapplications/management.html:185
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
#: allianceauth/hrapplications/templates/hrapplications/view.html:21
#: allianceauth/srp/templates/srp/data.html:112
#: allianceauth/srp/templates/srp/data.html:110
msgid "Approved"
msgstr "Aanvaard"
@@ -1293,7 +1311,7 @@ msgstr "Aanvaard"
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
#: allianceauth/hrapplications/templates/hrapplications/management.html:187
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
#: allianceauth/srp/templates/srp/data.html:116
#: allianceauth/srp/templates/srp/data.html:114
msgid "Rejected"
msgstr "Afgewezen"
@@ -1528,8 +1546,8 @@ msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
msgid "Sign In"
msgstr ""
@@ -1557,11 +1575,11 @@ msgstr "Ongelezen"
msgid "Read"
msgstr "Gelezen"
#: allianceauth/notifications/templates/notifications/list.html:32
#: allianceauth/notifications/templates/notifications/list.html:31
msgid "Mark all notifications as read"
msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:38
#: allianceauth/notifications/templates/notifications/list.html:35
msgid "Delete all read notifications"
msgstr ""
@@ -1626,12 +1644,12 @@ msgid "Operation Type"
msgstr ""
#: allianceauth/optimer/form.py:17
#: allianceauth/srp/templates/srp/management.html:47
#: allianceauth/srp/templates/srp/management.html:45
msgid "Fleet Commander"
msgstr ""
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
#: allianceauth/srp/templates/srp/data.html:72
#: allianceauth/srp/templates/srp/data.html:70
msgid "Additional Info"
msgstr ""
@@ -1640,7 +1658,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
msgstr ""
#: allianceauth/optimer/templates/optimer/add.html:8
#: allianceauth/optimer/templates/optimer/management.html:18
#: allianceauth/optimer/templates/optimer/management.html:16
msgid "Create Operation"
msgstr ""
@@ -1689,26 +1707,26 @@ msgstr "Vloot Commandant"
msgid "Fleet Operation Management"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:28
#: allianceauth/timerboard/templates/timerboard/view.html:32
#: allianceauth/optimer/templates/optimer/management.html:26
#: allianceauth/timerboard/templates/timerboard/view.html:30
msgid "Current EVE time:"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:36
#: allianceauth/optimer/templates/optimer/management.html:34
msgid "Next Fleet Operations"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:44
#: allianceauth/timerboard/templates/timerboard/view.html:63
#: allianceauth/optimer/templates/optimer/management.html:42
#: allianceauth/timerboard/templates/timerboard/view.html:61
msgid "No upcoming timers."
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:52
#: allianceauth/optimer/templates/optimer/management.html:50
msgid "Past Fleet Operations"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:60
#: allianceauth/timerboard/templates/timerboard/view.html:81
#: allianceauth/optimer/templates/optimer/management.html:58
#: allianceauth/timerboard/templates/timerboard/view.html:79
msgid "No past timers."
msgstr ""
@@ -2276,7 +2294,7 @@ msgid "Enabled"
msgstr ""
#: allianceauth/services/templates/services/service_status.html:7
#: allianceauth/srp/templates/srp/management.html:78
#: allianceauth/srp/templates/srp/management.html:76
msgid "Disabled"
msgstr "Uitgeschakeld"
@@ -2314,12 +2332,12 @@ msgid "Ship Replacement"
msgstr ""
#: allianceauth/srp/form.py:9
#: allianceauth/srp/templates/srp/management.html:45
#: allianceauth/srp/templates/srp/management.html:43
msgid "Fleet Time"
msgstr ""
#: allianceauth/srp/form.py:10
#: allianceauth/srp/templates/srp/management.html:46
#: allianceauth/srp/templates/srp/management.html:44
msgid "Fleet Doctrine"
msgstr ""
@@ -2368,7 +2386,7 @@ msgid "Give this link to the line members."
msgstr ""
#: allianceauth/srp/templates/srp/data.html:8
#: allianceauth/srp/templates/srp/data.html:39
#: allianceauth/srp/templates/srp/data.html:37
msgid "SRP Fleet Data"
msgstr ""
@@ -2376,64 +2394,64 @@ msgstr ""
msgid "View Fleets"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:26
#: allianceauth/srp/templates/srp/data.html:24
msgid "Mark Incomplete"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:30
#: allianceauth/srp/templates/srp/data.html:28
msgid "Mark Completed"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:48
#: allianceauth/srp/templates/srp/data.html:142
#: allianceauth/srp/templates/srp/data.html:46
#: allianceauth/srp/templates/srp/data.html:140
msgid "Total Losses:"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:49
#: allianceauth/srp/templates/srp/data.html:143
#: allianceauth/srp/templates/srp/management.html:36
#: allianceauth/srp/templates/srp/data.html:47
#: allianceauth/srp/templates/srp/data.html:141
#: allianceauth/srp/templates/srp/management.html:34
msgid "Total ISK Cost:"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:60
#: allianceauth/srp/templates/srp/data.html:154
#: allianceauth/srp/templates/srp/data.html:58
#: allianceauth/srp/templates/srp/data.html:152
msgid "Are you sure you want to delete SRP requests?"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:70
#: allianceauth/srp/templates/srp/data.html:68
msgid "Pilot Name"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:71
#: allianceauth/srp/templates/srp/data.html:69
msgid "Killboard Link"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:73
#: allianceauth/srp/templates/srp/data.html:71
msgid "Ship Type"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:74
#: allianceauth/srp/templates/srp/data.html:72
msgid "Killboard Loss Amt"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:76
#: allianceauth/srp/templates/srp/data.html:74
msgid "SRP ISK Cost"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:77
#: allianceauth/srp/templates/srp/data.html:75
msgid "Click value to edit Enter to save & next ESC to cancel"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:80
#: allianceauth/srp/templates/srp/data.html:78
msgid "Post Time"
msgstr ""
#: allianceauth/srp/templates/srp/data.html:102
#: allianceauth/srp/templates/srp/management.html:70
#: allianceauth/srp/templates/srp/data.html:100
#: allianceauth/srp/templates/srp/management.html:68
msgid "Link"
msgstr "Link"
#: allianceauth/srp/templates/srp/data.html:163
#: allianceauth/srp/templates/srp/data.html:161
msgid "No SRP requests for this fleet."
msgstr ""
@@ -2445,39 +2463,39 @@ msgstr ""
msgid "View All"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:27
#: allianceauth/srp/templates/srp/management.html:25
msgid "Add SRP Fleet"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:48
#: allianceauth/srp/templates/srp/management.html:46
msgid "Fleet AAR"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:49
#: allianceauth/srp/templates/srp/management.html:47
msgid "Fleet SRP Code"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:50
#: allianceauth/srp/templates/srp/management.html:48
msgid "Fleet ISK Cost"
msgstr "Vloot ISK Kost"
#: allianceauth/srp/templates/srp/management.html:51
#: allianceauth/srp/templates/srp/management.html:49
msgid "SRP Status"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:52
#: allianceauth/srp/templates/srp/management.html:50
msgid "Pending Requests"
msgstr "Lopende Aanvragen"
#: allianceauth/srp/templates/srp/management.html:91
#: allianceauth/srp/templates/srp/management.html:89
msgid "Completed"
msgstr "Voltooid"
#: allianceauth/srp/templates/srp/management.html:108
#: allianceauth/srp/templates/srp/management.html:106
msgid "Are you sure you want to delete this SRP code and its contents?"
msgstr ""
#: allianceauth/srp/templates/srp/management.html:129
#: allianceauth/srp/templates/srp/management.html:127
msgid "No SRP fleets created."
msgstr ""
@@ -2613,67 +2631,120 @@ msgstr ""
msgid "Your Server received an ESI error response code of "
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
msgid "Alliance Auth Notifications"
msgstr "Alliantie Authenticatie Notificaties"
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "No notifications at this time"
#: allianceauth/templates/allianceauth/admin-status/overview.html:11
msgid "second"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
msgid "Powered by GitLab"
#: allianceauth/templates/allianceauth/admin-status/overview.html:12
msgid "seconds"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
msgid "Support Discord"
#: allianceauth/templates/allianceauth/admin-status/overview.html:13
msgid "minute"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:49
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
msgid "Software Version"
msgstr "Software Versie"
#: allianceauth/templates/allianceauth/admin-status/overview.html:56
msgid "Current"
msgstr "Huidige"
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
msgid "Latest Stable"
#: allianceauth/templates/allianceauth/admin-status/overview.html:14
msgid "minutes"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:68
msgid "Update available"
msgstr "Update Beschikbaar"
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
msgid "Latest Pre-Release"
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
msgid "hour"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
msgid "Pre-Release available"
#: allianceauth/templates/allianceauth/admin-status/overview.html:16
msgid "hours"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
msgid "Task Queue"
#: allianceauth/templates/allianceauth/admin-status/overview.html:17
msgid "N/A"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
#, python-format
msgid ""
"\n"
" Status of %(total)s processed tasks • last %(latest)s\n"
" "
#: allianceauth/templates/allianceauth/admin-status/overview.html:18
msgid "ERROR"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:112
#: allianceauth/templates/allianceauth/admin-status/overview.html:19
msgid "running"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:113
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "queued"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:21
msgid "succeeded"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:22
msgid "retried"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:23
msgid "failed"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
msgid "Debug mode"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:34
msgid ""
"Debug mode is currently turned on!<br>Make sure to turn it off as soon as "
"you are finished testing."
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:46
msgid "Alliance Auth Notifications"
msgstr "Alliantie Authenticatie Notificaties"
#: allianceauth/templates/allianceauth/admin-status/overview.html:58
msgid "No notifications at this time"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:67
msgid "Powered by GitLab"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:73
msgid "Support Discord"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:87
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
msgid "Software Version"
msgstr "Software Versie"
#: allianceauth/templates/allianceauth/admin-status/overview.html:94
msgid "Current"
msgstr "Huidige"
#: allianceauth/templates/allianceauth/admin-status/overview.html:101
msgid "Latest Stable"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:106
msgid "Update available"
msgstr "Update Beschikbaar"
#: allianceauth/templates/allianceauth/admin-status/overview.html:114
msgid "Latest Pre-Release"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:119
msgid "Pre-Release available"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:129
msgid "Task Queue"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:134
msgid ""
"\n"
" Status of <span id=\"total-task-count\">?</span> processed tasks • last <span id=\"celery-uptime\">?</span>\n"
" "
msgstr ""
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
msgid "AA Documentation"
msgstr "AA Documentatie"
@@ -2897,7 +2968,7 @@ msgid "Theft"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
#: allianceauth/timerboard/templates/timerboard/view.html:54
#: allianceauth/timerboard/templates/timerboard/view.html:52
msgid "Upcoming Timers"
msgstr ""
@@ -2925,7 +2996,7 @@ msgid "Create Timer"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9
#: allianceauth/timerboard/templates/timerboard/view.html:22
#: allianceauth/timerboard/templates/timerboard/view.html:20
msgid "Create Structure Timer"
msgstr ""
@@ -2943,11 +3014,11 @@ msgstr "Constructie"
msgid "Structure Timer Management"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:41
#: allianceauth/timerboard/templates/timerboard/view.html:39
msgid "Corporation Timers"
msgstr "Corporatie Timers"
#: allianceauth/timerboard/templates/timerboard/view.html:72
#: allianceauth/timerboard/templates/timerboard/view.html:70
msgid "Past Timers"
msgstr "Verlopen Timers."

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7,17 +7,17 @@
# Shen Yang, 2023
# 85b931f94c2441449e78b527e0a313ae_baf2e99 <639a60f913241ffb1c9bd90bc93a541f_869335>, 2023
# Aaron BuBu <351793078@qq.com>, 2023
# Joel Falknau <ozirascal@gmail.com>, 2023
# Aika Yu, 2025
# Joel Falknau <ozirascal@gmail.com>, 2025
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-19 20:23+1000\n"
"POT-Creation-Date: 2026-01-21 15:33+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Aika Yu, 2025\n"
"Last-Translator: Joel Falknau <ozirascal@gmail.com>, 2025\n"
"Language-Team: Chinese Simplified (https://app.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -64,7 +64,7 @@ msgid "You are not allowed to add or remove these restricted groups: %s"
msgstr ""
#: allianceauth/authentication/models.py:72
#: allianceauth/project_template/project_name/settings/base.py:106
#: allianceauth/project_template/project_name/settings/base.py:105
msgid "English"
msgstr "英语"
@@ -73,57 +73,57 @@ msgid "Czech"
msgstr "捷克语"
#: allianceauth/authentication/models.py:74
#: allianceauth/project_template/project_name/settings/base.py:108
#: allianceauth/project_template/project_name/settings/base.py:107
msgid "German"
msgstr "德语"
#: allianceauth/authentication/models.py:75
#: allianceauth/project_template/project_name/settings/base.py:109
#: allianceauth/project_template/project_name/settings/base.py:108
msgid "Spanish"
msgstr "西班牙语"
#: allianceauth/authentication/models.py:76
#: allianceauth/project_template/project_name/settings/base.py:110
#: allianceauth/project_template/project_name/settings/base.py:109
msgid "Italian"
msgstr "意大利语"
#: allianceauth/authentication/models.py:77
#: allianceauth/project_template/project_name/settings/base.py:111
#: allianceauth/project_template/project_name/settings/base.py:110
msgid "Japanese"
msgstr "日语"
#: allianceauth/authentication/models.py:78
#: allianceauth/project_template/project_name/settings/base.py:112
#: allianceauth/project_template/project_name/settings/base.py:111
msgid "Korean"
msgstr "韩语"
#: allianceauth/authentication/models.py:79
#: allianceauth/project_template/project_name/settings/base.py:113
#: allianceauth/project_template/project_name/settings/base.py:112
msgid "French"
msgstr "法语"
#: allianceauth/authentication/models.py:80
#: allianceauth/project_template/project_name/settings/base.py:116
#: allianceauth/project_template/project_name/settings/base.py:115
msgid "Russian"
msgstr "俄语"
#: allianceauth/authentication/models.py:81
#: allianceauth/project_template/project_name/settings/base.py:114
#: allianceauth/project_template/project_name/settings/base.py:113
msgid "Dutch"
msgstr "荷兰语"
#: allianceauth/authentication/models.py:82
#: allianceauth/project_template/project_name/settings/base.py:115
#: allianceauth/project_template/project_name/settings/base.py:114
msgid "Polish"
msgstr "波兰语"
#: allianceauth/authentication/models.py:83
#: allianceauth/project_template/project_name/settings/base.py:117
#: allianceauth/project_template/project_name/settings/base.py:116
msgid "Ukrainian"
msgstr "乌克兰语"
#: allianceauth/authentication/models.py:84
#: allianceauth/project_template/project_name/settings/base.py:118
#: allianceauth/project_template/project_name/settings/base.py:117
msgid "Simplified Chinese"
msgstr "简体中文"
@@ -132,22 +132,30 @@ msgstr "简体中文"
msgid "Language"
msgstr "语言"
#: allianceauth/authentication/models.py:105
#: allianceauth/authentication/models.py:106
#: allianceauth/templates/allianceauth/night-toggle.html:6
msgid "Night Mode"
msgstr "夜间模式"
#: allianceauth/authentication/models.py:109
#: allianceauth/authentication/models.py:110
#: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme"
msgstr ""
#: allianceauth/authentication/models.py:126
#: allianceauth/authentication/models.py:117
msgid "Minimize Sidebar Menu"
msgstr ""
#: allianceauth/authentication/models.py:119
msgid "Keep the sidebar menu minimized"
msgstr ""
#: allianceauth/authentication/models.py:133
#, python-format
msgid "State changed to: %s"
msgstr ""
#: allianceauth/authentication/models.py:127
#: allianceauth/authentication/models.py:134
#, python-format
msgid "Your user's state is now: %(state)s"
msgstr ""
@@ -168,14 +176,12 @@ msgstr "角色"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:4
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
msgid "Add Character"
msgstr "添加角色"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:10
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:8
msgid "Change Main"
msgstr "修改主要角色"
@@ -209,8 +215,8 @@ msgstr ""
#: allianceauth/authentication/templates/authentication/tokens.html:7
#: allianceauth/authentication/templates/authentication/tokens.html:11
#: allianceauth/menu/templates/menu/menu-user.html:133
#: allianceauth/menu/templates/menu/menu-user.html:136
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/menu/templates/menu/menu-user.html:161
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
msgid "Token Management"
msgstr ""
@@ -232,8 +238,8 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:168
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
#: allianceauth/hrapplications/templates/hrapplications/view.html:94
#: allianceauth/srp/templates/srp/data.html:83
#: allianceauth/srp/templates/srp/management.html:53
#: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/management.html:51
msgid "Actions"
msgstr "操作"
@@ -246,8 +252,8 @@ msgstr "操作"
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:41
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:30
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:29
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:55
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:118
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:54
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:129
msgid "Character"
msgstr "角色"
@@ -284,49 +290,49 @@ msgstr "注册"
msgid "Invalid or expired activation link."
msgstr "激活链接无效或过期"
#: allianceauth/authentication/views.py:158
#: allianceauth/authentication/views.py:159
#, python-format
msgid ""
"Cannot change main character to %(char)s: character owned by a different "
"account."
msgstr "不能修改主角色为%(char)s这个角色被另一个账户所拥有"
#: allianceauth/authentication/views.py:165
#: allianceauth/authentication/views.py:166
#, python-format
msgid "Changed main character to %s"
msgstr "修改主角色为%s"
#: allianceauth/authentication/views.py:179
#: allianceauth/authentication/views.py:180
#, python-format
msgid "Added %(name)s to your account."
msgstr "添加%(name)s到您的账户"
#: allianceauth/authentication/views.py:181
#: allianceauth/authentication/views.py:182
#, python-format
msgid "Failed to add %(name)s to your account: they already have an account."
msgstr "添加%(name)s到您的账户失败他们已经在一个账户中了"
#: allianceauth/authentication/views.py:226
#: allianceauth/authentication/views.py:227
msgid ""
"Unable to authenticate as the selected character. Please log in with the "
"main character associated with this account."
msgstr ""
#: allianceauth/authentication/views.py:293
#: allianceauth/authentication/views.py:294
msgid "Registration token has expired."
msgstr "注册令牌过期。"
#: allianceauth/authentication/views.py:354
#: allianceauth/authentication/views.py:355
msgid ""
"Sent confirmation email. Please follow the link to confirm your email "
"address."
msgstr "已经发送了确认邮件。请按照链接确定您的电邮地址"
#: allianceauth/authentication/views.py:360
#: allianceauth/authentication/views.py:361
msgid "Confirmed your email address. Please login to continue."
msgstr "已确认您的电邮地址。请登录以继续"
#: allianceauth/authentication/views.py:366
#: allianceauth/authentication/views.py:367
msgid "Registration of new accounts is not allowed at this time."
msgstr ""
@@ -343,11 +349,11 @@ msgstr "军团成员数据"
msgid "Corporations"
msgstr "所有公司"
#: allianceauth/corputils/templates/corputils/base.html:35
#: allianceauth/corputils/templates/corputils/base.html:31
msgid "Add corporation"
msgstr ""
#: allianceauth/corputils/templates/corputils/base.html:51
#: allianceauth/corputils/templates/corputils/base.html:47
msgid "Search all corporations..."
msgstr "搜索所有公司"
@@ -384,6 +390,8 @@ msgstr "注册过的角色"
#: allianceauth/corputils/templates/corputils/corpstats.html:125
#: allianceauth/corputils/templates/corputils/search.html:18
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:31
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:58
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:133
#: allianceauth/hrapplications/templates/hrapplications/management.html:35
#: allianceauth/hrapplications/templates/hrapplications/management.html:122
#: allianceauth/hrapplications/templates/hrapplications/management.html:166
@@ -495,7 +503,7 @@ msgid "Fleet Activity Tracking"
msgstr "舰队活动历史"
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8
#: allianceauth/srp/templates/srp/management.html:44
#: allianceauth/srp/templates/srp/management.html:42
msgid "Fleet Name"
msgstr "舰队名"
@@ -754,14 +762,18 @@ msgstr "PAP链接已过期"
#: allianceauth/fleetactivitytracking/views.py:323
#, python-brace-format
msgid ""
"Cannot register the fleet participation for {character.character_name}. The "
"character needs to be online."
"Cannot register the fleet participation for {character_name}. The character "
"needs to be online."
msgstr ""
#: allianceauth/framework/apps.py:16
msgid "Framework"
msgstr ""
#: allianceauth/framework/templates/framework/datatables/process-indicator.html:8
msgid "Loading …"
msgstr ""
#: allianceauth/groupmanagement/apps.py:8
#: allianceauth/groupmanagement/auth_hooks.py:18
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:18
@@ -933,8 +945,8 @@ msgid "Group Members"
msgstr "群组成员"
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:30
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:56
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:119
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:55
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:130
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:33
msgid "Organization"
msgstr "组织"
@@ -946,7 +958,9 @@ msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:61
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:85
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:148
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:106
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:160
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:181
#: allianceauth/permissions_tool/templates/permissions_tool/audit_row.html:18
msgid "(unknown)"
msgstr ""
@@ -979,7 +993,7 @@ msgstr "描述"
#: allianceauth/hrapplications/templates/hrapplications/management.html:123
#: allianceauth/hrapplications/templates/hrapplications/management.html:167
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
#: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/data.html:79
msgid "Status"
msgstr "状态"
@@ -992,7 +1006,7 @@ msgid "Hidden"
msgstr "已隐藏"
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
msgid "Open"
msgstr "公开"
@@ -1026,8 +1040,8 @@ msgid "Leaders"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:37
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:57
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:120
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:56
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:131
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:30
#: allianceauth/services/modules/openfire/forms.py:6
msgid "Group"
@@ -1037,18 +1051,10 @@ msgstr "用户组"
msgid "Leave"
msgstr "离开"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
#: allianceauth/srp/templates/srp/data.html:120
#: allianceauth/srp/templates/srp/management.html:87
msgid "Pending"
msgstr "待定"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
msgid "Request pending"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
msgid "Join"
@@ -1058,7 +1064,11 @@ msgstr "加入"
msgid "Request"
msgstr "申请"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:99
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:93
msgid "Retract"
msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:103
msgid "No groups available."
msgstr "没有可用用户组"
@@ -1080,22 +1090,22 @@ msgstr "离组的请求"
msgid "Group Membership"
msgstr "用户组成员"
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:93
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:156
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:96
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:171
msgid "Accept"
msgstr "接受"
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:96
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:160
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:99
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:174
#: allianceauth/hrapplications/templates/hrapplications/view.html:104
msgid "Reject"
msgstr "拒绝"
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:106
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:117
msgid "No group add requests."
msgstr "没有加入用户组的请求,小老弟你是不是摇不到人"
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:169
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:190
msgid "No group leave requests."
msgstr "没有离开用户组的请求,小老弟你人缘可以啊?"
@@ -1187,6 +1197,19 @@ msgstr "你已经有了该组的未决离开请求"
msgid "Applied to leave group %(group)s."
msgstr "已经离开群组%(group)s"
#: allianceauth/groupmanagement/views.py:438
msgid "You cannot retract that request"
msgstr ""
#: allianceauth/groupmanagement/views.py:450
#, python-format
msgid "Retracted application to group %(group)s."
msgstr ""
#: allianceauth/groupmanagement/views.py:458
msgid "You have no open request for that group."
msgstr ""
#: allianceauth/hrapplications/apps.py:8
msgid "HR Applications"
msgstr ""
@@ -1257,12 +1280,23 @@ msgstr "创建申请"
msgid "Username"
msgstr "用户名"
#: allianceauth/hrapplications/templates/hrapplications/management.html:46
#: allianceauth/hrapplications/templates/hrapplications/management.html:95
#: allianceauth/hrapplications/templates/hrapplications/management.html:138
#: allianceauth/hrapplications/templates/hrapplications/management.html:182
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:46
#: allianceauth/hrapplications/templates/hrapplications/view.html:25
#: allianceauth/srp/templates/srp/data.html:118
#: allianceauth/srp/templates/srp/management.html:85
msgid "Pending"
msgstr "待定"
#: allianceauth/hrapplications/templates/hrapplications/management.html:48
#: allianceauth/hrapplications/templates/hrapplications/management.html:141
#: allianceauth/hrapplications/templates/hrapplications/management.html:185
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
#: allianceauth/hrapplications/templates/hrapplications/view.html:21
#: allianceauth/srp/templates/srp/data.html:112
#: allianceauth/srp/templates/srp/data.html:110
msgid "Approved"
msgstr "通过"
@@ -1270,7 +1304,7 @@ msgstr "通过"
#: allianceauth/hrapplications/templates/hrapplications/management.html:143
#: allianceauth/hrapplications/templates/hrapplications/management.html:187
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
#: allianceauth/srp/templates/srp/data.html:116
#: allianceauth/srp/templates/srp/data.html:114
msgid "Rejected"
msgstr "拒绝"
@@ -1474,39 +1508,47 @@ msgid "Notifications"
msgstr "通知"
#: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Sidebar"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:93
msgid "Minimize Sidebar"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:102
msgid "Super User"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
#: allianceauth/menu/templates/menu/menu-user.html:108
#: allianceauth/menu/templates/menu/menu-user.html:111
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
#: allianceauth/menu/templates/menu/menu-user.html:119
#: allianceauth/menu/templates/menu/menu-user.html:122
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
#: allianceauth/menu/templates/menu/menu-user.html:130
#: allianceauth/menu/templates/menu/menu-user.html:133
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: allianceauth/menu/templates/menu/menu-user.html:143
#: allianceauth/menu/templates/menu/menu-user.html:146
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
msgid "Admin"
msgstr "管理员"
#: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
#: allianceauth/menu/templates/menu/menu-user.html:169
#: allianceauth/menu/templates/menu/menu-user.html:172
msgid "Sign Out"
msgstr "登出"
#: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
#: allianceauth/menu/templates/menu/menu-user.html:180
#: allianceauth/menu/templates/menu/menu-user.html:183
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
msgid "Sign In"
msgstr "登入"
@@ -1534,11 +1576,11 @@ msgstr "未读"
msgid "Read"
msgstr "已读"
#: allianceauth/notifications/templates/notifications/list.html:32
#: allianceauth/notifications/templates/notifications/list.html:31
msgid "Mark all notifications as read"
msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:38
#: allianceauth/notifications/templates/notifications/list.html:35
msgid "Delete all read notifications"
msgstr ""
@@ -1603,12 +1645,12 @@ msgid "Operation Type"
msgstr ""
#: allianceauth/optimer/form.py:17
#: allianceauth/srp/templates/srp/management.html:47
#: allianceauth/srp/templates/srp/management.html:45
msgid "Fleet Commander"
msgstr "FC"
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
#: allianceauth/srp/templates/srp/data.html:72
#: allianceauth/srp/templates/srp/data.html:70
msgid "Additional Info"
msgstr "其他信息"
@@ -1617,7 +1659,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
msgstr ""
#: allianceauth/optimer/templates/optimer/add.html:8
#: allianceauth/optimer/templates/optimer/management.html:18
#: allianceauth/optimer/templates/optimer/management.html:16
msgid "Create Operation"
msgstr "起一个队"
@@ -1666,26 +1708,26 @@ msgstr "FC"
msgid "Fleet Operation Management"
msgstr "管理搞事队"
#: allianceauth/optimer/templates/optimer/management.html:28
#: allianceauth/timerboard/templates/timerboard/view.html:32
#: allianceauth/optimer/templates/optimer/management.html:26
#: allianceauth/timerboard/templates/timerboard/view.html:30
msgid "Current EVE time:"
msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:36
#: allianceauth/optimer/templates/optimer/management.html:34
msgid "Next Fleet Operations"
msgstr "下一个舰队任务"
#: allianceauth/optimer/templates/optimer/management.html:44
#: allianceauth/timerboard/templates/timerboard/view.html:63
#: allianceauth/optimer/templates/optimer/management.html:42
#: allianceauth/timerboard/templates/timerboard/view.html:61
msgid "No upcoming timers."
msgstr "没有快到的时间节点,歇一会吧"
#: allianceauth/optimer/templates/optimer/management.html:52
#: allianceauth/optimer/templates/optimer/management.html:50
msgid "Past Fleet Operations"
msgstr "过去的舰队任务"
#: allianceauth/optimer/templates/optimer/management.html:60
#: allianceauth/timerboard/templates/timerboard/view.html:81
#: allianceauth/optimer/templates/optimer/management.html:58
#: allianceauth/timerboard/templates/timerboard/view.html:79
msgid "No past timers."
msgstr "没有已经结束的时间节点啦"
@@ -1765,9 +1807,9 @@ msgstr "声望"
msgid "That service account already exists"
msgstr "该服务账户仍然存在"
#: allianceauth/services/abstract.py:103
#: allianceauth/services/abstract.py:105
#, python-brace-format
msgid "Successfully set your {self.service_name} password"
msgid "Successfully set your {service_name} password"
msgstr ""
#: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12
@@ -2253,7 +2295,7 @@ msgid "Enabled"
msgstr ""
#: allianceauth/services/templates/services/service_status.html:7
#: allianceauth/srp/templates/srp/management.html:78
#: allianceauth/srp/templates/srp/management.html:76
msgid "Disabled"
msgstr "失效了"
@@ -2291,12 +2333,12 @@ msgid "Ship Replacement"
msgstr "补损"
#: allianceauth/srp/form.py:9
#: allianceauth/srp/templates/srp/management.html:45
#: allianceauth/srp/templates/srp/management.html:43
msgid "Fleet Time"
msgstr "集结时间"
#: allianceauth/srp/form.py:10
#: allianceauth/srp/templates/srp/management.html:46
#: allianceauth/srp/templates/srp/management.html:44
msgid "Fleet Doctrine"
msgstr "舰队船型"
@@ -2308,11 +2350,11 @@ msgstr ""
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
msgstr ""
#: allianceauth/srp/form.py:46
#: allianceauth/srp/form.py:49
msgid "Invalid Link. Please post a direct link to a killmail."
msgstr ""
#: allianceauth/srp/form.py:53
#: allianceauth/srp/form.py:56
msgid "After Action Report Link"
msgstr "战报链接"
@@ -2345,7 +2387,7 @@ msgid "Give this link to the line members."
msgstr ""
#: allianceauth/srp/templates/srp/data.html:8
#: allianceauth/srp/templates/srp/data.html:39
#: allianceauth/srp/templates/srp/data.html:37
msgid "SRP Fleet Data"
msgstr "舰队补损信息"
@@ -2353,64 +2395,64 @@ msgstr "舰队补损信息"
msgid "View Fleets"
msgstr "查看舰队"
#: allianceauth/srp/templates/srp/data.html:26
#: allianceauth/srp/templates/srp/data.html:24
msgid "Mark Incomplete"
msgstr "标记为未完成"
#: allianceauth/srp/templates/srp/data.html:30
#: allianceauth/srp/templates/srp/data.html:28
msgid "Mark Completed"
msgstr "标记为已完成"
#: allianceauth/srp/templates/srp/data.html:48
#: allianceauth/srp/templates/srp/data.html:142
#: allianceauth/srp/templates/srp/data.html:46
#: allianceauth/srp/templates/srp/data.html:140
msgid "Total Losses:"
msgstr "损失总额:"
#: allianceauth/srp/templates/srp/data.html:49
#: allianceauth/srp/templates/srp/data.html:143
#: allianceauth/srp/templates/srp/management.html:36
#: allianceauth/srp/templates/srp/data.html:47
#: allianceauth/srp/templates/srp/data.html:141
#: allianceauth/srp/templates/srp/management.html:34
msgid "Total ISK Cost:"
msgstr "ISK花费总额"
#: allianceauth/srp/templates/srp/data.html:60
#: allianceauth/srp/templates/srp/data.html:154
#: allianceauth/srp/templates/srp/data.html:58
#: allianceauth/srp/templates/srp/data.html:152
msgid "Are you sure you want to delete SRP requests?"
msgstr "老哥,你确定要删了补损请求么?"
#: allianceauth/srp/templates/srp/data.html:70
#: allianceauth/srp/templates/srp/data.html:68
msgid "Pilot Name"
msgstr "玩家ID"
#: allianceauth/srp/templates/srp/data.html:71
#: allianceauth/srp/templates/srp/data.html:69
msgid "Killboard Link"
msgstr "KB网链接"
#: allianceauth/srp/templates/srp/data.html:73
#: allianceauth/srp/templates/srp/data.html:71
msgid "Ship Type"
msgstr "船型"
#: allianceauth/srp/templates/srp/data.html:74
#: allianceauth/srp/templates/srp/data.html:72
msgid "Killboard Loss Amt"
msgstr "KB网总损失"
#: allianceauth/srp/templates/srp/data.html:76
#: allianceauth/srp/templates/srp/data.html:74
msgid "SRP ISK Cost"
msgstr "补损ISK花费"
#: allianceauth/srp/templates/srp/data.html:77
#: allianceauth/srp/templates/srp/data.html:75
msgid "Click value to edit Enter to save & next ESC to cancel"
msgstr "点击数值就可以编辑啦按回车确认按ESC取消"
#: allianceauth/srp/templates/srp/data.html:80
#: allianceauth/srp/templates/srp/data.html:78
msgid "Post Time"
msgstr "发布时间"
#: allianceauth/srp/templates/srp/data.html:102
#: allianceauth/srp/templates/srp/management.html:70
#: allianceauth/srp/templates/srp/data.html:100
#: allianceauth/srp/templates/srp/management.html:68
msgid "Link"
msgstr "链接"
#: allianceauth/srp/templates/srp/data.html:163
#: allianceauth/srp/templates/srp/data.html:161
msgid "No SRP requests for this fleet."
msgstr "这次起队没有补损请求!大捷"
@@ -2422,39 +2464,39 @@ msgstr "补损管理"
msgid "View All"
msgstr "查看全部"
#: allianceauth/srp/templates/srp/management.html:27
#: allianceauth/srp/templates/srp/management.html:25
msgid "Add SRP Fleet"
msgstr "添加补损舰队"
#: allianceauth/srp/templates/srp/management.html:48
#: allianceauth/srp/templates/srp/management.html:46
msgid "Fleet AAR"
msgstr "舰队战报"
#: allianceauth/srp/templates/srp/management.html:49
#: allianceauth/srp/templates/srp/management.html:47
msgid "Fleet SRP Code"
msgstr "补损编号"
#: allianceauth/srp/templates/srp/management.html:50
#: allianceauth/srp/templates/srp/management.html:48
msgid "Fleet ISK Cost"
msgstr "舰队ISK花费"
#: allianceauth/srp/templates/srp/management.html:51
#: allianceauth/srp/templates/srp/management.html:49
msgid "SRP Status"
msgstr "补损状态"
#: allianceauth/srp/templates/srp/management.html:52
#: allianceauth/srp/templates/srp/management.html:50
msgid "Pending Requests"
msgstr "待处理请求"
#: allianceauth/srp/templates/srp/management.html:91
#: allianceauth/srp/templates/srp/management.html:89
msgid "Completed"
msgstr "已完成"
#: allianceauth/srp/templates/srp/management.html:108
#: allianceauth/srp/templates/srp/management.html:106
msgid "Are you sure you want to delete this SRP code and its contents?"
msgstr "老哥,你确认要把这次补损的编号和内容都删了?"
#: allianceauth/srp/templates/srp/management.html:129
#: allianceauth/srp/templates/srp/management.html:127
msgid "No SRP fleets created."
msgstr "没有创建任何补损舰队,你快灭灯了吧?"
@@ -2586,71 +2628,124 @@ msgstr "找不到ID是%(requestid)s的补损申请呀老哥眼花了"
msgid "Saved changes to SRP fleet %(fleetname)s"
msgstr "你做的修改已经保存到%(fleetname)s这个补损舰队啦尽情白给吧"
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:4
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:5
msgid "Your Server received an ESI error response code of "
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:8
msgid "Alliance Auth Notifications"
msgstr "系统通知"
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "No notifications at this time"
#: allianceauth/templates/allianceauth/admin-status/overview.html:11
msgid "second"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
msgid "Powered by GitLab"
#: allianceauth/templates/allianceauth/admin-status/overview.html:12
msgid "seconds"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:35
msgid "Support Discord"
#: allianceauth/templates/allianceauth/admin-status/overview.html:13
msgid "minute"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:49
#: allianceauth/templates/allianceauth/admin-status/overview.html:53
msgid "Software Version"
msgstr "软件版本"
#: allianceauth/templates/allianceauth/admin-status/overview.html:14
msgid "minutes"
msgstr "分钟数"
#: allianceauth/templates/allianceauth/admin-status/overview.html:56
msgid "Current"
msgstr "当前版本"
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
msgid "Latest Stable"
#: allianceauth/templates/allianceauth/admin-status/overview.html:15
msgid "hour"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:68
msgid "Update available"
msgstr "有更新!"
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
msgid "Latest Pre-Release"
#: allianceauth/templates/allianceauth/admin-status/overview.html:16
msgid "hours"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:81
msgid "Pre-Release available"
#: allianceauth/templates/allianceauth/admin-status/overview.html:17
msgid "N/A"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
msgid "Task Queue"
msgstr "任务队列"
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
#, python-format
msgid ""
"\n"
" Status of %(total)s processed tasks • last %(latest)s\n"
" "
#: allianceauth/templates/allianceauth/admin-status/overview.html:18
msgid "ERROR"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:112
#: allianceauth/templates/allianceauth/admin-status/overview.html:19
msgid "running"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:113
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "queued"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:21
msgid "succeeded"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:22
msgid "retried"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:23
msgid "failed"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29
msgid "Debug mode"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:34
msgid ""
"Debug mode is currently turned on!<br>Make sure to turn it off as soon as "
"you are finished testing."
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:46
msgid "Alliance Auth Notifications"
msgstr "系统通知"
#: allianceauth/templates/allianceauth/admin-status/overview.html:58
msgid "No notifications at this time"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:67
msgid "Powered by GitLab"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:73
msgid "Support Discord"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:87
#: allianceauth/templates/allianceauth/admin-status/overview.html:91
msgid "Software Version"
msgstr "软件版本"
#: allianceauth/templates/allianceauth/admin-status/overview.html:94
msgid "Current"
msgstr "当前版本"
#: allianceauth/templates/allianceauth/admin-status/overview.html:101
msgid "Latest Stable"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:106
msgid "Update available"
msgstr "有更新!"
#: allianceauth/templates/allianceauth/admin-status/overview.html:114
msgid "Latest Pre-Release"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:119
msgid "Pre-Release available"
msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:129
msgid "Task Queue"
msgstr "任务队列"
#: allianceauth/templates/allianceauth/admin-status/overview.html:134
msgid ""
"\n"
" Status of <span id=\"total-task-count\">?</span> processed tasks • last <span id=\"celery-uptime\">?</span>\n"
" "
msgstr ""
#: allianceauth/templates/allianceauth/top-menu-admin.html:19
msgid "AA Documentation"
msgstr ""
@@ -2874,7 +2969,7 @@ msgid "Theft"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
#: allianceauth/timerboard/templates/timerboard/view.html:54
#: allianceauth/timerboard/templates/timerboard/view.html:52
msgid "Upcoming Timers"
msgstr ""
@@ -2902,7 +2997,7 @@ msgid "Create Timer"
msgstr "创建时间计划表"
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9
#: allianceauth/timerboard/templates/timerboard/view.html:22
#: allianceauth/timerboard/templates/timerboard/view.html:20
msgid "Create Structure Timer"
msgstr "创建建筑时间表"
@@ -2920,11 +3015,11 @@ msgstr "建筑"
msgid "Structure Timer Management"
msgstr "管理建筑时间表"
#: allianceauth/timerboard/templates/timerboard/view.html:41
#: allianceauth/timerboard/templates/timerboard/view.html:39
msgid "Corporation Timers"
msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:72
#: allianceauth/timerboard/templates/timerboard/view.html:70
msgid "Past Timers"
msgstr "已经过去的时间节点"
@@ -2937,36 +3032,36 @@ msgstr "已经把%(system)s星系里%(time)s的时间节点设置好了CTA
msgid "Saved changes to the timer."
msgstr "保存至新的计划表"
#: allianceauth/views.py:55
#: allianceauth/views.py:78
msgid "Bad Request"
msgstr ""
#: allianceauth/views.py:57 allianceauth/views.py:87
#: allianceauth/views.py:80 allianceauth/views.py:110
msgid ""
"Auth encountered an error processing your request, please try again. If the "
"error persists, please contact the administrators."
msgstr ""
#: allianceauth/views.py:65
#: allianceauth/views.py:88
msgid "Permission Denied"
msgstr ""
#: allianceauth/views.py:67
#: allianceauth/views.py:90
msgid ""
"You do not have permission to access the requested page. If you believe this"
" is in error please contact the administrators."
msgstr ""
#: allianceauth/views.py:75
#: allianceauth/views.py:98
msgid "Page Not Found"
msgstr ""
#: allianceauth/views.py:77
#: allianceauth/views.py:100
msgid ""
"Page does not exist. If you believe this is in error please contact the "
"administrators. "
msgstr ""
#: allianceauth/views.py:85
#: allianceauth/views.py:108
msgid "Internal Server Error"
msgstr ""

View File

@@ -1,4 +1,4 @@
from __future__ import annotations
from __future__ import annotations # Still needed for Python 3.8, replaced with better implementations in Py39+
import logging
from typing import TYPE_CHECKING

View File

@@ -5,10 +5,10 @@
<li class="nav-item" id="menu_item_notifications">
<a class="nav-link {% navactive request 'notifications:' %}" href="{% url 'notifications:list' %}">
{% with unread_count=request.user|user_unread_notification_count %}
<i class="fa-solid fa-bell{% if unread_count %} text-danger{% endif %}"></i>
<i class="fa-solid fa-bell me-2 fa-fw{% if unread_count %} text-danger{% endif %}"></i>
{% endwith %}
<span class="d-lg-none d-md-inline m-2">
<span class="d-lg-none d-md-inline">
{% translate "Notifications" %}
</span>
</a>

View File

@@ -72,6 +72,31 @@
{% theme_select %}
{% if user.is_authenticated and not request.is_mobile_device %}
<li><hr class="dropdown-divider"></li>
<li><h6 class="dropdown-header">{% translate "Sidebar" %}</h6></li>
<li>
<form class="dropdown-item" action="{% url 'minimize_sidebar' %}?next={{ request.path|urlencode }}" method="post">
{% csrf_token %}
<div class="form-check form-switch">
<input
class="form-check-input"
type="checkbox"
role="switch"
id="toggle-sidebar"
onchange="this.form.submit()"
{% if request.session.MINIMIZE_SIDEBAR %}checked{% endif %}
>
<label class="form-check-label" for="toggle-sidebar">
{% translate "Minimize Sidebar" %}
</label>
</div>
</form>
</li>
{% endif %}
{% if user.is_superuser %}
<li><hr class="dropdown-divider"></li>
<li><h6 class="dropdown-header">{% translate "Super User" %}</h6></li>

View File

@@ -3,7 +3,7 @@
{% load menu_menu_items %}
<div class="col-auto px-0">
<div class="collapse collapse-horizontal" tabindex="-1" id="sidebar">
<div class="collapse collapse-horizontal {% if user.is_authenticated and not request.is_mobile_device and not request.session.MINIMIZE_SIDEBAR %}show{% endif %}" tabindex="-1" id="sidebar">
<div>
<div class="nav-padding navbar-dark text-bg-dark px-0 d-flex flex-column overflow-hidden vh-100 {% if not user.is_authenticated %}position-relative{% endif %}">
{% if user.is_authenticated %}

View File

@@ -0,0 +1,65 @@
"""
Alliance Auth Middleware
"""
from user_agents import parse
class DeviceDetectionMiddleware:
"""
Middleware to detect the type of device making the request.
Sets flags on the request object for easy access in views and templates.
Flags include:
- is_mobile: True if the device is a mobile phone.
- is_tablet: True if the device is a tablet.
- is_mobile_device: True if the device is either a mobile phone or a tablet.
- is_touch_capable: True if the device has touch capabilities.
- is_pc: True if the device is a desktop or laptop computer.
- is_bot: True if the device is identified as a bot or crawler.
"""
def __init__(self, get_response):
"""
Initialize the middleware with the get_response callable.
:param get_response:
:type get_response:
"""
self.get_response = get_response
def __call__(self, request):
"""
Process the incoming request to determine if it's from a mobile device.
This method is called when the middleware is invoked. It inspects the
`user-agent` header of the incoming HTTP request to determine the type
of client making the request (e.g., mobile, tablet, PC, bot, etc.).
Flags are set on the `request` object to indicate the client type.
:param request: The HTTP request object.
:type request: HttpRequest
:return: The HTTP response object after processing the request.
:rtype: HttpResponse
"""
# Retrieve the user-agent string from the request headers
user_agent_string = request.headers.get("user-agent", "")
# Parse the user-agent string to extract client information
user_agent = parse(user_agent_string)
# Set flags on the request object based on the client type
request.is_mobile = user_agent.is_mobile # True if the client is a mobile phone
request.is_tablet = user_agent.is_tablet # True if the client is a tablet
request.is_mobile_device = user_agent.is_mobile or user_agent.is_tablet # True if mobile phone or tablet
request.is_touch_capable = user_agent.is_touch_capable # True if the client supports touch input
request.is_pc = user_agent.is_pc # True if the client is a PC
request.is_bot = user_agent.is_bot # True if the client is a bot
# Pass the request to the next middleware or view and get the response
response = self.get_response(request)
# Return the processed response
return response

View File

@@ -28,17 +28,13 @@
{% endblock %}
{% block header_nav_collapse_right %}
<li class="nav-item">
<a href="{% url 'notifications:mark_all_read' %}" class="nav-link" title="{% translate 'Mark all notifications as read' %}">
<i class="fa-solid fa-check-double"></i>
</a>
</li>
{% translate "Mark all notifications as read" as nav_item_title %}
{% url "notifications:mark_all_read" as nav_item_link %}
{% include "framework/header/nav-collapse-icon.html" with fa_icon="fa-solid fa-check-double" url=nav_item_link title=nav_item_title icon_on_mobile=True %}
<li class="nav-item">
<a href="{% url 'notifications:delete_all_read' %}" class="nav-link" title="{% translate 'Delete all read notifications' %}">
<i class="fa-solid fa-trash-can"></i>
</a>
</li>
{% translate "Delete all read notifications" as nav_item_title %}
{% url "notifications:delete_all_read" as nav_item_link %}
{% include "framework/header/nav-collapse-icon.html" with fa_icon="fa-solid fa-trash-can" url=nav_item_link title=nav_item_title icon_on_mobile=True %}
{% endblock %}
{% block content %}

View File

@@ -22,8 +22,8 @@
</tr>
</thead>
{% for ops in timers %}
<tbody>
<tbody>
{% for ops in timers %}
<tr>
<td>
{{ ops.operation_name }}
@@ -55,8 +55,8 @@
</td>
{% endif %}
</tr>
</tbody>
{% endfor %}
{% endfor %}
</tbody>
</table>
</div>
{% endblock content %}

View File

@@ -13,11 +13,9 @@
{% block header_nav_collapse_right %}
{% if perms.auth.optimer_management %}
<li class="nav-item">
<a class="btn btn-success" href="{% url 'optimer:add' %}">
{% translate "Create Operation" %}
</a>
</li>
{% translate "Create Operation" as nav_item_title %}
{% url "optimer:add" as nav_item_link %}
{% include "framework/header/nav-collapse-button.html" with btn_modifier="success" url=nav_item_link title=nav_item_title fa_icon="fa-solid fa-plus" icon_on_mobile=True %}
{% endif %}
{% endblock header_nav_collapse_right %}
@@ -67,83 +65,85 @@
{% include 'bundles/timers-js.html' %}
<script>
// Data
const timers = [
{% for op in optimer %}
{
'id': {{ op.id }},
'start': moment("{{ op.start | date:"c" }}"),
'expired': false
},
{% endfor %}
];
$(document).ready(() => {
// Data
const timers = [
{% for op in optimer %}
{
'id': {{ op.id }},
'start': moment("{{ op.start | date:"c" }}"),
'expired': false
},
{% endfor %}
];
/**
* Update a timer
* @param timer Timer information
*/
const updateTimer = (timer) => {
if (timer.start.isAfter(Date.now())) {
const duration = moment.duration(timer.start - moment(), 'milliseconds');
/**
* Update a timer
* @param timer Timer information
*/
const updateTimer = (timer) => {
if (timer.start.isAfter(Date.now())) {
const duration = moment.duration(timer.start - moment(), 'milliseconds');
document.getElementById("countdown" + timer.id).innerHTML = getDurationString(duration);
} else {
timer.expired = true;
document.getElementById("countdown" + timer.id).innerHTML = getDurationString(duration);
} else {
timer.expired = true;
document.getElementById("countdown" + timer.id).innerHTML = "";
}
};
document.getElementById("countdown" + timer.id).innerHTML = "";
}
};
/**
* Update all timers
*/
const updateAllTimers = () => {
const l = timers.length;
/**
* Update all timers
*/
const updateAllTimers = () => {
const l = timers.length;
for (let i=0; i < l; ++i) {
if (timers[i].expired) continue;
for (let i=0; i < l; ++i) {
if (timers[i].expired) continue;
updateTimer(timers[i]);
}
};
updateTimer(timers[i]);
}
};
/**
* Set the local time info for the timer
* @param timer Timer information
*/
const setLocalTime = (timer) => {
document.getElementById("localtime" + timer.id).innerHTML = timer.start.format("ddd @ LT");
};
/**
* Set the local time info for the timer
* @param timer Timer information
*/
const setLocalTime = (timer) => {
document.getElementById("localtime" + timer.id).innerHTML = timer.start.format("ddd @ LT");
};
/**
* Set all local time fields
*/
const setAllLocalTimes = () => {
const l = timers.length;
/**
* Set all local time fields
*/
const setAllLocalTimes = () => {
const l = timers.length;
for (let i=0; i < l; ++i) {
setLocalTime(timers[i]);
}
};
for (let i=0; i < l; ++i) {
setLocalTime(timers[i]);
}
};
/**
* Get the current EVE time as a string
* @returns {string} EVE time string
*/
const updateClock = () => {
document.getElementById("current-time").innerHTML = getCurrentEveTimeString();
};
/**
* Get the current EVE time as a string
* @returns {string} EVE time string
*/
const updateClock = () => {
document.getElementById("current-time").innerHTML = getCurrentEveTimeString();
};
const timedUpdate = () => {
updateClock();
updateAllTimers();
};
const timedUpdate = () => {
updateClock();
updateAllTimers();
};
// Set initial values
setAllLocalTimes();
timedUpdate();
// Set initial values
setAllLocalTimes();
timedUpdate();
// Start timed updates
setInterval(timedUpdate, 1000);
// Start timed updates
setInterval(timedUpdate, 1000);
});
</script>
{% endblock content %}

View File

@@ -88,6 +88,7 @@ MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"allianceauth.authentication.middleware.UserSettingsMiddleware",
"allianceauth.middleware.DeviceDetectionMiddleware",
"django.middleware.locale.LocaleMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",

View File

@@ -57,10 +57,10 @@ DATABASES['default'] = {
# CCP's developer portal
# Logging in to auth requires the publicData scope (can be overridden through the
# LOGIN_TOKEN_SCOPES setting). Other apps may require more (see their docs).
ESI_SSO_CALLBACK_URL = f"{SITE_URL}/sso/callback" # Do NOT change this line!
ESI_SSO_CLIENT_ID = ''
ESI_SSO_CLIENT_SECRET = ''
ESI_SSO_CALLBACK_URL = f"{SITE_URL}/sso/callback"
ESI_USER_CONTACT_EMAIL = '' # A server maintainer that CCP can contact in case of issues.
ESI_USER_CONTACT_EMAIL = '' # A server maintainer that CCP can contact in case of issues.
# By default, emails are validated before new users can log in.
# It's recommended to use a free service like SparkPost or Elastic Email to send email.

View File

@@ -1,22 +1,37 @@
[supervisord]
environment =
AA_USER = allianceserver, ; The user under which the processes will run
AA_PROJECT_NAME = {{ project_name }}, ; The name of the project
AA_PROJECT_DIRECTORY = {{ project_directory }}, ; The directory of the project
AA_VENV_DIRECTORY = {{ venv_directory }}, ; The directory of the virtual environment
AA_COMMAND_CELERY = {{ celery }}, ; The command to run Celery
AA_COMMAND_GUNICORN = {{ gunicorn }}, ; The command to run Gunicorn
AA_COMMAND_MEMMON = {{ memmon }} ; The command to run Memmon
[program:beat]
command = {{ celery }} -A {{ project_name }} beat
directory = {{ project_directory }}
user = allianceserver
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log
command = %(ENV_AA_COMMAND_CELERY)s
-A %(ENV_AA_PROJECT_NAME)s beat
directory = %(ENV_AA_PROJECT_DIRECTORY)s
user = %(ENV_AA_USER)s
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
autostart = true
autorestart = true
startsecs = 10
priority = 998
[program:worker]
command = {{ celery }} -A {{ project_name }} worker --pool=threads --concurrency=5 -n %(program_name)s_%(process_num)02d
directory = {{ project_directory }}
user = allianceserver
command = %(ENV_AA_COMMAND_CELERY)s
-A %(ENV_AA_PROJECT_NAME)s worker
--pool=threads
--concurrency=5
-n %(program_name)s_%(process_num)02d
directory = %(ENV_AA_PROJECT_DIRECTORY)s
user = %(ENV_AA_USER)s
numprocs = 1
process_name = %(program_name)s_%(process_num)02d
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
autostart = true
autorestart = true
startsecs = 10
@@ -26,22 +41,26 @@ priority = 998
{% if gunicorn %}
[program:gunicorn]
user = allianceserver
directory = {{ project_directory }}
command = {{ gunicorn }} {{ project_name }}.wsgi --workers=3 --timeout 120
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log
user = %(ENV_AA_USER)s
directory = %(ENV_AA_PROJECT_DIRECTORY)s
command = %(ENV_AA_COMMAND_GUNICORN)s %(ENV_AA_PROJECT_NAME)s.wsgi
--workers=3
--timeout 120
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
autostart = true
autorestart = true
stopsignal = INT
{% endif %}
[eventlistener:memmon]
command = {{ memmon }} -p worker_00=256MB -p gunicorn=256MB
directory = {{ project_directory }}
command = %(ENV_AA_COMMAND_MEMMON)s
-p worker_00=256MB
-p gunicorn=256MB
directory = %(ENV_AA_PROJECT_DIRECTORY)s
events = TICK_60
stdout_logfile = {{ project_directory }}/log/memmon.log
stderr_logfile = {{ project_directory }}/log/memmon.log
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/memmon.log
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/memmon.log
[group:{{ project_name }}]
programs = beat,worker{% if gunicorn %},gunicorn{% endif %}

View File

@@ -100,7 +100,10 @@ class BaseSetPasswordServiceAccountView(ServicesCRUDMixin, BaseServiceView, Upda
def post(self, request, *args, **kwargs):
result = super().post(request, *args, **kwargs)
if self.get_form().is_valid():
messages.success(request, _(f"Successfully set your {self.service_name} password"))
messages.success(
request,
_("Successfully set your {service_name} password").format(service_name=self.service_name)
)
return result

View File

@@ -16,8 +16,7 @@ from redis import Redis
from allianceauth.utils.cache import get_redis_client
from allianceauth import __title__ as AUTH_TITLE
from allianceauth import __url__, __version__
from allianceauth import __title_useragent__, __url__, __version__
from .. import __title__
from ..utils import LoggerAddTag
@@ -647,7 +646,7 @@ class DiscordClient:
if self.is_rate_limited:
self._ensure_rate_limed_not_exhausted(uid)
headers = {
'User-Agent': f'{AUTH_TITLE} ({__url__}, {__version__})',
'User-Agent': f'{__title_useragent__}/{__version__} (+{__url__})',
'accept': 'application/json',
'X-RateLimit-Precision': 'millisecond',
'authorization': str(authorization)
@@ -675,10 +674,12 @@ class DiscordClient:
)
logger.debug('%s: response:\n%s', uid, r.text)
if not r.ok:
member_id = url.split("/")[-1]
logger.error(
'%s: Discord API returned error code %d and this response: %s',
'%s: Discord API returned error code %d for member ID %s with this response: %s.',
uid,
r.status_code,
member_id,
r.text
)

View File

@@ -7,8 +7,7 @@ import requests_mock
from redis import Redis
from requests.exceptions import HTTPError
from allianceauth import __title__ as AUTH_TITLE
from allianceauth import __url__, __version__
from allianceauth import __title_useragent__, __url__, __version__
from allianceauth.utils.testing import NoSocketsTestCase
from ...utils import set_logger_to_file
@@ -46,7 +45,7 @@ API_BASE_URL = 'https://discord.com/api/'
TEST_RETRY_AFTER = 3000
DEFAULT_REQUEST_HEADERS = {
'User-Agent': f'{AUTH_TITLE} ({__url__}, {__version__})',
'User-Agent': f'{__title_useragent__}/{__version__} (+{__url__})',
'accept': 'application/json',
'authorization': 'Bot ' + TEST_BOT_TOKEN
}

View File

@@ -100,13 +100,13 @@ def jabber_broadcast_view(request):
if main_char is not None:
message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + \
main_char.character_name + " TO: " + \
form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime(
form.cleaned_data['group'] + " WHEN: " + datetime.datetime.now(datetime.timezone.utc).strftime(
"%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n"
group_to_send = form.cleaned_data['group']
else:
message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "No character but can send pings?" + " TO: " + \
form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime(
form.cleaned_data['group'] + " WHEN: " + datetime.datetime.now(datetime.timezone.utc).strftime(
"%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n"
group_to_send = form.cleaned_data['group']

View File

@@ -2,7 +2,7 @@ import random
import string
import calendar
import re
from datetime import datetime
import datetime as dt
from passlib.apps import phpbb3_context
from django.db import connections
@@ -128,7 +128,7 @@ class Phpbb3Manager:
@staticmethod
def __get_current_utc_date():
d = datetime.utcnow()
d = dt.datetime.now(dt.timezone.utc)
unixtime = calendar.timegm(d.utctimetuple())
return unixtime

View File

@@ -1,7 +1,7 @@
import random
import string
import calendar
from datetime import datetime
import datetime as dt
import hashlib
import logging
import re
@@ -105,7 +105,7 @@ class SmfManager:
@staticmethod
def get_current_utc_date():
d = datetime.utcnow()
d = dt.datetime.now(dt.timezone.utc)
unixtime = calendar.timegm(d.utctimetuple())
return unixtime

View File

@@ -111,11 +111,11 @@ class Teamspeak3Manager:
outlist = {}
if type(groups) == list:
logger.debug("Recieved multiple groups. Iterating.")
logger.debug("Received multiple groups. Iterating.")
for group in groups:
outlist[group['keys']['name']] = group['keys']['sgid']
elif type(groups) == dict:
logger.debug("Recieved single group.")
logger.debug("Received single group.")
outlist[groups['keys']['name']] = groups['keys']['sgid']
logger.debug("Returning name/id pairing: %s" % outlist)
return outlist

View File

@@ -34,6 +34,9 @@ class SrpFleetUserRequestForm(forms.Form):
_("Invalid Link. Please use zkillboard.com or kb.evetools.org")
)
if re.match(r"^http[s]?:\/\/zkillboard\.com\/", data) and not data.endswith("/"):
data += "/"
# Check if it's an actual kill mail
if not any(
re.match(regex, data)

View File

@@ -4,7 +4,7 @@ import requests
from django.contrib.auth.models import User
from allianceauth import NAME
from allianceauth import __title_useragent__, __url__, __version__
from allianceauth.srp.providers import esi
from .models import SrpUserRequest
@@ -24,7 +24,7 @@ class SRPManager:
def get_kill_data(kill_id):
url = ("https://zkillboard.com/api/killID/%s/" % kill_id)
headers = {
'User-Agent': NAME,
'User-Agent': f'{__title_useragent__}/{__version__} (+{__url__})',
'Content-Type': 'application/json',
}
r = requests.get(url, headers=headers)

View File

@@ -20,17 +20,15 @@
{% block header_nav_collapse_right %}
{% if perms.auth.srp_management %}
<li class="nav-item">
{% if fleet_status == "Completed" %}
<a class="btn btn-warning" href="{% url 'srp:mark_uncompleted' fleet_id %}">
{% translate "Mark Incomplete" %}
</a>
{% else %}
<a class="btn btn-success" href="{% url 'srp:mark_completed' fleet_id %}">
{% translate "Mark Completed" %}
</a>
{% endif %}
</li>
{% if fleet_status == "Completed" %}
{% translate "Mark Incomplete" as nav_item_title %}
{% url "srp:mark_uncompleted" fleet_id as nav_item_link %}
{% include "framework/header/nav-collapse-button.html" with btn_modifier="warning" url=nav_item_link title=nav_item_title %}
{% else %}
{% translate "Mark Completed" as nav_item_title %}
{% url "srp:mark_completed" fleet_id as nav_item_link %}
{% include "framework/header/nav-collapse-button.html" with btn_modifier="warning" url=nav_item_link title=nav_item_title %}
{% endif %}
{% endif %}
{% endblock header_nav_collapse_right %}

View File

@@ -22,11 +22,9 @@
{% endblock header_nav_collapse_left %}
{% block header_nav_collapse_right %}
{% if perms.srp.add_srpfleetmain or perms.auth.srp_management %}
<li class="nav-item">
<a class="btn btn-success" href="{% url 'srp:add' %}">
{% translate "Add SRP Fleet" %}
</a>
</li>
{% translate "Add SRP Fleet" as nav_item_title %}
{% url "srp:add" as nav_item_link %}
{% include "framework/header/nav-collapse-button.html" with btn_modifier="success" url=nav_item_link title=nav_item_title fa_icon="fa-solid fa-plus" icon_on_mobile=True %}
{% endif %}
{% endblock header_nav_collapse_right %}
{% block content %}

View File

@@ -0,0 +1,27 @@
from django.test import TestCase
from allianceauth.srp.form import SrpFleetUserRequestForm
class TestForms(TestCase):
def test_allow_missing_trailing_slash_zkillboard(self):
form = SrpFleetUserRequestForm(
data = {
"killboard_link": "https://zkillboard.com/kill/130429493",
"additional_info": "Details",
}
)
form.cleaned_data = {"killboard_link": "https://zkillboard.com/kill/130429493"}
self.assertEqual("https://zkillboard.com/kill/130429493/", form.clean_killboard_link())
def test_not_add_trailling_slash_kb_evetools(self):
form = SrpFleetUserRequestForm(
data = {
"killboard_link": "https://kb.evetools.org/kill/130429493",
}
)
form.cleaned_data = {"killboard_link": "https://kb.evetools.org/kill/130429493"}
self.assertEqual("https://kb.evetools.org/kill/130429493", form.clean_killboard_link())

View File

@@ -0,0 +1,207 @@
/* global fetchGet, numberFormatter, taskQueueSettings */
$(document).ready(() => {
'use strict';
const elements = {
total: document.getElementById('total-task-count'),
uptime: document.getElementById('celery-uptime'),
running: document.getElementById('running-task-count'),
queued: document.getElementById('queued-tasks-count'),
succeeded: document.getElementById('succeeded-tasks-count'),
retried: document.getElementById('retried-tasks-count'),
failed: document.getElementById('failed-tasks-count')
};
/**
* Fetches the task queue status and updates the UI elements accordingly.
* It retrieves the total number of tasks, running tasks, queued tasks,
* succeeded tasks, retried tasks, and failed tasks, and updates the
* corresponding HTML elements with the fetched data.
* It also updates the progress bars for succeeded, retried, and failed tasks.
* The function is called immediately and then every 30 seconds to keep the
* task queue status up to date.
*/
const updateTaskCount = () => {
fetchGet({url: taskQueueSettings.url})
.then((data) => {
const elemProgressBar = document.getElementById('celery-tasks-progress-bar');
const progressElements = {
succeeded: {
bar: document.getElementById('celery-progress-bar-succeeded'),
text: document.getElementById('celery-progress-bar-succeeded-progress')
},
retried: {
bar: document.getElementById('celery-progress-bar-retried'),
text: document.getElementById('celery-progress-bar-retried-progress')
},
failed: {
bar: document.getElementById('celery-progress-bar-failed'),
text: document.getElementById('celery-progress-bar-failed-progress')
}
};
// Assign progress data from the fetched data to variables
const {
earliest_task: earliestTask,
tasks_total: tasksTotal,
tasks_running: tasksRunning,
tasks_queued: tasksQueued,
tasks_succeeded: tasksSucceeded,
tasks_retried: tasksRetried,
tasks_failed: tasksFailed
} = data;
/**
* Updates the text content of the specified HTML element with the given value.
* If the value is null, it sets the text to 'N/A'.
* Otherwise, it formats the number using the locale-specific format.
*
* @param {HTMLElement} element The HTML element to update.
* @param {number|null} value The value to set in the element.
*/
const updateTaskCount = (element, value) => {
element.textContent = value === null ? taskQueueSettings.l10n.na : numberFormatter({value: value, locales: taskQueueSettings.l10n.language});
};
/**
* Calculates the time since the given timestamp and returns a formatted string.
* If the timestamp is null or undefined, it returns 'N/A'.
* The returned string is in the format of "X hours, Y minutes" or "X minutes, Y seconds".
*
* @param {string|null} timestamp The timestamp to calculate the time since.
* @returns {string} A formatted string representing the time since the timestamp.
*/
const timeSince = (timestamp) => {
if (!timestamp) {
return taskQueueSettings.l10n.na;
}
const diffSecs = Math.floor((Date.now() - new Date(timestamp)) / 1000);
if (diffSecs >= 3600) {
const hours = Math.floor(diffSecs / 3600);
const minutes = Math.floor((diffSecs % 3600) / 60);
if (minutes > 0) {
const hourText = hours === 1 ? taskQueueSettings.l10n.hour_singular : taskQueueSettings.l10n.hour_plural;
const minuteText = minutes === 1 ? taskQueueSettings.l10n.minute_singular : taskQueueSettings.l10n.minute_plural;
return `${hours} ${hourText}, ${minutes} ${minuteText}`;
}
const hourText = hours === 1 ? taskQueueSettings.l10n.hour_singular : taskQueueSettings.l10n.hour_plural;
return `${hours} ${hourText}`;
}
const units = [
[
60,
taskQueueSettings.l10n.minute_singular,
taskQueueSettings.l10n.minute_plural
],
[
1,
taskQueueSettings.l10n.second_singular,
taskQueueSettings.l10n.second_plural
]
];
for (const [seconds, singular, plural] of units) {
const value = Math.floor(diffSecs / seconds);
if (value > 0) {
return `${value} ${value > 1 ? plural : singular}`;
}
}
return `0 ${taskQueueSettings.l10n.second_plural}`;
};
/**
* Updates the progress bar element and its text content based on the given value and total.
* It calculates the percentage of completion and updates the aria attributes and styles accordingly.
*
* @param {HTMLElement} element The progress bar element to update.
* @param {HTMLElement} textElement The text element to update with the percentage.
* @param {number} value The current value to set in the progress bar.
* @param {number} total The total value for calculating the percentage.
*/
const updateProgressBar = (element, textElement, value, total) => {
const percentage = total ? (value / total) * 100 : 0;
element.setAttribute('aria-valuenow', percentage.toString());
textElement.textContent = `${numberFormatter({value: percentage.toFixed(0), locales: taskQueueSettings.l10n.language})}%`;
element.style.width = `${percentage}%`;
};
// Update task counts
[
[elements.total, tasksTotal],
[elements.running, tasksRunning],
[elements.queued, tasksQueued],
[elements.succeeded, tasksSucceeded],
[elements.retried, tasksRetried],
[elements.failed, tasksFailed]
].forEach(([element, value]) => {
updateTaskCount(element, value);
});
// Update uptime
elements.uptime.textContent = timeSince(earliestTask);
// Update progress bar title
const [
titleTextSucceeded,
titleTextRetried,
titleTextFailed
] = [
[tasksSucceeded, taskQueueSettings.l10n.succeeded],
[tasksRetried, taskQueueSettings.l10n.retried],
[tasksFailed, taskQueueSettings.l10n.failed]
].map(([count, label]) => {
return `${numberFormatter({value: count, locales: taskQueueSettings.l10n.language})} ${label}`;
});
// Set the title attribute for the progress bar
elemProgressBar.setAttribute(
'title',
`${titleTextSucceeded}, ${titleTextRetried}, ${titleTextFailed}`
);
// Update progress bars
[
tasksSucceeded,
tasksRetried,
tasksFailed
].forEach((count, index) => {
const type = ['succeeded', 'retried', 'failed'][index];
updateProgressBar(
progressElements[type].bar,
progressElements[type].text,
count,
tasksTotal
);
});
})
.catch((error) => {
console.error('Error fetching task queue:', error);
// If there is an error fetching the task queue, set all elements to 'ERROR'
[
elements.running,
elements.queued,
elements.succeeded,
elements.retried,
elements.failed
].forEach((elem) => {
elem.textContent = taskQueueSettings.l10n.error;
});
});
};
updateTaskCount();
setInterval(updateTaskCount, 30000);
});

View File

@@ -0,0 +1,57 @@
$(document).ready(() => {
'use strict';
/**
* Collect all badges in the sidebar menu that are not part of a collapsible submenu, and calculate the total notification count.
* Show a total notification badge in the navbar if there are any notifications.
*/
const totalNotificationsBadge = () => {
const badges = [];
let notificationCount = 0;
document.querySelectorAll('#sidebar-menu .badge').forEach(b => {
const li = b.closest('li');
if (!li || !li.querySelector('ul.collapse')) {
badges.push(b);
notificationCount += parseInt(b.textContent);
}
});
if (badges.length > 0 && notificationCount > 0) {
const notificationBadge = document.createElement('span');
notificationBadge.id = "globalNotificationCount";
notificationBadge.classList.add(
'badge',
'text-bg-danger',
'align-self-center',
'sidemenu-notification-badge',
'sidemenu-total-notifications-badge'
);
notificationBadge.textContent = String(notificationCount);
document.querySelector('a.navbar-brand i.fa-solid').prepend(notificationBadge);
}
};
/**
* Find the active child menu item in the sidebar menu, if any, and ensure its parent submenu is expanded.
*/
const expandChildMenu = () => {
const activeChildMenuItem = document.querySelector('ul#sidebar-menu ul.collapse a.active');
if (activeChildMenuItem) {
const activeChildMenuUl = activeChildMenuItem.closest('ul');
activeChildMenuUl.classList.add('show');
document.querySelectorAll(`[data-bs-target^="#${activeChildMenuUl.id}"]`)
.forEach(element => element.setAttribute('aria-expanded', 'true'));
}
};
// Execute functions on document ready
[
totalNotificationsBadge,
expandChildMenu
].forEach(fn => fn());
});

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,4 @@
/*! DataTables Bootstrap 5 integration
* © SpryMedia Ltd - datatables.net/license
*/
(n=>{var o,a;"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(t){return n(t,window,document)}):"object"==typeof exports?(o=require("jquery"),a=function(t,e){e.fn.dataTable||require("datatables.net")(t,e)},"undefined"==typeof window?module.exports=function(t,e){return t=t||window,e=e||o(t),a(t,e),n(e,0,t.document)}:(a(window,o),module.exports=n(o,window,window.document))):n(jQuery,window,document)})(function(d,t,e){var n=d.fn.dataTable;return d.extend(!0,n.defaults,{renderer:"bootstrap"}),d.extend(!0,n.ext.classes,{container:"dt-container dt-bootstrap5",search:{input:"form-control form-control-sm"},length:{select:"form-select form-select-sm"},processing:{container:"dt-processing card"},layout:{row:"row mt-2 justify-content-between",cell:"d-md-flex justify-content-between align-items-center",tableCell:"col-12",start:"dt-layout-start col-md-auto me-auto",end:"dt-layout-end col-md-auto ms-auto",full:"dt-layout-full col-md"}}),n.ext.renderer.pagingButton.bootstrap=function(t,e,n,o,a){var r=["dt-paging-button","page-item"],o=(o&&r.push("active"),a&&r.push("disabled"),d("<li>").addClass(r.join(" ")));return{display:o,clicker:d("<button>",{class:"page-link",role:"link",type:"button"}).html(n).appendTo(o)}},n.ext.renderer.pagingContainer.bootstrap=function(t,e){return d("<ul/>").addClass("pagination").append(e)},n});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,4 @@
/*! Bootstrap 5 styling wrapper for ColumnControl
* © SpryMedia Ltd - datatables.net/license
*/
(e=>{var t,r;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs5","datatables.net-columncontrol"],function(o){return e(o,window,document)}):"object"==typeof exports?(t=require("jquery"),r=function(o,n){n.fn.dataTable||require("datatables.net-bs5")(o,n),n.fn.dataTable.ColumnControl||require("datatables.net-columncontrol")(o,n)},"undefined"==typeof window?module.exports=function(o,n){return o=o||window,n=n||t(o),r(o,n),e(n,0,o.document)}:(r(window,t),module.exports=e(t,window,window.document))):e(jQuery,window,document)})(function(o,n,e){o=o.fn.dataTable;return o.ColumnControl.content.dropdown.classes.container=["dtcc-dropdown","dropdown-menu","show"],o.ColumnControl.CheckList.classes.input=["dtcc-list-search","form-control","form-control-sm"],o.ColumnControl.SearchInput.classes.input=["form-control","form-control-sm"],o.ColumnControl.SearchInput.classes.select=["form-select","form-select-sm"],o});

File diff suppressed because one or more lines are too long

View File

@@ -1,84 +0,0 @@
{
"emptyTable": "テーブルにデータがありません",
"info": " _TOTAL_ 件中 _START_ から _END_ まで表示",
"infoEmpty": " 0 件中 0 から 0 まで表示",
"infoFiltered": "(全 _MAX_ 件より抽出)",
"infoThousands": ",",
"lengthMenu": "_MENU_ 件表示",
"loadingRecords": "読み込み中...",
"processing": "処理中...",
"search": "検索:",
"zeroRecords": "一致するレコードがありません",
"paginate": {
"first": "先頭",
"last": "最終",
"next": "次",
"previous": "前"
},
"aria": {
"sortAscending": ": 列を昇順に並べ替えるにはアクティブにする",
"sortDescending": ": 列を降順に並べ替えるにはアクティブにする"
},
"thousands": ",",
"buttons": {
"colvis": "項目の表示\/非表示",
"csv": "CSVをダウンロード",
"collection": "コレクション"
},
"searchBuilder": {
"add": "条件を追加",
"button": {
"0": "カスタムサーチ",
"_": "カスタムサーチ (%d)"
},
"clearAll": "すべての条件をクリア",
"condition": "条件",
"conditions": {
"date": {
"after": "次の日付以降",
"before": "次の日付以前",
"between": "次の期間に含まれる",
"empty": "空白",
"equals": "次の日付と等しい",
"not": "次の日付と等しくない",
"notBetween": "次の期間に含まれない",
"notEmpty": "空白ではない"
},
"number": {
"between": "次の値の間に含まれる",
"empty": "空白",
"equals": "次の値と等しい",
"gt": "次の値よりも大きい",
"gte": "次の値以上",
"lt": "次の値未満",
"lte": "次の値以下",
"not": "次の値と等しくない",
"notBetween": "次の値の間に含まれない",
"notEmpty": "空白ではない"
},
"string": {
"contains": "次の文字を含む",
"empty": "空白",
"endsWith": "次の文字で終わる",
"equals": "次の文字と等しい",
"not": "次の文字と等しくない",
"notEmpty": "空白ではない",
"startsWith": "次の文字から始まる",
"notContains": "次の文字を含まない",
"notStartsWith": "次の文字で始まらない",
"notEndsWith": "次の文字で終わらない"
}
},
"data": "項目",
"title": {
"0": "カスタムサーチ",
"_": "カスタムサーチ (%d)"
},
"value": "値"
},
"autoFill": {
"cancel": "キャンセル",
"fillHorizontal": "横でセルを書き込む",
"fillVertical": "縦でセルを書き込む"
}
}

View File

@@ -1,122 +0,0 @@
{
"emptyTable": "데이터가 없습니다",
"info": "_START_ - _END_ \/ _TOTAL_",
"infoEmpty": "0 - 0 \/ 0",
"infoFiltered": "(총 _MAX_ 개)",
"infoThousands": ",",
"lengthMenu": "페이지당 줄수 _MENU_",
"loadingRecords": "읽는중...",
"processing": "처리중...",
"search": "검색:",
"zeroRecords": "검색 결과가 없습니다",
"paginate": {
"first": "처음",
"last": "마지막",
"next": "다음",
"previous": "이전"
},
"aria": {
"sortAscending": ": 오름차순 정렬",
"sortDescending": ": 내림차순 정렬"
},
"buttons": {
"copyKeys": "ctrl키 나 u2318 + C키로 테이블 데이터를 시스텝 복사판에서 복사하고 취소하려면 이 메시지를 클릭하거나 ESC키를 누르면됩니다. to copy the table data to your system clipboard. To cancel, click this message or press escape.",
"copySuccess": {
"_": "%d행을 복사판에서 복사됨",
"1": "1행을 복사판에서 복사됨"
},
"copyTitle": "복사판에서 복사",
"csv": "CSV",
"pageLength": {
"-1": "모든 행 보기",
"_": "%d행 보기"
},
"pdf": "PDF",
"print": "인쇄",
"collection": "집합 <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "컬럼 보기",
"colvisRestore": "보기 복원",
"copy": "복사",
"excel": "엑셀"
},
"searchBuilder": {
"add": "조건 추가",
"button": {
"0": "빌더 조회",
"_": "빌더 조회(%d)"
},
"clearAll": "모두 지우기",
"condition": "조건",
"data": "데이터",
"deleteTitle": "필터 규칙을 삭제",
"logicAnd": "And",
"logicOr": "Or",
"title": {
"0": "빌더 조회",
"_": "빌더 조회(%d)"
},
"value": "값"
},
"autoFill": {
"cancel": "취소",
"fill": "모든 셀에서 <i>%d<i>을(를) 삽입<\/i><\/i>",
"fillHorizontal": "수평 셀에서 값을 삽입",
"fillVertical": "수직 설에서 값을 삽입"
},
"datetime": {
"previous": "이전",
"next": "다음",
"hours": "시",
"minutes": "분",
"seconds": "초",
"unknown": "-",
"amPm": [
"오전",
"오후"
],
"weekdays": [
"일",
"월",
"화",
"수",
"목",
"금",
"토"
],
"months": [
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월"
]
},
"editor": {
"close": "닫기",
"create": {
"button": "추가",
"title": "항목 추가",
"submit": "완료"
},
"edit": {
"button": "수정",
"title": "항목 수정",
"submit": "완료"
},
"remove": {
"button": "삭제",
"title": "항목 삭제",
"submit": "완료"
},
"error": {
"system": "에러가 발생하였습니다 (&lt;a target=\"\\\" rel=\"nofollow\" href=\"\\\"&gt;자세한 정보&lt;\/a&gt;)."
}
}
}

View File

@@ -1,186 +0,0 @@
{
"lengthMenu": "Показати _MENU_ записів",
"infoFiltered": "(відфільтровано з _MAX_ записів)",
"search": "Пошук:",
"paginate": {
"first": "Перша",
"previous": "Попередня",
"next": "Наступна",
"last": "Остання"
},
"aria": {
"sortAscending": ": активуйте, щоб сортувати колонку за зростанням",
"sortDescending": ": активуйте, щоб сортувати колонку за спаданням"
},
"autoFill": {
"cancel": "Відміна",
"fill": "Заповнити всі клітинки з <i>%d<\/i>",
"fillHorizontal": "Заповнити клітинки горизонтально",
"fillVertical": "Заповнити клітинки вертикально"
},
"buttons": {
"collection": "Список <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "Видимість колонки",
"colvisRestore": "Відновити видимість",
"copy": "Копіювати",
"copyKeys": "Нажміть ctrl або u2318 + C щоб копіювати інформацію з таблиці до вашого буферу обміну.<br \/><br \/>Щоб відмінити нажміть на це повідомлення або Esc",
"copySuccess": {
"1": "Скопійовано 1 рядок в буфер обміну",
"_": "Скопійовано %d рядків в буфер обміну"
},
"copyTitle": "Копіювати в буфер обміну",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"-1": "Показати усі рядки",
"_": "Показати %d рядки"
},
"pdf": "PDF",
"print": "Друкувати"
},
"emptyTable": "Ця таблиця не містить даних",
"info": "Показано від _START_ по _END_ з _TOTAL_ записів",
"infoEmpty": "Показано від 0 по 0 з 0 записів",
"infoThousands": ",",
"loadingRecords": "Завантаження",
"processing": "Опрацювання...",
"searchBuilder": {
"add": "Додати умову",
"button": {
"0": "Розширений пошук",
"_": "Розширений пошук (%d)"
},
"clearAll": "Очистити все",
"condition": "Умова",
"conditions": {
"date": {
"after": "Після",
"before": "До",
"between": "Між",
"empty": "Пусто",
"equals": "Дорівнює",
"not": "Не",
"notBetween": "Не між",
"notEmpty": "Не пусто"
},
"number": {
"between": "Між",
"empty": "Пусто",
"equals": "Дорівнює",
"gt": "Більше ніж",
"gte": "Більше або дорівнює",
"lt": "Менше ніж",
"lte": "Менше або дорівнює",
"not": "Не",
"notBetween": "Не між",
"notEmpty": "Не пусто"
},
"string": {
"contains": "Містить",
"empty": "Пусто",
"endsWith": "Закінчується з",
"equals": "Дорівнює",
"not": "Не",
"notEmpty": "Не пусто",
"startsWith": "Починається з",
"notContains": "Не містить",
"notStartsWith": "Не починається з",
"notEndsWith": "Не закінчується на"
},
"array": {
"equals": "Дорівнює",
"empty": "Пустий",
"contains": "Містить",
"not": "Не",
"notEmpty": "Не пустий",
"without": "Без"
}
},
"data": "Дата",
"deleteTitle": "Видалити правило фільтрування",
"leftTitle": "Відступні критерії",
"logicAnd": "I",
"logicOr": "Або",
"rightTitle": "Відступні критерії",
"title": {
"0": "Розширений пошук",
"_": "Розширений пошук (%d)"
},
"value": "Значення"
},
"searchPanes": {
"clearMessage": "Очистити все",
"collapse": {
"0": "Пошукові Панелі",
"_": "Пошукові Панелі (%d)"
},
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyPanes": "Немає Пошукових Панелей",
"loadMessage": "Завантаження Пошукових Панелей",
"title": "Активній фільтри - %d",
"showMessage": "Показати всі",
"collapseMessage": "Приховати всі"
},
"select": {
"cells": {
"1": "1 клітинку вибрано",
"_": "%d клітинок вибрано"
},
"columns": {
"1": "1 колонку вибрано",
"_": "%d колонок вибрано"
}
},
"thousands": ",",
"zeroRecords": "Не знайдено жодних записів",
"editor": {
"close": "Закрити",
"create": {
"button": "Cтворити нову",
"title": "Cтворити новий запис",
"submit": "Cтворити"
},
"edit": {
"button": "Редагувати",
"title": "Редагувати запис",
"submit": "Оновити"
},
"remove": {
"button": "Видалити",
"title": "Видалити",
"submit": "Видалити"
}
},
"datetime": {
"minutes": "Хвилина",
"months": {
"0": "Січень",
"1": "Лютий",
"10": "Листопад",
"11": "Грудень",
"2": "Березень",
"3": "Квітень",
"4": "Травень",
"5": "Червень",
"6": "Липень",
"7": "Серпень",
"8": "Вересень",
"9": "Жовтень"
},
"next": "Наступні",
"previous": "Попередні",
"seconds": "Секунда",
"unknown": "-",
"weekdays": [
"Неділя",
"Понеділок",
"Вівторок",
"Середа",
"Четверг",
"П'ятниця",
"Субота"
]
},
"searchPlaceholder": "Пошук"
}

View File

@@ -1,21 +1,140 @@
{
"aria": {
"paginate": {
"first": "První",
"last": "Poslední",
"next": "Další",
"previous": "Předchozí"
}
},
"autoFill": {
"cancel": "Zrušit",
"fill": "Vyplň všechny buňky textem <i>%d<i><\/i><\/i>",
"fillHorizontal": "Vyplň všechny buňky horizontálně",
"fillVertical": "Vyplň všechny buňky vertikálně",
"info": ""
},
"buttons": {
"collection": "Kolekce <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "Viditelnost sloupců",
"colvisRestore": "Resetovat sloupce",
"copy": "Kopírovat",
"copyKeys": "Zmáčkněte Ctrl nebo u2318 + C pro zkopírování dat. Pro zrušení klikněte na tuto zprávu nebo zmáčkněte Esc.",
"copySuccess": {
"_": "Zkopírováno %d řádků do schránky",
"1": "Zkopírován 1 řádek do schránky"
},
"copyTitle": "Kopírovat do schránky",
"createState": "Vytvořit stav",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"_": "Zobrazit %d řádků",
"-1": "Zobrazit všechny řádky"
},
"pdf": "PDF",
"print": "Tisknout",
"removeAllStates": "Vymazat všechny stavy",
"removeState": "Odstranit",
"renameState": "Odstranit",
"savedStates": "Uložit stavy",
"stateRestore": "Stav %d",
"updateState": "Aktualizovat"
},
"datetime": {
"amPm": {
"0": "Dopoledne",
"1": "Odpoledne"
},
"hours": "Hodiny",
"minutes": "Minuty",
"months": {
"0": "Leden",
"1": "Únor",
"10": "Listopad",
"11": "Prosinec",
"2": "Březen",
"3": "Duben",
"4": "Květen",
"5": "Červen",
"6": "Červenec",
"7": "Srpen",
"8": "Září",
"9": "Říjen"
},
"next": "Další",
"previous": "Předchozí",
"seconds": "Sekundy",
"unknown": "-",
"weekdays": {
"0": "Ne",
"1": "Po",
"2": "Út",
"3": "St",
"4": "Čt",
"5": "Pá",
"6": "So"
}
},
"decimal": "",
"editor": {
"close": "Zavřít",
"create": {
"button": "Nový",
"submit": "Vytvořit",
"title": "Nový záznam"
},
"edit": {
"button": "Změnit",
"submit": "Aktualizovat",
"title": "Změnit záznam"
},
"error": {
"system": "Došlo k systémové chybě (&lt;a target=\"\\\" rel=\"nofollow\" href=\"\\\"&gt;Více informací&lt;\/a&gt;)."
},
"multi": {
"info": "Vybrané položky obsahují různé hodnoty pro tento vstup. Chcete-li upravit a nastavit všechny položky tohoto vstupu na stejnou hodnotu, klikněte nebo klepněte sem, jinak si zachovají své individuální hodnoty.",
"noMulti": "Toto pole může být upravováno individuálně, ale ne jako součást skupiny.",
"restore": "Vrátit změny",
"title": "Mnohočetný výběr"
},
"remove": {
"button": "Vymazat",
"confirm": {
"_": "Opravdu chcete smazat tyto %d řádky?",
"1": "Opravdu chcete smazat tento 1 řádek?"
},
"submit": "Vymazat",
"title": "Smazání"
}
},
"emptyTable": "Tabulka neobsahuje žádná data",
"info": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů",
"infoEmpty": "Zobrazuji 0 až 0 z 0 záznamů",
"infoFiltered": "(filtrováno z celkem _MAX_ záznamů)",
"infoPostFix": "",
"infoThousands": " ",
"lengthMenu": "Zobrazit _MENU_ výsledků",
"loadingRecords": "Načítám...",
"zeroRecords": "Žádné záznamy nebyly nalezeny",
"paginate": {
"first": "První",
"last": "Poslední",
"next": "Další",
"previous": "Předchozí"
},
"processing": "Zpracovávání...",
"search": "Vyhledávání:",
"searchBuilder": {
"add": "Přidat podmínku",
"button": {
"_": "Rozšířený filtr (%d)",
"0": "Rozšířený filtr"
},
"clearAll": "Smazat vše",
"condition": "Podmínka",
"conditions": {
"array": {
"contains": "obsahuje",
"empty": "prázdné",
"equals": "rovno",
"not": "není",
"notEmpty": "není prázdné",
"without": "neobsahuje"
},
"date": {
"after": "po",
"before": "před",
@@ -44,176 +163,57 @@
"endsWith": "končí na",
"equals": "rovno",
"not": "není",
"notEmpty": "není prázdné",
"startsWith": "začíná na",
"notContains": "Podmínka",
"notStartsWith": "Nezačíná",
"notEndsWith": "Nekončí"
},
"array": {
"equals": "rovno",
"empty": "prázdné",
"contains": "obsahuje",
"not": "není",
"notEmpty": "není prázdné",
"without": "neobsahuje"
"notEndsWith": "Nekončí",
"notStartsWith": "Nezačíná",
"startsWith": "začíná na"
}
},
"data": "Sloupec",
"logicAnd": "A",
"logicOr": "NEBO",
"title": {
"0": "Rozšířený filtr",
"_": "Rozšířený filtr (%d)"
},
"value": "Hodnota",
"button": {
"0": "Rozšířený filtr",
"_": "Rozšířený filtr (%d)"
},
"deleteTitle": "Smazat filtrovací pravidlo",
"leftTitle": "Zrušení odsazení podmínky",
"rightTitle": "Odsazení podmínky"
},
"autoFill": {
"cancel": "Zrušit",
"fill": "Vyplň všechny buňky textem <i>%d<i><\/i><\/i>",
"fillHorizontal": "Vyplň všechny buňky horizontálně",
"fillVertical": "Vyplň všechny buňky vertikálně",
"info": "Příklad automatického vyplňování"
},
"buttons": {
"collection": "Kolekce <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"copy": "Kopírovat",
"copyTitle": "Kopírovat do schránky",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"-1": "Zobrazit všechny řádky",
"_": "Zobrazit %d řádků",
"1": "Zobraz 1 řádek"
"logicAnd": "A",
"logicOr": "NEBO",
"rightTitle": "Odsazení podmínky",
"title": {
"_": "Rozšířený filtr (%d)",
"0": "Rozšířený filtr"
},
"pdf": "PDF",
"print": "Tisknout",
"colvis": "Viditelnost sloupců",
"colvisRestore": "Resetovat sloupce",
"copyKeys": "Zmáčkněte ctrl or u2318 + C pro zkopírování dat. Pro zrušení klikněte na tuto zprávu nebo zmáčkněte esc..",
"copySuccess": {
"1": "Zkopírován 1 řádek do schránky",
"_": "Zkopírováno %d řádků do schránky"
},
"createState": "Vytvořit Stav",
"removeAllStates": "Vymazat všechny Stavy",
"removeState": "Odstranit",
"renameState": "Odstranit",
"savedStates": "Uložit Stavy",
"stateRestore": "Stav %d",
"updateState": "Aktualizovat"
"value": "Hodnota"
},
"searchPanes": {
"clearMessage": "Smazat vše",
"collapse": {
"0": "Vyhledávací Panely",
"_": "Vyhledávací Panely (%d)"
"_": "Vyhledávací panely (%d)",
"0": "Vyhledávací panely"
},
"collapseMessage": "Sbalit vše",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyPanes": "Žádné Vyhledávací Panely",
"loadMessage": "Načítám Vyhledávací Panely",
"title": "Aktivních filtrů - %d",
"showMessage": "Zobrazit Vše",
"collapseMessage": "Sbalit Vše"
"emptyPanes": "Žádné vyhledávací panely",
"loadMessage": "Načítám vyhledávací panely...",
"showMessage": "Zobrazit vše",
"title": "Aktivních filtrů - %d"
},
"searchPlaceholder": "",
"select": {
"cells": {
"1": "Vybrán 1 záznam",
"_": "Vybráno %d záznamů"
"_": "Vybráno %d záznamů",
"0": "",
"1": "Vybrán 1 záznam"
},
"columns": {
"1": "Vybrán 1 sloupec",
"_": "Vybráno %d sloupců"
"_": "Vybráno %d sloupců",
"0": "",
"1": "Vybrán 1 sloupec"
},
"rows": {
"1": "Vybrán 1 řádek",
"_": "Vybráno %d řádků"
"_": "Vybráno %d řádků",
"0": "",
"1": "Vybrán 1 řádek"
}
},
"aria": {
"sortAscending": "Aktivujte pro seřazení vzestupně",
"sortDescending": "Aktivujte pro seřazení sestupně"
},
"lengthMenu": "Zobrazit _MENU_ výsledků",
"processing": "Zpracovávání...",
"search": "Vyhledávání:",
"datetime": {
"previous": "Předchozí",
"next": "Další",
"hours": "Hodiny",
"minutes": "Minuty",
"seconds": "Vteřiny",
"unknown": "-",
"amPm": [
"Dopoledne",
"Odpoledne"
],
"months": [
"Leden",
"Únor",
"Březen",
"Duben",
"Květen",
"Červen",
"Červenec",
"Srpen",
"Září",
"Říjen",
"Listopad",
"Prosinec"
],
"weekdays": [
"Ne",
"Po",
"Út",
"St",
"Čt",
"Pá",
"So"
]
},
"editor": {
"close": "Zavřít",
"create": {
"button": "Nový",
"title": "Nový záznam",
"submit": "Vytvořit"
},
"edit": {
"button": "Změnit",
"title": "Změnit záznam",
"submit": "Aktualizovat"
},
"remove": {
"button": "Vymazat",
"title": "Smazání",
"submit": "Vymazat",
"confirm": {
"_": "Opravdu chcete smazat tyto %d řádky?",
"1": "Opravdu chcete smazat tento 1 řádek?"
}
},
"multi": {
"title": "Mnohočetný výběr",
"restore": "Vrátit změny",
"noMulti": "Toto pole může být editováno individuálně, ale ne jako soušást skupiny.",
"info": "Vybrané položky obsahují různé hodnoty pro tento vstup. Chcete-li upravit a nastavit všechny položky tohoto vstupu na stejnou hodnotu, klikněte nebo klepněte sem, jinak si zachovají své individuální hodnoty."
},
"error": {
"system": "Došlo k systémové chybě (&lt;a target=\"\\\" rel=\"nofollow\" href=\"\\\"&gt;Více informací&lt;\/a&gt;)."
}
},
"infoThousands": " ",
"decimal": ",",
"thousands": " ",
"stateRestore": {
"creationModal": {
"button": "Vytvořit",
@@ -225,23 +225,24 @@
"order": "Řazení",
"paging": "Stránkování",
"scroller": "Pozice skrolování",
"select": "Výběr",
"title": "Vytvořit nový Stav",
"toggleLabel": "Zahrnout",
"search": "Filtrování",
"searchBuilder": "Rozšířené filtrování"
"searchBuilder": "Rozšířené filtrování",
"select": "Výběr",
"title": "Vytvořit nový stav",
"toggleLabel": "Zahrnout"
},
"duplicateError": "Stav s tímto názvem ji existuje.",
"emptyError": "Název nemůže být prázný.",
"duplicateError": "Stav s tímto názvem již existuje.",
"emptyError": "Název nemůže být prázdný.",
"emptyStates": "Žádné uložené stavy",
"removeConfirm": "Opravdu chcete odstranbit %s?",
"removeConfirm": "Opravdu chcete odstranit %s?",
"removeError": "Chyba při odstraňování stavu.",
"removeJoiner": "a",
"removeSubmit": "Odstranit",
"removeTitle": "Odstranit Stav",
"removeTitle": "Odstranit stav",
"renameButton": "Vymazat",
"renameLabel": "Nové jméno pro %s:",
"renameTitle": "Přejmenování Stavu"
"renameTitle": "Přejmenování stavu"
},
"searchPlaceholder": "Příklad zástupného prvku"
"thousands": " ",
"zeroRecords": "Nebyly nalezeny žádné záznamy"
}

View File

@@ -1,89 +1,209 @@
{
"emptyTable": "Keine Daten in der Tabelle vorhanden",
"info": "_START_ bis _END_ von _TOTAL_ Einträgen",
"infoEmpty": "Keine Daten vorhanden",
"infoFiltered": "(gefiltert von _MAX_ Einträgen)",
"infoThousands": ".",
"loadingRecords": "Wird geladen ..",
"processing": "Bitte warten ..",
"paginate": {
"first": "Erste",
"next": "Nächste",
"last": "Letzte",
"previous": "Vorherige"
},
"aria": {
"sortAscending": ": aktivieren, um Spalte aufsteigend zu sortieren",
"sortDescending": ": aktivieren, um Spalte absteigend zu sortieren"
},
"select": {
"rows": {
"_": "%d Zeilen ausgewählt",
"1": "1 Zeile ausgewählt"
},
"cells": {
"1": "1 Zelle ausgewählt",
"_": "%d Zellen ausgewählt"
},
"columns": {
"1": "1 Spalte ausgewählt",
"_": "%d Spalten ausgewählt"
"paginate": {
"first": "Erste",
"last": "Letzte",
"next": "Nächste",
"previous": "Vorherige"
}
},
"buttons": {
"print": "Drucken",
"copy": "Kopieren",
"copyTitle": "In Zwischenablage kopieren",
"copySuccess": {
"_": "%d Zeilen kopiert",
"1": "1 Zeile kopiert"
},
"collection": "Aktionen <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "Spaltensichtbarkeit",
"colvisRestore": "Sichtbarkeit wiederherstellen",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"-1": "Alle Zeilen anzeigen",
"1": "Zeige 1 Zeile",
"_": "Zeige %d Zeilen"
},
"pdf": "PDF",
"createState": "Ansicht erstellen",
"removeAllStates": "Alle Ansichten entfernen",
"removeState": "Entfernen",
"renameState": "Umbenennen",
"savedStates": "Gespeicherte Ansicht",
"stateRestore": "Ansicht %d",
"updateState": "Aktualisieren",
"copyKeys": "Taste <i>STRG&lt;\\\/i&gt; oder <i>⌘&lt;\\\/i&gt; + <i>C&lt;\\\/i&gt; drücken um die Tabelle<br \/>in den Zwischenspeicher zu kopieren.<br \/><br \/>Um den Vorgang abzubrechen, Nachricht anklicken oder Escape-Taste drücken.<\/i><\/i><\/i>"
},
"autoFill": {
"cancel": "Abbrechen",
"fill": "Alle Zellen mit <i>%d<i> füllen<\/i><\/i>",
"fillHorizontal": "Alle horizontalen Zellen füllen",
"fillVertical": "Alle vertikalen Zellen füllen",
"info": "Automatische Vervollständigung"
"info": ""
},
"decimal": ",",
"buttons": {
"collection": "Aktionen <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "Spaltensichtbarkeit",
"colvisRestore": "Sichtbarkeit wiederherstellen",
"copy": "Kopieren",
"copyKeys": "Taste <i>STRG&lt;\\\/i&gt; oder <i>⌘&lt;\\\/i&gt; + <i>C&lt;\\\/i&gt; drücken um die Tabelle<br \/>in den Zwischenspeicher zu kopieren.<br \/><br \/>Um den Vorgang abzubrechen, Nachricht anklicken oder Escape-Taste drücken.<\/i><\/i><\/i>",
"copySuccess": {
"_": "%d Zeilen kopiert",
"1": "1 Zeile kopiert"
},
"copyTitle": "In Zwischenablage kopieren",
"createState": "Ansicht erstellen",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"_": "Zeige %d Zeilen",
"-1": "Alle Zeilen anzeigen",
"1": "Zeigt 1 Zeile"
},
"pdf": "PDF",
"print": "Drucken",
"removeAllStates": "Alle Ansichten entfernen",
"removeState": "Entfernen",
"renameState": "Umbenennen",
"savedStates": "Gespeicherte Ansicht",
"stateRestore": "Ansicht %d",
"updateState": "Aktualisieren"
},
"columnControl": {
"buttons": {
"searchClear": "Suche löschen"
},
"colVis": "Sichtbarkeit der Spalte",
"colVisDropdown": "Sichtbarkeit der Spalte",
"dropdown": "Mehr...",
"list": {
"all": "Alle auswählen",
"empty": "Leer",
"none": "Nichts auswählen",
"search": "Suche..."
},
"orderAddAsc": "Aufsteigende Sortierung hinzufügen",
"orderAddDesc": "Absteigende Sortierung hinzufügen",
"orderAsc": "Aufsteigend sortieren",
"orderClear": "Sortierung aufheben",
"orderDesc": "Absteigend sortieren",
"orderRemove": "Aus Sortierung löschen",
"reorder": "Spalten neu sortieren",
"reorderLeft": "Spalte nach links verschieben",
"reorderRight": "Spalte nach rechts verschieben",
"search": {
"datetime": {
"empty": "Leer",
"equal": "Gleich",
"greater": "Nach",
"less": "Vor",
"notEmpty": "Nicht leer",
"notEqual": "Nicht"
},
"number": {
"empty": "Leer",
"equal": "Gleich",
"greater": "Größer",
"greaterOrEqual": "Größer gleich",
"less": "Kleiner",
"lessOrEqual": "Kleiner gleich",
"notEmpty": "Nicht leer",
"notEqual": "Nicht"
},
"text": {
"contains": "Enthält",
"empty": "Leer",
"ends": "Endet auf",
"equal": "Gleich",
"notContains": "Enthält nicht",
"notEmpty": "Nicht leer",
"notEqual": "Nicht",
"starts": "Startet mit"
}
},
"searchClear": "Suche leeren",
"searchDropdown": "Suchen"
},
"datetime": {
"amPm": {
"0": "Vormittag",
"1": "Nachmittag"
},
"hours": "Stunden",
"minutes": "Minuten",
"months": {
"0": "Januar",
"1": "Februar",
"10": "November",
"11": "Dezember",
"2": "März",
"3": "April",
"4": "Mai",
"5": "Juni",
"6": "Juli",
"7": "August",
"8": "September",
"9": "Oktober"
},
"next": "Nachher",
"previous": "Vorher",
"seconds": "Sekunden",
"unknown": "Unbekannt",
"weekdays": {
"0": "Sonntag",
"1": "Montag",
"2": "Dienstag",
"3": "Mittwoch",
"4": "Donnerstag",
"5": "Freitag",
"6": "Samstag"
}
},
"decimal": "",
"editor": {
"close": "Schließen",
"create": {
"button": "Neu",
"submit": "Erstellen",
"title": "Neuen Eintrag erstellen"
},
"edit": {
"button": "Bearbeiten",
"submit": "Bearbeiten",
"title": "Eintrag bearbeiten"
},
"error": {
"system": "Ein Systemfehler ist aufgetreten"
},
"multi": {
"info": "Die ausgewählten Elemente enthalten mehrere Werte für dieses Feld. Um alle Elemente für dieses Feld zu bearbeiten und auf denselben Wert zu setzen, hier klicken oder tippen, andernfalls behalten diese ihre individuellen Werte bei.",
"noMulti": "Dieses Feld kann nur einzeln bearbeitet werden, nicht als Teil einer Mengen-Änderung.",
"restore": "Änderungen zurücksetzen",
"title": "Mehrere Werte"
},
"remove": {
"button": "Entfernen",
"confirm": {
"_": "Sollen %d Zeilen gelöscht werden?",
"1": "Soll diese Zeile gelöscht werden?"
},
"submit": "Entfernen",
"title": "Entfernen"
}
},
"emptyTable": "Keine Daten in der Tabelle vorhanden",
"info": "_START_ bis _END_ von _TOTAL_ Einträgen",
"infoEmpty": "Keine Daten vorhanden",
"infoFiltered": "(gefiltert von _MAX_ Einträgen)",
"infoPostFix": "",
"infoThousands": ".",
"lengthLabels": {
"-1": "Alle"
},
"lengthMenu": "_MENU_ Zeilen anzeigen",
"loadingRecords": "Wird geladen ..",
"orderClear": "Sortierung leeren",
"processing": "Bitte warten ..",
"search": "Suche:",
"searchBuilder": {
"add": "Bedingung hinzufügen",
"button": {
"0": "Such-Baukasten",
"_": "Such-Baukasten (%d)"
"_": "Such-Baukasten (%d)",
"0": "Such-Baukasten"
},
"clearAll": "Alle entfernen",
"condition": "Bedingung",
"conditions": {
"array": {
"contains": "enthält",
"empty": "ist leer",
"equals": "ist gleich",
"not": "ist ungleich",
"notEmpty": "ist nicht leer",
"without": "aber nicht"
},
"date": {
"after": "Nach",
"before": "Vor",
"between": "Zwischen",
"empty": "Leer",
"equals": "Gleich",
"not": "Nicht",
"notBetween": "Nicht zwischen",
"notEmpty": "Nicht leer",
"equals": "Gleich"
"notEmpty": "Nicht leer"
},
"number": {
"between": "Zwischen",
@@ -103,114 +223,59 @@
"endsWith": "Endet mit",
"equals": "Entspricht",
"not": "Nicht",
"notEmpty": "Nicht leer",
"startsWith": "Startet mit",
"notContains": "enthält nicht",
"notEmpty": "Nicht leer",
"notEndsWith": "endet nicht mit",
"notStartsWith": "startet nicht mit",
"notEndsWith": "endet nicht mit"
},
"array": {
"equals": "ist gleich",
"empty": "ist leer",
"contains": "enthält",
"not": "ist ungleich",
"notEmpty": "ist nicht leer",
"without": "aber nicht"
"startsWith": "Startet mit"
}
},
"data": "Daten",
"deleteTitle": "Filterregel entfernen",
"leftTitle": "Äußere Kriterien",
"rightTitle": "Innere Kriterien",
"title": {
"0": "Such-Baukasten",
"_": "Such-Baukasten (%d)"
},
"value": "Wert",
"clearAll": "Alle entfernen",
"logicAnd": "Und",
"logicOr": "Oder"
"logicOr": "Oder",
"rightTitle": "Innere Kriterien",
"search": "Suche",
"title": {
"_": "Such-Baukasten (%d)",
"0": "Such-Baukasten"
},
"value": "Wert"
},
"searchPanes": {
"clearMessage": "Leeren",
"collapse": {
"0": "Suchmasken",
"_": "Suchmasken (%d)"
"_": "Suchmasken (%d)",
"0": "Suchmasken"
},
"countFiltered": "{shown} ({total})",
"emptyPanes": "Keine Suchmasken",
"title": "Aktive Filter: %d",
"showMessage": "zeige Alle",
"collapseMessage": "Alle einklappen",
"count": "{total}",
"loadMessage": "Lade Suchmasken .."
"countFiltered": "{shown} ({total})",
"emptyMessage": "<em>Leer<\/em>",
"emptyPanes": "Keine Suchmasken",
"loadMessage": "Lade Suchmasken ..",
"showMessage": "zeige Alle",
"title": "Aktive Filter: %d"
},
"thousands": ".",
"zeroRecords": "Keine passenden Einträge gefunden",
"lengthMenu": "_MENU_ Zeilen anzeigen",
"datetime": {
"previous": "Vorher",
"next": "Nachher",
"hours": "Stunden",
"minutes": "Minuten",
"seconds": "Sekunden",
"unknown": "Unbekannt",
"weekdays": [
"Sonntag",
"Montag",
"Dienstag",
"Mittwoch",
"Donnerstag",
"Freitag",
"Samstag"
],
"months": [
"Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember"
]
},
"editor": {
"close": "Schließen",
"create": {
"button": "Neu",
"title": "Neuen Eintrag erstellen",
"submit": "Erstellen"
"searchPlaceholder": "",
"select": {
"cells": {
"_": "%d Zellen ausgewählt",
"0": "",
"1": "1 Zelle ausgewählt"
},
"remove": {
"confirm": {
"_": "Sollen %d Zeilen gelöscht werden?",
"1": "Soll diese Zeile gelöscht werden?"
},
"button": "Entfernen",
"title": "Entfernen",
"submit": "Entfernen"
"columns": {
"_": "%d Spalten ausgewählt",
"0": "",
"1": "1 Spalte ausgewählt"
},
"error": {
"system": "Ein Systemfehler ist aufgetreten"
},
"multi": {
"title": "Mehrere Werte",
"restore": "Änderungen zurücksetzen",
"noMulti": "Dieses Feld kann nur einzeln bearbeitet werden, nicht als Teil einer Mengen-Änderung.",
"info": "Die ausgewählten Elemente enthalten mehrere Werte für dieses Feld. Um alle Elemente für dieses Feld zu bearbeiten und auf denselben Wert zu setzen, hier klicken oder tippen, andernfalls behalten diese ihre individuellen Werte bei."
},
"edit": {
"button": "Bearbeiten",
"title": "Eintrag bearbeiten",
"submit": "Bearbeiten"
"rows": {
"_": "%d Zeilen ausgewählt",
"0": "",
"1": "1 Zeile ausgewählt"
}
},
"searchPlaceholder": "Suchen...",
"stateRestore": {
"creationModal": {
"button": "Erstellen",
@@ -231,13 +296,15 @@
"duplicateError": "Eine Ansicht mit diesem Namen existiert bereits.",
"emptyError": "Name darf nicht leer sein.",
"emptyStates": "Keine gespeicherten Ansichten",
"removeConfirm": "Sicher dass %s entfernt werden soll?",
"removeError": "Entfernen der Ansicht fehlgeschlagen.",
"removeJoiner": " und ",
"removeSubmit": "Entfernen",
"removeTitle": "Ansicht entfernen",
"renameButton": "Umbenennen",
"renameLabel": "Neuer Name für %s:",
"renameTitle": "Ansicht umbenennen",
"removeConfirm": "Sicher dass %s entfernt werden soll?"
}
"renameTitle": "Ansicht umbenennen"
},
"thousands": ".",
"zeroRecords": "Keine passenden Einträge gefunden"
}

View File

@@ -1,159 +1,112 @@
{
"processing": "Procesando...",
"lengthMenu": "Mostrar _MENU_ registros",
"zeroRecords": "No se encontraron resultados",
"emptyTable": "Ningún dato disponible en esta tabla",
"infoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
"infoFiltered": "(filtrado de un total de _MAX_ registros)",
"search": "Buscar:",
"loadingRecords": "Cargando...",
"paginate": {
"first": "Primero",
"last": "Último",
"next": "Siguiente",
"previous": "Anterior"
},
"aria": {
"sortAscending": ": Activar para ordenar la columna de manera ascendente",
"sortDescending": ": Activar para ordenar la columna de manera descendente"
},
"buttons": {
"copy": "Copiar",
"colvis": "Visibilidad",
"collection": "Colección",
"colvisRestore": "Restaurar visibilidad",
"copyKeys": "Presione ctrl o u2318 + C para copiar los datos de la tabla al portapapeles del sistema. <br \/> <br \/> Para cancelar, haga clic en este mensaje o presione escape.",
"copySuccess": {
"1": "Copiada 1 fila al portapapeles",
"_": "Copiadas %ds fila al portapapeles"
},
"copyTitle": "Copiar al portapapeles",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"-1": "Mostrar todas las filas",
"_": "Mostrar %d filas"
},
"pdf": "PDF",
"print": "Imprimir",
"renameState": "Cambiar nombre",
"updateState": "Actualizar",
"createState": "Crear Estado",
"removeAllStates": "Remover Estados",
"removeState": "Remover",
"savedStates": "Estados Guardados",
"stateRestore": "Estado %d"
"orderable": "Activar para ordenar",
"orderableRemove": "Activar para quitar ordenación",
"orderableReverse": "Activar para ordenar de forma inversa",
"paginate": {
"first": "Primero",
"last": "Último",
"next": "Siguiente",
"previous": "Anterior"
}
},
"autoFill": {
"cancel": "Cancelar",
"fill": "Rellene todas las celdas con <i>%d<\/i>",
"fillHorizontal": "Rellenar celdas horizontalmente",
"fillVertical": "Rellenar celdas verticalmente"
"fillVertical": "Rellenar celdas verticalmente",
"info": ""
},
"decimal": ",",
"searchBuilder": {
"add": "Añadir condición",
"button": {
"0": "Constructor de búsqueda",
"_": "Constructor de búsqueda (%d)"
"buttons": {
"collection": "Colección",
"colvis": "Visibilidad",
"colvisRestore": "Restaurar visibilidad",
"copy": "Copiar",
"copyKeys": "Presione ctrl o u2318 + C para copiar los datos de la tabla al portapapeles del sistema. <br \/> <br \/> Para cancelar, haga clic en este mensaje o presione escape.",
"copySuccess": {
"_": "Copiadas %ds filas al portapapeles",
"1": "Copiada 1 fila al portapapeles"
},
"clearAll": "Borrar todo",
"condition": "Condición",
"conditions": {
"date": {
"before": "Antes",
"between": "Entre",
"copyTitle": "Copiar al portapapeles",
"createState": "Crear Estado",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"_": "Mostrar %d filas",
"-1": "Mostrar todas las filas",
"1": "Mostrar 1 fila"
},
"pdf": "PDF",
"print": "Imprimir",
"removeAllStates": "Remover Estados",
"removeState": "Remover",
"renameState": "Cambiar nombre",
"savedStates": "Estados Guardados",
"stateRestore": "Estado %d",
"updateState": "Actualizar"
},
"columnControl": {
"buttons": {
"searchClear": "Borrar búsqueda"
},
"colVis": "Visibilidad",
"colVisDropdown": "Desplegable visibilidad",
"dropdown": "Desplegable",
"list": {
"all": "Añadir",
"empty": "Vacío",
"none": "Ninguno",
"search": "Buscar.."
},
"orderAddAsc": "Añadir a ordenación ascendente",
"orderAddDesc": "Añadir a ordenación descencente",
"orderAsc": "Ordenar ascendentemente",
"orderClear": "Borrar ordenación",
"orderDesc": "Ordenar descendentemente",
"orderRemove": "Borrar de ordenación",
"reorder": "Reordenar",
"reorderLeft": "Mover a la izquierda",
"reorderRight": "Mover a la derecha",
"search": {
"datetime": {
"empty": "Vacío",
"equals": "Igual a",
"notBetween": "No entre",
"not": "Diferente de",
"after": "Después",
"notEmpty": "No Vacío"
"equal": "Igual a",
"greater": "Mayor que",
"less": "Menor que",
"notEmpty": "No vacío",
"notEqual": "Diferente de"
},
"number": {
"between": "Entre",
"equals": "Igual a",
"gt": "Mayor a",
"gte": "Mayor o igual a",
"lt": "Menor que",
"lte": "Menor o igual que",
"notBetween": "No entre",
"empty": "Vacío",
"equal": "Igual a",
"greater": "Mayor que",
"greaterOrEqual": "Mayor o igual a",
"less": "Menor que",
"lessOrEqual": "Menor o igual a",
"notEmpty": "No vacío",
"not": "Diferente de",
"empty": "Vacío"
"notEqual": "Diferente de"
},
"string": {
"text": {
"contains": "Contiene",
"empty": "Vacío",
"endsWith": "Termina en",
"equals": "Igual a",
"startsWith": "Empieza con",
"not": "Diferente de",
"notContains": "No Contiene",
"notStartsWith": "No empieza con",
"notEndsWith": "No termina con",
"notEmpty": "No Vacío"
},
"array": {
"not": "Diferente de",
"equals": "Igual",
"empty": "Vacío",
"contains": "Contiene",
"notEmpty": "No Vacío",
"without": "Sin"
"ends": "Finaliza con",
"equal": "Igual a",
"notContains": "no contiene",
"notEmpty": "No vacío",
"notEqual": "Diferente de",
"starts": "Empieza con"
}
},
"data": "Data",
"deleteTitle": "Eliminar regla de filtrado",
"leftTitle": "Criterios anulados",
"logicAnd": "Y",
"logicOr": "O",
"rightTitle": "Criterios de sangría",
"title": {
"0": "Constructor de búsqueda",
"_": "Constructor de búsqueda (%d)"
},
"value": "Valor"
"searchClear": "Borrar búsqueda",
"searchDropdown": "Buscar"
},
"searchPanes": {
"clearMessage": "Borrar todo",
"collapse": {
"0": "Paneles de búsqueda",
"_": "Paneles de búsqueda (%d)"
},
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyPanes": "Sin paneles de búsqueda",
"loadMessage": "Cargando paneles de búsqueda",
"title": "Filtros Activos - %d",
"showMessage": "Mostrar Todo",
"collapseMessage": "Colapsar Todo"
},
"select": {
"cells": {
"1": "1 celda seleccionada",
"_": "%d celdas seleccionadas"
},
"columns": {
"1": "1 columna seleccionada",
"_": "%d columnas seleccionadas"
},
"rows": {
"1": "1 fila seleccionada",
"_": "%d filas seleccionadas"
}
},
"thousands": ".",
"datetime": {
"previous": "Anterior",
"amPm": {
"0": "AM",
"1": "PM"
},
"hours": "Horas",
"minutes": "Minutos",
"seconds": "Segundos",
"unknown": "-",
"amPm": [
"AM",
"PM"
],
"months": {
"0": "Enero",
"1": "Febrero",
@@ -168,77 +121,193 @@
"8": "Septiembre",
"9": "Octubre"
},
"next": "Próximo",
"previous": "Anterior",
"seconds": "Segundos",
"unknown": "-",
"weekdays": {
"0": "Dom",
"1": "Lun",
"2": "Mar",
"3": "Mié",
"4": "Jue",
"5": "Vie",
"3": "Mié",
"6": "Sáb"
},
"next": "Próximo"
}
},
"decimal": "",
"editor": {
"close": "Cerrar",
"create": {
"button": "Nuevo",
"title": "Crear Nuevo Registro",
"submit": "Crear"
"submit": "Crear",
"title": "Crear Nuevo Registro"
},
"edit": {
"button": "Editar",
"title": "Editar Registro",
"submit": "Actualizar"
},
"remove": {
"button": "Eliminar",
"title": "Eliminar Registro",
"submit": "Eliminar",
"confirm": {
"_": "¿Está seguro de que desea eliminar %d filas?",
"1": "¿Está seguro de que desea eliminar 1 fila?"
}
"submit": "Actualizar",
"title": "Editar Registro"
},
"error": {
"system": "Ha ocurrido un error en el sistema (<a target=\"\\\" rel=\"\\ nofollow\" href=\"\\\">Más información&lt;\\\/a&gt;).<\/a>"
},
"multi": {
"title": "Múltiples Valores",
"restore": "Deshacer Cambios",
"info": "Los elementos seleccionados contienen diferentes valores para este registro. Para editar y establecer todos los elementos de este registro con el mismo valor, haga clic o pulse aquí, de lo contrario conservarán sus valores individuales.",
"noMulti": "Este registro puede ser editado individualmente, pero no como parte de un grupo.",
"info": "Los elementos seleccionados contienen diferentes valores para este registro. Para editar y establecer todos los elementos de este registro con el mismo valor, haga clic o pulse aquí, de lo contrario conservarán sus valores individuales."
"restore": "Deshacer Cambios",
"title": "Múltiples Valores"
},
"remove": {
"button": "Eliminar",
"confirm": {
"_": "¿Está seguro de que desea eliminar %d filas?",
"1": "¿Está seguro de que desea eliminar 1 fila?"
},
"submit": "Eliminar",
"title": "Eliminar Registro"
}
},
"emptyTable": "Ningún dato disponible en esta tabla",
"info": "Mostrando _START_ a _END_ de _TOTAL_ registros",
"infoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
"infoFiltered": "(filtrado de un total de _MAX_ registros)",
"infoPostFix": "",
"infoThousands": ".",
"lengthLabels": {
"-1": "Todas"
},
"lengthMenu": "Mostrar _MENU_ registros",
"loadingRecords": "Cargando...",
"orderClear": "Limpiar ordenación de toda la tabla",
"processing": "Procesando...",
"search": "Buscar:",
"searchBuilder": {
"add": "Añadir condición",
"button": {
"_": "Constructor de búsqueda (%d)",
"0": "Constructor de búsqueda"
},
"clearAll": "Borrar todo",
"condition": "Condición",
"conditions": {
"array": {
"contains": "Contiene",
"empty": "Vacío",
"equals": "Igual",
"not": "Diferente de",
"notEmpty": "No Vacío",
"without": "Sin"
},
"date": {
"after": "Después",
"before": "Antes",
"between": "Entre",
"empty": "Vacío",
"equals": "Igual a",
"not": "Diferente de",
"notBetween": "No entre",
"notEmpty": "No Vacío"
},
"number": {
"between": "Entre",
"empty": "Vacío",
"equals": "Igual a",
"gt": "Mayor a",
"gte": "Mayor o igual a",
"lt": "Menor que",
"lte": "Menor o igual que",
"not": "Diferente de",
"notBetween": "No entre",
"notEmpty": "No vacío"
},
"string": {
"contains": "Contiene",
"empty": "Vacío",
"endsWith": "Termina en",
"equals": "Igual a",
"not": "Diferente de",
"notContains": "No Contiene",
"notEmpty": "No Vacío",
"notEndsWith": "No termina con",
"notStartsWith": "No empieza con",
"startsWith": "Empieza con"
}
},
"data": "Data",
"deleteTitle": "Eliminar regla de filtrado",
"leftTitle": "Criterios anulados",
"logicAnd": "Y",
"logicOr": "O",
"rightTitle": "Criterios de sangría",
"search": "Buscar",
"title": {
"_": "Constructor de búsqueda (%d)",
"0": "Constructor de búsqueda"
},
"value": "Valor"
},
"searchPanes": {
"clearMessage": "Borrar todo",
"collapse": {
"_": "Paneles de búsqueda (%d)",
"0": "Paneles de búsqueda"
},
"collapseMessage": "Colapsar Todo",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyMessage": "vacío",
"emptyPanes": "Sin paneles de búsqueda",
"loadMessage": "Cargando paneles de búsqueda",
"showMessage": "Mostrar Todo",
"title": "Filtros Activos - %d"
},
"searchPlaceholder": "",
"select": {
"cells": {
"_": "%d celdas seleccionadas",
"0": "",
"1": "1 celda seleccionada"
},
"columns": {
"_": "%d columnas seleccionadas",
"0": "",
"1": "1 columna seleccionada"
},
"rows": {
"_": "%d filas seleccionadas",
"0": "",
"1": "1 fila seleccionada"
}
},
"stateRestore": {
"creationModal": {
"button": "Crear",
"name": "Nombre:",
"order": "Clasificación",
"paging": "Paginación",
"select": "Seleccionar",
"columns": {
"search": "Búsqueda de Columna",
"visible": "Visibilidad de Columna"
},
"title": "Crear Nuevo Estado",
"toggleLabel": "Incluir:",
"name": "Nombre:",
"order": "Clasificación",
"paging": "Paginación",
"scroller": "Posición de desplazamiento",
"search": "Búsqueda",
"searchBuilder": "Búsqueda avanzada"
"searchBuilder": "Búsqueda avanzada",
"select": "Seleccionar",
"title": "Crear Nuevo Estado",
"toggleLabel": "Incluir:"
},
"removeJoiner": "y",
"removeSubmit": "Eliminar",
"renameButton": "Cambiar Nombre",
"duplicateError": "Ya existe un Estado con este nombre.",
"emptyStates": "No hay Estados guardados",
"removeTitle": "Remover Estado",
"renameTitle": "Cambiar Nombre Estado",
"emptyError": "El nombre no puede estar vacío.",
"emptyStates": "No hay Estados guardados",
"removeConfirm": "¿Seguro que quiere eliminar %s?",
"removeError": "Error al eliminar el Estado",
"renameLabel": "Nuevo nombre para %s:"
"removeJoiner": "y",
"removeSubmit": "Eliminar",
"removeTitle": "Remover Estado",
"renameButton": "Cambiar Nombre",
"renameLabel": "Nuevo nombre para %s:",
"renameTitle": "Cambiar Nombre Estado"
},
"infoThousands": "."
"thousands": ".",
"zeroRecords": "No se encontraron resultados"
}

View File

@@ -1,126 +1,43 @@
{
"emptyTable": "Aucune donnée disponible dans le tableau",
"loadingRecords": "Chargement...",
"processing": "Traitement...",
"select": {
"rows": {
"_": "%d lignes sélectionnées",
"1": "1 ligne sélectionnée"
},
"cells": {
"1": "1 cellule sélectionnée",
"_": "%d cellules sélectionnées"
},
"columns": {
"1": "1 colonne sélectionnée",
"_": "%d colonnes sélectionnées"
"aria": {
"orderable": "Activer pour trier",
"orderableRemove": "Activer pour supprimer le tri",
"orderableReverse": "Activer pour inverser le tri",
"paginate": {
"first": "Première",
"last": "Dernière",
"next": "Suivante",
"previous": "Précédente"
}
},
"autoFill": {
"cancel": "Annuler",
"fill": "Remplir toutes les cellules avec <i>%d<\/i>",
"fillHorizontal": "Remplir les cellules horizontalement",
"fillVertical": "Remplir les cellules verticalement"
},
"searchBuilder": {
"conditions": {
"date": {
"after": "Après le",
"before": "Avant le",
"between": "Entre",
"empty": "Vide",
"not": "Différent de",
"notBetween": "Pas entre",
"notEmpty": "Non vide",
"equals": "Égal à"
},
"number": {
"between": "Entre",
"empty": "Vide",
"gt": "Supérieur à",
"gte": "Supérieur ou égal à",
"lt": "Inférieur à",
"lte": "Inférieur ou égal à",
"not": "Différent de",
"notBetween": "Pas entre",
"notEmpty": "Non vide",
"equals": "Égal à"
},
"string": {
"contains": "Contient",
"empty": "Vide",
"endsWith": "Se termine par",
"not": "Différent de",
"notEmpty": "Non vide",
"startsWith": "Commence par",
"equals": "Égal à",
"notContains": "Ne contient pas",
"notEndsWith": "Ne termine pas par",
"notStartsWith": "Ne commence pas par"
},
"array": {
"empty": "Vide",
"contains": "Contient",
"not": "Différent de",
"notEmpty": "Non vide",
"without": "Sans",
"equals": "Égal à"
}
},
"add": "Ajouter une condition",
"button": {
"0": "Recherche avancée",
"_": "Recherche avancée (%d)"
},
"clearAll": "Effacer tout",
"condition": "Condition",
"data": "Donnée",
"deleteTitle": "Supprimer la règle de filtrage",
"logicAnd": "Et",
"logicOr": "Ou",
"title": {
"0": "Recherche avancée",
"_": "Recherche avancée (%d)"
},
"value": "Valeur",
"leftTitle": "Désindenter le critère",
"rightTitle": "Indenter le critère"
},
"searchPanes": {
"clearMessage": "Effacer tout",
"count": "{total}",
"title": "Filtres actifs - %d",
"collapse": {
"0": "Volet de recherche",
"_": "Volet de recherche (%d)"
},
"countFiltered": "{shown} ({total})",
"emptyPanes": "Pas de volet de recherche",
"loadMessage": "Chargement du volet de recherche...",
"collapseMessage": "Réduire tout",
"showMessage": "Montrer tout"
"fillVertical": "Remplir les cellules verticalement",
"info": ""
},
"buttons": {
"collection": "Collection",
"colvis": "Visibilité colonnes",
"colvisRestore": "Rétablir visibilité",
"copy": "Copier",
"copyKeys": "Appuyez sur ctrl ou u2318 + C pour copier les données du tableau dans votre presse-papier.",
"copySuccess": {
"1": "1 ligne copiée dans le presse-papier",
"_": "%d lignes copiées dans le presse-papier"
"_": "%d lignes copiées dans le presse-papier",
"1": "1 ligne copiée dans le presse-papier"
},
"copyTitle": "Copier dans le presse-papier",
"createState": "Créer un état",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"-1": "Afficher toutes les lignes",
"_": "Afficher %d lignes",
"-1": "Afficher toutes les lignes",
"1": "Afficher 1 ligne"
},
"pdf": "PDF",
"print": "Imprimer",
"copyKeys": "Appuyez sur ctrl ou u2318 + C pour copier les données du tableau dans votre presse-papier.",
"createState": "Créer un état",
"removeAllStates": "Supprimer tous les états",
"removeState": "Supprimer",
"renameState": "Renommer",
@@ -128,118 +45,270 @@
"stateRestore": "État %d",
"updateState": "Mettre à jour"
},
"decimal": ",",
"columnControl": {
"buttons": {
"searchClear": "Effacer la recherche"
},
"colVis": "Visibilité colonnes",
"colVisDropdown": "Visibilité colonnes",
"dropdown": "Plus...",
"list": {
"all": "Tout sélectionner",
"empty": "Vide",
"none": "Désélectionner",
"search": "Rechercher..."
},
"orderAddAsc": "Ajouter tri croissant",
"orderAddDesc": "Ajouter tri décroissant",
"orderAsc": "Tri croissant",
"orderClear": "Effacer le tri",
"orderDesc": "Tri décroissant",
"orderRemove": "Supprimer du tri",
"reorder": "Réorganiser les colonnes",
"reorderLeft": "Déplacer la colonne vers la gauche",
"reorderRight": "Déplacer la colonne vers la droite",
"search": {
"datetime": {
"empty": "Vide",
"equal": "Égal à",
"greater": "Après le",
"less": "Avant le",
"notEmpty": "Non vide",
"notEqual": "Différent de"
},
"number": {
"empty": "Vide",
"equal": "Égal à",
"greater": "Supérieur à",
"greaterOrEqual": "Supérieur ou égal à",
"less": "Inférieur à",
"lessOrEqual": "Inférieur ou égal à",
"notEmpty": "Non vide",
"notEqual": "Différent de"
},
"text": {
"contains": "Contient",
"empty": "Vide",
"ends": "Se termine par",
"equal": "Égal à",
"notContains": "Ne contient pas",
"notEmpty": "Non vide",
"notEqual": "Différent de",
"starts": "Commence par"
}
},
"searchClear": "Effacer la recherche",
"searchDropdown": "Rechercher"
},
"datetime": {
"previous": "Précédent",
"next": "Suivant",
"amPm": {
"0": "am",
"1": "pm"
},
"hours": "Heures",
"minutes": "Minutes",
"seconds": "Secondes",
"unknown": "-",
"amPm": [
"am",
"pm"
],
"months": {
"0": "Janvier",
"1": "Février",
"10": "Novembre",
"11": "Décembre",
"2": "Mars",
"3": "Avril",
"4": "Mai",
"5": "Juin",
"6": "Juillet",
"7": "Août",
"8": "Septembre",
"9": "Octobre",
"10": "Novembre",
"1": "Février",
"11": "Décembre",
"7": "Août"
"9": "Octobre"
},
"weekdays": [
"Dim",
"Lun",
"Mar",
"Mer",
"Jeu",
"Ven",
"Sam"
]
"next": "Suivant",
"previous": "Précédent",
"seconds": "Secondes",
"unknown": "-",
"weekdays": {
"0": "Dim",
"1": "Lun",
"2": "Mar",
"3": "Mer",
"4": "Jeu",
"5": "Ven",
"6": "Sam"
}
},
"decimal": "",
"editor": {
"close": "Fermer",
"create": {
"title": "Créer une nouvelle entrée",
"button": "Nouveau",
"submit": "Créer"
"submit": "Créer",
"title": "Créer une nouvelle entrée"
},
"edit": {
"button": "Editer",
"title": "Editer Entrée",
"submit": "Mettre à jour"
},
"remove": {
"button": "Supprimer",
"title": "Supprimer",
"submit": "Supprimer",
"confirm": {
"_": "Êtes-vous sûr de vouloir supprimer %d lignes ?",
"1": "Êtes-vous sûr de vouloir supprimer 1 ligne ?"
}
},
"multi": {
"title": "Valeurs multiples",
"info": "Les éléments sélectionnés contiennent différentes valeurs pour cette entrée. Pour modifier et définir tous les éléments de cette entrée à la même valeur, cliquez ou tapez ici, sinon ils conserveront leurs valeurs individuelles.",
"restore": "Annuler les modifications",
"noMulti": "Ce champ peut être modifié individuellement, mais ne fait pas partie d'un groupe. "
"submit": "Mettre à jour",
"title": "Editer Entrée"
},
"error": {
"system": "Une erreur système s'est produite (<a target=\"\\\" rel=\"nofollow\" href=\"\\\">Plus d'information<\/a>)."
},
"multi": {
"info": "Les éléments sélectionnés contiennent différentes valeurs pour cette entrée. Pour modifier et définir tous les éléments de cette entrée à la même valeur, cliquez ou tapez ici, sinon ils conserveront leurs valeurs individuelles.",
"noMulti": "Ce champ peut être modifié individuellement, mais ne fait pas partie d'un groupe. ",
"restore": "Annuler les modifications",
"title": "Valeurs multiples"
},
"remove": {
"button": "Supprimer",
"confirm": {
"_": "Êtes-vous sûr de vouloir supprimer %d lignes ?",
"1": "Êtes-vous sûr de vouloir supprimer 1 ligne ?"
},
"submit": "Supprimer",
"title": "Supprimer"
}
},
"emptyTable": "Aucune donnée disponible dans le tableau",
"info": "Affichage de _START_ à _END_ sur _TOTAL_ entrées",
"infoEmpty": "Affichage de 0 à 0 sur 0 entrées",
"infoFiltered": "(filtrées depuis un total de _MAX_ entrées)",
"infoPostFix": "",
"infoThousands": " ",
"lengthLabels": {
"-1": "Tout"
},
"lengthMenu": "Afficher _MENU_ entrées",
"loadingRecords": "Chargement...",
"orderClear": "Effacer le tri",
"processing": "Traitement...",
"search": "Rechercher :",
"searchBuilder": {
"add": "Ajouter une condition",
"button": {
"_": "Recherche avancée (%d)",
"0": "Recherche avancée"
},
"clearAll": "Effacer tout",
"condition": "Condition",
"conditions": {
"array": {
"contains": "Contient",
"empty": "Vide",
"equals": "Égal à",
"not": "Différent de",
"notEmpty": "Non vide",
"without": "Sans"
},
"date": {
"after": "Après le",
"before": "Avant le",
"between": "Entre",
"empty": "Vide",
"equals": "Égal à",
"not": "Différent de",
"notBetween": "Pas entre",
"notEmpty": "Non vide"
},
"number": {
"between": "Entre",
"empty": "Vide",
"equals": "Égal à",
"gt": "Supérieur à",
"gte": "Supérieur ou égal à",
"lt": "Inférieur à",
"lte": "Inférieur ou égal à",
"not": "Différent de",
"notBetween": "Pas entre",
"notEmpty": "Non vide"
},
"string": {
"contains": "Contient",
"empty": "Vide",
"endsWith": "Se termine par",
"equals": "Égal à",
"not": "Différent de",
"notContains": "Ne contient pas",
"notEmpty": "Non vide",
"notEndsWith": "Ne termine pas par",
"notStartsWith": "Ne commence pas par",
"startsWith": "Commence par"
}
},
"data": "Donnée",
"deleteTitle": "Supprimer la règle de filtrage",
"leftTitle": "Désindenter le critère",
"logicAnd": "Et",
"logicOr": "Ou",
"rightTitle": "Indenter le critère",
"search": "Rechercher",
"title": {
"_": "Recherche avancée (%d)",
"0": "Recherche avancée"
},
"value": "Valeur",
"valueJoiner": "et"
},
"searchPanes": {
"clearMessage": "Effacer tout",
"collapse": {
"_": "Volet de recherche (%d)",
"0": "Volet de recherche"
},
"collapseMessage": "Réduire tout",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyMessage": "<em>vide<\/em>",
"emptyPanes": "Pas de volet de recherche",
"loadMessage": "Chargement du volet de recherche...",
"showMessage": "Montrer tout",
"title": "Filtres actifs - %d"
},
"searchPlaceholder": "",
"select": {
"cells": {
"_": "%d cellules sélectionnées",
"0": "",
"1": "1 cellule sélectionnée"
},
"columns": {
"_": "%d colonnes sélectionnées",
"0": "",
"1": "1 colonne sélectionnée"
},
"rows": {
"_": "%d lignes sélectionnées",
"0": "",
"1": "1 ligne sélectionnée"
}
},
"stateRestore": {
"removeSubmit": "Supprimer",
"creationModal": {
"button": "Créer",
"order": "Tri",
"paging": "Pagination",
"scroller": "Position du défilement",
"search": "Recherche",
"select": "Sélection",
"columns": {
"search": "Recherche par colonne",
"visible": "Visibilité des colonnes"
},
"name": "Nom :",
"order": "Tri",
"paging": "Pagination",
"scroller": "Position du défilement",
"search": "Recherche",
"searchBuilder": "Recherche avancée",
"select": "Sélection",
"title": "Créer un nouvel état",
"toggleLabel": "Inclus :"
},
"renameButton": "Renommer",
"duplicateError": "Il existe déjà un état avec ce nom.",
"emptyError": "Le nom ne peut pas être vide.",
"emptyStates": "Aucun état sauvegardé",
"removeConfirm": "Voulez vous vraiment supprimer %s ?",
"removeError": "Échec de la suppression de l'état.",
"removeJoiner": "et",
"removeSubmit": "Supprimer",
"removeTitle": "Supprimer l'état",
"renameButton": "Renommer",
"renameLabel": "Nouveau nom pour %s :",
"renameTitle": "Renommer l'état"
},
"info": "Affichage de _START_ à _END_ sur _TOTAL_ entrées",
"infoEmpty": "Affichage de 0 à 0 sur 0 entrées",
"infoFiltered": "(filtrées depuis un total de _MAX_ entrées)",
"lengthMenu": "Afficher _MENU_ entrées",
"paginate": {
"first": "Première",
"last": "Dernière",
"next": "Suivante",
"previous": "Précédente"
},
"zeroRecords": "Aucune entrée correspondante trouvée",
"aria": {
"sortAscending": " : activer pour trier la colonne par ordre croissant",
"sortDescending": " : activer pour trier la colonne par ordre décroissant"
},
"infoThousands": " ",
"search": "Rechercher :",
"thousands": " "
"thousands": " ",
"zeroRecords": "Aucune entrée correspondante trouvée"
}

View File

@@ -1,24 +1,21 @@
{
"infoFiltered": "(filtrati da _MAX_ elementi totali)",
"infoThousands": ".",
"loadingRecords": "Caricamento...",
"processing": "Elaborazione...",
"search": "Cerca:",
"paginate": {
"first": "Inizio",
"previous": "Precedente",
"next": "Successivo",
"last": "Fine"
},
"aria": {
"sortAscending": ": attiva per ordinare la colonna in ordine crescente",
"sortDescending": ": attiva per ordinare la colonna in ordine decrescente"
"orderable": "Ordinamento",
"orderableRemove": "Rimuovi ordinamento",
"orderableReverse": "Ordinamento inverso",
"paginate": {
"first": "Inizio",
"last": "Fine",
"next": "Successivo",
"previous": "Precedente"
}
},
"autoFill": {
"cancel": "Annulla",
"fill": "Riempi tutte le celle con <i>%d<\/i>",
"fillHorizontal": "Riempi celle orizzontalmente",
"fillVertical": "Riempi celle verticalmente"
"fillVertical": "Riempi celle verticalmente",
"info": ""
},
"buttons": {
"collection": "Collezione <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
@@ -27,19 +24,20 @@
"copy": "Copia",
"copyKeys": "Premi ctrl o u2318 + C per copiare i dati della tabella nella tua clipboard di sistema.<br \/><br \/>Per annullare, clicca questo messaggio o premi ESC.",
"copySuccess": {
"1": "Copiata 1 riga nella clipboard",
"_": "Copiate %d righe nella clipboard"
"_": "Copiate %d righe nella clipboard",
"1": "Copiata 1 riga nella clipboard"
},
"copyTitle": "Copia nella Clipboard",
"createState": "Crea stato",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"_": "Mostra %d righe",
"-1": "Mostra tutte le righe",
"_": "Mostra %d righe"
"1": "Mostra 1 riga"
},
"pdf": "PDF",
"print": "Stampa",
"createState": "Crea stato",
"removeAllStates": "Rimuovi tutti gli stati",
"removeState": "Rimuovi",
"renameState": "Rinomina",
@@ -47,138 +45,97 @@
"stateRestore": "Ripristina stato",
"updateState": "Aggiorna"
},
"emptyTable": "Nessun dato disponibile nella tabella",
"info": "Risultati da _START_ a _END_ di _TOTAL_ elementi",
"infoEmpty": "Risultati da 0 a 0 di 0 elementi",
"lengthMenu": "Mostra _MENU_ elementi",
"searchBuilder": {
"add": "Aggiungi Condizione",
"button": {
"0": "Generatore di Ricerca",
"_": "Generatori di Ricerca (%d)"
"columnControl": {
"buttons": {
"searchClear": "Cancella ricerca"
},
"clearAll": "Pulisci Tutto",
"condition": "Condizione",
"conditions": {
"date": {
"after": "Dopo",
"before": "Prima",
"between": "Tra",
"colVis": "Visibilità colonne",
"colVisDropdown": "Visibilità colonne",
"dropdown": "Altro...",
"list": {
"all": "Seleziona tutto",
"empty": "Vuoto",
"none": "Deseleziona tutto",
"search": "Cerca..."
},
"orderAddAsc": "Aggiungi ordinamento crescente",
"orderAddDesc": "Aggiungi ordinamento decrescente",
"orderAsc": "Ordina in modo crescente",
"orderClear": "Cancella ordinamento",
"orderDesc": "Ordina in modo decrescente",
"orderRemove": "Rimuovi dall'ordinamento",
"reorder": "Riordina colonne",
"reorderLeft": "Sposta la colonna a sinistra",
"reorderRight": "Sposta la colonna a destra",
"search": {
"datetime": {
"empty": "Vuoto",
"equals": "Uguale A",
"not": "Non",
"notBetween": "Non Tra",
"notEmpty": "Non Vuoto"
"equal": "Uguale a",
"greater": "Dopo il",
"less": "Prima del",
"notEmpty": "Non vuoto",
"notEqual": "Diverso da"
},
"number": {
"between": "Tra",
"empty": "Vuoto",
"equals": "Uguale A",
"gt": "Maggiore Di",
"gte": "Maggiore O Uguale A",
"lt": "Minore Di",
"lte": "Minore O Uguale A",
"not": "Non",
"notBetween": "Non Tra",
"notEmpty": "Non Vuoto"
"equal": "Uguale a",
"greater": "Maggiore di",
"greaterOrEqual": "Maggiore o uguale a",
"less": "Minore di",
"lessOrEqual": "Minore o uguale a",
"notEmpty": "Non vuoto",
"notEqual": "Diverso da"
},
"string": {
"text": {
"contains": "Contiene",
"empty": "Vuoto",
"endsWith": "Finisce Con",
"equals": "Uguale A",
"not": "Non",
"notEmpty": "Non Vuoto",
"startsWith": "Inizia Con",
"notContains": "Non Contiene",
"notStartsWith": "Non Inizia Con",
"notEndsWith": "Non Finisce Con"
},
"array": {
"equals": "Uguale A",
"empty": "Vuoto",
"contains": "Contiene",
"not": "Non",
"notEmpty": "Non Vuoto",
"without": "Senza"
"ends": "Termina con",
"equal": "Uguale a",
"notContains": "Non contiene",
"notEmpty": "Non vuoto",
"notEqual": "Diverso da",
"starts": "Inizia con"
}
},
"data": "Dati",
"deleteTitle": "Elimina regola filtro",
"leftTitle": "Criterio di Riduzione Rientro",
"logicAnd": "E",
"logicOr": "O",
"rightTitle": "Criterio di Aumento Rientro",
"title": {
"0": "Generatore di Ricerca",
"_": "Generatori di Ricerca (%d)"
},
"value": "Valore"
"searchClear": "Cancella ricerca",
"searchDropdown": "Cerca"
},
"searchPanes": {
"clearMessage": "Pulisci Tutto",
"collapse": {
"0": "Pannello di Ricerca",
"_": "Pannelli di Ricerca (%d)"
},
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyPanes": "Nessun Pannello di Ricerca",
"loadMessage": "Caricamento Pannello di Ricerca",
"title": "Filtri Attivi - %d",
"showMessage": "Mostra tutto",
"collapseMessage": "Espandi tutto"
},
"select": {
"cells": {
"1": "1 cella selezionata",
"_": "%d celle selezionate"
},
"columns": {
"1": "1 colonna selezionata",
"_": "%d colonne selezionate"
},
"rows": {
"1": "1 riga selezionata",
"_": "%d righe selezionate"
}
},
"zeroRecords": "Nessun elemento corrispondente trovato",
"datetime": {
"amPm": [
"am",
"pm"
],
"amPm": {
"0": "am",
"1": "pm"
},
"hours": "ore",
"minutes": "minuti",
"months": {
"0": "Gennaio",
"1": "Febbraio",
"10": "Novembre",
"11": "Dicembre",
"2": "Marzo",
"3": "Aprile",
"4": "Maggio",
"5": "Giugno",
"6": "Luglio",
"7": "Agosto",
"8": "Settembre",
"9": "Ottobre"
},
"next": "successivo",
"previous": "precedente",
"seconds": "secondi",
"unknown": "sconosciuto",
"weekdays": [
"Dom",
"Lun",
"Mar",
"Mer",
"Gio",
"Ven",
"Sab"
],
"months": [
"Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Agosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre"
]
"weekdays": {
"0": "Dom",
"1": "Lun",
"2": "Mar",
"3": "Mer",
"4": "Gio",
"5": "Ven",
"6": "Sab"
}
},
"decimal": "",
"editor": {
"close": "Chiudi",
"create": {
@@ -210,8 +167,115 @@
"title": "Rimuovi"
}
},
"thousands": ".",
"decimal": ",",
"emptyTable": "Nessun dato disponibile nella tabella",
"info": "Risultati da _START_ a _END_ di _TOTAL_ elementi",
"infoEmpty": "Risultati da 0 a 0 di 0 elementi",
"infoFiltered": "(filtrati da _MAX_ elementi totali)",
"infoPostFix": "",
"infoThousands": ".",
"lengthMenu": "Mostra _MENU_ elementi",
"loadingRecords": "Caricamento...",
"processing": "Elaborazione...",
"search": "Cerca:",
"searchBuilder": {
"add": "Aggiungi Condizione",
"button": {
"_": "Generatori di Ricerca (%d)",
"0": "Generatore di Ricerca"
},
"clearAll": "Pulisci Tutto",
"condition": "Condizione",
"conditions": {
"array": {
"contains": "Contiene",
"empty": "Vuoto",
"equals": "Uguale A",
"not": "Non",
"notEmpty": "Non Vuoto",
"without": "Senza"
},
"date": {
"after": "Dopo",
"before": "Prima",
"between": "Tra",
"empty": "Vuoto",
"equals": "Uguale A",
"not": "Non",
"notBetween": "Non Tra",
"notEmpty": "Non Vuoto"
},
"number": {
"between": "Tra",
"empty": "Vuoto",
"equals": "Uguale A",
"gt": "Maggiore Di",
"gte": "Maggiore O Uguale A",
"lt": "Minore Di",
"lte": "Minore O Uguale A",
"not": "Non",
"notBetween": "Non Tra",
"notEmpty": "Non Vuoto"
},
"string": {
"contains": "Contiene",
"empty": "Vuoto",
"endsWith": "Finisce Con",
"equals": "Uguale A",
"not": "Non",
"notContains": "Non Contiene",
"notEmpty": "Non Vuoto",
"notEndsWith": "Non Finisce Con",
"notStartsWith": "Non Inizia Con",
"startsWith": "Inizia Con"
}
},
"data": "Dati",
"deleteTitle": "Elimina regola filtro",
"leftTitle": "Criterio di Riduzione Rientro",
"logicAnd": "E",
"logicOr": "O",
"rightTitle": "Criterio di Aumento Rientro",
"search": "Cerca",
"title": {
"_": "Generatori di Ricerca (%d)",
"0": "Generatore di Ricerca"
},
"value": "Valore",
"valueJoiner": "e"
},
"searchPanes": {
"clearMessage": "Pulisci Tutto",
"collapse": {
"_": "Pannelli di Ricerca (%d)",
"0": "Pannello di Ricerca"
},
"collapseMessage": "Espandi tutto",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyMessage": "Vuoto",
"emptyPanes": "Nessun Pannello di Ricerca",
"loadMessage": "Caricamento Pannello di Ricerca",
"showMessage": "Mostra tutto",
"title": "Filtri Attivi - %d"
},
"searchPlaceholder": "",
"select": {
"cells": {
"_": "%d celle selezionate",
"0": "",
"1": "1 cella selezionata"
},
"columns": {
"_": "%d colonne selezionate",
"0": "",
"1": "1 colonna selezionata"
},
"rows": {
"_": "%d righe selezionate",
"0": "",
"1": "1 riga selezionata"
}
},
"stateRestore": {
"creationModal": {
"button": "Crea",
@@ -240,5 +304,7 @@
"renameButton": "Rinomina",
"renameLabel": "Nuovo nome per %s:",
"renameTitle": "Rinomina Stato"
}
},
"thousands": ".",
"zeroRecords": "Nessun elemento corrispondente trovato"
}

View File

@@ -0,0 +1,248 @@
{
"aria": {
"paginate": {
"first": "先頭",
"last": "最終",
"next": "次",
"previous": "前"
}
},
"autoFill": {
"cancel": "キャンセル",
"fill": "すべてのセルを <i>%d<\/i> で埋める",
"fillHorizontal": "横方向にセルを埋める",
"fillVertical": "縦方向にセルを埋める",
"info": ""
},
"buttons": {
"collection": "コレクション <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "カラム表示\/非表示",
"colvisRestore": "カラム表示のリセット",
"copy": "コピー",
"copyKeys": "Ctrl または ⌘ + C でテーブルのデータをクリップボードにコピーできます。<br \/><br \/>キャンセルするには、このメッセージをクリックするか、Esc キーを押してください。",
"copySuccess": {
"_": "%d 行をクリップボードにコピーしました",
"1": "1 行をクリップボードにコピーしました"
},
"copyTitle": "クリップボードにコピー",
"createState": "Stateを作成",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"_": "%d 行を表示",
"-1": "すべての行を表示"
},
"pdf": "PDF",
"print": "印刷",
"removeAllStates": "Stateを全て削除",
"removeState": "削除",
"renameState": "名前を変更",
"savedStates": "State一覧",
"stateRestore": "State %d",
"updateState": "更新"
},
"datetime": {
"amPm": {
"0": "午前",
"1": "午後"
},
"hours": "時",
"minutes": "分",
"months": {
"0": "1月",
"1": "2月",
"10": "11月",
"11": "12月",
"2": "3月",
"3": "4月",
"4": "5月",
"5": "6月",
"6": "7月",
"7": "8月",
"8": "9月",
"9": "10月"
},
"next": "次",
"previous": "前",
"seconds": "秒",
"unknown": "-",
"weekdays": {
"0": "日",
"1": "月",
"2": "火",
"3": "水",
"4": "木",
"5": "金",
"6": "土"
}
},
"decimal": "",
"editor": {
"close": "閉じる",
"create": {
"button": "新規",
"submit": "作成",
"title": "新しいエントリーを作成"
},
"edit": {
"button": "編集",
"submit": "更新",
"title": "エントリーの編集"
},
"error": {
"system": "システムエラーが発生しました (<a target=\"\\\" rel=\"nofollow\" href=\"\\\">詳細<\/a>)。"
},
"multi": {
"info": "選択されたアイテムにはこの入力に対して異なる値が含まれています。同じ値を設定する場合はクリック(またはタップ)してください。それ以外の場合は個別の値が維持されます。",
"noMulti": "この入力は個別には編集できますが、グループの一部としては編集できません。",
"restore": "元に戻す",
"title": "複数の値"
},
"remove": {
"button": "削除",
"confirm": {
"_": "%d 行を削除しますか?",
"1": "1 行を削除しますか?"
},
"submit": "削除",
"title": "削除"
}
},
"emptyTable": "テーブルにデータがありません",
"info": " _TOTAL_ 件中 _START_ から _END_ まで表示",
"infoEmpty": " 0 件中 0 から 0 まで表示",
"infoFiltered": "(全 _MAX_ 件より抽出)",
"infoPostFix": "",
"infoThousands": ",",
"lengthMenu": "_MENU_ 件表示",
"loadingRecords": "読み込み中...",
"processing": "処理中...",
"search": "検索:",
"searchBuilder": {
"add": "条件を追加",
"button": {
"_": "カスタムサーチ (%d)",
"0": "カスタムサーチ"
},
"clearAll": "すべての条件をクリア",
"condition": "条件",
"conditions": {
"array": {
"contains": "含む",
"empty": "空",
"equals": "等しい",
"not": "等しくない",
"notEmpty": "空ではない",
"without": "を含まない"
},
"date": {
"after": "指定日以後",
"before": "指定日以前",
"between": "指定日範囲内",
"empty": "空白",
"equals": "等しい",
"not": "等しくない",
"notBetween": "指定日範囲外",
"notEmpty": "空白ではない"
},
"number": {
"between": "範囲内",
"empty": "空白",
"equals": "等しい",
"gt": "より大きい",
"gte": "以上",
"lt": "より小さい",
"lte": "以下",
"not": "等しくない",
"notBetween": "範囲外",
"notEmpty": "空白ではない"
},
"string": {
"contains": "含む",
"empty": "空白",
"endsWith": "次の文字で終わる",
"equals": "次の文字と等しい",
"not": "次の文字と等しくない",
"notContains": "含まない",
"notEmpty": "空白ではない",
"notEndsWith": "で終わらない",
"notStartsWith": "で始まらない",
"startsWith": "で始まる"
}
},
"data": "カラム",
"deleteTitle": "絞り込みルールを削除",
"leftTitle": "インデントを解除",
"logicAnd": "And",
"logicOr": "Or",
"rightTitle": "インデント",
"title": {
"_": "カスタムサーチ (%d)",
"0": "カスタムサーチ"
},
"value": "Value"
},
"searchPanes": {
"clearMessage": "すべてクリア",
"collapse": {
"_": "検索ペイン (%d)",
"0": "検索ペイン"
},
"collapseMessage": "すべて折りたたむ",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyPanes": "検索ペインがありません",
"loadMessage": "検索ペインを読み込み中",
"showMessage": "すべて表示",
"title": "有効なフィルター - %d"
},
"searchPlaceholder": "",
"select": {
"cells": {
"_": "%d 個のセルが選択されました",
"0": "",
"1": "1 個のセルが選択されました"
},
"columns": {
"_": "%d 列が選択されました",
"0": "",
"1": "1 列が選択されました"
},
"rows": {
"_": "%d 行が選択されました",
"0": "",
"1": "1 行が選択されました"
}
},
"stateRestore": {
"creationModal": {
"button": "作成",
"columns": {
"search": "列の検索",
"visible": "列の表示"
},
"name": "名前:",
"order": "ソート",
"paging": "ページング",
"scroller": "スクロール位置",
"search": "検索",
"searchBuilder": "カスタムサーチ",
"select": "検索",
"title": "新しいStateを作成",
"toggleLabel": "含む:"
},
"duplicateError": "この名前のStateはすでに存在します。",
"emptyError": "名前を空にすることはできません。",
"emptyStates": "保存されたStateはありません",
"removeConfirm": "%s を削除してよろしいですか?",
"removeError": "Stateの削除に失敗しました。",
"removeJoiner": " と ",
"removeSubmit": "削除",
"removeTitle": "Stateを削除",
"renameButton": "名前を変更",
"renameLabel": "%s の新しい名前:",
"renameTitle": "名前を変更"
},
"thousands": ",",
"zeroRecords": "一致するレコードがありません"
}

View File

@@ -0,0 +1,197 @@
{
"aria": {
"paginate": {
"first": "처음",
"last": "마지막",
"next": "다음",
"previous": "이전"
}
},
"autoFill": {
"cancel": "취소",
"fill": "모든 셀에 <i>%d<i><\/i><\/i> 채우기",
"fillHorizontal": "수평으로 셀에 값 채우기",
"fillVertical": "수직으로 셀에 값 채우기",
"info": ""
},
"buttons": {
"collection": "모음 <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "열 보기",
"colvisRestore": "보기 복원",
"copy": "복사",
"copyKeys": "ctrl키나 u2318 + C키로 테이블 데이터를 시스템 클립보드에서 복사하고 취소하려면 이 메시지를 클릭하거나 ESC키를 누르면됩니다.",
"copySuccess": {
"_": "%d행을 클립보드에서 복사됨",
"1": "1행을 클립보드에서 복사됨"
},
"copyTitle": "클립보드에서 복사",
"createState": "상태 생성",
"csv": "CSV",
"excel": "엑셀",
"pageLength": {
"_": "%d행 보기",
"-1": "모든 행 보기",
"1": "1행 보기"
},
"pdf": "PDF",
"print": "인쇄",
"removeAllStates": "모든 상태 삭제",
"removeState": "삭제",
"renameState": "이름 변경",
"savedStates": "저장된 상태",
"stateRestore": "상태 %d",
"updateState": "갱신"
},
"columnControl": {
"buttons": {
"searchClear": "검색 지우기"
},
"dropdown": "더 보기...",
"list": {
"all": "전체 선택",
"empty": "비어 있음",
"none": "선택 해제",
"search": "검색..."
},
"orderAsc": "오름차순 정렬",
"orderClear": "정렬 지우기",
"orderDesc": "내림차순 정렬",
"orderRemove": "정렬 취소",
"reorder": "열 이동",
"reorderLeft": "왼쪽으로 열 이동",
"reorderRight": "오른쪽으로 열 이동",
"search": {
"datetime": {
"empty": "비어 있음",
"equal": "같음",
"greater": "이후",
"less": "이전",
"notEmpty": "비어 있지 않음",
"notEqual": "같지 않음"
},
"number": {
"empty": "비어 있음",
"equal": "같음",
"greater": "큼",
"greaterOrEqual": "크거나 같음",
"less": "작음",
"lessOrEqual": "작거나 같음",
"notEmpty": "비어 있지 않음",
"notEqual": "같지 않음"
},
"text": {
"contains": "포함되어 있음",
"empty": "비어 있음",
"ends": "끝남",
"equal": "같음",
"notContains": "포함되어 있지 않음",
"notEmpty": "비어 있지 않음",
"notEqual": "같지 않음",
"starts": "시작함"
}
},
"searchClear": "검색 지우기",
"searchDropdown": "검색"
},
"datetime": {
"amPm": {
"0": "오전",
"1": "오후"
},
"hours": "시",
"minutes": "분",
"months": {
"0": "1월",
"1": "2월",
"10": "11월",
"11": "12월",
"2": "3월",
"3": "4월",
"4": "5월",
"5": "6월",
"6": "7월",
"7": "8월",
"8": "9월",
"9": "10월"
},
"next": "다음",
"previous": "이전",
"seconds": "초",
"unknown": "-",
"weekdays": {
"0": "일",
"1": "월",
"2": "화",
"3": "수",
"4": "목",
"5": "금",
"6": "토"
}
},
"decimal": "",
"editor": {
"close": "닫기",
"create": {
"button": "추가",
"submit": "완료",
"title": "항목 추가"
},
"edit": {
"button": "수정",
"submit": "완료",
"title": "항목 수정"
},
"error": {
"system": "에러가 발생하였습니다 (&lt;a target=\"\\\" rel=\"nofollow\" href=\"\\\"&gt;자세한 정보&lt;\/a&gt;)."
},
"remove": {
"button": "삭제",
"submit": "완료",
"title": "항목 삭제"
}
},
"emptyTable": "데이터가 없습니다",
"info": "_START_ - _END_ \/ _TOTAL_",
"infoEmpty": "0 - 0 \/ 0",
"infoFiltered": "(총 _MAX_ 개)",
"infoPostFix": "",
"infoThousands": ",",
"lengthLabels": {
"-1": "전체"
},
"lengthMenu": "페이지당 줄수 _MENU_",
"loadingRecords": "읽는 중...",
"processing": "처리 중...",
"search": "검색:",
"searchBuilder": {
"add": "조건 추가",
"button": {
"_": "빌더 조회(%d)",
"0": "빌더 조회"
},
"clearAll": "모두 지우기",
"condition": "조건",
"data": "데이터",
"deleteTitle": "필터 규칙을 삭제",
"logicAnd": "And",
"logicOr": "Or",
"title": {
"_": "빌더 조회(%d)",
"0": "빌더 조회"
},
"value": "값"
},
"searchPlaceholder": "",
"select": {
"cells": {
"0": ""
},
"columns": {
"0": ""
},
"rows": {
"0": ""
}
},
"zeroRecords": "검색 결과가 없습니다"
}

View File

@@ -1,66 +1,203 @@
{
"lengthMenu": "_MENU_ resultaten weergeven",
"zeroRecords": "Geen resultaten gevonden",
"infoEmpty": "Geen resultaten om weer te geven",
"search": "Zoeken:",
"emptyTable": "Geen resultaten aanwezig in de tabel",
"infoThousands": ".",
"loadingRecords": "Een moment geduld aub - bezig met laden...",
"paginate": {
"first": "Eerste",
"last": "Laatste",
"next": "Volgende",
"previous": "Vorige"
},
"aria": {
"sortAscending": ": activeer om kolom oplopend te sorteren",
"sortDescending": ": activeer om kolom aflopend te sorteren"
"orderable": "Sorteren inschakelen",
"orderableRemove": "Sortering verwijderen",
"orderableReverse": "Sortering omkeren",
"paginate": {
"first": "Eerste",
"last": "Laatste",
"next": "Volgende",
"previous": "Vorige"
}
},
"autoFill": {
"cancel": "Annuleren",
"fill": "Vul alle cellen met <i>%d<\/i>",
"fillHorizontal": "Vul cellen horizontaal",
"fillVertical": "Vul cellen verticaal",
"cancel": "Annuleren",
"info": "Voorbeeld automatisch aanvullen info"
"info": ""
},
"buttons": {
"collection": "Verzameling",
"colvis": "Kolom zichtbaarheid",
"colvisRestore": "Herstel zichtbaarheid",
"copy": "Kopieer",
"copyKeys": "Klik ctrl of u2318 + C om de tabeldata to kopiëren naar je klembord. Om te annuleren klik hier of klik op escape.",
"copySuccess": {
"1": "1 regel naar klembord gekopieerd",
"_": "%ds regels naar klembord gekopieerd"
"_": "%ds regels naar klembord gekopieerd",
"1": "1 regel naar klembord gekopieerd"
},
"copyTitle": "Kopieer naar klembord",
"createState": "Maak staat",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"-1": "Toon alle regels",
"_": "Toon %d regels",
"1": "Toon 1 rij"
"-1": "Toon alle regels",
"1": "Toon 1 regel"
},
"pdf": "PDF",
"print": "Print",
"copyKeys": "Klik ctrl of u2318 + C om de tabeldata to kopiëren naar je klembord. Om te annuleren klik hier of klik op escape.",
"collection": "Verzameling",
"createState": "Maak staat",
"removeAllStates": "Verwijder alle",
"removeState": "Verwijder",
"renameState": "Hernoem",
"savedStates": "Opgeslagen",
"updateState": "Bijwerken",
"stateRestore": "Preset %d"
"stateRestore": "Preset %d",
"updateState": "Bijwerken"
},
"columnControl": {
"buttons": {
"searchClear": "Reset zoekactie"
},
"colVis": "Kolom zichtbaarheid",
"colVisDropdown": "Kolom zichtbaarheid",
"dropdown": "Meer...",
"list": {
"all": "Selecteer alles",
"empty": "Leeg",
"none": "Deselecteer",
"search": "Zoeken..."
},
"orderAddAsc": "Sortering toevoegen (oplopend)",
"orderAddDesc": "Sortering toevoegen (aflopend)",
"orderAsc": "Oplopend sorteren",
"orderClear": "Reset sortering",
"orderDesc": "Aflopend sorteren",
"orderRemove": "Verwijder van sortering",
"reorder": "Kolommen herschikken",
"reorderLeft": "Verplaats kolom links",
"reorderRight": "Verplaatst kolom rechts",
"search": {
"datetime": {
"empty": "Leeg",
"equal": "Gelijk aan",
"greater": "Na",
"less": "Vóór",
"notEmpty": "Niet leeg",
"notEqual": "Niet gelijk aan"
},
"number": {
"empty": "Leeg",
"equal": "Gelijk aan",
"greater": "Meer dan",
"greaterOrEqual": "Meer of gelijk",
"less": "Minder dan",
"lessOrEqual": "Minder of gelijk",
"notEmpty": "Niet leeg",
"notEqual": "Niet gelijk aan"
},
"text": {
"contains": "Bevat",
"empty": "Leeg",
"ends": "Eindigt",
"equal": "Gelijk aan",
"notContains": "Bevat niet",
"notEmpty": "Niet leeg",
"notEqual": "Niet gelijk aan",
"starts": "Begint"
}
},
"searchClear": "Reset zoekactie",
"searchDropdown": "Zoeken"
},
"datetime": {
"amPm": {
"0": "vm",
"1": "nm"
},
"hours": "Uur",
"minutes": "Minuut",
"months": {
"0": "Januari",
"1": "Februari",
"10": "November",
"11": "December",
"2": "Maart",
"3": "April",
"4": "Mei",
"5": "Juni",
"6": "Juli",
"7": "Augustus",
"8": "September",
"9": "Oktober"
},
"next": "Volgende",
"previous": "Vorige",
"seconds": "Seconde",
"unknown": "Onbekend",
"weekdays": {
"0": "Zo",
"1": "Ma",
"2": "Di",
"3": "Wo",
"4": "Do",
"5": "Vr",
"6": "Za"
}
},
"decimal": "",
"editor": {
"close": "Sluiten",
"create": {
"button": "Nieuw",
"submit": "Toevoegen",
"title": "Voeg nieuwe gegevens toe"
},
"edit": {
"button": "Wijzigen",
"submit": "Wijzigen",
"title": "Wijzig gegevens"
},
"error": {
"system": "Er is een fout gebeurd"
},
"multi": {
"info": "De geselecteerde items bevatten verschillende waarden voor deze invoer. Om alle items voor deze invoer op dezelfde waarde te zetten, klik of tik hier, zoniet zullen de individuele waarden behouden blijven.",
"noMulti": "Deze invoer kan individueel gewijzigd worden, maar niet als deel van een groep.",
"restore": "Wijzigingen ongedaan maken",
"title": "Meerdere waarden"
},
"remove": {
"button": "Verwijderen",
"confirm": {
"_": "Bent u zeker dat u %d rijen wil verwijderen?",
"1": "Bent u zeker dat u 1 rij wil verwijderen?"
},
"submit": "Verwijder",
"title": "Verwijder"
}
},
"emptyTable": "Geen resultaten aanwezig in de tabel",
"info": "_START_ tot _END_ van _TOTAL_ resultaten",
"infoEmpty": "Geen resultaten om weer te geven",
"infoFiltered": " (gefilterd uit _MAX_ resultaten)",
"infoPostFix": "",
"infoThousands": ".",
"lengthLabels": {
"-1": "Alle"
},
"lengthMenu": "_MENU_ resultaten weergeven",
"loadingRecords": "Een moment geduld aub - bezig met laden...",
"orderClear": "Reset sortering",
"processing": "Verwerken...",
"decimal": ",",
"search": "Zoeken:",
"searchBuilder": {
"add": "Toevoegen",
"button": {
"_": "Zoekwizard (%d)",
"0": "Zoekwizard"
},
"clearAll": "Verwijder alles",
"condition": "Conditie",
"data": "Data",
"deleteTitle": "Verwijder",
"value": "Waarde",
"conditions": {
"array": {
"contains": "Bevat",
"empty": "Leeg",
"equals": "Gelijk aan",
"not": "Niet",
"notEmpty": "Niet leeg",
"without": "Zonder"
},
"date": {
"after": "Na",
"before": "Voor",
@@ -89,129 +226,57 @@
"endsWith": "Eindigt met",
"equals": "Gelijk aan",
"not": "Niet",
"notEmpty": "Niet leeg",
"startsWith": "Start met",
"notContains": "Zonder",
"notEndsWith": "Eindigt niet met",
"notStartsWith": "Begint niet met"
},
"array": {
"equals": "Gelijk aan",
"empty": "Leeg",
"contains": "Bevat",
"not": "Niet",
"notEmpty": "Niet leeg",
"without": "Zonder"
"notEndsWith": "Eindigt niet met",
"notStartsWith": "Begint niet met",
"startsWith": "Start met"
}
},
"data": "Data",
"deleteTitle": "Verwijder",
"leftTitle": "Afwijkende criteria",
"logicAnd": "En",
"logicOr": "Of",
"button": {
"0": "Zoekwizard",
"_": "Zoekwizard (%d)"
},
"leftTitle": "Afwijkende criteria",
"rightTitle": "Criteria inspringen",
"search": "Zoeken",
"title": {
"0": "Zoekwizard",
"_": "Zoekwizard (%d) "
}
"_": "Zoekwizard (%d) ",
"0": "Zoekwizard"
},
"value": "Waarde"
},
"searchPanes": {
"clearMessage": "Alles leegmaken",
"collapse": {
"0": "Zoekpanelen",
"_": "Zoekpanelen (%d)"
"_": "Zoekpanelen (%d)",
"0": "Zoekpanelen"
},
"collapseMessage": "Instorten",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyMessage": "&lt;em&gt;Leeg&lt;\/em&gt;",
"emptyPanes": "Geen zoekpanelen",
"loadMessage": "Zoekpanelen laden...",
"title": "%d filters actief",
"showMessage": "Alles weergeven",
"collapseMessage": "Instorten"
"title": "%d filters actief"
},
"searchPlaceholder": "",
"select": {
"cells": {
"1": "1 cel geselecteerd",
"_": "%d cellen geselecteerd"
"_": "%d cellen geselecteerd",
"0": "",
"1": "1 cel geselecteerd"
},
"columns": {
"1": "1 kolom geselecteerd",
"_": "%d kolommen geselecteerd"
"_": "%d kolommen geselecteerd",
"0": "",
"1": "1 kolom geselecteerd"
},
"rows": {
"1": "1 rij geselecteerd",
"_": "%d rijen geselecteerd"
}
},
"thousands": ".",
"info": "_START_ tot _END_ van _TOTAL_ resultaten",
"infoFiltered": " (gefilterd uit _MAX_ resultaten)",
"datetime": {
"previous": "Vorige",
"next": "Volgende",
"hours": "Uur",
"minutes": "Minuut",
"seconds": "Seconde",
"unknown": "Onbekend",
"amPm": [
"vm",
"nm"
],
"weekdays": [
"Zo",
"Ma",
"Di",
"Wo",
"Do",
"Vr",
"Za"
],
"months": [
"Januari",
"Februari",
"Maart",
"April",
"Mei",
"Juni",
"Juli",
"Augustus",
"September",
"Oktober",
"November",
"December"
]
},
"editor": {
"close": "Sluiten",
"create": {
"button": "Nieuw",
"title": "Voeg nieuwe gegevens toe",
"submit": "Toevoegen"
},
"edit": {
"button": "Wijzigen",
"title": "Wijzig gegevens",
"submit": "Wijzigen"
},
"remove": {
"button": "Verwijderen",
"title": "Verwijder",
"submit": "Verwijder",
"confirm": {
"_": "Bent u zeker dat u %d rijen wil verwijderen?",
"1": "Bent u zeker dat u 1 rij wil verwijderen?"
}
},
"error": {
"system": "Er is een fout gebeurd"
},
"multi": {
"title": "Meerdere waarden",
"info": "De geselecteerde items bevatten verschillende waarden voor deze invoer. Om alle items voor deze invoer op dezelfde waarde te zetten, klik of tik hier, zoniet zullen de individuele waarden behouden blijven.",
"restore": "Wijzigingen ongedaan maken",
"noMulti": "Deze invoer kan individueel gewijzigd worden, maar niet als deel van een groep."
"_": "%d rijen geselecteerd",
"0": "",
"1": "1 rij geselecteerd"
}
},
"stateRestore": {
@@ -242,5 +307,7 @@
"renameButton": "Hernoem",
"renameLabel": "Nieuwe naam voor staat",
"renameTitle": "Hernoem staat"
}
},
"thousands": ".",
"zeroRecords": "Geen resultaten gevonden"
}

View File

@@ -1,27 +1,21 @@
{
"processing": "Przetwarzanie...",
"search": "Szukaj:",
"lengthMenu": "Pokaż _MENU_ pozycji",
"info": "Pozycje od _START_ do _END_ z _TOTAL_ łącznie",
"infoEmpty": "Pozycji 0 z 0 dostępnych",
"infoFiltered": "(filtrowanie spośród _MAX_ dostępnych pozycji)",
"loadingRecords": "Wczytywanie...",
"zeroRecords": "Nie znaleziono pasujących pozycji",
"paginate": {
"first": "Pierwsza",
"previous": "Poprzednia",
"next": "Następna",
"last": "Ostatnia"
},
"aria": {
"sortAscending": ": aktywuj, by posortować kolumnę rosnąco",
"sortDescending": ": aktywuj, by posortować kolumnę malejąco"
"orderable": "Aktywuj sortowanie",
"orderableRemove": "Aktywuj, aby usunąć sortowanie",
"orderableReverse": "Aktywuj, aby odwrócić sortowanie",
"paginate": {
"first": "Pierwsza",
"last": "Ostatnia",
"next": "Następna",
"previous": "Poprzednia"
}
},
"autoFill": {
"cancel": "Anuluj",
"fill": "Wypełnij wszystkie komórki <i>%d<\/i>",
"fillHorizontal": "Wypełnij komórki w poziomie",
"fillVertical": "Wypełnij komórki w pionie"
"fillVertical": "Wypełnij komórki w pionie",
"info": ""
},
"buttons": {
"collection": "Zbiór <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
@@ -30,19 +24,20 @@
"copy": "Kopiuj",
"copyKeys": "Naciśnij Ctrl lub u2318 + C, aby skopiować dane tabeli do schowka systemowego. <br \/> <br \/> Aby anulować, kliknij tę wiadomość lub naciśnij Esc.",
"copySuccess": {
"1": "Skopiowano 1 wiersz do schowka",
"_": "Skopiowano %d wierszy do schowka"
"_": "Skopiowano %d wierszy do schowka",
"1": "Skopiowano 1 wiersz do schowka"
},
"copyTitle": "Skopiuj do schowka",
"createState": "Utwórz stan",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"_": "Pokaż %d wierszy",
"-1": "Pokaż wszystkie wiersze",
"_": "Pokaż %d wierszy"
"1": "Pokaż 1 wiersz"
},
"pdf": "PDF",
"print": "Drukuj",
"createState": "Utwórz stan",
"removeAllStates": "Usuń wszystkie stany",
"removeState": "Usuń",
"renameState": "Zmień nazwę",
@@ -50,16 +45,150 @@
"stateRestore": "Stan %d",
"updateState": "Aktualizuj"
},
"columnControl": {
"buttons": {
"searchClear": "Wyczyść wyszukiwanie"
},
"colVis": "Widoczność kolumn",
"colVisDropdown": "Widoczność kolumn",
"dropdown": "Więcej...",
"list": {
"all": "Zaznacz wszystko",
"empty": "Puste",
"none": "Odznacz wszystko",
"search": "Szukaj..."
},
"orderAddAsc": "Dodaj sortowanie rosnąco",
"orderAddDesc": "Dodaj sortowanie malejąco",
"orderAsc": "Sortowanie rosnące",
"orderClear": "Wyczyść sortowanie",
"orderDesc": "Sortowanie malejące",
"orderRemove": "Usuń z sortowania",
"reorder": "Przestaw kolumny",
"reorderLeft": "Przesuń kolumnę w lewo",
"reorderRight": "Przesuń kolumnę w prawo",
"search": {
"datetime": {
"empty": "Puste",
"equal": "Równe",
"greater": "Po",
"less": "Przed",
"notEmpty": "Niepuste",
"notEqual": "Różne od"
},
"number": {
"empty": "Puste",
"equal": "Równe",
"greater": "Większe niż",
"greaterOrEqual": "Większe lub równe",
"less": "Mniejsze niż",
"lessOrEqual": "Mniejsze lub równe",
"notEmpty": "Niepuste",
"notEqual": "Różne od"
},
"text": {
"contains": "Zawiera",
"empty": "Puste",
"ends": "Kończy się na",
"equal": "Równe",
"notContains": "Nie zawiera",
"notEmpty": "Niepuste",
"notEqual": "Różne od",
"starts": "Zaczyna się od"
}
},
"searchClear": "Wyczyść wyszukiwanie",
"searchDropdown": "Wyszukaj"
},
"datetime": {
"amPm": {
"0": "am",
"1": "pm"
},
"hours": "Godzina",
"minutes": "Minuta",
"months": {
"0": "Styczeń",
"1": "Luty",
"10": "Listopad",
"11": "Grudzień",
"2": "Marzec",
"3": "Kwiecień",
"4": "Maj",
"5": "Czerwiec",
"6": "Lipiec",
"7": "Sierpień",
"8": "Wrzesień",
"9": "Październik"
},
"next": "Następne",
"previous": "Poprzednie",
"seconds": "Sekunda",
"unknown": "nieznana",
"weekdays": {
"0": "Nd",
"1": "Pn",
"2": "Wt",
"3": "Śr",
"4": "Czw",
"5": "Pt",
"6": "So"
}
},
"decimal": "",
"editor": {
"close": "Zamknij",
"create": {
"button": "Dodaj",
"submit": "Dodaj",
"title": "Dodawanie nowego wpisu"
},
"edit": {
"button": "Edytuj",
"submit": "Aktualizuj",
"title": "Aktualizacja wpisu"
},
"error": {
"system": "Nastąpił błąd systemu (<a target=\"\\\" rel=\"\\ nofollow\" href=\"\\\">Więcej informacji&lt;\\\/a&gt;).<\/a>"
},
"multi": {
"info": "Wybrane pole zawiera wiele elementów z różnymi wartościami. Aby zmienić ich wartość kliknij w nie, inaczej zachowane zostaną ich wartości domyślne.",
"noMulti": "Ta wartość może być edytowana oddzielnie - niezależnie od grupy.",
"restore": "Cofnij zmiany",
"title": "Pole z wieloma wartościami"
},
"remove": {
"button": "Usuń",
"confirm": {
"_": "Czy na pewno chcesz usunąć %d rzędów?",
"1": "Czy na pewno chcesz usunąć 1 rząd?"
},
"submit": "Usuń",
"title": "Usuwanie"
}
},
"emptyTable": "Brak danych w tabeli",
"info": "Pozycje od _START_ do _END_ z _TOTAL_ łącznie",
"infoEmpty": "Pozycji 0 z 0 dostępnych",
"infoFiltered": "(filtrowanie spośród _MAX_ dostępnych pozycji)",
"infoPostFix": "",
"infoThousands": " ",
"lengthLabels": {
"-1": "Wszystko"
},
"lengthMenu": "Pokaż _MENU_ pozycji",
"loadingRecords": "Wczytywanie...",
"orderClear": "Wyczyść sortowanie",
"processing": "Przetwarzanie...",
"search": "Szukaj:",
"searchBuilder": {
"add": "Dodaj warunek",
"clearAll": "Wyczyść wszystko",
"condition": "Warunek",
"data": "Dane",
"button": {
"_": "Aktywne zapytania",
"0": "Budowanie zapytania"
},
"clearAll": "Wyczyść wszystko",
"condition": "Warunek",
"conditions": {
"array": {
"contains": "Zawiera",
@@ -97,112 +226,57 @@
"endsWith": "Kończy się na",
"equals": "Równa się",
"not": "Nie",
"notEmpty": "Nie pusty",
"startsWith": "Zaczyna się od",
"notContains": "Nie zawiera",
"notEmpty": "Nie pusty",
"notEndsWith": "Nie kończy się na",
"notStartsWith": "Nie zaczyna się od",
"notEndsWith": "Nie kończy się na"
"startsWith": "Zaczyna się od"
}
},
"data": "Dane",
"deleteTitle": "Czyszczenie",
"leftTitle": "Lewy",
"logicAnd": "I",
"logicOr": "Lub",
"rightTitle": "Prawy",
"search": "Szukaj",
"title": {
"_": "Aktywne zapytania",
"0": "Budowanie zapytania"
},
"value": "Wartość"
},
"datetime": {
"amPm": [
"am",
"pm"
],
"hours": "Godzina",
"minutes": "Minuta",
"next": "Następne",
"previous": "Poprzednie",
"seconds": "Sekunda",
"unknown": "nieznana",
"months": {
"0": "Styczeń",
"1": "Luty",
"10": "Listopad",
"11": "Grudzień",
"2": "Marzec",
"3": "Kwiecień",
"4": "Maj",
"5": "Czerwiec",
"6": "Lipiec",
"7": "Sierpień",
"8": "Wrzesień",
"9": "Październik"
},
"weekdays": [
"Nd",
"Pn",
"Wt",
"Śr",
"Czw",
"Pt",
"So"
]
},
"editor": {
"close": "Zamknij",
"create": {
"button": "Dodaj",
"submit": "Dodaj",
"title": "Dodawanie nowego wpisu"
},
"edit": {
"button": "Edytuj",
"submit": "Aktualizuj",
"title": "Aktualizacja wpisu"
},
"error": {
"system": "Nastąpił błąd systemu (<a target=\"\\\" rel=\"\\ nofollow\" href=\"\\\">Więcej informacji&lt;\\\/a&gt;).<\/a>"
},
"multi": {
"info": "Wybrane pole zawiera wiele elementów z różnymi wartościami. Aby zmienić ich wartość kliknij w nie, inaczej zachowane zostaną ich wartości domyślne.",
"noMulti": "Ta wartość może być edytowana oddzielnie - niezależnie od grupy.",
"restore": "Cofnij zmiany",
"title": "Pole z wieloma wartościami"
},
"remove": {
"button": "Usuń",
"confirm": {
"_": "Czy na pewno chcesz usunąć %d rzędów?",
"1": "Czy na pewno chcesz usunąć 1 rząd?"
},
"submit": "Usuń",
"title": "Usuwanie"
}
},
"searchPanes": {
"clearMessage": "Wyczyść wszystkie",
"collapse": {
"_": "Aktywne grupowania (%d)",
"0": "Grupowanie"
},
"collapseMessage": "Rozwiń wszystko",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyMessage": "&lt;em&gt;brak danych&lt;\/em&gt;",
"emptyPanes": "Brak paneli wyszukań",
"loadMessage": "Ładuję panele wyszukań",
"title": "Aktywne filtry",
"showMessage": "Pokaż wszystko",
"collapseMessage": "Rozwiń wszystko"
"title": "Aktywne filtry"
},
"searchPlaceholder": "",
"select": {
"cells": {
"_": "zaznaczono %d komórek",
"0": "",
"1": "zaznaczono %d komórkę"
},
"columns": {
"_": "zaznaczono %d kolumn",
"0": "",
"1": "zaznaczono %d kolumnę"
},
"rows": {
"_": "Zaznaczono %d wierszy",
"0": "",
"1": "Zaznaczono 1 wiersz"
}
},
"stateRestore": {
@@ -234,7 +308,6 @@
"renameLabel": "Nowa nazwa dla %s:",
"renameTitle": "Zmień nazwę stanu"
},
"decimal": ",",
"infoThousands": " ",
"thousands": " "
"thousands": " ",
"zeroRecords": "Nie znaleziono pasujących pozycji"
}

View File

@@ -1,163 +1,53 @@
{
"processing": "Подождите...",
"search": "Поиск:",
"lengthMenu": "Показать _MENU_ записей",
"info": "Записи с _START_ до _END_ из _TOTAL_ записей",
"infoEmpty": "Записи с 0 до 0 из 0 записей",
"infoFiltered": "(отфильтровано из _MAX_ записей)",
"loadingRecords": "Загрузка записей...",
"zeroRecords": "Записи отсутствуют.",
"emptyTable": "В таблице отсутствуют данные",
"paginate": {
"first": "Первая",
"previous": "Предыдущая",
"next": "Следующая",
"last": "Последняя"
},
"aria": {
"sortAscending": ": активировать для сортировки столбца по возрастанию",
"sortDescending": ": активировать для сортировки столбца по убыванию"
},
"select": {
"rows": {
"_": "Выбрано записей: %d",
"1": "Выбрана одна запись"
},
"cells": {
"_": "Выбрано %d ячеек",
"1": "Выбрана 1 ячейка "
},
"columns": {
"1": "Выбран 1 столбец ",
"_": "Выбрано %d столбцов "
"paginate": {
"first": "Первая",
"last": "Последняя",
"next": "Следующая",
"previous": "Предыдущая"
}
},
"searchBuilder": {
"conditions": {
"string": {
"startsWith": "Начинается с",
"contains": "Содержит",
"empty": "Пусто",
"endsWith": "Заканчивается на",
"equals": "Равно",
"not": "Не",
"notEmpty": "Не пусто",
"notContains": "Не содержит",
"notStartsWith": "Не начинается на",
"notEndsWith": "Не заканчивается на"
},
"date": {
"after": "После",
"before": "До",
"between": "Между",
"empty": "Пусто",
"equals": "Равно",
"not": "Не",
"notBetween": "Не между",
"notEmpty": "Не пусто"
},
"number": {
"empty": "Пусто",
"equals": "Равно",
"gt": "Больше чем",
"gte": "Больше, чем равно",
"lt": "Меньше чем",
"lte": "Меньше, чем равно",
"not": "Не",
"notEmpty": "Не пусто",
"between": "Между",
"notBetween": "Не между ними"
},
"array": {
"equals": "Равно",
"empty": "Пусто",
"contains": "Содержит",
"not": "Не равно",
"notEmpty": "Не пусто",
"without": "Без"
}
},
"data": "Данные",
"deleteTitle": "Удалить условие фильтрации",
"logicAnd": "И",
"logicOr": "Или",
"title": {
"0": "Конструктор поиска",
"_": "Конструктор поиска (%d)"
},
"value": "Значение",
"add": "Добавить условие",
"button": {
"0": "Конструктор поиска",
"_": "Конструктор поиска (%d)"
},
"clearAll": "Очистить всё",
"condition": "Условие",
"leftTitle": "Превосходные критерии",
"rightTitle": "Критерии отступа"
},
"searchPanes": {
"clearMessage": "Очистить всё",
"collapse": {
"0": "Панели поиска",
"_": "Панели поиска (%d)"
},
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyPanes": "Нет панелей поиска",
"loadMessage": "Загрузка панелей поиска",
"title": "Фильтры активны - %d",
"showMessage": "Показать все",
"collapseMessage": "Скрыть все"
},
"buttons": {
"pdf": "PDF",
"print": "Печать",
"collection": "Коллекция <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "Видимость столбцов",
"colvisRestore": "Восстановить видимость",
"copy": "Копировать",
"copyTitle": "Скопировать в буфер обмена",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"-1": "Показать все строки",
"_": "Показать %d строк",
"1": "Показать 1 строку"
},
"removeState": "Удалить",
"renameState": "Переименовать",
"copySuccess": {
"1": "Строка скопирована в буфер обмена",
"_": "Скопировано %d строк в буфер обмена"
},
"createState": "Создать состояние",
"removeAllStates": "Удалить все состояния",
"savedStates": "Сохраненные состояния",
"stateRestore": "Состояние %d",
"updateState": "Обновить",
"copyKeys": "Нажмите ctrl или u2318 + C, чтобы скопировать данные таблицы в буфер обмена. Для отмены, щелкните по сообщению или нажмите escape."
},
"decimal": ".",
"infoThousands": ",",
"autoFill": {
"cancel": "Отменить",
"fill": "Заполнить все ячейки <i>%d<i><\/i><\/i>",
"fillHorizontal": "Заполнить ячейки по горизонтали",
"fillVertical": "Заполнить ячейки по вертикали",
"info": "Информация"
"info": ""
},
"buttons": {
"collection": "Коллекция <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "Видимость столбцов",
"colvisRestore": "Восстановить видимость",
"copy": "Копировать",
"copyKeys": "Нажмите ctrl или u2318 + C, чтобы скопировать данные таблицы в буфер обмена. Для отмены, щелкните по сообщению или нажмите escape.",
"copySuccess": {
"_": "Скопировано %d строк в буфер обмена",
"1": "Строка скопирована в буфер обмена"
},
"copyTitle": "Скопировать в буфер обмена",
"createState": "Создать состояние",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"_": "Показать %d строк",
"-1": "Показать все строки"
},
"pdf": "PDF",
"print": "Печать",
"removeAllStates": "Удалить все состояния",
"removeState": "Удалить",
"renameState": "Переименовать",
"savedStates": "Сохраненные состояния",
"stateRestore": "Состояние %d",
"updateState": "Обновить"
},
"datetime": {
"previous": "Предыдущий",
"next": "Следующий",
"amPm": {
"0": "AM",
"1": "PM"
},
"hours": "Часы",
"minutes": "Минуты",
"seconds": "Секунды",
"unknown": "Неизвестный",
"amPm": [
"AM",
"PM"
],
"months": {
"0": "Январь",
"1": "Февраль",
@@ -172,52 +62,161 @@
"8": "Сентябрь",
"9": "Октябрь"
},
"weekdays": [
"Вс",
"Пн",
"Вт",
"Ср",
"Чт",
"Пт",
"Сб"
]
"next": "Следующий",
"previous": "Предыдущий",
"seconds": "Секунды",
"unknown": "Неизвестный",
"weekdays": {
"0": "Вс",
"1": "Пн",
"2": "Вт",
"3": "Ср",
"4": "Чт",
"5": "Пт",
"6": "Сб"
}
},
"decimal": "",
"editor": {
"close": "Закрыть",
"create": {
"button": "Новый",
"title": "Создать новую запись",
"submit": "Создать"
"submit": "Создать",
"title": "Создать новую запись"
},
"edit": {
"button": "Изменить",
"title": "Изменить запись",
"submit": "Изменить"
},
"remove": {
"button": "Удалить",
"title": "Удалить",
"submit": "Удалить",
"confirm": {
"_": "Вы точно хотите удалить %d строк?",
"1": "Вы точно хотите удалить 1 строку?"
}
},
"multi": {
"restore": "Отменить изменения",
"title": "Несколько значений",
"info": "Выбранные элементы содержат разные значения для этого входа. Чтобы отредактировать и установить для всех элементов этого ввода одинаковое значение, нажмите или коснитесь здесь, в противном случае они сохранят свои индивидуальные значения.",
"noMulti": "Это поле должно редактироваться отдельно, а не как часть группы"
"submit": "Изменить",
"title": "Изменить запись"
},
"error": {
"system": "Возникла системная ошибка (<a target=\"\\\" rel=\"nofollow\" href=\"\\\">Подробнее<\/a>)."
},
"multi": {
"info": "Выбранные элементы содержат разные значения для этого входа. Чтобы отредактировать и установить для всех элементов этого ввода одинаковое значение, нажмите или коснитесь здесь, в противном случае они сохранят свои индивидуальные значения.",
"noMulti": "Это поле должно редактироваться отдельно, а не как часть группы",
"restore": "Отменить изменения",
"title": "Несколько значений"
},
"remove": {
"button": "Удалить",
"confirm": {
"_": "Вы точно хотите удалить %d строк?",
"1": "Вы точно хотите удалить 1 строку?"
},
"submit": "Удалить",
"title": "Удалить"
}
},
"emptyTable": "В таблице отсутствуют данные",
"info": "Записи с _START_ до _END_ из _TOTAL_ записей",
"infoEmpty": "Записи с 0 до 0 из 0 записей",
"infoFiltered": "(отфильтровано из _MAX_ записей)",
"infoPostFix": "",
"infoThousands": ",",
"lengthMenu": "Показать _MENU_ записей",
"loadingRecords": "Загрузка записей...",
"processing": "Подождите...",
"search": "Поиск:",
"searchBuilder": {
"add": "Добавить условие",
"button": {
"_": "Конструктор поиска (%d)",
"0": "Конструктор поиска"
},
"clearAll": "Очистить всё",
"condition": "Условие",
"conditions": {
"array": {
"contains": "Содержит",
"empty": "Пусто",
"equals": "Равно",
"not": "Не равно",
"notEmpty": "Не пусто",
"without": "Без"
},
"date": {
"after": "После",
"before": "До",
"between": "Между",
"empty": "Пусто",
"equals": "Равно",
"not": "Не",
"notBetween": "Не между",
"notEmpty": "Не пусто"
},
"number": {
"between": "Между",
"empty": "Пусто",
"equals": "Равно",
"gt": "Больше чем",
"gte": "Больше, чем равно",
"lt": "Меньше чем",
"lte": "Меньше, чем равно",
"not": "Не",
"notBetween": "Не между ними",
"notEmpty": "Не пусто"
},
"string": {
"contains": "Содержит",
"empty": "Пусто",
"endsWith": "Заканчивается на",
"equals": "Равно",
"not": "Не",
"notContains": "Не содержит",
"notEmpty": "Не пусто",
"notEndsWith": "Не заканчивается на",
"notStartsWith": "Не начинается на",
"startsWith": "Начинается с"
}
},
"data": "Данные",
"deleteTitle": "Удалить условие фильтрации",
"leftTitle": "Превосходные критерии",
"logicAnd": "И",
"logicOr": "Или",
"rightTitle": "Критерии отступа",
"title": {
"_": "Конструктор поиска (%d)",
"0": "Конструктор поиска"
},
"value": "Значение"
},
"searchPanes": {
"clearMessage": "Очистить всё",
"collapse": {
"_": "Панели поиска (%d)",
"0": "Панели поиска"
},
"collapseMessage": "Скрыть все",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyPanes": "Нет панелей поиска",
"loadMessage": "Загрузка панелей поиска",
"showMessage": "Показать все",
"title": "Фильтры активны - %d"
},
"searchPlaceholder": "",
"select": {
"cells": {
"_": "Выбрано %d ячеек",
"0": "",
"1": "Выбрана 1 ячейка "
},
"columns": {
"_": "Выбрано %d столбцов ",
"0": "",
"1": "Выбран 1 столбец "
},
"rows": {
"_": "Выбрано записей: %d",
"0": "",
"1": "Выбрана одна запись"
}
},
"searchPlaceholder": "Что ищете?",
"stateRestore": {
"creationModal": {
"button": "Создать",
"search": "Поиск",
"columns": {
"search": "Поиск по столбцам",
"visible": "Видимость столбцов"
@@ -226,22 +225,24 @@
"order": "Сортировка",
"paging": "Страницы",
"scroller": "Позиция прокрутки",
"search": "Поиск",
"searchBuilder": "Редактор поиска",
"select": "Выделение",
"title": "Создать новое состояние",
"toggleLabel": "Включает:"
},
"removeJoiner": "и",
"removeSubmit": "Удалить",
"renameButton": "Переименовать",
"duplicateError": "Состояние с таким именем уже существует.",
"emptyError": "Имя не может быть пустым.",
"emptyStates": "Нет сохраненных состояний",
"removeConfirm": "Вы уверены, что хотите удалить %s?",
"removeError": "Не удалось удалить состояние.",
"removeJoiner": "и",
"removeSubmit": "Удалить",
"removeTitle": "Удалить состояние",
"renameButton": "Переименовать",
"renameLabel": "Новое имя для %s:",
"renameTitle": "Переименовать состояние"
},
"thousands": " "
"thousands": " ",
"zeroRecords": "Записи отсутствуют."
}

View File

@@ -0,0 +1,313 @@
{
"aria": {
"orderable": "Активувати сортування",
"orderableRemove": "Вимкнути сортування",
"orderableReverse": "Зворотне сортування",
"paginate": {
"first": "Перша",
"last": "Остання",
"next": "Наступна",
"previous": "Попередня"
}
},
"autoFill": {
"cancel": "Відміна",
"fill": "Заповнити всі клітинки з <i>%d<\/i>",
"fillHorizontal": "Заповнити клітинки горизонтально",
"fillVertical": "Заповнити клітинки вертикально",
"info": ""
},
"buttons": {
"collection": "Список <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
"colvis": "Видимість колонки",
"colvisRestore": "Відновити видимість",
"copy": "Копіювати",
"copyKeys": "Нажміть ctrl або u2318 + C щоб копіювати інформацію з таблиці до вашого буферу обміну.<br \/><br \/>Щоб відмінити нажміть на це повідомлення або Esc",
"copySuccess": {
"_": "Скопійовано %d рядків в буфер обміну",
"1": "Скопійовано 1 рядок в буфер обміну"
},
"copyTitle": "Копіювати в буфер обміну",
"createState": "Створити стан",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"_": "Показати %d рядків",
"-1": "Показати усі рядки",
"1": "Показати 1 рядок"
},
"pdf": "PDF",
"print": "Друкувати",
"removeAllStates": "Видалити всі стани",
"removeState": "Видалити",
"renameState": "Перейменувати",
"savedStates": "Збережені стани",
"stateRestore": "Стан %d",
"updateState": "Оновити"
},
"columnControl": {
"buttons": {
"searchClear": "Очистити пошук"
},
"colVis": "Видимість колонки",
"colVisDropdown": "Видимість випадаючого списку",
"dropdown": "Більше...",
"list": {
"all": "Вибрати все",
"empty": "Пусто",
"none": "Скасувати вибір усіх",
"search": "Пошук..."
},
"orderAddAsc": "Додати сортування за зростанням",
"orderAddDesc": "Додати сортування за спаданням",
"orderAsc": "Сортування за зростанням",
"orderClear": "Очистити сортування",
"orderDesc": "Сортування за спаданням",
"orderRemove": "Очистити сортування",
"reorder": "Переупорядкувати стовпці",
"reorderLeft": "Зсунути стовпець ліворуч",
"reorderRight": "Зсунути стовпець праворуч",
"search": {
"datetime": {
"empty": "Пусто",
"equal": "Дорівнює",
"greater": "Після",
"less": "До",
"notEmpty": "Не порожньо",
"notEqual": "Не дорівнює"
},
"number": {
"empty": "Пусто",
"equal": "Дорівнює",
"greater": "Більше ніж",
"greaterOrEqual": "Більше або дорівнює",
"less": "Менше ніж",
"lessOrEqual": "Менше або дорівнює",
"notEmpty": "Не порожньо",
"notEqual": "Не дорівнює"
},
"text": {
"contains": "Містить",
"empty": "Пусто",
"ends": "Закінчується на",
"equal": "Дорівнює",
"notContains": "Не містить",
"notEmpty": "Не порожній",
"notEqual": "Не дорівнює",
"starts": "Починається з"
}
},
"searchClear": "Очистити пошук",
"searchDropdown": "Пошук"
},
"datetime": {
"amPm": {
"0": "am",
"1": "pm"
},
"hours": "Година",
"minutes": "Хвилина",
"months": {
"0": "Січень",
"1": "Лютий",
"10": "Листопад",
"11": "Грудень",
"2": "Березень",
"3": "Квітень",
"4": "Травень",
"5": "Червень",
"6": "Липень",
"7": "Серпень",
"8": "Вересень",
"9": "Жовтень"
},
"next": "Наступний",
"previous": "Попередній",
"seconds": "Секунда",
"unknown": "-",
"weekdays": {
"0": "Нд",
"1": "Пн",
"2": "Вт",
"3": "Ср",
"4": "Чт",
"5": "Пт",
"6": "Сб"
}
},
"decimal": "",
"editor": {
"close": "Закрити",
"create": {
"button": "Новий",
"submit": "Cтворити",
"title": "Створити новий запис"
},
"edit": {
"button": "Редагувати",
"submit": "Оновити",
"title": "Редагувати запис"
},
"error": {
"system": "Сталася системна помилка (<a target=\"\\\" rel=\"\\ nofollow\" href=\"\\\">Додаткова інформація&lt;\\\\\\\/a&gt;).&lt;\\\/a&gt;<\/a>"
},
"multi": {
"info": "Вибране поле містить кілька елементів з різними значеннями. Щоб змінити їх значення, клацніть на них; інакше будуть збережені їхні значення за замовчуванням.",
"noMulti": "Це значення можна редагувати окремо незалежно від групи.",
"restore": "Скасувати зміни",
"title": "Поле з кількома значеннями"
},
"remove": {
"button": "Видалити",
"confirm": {
"_": "Ви впевнені, що хочете видалити %d рядків?",
"1": "Ви впевнені, що хочете видалити 1 рядок?"
},
"submit": "Видалити",
"title": "Видалити"
}
},
"emptyTable": "Ця таблиця не містить даних",
"info": "Показано від _START_ по _END_ з _TOTAL_ записів",
"infoEmpty": "Показано від 0 по 0 з 0 записів",
"infoFiltered": "(відфільтровано з _MAX_ записів)",
"infoPostFix": "",
"infoThousands": ",",
"lengthLabels": {
"-1": "Усі"
},
"lengthMenu": "Показати _MENU_ записів",
"loadingRecords": "Завантаження",
"orderClear": "Очистити сортування",
"processing": "Опрацювання...",
"search": "Пошук:",
"searchBuilder": {
"add": "Додати умову",
"button": {
"_": "Розширений пошук (%d)",
"0": "Розширений пошук"
},
"clearAll": "Очистити все",
"condition": "Умова",
"conditions": {
"array": {
"contains": "Містить",
"empty": "Пустий",
"equals": "Дорівнює",
"not": "Не",
"notEmpty": "Не пусто",
"without": "Без"
},
"date": {
"after": "Після",
"before": "До",
"between": "Між",
"empty": "Пусто",
"equals": "Дорівнює",
"not": "Не",
"notBetween": "Не між",
"notEmpty": "Не пусто"
},
"number": {
"between": "Між",
"empty": "Пусто",
"equals": "Дорівнює",
"gt": "Більше ніж",
"gte": "Більше або дорівнює",
"lt": "Менше ніж",
"lte": "Менше або дорівнює",
"not": "Не",
"notBetween": "Не між",
"notEmpty": "Не пусто"
},
"string": {
"contains": "Містить",
"empty": "Пусто",
"endsWith": "Закінчується на",
"equals": "Дорівнює",
"not": "Не",
"notContains": "Не містить",
"notEmpty": "Не пусто",
"notEndsWith": "Не закінчується на",
"notStartsWith": "Не починається з",
"startsWith": "Починається з"
}
},
"data": "Дані",
"deleteTitle": "Видалити правило фільтрування",
"leftTitle": "Зняти відступ критерію",
"logicAnd": "ТА",
"logicOr": "АБО",
"rightTitle": "Зробити відступ критерію",
"search": "Пошук",
"title": {
"_": "Розширений пошук (%d)",
"0": "Розширений пошук"
},
"value": "Значення"
},
"searchPanes": {
"clearMessage": "Очистити все",
"collapse": {
"_": "Панелі пошуку (%d)",
"0": "Панель пошуку"
},
"collapseMessage": "Приховати всі",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyMessage": "<em>немає даних<\/em>",
"emptyPanes": "Немає панелей пошуку",
"loadMessage": "Завантаження панелей пошуку",
"showMessage": "Показати всі",
"title": "Активній фільтри - %d"
},
"searchPlaceholder": "",
"select": {
"cells": {
"_": "%d клітинок вибрано",
"0": "",
"1": "1 клітинку вибрано"
},
"columns": {
"_": "%d колонок вибрано",
"0": "",
"1": "1 колонку вибрано"
},
"rows": {
"_": "Вибрано %d рядків",
"0": "",
"1": "Вибрано 1 рядок"
}
},
"stateRestore": {
"creationModal": {
"button": "Створити",
"columns": {
"search": "Пошук у стовпці",
"visible": "Видимість стовпця"
},
"name": "Ім'я:",
"order": "Сортування",
"paging": "Пейджинг",
"scroller": "Прокручування",
"search": "Пошук",
"searchBuilder": "Конструктор запитів",
"select": "Вибір",
"title": "Створити новий стан",
"toggleLabel": "Включає:"
},
"duplicateError": "Стан з такою назвою вже існує.",
"emptyError": "Назва не може бути порожньою.",
"emptyStates": "Немає збереженого стану.",
"removeConfirm": "Ви впевнені, що хочете видалити %s?",
"removeError": "Не вдалося видалити стан.",
"removeJoiner": "і",
"removeSubmit": "Видалити",
"removeTitle": "Видалити стан",
"renameButton": "Перейменувати",
"renameLabel": "Нова назва для %s:",
"renameTitle": "Перейменувати стан"
},
"thousands": ",",
"zeroRecords": "Не знайдено жодних записів"
}

View File

@@ -1,61 +1,132 @@
{
"processing": "處理中...",
"loadingRecords": "載入中...",
"paginate": {
"first": "一頁",
"previous": "一頁",
"next": "一頁",
"last": "最後一頁"
"aria": {
"paginate": {
"first": "第一頁",
"last": "最後一頁",
"next": "一頁",
"previous": "一頁"
}
},
"autoFill": {
"cancel": "取消",
"info": ""
},
"buttons": {
"collection": "更多",
"colvis": "欄位顯示",
"colvisRestore": "重置欄位顯示",
"copy": "複製",
"copySuccess": {
"_": "複製了 %d 筆資料",
"1": "複製了 1 筆資料"
},
"copyTitle": "已經複製到剪貼簿",
"createState": "建立狀態",
"csv": "CSV",
"excel": "Excel",
"pageLength": {
"_": "顯示 %d 筆",
"-1": "顯示全部"
},
"pdf": "PDF",
"print": "列印",
"removeAllStates": "移除所有狀態",
"removeState": "移除",
"renameState": "重新命名",
"savedStates": "儲存狀態",
"stateRestore": "狀態 %d",
"updateState": "更新"
},
"emptyTable": "目前沒有資料",
"datetime": {
"previous": "上一頁",
"next": "下一頁",
"amPm": {
"0": "上午",
"1": "下午"
},
"hours": "時",
"minutes": "分",
"months": {
"0": "一月",
"1": "二月",
"10": "十一月",
"11": "十二月",
"2": "三月",
"3": "四月",
"4": "五月",
"5": "六月",
"6": "七月",
"7": "八月",
"8": "九月",
"9": "十月"
},
"next": "下一頁",
"previous": "上一頁",
"seconds": "秒",
"amPm": [
"上午",
"下午"
],
"unknown": "未知",
"weekdays": [
"週日",
"週一",
"週二",
"週三",
"週四",
"週五",
"週六"
],
"months": [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月"
]
"weekdays": {
"0": "週日",
"1": "週一",
"2": "週二",
"3": "週三",
"4": "週四",
"5": "週五",
"6": "週六"
}
},
"decimal": "",
"editor": {
"close": "關閉",
"create": {
"button": "新增",
"submit": "送出新增",
"title": "新增資料"
},
"edit": {
"button": "修改",
"submit": "送出修改",
"title": "修改資料"
},
"error": {
"system": "系統發生錯誤(更多資訊)"
},
"multi": {
"info": "您所選擇的多筆資料中,此欄位包含了不同的值。若您想要將它們都改為同一個值,可以在此輸入,要不然它們會保留各自原本的值。",
"noMulti": "此輸入欄需單獨輸入,不容許多筆資料一起修改",
"restore": "復原",
"title": "多重值"
},
"remove": {
"button": "刪除",
"confirm": {
"_": "您確定要刪除您所選取的 %d 筆資料嗎?",
"1": "您確定要刪除您所選取的 1 筆資料嗎?"
},
"submit": "送出刪除",
"title": "刪除資料"
}
},
"emptyTable": "目前沒有資料",
"info": "顯示第 _START_ 至 _END_ 筆結果,共 _TOTAL_ 筆",
"infoEmpty": "顯示第 0 至 0 筆結果,共 0 筆",
"infoFiltered": "(從 _MAX_ 筆結果中篩選)",
"infoPostFix": "",
"infoThousands": ",",
"lengthMenu": "顯示 _MENU_ 筆結果",
"loadingRecords": "載入中...",
"processing": "處理中...",
"search": "搜尋:",
"searchBuilder": {
"add": "新增條件",
"condition": "條件",
"button": {
"_": "複合查詢 (%d)",
"0": "複合查詢"
},
"clearAll": "清空",
"condition": "條件",
"conditions": {
"array": {
"contains": "含有",
"equals": "等於",
"empty": "空值",
"equals": "等於",
"not": "不等於",
"notEmpty": "非空值",
"without": "不含"
@@ -88,14 +159,15 @@
"endsWith": "字尾為",
"equals": "等於",
"not": "不為",
"notEmpty": "不為空",
"startsWith": "字首為",
"notContains": "不含",
"notEmpty": "不為空",
"notEndsWith": "結尾不是",
"notStartsWith": "開頭不是",
"notEndsWith": "結尾不是"
"startsWith": "字首為"
}
},
"data": "欄位",
"deleteTitle": "刪除篩選條件",
"leftTitle": "群組條件",
"logicAnd": "且",
"logicOr": "或",
@@ -104,85 +176,41 @@
"_": "複合查詢 (%d)",
"0": "複合查詢"
},
"value": "內容",
"deleteTitle": "刪除篩選條件"
},
"editor": {
"close": "關閉",
"create": {
"button": "新增",
"title": "新增資料",
"submit": "送出新增"
},
"remove": {
"button": "刪除",
"title": "刪除資料",
"submit": "送出刪除",
"confirm": {
"_": "您確定要刪除您所選取的 %d 筆資料嗎?",
"1": "您確定要刪除您所選取的 1 筆資料嗎?"
}
},
"error": {
"system": "系統發生錯誤(更多資訊)"
},
"edit": {
"button": "修改",
"title": "修改資料",
"submit": "送出修改"
},
"multi": {
"title": "多重值",
"info": "您所選擇的多筆資料中,此欄位包含了不同的值。若您想要將它們都改為同一個值,可以在此輸入,要不然它們會保留各自原本的值。",
"restore": "復原",
"noMulti": "此輸入欄需單獨輸入,不容許多筆資料一起修改"
}
},
"autoFill": {
"cancel": "取消"
},
"buttons": {
"copySuccess": {
"_": "複製了 %d 筆資料",
"1": "複製了 1 筆資料"
},
"copyTitle": "已經複製到剪貼簿",
"excel": "Excel",
"pdf": "PDF",
"print": "列印",
"copy": "複製",
"colvis": "欄位顯示",
"colvisRestore": "重置欄位顯示",
"csv": "CSV",
"pageLength": {
"-1": "顯示全部",
"_": "顯示 %d 筆"
},
"createState": "建立狀態",
"removeAllStates": "移除所有狀態",
"removeState": "移除",
"renameState": "重新命名",
"savedStates": "儲存狀態",
"stateRestore": "狀態 %d",
"updateState": "更新",
"collection": "更多"
"value": "內容"
},
"searchPanes": {
"clearMessage": "清空",
"collapse": {
"_": "搜尋面版 (%d)",
"0": "搜尋面版"
},
"emptyPanes": "沒搜尋面版",
"loadMessage": "載入搜尋面版中...",
"clearMessage": "清空",
"collapseMessage": "摺疊全部",
"count": "{total}",
"countFiltered": "{shown} ({total})",
"emptyPanes": "沒搜尋面版",
"loadMessage": "載入搜尋面版中...",
"showMessage": "顯示全部",
"collapseMessage": "摺疊全部",
"title": "篩選條件 - %d"
},
"searchPlaceholder": "",
"select": {
"cells": {
"_": "選擇了 %d 格資料",
"0": "",
"1": "選擇了 1 格資料"
},
"columns": {
"_": "選擇了 %d 欄資料",
"0": "",
"1": "選擇了 1 欄資料"
},
"rows": {
"_": "選擇了 %d 筆資料",
"0": "",
"1": "選擇了 1 筆資料"
}
},
"stateRestore": {
"emptyError": "名稱不能空白。",
"creationModal": {
"button": "建立",
"columns": {
@@ -200,6 +228,7 @@
"toggleLabel": "包含:"
},
"duplicateError": "此狀態名稱已經存在。",
"emptyError": "名稱不能空白。",
"emptyStates": "名稱不可空白。",
"removeConfirm": "確定要移除 %s 嗎?",
"removeError": "移除狀態失敗。",
@@ -210,31 +239,6 @@
"renameLabel": "%s 的新名稱:",
"renameTitle": "重新命名狀態"
},
"select": {
"columns": {
"_": "選擇了 %d 欄資料",
"1": "選擇了 1 欄資料"
},
"rows": {
"1": "選擇了 1 筆資料",
"_": "選擇了 %d 筆資料"
},
"cells": {
"1": "選擇了 1 格資料",
"_": "選擇了 %d 格資料"
}
},
"zeroRecords": "沒有符合的資料",
"aria": {
"sortAscending": ":升冪排列",
"sortDescending": ":降冪排列"
},
"info": "顯示第 _START_ 至 _END_ 筆結果,共 _TOTAL_ 筆",
"infoEmpty": "顯示第 0 至 0 筆結果,共 0 筆",
"infoThousands": ",",
"lengthMenu": "顯示 _MENU_ 筆結果",
"search": "搜尋:",
"searchPlaceholder": "請輸入關鍵字",
"thousands": ",",
"infoFiltered": "(從 _MAX_ 筆結果中篩選)"
"zeroRecords": "沒有符合的資料"
}

View File

@@ -2,6 +2,7 @@
{% load admin_status %}
<div
id="celery-progress-bar-{{ label }}"
class="progress-bar text-bg-{{ level }} task-status-progress-bar"
role="progressbar"
aria-valuenow="{% decimal_widthratio tasks_count tasks_total 100 %}"
@@ -9,5 +10,5 @@
aria-valuemax="100"
style="width: {% decimal_widthratio tasks_count tasks_total 100 %}%;"
>
<span>{% widthratio tasks_count tasks_total 100 %}%</span>
<span id="celery-progress-bar-{{ label }}-progress">{% widthratio tasks_count tasks_total 100 %}%</span>
</div>

View File

@@ -1,29 +1,32 @@
{% load i18n %}
<div id="esi-alert" class="col-12 collapse">
<div class="alert alert-warning">
<p class="text-center ">{% translate 'Your Server received an ESI error response code of ' %}<b id="esi-code">?</b></p>
<hr>
<pre id="esi-data" class="text-center text-wrap"></pre>
</div>
</div>
<script>
const elemCard = document.getElementById('esi-alert');
const elemMessage = document.getElementById('esi-data');
const elemCode = document.getElementById('esi-code');
<script>
$(document).ready(() => {
const elements = {
card: document.getElementById('esi-alert'),
message: document.getElementById('esi-data'),
code: document.getElementById('esi-code')
};
fetchGet({url: '{% url "authentication:esi_check" %}'})
.then((data) => {
console.log('ESI Check: ', JSON.stringify(data, null, 2));
fetchGet({url: '{% url "authentication:esi_check" %}'})
.then(({status, data}) => {
console.log('ESI Check:', JSON.stringify({status, data}, null, 2));
if (data.status !== 200) {
elemCode.textContent = data.status;
elemMessage.textContent = data.data.error;
if (status !== 200) {
elements.code.textContent = status;
elements.message.textContent = data.error;
new bootstrap.Collapse(elemCard, {toggle: true});
}
})
.catch((error) => {
console.error('Error fetching ESI check:', error);
new bootstrap.Collapse(elements.card, {toggle: true});
}
})
.catch((error) => console.error('Error fetching ESI check:', error));
});
</script>
</script>
</div>

View File

@@ -1,6 +1,27 @@
{% load i18n %}
{% load humanize %}
{% get_current_language as LANGUAGE_CODE %}
{% comment %}
Some translations used in the HTML and JavaScript code below.
We define them here so that they can be used in the JavaScript code as well with
the escapejs filter without having to redefine them later.
{% endcomment %}
{% translate "second" as l10nSecondSingular %}
{% translate "seconds" as l10nSecondPlural %}
{% translate "minute" as l10nMinuteSingular %}
{% translate "minutes" as l10nMinutePlural %}
{% translate "hour" as l10nHourSingular %}
{% translate "hours" as l10nHourPlural %}
{% translate "N/A" as l10nNA %}
{% translate "ERROR" as l10nError %}
{% translate "running" as l10nRunning %}
{% translate "queued" as l10nQueued %}
{% translate "succeeded" as l10nSucceeded %}
{% translate "retried" as l10nRetried %}
{% translate "failed" as l10nFailed %}
{% if debug %}
<div id="aa-dashboard-panel-debug" class="col-12 mb-3">
<div class="card text-bg-warning">
@@ -111,23 +132,27 @@
<div>
<p>
{% blocktranslate with total=tasks_total|intcomma latest=earliest_task|timesince|default:"?" %}
Status of {{ total }} processed tasks • last {{ latest }}
Status of <span id="total-task-count">?</span> processed tasks • last <span id="celery-uptime">?</span>
{% endblocktranslate %}
</p>
<div
class="progress"
id="celery-tasks-progress-bar"
class="progress mb-2"
style="height: 21px;"
title="{{ tasks_succeeded|intcomma }} succeeded, {{ tasks_retried|intcomma }} retried, {{ tasks_failed|intcomma }} failed"
title="? {{ l10nSucceeded }}, ? {{ l10nRetried }}, ? {{ l10nFailed }}"
>
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="suceeded" level="success" tasks_count=tasks_succeeded %}
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="retried" level="info" tasks_count=tasks_retried %}
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="failed" level="danger" tasks_count=tasks_failed %}
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="succeeded" level="success" tasks_count=0 %}
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="retried" level="info" tasks_count=0 %}
{% include "allianceauth/admin-status/celery_bar_partial.html" with label="failed" level="danger" tasks_count=0 %}
</div>
<p>
<span id="task-counts">?</span> {% translate 'running' %} |
<span id="queued-tasks-count">?</span> {% translate 'queued' %}
<span id="running-task-count">?</span> {{ l10nRunning }} |
<span id="queued-tasks-count">?</span> {{ l10nQueued }} |
<span id="succeeded-tasks-count">?</span> {{ l10nSucceeded }} |
<span id="retried-tasks-count">?</span> {{ l10nRetried }} |
<span id="failed-tasks-count">?</span> {{ l10nFailed }}
</p>
</div>
</div>
@@ -136,24 +161,24 @@
</div>
<script>
const elemRunning = document.getElementById('task-counts');
const elemQueued = document.getElementById('queued-tasks-count');
fetchGet({url: '{% url "authentication:task_counts" %}'})
.then((data) => {
const running = data.tasks_running;
const queued = data.tasks_queued;
const updateTaskCount = (element, value) => {
element.textContent = value == null ? 'N/A' : value.toLocaleString();
};
updateTaskCount(elemRunning, running);
updateTaskCount(elemQueued, queued);
})
.catch((error) => {
console.error('Error fetching task queue:', error);
[elemRunning, elemQueued].forEach(elem => elem.textContent = 'ERROR');
});
const taskQueueSettings = {
url: '{% url "authentication:task_counts" %}',
l10n: {
language: '{{ LANGUAGE_CODE }}',
second_singular: '{{ l10nSecondSingular|escapejs }}',
second_plural: '{{ l10nSecondPlural|escapejs }}',
minute_singular: '{{ l10nMinuteSingular|escapejs }}',
minute_plural: '{{ l10nMinutePlural|escapejs }}',
hour_singular: '{{ l10nHourSingular|escapejs }}',
hour_plural: '{{ l10nHourPlural|escapejs }}',
na: '{{ l10nNA|escapejs }}',
error: '{{ l10nError|escapejs }}',
running: '{{ l10nRunning|escapejs }}',
queued: '{{ l10nQueued|escapejs }}',
succeeded: '{{ l10nSucceeded|escapejs }}',
retried: '{{ l10nRetried|escapejs }}',
failed: '{{ l10nFailed|escapejs }}'
}
};
</script>
{% include "bundles/auth-dashboard-task-queue-js.html" %}

View File

@@ -18,10 +18,11 @@
<title>{% block title %}{% block page_title %}{% endblock page_title %} - {{ SITE_NAME }}{% endblock title %}</title>
{% include 'bundles/auth-framework-css.html' %}
{% theme_css %}
{% include 'bundles/fontawesome.html' %}
{% include 'bundles/auth-framework-css.html' %}
{% include 'bundles/jquery-js.html' %}
{% include 'bundles/auth-framework-js.html' %}
@@ -101,44 +102,7 @@
</main>
<!-- End Body -->
<script>
(() => {
// TODO Move to own JS file
const sidebar = document.getElementById('sidebar');
const sidebarKey = `sidebar_${sidebar.id}`;
sidebar.addEventListener('shown.bs.collapse', (event) => {
if (event.target.id === sidebar.id) {
localStorage.removeItem(sidebarKey);
}
});
sidebar.addEventListener('hidden.bs.collapse', (event) => {
if (event.target.id === sidebar.id) {
localStorage.setItem(sidebarKey, 'closed');
}
});
if (localStorage.getItem(sidebarKey) === 'closed') {
sidebar.classList.remove('show');
} else {
sidebar.classList.add('show');
}
const activeChildMenuItem = document.querySelector('#sidebar-menu li ul li a.active');
if (activeChildMenuItem) {
const activeChildMenuUl = activeChildMenuItem.parentElement.parentElement;
const elementsToToggle = document.querySelectorAll(`[data-bs-target^="#${activeChildMenuUl.id}"]`);
activeChildMenuUl.classList.add('show');
elementsToToggle.forEach((element) => {
element.setAttribute('aria-expanded', true);
});
}
})();
</script>
{% include "bundles/auth-sidebar-collapse-js.html" %}
{% theme_js %}

View File

@@ -1,21 +1,17 @@
{% load i18n %}
{% if user.is_authenticated %}
<li class="nav-item">
<a href="{% url 'authentication:add_character' %}" class="nav-link" title="{% translate 'Add Character' %}">
<i class="fa-solid fa-user-plus"></i>
<span class="d-lg-none d-md-inline m-2">{% translate "Add Character" %}</span>
</a>
</li>
<li class="nav-item">
<a href="{% url 'authentication:change_main_character' %}" class="nav-link" title="{% translate 'Change Main' %}">
<i class="fa-solid fa-shuffle"></i>
<span class="d-lg-none d-md-inline m-2">{% translate "Change Main" %}</span>
</a>
</li>
{% translate "Add Character" as nav_item_title %}
{% url "authentication:add_character" as nav_item_link %}
{% include "framework/header/nav-collapse-icon.html" with fa_icon="fa-solid fa-user-plus" url=nav_item_link title=nav_item_title icon_on_mobile=True %}
{% translate "Change Main" as nav_item_title %}
{% url "authentication:change_main_character" as nav_item_link %}
{% include "framework/header/nav-collapse-icon.html" with fa_icon="fa-solid fa-shuffle" url=nav_item_link title=nav_item_title icon_on_mobile=True %}
{% else %}
<li class="nav-item">
<a href="{% url 'authentication:login' %}" class="nav-link" title="{% translate 'Sign In' %}">
<i class="fa-solid fa-right-to-bracket fa-fw "></i> {% translate "Sign In" %}
</a>
</li>
<li class="nav-item">
<a href="{% url 'authentication:login' %}" class="nav-link" title="{% translate 'Sign In' %}">
<i class="fa-solid fa-right-to-bracket fa-fw me-2"></i> {% translate "Sign In" %}
</a>
</li>
{% endif %}

View File

@@ -0,0 +1,3 @@
{% load sri %}
{% sri_static 'allianceauth/js/dashboard-update-task-queue.js' %}

View File

@@ -0,0 +1,3 @@
{% load sri %}
{% sri_static 'allianceauth/js/sidebar.js' %}

View File

@@ -0,0 +1,5 @@
{% load sri %}
<!-- Start DataTables ColumnControl CSS -->
{% sri_static "allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/css/columnControl.bootstrap5.min.css" %}
<!-- End DataTables ColumnControl CSS -->

View File

@@ -0,0 +1,6 @@
{% load sri %}
<!-- Start DataTables ColumnControl JS -->
{% sri_static "allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/js/dataTables.columnControl.min.js" %}
{% sri_static "allianceauth/libs/DataTables/Extensions/ColumnControl/1.2.0/js/columnControl.bootstrap5.min.js" %}
<!-- End DataTables ColumnControl JS -->

View File

@@ -0,0 +1,5 @@
{% load sri %}
<!-- Start DataTables CSS -->
{% sri_static "allianceauth/libs/DataTables/2.3.6/css/dataTables.bootstrap5.min.css" %}
<!-- End DataTables CSS -->

View File

@@ -0,0 +1,6 @@
{% load sri %}
<!-- Start DataTables JS -->
{% sri_static "allianceauth/libs/DataTables/2.3.6/js/dataTables.min.js" %}
{% sri_static "allianceauth/libs/DataTables/2.3.6/js/dataTables.bootstrap5.min.js" %}
<!-- End DataTables JS -->

View File

@@ -0,0 +1,11 @@
{# Template override to display the errors of django Forms when using `boostrap_form` form the `django-bootstrap5` #}
{# library. #}
{# See: https://github.com/zostera/django-bootstrap5/pull/767 #}
{% if field_errors %}
<div id="{{ field.auto_id }}_error" class="invalid-feedback">
{% for text in field_errors %}
<div>{{ text }}</div>
{% endfor %}
</div>
{% endif %}

View File

@@ -59,7 +59,7 @@ def get_datatables_language_static(language: str) -> str:
mapped_language = get_datatable_language_code(language)
static_url = (
static(
path=f"allianceauth/libs/DataTables/Plugins/2.2.1/i18n/{mapped_language}.json"
path=f"allianceauth/libs/DataTables/Plugins/2.3.6/i18n/{mapped_language}.json"
)
if mapped_language
else ""

View File

@@ -37,7 +37,8 @@ def get_theme(request):
def get_theme_context(request):
return {
'theme': get_theme(request)
'theme': get_theme(request),
'request': request
}

Some files were not shown because too many files have changed in this diff Show More