Compare commits

...

109 Commits
v4.x ... master

Author SHA1 Message Date
Joel Falknau
55446639c0 Version Bump 4.12.0 2026-01-22 18:32:31 +10:00
Ariel Rin
c703584110 Merge branch 'translations_7f31a07ccd4e4a66b1dd7b6bc2dbddb5' into 'master'
Updates for project Alliance Auth

See merge request allianceauth/allianceauth!1791
2026-01-22 07:40:33 +00:00
Ariel Rin
7f22a744c6 Updates for project Alliance Auth 2026-01-22 07:40:33 +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
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
114 changed files with 8344 additions and 4635 deletions

View File

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

View File

@@ -25,19 +25,19 @@ exclude: |
repos: repos:
# Code Upgrades # Code Upgrades
- repo: https://github.com/asottile/pyupgrade - repo: https://github.com/asottile/pyupgrade
rev: v3.20.0 rev: v3.21.2
hooks: hooks:
- id: pyupgrade - id: pyupgrade
args: [--py38-plus] args: [--py38-plus]
- repo: https://github.com/adamchainz/django-upgrade - repo: https://github.com/adamchainz/django-upgrade
rev: 1.25.0 rev: 1.29.1
hooks: hooks:
- id: django-upgrade - id: django-upgrade
args: [--target-version=4.2] args: [--target-version=4.2]
# Formatting # Formatting
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0 rev: v6.0.0
hooks: hooks:
# Identify invalid files # Identify invalid files
- id: check-ast - id: check-ast
@@ -55,8 +55,6 @@ repos:
# - id: check-docstring-first # - id: check-docstring-first
- id: debug-statements - id: debug-statements
# - id: requirements-txt-fixer # - id: requirements-txt-fixer
- id: fix-encoding-pragma
args: [--remove]
- id: fix-byte-order-marker - id: fix-byte-order-marker
# General quality checks # General quality checks
- id: mixed-line-ending - id: mixed-line-ending
@@ -66,11 +64,11 @@ repos:
- id: check-executables-have-shebangs - id: check-executables-have-shebangs
- id: end-of-file-fixer - id: end-of-file-fixer
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python - repo: https://github.com/editorconfig-checker/editorconfig-checker.python
rev: 3.2.1 rev: 3.6.0
hooks: hooks:
- id: editorconfig-checker - id: editorconfig-checker
- repo: https://github.com/igorshubovych/markdownlint-cli - repo: https://github.com/igorshubovych/markdownlint-cli
rev: v0.45.0 rev: v0.47.0
hooks: hooks:
- id: markdownlint - id: markdownlint
language: node language: node
@@ -78,7 +76,7 @@ repos:
- --disable=MD013 - --disable=MD013
# Infrastructure # Infrastructure
- repo: https://github.com/tox-dev/pyproject-fmt - repo: https://github.com/tox-dev/pyproject-fmt
rev: v2.6.0 rev: v2.11.1
hooks: hooks:
- id: pyproject-fmt - id: pyproject-fmt
name: pyproject.toml formatter name: pyproject.toml formatter
@@ -86,7 +84,7 @@ repos:
args: args:
- --indent=4 - --indent=4
additional_dependencies: 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 - repo: https://github.com/abravalheri/validate-pyproject
rev: v0.24.1 rev: v0.24.1
hooks: 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/) - [Aaron Kable](https://gitlab.com/aaronkable/)
- [Ariel Rin](https://gitlab.com/soratidus999/) - [Ariel Rin](https://gitlab.com/soratidus999/)
- [Col Crunch](https://gitlab.com/colcrunch/) - [Col Crunch](https://gitlab.com/colcrunch/)
- [Erik Kalkoken](https://gitlab.com/ErikKalkoken/)
- [Rounon Dax](https://gitlab.com/ppfeufer) - [Rounon Dax](https://gitlab.com/ppfeufer)
- [snipereagle1](https://gitlab.com/mckernanin) - [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/) - [Adarnof](https://gitlab.com/adarnof/)
- [Basraah](https://gitlab.com/basraah/) - [Basraah](https://gitlab.com/basraah/)
- [Erik Kalkoken](https://gitlab.com/ErikKalkoken/)
### Beta Testers / Bug Fixers ### 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. 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. 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 # This will make sure the app is always imported when
# Django starts so that shared_task will use this app. # Django starts so that shared_task will use this app.
__version__ = '4.9.0' __version__ = '4.12.0'
__title__ = 'Alliance Auth' __title__ = 'Alliance Auth'
__title_useragent__ = 'AllianceAuth' __title_useragent__ = 'AllianceAuth'
__url__ = 'https://gitlab.com/allianceauth/allianceauth' __url__ = 'https://gitlab.com/allianceauth/allianceauth'

View File

@@ -52,4 +52,10 @@ class UserSettingsMiddleware(MiddlewareMixin):
except Exception as e: except Exception as e:
logger.exception(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 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, on_delete=models.SET_DEFAULT,
default=get_guest_state_pk) default=get_guest_state_pk)
language = models.CharField( language = models.CharField(
_("Language"), max_length=10, _("Language"),
max_length=10,
choices=Language.choices, choices=Language.choices,
blank=True, blank=True,
default='') default='')
@@ -112,6 +113,12 @@ class UserProfile(models.Model):
null=True, null=True,
help_text="Bootstrap 5 Themes from https://bootswatch.com/ or Community Apps" 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): def assign_state(self, state=None, commit=True):
if not state: if not state:

View File

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

View File

@@ -42,7 +42,7 @@ class EventSeries:
- event_time: timestamp of event. Will use current time if not specified. - event_time: timestamp of event. Will use current time if not specified.
""" """
if not event_time: 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) my_id = self._redis.incr(self._key_counter)
self._redis.zadd(self._key_sorted_set, {my_id: event_time.timestamp()}) 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.LANGUAGE_CODE = 'en'
self.request.user.profile.language = 'de' self.request.user.profile.language = 'de'
self.request.user.profile.night_mode = True self.request.user.profile.night_mode = True
self.request.user.profile.minimize_sidebar = False
self.request.user.is_anonymous = False self.request.user.is_anonymous = False
self.response = Mock() self.response = Mock()
self.response.content = 'hello world' self.response.content = 'hello world'
@@ -173,3 +174,26 @@ class TestUserSettingsMiddlewareLoginFlow(TestCase):
self.response self.response
) )
self.assertEqual(self.request.session["NIGHT_MODE"], True) 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 from allianceauth.authentication.constants import ESI_ERROR_MESSAGE_OVERRIDES
MODULE_PATH = "allianceauth.authentication.views" MODULE_PATH = "allianceauth.authentication.views"
TEMPLATETAGS_PATH = "allianceauth.templatetags.admin_status"
def jsonresponse_to_dict(response) -> dict: 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 + ".queued_tasks_count")
@patch(MODULE_PATH + ".active_tasks_count") @patch(MODULE_PATH + ".active_tasks_count")
@patch(MODULE_PATH + "._celery_stats")
class TestRunningTasksCount(TestCase): class TestRunningTasksCount(TestCase):
@classmethod @classmethod
def setUpClass(cls) -> None: def setUpClass(cls) -> None:
@@ -26,36 +28,64 @@ class TestRunningTasksCount(TestCase):
cls.user.is_superuser = True cls.user.is_superuser = True
cls.user.save() cls.user.save()
def test_should_return_data( def test_should_return_data(self, mock_celery_stats, mock_tasks_queued, mock_tasks_running):
self, mock_active_tasks_count, mock_queued_tasks_count
):
# given # given
mock_active_tasks_count.return_value = 2 mock_tasks_running.return_value = 2
mock_queued_tasks_count.return_value = 3 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 = self.factory.get("/")
request.user = self.user request.user = self.user
# when # when
response = task_counts(request) response = task_counts(request)
# then # then
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertDictEqual( self.assertDictEqual(
jsonresponse_to_dict(response), { jsonresponse_to_dict(response),
"tasks_running": 2, "tasks_queued": 3} {
"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( def test_su_only(self, mock_celery_stats, mock_tasks_queued, mock_tasks_running):
self, mock_active_tasks_count, mock_queued_tasks_count
):
self.user.is_superuser = False self.user.is_superuser = False
self.user.save() self.user.save()
self.user.refresh_from_db() self.user.refresh_from_db()
# given # given
mock_active_tasks_count.return_value = 2 mock_tasks_running.return_value = 2
mock_queued_tasks_count.return_value = 3 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 = self.factory.get("/")
request.user = self.user request.user = self.user
# when # when
response = task_counts(request) response = task_counts(request)
# then # then
self.assertEqual(response.status_code, 302) 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 .constants import ESI_ERROR_MESSAGE_OVERRIDES
from .core.celery_workers import active_tasks_count, queued_tasks_count from .core.celery_workers import active_tasks_count, queued_tasks_count
from allianceauth.templatetags.admin_status import _celery_stats
from .forms import RegistrationForm from .forms import RegistrationForm
from .models import CharacterOwnership from .models import CharacterOwnership
@@ -370,10 +371,10 @@ def registration_closed(request):
@user_passes_test(lambda u: u.is_superuser) @user_passes_test(lambda u: u.is_superuser)
def task_counts(request) -> JsonResponse: def task_counts(request) -> JsonResponse:
"""Return task counts as JSON for an AJAX call.""" """Return task counts as JSON for an AJAX call."""
data = { data = _celery_stats()
"tasks_running": active_tasks_count(), data.update(
"tasks_queued": queued_tasks_count() {"tasks_running": active_tasks_count(), "tasks_queued": queued_tasks_count()}
} )
return JsonResponse(data) 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('--celery', help='The path to the celery executable.')
parser.add_argument('--gunicorn', help='The path to the gunicorn 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('--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): def create_project(parser, options, args):
@@ -27,7 +28,7 @@ def create_project(parser, options, args):
allianceauth_path = os.path.dirname(allianceauth.__file__) allianceauth_path = os.path.dirname(allianceauth.__file__)
template_path = os.path.join(allianceauth_path, 'project_template') 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 = { command_options = {
'template': template_path, 'template': template_path,
'python': shutil.which('python'), 'python': shutil.which('python'),
@@ -35,6 +36,7 @@ def create_project(parser, options, args):
'celery': shutil.which('celery'), 'celery': shutil.which('celery'),
'memmon': shutil.which('memmon'), 'memmon': shutil.which('memmon'),
'extensions': ['py', 'conf', 'json'], 'extensions': ['py', 'conf', 'json'],
'venv_directory': os.getenv('VIRTUAL_ENV'),
} }
# Strip 'start' out of the arguments, leaving project name (and optionally destination dir) # Strip 'start' out of the arguments, leaving project name (and optionally destination dir)

View File

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

View File

@@ -727,7 +727,8 @@ class TestEveSwaggerProvider(TestCase):
my_provider = EveSwaggerProvider() my_provider = EveSwaggerProvider()
my_client = my_provider.client my_client = my_provider.client
operation = my_client.Universe.get_universe_factions() operation = my_client.Universe.get_universe_factions()
self.assertEqual( expected_variants = {
operation.future.request.headers['User-Agent'], 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})' 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( messages.warning(
request, 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') 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 { @media all {
.table { .table {
--bs-table-bg: transparent; --bs-table-bg: transparent !important;
} }
} }
@@ -47,6 +47,12 @@
/* Side Navigation /* Side Navigation
------------------------------------------------------------------------------------- */ ------------------------------------------------------------------------------------- */
@media all { @media all {
.sidemenu-total-notifications-badge {
position: absolute;
left: 28px;
font-size: 42.5% !important;
}
#sidebar > div { #sidebar > div {
width: 325px; width: 325px;
} }
@@ -173,3 +179,34 @@
border-left-color: var(--bs-warning); 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; 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 … * 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-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" /> <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> </circle>
<animateTransform attributeName="transform" type="rotate" dur="2s" values="0 12 12;360 12 12" repeatCount="indefinite" /> <animateTransform attributeName="transform" type="rotate" dur="2s" values="0 12 12;360 12 12" repeatCount="indefinite" />
</g> </g>
</symbol> </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> </defs>
</svg> </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" %} {% translate "Join Requests" %}
{% if acceptrequests %} {% if acceptrequests %}
<span class="badge text-bg-secondary">{{ acceptrequests|length }}</span> <span id="acceptRequestsCounter" class="badge text-bg-secondary">{{ acceptrequests|length }}</span>
{% endif %} {% endif %}
</a> </a>
</li> </li>
@@ -30,7 +30,7 @@
{% translate "Leave Requests" %} {% translate "Leave Requests" %}
{% if leaverequests %} {% if leaverequests %}
<span class="badge text-bg-secondary">{{ leaverequests|length }}</span> <span id="leaveRequestsCounter" class="badge text-bg-secondary">{{ leaverequests|length }}</span>
{% endif %} {% endif %}
</a> </a>
</li> </li>
@@ -43,19 +43,19 @@
</li> </li>
{% endblock header_nav_collapse_left %} {% endblock header_nav_collapse_left %}
{% block content %} {% block content %}
<div class="tab-content"> <div class="tab-content">
<div id="add" class="tab-pane active"> <div id="add" class="tab-pane active">
{% if acceptrequests %} {% if acceptrequests %}
<div class="table-responsive"> <div>
<table class="table"> <table id="table-add" class="table table-responsive w-100">
<thead> <thead>
<tr> <tr>
<th>{% translate "Character" %}</th> <th>{% translate "Character" %}</th>
<th>{% translate "Organization" %}</th> <th>{% translate "Organization" %}</th>
<th>{% translate "Group" %}</th> <th>{% translate "Group" %}</th>
<th></th> <th></th>
<th>{% translate "Corporation" %}</th>
</tr> </tr>
</thead> </thead>
@@ -89,13 +89,24 @@
<td>{{ acceptrequest.group.name }}</td> <td>{{ acceptrequest.group.name }}</td>
<td class="text-end"> <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" %} {% translate "Accept" %}
</a> </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" %} {% translate "Reject" %}
</a> </a>
</td> </td>
<td>
{% if acceptrequest.main_char %}
{{ acceptrequest.main_char.corporation_name }}
{% else %}
{% translate "(unknown)" %}
{% endif %}
</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
@@ -111,14 +122,15 @@
{% if not show_leave_tab %} {% if not show_leave_tab %}
<div id="leave" class="tab-pane"> <div id="leave" class="tab-pane">
{% if leaverequests %} {% if leaverequests %}
<div class="table-responsive"> <div>
<table class="table"> <table id="table-rem" class="table table-responsive w-100">
<thead> <thead>
<tr> <tr>
<th>{% translate "Character" %}</th> <th>{% translate "Character" %}</th>
<th>{% translate "Organization" %}</th> <th>{% translate "Organization" %}</th>
<th>{% translate "Group" %}</th> <th>{% translate "Group" %}</th>
<th></th> <th></th>
<th>{% translate "Corporation" %}</th>
</tr> </tr>
</thead> </thead>
@@ -152,14 +164,23 @@
<td>{{ leaverequest.group.name }}</td> <td>{{ leaverequest.group.name }}</td>
<td class="text-end"> <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" %} {% translate "Accept" %}
</a> </a>
<a id="{{leaverequest.id}}" class="btn btn-danger reject leave-reject btns-leave-{{leaverequest.id}}">
<a href="{% url 'groupmanagement:leave_reject_request' leaverequest.id %}" class="btn btn-danger">
{% translate "Reject" %} {% translate "Reject" %}
</a> </a>
</td> </td>
<td>
{% if leaverequest.main_char %}
{{ leaverequest.main_char.corporation_name }}
{% else %}
{% translate "(unknown)" %}
{% endif %}
</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
@@ -172,3 +193,189 @@
{% endif %} {% endif %}
</div> </div>
{% endblock content %} {% 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 "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Tomas Skarecky <t.skarecky@gmail.com>, 2024\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" "Language-Team: Czech (Czech Republic) (https://app.transifex.com/alliance-auth/teams/107430/cs_CZ/)\n"
@@ -62,7 +62,7 @@ msgstr ""
"přístupem:%s" "přístupem:%s"
#: allianceauth/authentication/models.py:72 #: 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" msgid "English"
msgstr "Angličtina" msgstr "Angličtina"
@@ -71,57 +71,57 @@ msgid "Czech"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:74 #: 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" msgid "German"
msgstr "Němčina" msgstr "Němčina"
#: allianceauth/authentication/models.py:75 #: 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" msgid "Spanish"
msgstr "Španělština" msgstr "Španělština"
#: allianceauth/authentication/models.py:76 #: 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" msgid "Italian"
msgstr "Italština" msgstr "Italština"
#: allianceauth/authentication/models.py:77 #: 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" msgid "Japanese"
msgstr "Japonština" msgstr "Japonština"
#: allianceauth/authentication/models.py:78 #: 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" msgid "Korean"
msgstr "Korejština" msgstr "Korejština"
#: allianceauth/authentication/models.py:79 #: allianceauth/authentication/models.py:79
#: allianceauth/project_template/project_name/settings/base.py:113 #: allianceauth/project_template/project_name/settings/base.py:111
msgid "French" msgid "French"
msgstr "Francouzština" msgstr "Francouzština"
#: allianceauth/authentication/models.py:80 #: 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" msgid "Russian"
msgstr "Ruština" msgstr "Ruština"
#: allianceauth/authentication/models.py:81 #: 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" msgid "Dutch"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:82 #: 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" msgid "Polish"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:83 #: 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" msgid "Ukrainian"
msgstr "Ukrajinština" msgstr "Ukrajinština"
#: allianceauth/authentication/models.py:84 #: 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" msgid "Simplified Chinese"
msgstr "" msgstr ""
@@ -166,14 +166,12 @@ msgstr "Postavy"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11 #: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12 #: 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:4
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
msgid "Add Character" msgid "Add Character"
msgstr "Přidat postavu" msgstr "Přidat postavu"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14 #: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15 #: 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:8
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
msgid "Change Main" msgid "Change Main"
msgstr "Změnit postavu" msgstr "Změnit postavu"
@@ -230,8 +228,8 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:168 #: allianceauth/hrapplications/templates/hrapplications/management.html:168
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
#: allianceauth/hrapplications/templates/hrapplications/view.html:94 #: allianceauth/hrapplications/templates/hrapplications/view.html:94
#: allianceauth/srp/templates/srp/data.html:83 #: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/management.html:53 #: allianceauth/srp/templates/srp/management.html:51
msgid "Actions" msgid "Actions"
msgstr "Akce" msgstr "Akce"
@@ -282,7 +280,7 @@ msgstr "Registrace"
msgid "Invalid or expired activation link." msgid "Invalid or expired activation link."
msgstr "Nevalidní, nebo expirovaný aktivační odkaz." msgstr "Nevalidní, nebo expirovaný aktivační odkaz."
#: allianceauth/authentication/views.py:158 #: allianceauth/authentication/views.py:159
#, python-format #, python-format
msgid "" msgid ""
"Cannot change main character to %(char)s: character owned by a different " "Cannot change main character to %(char)s: character owned by a different "
@@ -290,22 +288,22 @@ msgid ""
msgstr "" msgstr ""
"Není možné změnit hlavní postavu na %(char)s: postava patří pod jiný účet." "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 #, python-format
msgid "Changed main character to %s" msgid "Changed main character to %s"
msgstr "Hlavní postava změněna na %s" msgstr "Hlavní postava změněna na %s"
#: allianceauth/authentication/views.py:179 #: allianceauth/authentication/views.py:180
#, python-format #, python-format
msgid "Added %(name)s to your account." msgid "Added %(name)s to your account."
msgstr "%(name)spřidána k vačenu účtu" msgstr "%(name)spřidána k vačenu účtu"
#: allianceauth/authentication/views.py:181 #: allianceauth/authentication/views.py:182
#, python-format #, python-format
msgid "Failed to add %(name)s to your account: they already have an account." msgid "Failed to add %(name)s to your account: they already have an account."
msgstr "Přidání %(name)sk vašemu účtu se nezdařilo: již mají účet" 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 "" msgid ""
"Unable to authenticate as the selected character. Please log in with the " "Unable to authenticate as the selected character. Please log in with the "
"main character associated with this account." "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í " "Není možné váš ověřit pomocí vybrané postavu. Prosím přihlaste se pomocí "
"hlavní postavy spojené s tímto účtem." "hlavní postavy spojené s tímto účtem."
#: allianceauth/authentication/views.py:293 #: allianceauth/authentication/views.py:294
msgid "Registration token has expired." msgid "Registration token has expired."
msgstr "Registrační token expiroval" msgstr "Registrační token expiroval"
#: allianceauth/authentication/views.py:354 #: allianceauth/authentication/views.py:355
msgid "" msgid ""
"Sent confirmation email. Please follow the link to confirm your email " "Sent confirmation email. Please follow the link to confirm your email "
"address." "address."
@@ -325,11 +323,11 @@ msgstr ""
"Byl vám odeslán potvrzovací email. Otevřete prosím odkaz pro potvrzení " "Byl vám odeslán potvrzovací email. Otevřete prosím odkaz pro potvrzení "
"emailové adresy. " "emailové adresy. "
#: allianceauth/authentication/views.py:360 #: allianceauth/authentication/views.py:361
msgid "Confirmed your email address. Please login to continue." msgid "Confirmed your email address. Please login to continue."
msgstr "Emailová adresa potvrzena. Přihlaste se prosím." 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." msgid "Registration of new accounts is not allowed at this time."
msgstr "Momentálně není povolena registrace nových účtů." msgstr "Momentálně není povolena registrace nových účtů."
@@ -346,11 +344,11 @@ msgstr ""
msgid "Corporations" msgid "Corporations"
msgstr "Korporace" msgstr "Korporace"
#: allianceauth/corputils/templates/corputils/base.html:35 #: allianceauth/corputils/templates/corputils/base.html:31
msgid "Add corporation" msgid "Add corporation"
msgstr "Přidat korporaci" msgstr "Přidat korporaci"
#: allianceauth/corputils/templates/corputils/base.html:51 #: allianceauth/corputils/templates/corputils/base.html:47
msgid "Search all corporations..." msgid "Search all corporations..."
msgstr "Vyhledat všechny korporace" msgstr "Vyhledat všechny korporace"
@@ -498,7 +496,7 @@ msgid "Fleet Activity Tracking"
msgstr "" msgstr ""
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8 #: 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" msgid "Fleet Name"
msgstr "Jméno flotily" msgstr "Jméno flotily"
@@ -988,7 +986,7 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:123 #: allianceauth/hrapplications/templates/hrapplications/management.html:123
#: allianceauth/hrapplications/templates/hrapplications/management.html:167 #: allianceauth/hrapplications/templates/hrapplications/management.html:167
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
#: allianceauth/srp/templates/srp/data.html:81 #: allianceauth/srp/templates/srp/data.html:79
msgid "Status" msgid "Status"
msgstr "" msgstr ""
@@ -1001,7 +999,7 @@ msgid "Hidden"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45 #: 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" msgid "Open"
msgstr "" msgstr ""
@@ -1046,17 +1044,9 @@ msgstr ""
msgid "Leave" msgid "Leave"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
#: allianceauth/hrapplications/templates/hrapplications/management.html:46 msgid "Request pending"
#: 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 "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
@@ -1067,7 +1057,11 @@ msgstr ""
msgid "Request" msgid "Request"
msgstr "" 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." msgid "No groups available."
msgstr "" msgstr ""
@@ -1196,6 +1190,19 @@ msgstr ""
msgid "Applied to leave group %(group)s." msgid "Applied to leave group %(group)s."
msgstr "" 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 #: allianceauth/hrapplications/apps.py:8
msgid "HR Applications" msgid "HR Applications"
msgstr "" msgstr ""
@@ -1266,12 +1273,23 @@ msgstr ""
msgid "Username" msgid "Username"
msgstr "" 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:48
#: allianceauth/hrapplications/templates/hrapplications/management.html:141 #: allianceauth/hrapplications/templates/hrapplications/management.html:141
#: allianceauth/hrapplications/templates/hrapplications/management.html:185 #: allianceauth/hrapplications/templates/hrapplications/management.html:185
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
#: allianceauth/hrapplications/templates/hrapplications/view.html:21 #: allianceauth/hrapplications/templates/hrapplications/view.html:21
#: allianceauth/srp/templates/srp/data.html:112 #: allianceauth/srp/templates/srp/data.html:110
msgid "Approved" msgid "Approved"
msgstr "" msgstr ""
@@ -1279,7 +1297,7 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:143 #: allianceauth/hrapplications/templates/hrapplications/management.html:143
#: allianceauth/hrapplications/templates/hrapplications/management.html:187 #: allianceauth/hrapplications/templates/hrapplications/management.html:187
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
#: allianceauth/srp/templates/srp/data.html:116 #: allianceauth/srp/templates/srp/data.html:114
msgid "Rejected" msgid "Rejected"
msgstr "" msgstr ""
@@ -1514,8 +1532,8 @@ msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:155 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158 #: 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:13
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
msgid "Sign In" msgid "Sign In"
msgstr "" msgstr ""
@@ -1543,11 +1561,11 @@ msgstr ""
msgid "Read" msgid "Read"
msgstr "" msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:32 #: allianceauth/notifications/templates/notifications/list.html:31
msgid "Mark all notifications as read" msgid "Mark all notifications as read"
msgstr "" msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:38 #: allianceauth/notifications/templates/notifications/list.html:35
msgid "Delete all read notifications" msgid "Delete all read notifications"
msgstr "" msgstr ""
@@ -1612,12 +1630,12 @@ msgid "Operation Type"
msgstr "" msgstr ""
#: allianceauth/optimer/form.py:17 #: allianceauth/optimer/form.py:17
#: allianceauth/srp/templates/srp/management.html:47 #: allianceauth/srp/templates/srp/management.html:45
msgid "Fleet Commander" msgid "Fleet Commander"
msgstr "" msgstr ""
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14 #: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
#: allianceauth/srp/templates/srp/data.html:72 #: allianceauth/srp/templates/srp/data.html:70
msgid "Additional Info" msgid "Additional Info"
msgstr "" msgstr ""
@@ -1626,7 +1644,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/add.html:8 #: allianceauth/optimer/templates/optimer/add.html:8
#: allianceauth/optimer/templates/optimer/management.html:18 #: allianceauth/optimer/templates/optimer/management.html:16
msgid "Create Operation" msgid "Create Operation"
msgstr "" msgstr ""
@@ -1675,26 +1693,26 @@ msgstr ""
msgid "Fleet Operation Management" msgid "Fleet Operation Management"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:28 #: allianceauth/optimer/templates/optimer/management.html:26
#: allianceauth/timerboard/templates/timerboard/view.html:32 #: allianceauth/timerboard/templates/timerboard/view.html:30
msgid "Current EVE time:" msgid "Current EVE time:"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:36 #: allianceauth/optimer/templates/optimer/management.html:34
msgid "Next Fleet Operations" msgid "Next Fleet Operations"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:44 #: allianceauth/optimer/templates/optimer/management.html:42
#: allianceauth/timerboard/templates/timerboard/view.html:63 #: allianceauth/timerboard/templates/timerboard/view.html:61
msgid "No upcoming timers." msgid "No upcoming timers."
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:52 #: allianceauth/optimer/templates/optimer/management.html:50
msgid "Past Fleet Operations" msgid "Past Fleet Operations"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:60 #: allianceauth/optimer/templates/optimer/management.html:58
#: allianceauth/timerboard/templates/timerboard/view.html:81 #: allianceauth/timerboard/templates/timerboard/view.html:79
msgid "No past timers." msgid "No past timers."
msgstr "" msgstr ""
@@ -2262,7 +2280,7 @@ msgid "Enabled"
msgstr "" msgstr ""
#: allianceauth/services/templates/services/service_status.html:7 #: allianceauth/services/templates/services/service_status.html:7
#: allianceauth/srp/templates/srp/management.html:78 #: allianceauth/srp/templates/srp/management.html:76
msgid "Disabled" msgid "Disabled"
msgstr "" msgstr ""
@@ -2300,12 +2318,12 @@ msgid "Ship Replacement"
msgstr "" msgstr ""
#: allianceauth/srp/form.py:9 #: allianceauth/srp/form.py:9
#: allianceauth/srp/templates/srp/management.html:45 #: allianceauth/srp/templates/srp/management.html:43
msgid "Fleet Time" msgid "Fleet Time"
msgstr "" msgstr ""
#: allianceauth/srp/form.py:10 #: allianceauth/srp/form.py:10
#: allianceauth/srp/templates/srp/management.html:46 #: allianceauth/srp/templates/srp/management.html:44
msgid "Fleet Doctrine" msgid "Fleet Doctrine"
msgstr "" msgstr ""
@@ -2354,7 +2372,7 @@ msgid "Give this link to the line members."
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:8 #: 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" msgid "SRP Fleet Data"
msgstr "" msgstr ""
@@ -2362,64 +2380,64 @@ msgstr ""
msgid "View Fleets" msgid "View Fleets"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:26 #: allianceauth/srp/templates/srp/data.html:24
msgid "Mark Incomplete" msgid "Mark Incomplete"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:30 #: allianceauth/srp/templates/srp/data.html:28
msgid "Mark Completed" msgid "Mark Completed"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:48 #: allianceauth/srp/templates/srp/data.html:46
#: allianceauth/srp/templates/srp/data.html:142 #: allianceauth/srp/templates/srp/data.html:140
msgid "Total Losses:" msgid "Total Losses:"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:49 #: allianceauth/srp/templates/srp/data.html:47
#: allianceauth/srp/templates/srp/data.html:143 #: allianceauth/srp/templates/srp/data.html:141
#: allianceauth/srp/templates/srp/management.html:36 #: allianceauth/srp/templates/srp/management.html:34
msgid "Total ISK Cost:" msgid "Total ISK Cost:"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:60 #: allianceauth/srp/templates/srp/data.html:58
#: allianceauth/srp/templates/srp/data.html:154 #: allianceauth/srp/templates/srp/data.html:152
msgid "Are you sure you want to delete SRP requests?" msgid "Are you sure you want to delete SRP requests?"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:70 #: allianceauth/srp/templates/srp/data.html:68
msgid "Pilot Name" msgid "Pilot Name"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:71 #: allianceauth/srp/templates/srp/data.html:69
msgid "Killboard Link" msgid "Killboard Link"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:73 #: allianceauth/srp/templates/srp/data.html:71
msgid "Ship Type" msgid "Ship Type"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:74 #: allianceauth/srp/templates/srp/data.html:72
msgid "Killboard Loss Amt" msgid "Killboard Loss Amt"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:76 #: allianceauth/srp/templates/srp/data.html:74
msgid "SRP ISK Cost" msgid "SRP ISK Cost"
msgstr "" 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" msgid "Click value to edit Enter to save & next ESC to cancel"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:80 #: allianceauth/srp/templates/srp/data.html:78
msgid "Post Time" msgid "Post Time"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:102 #: allianceauth/srp/templates/srp/data.html:100
#: allianceauth/srp/templates/srp/management.html:70 #: allianceauth/srp/templates/srp/management.html:68
msgid "Link" msgid "Link"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:163 #: allianceauth/srp/templates/srp/data.html:161
msgid "No SRP requests for this fleet." msgid "No SRP requests for this fleet."
msgstr "" msgstr ""
@@ -2431,39 +2449,39 @@ msgstr ""
msgid "View All" msgid "View All"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:27 #: allianceauth/srp/templates/srp/management.html:25
msgid "Add SRP Fleet" msgid "Add SRP Fleet"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:48 #: allianceauth/srp/templates/srp/management.html:46
msgid "Fleet AAR" msgid "Fleet AAR"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:49 #: allianceauth/srp/templates/srp/management.html:47
msgid "Fleet SRP Code" msgid "Fleet SRP Code"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:50 #: allianceauth/srp/templates/srp/management.html:48
msgid "Fleet ISK Cost" msgid "Fleet ISK Cost"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:51 #: allianceauth/srp/templates/srp/management.html:49
msgid "SRP Status" msgid "SRP Status"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:52 #: allianceauth/srp/templates/srp/management.html:50
msgid "Pending Requests" msgid "Pending Requests"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:91 #: allianceauth/srp/templates/srp/management.html:89
msgid "Completed" msgid "Completed"
msgstr "" 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?" msgid "Are you sure you want to delete this SRP code and its contents?"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:129 #: allianceauth/srp/templates/srp/management.html:127
msgid "No SRP fleets created." msgid "No SRP fleets created."
msgstr "" msgstr ""
@@ -2599,67 +2617,120 @@ msgstr ""
msgid "Your Server received an ESI error response code of " msgid "Your Server received an ESI error response code of "
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:8 #: allianceauth/templates/allianceauth/admin-status/overview.html:11
msgid "Alliance Auth Notifications" msgid "second"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:20 #: allianceauth/templates/allianceauth/admin-status/overview.html:12
msgid "No notifications at this time" msgid "seconds"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29 #: allianceauth/templates/allianceauth/admin-status/overview.html:13
msgid "Powered by GitLab" msgid "minute"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:35 #: allianceauth/templates/allianceauth/admin-status/overview.html:14
msgid "Support Discord" msgid "minutes"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:49 #: allianceauth/templates/allianceauth/admin-status/overview.html:15
#: allianceauth/templates/allianceauth/admin-status/overview.html:53 msgid "hour"
msgid "Software Version"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:56 #: allianceauth/templates/allianceauth/admin-status/overview.html:16
msgid "Current" msgid "hours"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:63 #: allianceauth/templates/allianceauth/admin-status/overview.html:17
msgid "Latest Stable" msgid "N/A"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:68 #: allianceauth/templates/allianceauth/admin-status/overview.html:18
msgid "Update available" msgid "ERROR"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:76 #: allianceauth/templates/allianceauth/admin-status/overview.html:19
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
msgid "running" msgid "running"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:113 #: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "queued" msgid "queued"
msgstr "" 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 #: allianceauth/templates/allianceauth/top-menu-admin.html:19
msgid "AA Documentation" msgid "AA Documentation"
msgstr "" msgstr ""
@@ -2883,7 +2954,7 @@ msgid "Theft"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7 #: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
#: allianceauth/timerboard/templates/timerboard/view.html:54 #: allianceauth/timerboard/templates/timerboard/view.html:52
msgid "Upcoming Timers" msgid "Upcoming Timers"
msgstr "" msgstr ""
@@ -2911,7 +2982,7 @@ msgid "Create Timer"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9 #: 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" msgid "Create Structure Timer"
msgstr "" msgstr ""
@@ -2929,11 +3000,11 @@ msgstr ""
msgid "Structure Timer Management" msgid "Structure Timer Management"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:41 #: allianceauth/timerboard/templates/timerboard/view.html:39
msgid "Corporation Timers" msgid "Corporation Timers"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:72 #: allianceauth/timerboard/templates/timerboard/view.html:70
msgid "Past Timers" msgid "Past Timers"
msgstr "" msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -57,7 +57,7 @@ msgid "You are not allowed to add or remove these restricted groups: %s"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:72 #: 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" msgid "English"
msgstr "" msgstr ""
@@ -66,57 +66,57 @@ msgid "Czech"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:74 #: 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" msgid "German"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:75 #: 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" msgid "Spanish"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:76 #: 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" msgid "Italian"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:77 #: 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" msgid "Japanese"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:78 #: 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" msgid "Korean"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:79 #: 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" msgid "French"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:80 #: allianceauth/authentication/models.py:80
#: allianceauth/project_template/project_name/settings/base.py:114 #: allianceauth/project_template/project_name/settings/base.py:115
msgid "Russian" msgid "Russian"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:81 #: 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" msgid "Dutch"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:82 #: 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" msgid "Polish"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:83 #: 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" msgid "Ukrainian"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:84 #: 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" msgid "Simplified Chinese"
msgstr "" msgstr ""
@@ -125,22 +125,30 @@ msgstr ""
msgid "Language" msgid "Language"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:105 #: allianceauth/authentication/models.py:106
#: allianceauth/templates/allianceauth/night-toggle.html:6 #: allianceauth/templates/allianceauth/night-toggle.html:6
msgid "Night Mode" msgid "Night Mode"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:110
#: allianceauth/theme/templates/theme/theme_select.html:4 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "" 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 #, python-format
msgid "State changed to: %s" msgid "State changed to: %s"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:127 #: allianceauth/authentication/models.py:134
#, python-format #, python-format
msgid "Your user's state is now: %(state)s" msgid "Your user's state is now: %(state)s"
msgstr "" msgstr ""
@@ -161,14 +169,12 @@ msgstr ""
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11 #: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12 #: 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:4
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
msgid "Add Character" msgid "Add Character"
msgstr "" msgstr ""
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14 #: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15 #: 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:8
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
msgid "Change Main" msgid "Change Main"
msgstr "" msgstr ""
@@ -202,8 +208,8 @@ msgstr ""
#: allianceauth/authentication/templates/authentication/tokens.html:7 #: allianceauth/authentication/templates/authentication/tokens.html:7
#: allianceauth/authentication/templates/authentication/tokens.html:11 #: allianceauth/authentication/templates/authentication/tokens.html:11
#: allianceauth/menu/templates/menu/menu-user.html:133 #: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/menu/templates/menu/menu-user.html:136 #: allianceauth/menu/templates/menu/menu-user.html:161
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62 #: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
msgid "Token Management" msgid "Token Management"
msgstr "" msgstr ""
@@ -225,8 +231,8 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:168 #: allianceauth/hrapplications/templates/hrapplications/management.html:168
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
#: allianceauth/hrapplications/templates/hrapplications/view.html:94 #: allianceauth/hrapplications/templates/hrapplications/view.html:94
#: allianceauth/srp/templates/srp/data.html:83 #: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/management.html:53 #: allianceauth/srp/templates/srp/management.html:51
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
@@ -239,8 +245,8 @@ msgstr ""
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:41 #: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:41
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:30 #: allianceauth/groupmanagement/templates/groupmanagement/audit.html:30
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:29 #: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:29
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:55 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:54
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:118 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:129
msgid "Character" msgid "Character"
msgstr "" msgstr ""
@@ -277,49 +283,49 @@ msgstr ""
msgid "Invalid or expired activation link." msgid "Invalid or expired activation link."
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:158 #: allianceauth/authentication/views.py:159
#, python-format #, python-format
msgid "" msgid ""
"Cannot change main character to %(char)s: character owned by a different " "Cannot change main character to %(char)s: character owned by a different "
"account." "account."
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:165 #: allianceauth/authentication/views.py:166
#, python-format #, python-format
msgid "Changed main character to %s" msgid "Changed main character to %s"
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:179 #: allianceauth/authentication/views.py:180
#, python-format #, python-format
msgid "Added %(name)s to your account." msgid "Added %(name)s to your account."
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:181 #: allianceauth/authentication/views.py:182
#, python-format #, python-format
msgid "Failed to add %(name)s to your account: they already have an account." msgid "Failed to add %(name)s to your account: they already have an account."
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:226 #: allianceauth/authentication/views.py:227
msgid "" msgid ""
"Unable to authenticate as the selected character. Please log in with the " "Unable to authenticate as the selected character. Please log in with the "
"main character associated with this account." "main character associated with this account."
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:293 #: allianceauth/authentication/views.py:294
msgid "Registration token has expired." msgid "Registration token has expired."
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:354 #: allianceauth/authentication/views.py:355
msgid "" msgid ""
"Sent confirmation email. Please follow the link to confirm your email " "Sent confirmation email. Please follow the link to confirm your email "
"address." "address."
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:360 #: allianceauth/authentication/views.py:361
msgid "Confirmed your email address. Please login to continue." msgid "Confirmed your email address. Please login to continue."
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:366 #: allianceauth/authentication/views.py:367
msgid "Registration of new accounts is not allowed at this time." msgid "Registration of new accounts is not allowed at this time."
msgstr "" msgstr ""
@@ -336,11 +342,11 @@ msgstr ""
msgid "Corporations" msgid "Corporations"
msgstr "" msgstr ""
#: allianceauth/corputils/templates/corputils/base.html:35 #: allianceauth/corputils/templates/corputils/base.html:31
msgid "Add corporation" msgid "Add corporation"
msgstr "" msgstr ""
#: allianceauth/corputils/templates/corputils/base.html:51 #: allianceauth/corputils/templates/corputils/base.html:47
msgid "Search all corporations..." msgid "Search all corporations..."
msgstr "" msgstr ""
@@ -377,6 +383,8 @@ msgstr ""
#: allianceauth/corputils/templates/corputils/corpstats.html:125 #: allianceauth/corputils/templates/corputils/corpstats.html:125
#: allianceauth/corputils/templates/corputils/search.html:18 #: allianceauth/corputils/templates/corputils/search.html:18
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:31 #: 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:35
#: allianceauth/hrapplications/templates/hrapplications/management.html:122 #: allianceauth/hrapplications/templates/hrapplications/management.html:122
#: allianceauth/hrapplications/templates/hrapplications/management.html:166 #: allianceauth/hrapplications/templates/hrapplications/management.html:166
@@ -488,7 +496,7 @@ msgid "Fleet Activity Tracking"
msgstr "" msgstr ""
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8 #: 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" msgid "Fleet Name"
msgstr "" msgstr ""
@@ -749,14 +757,18 @@ msgstr ""
#: allianceauth/fleetactivitytracking/views.py:323 #: allianceauth/fleetactivitytracking/views.py:323
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Cannot register the fleet participation for {character.character_name}. The " "Cannot register the fleet participation for {character_name}. The character "
"character needs to be online." "needs to be online."
msgstr "" msgstr ""
#: allianceauth/framework/apps.py:16 #: allianceauth/framework/apps.py:16
msgid "Framework" msgid "Framework"
msgstr "" msgstr ""
#: allianceauth/framework/templates/framework/datatables/process-indicator.html:8
msgid "Loading …"
msgstr ""
#: allianceauth/groupmanagement/apps.py:8 #: allianceauth/groupmanagement/apps.py:8
#: allianceauth/groupmanagement/auth_hooks.py:18 #: allianceauth/groupmanagement/auth_hooks.py:18
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:18 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:18
@@ -818,8 +830,9 @@ msgstr ""
#: allianceauth/groupmanagement/models.py:143 #: allianceauth/groupmanagement/models.py:143
msgid "" msgid ""
"Group leaders can process requests for this group. Use the <code>auth." "Group leaders can process requests for this group. Use the "
"group_management</code> permission to allow a user to manage all groups.<br>" "<code>auth.group_management</code> permission to allow a user to manage all "
"groups.<br>"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/models.py:153 #: allianceauth/groupmanagement/models.py:153
@@ -927,8 +940,8 @@ msgid "Group Members"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:30 #: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:30
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:56 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:55
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:119 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:130
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:33 #: allianceauth/permissions_tool/templates/permissions_tool/audit.html:33
msgid "Organization" msgid "Organization"
msgstr "" msgstr ""
@@ -940,7 +953,9 @@ msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:61 #: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:61
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:85 #: 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 #: allianceauth/permissions_tool/templates/permissions_tool/audit_row.html:18
msgid "(unknown)" msgid "(unknown)"
msgstr "" msgstr ""
@@ -973,7 +988,7 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:123 #: allianceauth/hrapplications/templates/hrapplications/management.html:123
#: allianceauth/hrapplications/templates/hrapplications/management.html:167 #: allianceauth/hrapplications/templates/hrapplications/management.html:167
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
#: allianceauth/srp/templates/srp/data.html:81 #: allianceauth/srp/templates/srp/data.html:79
msgid "Status" msgid "Status"
msgstr "" msgstr ""
@@ -986,7 +1001,7 @@ msgid "Hidden"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45 #: 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" msgid "Open"
msgstr "" msgstr ""
@@ -1020,8 +1035,8 @@ msgid "Leaders"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:37 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:37
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:57 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:56
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:120 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:131
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:30 #: allianceauth/permissions_tool/templates/permissions_tool/audit.html:30
#: allianceauth/services/modules/openfire/forms.py:6 #: allianceauth/services/modules/openfire/forms.py:6
msgid "Group" msgid "Group"
@@ -1031,17 +1046,9 @@ msgstr ""
msgid "Leave" msgid "Leave"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
#: allianceauth/hrapplications/templates/hrapplications/management.html:46 msgid "Request pending"
#: 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 "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
@@ -1052,7 +1059,11 @@ msgstr ""
msgid "Request" msgid "Request"
msgstr "" 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." msgid "No groups available."
msgstr "" msgstr ""
@@ -1074,22 +1085,22 @@ msgstr ""
msgid "Group Membership" msgid "Group Membership"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:93 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:96
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:156 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:171
msgid "Accept" msgid "Accept"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:96 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:99
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:160 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:174
#: allianceauth/hrapplications/templates/hrapplications/view.html:104 #: allianceauth/hrapplications/templates/hrapplications/view.html:104
msgid "Reject" msgid "Reject"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:106 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:117
msgid "No group add requests." msgid "No group add requests."
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:169 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:190
msgid "No group leave requests." msgid "No group leave requests."
msgstr "" msgstr ""
@@ -1181,6 +1192,19 @@ msgstr ""
msgid "Applied to leave group %(group)s." msgid "Applied to leave group %(group)s."
msgstr "" 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 #: allianceauth/hrapplications/apps.py:8
msgid "HR Applications" msgid "HR Applications"
msgstr "" msgstr ""
@@ -1251,12 +1275,23 @@ msgstr ""
msgid "Username" msgid "Username"
msgstr "" 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:48
#: allianceauth/hrapplications/templates/hrapplications/management.html:141 #: allianceauth/hrapplications/templates/hrapplications/management.html:141
#: allianceauth/hrapplications/templates/hrapplications/management.html:185 #: allianceauth/hrapplications/templates/hrapplications/management.html:185
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
#: allianceauth/hrapplications/templates/hrapplications/view.html:21 #: allianceauth/hrapplications/templates/hrapplications/view.html:21
#: allianceauth/srp/templates/srp/data.html:112 #: allianceauth/srp/templates/srp/data.html:110
msgid "Approved" msgid "Approved"
msgstr "" msgstr ""
@@ -1264,7 +1299,7 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:143 #: allianceauth/hrapplications/templates/hrapplications/management.html:143
#: allianceauth/hrapplications/templates/hrapplications/management.html:187 #: allianceauth/hrapplications/templates/hrapplications/management.html:187
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
#: allianceauth/srp/templates/srp/data.html:116 #: allianceauth/srp/templates/srp/data.html:114
msgid "Rejected" msgid "Rejected"
msgstr "" msgstr ""
@@ -1468,39 +1503,47 @@ msgid "Notifications"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:77 #: 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" msgid "Super User"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:83 #: allianceauth/menu/templates/menu/menu-user.html:108
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:111
msgid "Alliance Auth Documentation" msgid "Alliance Auth Documentation"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94 #: allianceauth/menu/templates/menu/menu-user.html:119
#: allianceauth/menu/templates/menu/menu-user.html:97 #: allianceauth/menu/templates/menu/menu-user.html:122
msgid "Alliance Auth Discord" msgid "Alliance Auth Discord"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105 #: allianceauth/menu/templates/menu/menu-user.html:130
#: allianceauth/menu/templates/menu/menu-user.html:108 #: allianceauth/menu/templates/menu/menu-user.html:133
msgid "Alliance Auth Git" msgid "Alliance Auth Git"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118 #: allianceauth/menu/templates/menu/menu-user.html:143
#: allianceauth/menu/templates/menu/menu-user.html:121 #: allianceauth/menu/templates/menu/menu-user.html:146
#: allianceauth/templates/allianceauth/top-menu-admin.html:9 #: allianceauth/templates/allianceauth/top-menu-admin.html:9
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:144 #: allianceauth/menu/templates/menu/menu-user.html:169
#: allianceauth/menu/templates/menu/menu-user.html:147 #: allianceauth/menu/templates/menu/menu-user.html:172
msgid "Sign Out" msgid "Sign Out"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:155 #: allianceauth/menu/templates/menu/menu-user.html:180
#: allianceauth/menu/templates/menu/menu-user.html:158 #: allianceauth/menu/templates/menu/menu-user.html:183
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
msgid "Sign In" msgid "Sign In"
msgstr "" msgstr ""
@@ -1528,11 +1571,11 @@ msgstr ""
msgid "Read" msgid "Read"
msgstr "" msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:32 #: allianceauth/notifications/templates/notifications/list.html:31
msgid "Mark all notifications as read" msgid "Mark all notifications as read"
msgstr "" msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:38 #: allianceauth/notifications/templates/notifications/list.html:35
msgid "Delete all read notifications" msgid "Delete all read notifications"
msgstr "" msgstr ""
@@ -1597,12 +1640,12 @@ msgid "Operation Type"
msgstr "" msgstr ""
#: allianceauth/optimer/form.py:17 #: allianceauth/optimer/form.py:17
#: allianceauth/srp/templates/srp/management.html:47 #: allianceauth/srp/templates/srp/management.html:45
msgid "Fleet Commander" msgid "Fleet Commander"
msgstr "" msgstr ""
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14 #: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
#: allianceauth/srp/templates/srp/data.html:72 #: allianceauth/srp/templates/srp/data.html:70
msgid "Additional Info" msgid "Additional Info"
msgstr "" msgstr ""
@@ -1611,7 +1654,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/add.html:8 #: allianceauth/optimer/templates/optimer/add.html:8
#: allianceauth/optimer/templates/optimer/management.html:18 #: allianceauth/optimer/templates/optimer/management.html:16
msgid "Create Operation" msgid "Create Operation"
msgstr "" msgstr ""
@@ -1660,26 +1703,26 @@ msgstr ""
msgid "Fleet Operation Management" msgid "Fleet Operation Management"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:28 #: allianceauth/optimer/templates/optimer/management.html:26
#: allianceauth/timerboard/templates/timerboard/view.html:32 #: allianceauth/timerboard/templates/timerboard/view.html:30
msgid "Current EVE time:" msgid "Current EVE time:"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:36 #: allianceauth/optimer/templates/optimer/management.html:34
msgid "Next Fleet Operations" msgid "Next Fleet Operations"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:44 #: allianceauth/optimer/templates/optimer/management.html:42
#: allianceauth/timerboard/templates/timerboard/view.html:63 #: allianceauth/timerboard/templates/timerboard/view.html:61
msgid "No upcoming timers." msgid "No upcoming timers."
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:52 #: allianceauth/optimer/templates/optimer/management.html:50
msgid "Past Fleet Operations" msgid "Past Fleet Operations"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:60 #: allianceauth/optimer/templates/optimer/management.html:58
#: allianceauth/timerboard/templates/timerboard/view.html:81 #: allianceauth/timerboard/templates/timerboard/view.html:79
msgid "No past timers." msgid "No past timers."
msgstr "" msgstr ""
@@ -1759,9 +1802,9 @@ msgstr ""
msgid "That service account already exists" msgid "That service account already exists"
msgstr "" msgstr ""
#: allianceauth/services/abstract.py:103 #: allianceauth/services/abstract.py:105
#, python-brace-format #, python-brace-format
msgid "Successfully set your {self.service_name} password" msgid "Successfully set your {service_name} password"
msgstr "" msgstr ""
#: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12 #: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12
@@ -2246,7 +2289,7 @@ msgid "Enabled"
msgstr "" msgstr ""
#: allianceauth/services/templates/services/service_status.html:7 #: allianceauth/services/templates/services/service_status.html:7
#: allianceauth/srp/templates/srp/management.html:78 #: allianceauth/srp/templates/srp/management.html:76
msgid "Disabled" msgid "Disabled"
msgstr "" msgstr ""
@@ -2283,12 +2326,12 @@ msgstr ""
msgid "Ship Replacement" msgid "Ship Replacement"
msgstr "" 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" msgid "Fleet Time"
msgstr "" msgstr ""
#: allianceauth/srp/form.py:10 #: allianceauth/srp/form.py:10
#: allianceauth/srp/templates/srp/management.html:46 #: allianceauth/srp/templates/srp/management.html:44
msgid "Fleet Doctrine" msgid "Fleet Doctrine"
msgstr "" msgstr ""
@@ -2300,11 +2343,11 @@ msgstr ""
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org" msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
msgstr "" msgstr ""
#: allianceauth/srp/form.py:46 #: allianceauth/srp/form.py:49
msgid "Invalid Link. Please post a direct link to a killmail." msgid "Invalid Link. Please post a direct link to a killmail."
msgstr "" msgstr ""
#: allianceauth/srp/form.py:53 #: allianceauth/srp/form.py:56
msgid "After Action Report Link" msgid "After Action Report Link"
msgstr "" msgstr ""
@@ -2337,7 +2380,7 @@ msgid "Give this link to the line members."
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:8 #: 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" msgid "SRP Fleet Data"
msgstr "" msgstr ""
@@ -2345,64 +2388,64 @@ msgstr ""
msgid "View Fleets" msgid "View Fleets"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:26 #: allianceauth/srp/templates/srp/data.html:24
msgid "Mark Incomplete" msgid "Mark Incomplete"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:30 #: allianceauth/srp/templates/srp/data.html:28
msgid "Mark Completed" msgid "Mark Completed"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:48 #: allianceauth/srp/templates/srp/data.html:46
#: allianceauth/srp/templates/srp/data.html:142 #: allianceauth/srp/templates/srp/data.html:140
msgid "Total Losses:" msgid "Total Losses:"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:49 #: allianceauth/srp/templates/srp/data.html:47
#: allianceauth/srp/templates/srp/data.html:143 #: allianceauth/srp/templates/srp/data.html:141
#: allianceauth/srp/templates/srp/management.html:36 #: allianceauth/srp/templates/srp/management.html:34
msgid "Total ISK Cost:" msgid "Total ISK Cost:"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:60 #: allianceauth/srp/templates/srp/data.html:58
#: allianceauth/srp/templates/srp/data.html:154 #: allianceauth/srp/templates/srp/data.html:152
msgid "Are you sure you want to delete SRP requests?" msgid "Are you sure you want to delete SRP requests?"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:70 #: allianceauth/srp/templates/srp/data.html:68
msgid "Pilot Name" msgid "Pilot Name"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:71 #: allianceauth/srp/templates/srp/data.html:69
msgid "Killboard Link" msgid "Killboard Link"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:73 #: allianceauth/srp/templates/srp/data.html:71
msgid "Ship Type" msgid "Ship Type"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:74 #: allianceauth/srp/templates/srp/data.html:72
msgid "Killboard Loss Amt" msgid "Killboard Loss Amt"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:76 #: allianceauth/srp/templates/srp/data.html:74
msgid "SRP ISK Cost" msgid "SRP ISK Cost"
msgstr "" 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" msgid "Click value to edit Enter to save & next ESC to cancel"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:80 #: allianceauth/srp/templates/srp/data.html:78
msgid "Post Time" msgid "Post Time"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:102 #: allianceauth/srp/templates/srp/data.html:100
#: allianceauth/srp/templates/srp/management.html:70 #: allianceauth/srp/templates/srp/management.html:68
msgid "Link" msgid "Link"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:163 #: allianceauth/srp/templates/srp/data.html:161
msgid "No SRP requests for this fleet." msgid "No SRP requests for this fleet."
msgstr "" msgstr ""
@@ -2414,39 +2457,39 @@ msgstr ""
msgid "View All" msgid "View All"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:27 #: allianceauth/srp/templates/srp/management.html:25
msgid "Add SRP Fleet" msgid "Add SRP Fleet"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:48 #: allianceauth/srp/templates/srp/management.html:46
msgid "Fleet AAR" msgid "Fleet AAR"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:49 #: allianceauth/srp/templates/srp/management.html:47
msgid "Fleet SRP Code" msgid "Fleet SRP Code"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:50 #: allianceauth/srp/templates/srp/management.html:48
msgid "Fleet ISK Cost" msgid "Fleet ISK Cost"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:51 #: allianceauth/srp/templates/srp/management.html:49
msgid "SRP Status" msgid "SRP Status"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:52 #: allianceauth/srp/templates/srp/management.html:50
msgid "Pending Requests" msgid "Pending Requests"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:91 #: allianceauth/srp/templates/srp/management.html:89
msgid "Completed" msgid "Completed"
msgstr "" 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?" msgid "Are you sure you want to delete this SRP code and its contents?"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:129 #: allianceauth/srp/templates/srp/management.html:127
msgid "No SRP fleets created." msgid "No SRP fleets created."
msgstr "" msgstr ""
@@ -2578,72 +2621,125 @@ msgstr ""
msgid "Saved changes to SRP fleet %(fleetname)s" msgid "Saved changes to SRP fleet %(fleetname)s"
msgstr "" 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 " msgid "Your Server received an ESI error response code of "
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:8 #: allianceauth/templates/allianceauth/admin-status/overview.html:11
msgid "Alliance Auth Notifications" msgid "second"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:20 #: allianceauth/templates/allianceauth/admin-status/overview.html:12
msgid "No notifications at this time" msgid "seconds"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29 #: allianceauth/templates/allianceauth/admin-status/overview.html:13
msgid "Powered by GitLab" msgid "minute"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:35 #: allianceauth/templates/allianceauth/admin-status/overview.html:14
msgid "Support Discord" msgid "minutes"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:49 #: allianceauth/templates/allianceauth/admin-status/overview.html:15
#: allianceauth/templates/allianceauth/admin-status/overview.html:53 msgid "hour"
msgid "Software Version"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:56 #: allianceauth/templates/allianceauth/admin-status/overview.html:16
msgid "Current" msgid "hours"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:63 #: allianceauth/templates/allianceauth/admin-status/overview.html:17
msgid "Latest Stable" msgid "N/A"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:68 #: allianceauth/templates/allianceauth/admin-status/overview.html:18
msgid "Update available" msgid "ERROR"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:76 #: allianceauth/templates/allianceauth/admin-status/overview.html:19
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
msgid "running" msgid "running"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:113 #: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "queued" msgid "queued"
msgstr "" 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 #: allianceauth/templates/allianceauth/top-menu-admin.html:19
msgid "AA Documentation" msgid "AA Documentation"
msgstr "" msgstr ""
@@ -2867,7 +2963,7 @@ msgid "Theft"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7 #: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
#: allianceauth/timerboard/templates/timerboard/view.html:54 #: allianceauth/timerboard/templates/timerboard/view.html:52
msgid "Upcoming Timers" msgid "Upcoming Timers"
msgstr "" msgstr ""
@@ -2895,7 +2991,7 @@ msgid "Create Timer"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9 #: 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" msgid "Create Structure Timer"
msgstr "" msgstr ""
@@ -2913,11 +3009,11 @@ msgstr ""
msgid "Structure Timer Management" msgid "Structure Timer Management"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:41 #: allianceauth/timerboard/templates/timerboard/view.html:39
msgid "Corporation Timers" msgid "Corporation Timers"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:72 #: allianceauth/timerboard/templates/timerboard/view.html:70
msgid "Past Timers" msgid "Past Timers"
msgstr "" msgstr ""
@@ -2930,36 +3026,36 @@ msgstr ""
msgid "Saved changes to the timer." msgid "Saved changes to the timer."
msgstr "" msgstr ""
#: allianceauth/views.py:55 #: allianceauth/views.py:78
msgid "Bad Request" msgid "Bad Request"
msgstr "" msgstr ""
#: allianceauth/views.py:57 allianceauth/views.py:87 #: allianceauth/views.py:80 allianceauth/views.py:110
msgid "" msgid ""
"Auth encountered an error processing your request, please try again. If the " "Auth encountered an error processing your request, please try again. If the "
"error persists, please contact the administrators." "error persists, please contact the administrators."
msgstr "" msgstr ""
#: allianceauth/views.py:65 #: allianceauth/views.py:88
msgid "Permission Denied" msgid "Permission Denied"
msgstr "" msgstr ""
#: allianceauth/views.py:67 #: allianceauth/views.py:90
msgid "" msgid ""
"You do not have permission to access the requested page. If you believe this " "You do not have permission to access the requested page. If you believe this "
"is in error please contact the administrators." "is in error please contact the administrators."
msgstr "" msgstr ""
#: allianceauth/views.py:75 #: allianceauth/views.py:98
msgid "Page Not Found" msgid "Page Not Found"
msgstr "" msgstr ""
#: allianceauth/views.py:77 #: allianceauth/views.py:100
msgid "" msgid ""
"Page does not exist. If you believe this is in error please contact the " "Page does not exist. If you believe this is in error please contact the "
"administrators. " "administrators. "
msgstr "" msgstr ""
#: allianceauth/views.py:85 #: allianceauth/views.py:108
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "" 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 "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Machiel Broekman, 2025\n" "Last-Translator: Machiel Broekman, 2025\n"
"Language-Team: Dutch (Netherlands) (https://app.transifex.com/alliance-auth/teams/107430/nl_NL/)\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" "Je bent niet gemachtigd om de volgende beperkte groepen te verwijderen: %s"
#: allianceauth/authentication/models.py:72 #: 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" msgid "English"
msgstr "Engels" msgstr "Engels"
@@ -80,57 +80,57 @@ msgid "Czech"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:74 #: 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" msgid "German"
msgstr "Duits" msgstr "Duits"
#: allianceauth/authentication/models.py:75 #: 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" msgid "Spanish"
msgstr "Spaans" msgstr "Spaans"
#: allianceauth/authentication/models.py:76 #: 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" msgid "Italian"
msgstr "Italiaans" msgstr "Italiaans"
#: allianceauth/authentication/models.py:77 #: 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" msgid "Japanese"
msgstr "Japans" msgstr "Japans"
#: allianceauth/authentication/models.py:78 #: 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" msgid "Korean"
msgstr "Koreaans" msgstr "Koreaans"
#: allianceauth/authentication/models.py:79 #: allianceauth/authentication/models.py:79
#: allianceauth/project_template/project_name/settings/base.py:113 #: allianceauth/project_template/project_name/settings/base.py:111
msgid "French" msgid "French"
msgstr "Frans" msgstr "Frans"
#: allianceauth/authentication/models.py:80 #: 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" msgid "Russian"
msgstr "Russisch" msgstr "Russisch"
#: allianceauth/authentication/models.py:81 #: 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" msgid "Dutch"
msgstr "Nederlands" msgstr "Nederlands"
#: allianceauth/authentication/models.py:82 #: 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" msgid "Polish"
msgstr "Pools" msgstr "Pools"
#: allianceauth/authentication/models.py:83 #: 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" msgid "Ukrainian"
msgstr "Oekraïens" msgstr "Oekraïens"
#: allianceauth/authentication/models.py:84 #: 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" msgid "Simplified Chinese"
msgstr "Eenvoudig Chinees" msgstr "Eenvoudig Chinees"
@@ -175,14 +175,12 @@ msgstr "Karakter"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11 #: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12 #: 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:4
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
msgid "Add Character" msgid "Add Character"
msgstr "Personages toevoegen" msgstr "Personages toevoegen"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14 #: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15 #: 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:8
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
msgid "Change Main" msgid "Change Main"
msgstr "Verander Main" msgstr "Verander Main"
@@ -242,8 +240,8 @@ msgstr "Scopes"
#: allianceauth/hrapplications/templates/hrapplications/management.html:168 #: allianceauth/hrapplications/templates/hrapplications/management.html:168
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
#: allianceauth/hrapplications/templates/hrapplications/view.html:94 #: allianceauth/hrapplications/templates/hrapplications/view.html:94
#: allianceauth/srp/templates/srp/data.html:83 #: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/management.html:53 #: allianceauth/srp/templates/srp/management.html:51
msgid "Actions" msgid "Actions"
msgstr "Acties" msgstr "Acties"
@@ -294,7 +292,7 @@ msgstr "Registreer"
msgid "Invalid or expired activation link." msgid "Invalid or expired activation link."
msgstr "Ongeldige of verlopen activeringslink." msgstr "Ongeldige of verlopen activeringslink."
#: allianceauth/authentication/views.py:158 #: allianceauth/authentication/views.py:159
#, python-format #, python-format
msgid "" msgid ""
"Cannot change main character to %(char)s: character owned by a different " "Cannot change main character to %(char)s: character owned by a different "
@@ -303,23 +301,23 @@ msgstr ""
"Het hoofdkarakter kan niet worden gewijzigd naar %(char)s: Karakter is " "Het hoofdkarakter kan niet worden gewijzigd naar %(char)s: Karakter is "
"eigendom van een ander account." "eigendom van een ander account."
#: allianceauth/authentication/views.py:165 #: allianceauth/authentication/views.py:166
#, python-format #, python-format
msgid "Changed main character to %s" msgid "Changed main character to %s"
msgstr "Hoofdkarakter veranderd naar %s" msgstr "Hoofdkarakter veranderd naar %s"
#: allianceauth/authentication/views.py:179 #: allianceauth/authentication/views.py:180
#, python-format #, python-format
msgid "Added %(name)s to your account." msgid "Added %(name)s to your account."
msgstr "%(name)s aan uw account toegevoegd." msgstr "%(name)s aan uw account toegevoegd."
#: allianceauth/authentication/views.py:181 #: allianceauth/authentication/views.py:182
#, python-format #, python-format
msgid "Failed to add %(name)s to your account: they already have an account." msgid "Failed to add %(name)s to your account: they already have an account."
msgstr "" msgstr ""
"Toevoegen van %(name)s aan uw account is mislukt: ze hebben al een account." "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 "" msgid ""
"Unable to authenticate as the selected character. Please log in with the " "Unable to authenticate as the selected character. Please log in with the "
"main character associated with this account." "main character associated with this account."
@@ -327,11 +325,11 @@ msgstr ""
"Niet mogelijk om te authenticeren als de geselecteerde karakter. Log " "Niet mogelijk om te authenticeren als de geselecteerde karakter. Log "
"alstublieft in met het hoofdkarakter dat aan dit account is gekoppeld." "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." msgid "Registration token has expired."
msgstr "Registratietoken is verlopen." msgstr "Registratietoken is verlopen."
#: allianceauth/authentication/views.py:354 #: allianceauth/authentication/views.py:355
msgid "" msgid ""
"Sent confirmation email. Please follow the link to confirm your email " "Sent confirmation email. Please follow the link to confirm your email "
"address." "address."
@@ -339,11 +337,11 @@ msgstr ""
"E-mail met bevestiging verzonden. Volg de link om uw e-mailadres te " "E-mail met bevestiging verzonden. Volg de link om uw e-mailadres te "
"bevestigen." "bevestigen."
#: allianceauth/authentication/views.py:360 #: allianceauth/authentication/views.py:361
msgid "Confirmed your email address. Please login to continue." msgid "Confirmed your email address. Please login to continue."
msgstr "Uw e-mailadres is bevestigd. Gelieve in te loggen om verder te gaan." 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." msgid "Registration of new accounts is not allowed at this time."
msgstr "Registratie van nieuwe accounts in momenteel niet toegestaan." msgstr "Registratie van nieuwe accounts in momenteel niet toegestaan."
@@ -360,11 +358,11 @@ msgstr "Gegevens van bedrijfsleden"
msgid "Corporations" msgid "Corporations"
msgstr "Bedrijven" msgstr "Bedrijven"
#: allianceauth/corputils/templates/corputils/base.html:35 #: allianceauth/corputils/templates/corputils/base.html:31
msgid "Add corporation" msgid "Add corporation"
msgstr "Voeg bedrijf toe" msgstr "Voeg bedrijf toe"
#: allianceauth/corputils/templates/corputils/base.html:51 #: allianceauth/corputils/templates/corputils/base.html:47
msgid "Search all corporations..." msgid "Search all corporations..."
msgstr "Zoek in alle bedrijven..." msgstr "Zoek in alle bedrijven..."
@@ -514,7 +512,7 @@ msgid "Fleet Activity Tracking"
msgstr "Fleetactiviteit Tracking" msgstr "Fleetactiviteit Tracking"
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8 #: 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" msgid "Fleet Name"
msgstr "Fleet naam" msgstr "Fleet naam"
@@ -1002,7 +1000,7 @@ msgstr "Beschrijving"
#: allianceauth/hrapplications/templates/hrapplications/management.html:123 #: allianceauth/hrapplications/templates/hrapplications/management.html:123
#: allianceauth/hrapplications/templates/hrapplications/management.html:167 #: allianceauth/hrapplications/templates/hrapplications/management.html:167
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
#: allianceauth/srp/templates/srp/data.html:81 #: allianceauth/srp/templates/srp/data.html:79
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
@@ -1015,7 +1013,7 @@ msgid "Hidden"
msgstr "verborgen" msgstr "verborgen"
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45 #: 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" msgid "Open"
msgstr "Open" msgstr "Open"
@@ -1060,18 +1058,10 @@ msgstr "Groep"
msgid "Leave" msgid "Leave"
msgstr "Verlaat" msgstr "Verlaat"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
#: allianceauth/hrapplications/templates/hrapplications/management.html:46 msgid "Request pending"
#: allianceauth/hrapplications/templates/hrapplications/management.html:95 msgstr ""
#: 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:80 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
msgid "Join" msgid "Join"
@@ -1081,7 +1071,11 @@ msgstr "Toetreden"
msgid "Request" msgid "Request"
msgstr "Aanvraag" 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." msgid "No groups available."
msgstr "" msgstr ""
@@ -1210,6 +1204,19 @@ msgstr ""
msgid "Applied to leave group %(group)s." msgid "Applied to leave group %(group)s."
msgstr "" 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 #: allianceauth/hrapplications/apps.py:8
msgid "HR Applications" msgid "HR Applications"
msgstr "" msgstr ""
@@ -1280,12 +1287,23 @@ msgstr ""
msgid "Username" msgid "Username"
msgstr "Gebruikersnaam" 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:48
#: allianceauth/hrapplications/templates/hrapplications/management.html:141 #: allianceauth/hrapplications/templates/hrapplications/management.html:141
#: allianceauth/hrapplications/templates/hrapplications/management.html:185 #: allianceauth/hrapplications/templates/hrapplications/management.html:185
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
#: allianceauth/hrapplications/templates/hrapplications/view.html:21 #: allianceauth/hrapplications/templates/hrapplications/view.html:21
#: allianceauth/srp/templates/srp/data.html:112 #: allianceauth/srp/templates/srp/data.html:110
msgid "Approved" msgid "Approved"
msgstr "Aanvaard" msgstr "Aanvaard"
@@ -1293,7 +1311,7 @@ msgstr "Aanvaard"
#: allianceauth/hrapplications/templates/hrapplications/management.html:143 #: allianceauth/hrapplications/templates/hrapplications/management.html:143
#: allianceauth/hrapplications/templates/hrapplications/management.html:187 #: allianceauth/hrapplications/templates/hrapplications/management.html:187
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
#: allianceauth/srp/templates/srp/data.html:116 #: allianceauth/srp/templates/srp/data.html:114
msgid "Rejected" msgid "Rejected"
msgstr "Afgewezen" msgstr "Afgewezen"
@@ -1528,8 +1546,8 @@ msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:155 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158 #: 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:13
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
msgid "Sign In" msgid "Sign In"
msgstr "" msgstr ""
@@ -1557,11 +1575,11 @@ msgstr "Ongelezen"
msgid "Read" msgid "Read"
msgstr "Gelezen" msgstr "Gelezen"
#: allianceauth/notifications/templates/notifications/list.html:32 #: allianceauth/notifications/templates/notifications/list.html:31
msgid "Mark all notifications as read" msgid "Mark all notifications as read"
msgstr "" msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:38 #: allianceauth/notifications/templates/notifications/list.html:35
msgid "Delete all read notifications" msgid "Delete all read notifications"
msgstr "" msgstr ""
@@ -1626,12 +1644,12 @@ msgid "Operation Type"
msgstr "" msgstr ""
#: allianceauth/optimer/form.py:17 #: allianceauth/optimer/form.py:17
#: allianceauth/srp/templates/srp/management.html:47 #: allianceauth/srp/templates/srp/management.html:45
msgid "Fleet Commander" msgid "Fleet Commander"
msgstr "" msgstr ""
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14 #: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
#: allianceauth/srp/templates/srp/data.html:72 #: allianceauth/srp/templates/srp/data.html:70
msgid "Additional Info" msgid "Additional Info"
msgstr "" msgstr ""
@@ -1640,7 +1658,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/add.html:8 #: allianceauth/optimer/templates/optimer/add.html:8
#: allianceauth/optimer/templates/optimer/management.html:18 #: allianceauth/optimer/templates/optimer/management.html:16
msgid "Create Operation" msgid "Create Operation"
msgstr "" msgstr ""
@@ -1689,26 +1707,26 @@ msgstr "Vloot Commandant"
msgid "Fleet Operation Management" msgid "Fleet Operation Management"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:28 #: allianceauth/optimer/templates/optimer/management.html:26
#: allianceauth/timerboard/templates/timerboard/view.html:32 #: allianceauth/timerboard/templates/timerboard/view.html:30
msgid "Current EVE time:" msgid "Current EVE time:"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:36 #: allianceauth/optimer/templates/optimer/management.html:34
msgid "Next Fleet Operations" msgid "Next Fleet Operations"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:44 #: allianceauth/optimer/templates/optimer/management.html:42
#: allianceauth/timerboard/templates/timerboard/view.html:63 #: allianceauth/timerboard/templates/timerboard/view.html:61
msgid "No upcoming timers." msgid "No upcoming timers."
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:52 #: allianceauth/optimer/templates/optimer/management.html:50
msgid "Past Fleet Operations" msgid "Past Fleet Operations"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:60 #: allianceauth/optimer/templates/optimer/management.html:58
#: allianceauth/timerboard/templates/timerboard/view.html:81 #: allianceauth/timerboard/templates/timerboard/view.html:79
msgid "No past timers." msgid "No past timers."
msgstr "" msgstr ""
@@ -2276,7 +2294,7 @@ msgid "Enabled"
msgstr "" msgstr ""
#: allianceauth/services/templates/services/service_status.html:7 #: allianceauth/services/templates/services/service_status.html:7
#: allianceauth/srp/templates/srp/management.html:78 #: allianceauth/srp/templates/srp/management.html:76
msgid "Disabled" msgid "Disabled"
msgstr "Uitgeschakeld" msgstr "Uitgeschakeld"
@@ -2314,12 +2332,12 @@ msgid "Ship Replacement"
msgstr "" msgstr ""
#: allianceauth/srp/form.py:9 #: allianceauth/srp/form.py:9
#: allianceauth/srp/templates/srp/management.html:45 #: allianceauth/srp/templates/srp/management.html:43
msgid "Fleet Time" msgid "Fleet Time"
msgstr "" msgstr ""
#: allianceauth/srp/form.py:10 #: allianceauth/srp/form.py:10
#: allianceauth/srp/templates/srp/management.html:46 #: allianceauth/srp/templates/srp/management.html:44
msgid "Fleet Doctrine" msgid "Fleet Doctrine"
msgstr "" msgstr ""
@@ -2368,7 +2386,7 @@ msgid "Give this link to the line members."
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:8 #: 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" msgid "SRP Fleet Data"
msgstr "" msgstr ""
@@ -2376,64 +2394,64 @@ msgstr ""
msgid "View Fleets" msgid "View Fleets"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:26 #: allianceauth/srp/templates/srp/data.html:24
msgid "Mark Incomplete" msgid "Mark Incomplete"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:30 #: allianceauth/srp/templates/srp/data.html:28
msgid "Mark Completed" msgid "Mark Completed"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:48 #: allianceauth/srp/templates/srp/data.html:46
#: allianceauth/srp/templates/srp/data.html:142 #: allianceauth/srp/templates/srp/data.html:140
msgid "Total Losses:" msgid "Total Losses:"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:49 #: allianceauth/srp/templates/srp/data.html:47
#: allianceauth/srp/templates/srp/data.html:143 #: allianceauth/srp/templates/srp/data.html:141
#: allianceauth/srp/templates/srp/management.html:36 #: allianceauth/srp/templates/srp/management.html:34
msgid "Total ISK Cost:" msgid "Total ISK Cost:"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:60 #: allianceauth/srp/templates/srp/data.html:58
#: allianceauth/srp/templates/srp/data.html:154 #: allianceauth/srp/templates/srp/data.html:152
msgid "Are you sure you want to delete SRP requests?" msgid "Are you sure you want to delete SRP requests?"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:70 #: allianceauth/srp/templates/srp/data.html:68
msgid "Pilot Name" msgid "Pilot Name"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:71 #: allianceauth/srp/templates/srp/data.html:69
msgid "Killboard Link" msgid "Killboard Link"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:73 #: allianceauth/srp/templates/srp/data.html:71
msgid "Ship Type" msgid "Ship Type"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:74 #: allianceauth/srp/templates/srp/data.html:72
msgid "Killboard Loss Amt" msgid "Killboard Loss Amt"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:76 #: allianceauth/srp/templates/srp/data.html:74
msgid "SRP ISK Cost" msgid "SRP ISK Cost"
msgstr "" 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" msgid "Click value to edit Enter to save & next ESC to cancel"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:80 #: allianceauth/srp/templates/srp/data.html:78
msgid "Post Time" msgid "Post Time"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:102 #: allianceauth/srp/templates/srp/data.html:100
#: allianceauth/srp/templates/srp/management.html:70 #: allianceauth/srp/templates/srp/management.html:68
msgid "Link" msgid "Link"
msgstr "Link" msgstr "Link"
#: allianceauth/srp/templates/srp/data.html:163 #: allianceauth/srp/templates/srp/data.html:161
msgid "No SRP requests for this fleet." msgid "No SRP requests for this fleet."
msgstr "" msgstr ""
@@ -2445,39 +2463,39 @@ msgstr ""
msgid "View All" msgid "View All"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:27 #: allianceauth/srp/templates/srp/management.html:25
msgid "Add SRP Fleet" msgid "Add SRP Fleet"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:48 #: allianceauth/srp/templates/srp/management.html:46
msgid "Fleet AAR" msgid "Fleet AAR"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:49 #: allianceauth/srp/templates/srp/management.html:47
msgid "Fleet SRP Code" msgid "Fleet SRP Code"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:50 #: allianceauth/srp/templates/srp/management.html:48
msgid "Fleet ISK Cost" msgid "Fleet ISK Cost"
msgstr "Vloot ISK Kost" msgstr "Vloot ISK Kost"
#: allianceauth/srp/templates/srp/management.html:51 #: allianceauth/srp/templates/srp/management.html:49
msgid "SRP Status" msgid "SRP Status"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:52 #: allianceauth/srp/templates/srp/management.html:50
msgid "Pending Requests" msgid "Pending Requests"
msgstr "Lopende Aanvragen" msgstr "Lopende Aanvragen"
#: allianceauth/srp/templates/srp/management.html:91 #: allianceauth/srp/templates/srp/management.html:89
msgid "Completed" msgid "Completed"
msgstr "Voltooid" 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?" msgid "Are you sure you want to delete this SRP code and its contents?"
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/management.html:129 #: allianceauth/srp/templates/srp/management.html:127
msgid "No SRP fleets created." msgid "No SRP fleets created."
msgstr "" msgstr ""
@@ -2613,67 +2631,120 @@ msgstr ""
msgid "Your Server received an ESI error response code of " msgid "Your Server received an ESI error response code of "
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:8 #: allianceauth/templates/allianceauth/admin-status/overview.html:11
msgid "Alliance Auth Notifications" msgid "second"
msgstr "Alliantie Authenticatie Notificaties"
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "No notifications at this time"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29 #: allianceauth/templates/allianceauth/admin-status/overview.html:12
msgid "Powered by GitLab" msgid "seconds"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:35 #: allianceauth/templates/allianceauth/admin-status/overview.html:13
msgid "Support Discord" msgid "minute"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:49 #: allianceauth/templates/allianceauth/admin-status/overview.html:14
#: allianceauth/templates/allianceauth/admin-status/overview.html:53 msgid "minutes"
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"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:68 #: allianceauth/templates/allianceauth/admin-status/overview.html:15
msgid "Update available" msgid "hour"
msgstr "Update Beschikbaar"
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
msgid "Latest Pre-Release"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:81 #: allianceauth/templates/allianceauth/admin-status/overview.html:16
msgid "Pre-Release available" msgid "hours"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:91 #: allianceauth/templates/allianceauth/admin-status/overview.html:17
msgid "Task Queue" msgid "N/A"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:96 #: allianceauth/templates/allianceauth/admin-status/overview.html:18
#, python-format msgid "ERROR"
msgid ""
"\n"
" Status of %(total)s processed tasks • last %(latest)s\n"
" "
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:112 #: allianceauth/templates/allianceauth/admin-status/overview.html:19
msgid "running" msgid "running"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:113 #: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "queued" msgid "queued"
msgstr "" 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 #: allianceauth/templates/allianceauth/top-menu-admin.html:19
msgid "AA Documentation" msgid "AA Documentation"
msgstr "AA Documentatie" msgstr "AA Documentatie"
@@ -2897,7 +2968,7 @@ msgid "Theft"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7 #: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
#: allianceauth/timerboard/templates/timerboard/view.html:54 #: allianceauth/timerboard/templates/timerboard/view.html:52
msgid "Upcoming Timers" msgid "Upcoming Timers"
msgstr "" msgstr ""
@@ -2925,7 +2996,7 @@ msgid "Create Timer"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9 #: 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" msgid "Create Structure Timer"
msgstr "" msgstr ""
@@ -2943,11 +3014,11 @@ msgstr "Constructie"
msgid "Structure Timer Management" msgid "Structure Timer Management"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:41 #: allianceauth/timerboard/templates/timerboard/view.html:39
msgid "Corporation Timers" msgid "Corporation Timers"
msgstr "Corporatie Timers" msgstr "Corporatie Timers"
#: allianceauth/timerboard/templates/timerboard/view.html:72 #: allianceauth/timerboard/templates/timerboard/view.html:70
msgid "Past Timers" msgid "Past Timers"
msgstr "Verlopen 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 # Shen Yang, 2023
# 85b931f94c2441449e78b527e0a313ae_baf2e99 <639a60f913241ffb1c9bd90bc93a541f_869335>, 2023 # 85b931f94c2441449e78b527e0a313ae_baf2e99 <639a60f913241ffb1c9bd90bc93a541f_869335>, 2023
# Aaron BuBu <351793078@qq.com>, 2023 # Aaron BuBu <351793078@qq.com>, 2023
# Joel Falknau <ozirascal@gmail.com>, 2023
# Aika Yu, 2025 # Aika Yu, 2025
# Joel Falknau <ozirascal@gmail.com>, 2025
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 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" "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" "Language-Team: Chinese Simplified (https://app.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -64,7 +64,7 @@ msgid "You are not allowed to add or remove these restricted groups: %s"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:72 #: 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" msgid "English"
msgstr "英语" msgstr "英语"
@@ -73,57 +73,57 @@ msgid "Czech"
msgstr "捷克语" msgstr "捷克语"
#: allianceauth/authentication/models.py:74 #: 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" msgid "German"
msgstr "德语" msgstr "德语"
#: allianceauth/authentication/models.py:75 #: 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" msgid "Spanish"
msgstr "西班牙语" msgstr "西班牙语"
#: allianceauth/authentication/models.py:76 #: 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" msgid "Italian"
msgstr "意大利语" msgstr "意大利语"
#: allianceauth/authentication/models.py:77 #: 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" msgid "Japanese"
msgstr "日语" msgstr "日语"
#: allianceauth/authentication/models.py:78 #: 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" msgid "Korean"
msgstr "韩语" msgstr "韩语"
#: allianceauth/authentication/models.py:79 #: allianceauth/authentication/models.py:79
#: allianceauth/project_template/project_name/settings/base.py:113 #: allianceauth/project_template/project_name/settings/base.py:112
msgid "French" msgid "French"
msgstr "法语" msgstr "法语"
#: allianceauth/authentication/models.py:80 #: 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" msgid "Russian"
msgstr "俄语" msgstr "俄语"
#: allianceauth/authentication/models.py:81 #: 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" msgid "Dutch"
msgstr "荷兰语" msgstr "荷兰语"
#: allianceauth/authentication/models.py:82 #: 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" msgid "Polish"
msgstr "波兰语" msgstr "波兰语"
#: allianceauth/authentication/models.py:83 #: 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" msgid "Ukrainian"
msgstr "乌克兰语" msgstr "乌克兰语"
#: allianceauth/authentication/models.py:84 #: 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" msgid "Simplified Chinese"
msgstr "简体中文" msgstr "简体中文"
@@ -132,22 +132,30 @@ msgstr "简体中文"
msgid "Language" msgid "Language"
msgstr "语言" msgstr "语言"
#: allianceauth/authentication/models.py:105 #: allianceauth/authentication/models.py:106
#: allianceauth/templates/allianceauth/night-toggle.html:6 #: allianceauth/templates/allianceauth/night-toggle.html:6
msgid "Night Mode" msgid "Night Mode"
msgstr "夜间模式" msgstr "夜间模式"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:110
#: allianceauth/theme/templates/theme/theme_select.html:4 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "" 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 #, python-format
msgid "State changed to: %s" msgid "State changed to: %s"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:127 #: allianceauth/authentication/models.py:134
#, python-format #, python-format
msgid "Your user's state is now: %(state)s" msgid "Your user's state is now: %(state)s"
msgstr "" msgstr ""
@@ -168,14 +176,12 @@ msgstr "角色"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:11 #: allianceauth/authentication/templates/authentication/dashboard_characters.html:11
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:12 #: 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:4
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:6
msgid "Add Character" msgid "Add Character"
msgstr "添加角色" msgstr "添加角色"
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:14 #: allianceauth/authentication/templates/authentication/dashboard_characters.html:14
#: allianceauth/authentication/templates/authentication/dashboard_characters.html:15 #: 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:8
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:12
msgid "Change Main" msgid "Change Main"
msgstr "修改主要角色" msgstr "修改主要角色"
@@ -209,8 +215,8 @@ msgstr ""
#: allianceauth/authentication/templates/authentication/tokens.html:7 #: allianceauth/authentication/templates/authentication/tokens.html:7
#: allianceauth/authentication/templates/authentication/tokens.html:11 #: allianceauth/authentication/templates/authentication/tokens.html:11
#: allianceauth/menu/templates/menu/menu-user.html:133 #: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/menu/templates/menu/menu-user.html:136 #: allianceauth/menu/templates/menu/menu-user.html:161
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62 #: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
msgid "Token Management" msgid "Token Management"
msgstr "" msgstr ""
@@ -232,8 +238,8 @@ msgstr ""
#: allianceauth/hrapplications/templates/hrapplications/management.html:168 #: allianceauth/hrapplications/templates/hrapplications/management.html:168
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:35 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:35
#: allianceauth/hrapplications/templates/hrapplications/view.html:94 #: allianceauth/hrapplications/templates/hrapplications/view.html:94
#: allianceauth/srp/templates/srp/data.html:83 #: allianceauth/srp/templates/srp/data.html:81
#: allianceauth/srp/templates/srp/management.html:53 #: allianceauth/srp/templates/srp/management.html:51
msgid "Actions" msgid "Actions"
msgstr "操作" msgstr "操作"
@@ -246,8 +252,8 @@ msgstr "操作"
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:41 #: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:41
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:30 #: allianceauth/groupmanagement/templates/groupmanagement/audit.html:30
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:29 #: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:29
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:55 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:54
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:118 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:129
msgid "Character" msgid "Character"
msgstr "角色" msgstr "角色"
@@ -284,49 +290,49 @@ msgstr "注册"
msgid "Invalid or expired activation link." msgid "Invalid or expired activation link."
msgstr "激活链接无效或过期" msgstr "激活链接无效或过期"
#: allianceauth/authentication/views.py:158 #: allianceauth/authentication/views.py:159
#, python-format #, python-format
msgid "" msgid ""
"Cannot change main character to %(char)s: character owned by a different " "Cannot change main character to %(char)s: character owned by a different "
"account." "account."
msgstr "不能修改主角色为%(char)s这个角色被另一个账户所拥有" msgstr "不能修改主角色为%(char)s这个角色被另一个账户所拥有"
#: allianceauth/authentication/views.py:165 #: allianceauth/authentication/views.py:166
#, python-format #, python-format
msgid "Changed main character to %s" msgid "Changed main character to %s"
msgstr "修改主角色为%s" msgstr "修改主角色为%s"
#: allianceauth/authentication/views.py:179 #: allianceauth/authentication/views.py:180
#, python-format #, python-format
msgid "Added %(name)s to your account." msgid "Added %(name)s to your account."
msgstr "添加%(name)s到您的账户" msgstr "添加%(name)s到您的账户"
#: allianceauth/authentication/views.py:181 #: allianceauth/authentication/views.py:182
#, python-format #, python-format
msgid "Failed to add %(name)s to your account: they already have an account." msgid "Failed to add %(name)s to your account: they already have an account."
msgstr "添加%(name)s到您的账户失败他们已经在一个账户中了" msgstr "添加%(name)s到您的账户失败他们已经在一个账户中了"
#: allianceauth/authentication/views.py:226 #: allianceauth/authentication/views.py:227
msgid "" msgid ""
"Unable to authenticate as the selected character. Please log in with the " "Unable to authenticate as the selected character. Please log in with the "
"main character associated with this account." "main character associated with this account."
msgstr "" msgstr ""
#: allianceauth/authentication/views.py:293 #: allianceauth/authentication/views.py:294
msgid "Registration token has expired." msgid "Registration token has expired."
msgstr "注册令牌过期。" msgstr "注册令牌过期。"
#: allianceauth/authentication/views.py:354 #: allianceauth/authentication/views.py:355
msgid "" msgid ""
"Sent confirmation email. Please follow the link to confirm your email " "Sent confirmation email. Please follow the link to confirm your email "
"address." "address."
msgstr "已经发送了确认邮件。请按照链接确定您的电邮地址" msgstr "已经发送了确认邮件。请按照链接确定您的电邮地址"
#: allianceauth/authentication/views.py:360 #: allianceauth/authentication/views.py:361
msgid "Confirmed your email address. Please login to continue." msgid "Confirmed your email address. Please login to continue."
msgstr "已确认您的电邮地址。请登录以继续" msgstr "已确认您的电邮地址。请登录以继续"
#: allianceauth/authentication/views.py:366 #: allianceauth/authentication/views.py:367
msgid "Registration of new accounts is not allowed at this time." msgid "Registration of new accounts is not allowed at this time."
msgstr "" msgstr ""
@@ -343,11 +349,11 @@ msgstr "军团成员数据"
msgid "Corporations" msgid "Corporations"
msgstr "所有公司" msgstr "所有公司"
#: allianceauth/corputils/templates/corputils/base.html:35 #: allianceauth/corputils/templates/corputils/base.html:31
msgid "Add corporation" msgid "Add corporation"
msgstr "" msgstr ""
#: allianceauth/corputils/templates/corputils/base.html:51 #: allianceauth/corputils/templates/corputils/base.html:47
msgid "Search all corporations..." msgid "Search all corporations..."
msgstr "搜索所有公司" msgstr "搜索所有公司"
@@ -384,6 +390,8 @@ msgstr "注册过的角色"
#: allianceauth/corputils/templates/corputils/corpstats.html:125 #: allianceauth/corputils/templates/corputils/corpstats.html:125
#: allianceauth/corputils/templates/corputils/search.html:18 #: allianceauth/corputils/templates/corputils/search.html:18
#: allianceauth/groupmanagement/templates/groupmanagement/audit.html:31 #: 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:35
#: allianceauth/hrapplications/templates/hrapplications/management.html:122 #: allianceauth/hrapplications/templates/hrapplications/management.html:122
#: allianceauth/hrapplications/templates/hrapplications/management.html:166 #: allianceauth/hrapplications/templates/hrapplications/management.html:166
@@ -495,7 +503,7 @@ msgid "Fleet Activity Tracking"
msgstr "舰队活动历史" msgstr "舰队活动历史"
#: allianceauth/fleetactivitytracking/forms.py:6 allianceauth/srp/form.py:8 #: 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" msgid "Fleet Name"
msgstr "舰队名" msgstr "舰队名"
@@ -754,14 +762,18 @@ msgstr "PAP链接已过期"
#: allianceauth/fleetactivitytracking/views.py:323 #: allianceauth/fleetactivitytracking/views.py:323
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Cannot register the fleet participation for {character.character_name}. The " "Cannot register the fleet participation for {character_name}. The character "
"character needs to be online." "needs to be online."
msgstr "" msgstr ""
#: allianceauth/framework/apps.py:16 #: allianceauth/framework/apps.py:16
msgid "Framework" msgid "Framework"
msgstr "" msgstr ""
#: allianceauth/framework/templates/framework/datatables/process-indicator.html:8
msgid "Loading …"
msgstr ""
#: allianceauth/groupmanagement/apps.py:8 #: allianceauth/groupmanagement/apps.py:8
#: allianceauth/groupmanagement/auth_hooks.py:18 #: allianceauth/groupmanagement/auth_hooks.py:18
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:18 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:18
@@ -933,8 +945,8 @@ msgid "Group Members"
msgstr "群组成员" msgstr "群组成员"
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:30 #: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:30
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:56 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:55
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:119 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:130
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:33 #: allianceauth/permissions_tool/templates/permissions_tool/audit.html:33
msgid "Organization" msgid "Organization"
msgstr "组织" msgstr "组织"
@@ -946,7 +958,9 @@ msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:61 #: allianceauth/groupmanagement/templates/groupmanagement/groupmembers.html:61
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:85 #: 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 #: allianceauth/permissions_tool/templates/permissions_tool/audit_row.html:18
msgid "(unknown)" msgid "(unknown)"
msgstr "" msgstr ""
@@ -979,7 +993,7 @@ msgstr "描述"
#: allianceauth/hrapplications/templates/hrapplications/management.html:123 #: allianceauth/hrapplications/templates/hrapplications/management.html:123
#: allianceauth/hrapplications/templates/hrapplications/management.html:167 #: allianceauth/hrapplications/templates/hrapplications/management.html:167
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:34 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:34
#: allianceauth/srp/templates/srp/data.html:81 #: allianceauth/srp/templates/srp/data.html:79
msgid "Status" msgid "Status"
msgstr "状态" msgstr "状态"
@@ -992,7 +1006,7 @@ msgid "Hidden"
msgstr "已隐藏" msgstr "已隐藏"
#: allianceauth/groupmanagement/templates/groupmanagement/groupmembership.html:45 #: 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" msgid "Open"
msgstr "公开" msgstr "公开"
@@ -1026,8 +1040,8 @@ msgid "Leaders"
msgstr "" msgstr ""
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:37 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:37
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:57 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:56
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:120 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:131
#: allianceauth/permissions_tool/templates/permissions_tool/audit.html:30 #: allianceauth/permissions_tool/templates/permissions_tool/audit.html:30
#: allianceauth/services/modules/openfire/forms.py:6 #: allianceauth/services/modules/openfire/forms.py:6
msgid "Group" msgid "Group"
@@ -1037,18 +1051,10 @@ msgstr "用户组"
msgid "Leave" msgid "Leave"
msgstr "离开" msgstr "离开"
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:74 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:73
#: allianceauth/groupmanagement/templates/groupmanagement/groups.html:89 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:88
#: allianceauth/hrapplications/templates/hrapplications/management.html:46 msgid "Request pending"
#: allianceauth/hrapplications/templates/hrapplications/management.html:95 msgstr ""
#: 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:80 #: allianceauth/groupmanagement/templates/groupmanagement/groups.html:80
msgid "Join" msgid "Join"
@@ -1058,7 +1064,11 @@ msgstr "加入"
msgid "Request" msgid "Request"
msgstr "申请" 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." msgid "No groups available."
msgstr "没有可用用户组" msgstr "没有可用用户组"
@@ -1080,22 +1090,22 @@ msgstr "离组的请求"
msgid "Group Membership" msgid "Group Membership"
msgstr "用户组成员" msgstr "用户组成员"
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:93 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:96
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:156 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:171
msgid "Accept" msgid "Accept"
msgstr "接受" msgstr "接受"
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:96 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:99
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:160 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:174
#: allianceauth/hrapplications/templates/hrapplications/view.html:104 #: allianceauth/hrapplications/templates/hrapplications/view.html:104
msgid "Reject" msgid "Reject"
msgstr "拒绝" msgstr "拒绝"
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:106 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:117
msgid "No group add requests." msgid "No group add requests."
msgstr "没有加入用户组的请求,小老弟你是不是摇不到人" msgstr "没有加入用户组的请求,小老弟你是不是摇不到人"
#: allianceauth/groupmanagement/templates/groupmanagement/index.html:169 #: allianceauth/groupmanagement/templates/groupmanagement/index.html:190
msgid "No group leave requests." msgid "No group leave requests."
msgstr "没有离开用户组的请求,小老弟你人缘可以啊?" msgstr "没有离开用户组的请求,小老弟你人缘可以啊?"
@@ -1187,6 +1197,19 @@ msgstr "你已经有了该组的未决离开请求"
msgid "Applied to leave group %(group)s." msgid "Applied to leave group %(group)s."
msgstr "已经离开群组%(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 #: allianceauth/hrapplications/apps.py:8
msgid "HR Applications" msgid "HR Applications"
msgstr "" msgstr ""
@@ -1257,12 +1280,23 @@ msgstr "创建申请"
msgid "Username" msgid "Username"
msgstr "用户名" 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:48
#: allianceauth/hrapplications/templates/hrapplications/management.html:141 #: allianceauth/hrapplications/templates/hrapplications/management.html:141
#: allianceauth/hrapplications/templates/hrapplications/management.html:185 #: allianceauth/hrapplications/templates/hrapplications/management.html:185
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:48 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:48
#: allianceauth/hrapplications/templates/hrapplications/view.html:21 #: allianceauth/hrapplications/templates/hrapplications/view.html:21
#: allianceauth/srp/templates/srp/data.html:112 #: allianceauth/srp/templates/srp/data.html:110
msgid "Approved" msgid "Approved"
msgstr "通过" msgstr "通过"
@@ -1270,7 +1304,7 @@ msgstr "通过"
#: allianceauth/hrapplications/templates/hrapplications/management.html:143 #: allianceauth/hrapplications/templates/hrapplications/management.html:143
#: allianceauth/hrapplications/templates/hrapplications/management.html:187 #: allianceauth/hrapplications/templates/hrapplications/management.html:187
#: allianceauth/hrapplications/templates/hrapplications/searchview.html:50 #: allianceauth/hrapplications/templates/hrapplications/searchview.html:50
#: allianceauth/srp/templates/srp/data.html:116 #: allianceauth/srp/templates/srp/data.html:114
msgid "Rejected" msgid "Rejected"
msgstr "拒绝" msgstr "拒绝"
@@ -1474,39 +1508,47 @@ msgid "Notifications"
msgstr "通知" msgstr "通知"
#: allianceauth/menu/templates/menu/menu-user.html:77 #: 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" msgid "Super User"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:83 #: allianceauth/menu/templates/menu/menu-user.html:108
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:111
msgid "Alliance Auth Documentation" msgid "Alliance Auth Documentation"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94 #: allianceauth/menu/templates/menu/menu-user.html:119
#: allianceauth/menu/templates/menu/menu-user.html:97 #: allianceauth/menu/templates/menu/menu-user.html:122
msgid "Alliance Auth Discord" msgid "Alliance Auth Discord"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105 #: allianceauth/menu/templates/menu/menu-user.html:130
#: allianceauth/menu/templates/menu/menu-user.html:108 #: allianceauth/menu/templates/menu/menu-user.html:133
msgid "Alliance Auth Git" msgid "Alliance Auth Git"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118 #: allianceauth/menu/templates/menu/menu-user.html:143
#: allianceauth/menu/templates/menu/menu-user.html:121 #: allianceauth/menu/templates/menu/menu-user.html:146
#: allianceauth/templates/allianceauth/top-menu-admin.html:9 #: allianceauth/templates/allianceauth/top-menu-admin.html:9
msgid "Admin" msgid "Admin"
msgstr "管理员" msgstr "管理员"
#: allianceauth/menu/templates/menu/menu-user.html:144 #: allianceauth/menu/templates/menu/menu-user.html:169
#: allianceauth/menu/templates/menu/menu-user.html:147 #: allianceauth/menu/templates/menu/menu-user.html:172
msgid "Sign Out" msgid "Sign Out"
msgstr "登出" msgstr "登出"
#: allianceauth/menu/templates/menu/menu-user.html:155 #: allianceauth/menu/templates/menu/menu-user.html:180
#: allianceauth/menu/templates/menu/menu-user.html:158 #: allianceauth/menu/templates/menu/menu-user.html:183
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
msgid "Sign In" msgid "Sign In"
msgstr "登入" msgstr "登入"
@@ -1534,11 +1576,11 @@ msgstr "未读"
msgid "Read" msgid "Read"
msgstr "已读" msgstr "已读"
#: allianceauth/notifications/templates/notifications/list.html:32 #: allianceauth/notifications/templates/notifications/list.html:31
msgid "Mark all notifications as read" msgid "Mark all notifications as read"
msgstr "" msgstr ""
#: allianceauth/notifications/templates/notifications/list.html:38 #: allianceauth/notifications/templates/notifications/list.html:35
msgid "Delete all read notifications" msgid "Delete all read notifications"
msgstr "" msgstr ""
@@ -1603,12 +1645,12 @@ msgid "Operation Type"
msgstr "" msgstr ""
#: allianceauth/optimer/form.py:17 #: allianceauth/optimer/form.py:17
#: allianceauth/srp/templates/srp/management.html:47 #: allianceauth/srp/templates/srp/management.html:45
msgid "Fleet Commander" msgid "Fleet Commander"
msgstr "FC" msgstr "FC"
#: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14 #: allianceauth/optimer/form.py:22 allianceauth/srp/form.py:14
#: allianceauth/srp/templates/srp/data.html:72 #: allianceauth/srp/templates/srp/data.html:70
msgid "Additional Info" msgid "Additional Info"
msgstr "其他信息" msgstr "其他信息"
@@ -1617,7 +1659,7 @@ msgid "(Optional) Describe the operation with a couple of short words."
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/add.html:8 #: allianceauth/optimer/templates/optimer/add.html:8
#: allianceauth/optimer/templates/optimer/management.html:18 #: allianceauth/optimer/templates/optimer/management.html:16
msgid "Create Operation" msgid "Create Operation"
msgstr "起一个队" msgstr "起一个队"
@@ -1666,26 +1708,26 @@ msgstr "FC"
msgid "Fleet Operation Management" msgid "Fleet Operation Management"
msgstr "管理搞事队" msgstr "管理搞事队"
#: allianceauth/optimer/templates/optimer/management.html:28 #: allianceauth/optimer/templates/optimer/management.html:26
#: allianceauth/timerboard/templates/timerboard/view.html:32 #: allianceauth/timerboard/templates/timerboard/view.html:30
msgid "Current EVE time:" msgid "Current EVE time:"
msgstr "" msgstr ""
#: allianceauth/optimer/templates/optimer/management.html:36 #: allianceauth/optimer/templates/optimer/management.html:34
msgid "Next Fleet Operations" msgid "Next Fleet Operations"
msgstr "下一个舰队任务" msgstr "下一个舰队任务"
#: allianceauth/optimer/templates/optimer/management.html:44 #: allianceauth/optimer/templates/optimer/management.html:42
#: allianceauth/timerboard/templates/timerboard/view.html:63 #: allianceauth/timerboard/templates/timerboard/view.html:61
msgid "No upcoming timers." msgid "No upcoming timers."
msgstr "没有快到的时间节点,歇一会吧" msgstr "没有快到的时间节点,歇一会吧"
#: allianceauth/optimer/templates/optimer/management.html:52 #: allianceauth/optimer/templates/optimer/management.html:50
msgid "Past Fleet Operations" msgid "Past Fleet Operations"
msgstr "过去的舰队任务" msgstr "过去的舰队任务"
#: allianceauth/optimer/templates/optimer/management.html:60 #: allianceauth/optimer/templates/optimer/management.html:58
#: allianceauth/timerboard/templates/timerboard/view.html:81 #: allianceauth/timerboard/templates/timerboard/view.html:79
msgid "No past timers." msgid "No past timers."
msgstr "没有已经结束的时间节点啦" msgstr "没有已经结束的时间节点啦"
@@ -1765,9 +1807,9 @@ msgstr "声望"
msgid "That service account already exists" msgid "That service account already exists"
msgstr "该服务账户仍然存在" msgstr "该服务账户仍然存在"
#: allianceauth/services/abstract.py:103 #: allianceauth/services/abstract.py:105
#, python-brace-format #, python-brace-format
msgid "Successfully set your {self.service_name} password" msgid "Successfully set your {service_name} password"
msgstr "" msgstr ""
#: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12 #: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12
@@ -2253,7 +2295,7 @@ msgid "Enabled"
msgstr "" msgstr ""
#: allianceauth/services/templates/services/service_status.html:7 #: allianceauth/services/templates/services/service_status.html:7
#: allianceauth/srp/templates/srp/management.html:78 #: allianceauth/srp/templates/srp/management.html:76
msgid "Disabled" msgid "Disabled"
msgstr "失效了" msgstr "失效了"
@@ -2291,12 +2333,12 @@ msgid "Ship Replacement"
msgstr "补损" msgstr "补损"
#: allianceauth/srp/form.py:9 #: allianceauth/srp/form.py:9
#: allianceauth/srp/templates/srp/management.html:45 #: allianceauth/srp/templates/srp/management.html:43
msgid "Fleet Time" msgid "Fleet Time"
msgstr "集结时间" msgstr "集结时间"
#: allianceauth/srp/form.py:10 #: allianceauth/srp/form.py:10
#: allianceauth/srp/templates/srp/management.html:46 #: allianceauth/srp/templates/srp/management.html:44
msgid "Fleet Doctrine" msgid "Fleet Doctrine"
msgstr "舰队船型" msgstr "舰队船型"
@@ -2308,11 +2350,11 @@ msgstr ""
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org" msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
msgstr "" msgstr ""
#: allianceauth/srp/form.py:46 #: allianceauth/srp/form.py:49
msgid "Invalid Link. Please post a direct link to a killmail." msgid "Invalid Link. Please post a direct link to a killmail."
msgstr "" msgstr ""
#: allianceauth/srp/form.py:53 #: allianceauth/srp/form.py:56
msgid "After Action Report Link" msgid "After Action Report Link"
msgstr "战报链接" msgstr "战报链接"
@@ -2345,7 +2387,7 @@ msgid "Give this link to the line members."
msgstr "" msgstr ""
#: allianceauth/srp/templates/srp/data.html:8 #: 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" msgid "SRP Fleet Data"
msgstr "舰队补损信息" msgstr "舰队补损信息"
@@ -2353,64 +2395,64 @@ msgstr "舰队补损信息"
msgid "View Fleets" msgid "View Fleets"
msgstr "查看舰队" msgstr "查看舰队"
#: allianceauth/srp/templates/srp/data.html:26 #: allianceauth/srp/templates/srp/data.html:24
msgid "Mark Incomplete" msgid "Mark Incomplete"
msgstr "标记为未完成" msgstr "标记为未完成"
#: allianceauth/srp/templates/srp/data.html:30 #: allianceauth/srp/templates/srp/data.html:28
msgid "Mark Completed" msgid "Mark Completed"
msgstr "标记为已完成" msgstr "标记为已完成"
#: allianceauth/srp/templates/srp/data.html:48 #: allianceauth/srp/templates/srp/data.html:46
#: allianceauth/srp/templates/srp/data.html:142 #: allianceauth/srp/templates/srp/data.html:140
msgid "Total Losses:" msgid "Total Losses:"
msgstr "损失总额:" msgstr "损失总额:"
#: allianceauth/srp/templates/srp/data.html:49 #: allianceauth/srp/templates/srp/data.html:47
#: allianceauth/srp/templates/srp/data.html:143 #: allianceauth/srp/templates/srp/data.html:141
#: allianceauth/srp/templates/srp/management.html:36 #: allianceauth/srp/templates/srp/management.html:34
msgid "Total ISK Cost:" msgid "Total ISK Cost:"
msgstr "ISK花费总额" msgstr "ISK花费总额"
#: allianceauth/srp/templates/srp/data.html:60 #: allianceauth/srp/templates/srp/data.html:58
#: allianceauth/srp/templates/srp/data.html:154 #: allianceauth/srp/templates/srp/data.html:152
msgid "Are you sure you want to delete SRP requests?" msgid "Are you sure you want to delete SRP requests?"
msgstr "老哥,你确定要删了补损请求么?" msgstr "老哥,你确定要删了补损请求么?"
#: allianceauth/srp/templates/srp/data.html:70 #: allianceauth/srp/templates/srp/data.html:68
msgid "Pilot Name" msgid "Pilot Name"
msgstr "玩家ID" msgstr "玩家ID"
#: allianceauth/srp/templates/srp/data.html:71 #: allianceauth/srp/templates/srp/data.html:69
msgid "Killboard Link" msgid "Killboard Link"
msgstr "KB网链接" msgstr "KB网链接"
#: allianceauth/srp/templates/srp/data.html:73 #: allianceauth/srp/templates/srp/data.html:71
msgid "Ship Type" msgid "Ship Type"
msgstr "船型" msgstr "船型"
#: allianceauth/srp/templates/srp/data.html:74 #: allianceauth/srp/templates/srp/data.html:72
msgid "Killboard Loss Amt" msgid "Killboard Loss Amt"
msgstr "KB网总损失" msgstr "KB网总损失"
#: allianceauth/srp/templates/srp/data.html:76 #: allianceauth/srp/templates/srp/data.html:74
msgid "SRP ISK Cost" msgid "SRP ISK Cost"
msgstr "补损ISK花费" 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" msgid "Click value to edit Enter to save & next ESC to cancel"
msgstr "点击数值就可以编辑啦按回车确认按ESC取消" msgstr "点击数值就可以编辑啦按回车确认按ESC取消"
#: allianceauth/srp/templates/srp/data.html:80 #: allianceauth/srp/templates/srp/data.html:78
msgid "Post Time" msgid "Post Time"
msgstr "发布时间" msgstr "发布时间"
#: allianceauth/srp/templates/srp/data.html:102 #: allianceauth/srp/templates/srp/data.html:100
#: allianceauth/srp/templates/srp/management.html:70 #: allianceauth/srp/templates/srp/management.html:68
msgid "Link" msgid "Link"
msgstr "链接" msgstr "链接"
#: allianceauth/srp/templates/srp/data.html:163 #: allianceauth/srp/templates/srp/data.html:161
msgid "No SRP requests for this fleet." msgid "No SRP requests for this fleet."
msgstr "这次起队没有补损请求!大捷" msgstr "这次起队没有补损请求!大捷"
@@ -2422,39 +2464,39 @@ msgstr "补损管理"
msgid "View All" msgid "View All"
msgstr "查看全部" msgstr "查看全部"
#: allianceauth/srp/templates/srp/management.html:27 #: allianceauth/srp/templates/srp/management.html:25
msgid "Add SRP Fleet" msgid "Add SRP Fleet"
msgstr "添加补损舰队" msgstr "添加补损舰队"
#: allianceauth/srp/templates/srp/management.html:48 #: allianceauth/srp/templates/srp/management.html:46
msgid "Fleet AAR" msgid "Fleet AAR"
msgstr "舰队战报" msgstr "舰队战报"
#: allianceauth/srp/templates/srp/management.html:49 #: allianceauth/srp/templates/srp/management.html:47
msgid "Fleet SRP Code" msgid "Fleet SRP Code"
msgstr "补损编号" msgstr "补损编号"
#: allianceauth/srp/templates/srp/management.html:50 #: allianceauth/srp/templates/srp/management.html:48
msgid "Fleet ISK Cost" msgid "Fleet ISK Cost"
msgstr "舰队ISK花费" msgstr "舰队ISK花费"
#: allianceauth/srp/templates/srp/management.html:51 #: allianceauth/srp/templates/srp/management.html:49
msgid "SRP Status" msgid "SRP Status"
msgstr "补损状态" msgstr "补损状态"
#: allianceauth/srp/templates/srp/management.html:52 #: allianceauth/srp/templates/srp/management.html:50
msgid "Pending Requests" msgid "Pending Requests"
msgstr "待处理请求" msgstr "待处理请求"
#: allianceauth/srp/templates/srp/management.html:91 #: allianceauth/srp/templates/srp/management.html:89
msgid "Completed" msgid "Completed"
msgstr "已完成" 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?" msgid "Are you sure you want to delete this SRP code and its contents?"
msgstr "老哥,你确认要把这次补损的编号和内容都删了?" msgstr "老哥,你确认要把这次补损的编号和内容都删了?"
#: allianceauth/srp/templates/srp/management.html:129 #: allianceauth/srp/templates/srp/management.html:127
msgid "No SRP fleets created." msgid "No SRP fleets created."
msgstr "没有创建任何补损舰队,你快灭灯了吧?" msgstr "没有创建任何补损舰队,你快灭灯了吧?"
@@ -2586,71 +2628,124 @@ msgstr "找不到ID是%(requestid)s的补损申请呀老哥眼花了"
msgid "Saved changes to SRP fleet %(fleetname)s" msgid "Saved changes to SRP fleet %(fleetname)s"
msgstr "你做的修改已经保存到%(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 " msgid "Your Server received an ESI error response code of "
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:8 #: allianceauth/templates/allianceauth/admin-status/overview.html:11
msgid "Alliance Auth Notifications" msgid "second"
msgstr "系统通知"
#: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "No notifications at this time"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:29 #: allianceauth/templates/allianceauth/admin-status/overview.html:12
msgid "Powered by GitLab" msgid "seconds"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:35 #: allianceauth/templates/allianceauth/admin-status/overview.html:13
msgid "Support Discord" msgid "minute"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:49 #: allianceauth/templates/allianceauth/admin-status/overview.html:14
#: allianceauth/templates/allianceauth/admin-status/overview.html:53 msgid "minutes"
msgid "Software Version" msgstr "分钟数"
msgstr "软件版本"
#: allianceauth/templates/allianceauth/admin-status/overview.html:56 #: allianceauth/templates/allianceauth/admin-status/overview.html:15
msgid "Current" msgid "hour"
msgstr "当前版本"
#: allianceauth/templates/allianceauth/admin-status/overview.html:63
msgid "Latest Stable"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:68 #: allianceauth/templates/allianceauth/admin-status/overview.html:16
msgid "Update available" msgid "hours"
msgstr "有更新!"
#: allianceauth/templates/allianceauth/admin-status/overview.html:76
msgid "Latest Pre-Release"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:81 #: allianceauth/templates/allianceauth/admin-status/overview.html:17
msgid "Pre-Release available" msgid "N/A"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:91 #: allianceauth/templates/allianceauth/admin-status/overview.html:18
msgid "Task Queue" msgid "ERROR"
msgstr "任务队列"
#: allianceauth/templates/allianceauth/admin-status/overview.html:96
#, python-format
msgid ""
"\n"
" Status of %(total)s processed tasks • last %(latest)s\n"
" "
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:112 #: allianceauth/templates/allianceauth/admin-status/overview.html:19
msgid "running" msgid "running"
msgstr "" msgstr ""
#: allianceauth/templates/allianceauth/admin-status/overview.html:113 #: allianceauth/templates/allianceauth/admin-status/overview.html:20
msgid "queued" msgid "queued"
msgstr "" 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 #: allianceauth/templates/allianceauth/top-menu-admin.html:19
msgid "AA Documentation" msgid "AA Documentation"
msgstr "" msgstr ""
@@ -2874,7 +2969,7 @@ msgid "Theft"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7 #: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
#: allianceauth/timerboard/templates/timerboard/view.html:54 #: allianceauth/timerboard/templates/timerboard/view.html:52
msgid "Upcoming Timers" msgid "Upcoming Timers"
msgstr "" msgstr ""
@@ -2902,7 +2997,7 @@ msgid "Create Timer"
msgstr "创建时间计划表" msgstr "创建时间计划表"
#: allianceauth/timerboard/templates/timerboard/timer_create_form.html:9 #: 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" msgid "Create Structure Timer"
msgstr "创建建筑时间表" msgstr "创建建筑时间表"
@@ -2920,11 +3015,11 @@ msgstr "建筑"
msgid "Structure Timer Management" msgid "Structure Timer Management"
msgstr "管理建筑时间表" msgstr "管理建筑时间表"
#: allianceauth/timerboard/templates/timerboard/view.html:41 #: allianceauth/timerboard/templates/timerboard/view.html:39
msgid "Corporation Timers" msgid "Corporation Timers"
msgstr "" msgstr ""
#: allianceauth/timerboard/templates/timerboard/view.html:72 #: allianceauth/timerboard/templates/timerboard/view.html:70
msgid "Past Timers" msgid "Past Timers"
msgstr "已经过去的时间节点" msgstr "已经过去的时间节点"
@@ -2937,36 +3032,36 @@ msgstr "已经把%(system)s星系里%(time)s的时间节点设置好了CTA
msgid "Saved changes to the timer." msgid "Saved changes to the timer."
msgstr "保存至新的计划表" msgstr "保存至新的计划表"
#: allianceauth/views.py:55 #: allianceauth/views.py:78
msgid "Bad Request" msgid "Bad Request"
msgstr "" msgstr ""
#: allianceauth/views.py:57 allianceauth/views.py:87 #: allianceauth/views.py:80 allianceauth/views.py:110
msgid "" msgid ""
"Auth encountered an error processing your request, please try again. If the " "Auth encountered an error processing your request, please try again. If the "
"error persists, please contact the administrators." "error persists, please contact the administrators."
msgstr "" msgstr ""
#: allianceauth/views.py:65 #: allianceauth/views.py:88
msgid "Permission Denied" msgid "Permission Denied"
msgstr "" msgstr ""
#: allianceauth/views.py:67 #: allianceauth/views.py:90
msgid "" msgid ""
"You do not have permission to access the requested page. If you believe this" "You do not have permission to access the requested page. If you believe this"
" is in error please contact the administrators." " is in error please contact the administrators."
msgstr "" msgstr ""
#: allianceauth/views.py:75 #: allianceauth/views.py:98
msgid "Page Not Found" msgid "Page Not Found"
msgstr "" msgstr ""
#: allianceauth/views.py:77 #: allianceauth/views.py:100
msgid "" msgid ""
"Page does not exist. If you believe this is in error please contact the " "Page does not exist. If you believe this is in error please contact the "
"administrators. " "administrators. "
msgstr "" msgstr ""
#: allianceauth/views.py:85 #: allianceauth/views.py:108
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "" 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 import logging
from typing import TYPE_CHECKING from typing import TYPE_CHECKING

View File

@@ -5,10 +5,10 @@
<li class="nav-item" id="menu_item_notifications"> <li class="nav-item" id="menu_item_notifications">
<a class="nav-link {% navactive request 'notifications:' %}" href="{% url 'notifications:list' %}"> <a class="nav-link {% navactive request 'notifications:' %}" href="{% url 'notifications:list' %}">
{% with unread_count=request.user|user_unread_notification_count %} {% 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 %} {% endwith %}
<span class="d-lg-none d-md-inline m-2"> <span class="d-lg-none d-md-inline">
{% translate "Notifications" %} {% translate "Notifications" %}
</span> </span>
</a> </a>

View File

@@ -72,6 +72,31 @@
{% theme_select %} {% 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 %} {% if user.is_superuser %}
<li><hr class="dropdown-divider"></li> <li><hr class="dropdown-divider"></li>
<li><h6 class="dropdown-header">{% translate "Super User" %}</h6></li> <li><h6 class="dropdown-header">{% translate "Super User" %}</h6></li>

View File

@@ -3,7 +3,7 @@
{% load menu_menu_items %} {% load menu_menu_items %}
<div class="col-auto px-0"> <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>
<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 %}"> <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 %} {% 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 %} {% endblock %}
{% block header_nav_collapse_right %} {% block header_nav_collapse_right %}
<li class="nav-item"> {% translate "Mark all notifications as read" as nav_item_title %}
<a href="{% url 'notifications:mark_all_read' %}" class="nav-link" title="{% translate 'Mark all notifications as read' %}"> {% url "notifications:mark_all_read" as nav_item_link %}
<i class="fa-solid fa-check-double"></i> {% 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 %}
</a>
</li>
<li class="nav-item"> {% translate "Delete all read notifications" as nav_item_title %}
<a href="{% url 'notifications:delete_all_read' %}" class="nav-link" title="{% translate 'Delete all read notifications' %}"> {% url "notifications:delete_all_read" as nav_item_link %}
<i class="fa-solid fa-trash-can"></i> {% 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 %}
</a>
</li>
{% endblock %} {% endblock %}
{% block content %} {% block content %}

View File

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

View File

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

View File

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

View File

@@ -57,10 +57,10 @@ DATABASES['default'] = {
# CCP's developer portal # CCP's developer portal
# Logging in to auth requires the publicData scope (can be overridden through the # 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). # 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_ID = ''
ESI_SSO_CLIENT_SECRET = '' 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. # 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. # 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] [program:beat]
command = {{ celery }} -A {{ project_name }} beat command = %(ENV_AA_COMMAND_CELERY)s
directory = {{ project_directory }} -A %(ENV_AA_PROJECT_NAME)s beat
user = allianceserver directory = %(ENV_AA_PROJECT_DIRECTORY)s
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log user = %(ENV_AA_USER)s
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 autostart = true
autorestart = true autorestart = true
startsecs = 10 startsecs = 10
priority = 998 priority = 998
[program:worker] [program:worker]
command = {{ celery }} -A {{ project_name }} worker --pool=threads --concurrency=5 -n %(program_name)s_%(process_num)02d command = %(ENV_AA_COMMAND_CELERY)s
directory = {{ project_directory }} -A %(ENV_AA_PROJECT_NAME)s worker
user = allianceserver --pool=threads
--concurrency=5
-n %(program_name)s_%(process_num)02d
directory = %(ENV_AA_PROJECT_DIRECTORY)s
user = %(ENV_AA_USER)s
numprocs = 1 numprocs = 1
process_name = %(program_name)s_%(process_num)02d process_name = %(program_name)s_%(process_num)02d
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
autostart = true autostart = true
autorestart = true autorestart = true
startsecs = 10 startsecs = 10
@@ -26,22 +41,26 @@ priority = 998
{% if gunicorn %} {% if gunicorn %}
[program:gunicorn] [program:gunicorn]
user = allianceserver user = %(ENV_AA_USER)s
directory = {{ project_directory }} directory = %(ENV_AA_PROJECT_DIRECTORY)s
command = {{ gunicorn }} {{ project_name }}.wsgi --workers=3 --timeout 120 command = %(ENV_AA_COMMAND_GUNICORN)s %(ENV_AA_PROJECT_NAME)s.wsgi
stdout_logfile = {{ project_directory }}/log/%(program_name)s.log --workers=3
stderr_logfile = {{ project_directory }}/log/%(program_name)s.log --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 autostart = true
autorestart = true autorestart = true
stopsignal = INT stopsignal = INT
{% endif %} {% endif %}
[eventlistener:memmon] [eventlistener:memmon]
command = {{ memmon }} -p worker_00=256MB -p gunicorn=256MB command = %(ENV_AA_COMMAND_MEMMON)s
directory = {{ project_directory }} -p worker_00=256MB
-p gunicorn=256MB
directory = %(ENV_AA_PROJECT_DIRECTORY)s
events = TICK_60 events = TICK_60
stdout_logfile = {{ project_directory }}/log/memmon.log stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/memmon.log
stderr_logfile = {{ project_directory }}/log/memmon.log stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/memmon.log
[group:{{ project_name }}] [group:{{ project_name }}]
programs = beat,worker{% if gunicorn %},gunicorn{% endif %} programs = beat,worker{% if gunicorn %},gunicorn{% endif %}

View File

@@ -100,7 +100,10 @@ class BaseSetPasswordServiceAccountView(ServicesCRUDMixin, BaseServiceView, Upda
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
result = super().post(request, *args, **kwargs) result = super().post(request, *args, **kwargs)
if self.get_form().is_valid(): 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 return result

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -34,6 +34,9 @@ class SrpFleetUserRequestForm(forms.Form):
_("Invalid Link. Please use zkillboard.com or kb.evetools.org") _("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 # Check if it's an actual kill mail
if not any( if not any(
re.match(regex, data) re.match(regex, data)

View File

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

View File

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

View File

@@ -22,11 +22,9 @@
{% endblock header_nav_collapse_left %} {% endblock header_nav_collapse_left %}
{% block header_nav_collapse_right %} {% block header_nav_collapse_right %}
{% if perms.srp.add_srpfleetmain or perms.auth.srp_management %} {% if perms.srp.add_srpfleetmain or perms.auth.srp_management %}
<li class="nav-item"> {% translate "Add SRP Fleet" as nav_item_title %}
<a class="btn btn-success" href="{% url 'srp:add' %}"> {% url "srp:add" as nav_item_link %}
{% translate "Add SRP Fleet" %} {% 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 %}
</a>
</li>
{% endif %} {% endif %}
{% endblock header_nav_collapse_right %} {% endblock header_nav_collapse_right %}
{% block content %} {% 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", "emptyTable": "Tabulka neobsahuje žádná data",
"info": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů", "info": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů",
"infoEmpty": "Zobrazuji 0 až 0 z 0 záznamů", "infoEmpty": "Zobrazuji 0 až 0 z 0 záznamů",
"infoFiltered": "(filtrováno z celkem _MAX_ záznamů)", "infoFiltered": "(filtrováno z celkem _MAX_ záznamů)",
"infoPostFix": "",
"infoThousands": " ",
"lengthMenu": "Zobrazit _MENU_ výsledků",
"loadingRecords": "Načítám...", "loadingRecords": "Načítám...",
"zeroRecords": "Žádné záznamy nebyly nalezeny", "processing": "Zpracovávání...",
"paginate": { "search": "Vyhledávání:",
"first": "První",
"last": "Poslední",
"next": "Další",
"previous": "Předchozí"
},
"searchBuilder": { "searchBuilder": {
"add": "Přidat podmínku", "add": "Přidat podmínku",
"button": {
"_": "Rozšířený filtr (%d)",
"0": "Rozšířený filtr"
},
"clearAll": "Smazat vše", "clearAll": "Smazat vše",
"condition": "Podmínka", "condition": "Podmínka",
"conditions": { "conditions": {
"array": {
"contains": "obsahuje",
"empty": "prázdné",
"equals": "rovno",
"not": "není",
"notEmpty": "není prázdné",
"without": "neobsahuje"
},
"date": { "date": {
"after": "po", "after": "po",
"before": "před", "before": "před",
@@ -44,176 +163,57 @@
"endsWith": "končí na", "endsWith": "končí na",
"equals": "rovno", "equals": "rovno",
"not": "není", "not": "není",
"notEmpty": "není prázdné",
"startsWith": "začíná na",
"notContains": "Podmínka", "notContains": "Podmínka",
"notStartsWith": "Nezačíná",
"notEndsWith": "Nekončí"
},
"array": {
"equals": "rovno",
"empty": "prázdné",
"contains": "obsahuje",
"not": "není",
"notEmpty": "není prázdné", "notEmpty": "není prázdné",
"without": "neobsahuje" "notEndsWith": "Nekončí",
"notStartsWith": "Nezačíná",
"startsWith": "začíná na"
} }
}, },
"data": "Sloupec", "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", "deleteTitle": "Smazat filtrovací pravidlo",
"leftTitle": "Zrušení odsazení podmínky", "leftTitle": "Zrušení odsazení podmínky",
"rightTitle": "Odsazení podmínky" "logicAnd": "A",
}, "logicOr": "NEBO",
"autoFill": { "rightTitle": "Odsazení podmínky",
"cancel": "Zrušit", "title": {
"fill": "Vyplň všechny buňky textem <i>%d<i><\/i><\/i>", "_": "Rozšířený filtr (%d)",
"fillHorizontal": "Vyplň všechny buňky horizontálně", "0": "Rozšířený filtr"
"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"
}, },
"pdf": "PDF", "value": "Hodnota"
"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"
}, },
"searchPanes": { "searchPanes": {
"clearMessage": "Smazat vše", "clearMessage": "Smazat vše",
"collapse": { "collapse": {
"0": "Vyhledávací Panely", "_": "Vyhledávací panely (%d)",
"_": "Vyhledávací Panely (%d)" "0": "Vyhledávací panely"
}, },
"collapseMessage": "Sbalit vše",
"count": "{total}", "count": "{total}",
"countFiltered": "{shown} ({total})", "countFiltered": "{shown} ({total})",
"emptyPanes": "Žádné Vyhledávací Panely", "emptyPanes": "Žádné vyhledávací panely",
"loadMessage": "Načítám Vyhledávací Panely", "loadMessage": "Načítám vyhledávací panely...",
"title": "Aktivních filtrů - %d", "showMessage": "Zobrazit vše",
"showMessage": "Zobrazit Vše", "title": "Aktivních filtrů - %d"
"collapseMessage": "Sbalit Vše"
}, },
"searchPlaceholder": "",
"select": { "select": {
"cells": { "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": { "columns": {
"1": "Vybrán 1 sloupec", "_": "Vybráno %d sloupců",
"_": "Vybráno %d sloupců" "0": "",
"1": "Vybrán 1 sloupec"
}, },
"rows": { "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": { "stateRestore": {
"creationModal": { "creationModal": {
"button": "Vytvořit", "button": "Vytvořit",
@@ -225,23 +225,24 @@
"order": "Řazení", "order": "Řazení",
"paging": "Stránkování", "paging": "Stránkování",
"scroller": "Pozice skrolování", "scroller": "Pozice skrolování",
"select": "Výběr",
"title": "Vytvořit nový Stav",
"toggleLabel": "Zahrnout",
"search": "Filtrování", "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.", "duplicateError": "Stav s tímto názvem již existuje.",
"emptyError": "Název nemůže být prázný.", "emptyError": "Název nemůže být prázdný.",
"emptyStates": "Žádné uložené stavy", "emptyStates": "Žádné uložené stavy",
"removeConfirm": "Opravdu chcete odstranbit %s?", "removeConfirm": "Opravdu chcete odstranit %s?",
"removeError": "Chyba při odstraňování stavu.", "removeError": "Chyba při odstraňování stavu.",
"removeJoiner": "a", "removeJoiner": "a",
"removeSubmit": "Odstranit", "removeSubmit": "Odstranit",
"removeTitle": "Odstranit Stav", "removeTitle": "Odstranit stav",
"renameButton": "Vymazat", "renameButton": "Vymazat",
"renameLabel": "Nové jméno pro %s:", "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": { "aria": {
"sortAscending": ": aktivieren, um Spalte aufsteigend zu sortieren", "paginate": {
"sortDescending": ": aktivieren, um Spalte absteigend zu sortieren" "first": "Erste",
}, "last": "Letzte",
"select": { "next": "Nächste",
"rows": { "previous": "Vorherige"
"_": "%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"
} }
}, },
"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": { "autoFill": {
"cancel": "Abbrechen", "cancel": "Abbrechen",
"fill": "Alle Zellen mit <i>%d<i> füllen<\/i><\/i>", "fill": "Alle Zellen mit <i>%d<i> füllen<\/i><\/i>",
"fillHorizontal": "Alle horizontalen Zellen füllen", "fillHorizontal": "Alle horizontalen Zellen füllen",
"fillVertical": "Alle vertikalen 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:", "search": "Suche:",
"searchBuilder": { "searchBuilder": {
"add": "Bedingung hinzufügen", "add": "Bedingung hinzufügen",
"button": { "button": {
"0": "Such-Baukasten", "_": "Such-Baukasten (%d)",
"_": "Such-Baukasten (%d)" "0": "Such-Baukasten"
}, },
"clearAll": "Alle entfernen",
"condition": "Bedingung", "condition": "Bedingung",
"conditions": { "conditions": {
"array": {
"contains": "enthält",
"empty": "ist leer",
"equals": "ist gleich",
"not": "ist ungleich",
"notEmpty": "ist nicht leer",
"without": "aber nicht"
},
"date": { "date": {
"after": "Nach", "after": "Nach",
"before": "Vor", "before": "Vor",
"between": "Zwischen", "between": "Zwischen",
"empty": "Leer", "empty": "Leer",
"equals": "Gleich",
"not": "Nicht", "not": "Nicht",
"notBetween": "Nicht zwischen", "notBetween": "Nicht zwischen",
"notEmpty": "Nicht leer", "notEmpty": "Nicht leer"
"equals": "Gleich"
}, },
"number": { "number": {
"between": "Zwischen", "between": "Zwischen",
@@ -103,114 +223,59 @@
"endsWith": "Endet mit", "endsWith": "Endet mit",
"equals": "Entspricht", "equals": "Entspricht",
"not": "Nicht", "not": "Nicht",
"notEmpty": "Nicht leer",
"startsWith": "Startet mit",
"notContains": "enthält nicht", "notContains": "enthält nicht",
"notEmpty": "Nicht leer",
"notEndsWith": "endet nicht mit",
"notStartsWith": "startet nicht mit", "notStartsWith": "startet nicht mit",
"notEndsWith": "endet nicht mit" "startsWith": "Startet mit"
},
"array": {
"equals": "ist gleich",
"empty": "ist leer",
"contains": "enthält",
"not": "ist ungleich",
"notEmpty": "ist nicht leer",
"without": "aber nicht"
} }
}, },
"data": "Daten", "data": "Daten",
"deleteTitle": "Filterregel entfernen", "deleteTitle": "Filterregel entfernen",
"leftTitle": "Äußere Kriterien", "leftTitle": "Äußere Kriterien",
"rightTitle": "Innere Kriterien",
"title": {
"0": "Such-Baukasten",
"_": "Such-Baukasten (%d)"
},
"value": "Wert",
"clearAll": "Alle entfernen",
"logicAnd": "Und", "logicAnd": "Und",
"logicOr": "Oder" "logicOr": "Oder",
"rightTitle": "Innere Kriterien",
"search": "Suche",
"title": {
"_": "Such-Baukasten (%d)",
"0": "Such-Baukasten"
},
"value": "Wert"
}, },
"searchPanes": { "searchPanes": {
"clearMessage": "Leeren", "clearMessage": "Leeren",
"collapse": { "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", "collapseMessage": "Alle einklappen",
"count": "{total}", "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": ".", "searchPlaceholder": "",
"zeroRecords": "Keine passenden Einträge gefunden", "select": {
"lengthMenu": "_MENU_ Zeilen anzeigen", "cells": {
"datetime": { "_": "%d Zellen ausgewählt",
"previous": "Vorher", "0": "",
"next": "Nachher", "1": "1 Zelle ausgewählt"
"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"
}, },
"remove": { "columns": {
"confirm": { "_": "%d Spalten ausgewählt",
"_": "Sollen %d Zeilen gelöscht werden?", "0": "",
"1": "Soll diese Zeile gelöscht werden?" "1": "1 Spalte ausgewählt"
},
"button": "Entfernen",
"title": "Entfernen",
"submit": "Entfernen"
}, },
"error": { "rows": {
"system": "Ein Systemfehler ist aufgetreten" "_": "%d Zeilen ausgewählt",
}, "0": "",
"multi": { "1": "1 Zeile ausgewählt"
"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"
} }
}, },
"searchPlaceholder": "Suchen...",
"stateRestore": { "stateRestore": {
"creationModal": { "creationModal": {
"button": "Erstellen", "button": "Erstellen",
@@ -231,13 +296,15 @@
"duplicateError": "Eine Ansicht mit diesem Namen existiert bereits.", "duplicateError": "Eine Ansicht mit diesem Namen existiert bereits.",
"emptyError": "Name darf nicht leer sein.", "emptyError": "Name darf nicht leer sein.",
"emptyStates": "Keine gespeicherten Ansichten", "emptyStates": "Keine gespeicherten Ansichten",
"removeConfirm": "Sicher dass %s entfernt werden soll?",
"removeError": "Entfernen der Ansicht fehlgeschlagen.", "removeError": "Entfernen der Ansicht fehlgeschlagen.",
"removeJoiner": " und ", "removeJoiner": " und ",
"removeSubmit": "Entfernen", "removeSubmit": "Entfernen",
"removeTitle": "Ansicht entfernen", "removeTitle": "Ansicht entfernen",
"renameButton": "Umbenennen", "renameButton": "Umbenennen",
"renameLabel": "Neuer Name für %s:", "renameLabel": "Neuer Name für %s:",
"renameTitle": "Ansicht umbenennen", "renameTitle": "Ansicht umbenennen"
"removeConfirm": "Sicher dass %s entfernt werden soll?" },
} "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": { "aria": {
"sortAscending": ": Activar para ordenar la columna de manera ascendente", "orderable": "Activar para ordenar",
"sortDescending": ": Activar para ordenar la columna de manera descendente" "orderableRemove": "Activar para quitar ordenación",
}, "orderableReverse": "Activar para ordenar de forma inversa",
"buttons": { "paginate": {
"copy": "Copiar", "first": "Primero",
"colvis": "Visibilidad", "last": "Último",
"collection": "Colección", "next": "Siguiente",
"colvisRestore": "Restaurar visibilidad", "previous": "Anterior"
"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"
}, },
"autoFill": { "autoFill": {
"cancel": "Cancelar", "cancel": "Cancelar",
"fill": "Rellene todas las celdas con <i>%d<\/i>", "fill": "Rellene todas las celdas con <i>%d<\/i>",
"fillHorizontal": "Rellenar celdas horizontalmente", "fillHorizontal": "Rellenar celdas horizontalmente",
"fillVertical": "Rellenar celdas verticalmente" "fillVertical": "Rellenar celdas verticalmente",
"info": ""
}, },
"decimal": ",", "buttons": {
"searchBuilder": { "collection": "Colección",
"add": "Añadir condición", "colvis": "Visibilidad",
"button": { "colvisRestore": "Restaurar visibilidad",
"0": "Constructor de búsqueda", "copy": "Copiar",
"_": "Constructor de búsqueda (%d)" "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", "copyTitle": "Copiar al portapapeles",
"condition": "Condición", "createState": "Crear Estado",
"conditions": { "csv": "CSV",
"date": { "excel": "Excel",
"before": "Antes", "pageLength": {
"between": "Entre", "_": "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", "empty": "Vacío",
"equals": "Igual a", "equal": "Igual a",
"notBetween": "No entre", "greater": "Mayor que",
"not": "Diferente de", "less": "Menor que",
"after": "Después", "notEmpty": "No vacío",
"notEmpty": "No Vacío" "notEqual": "Diferente de"
}, },
"number": { "number": {
"between": "Entre", "empty": "Vacío",
"equals": "Igual a", "equal": "Igual a",
"gt": "Mayor a", "greater": "Mayor que",
"gte": "Mayor o igual a", "greaterOrEqual": "Mayor o igual a",
"lt": "Menor que", "less": "Menor que",
"lte": "Menor o igual que", "lessOrEqual": "Menor o igual a",
"notBetween": "No entre",
"notEmpty": "No vacío", "notEmpty": "No vacío",
"not": "Diferente de", "notEqual": "Diferente de"
"empty": "Vacío"
}, },
"string": { "text": {
"contains": "Contiene", "contains": "Contiene",
"empty": "Vacío", "empty": "Vacío",
"endsWith": "Termina en", "ends": "Finaliza con",
"equals": "Igual a", "equal": "Igual a",
"startsWith": "Empieza con", "notContains": "no contiene",
"not": "Diferente de", "notEmpty": "No vacío",
"notContains": "No Contiene", "notEqual": "Diferente de",
"notStartsWith": "No empieza con", "starts": "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"
} }
}, },
"data": "Data", "searchClear": "Borrar búsqueda",
"deleteTitle": "Eliminar regla de filtrado", "searchDropdown": "Buscar"
"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"
}, },
"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": { "datetime": {
"previous": "Anterior", "amPm": {
"0": "AM",
"1": "PM"
},
"hours": "Horas", "hours": "Horas",
"minutes": "Minutos", "minutes": "Minutos",
"seconds": "Segundos",
"unknown": "-",
"amPm": [
"AM",
"PM"
],
"months": { "months": {
"0": "Enero", "0": "Enero",
"1": "Febrero", "1": "Febrero",
@@ -168,77 +121,193 @@
"8": "Septiembre", "8": "Septiembre",
"9": "Octubre" "9": "Octubre"
}, },
"next": "Próximo",
"previous": "Anterior",
"seconds": "Segundos",
"unknown": "-",
"weekdays": { "weekdays": {
"0": "Dom", "0": "Dom",
"1": "Lun", "1": "Lun",
"2": "Mar", "2": "Mar",
"3": "Mié",
"4": "Jue", "4": "Jue",
"5": "Vie", "5": "Vie",
"3": "Mié",
"6": "Sáb" "6": "Sáb"
}, }
"next": "Próximo"
}, },
"decimal": "",
"editor": { "editor": {
"close": "Cerrar", "close": "Cerrar",
"create": { "create": {
"button": "Nuevo", "button": "Nuevo",
"title": "Crear Nuevo Registro", "submit": "Crear",
"submit": "Crear" "title": "Crear Nuevo Registro"
}, },
"edit": { "edit": {
"button": "Editar", "button": "Editar",
"title": "Editar Registro", "submit": "Actualizar",
"submit": "Actualizar" "title": "Editar Registro"
},
"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?"
}
}, },
"error": { "error": {
"system": "Ha ocurrido un error en el sistema (<a target=\"\\\" rel=\"\\ nofollow\" href=\"\\\">Más información&lt;\\\/a&gt;).<\/a>" "system": "Ha ocurrido un error en el sistema (<a target=\"\\\" rel=\"\\ nofollow\" href=\"\\\">Más información&lt;\\\/a&gt;).<\/a>"
}, },
"multi": { "multi": {
"title": "Múltiples Valores", "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",
"noMulti": "Este registro puede ser editado individualmente, pero no como parte de un grupo.", "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", "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": { "stateRestore": {
"creationModal": { "creationModal": {
"button": "Crear", "button": "Crear",
"name": "Nombre:",
"order": "Clasificación",
"paging": "Paginación",
"select": "Seleccionar",
"columns": { "columns": {
"search": "Búsqueda de Columna", "search": "Búsqueda de Columna",
"visible": "Visibilidad de Columna" "visible": "Visibilidad de Columna"
}, },
"title": "Crear Nuevo Estado", "name": "Nombre:",
"toggleLabel": "Incluir:", "order": "Clasificación",
"paging": "Paginación",
"scroller": "Posición de desplazamiento", "scroller": "Posición de desplazamiento",
"search": "Búsqueda", "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.", "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.", "emptyError": "El nombre no puede estar vacío.",
"emptyStates": "No hay Estados guardados",
"removeConfirm": "¿Seguro que quiere eliminar %s?", "removeConfirm": "¿Seguro que quiere eliminar %s?",
"removeError": "Error al eliminar el Estado", "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", "aria": {
"loadingRecords": "Chargement...", "orderable": "Activer pour trier",
"processing": "Traitement...", "orderableRemove": "Activer pour supprimer le tri",
"select": { "orderableReverse": "Activer pour inverser le tri",
"rows": { "paginate": {
"_": "%d lignes sélectionnées", "first": "Première",
"1": "1 ligne sélectionnée" "last": "Dernière",
}, "next": "Suivante",
"cells": { "previous": "Précédente"
"1": "1 cellule sélectionnée",
"_": "%d cellules sélectionnées"
},
"columns": {
"1": "1 colonne sélectionnée",
"_": "%d colonnes sélectionnées"
} }
}, },
"autoFill": { "autoFill": {
"cancel": "Annuler", "cancel": "Annuler",
"fill": "Remplir toutes les cellules avec <i>%d<\/i>", "fill": "Remplir toutes les cellules avec <i>%d<\/i>",
"fillHorizontal": "Remplir les cellules horizontalement", "fillHorizontal": "Remplir les cellules horizontalement",
"fillVertical": "Remplir les cellules verticalement" "fillVertical": "Remplir les cellules verticalement",
}, "info": ""
"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"
}, },
"buttons": { "buttons": {
"collection": "Collection", "collection": "Collection",
"colvis": "Visibilité colonnes", "colvis": "Visibilité colonnes",
"colvisRestore": "Rétablir visibilité", "colvisRestore": "Rétablir visibilité",
"copy": "Copier", "copy": "Copier",
"copyKeys": "Appuyez sur ctrl ou u2318 + C pour copier les données du tableau dans votre presse-papier.",
"copySuccess": { "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", "copyTitle": "Copier dans le presse-papier",
"createState": "Créer un état",
"csv": "CSV", "csv": "CSV",
"excel": "Excel", "excel": "Excel",
"pageLength": { "pageLength": {
"-1": "Afficher toutes les lignes",
"_": "Afficher %d lignes", "_": "Afficher %d lignes",
"-1": "Afficher toutes les lignes",
"1": "Afficher 1 ligne" "1": "Afficher 1 ligne"
}, },
"pdf": "PDF", "pdf": "PDF",
"print": "Imprimer", "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", "removeAllStates": "Supprimer tous les états",
"removeState": "Supprimer", "removeState": "Supprimer",
"renameState": "Renommer", "renameState": "Renommer",
@@ -128,118 +45,270 @@
"stateRestore": "État %d", "stateRestore": "État %d",
"updateState": "Mettre à jour" "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": { "datetime": {
"previous": "Précédent", "amPm": {
"next": "Suivant", "0": "am",
"1": "pm"
},
"hours": "Heures", "hours": "Heures",
"minutes": "Minutes", "minutes": "Minutes",
"seconds": "Secondes",
"unknown": "-",
"amPm": [
"am",
"pm"
],
"months": { "months": {
"0": "Janvier", "0": "Janvier",
"1": "Février",
"10": "Novembre",
"11": "Décembre",
"2": "Mars", "2": "Mars",
"3": "Avril", "3": "Avril",
"4": "Mai", "4": "Mai",
"5": "Juin", "5": "Juin",
"6": "Juillet", "6": "Juillet",
"7": "Août",
"8": "Septembre", "8": "Septembre",
"9": "Octobre", "9": "Octobre"
"10": "Novembre",
"1": "Février",
"11": "Décembre",
"7": "Août"
}, },
"weekdays": [ "next": "Suivant",
"Dim", "previous": "Précédent",
"Lun", "seconds": "Secondes",
"Mar", "unknown": "-",
"Mer", "weekdays": {
"Jeu", "0": "Dim",
"Ven", "1": "Lun",
"Sam" "2": "Mar",
] "3": "Mer",
"4": "Jeu",
"5": "Ven",
"6": "Sam"
}
}, },
"decimal": "",
"editor": { "editor": {
"close": "Fermer", "close": "Fermer",
"create": { "create": {
"title": "Créer une nouvelle entrée",
"button": "Nouveau", "button": "Nouveau",
"submit": "Créer" "submit": "Créer",
"title": "Créer une nouvelle entrée"
}, },
"edit": { "edit": {
"button": "Editer", "button": "Editer",
"title": "Editer Entrée", "submit": "Mettre à jour",
"submit": "Mettre à jour" "title": "Editer Entrée"
},
"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. "
}, },
"error": { "error": {
"system": "Une erreur système s'est produite (<a target=\"\\\" rel=\"nofollow\" href=\"\\\">Plus d'information<\/a>)." "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": { "stateRestore": {
"removeSubmit": "Supprimer",
"creationModal": { "creationModal": {
"button": "Créer", "button": "Créer",
"order": "Tri",
"paging": "Pagination",
"scroller": "Position du défilement",
"search": "Recherche",
"select": "Sélection",
"columns": { "columns": {
"search": "Recherche par colonne", "search": "Recherche par colonne",
"visible": "Visibilité des colonnes" "visible": "Visibilité des colonnes"
}, },
"name": "Nom :", "name": "Nom :",
"order": "Tri",
"paging": "Pagination",
"scroller": "Position du défilement",
"search": "Recherche",
"searchBuilder": "Recherche avancée", "searchBuilder": "Recherche avancée",
"select": "Sélection",
"title": "Créer un nouvel état", "title": "Créer un nouvel état",
"toggleLabel": "Inclus :" "toggleLabel": "Inclus :"
}, },
"renameButton": "Renommer",
"duplicateError": "Il existe déjà un état avec ce nom.", "duplicateError": "Il existe déjà un état avec ce nom.",
"emptyError": "Le nom ne peut pas être vide.", "emptyError": "Le nom ne peut pas être vide.",
"emptyStates": "Aucun état sauvegardé", "emptyStates": "Aucun état sauvegardé",
"removeConfirm": "Voulez vous vraiment supprimer %s ?", "removeConfirm": "Voulez vous vraiment supprimer %s ?",
"removeError": "Échec de la suppression de l'état.", "removeError": "Échec de la suppression de l'état.",
"removeJoiner": "et", "removeJoiner": "et",
"removeSubmit": "Supprimer",
"removeTitle": "Supprimer l'état", "removeTitle": "Supprimer l'état",
"renameButton": "Renommer",
"renameLabel": "Nouveau nom pour %s :", "renameLabel": "Nouveau nom pour %s :",
"renameTitle": "Renommer l'état" "renameTitle": "Renommer l'état"
}, },
"info": "Affichage de _START_ à _END_ sur _TOTAL_ entrées", "thousands": " ",
"infoEmpty": "Affichage de 0 à 0 sur 0 entrées", "zeroRecords": "Aucune entrée correspondante trouvée"
"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": " "
} }

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": { "aria": {
"sortAscending": ": attiva per ordinare la colonna in ordine crescente", "orderable": "Ordinamento",
"sortDescending": ": attiva per ordinare la colonna in ordine decrescente" "orderableRemove": "Rimuovi ordinamento",
"orderableReverse": "Ordinamento inverso",
"paginate": {
"first": "Inizio",
"last": "Fine",
"next": "Successivo",
"previous": "Precedente"
}
}, },
"autoFill": { "autoFill": {
"cancel": "Annulla", "cancel": "Annulla",
"fill": "Riempi tutte le celle con <i>%d<\/i>", "fill": "Riempi tutte le celle con <i>%d<\/i>",
"fillHorizontal": "Riempi celle orizzontalmente", "fillHorizontal": "Riempi celle orizzontalmente",
"fillVertical": "Riempi celle verticalmente" "fillVertical": "Riempi celle verticalmente",
"info": ""
}, },
"buttons": { "buttons": {
"collection": "Collezione <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>", "collection": "Collezione <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
@@ -27,19 +24,20 @@
"copy": "Copia", "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.", "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": { "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", "copyTitle": "Copia nella Clipboard",
"createState": "Crea stato",
"csv": "CSV", "csv": "CSV",
"excel": "Excel", "excel": "Excel",
"pageLength": { "pageLength": {
"_": "Mostra %d righe",
"-1": "Mostra tutte le righe", "-1": "Mostra tutte le righe",
"_": "Mostra %d righe" "1": "Mostra 1 riga"
}, },
"pdf": "PDF", "pdf": "PDF",
"print": "Stampa", "print": "Stampa",
"createState": "Crea stato",
"removeAllStates": "Rimuovi tutti gli stati", "removeAllStates": "Rimuovi tutti gli stati",
"removeState": "Rimuovi", "removeState": "Rimuovi",
"renameState": "Rinomina", "renameState": "Rinomina",
@@ -47,138 +45,97 @@
"stateRestore": "Ripristina stato", "stateRestore": "Ripristina stato",
"updateState": "Aggiorna" "updateState": "Aggiorna"
}, },
"emptyTable": "Nessun dato disponibile nella tabella", "columnControl": {
"info": "Risultati da _START_ a _END_ di _TOTAL_ elementi", "buttons": {
"infoEmpty": "Risultati da 0 a 0 di 0 elementi", "searchClear": "Cancella ricerca"
"lengthMenu": "Mostra _MENU_ elementi",
"searchBuilder": {
"add": "Aggiungi Condizione",
"button": {
"0": "Generatore di Ricerca",
"_": "Generatori di Ricerca (%d)"
}, },
"clearAll": "Pulisci Tutto", "colVis": "Visibilità colonne",
"condition": "Condizione", "colVisDropdown": "Visibilità colonne",
"conditions": { "dropdown": "Altro...",
"date": { "list": {
"after": "Dopo", "all": "Seleziona tutto",
"before": "Prima", "empty": "Vuoto",
"between": "Tra", "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", "empty": "Vuoto",
"equals": "Uguale A", "equal": "Uguale a",
"not": "Non", "greater": "Dopo il",
"notBetween": "Non Tra", "less": "Prima del",
"notEmpty": "Non Vuoto" "notEmpty": "Non vuoto",
"notEqual": "Diverso da"
}, },
"number": { "number": {
"between": "Tra",
"empty": "Vuoto", "empty": "Vuoto",
"equals": "Uguale A", "equal": "Uguale a",
"gt": "Maggiore Di", "greater": "Maggiore di",
"gte": "Maggiore O Uguale A", "greaterOrEqual": "Maggiore o uguale a",
"lt": "Minore Di", "less": "Minore di",
"lte": "Minore O Uguale A", "lessOrEqual": "Minore o uguale a",
"not": "Non", "notEmpty": "Non vuoto",
"notBetween": "Non Tra", "notEqual": "Diverso da"
"notEmpty": "Non Vuoto"
}, },
"string": { "text": {
"contains": "Contiene", "contains": "Contiene",
"empty": "Vuoto", "empty": "Vuoto",
"endsWith": "Finisce Con", "ends": "Termina con",
"equals": "Uguale A", "equal": "Uguale a",
"not": "Non", "notContains": "Non contiene",
"notEmpty": "Non Vuoto", "notEmpty": "Non vuoto",
"startsWith": "Inizia Con", "notEqual": "Diverso da",
"notContains": "Non Contiene", "starts": "Inizia con"
"notStartsWith": "Non Inizia Con",
"notEndsWith": "Non Finisce Con"
},
"array": {
"equals": "Uguale A",
"empty": "Vuoto",
"contains": "Contiene",
"not": "Non",
"notEmpty": "Non Vuoto",
"without": "Senza"
} }
}, },
"data": "Dati", "searchClear": "Cancella ricerca",
"deleteTitle": "Elimina regola filtro", "searchDropdown": "Cerca"
"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"
}, },
"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": { "datetime": {
"amPm": [ "amPm": {
"am", "0": "am",
"pm" "1": "pm"
], },
"hours": "ore", "hours": "ore",
"minutes": "minuti", "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", "next": "successivo",
"previous": "precedente", "previous": "precedente",
"seconds": "secondi", "seconds": "secondi",
"unknown": "sconosciuto", "unknown": "sconosciuto",
"weekdays": [ "weekdays": {
"Dom", "0": "Dom",
"Lun", "1": "Lun",
"Mar", "2": "Mar",
"Mer", "3": "Mer",
"Gio", "4": "Gio",
"Ven", "5": "Ven",
"Sab" "6": "Sab"
], }
"months": [
"Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Agosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre"
]
}, },
"decimal": "",
"editor": { "editor": {
"close": "Chiudi", "close": "Chiudi",
"create": { "create": {
@@ -210,8 +167,115 @@
"title": "Rimuovi" "title": "Rimuovi"
} }
}, },
"thousands": ".", "emptyTable": "Nessun dato disponibile nella tabella",
"decimal": ",", "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": { "stateRestore": {
"creationModal": { "creationModal": {
"button": "Crea", "button": "Crea",
@@ -240,5 +304,7 @@
"renameButton": "Rinomina", "renameButton": "Rinomina",
"renameLabel": "Nuovo nome per %s:", "renameLabel": "Nuovo nome per %s:",
"renameTitle": "Rinomina Stato" "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": { "aria": {
"sortAscending": ": activeer om kolom oplopend te sorteren", "orderable": "Sorteren inschakelen",
"sortDescending": ": activeer om kolom aflopend te sorteren" "orderableRemove": "Sortering verwijderen",
"orderableReverse": "Sortering omkeren",
"paginate": {
"first": "Eerste",
"last": "Laatste",
"next": "Volgende",
"previous": "Vorige"
}
}, },
"autoFill": { "autoFill": {
"cancel": "Annuleren",
"fill": "Vul alle cellen met <i>%d<\/i>", "fill": "Vul alle cellen met <i>%d<\/i>",
"fillHorizontal": "Vul cellen horizontaal", "fillHorizontal": "Vul cellen horizontaal",
"fillVertical": "Vul cellen verticaal", "fillVertical": "Vul cellen verticaal",
"cancel": "Annuleren", "info": ""
"info": "Voorbeeld automatisch aanvullen info"
}, },
"buttons": { "buttons": {
"collection": "Verzameling",
"colvis": "Kolom zichtbaarheid", "colvis": "Kolom zichtbaarheid",
"colvisRestore": "Herstel zichtbaarheid", "colvisRestore": "Herstel zichtbaarheid",
"copy": "Kopieer", "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": { "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", "copyTitle": "Kopieer naar klembord",
"createState": "Maak staat",
"csv": "CSV", "csv": "CSV",
"excel": "Excel", "excel": "Excel",
"pageLength": { "pageLength": {
"-1": "Toon alle regels",
"_": "Toon %d regels", "_": "Toon %d regels",
"1": "Toon 1 rij" "-1": "Toon alle regels",
"1": "Toon 1 regel"
}, },
"pdf": "PDF", "pdf": "PDF",
"print": "Print", "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", "removeAllStates": "Verwijder alle",
"removeState": "Verwijder", "removeState": "Verwijder",
"renameState": "Hernoem", "renameState": "Hernoem",
"savedStates": "Opgeslagen", "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...", "processing": "Verwerken...",
"decimal": ",", "search": "Zoeken:",
"searchBuilder": { "searchBuilder": {
"add": "Toevoegen", "add": "Toevoegen",
"button": {
"_": "Zoekwizard (%d)",
"0": "Zoekwizard"
},
"clearAll": "Verwijder alles", "clearAll": "Verwijder alles",
"condition": "Conditie", "condition": "Conditie",
"data": "Data",
"deleteTitle": "Verwijder",
"value": "Waarde",
"conditions": { "conditions": {
"array": {
"contains": "Bevat",
"empty": "Leeg",
"equals": "Gelijk aan",
"not": "Niet",
"notEmpty": "Niet leeg",
"without": "Zonder"
},
"date": { "date": {
"after": "Na", "after": "Na",
"before": "Voor", "before": "Voor",
@@ -89,129 +226,57 @@
"endsWith": "Eindigt met", "endsWith": "Eindigt met",
"equals": "Gelijk aan", "equals": "Gelijk aan",
"not": "Niet", "not": "Niet",
"notEmpty": "Niet leeg",
"startsWith": "Start met",
"notContains": "Zonder", "notContains": "Zonder",
"notEndsWith": "Eindigt niet met",
"notStartsWith": "Begint niet met"
},
"array": {
"equals": "Gelijk aan",
"empty": "Leeg",
"contains": "Bevat",
"not": "Niet",
"notEmpty": "Niet leeg", "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", "logicAnd": "En",
"logicOr": "Of", "logicOr": "Of",
"button": {
"0": "Zoekwizard",
"_": "Zoekwizard (%d)"
},
"leftTitle": "Afwijkende criteria",
"rightTitle": "Criteria inspringen", "rightTitle": "Criteria inspringen",
"search": "Zoeken",
"title": { "title": {
"0": "Zoekwizard", "_": "Zoekwizard (%d) ",
"_": "Zoekwizard (%d) " "0": "Zoekwizard"
} },
"value": "Waarde"
}, },
"searchPanes": { "searchPanes": {
"clearMessage": "Alles leegmaken", "clearMessage": "Alles leegmaken",
"collapse": { "collapse": {
"0": "Zoekpanelen", "_": "Zoekpanelen (%d)",
"_": "Zoekpanelen (%d)" "0": "Zoekpanelen"
}, },
"collapseMessage": "Instorten",
"count": "{total}", "count": "{total}",
"countFiltered": "{shown} ({total})", "countFiltered": "{shown} ({total})",
"emptyMessage": "&lt;em&gt;Leeg&lt;\/em&gt;",
"emptyPanes": "Geen zoekpanelen", "emptyPanes": "Geen zoekpanelen",
"loadMessage": "Zoekpanelen laden...", "loadMessage": "Zoekpanelen laden...",
"title": "%d filters actief",
"showMessage": "Alles weergeven", "showMessage": "Alles weergeven",
"collapseMessage": "Instorten" "title": "%d filters actief"
}, },
"searchPlaceholder": "",
"select": { "select": {
"cells": { "cells": {
"1": "1 cel geselecteerd", "_": "%d cellen geselecteerd",
"_": "%d cellen geselecteerd" "0": "",
"1": "1 cel geselecteerd"
}, },
"columns": { "columns": {
"1": "1 kolom geselecteerd", "_": "%d kolommen geselecteerd",
"_": "%d kolommen geselecteerd" "0": "",
"1": "1 kolom geselecteerd"
}, },
"rows": { "rows": {
"1": "1 rij geselecteerd", "_": "%d rijen geselecteerd",
"_": "%d rijen geselecteerd" "0": "",
} "1": "1 rij 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."
} }
}, },
"stateRestore": { "stateRestore": {
@@ -242,5 +307,7 @@
"renameButton": "Hernoem", "renameButton": "Hernoem",
"renameLabel": "Nieuwe naam voor staat", "renameLabel": "Nieuwe naam voor staat",
"renameTitle": "Hernoem 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": { "aria": {
"sortAscending": ": aktywuj, by posortować kolumnę rosnąco", "orderable": "Aktywuj sortowanie",
"sortDescending": ": aktywuj, by posortować kolumnę malejąco" "orderableRemove": "Aktywuj, aby usunąć sortowanie",
"orderableReverse": "Aktywuj, aby odwrócić sortowanie",
"paginate": {
"first": "Pierwsza",
"last": "Ostatnia",
"next": "Następna",
"previous": "Poprzednia"
}
}, },
"autoFill": { "autoFill": {
"cancel": "Anuluj", "cancel": "Anuluj",
"fill": "Wypełnij wszystkie komórki <i>%d<\/i>", "fill": "Wypełnij wszystkie komórki <i>%d<\/i>",
"fillHorizontal": "Wypełnij komórki w poziomie", "fillHorizontal": "Wypełnij komórki w poziomie",
"fillVertical": "Wypełnij komórki w pionie" "fillVertical": "Wypełnij komórki w pionie",
"info": ""
}, },
"buttons": { "buttons": {
"collection": "Zbiór <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>", "collection": "Zbiór <span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"><\/span>",
@@ -30,19 +24,20 @@
"copy": "Kopiuj", "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.", "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": { "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", "copyTitle": "Skopiuj do schowka",
"createState": "Utwórz stan",
"csv": "CSV", "csv": "CSV",
"excel": "Excel", "excel": "Excel",
"pageLength": { "pageLength": {
"_": "Pokaż %d wierszy",
"-1": "Pokaż wszystkie wiersze", "-1": "Pokaż wszystkie wiersze",
"_": "Pokaż %d wierszy" "1": "Pokaż 1 wiersz"
}, },
"pdf": "PDF", "pdf": "PDF",
"print": "Drukuj", "print": "Drukuj",
"createState": "Utwórz stan",
"removeAllStates": "Usuń wszystkie stany", "removeAllStates": "Usuń wszystkie stany",
"removeState": "Usuń", "removeState": "Usuń",
"renameState": "Zmień nazwę", "renameState": "Zmień nazwę",
@@ -50,16 +45,150 @@
"stateRestore": "Stan %d", "stateRestore": "Stan %d",
"updateState": "Aktualizuj" "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", "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": { "searchBuilder": {
"add": "Dodaj warunek", "add": "Dodaj warunek",
"clearAll": "Wyczyść wszystko",
"condition": "Warunek",
"data": "Dane",
"button": { "button": {
"_": "Aktywne zapytania", "_": "Aktywne zapytania",
"0": "Budowanie zapytania" "0": "Budowanie zapytania"
}, },
"clearAll": "Wyczyść wszystko",
"condition": "Warunek",
"conditions": { "conditions": {
"array": { "array": {
"contains": "Zawiera", "contains": "Zawiera",
@@ -97,112 +226,57 @@
"endsWith": "Kończy się na", "endsWith": "Kończy się na",
"equals": "Równa się", "equals": "Równa się",
"not": "Nie", "not": "Nie",
"notEmpty": "Nie pusty",
"startsWith": "Zaczyna się od",
"notContains": "Nie zawiera", "notContains": "Nie zawiera",
"notEmpty": "Nie pusty",
"notEndsWith": "Nie kończy się na",
"notStartsWith": "Nie zaczyna się od", "notStartsWith": "Nie zaczyna się od",
"notEndsWith": "Nie kończy się na" "startsWith": "Zaczyna się od"
} }
}, },
"data": "Dane",
"deleteTitle": "Czyszczenie", "deleteTitle": "Czyszczenie",
"leftTitle": "Lewy", "leftTitle": "Lewy",
"logicAnd": "I", "logicAnd": "I",
"logicOr": "Lub", "logicOr": "Lub",
"rightTitle": "Prawy", "rightTitle": "Prawy",
"search": "Szukaj",
"title": { "title": {
"_": "Aktywne zapytania", "_": "Aktywne zapytania",
"0": "Budowanie zapytania" "0": "Budowanie zapytania"
}, },
"value": "Wartość" "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": { "searchPanes": {
"clearMessage": "Wyczyść wszystkie", "clearMessage": "Wyczyść wszystkie",
"collapse": { "collapse": {
"_": "Aktywne grupowania (%d)", "_": "Aktywne grupowania (%d)",
"0": "Grupowanie" "0": "Grupowanie"
}, },
"collapseMessage": "Rozwiń wszystko",
"count": "{total}", "count": "{total}",
"countFiltered": "{shown} ({total})", "countFiltered": "{shown} ({total})",
"emptyMessage": "&lt;em&gt;brak danych&lt;\/em&gt;",
"emptyPanes": "Brak paneli wyszukań", "emptyPanes": "Brak paneli wyszukań",
"loadMessage": "Ładuję panele wyszukań", "loadMessage": "Ładuję panele wyszukań",
"title": "Aktywne filtry",
"showMessage": "Pokaż wszystko", "showMessage": "Pokaż wszystko",
"collapseMessage": "Rozwiń wszystko" "title": "Aktywne filtry"
}, },
"searchPlaceholder": "",
"select": { "select": {
"cells": { "cells": {
"_": "zaznaczono %d komórek", "_": "zaznaczono %d komórek",
"0": "",
"1": "zaznaczono %d komórkę" "1": "zaznaczono %d komórkę"
}, },
"columns": { "columns": {
"_": "zaznaczono %d kolumn", "_": "zaznaczono %d kolumn",
"0": "",
"1": "zaznaczono %d kolumnę" "1": "zaznaczono %d kolumnę"
},
"rows": {
"_": "Zaznaczono %d wierszy",
"0": "",
"1": "Zaznaczono 1 wiersz"
} }
}, },
"stateRestore": { "stateRestore": {
@@ -234,7 +308,6 @@
"renameLabel": "Nowa nazwa dla %s:", "renameLabel": "Nowa nazwa dla %s:",
"renameTitle": "Zmień nazwę stanu" "renameTitle": "Zmień nazwę stanu"
}, },
"decimal": ",", "thousands": " ",
"infoThousands": " ", "zeroRecords": "Nie znaleziono pasujących pozycji"
"thousands": " "
} }

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": { "aria": {
"sortAscending": ": активировать для сортировки столбца по возрастанию", "paginate": {
"sortDescending": ": активировать для сортировки столбца по убыванию" "first": "Первая",
}, "last": "Последняя",
"select": { "next": "Следующая",
"rows": { "previous": "Предыдущая"
"_": "Выбрано записей: %d",
"1": "Выбрана одна запись"
},
"cells": {
"_": "Выбрано %d ячеек",
"1": "Выбрана 1 ячейка "
},
"columns": {
"1": "Выбран 1 столбец ",
"_": "Выбрано %d столбцов "
} }
}, },
"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": { "autoFill": {
"cancel": "Отменить", "cancel": "Отменить",
"fill": "Заполнить все ячейки <i>%d<i><\/i><\/i>", "fill": "Заполнить все ячейки <i>%d<i><\/i><\/i>",
"fillHorizontal": "Заполнить ячейки по горизонтали", "fillHorizontal": "Заполнить ячейки по горизонтали",
"fillVertical": "Заполнить ячейки по вертикали", "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": { "datetime": {
"previous": "Предыдущий", "amPm": {
"next": "Следующий", "0": "AM",
"1": "PM"
},
"hours": "Часы", "hours": "Часы",
"minutes": "Минуты", "minutes": "Минуты",
"seconds": "Секунды",
"unknown": "Неизвестный",
"amPm": [
"AM",
"PM"
],
"months": { "months": {
"0": "Январь", "0": "Январь",
"1": "Февраль", "1": "Февраль",
@@ -172,52 +62,161 @@
"8": "Сентябрь", "8": "Сентябрь",
"9": "Октябрь" "9": "Октябрь"
}, },
"weekdays": [ "next": "Следующий",
"Вс", "previous": "Предыдущий",
"Пн", "seconds": "Секунды",
"Вт", "unknown": "Неизвестный",
"Ср", "weekdays": {
"Чт", "0": "Вс",
"Пт", "1": "Пн",
"Сб" "2": "Вт",
] "3": "Ср",
"4": "Чт",
"5": "Пт",
"6": "Сб"
}
}, },
"decimal": "",
"editor": { "editor": {
"close": "Закрыть", "close": "Закрыть",
"create": { "create": {
"button": "Новый", "button": "Новый",
"title": "Создать новую запись", "submit": "Создать",
"submit": "Создать" "title": "Создать новую запись"
}, },
"edit": { "edit": {
"button": "Изменить", "button": "Изменить",
"title": "Изменить запись", "submit": "Изменить",
"submit": "Изменить" "title": "Изменить запись"
},
"remove": {
"button": "Удалить",
"title": "Удалить",
"submit": "Удалить",
"confirm": {
"_": "Вы точно хотите удалить %d строк?",
"1": "Вы точно хотите удалить 1 строку?"
}
},
"multi": {
"restore": "Отменить изменения",
"title": "Несколько значений",
"info": "Выбранные элементы содержат разные значения для этого входа. Чтобы отредактировать и установить для всех элементов этого ввода одинаковое значение, нажмите или коснитесь здесь, в противном случае они сохранят свои индивидуальные значения.",
"noMulti": "Это поле должно редактироваться отдельно, а не как часть группы"
}, },
"error": { "error": {
"system": "Возникла системная ошибка (<a target=\"\\\" rel=\"nofollow\" href=\"\\\">Подробнее<\/a>)." "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": { "stateRestore": {
"creationModal": { "creationModal": {
"button": "Создать", "button": "Создать",
"search": "Поиск",
"columns": { "columns": {
"search": "Поиск по столбцам", "search": "Поиск по столбцам",
"visible": "Видимость столбцов" "visible": "Видимость столбцов"
@@ -226,22 +225,24 @@
"order": "Сортировка", "order": "Сортировка",
"paging": "Страницы", "paging": "Страницы",
"scroller": "Позиция прокрутки", "scroller": "Позиция прокрутки",
"search": "Поиск",
"searchBuilder": "Редактор поиска", "searchBuilder": "Редактор поиска",
"select": "Выделение", "select": "Выделение",
"title": "Создать новое состояние", "title": "Создать новое состояние",
"toggleLabel": "Включает:" "toggleLabel": "Включает:"
}, },
"removeJoiner": "и",
"removeSubmit": "Удалить",
"renameButton": "Переименовать",
"duplicateError": "Состояние с таким именем уже существует.", "duplicateError": "Состояние с таким именем уже существует.",
"emptyError": "Имя не может быть пустым.", "emptyError": "Имя не может быть пустым.",
"emptyStates": "Нет сохраненных состояний", "emptyStates": "Нет сохраненных состояний",
"removeConfirm": "Вы уверены, что хотите удалить %s?", "removeConfirm": "Вы уверены, что хотите удалить %s?",
"removeError": "Не удалось удалить состояние.", "removeError": "Не удалось удалить состояние.",
"removeJoiner": "и",
"removeSubmit": "Удалить",
"removeTitle": "Удалить состояние", "removeTitle": "Удалить состояние",
"renameButton": "Переименовать",
"renameLabel": "Новое имя для %s:", "renameLabel": "Новое имя для %s:",
"renameTitle": "Переименовать состояние" "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": "處理中...", "aria": {
"loadingRecords": "載入中...", "paginate": {
"paginate": { "first": "第一頁",
"first": "一頁", "last": "最後一頁",
"previous": "一頁", "next": "一頁",
"next": "一頁", "previous": "一頁"
"last": "最後一頁" }
},
"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": { "datetime": {
"previous": "上一頁", "amPm": {
"next": "下一頁", "0": "上午",
"1": "下午"
},
"hours": "時", "hours": "時",
"minutes": "分", "minutes": "分",
"months": {
"0": "一月",
"1": "二月",
"10": "十一月",
"11": "十二月",
"2": "三月",
"3": "四月",
"4": "五月",
"5": "六月",
"6": "七月",
"7": "八月",
"8": "九月",
"9": "十月"
},
"next": "下一頁",
"previous": "上一頁",
"seconds": "秒", "seconds": "秒",
"amPm": [
"上午",
"下午"
],
"unknown": "未知", "unknown": "未知",
"weekdays": [ "weekdays": {
"週日", "0": "週日",
"週一", "1": "週一",
"週二", "2": "週二",
"週三", "3": "週三",
"週四", "4": "週四",
"週五", "5": "週五",
"週六" "6": "週六"
], }
"months": [
"一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月"
]
}, },
"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": { "searchBuilder": {
"add": "新增條件", "add": "新增條件",
"condition": "條件",
"button": { "button": {
"_": "複合查詢 (%d)", "_": "複合查詢 (%d)",
"0": "複合查詢" "0": "複合查詢"
}, },
"clearAll": "清空", "clearAll": "清空",
"condition": "條件",
"conditions": { "conditions": {
"array": { "array": {
"contains": "含有", "contains": "含有",
"equals": "等於",
"empty": "空值", "empty": "空值",
"equals": "等於",
"not": "不等於", "not": "不等於",
"notEmpty": "非空值", "notEmpty": "非空值",
"without": "不含" "without": "不含"
@@ -88,14 +159,15 @@
"endsWith": "字尾為", "endsWith": "字尾為",
"equals": "等於", "equals": "等於",
"not": "不為", "not": "不為",
"notEmpty": "不為空",
"startsWith": "字首為",
"notContains": "不含", "notContains": "不含",
"notEmpty": "不為空",
"notEndsWith": "結尾不是",
"notStartsWith": "開頭不是", "notStartsWith": "開頭不是",
"notEndsWith": "結尾不是" "startsWith": "字首為"
} }
}, },
"data": "欄位", "data": "欄位",
"deleteTitle": "刪除篩選條件",
"leftTitle": "群組條件", "leftTitle": "群組條件",
"logicAnd": "且", "logicAnd": "且",
"logicOr": "或", "logicOr": "或",
@@ -104,85 +176,41 @@
"_": "複合查詢 (%d)", "_": "複合查詢 (%d)",
"0": "複合查詢" "0": "複合查詢"
}, },
"value": "內容", "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": "更多"
}, },
"searchPanes": { "searchPanes": {
"clearMessage": "清空",
"collapse": { "collapse": {
"_": "搜尋面版 (%d)", "_": "搜尋面版 (%d)",
"0": "搜尋面版" "0": "搜尋面版"
}, },
"emptyPanes": "沒搜尋面版", "collapseMessage": "摺疊全部",
"loadMessage": "載入搜尋面版中...",
"clearMessage": "清空",
"count": "{total}", "count": "{total}",
"countFiltered": "{shown} ({total})", "countFiltered": "{shown} ({total})",
"emptyPanes": "沒搜尋面版",
"loadMessage": "載入搜尋面版中...",
"showMessage": "顯示全部", "showMessage": "顯示全部",
"collapseMessage": "摺疊全部",
"title": "篩選條件 - %d" "title": "篩選條件 - %d"
}, },
"searchPlaceholder": "",
"select": {
"cells": {
"_": "選擇了 %d 格資料",
"0": "",
"1": "選擇了 1 格資料"
},
"columns": {
"_": "選擇了 %d 欄資料",
"0": "",
"1": "選擇了 1 欄資料"
},
"rows": {
"_": "選擇了 %d 筆資料",
"0": "",
"1": "選擇了 1 筆資料"
}
},
"stateRestore": { "stateRestore": {
"emptyError": "名稱不能空白。",
"creationModal": { "creationModal": {
"button": "建立", "button": "建立",
"columns": { "columns": {
@@ -200,6 +228,7 @@
"toggleLabel": "包含:" "toggleLabel": "包含:"
}, },
"duplicateError": "此狀態名稱已經存在。", "duplicateError": "此狀態名稱已經存在。",
"emptyError": "名稱不能空白。",
"emptyStates": "名稱不可空白。", "emptyStates": "名稱不可空白。",
"removeConfirm": "確定要移除 %s 嗎?", "removeConfirm": "確定要移除 %s 嗎?",
"removeError": "移除狀態失敗。", "removeError": "移除狀態失敗。",
@@ -210,31 +239,6 @@
"renameLabel": "%s 的新名稱:", "renameLabel": "%s 的新名稱:",
"renameTitle": "重新命名狀態" "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": ",", "thousands": ",",
"infoFiltered": "(從 _MAX_ 筆結果中篩選)" "zeroRecords": "沒有符合的資料"
} }

View File

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

View File

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

View File

@@ -1,6 +1,27 @@
{% load i18n %} {% load i18n %}
{% load humanize %} {% 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 %} {% if debug %}
<div id="aa-dashboard-panel-debug" class="col-12 mb-3"> <div id="aa-dashboard-panel-debug" class="col-12 mb-3">
<div class="card text-bg-warning"> <div class="card text-bg-warning">
@@ -111,23 +132,27 @@
<div> <div>
<p> <p>
{% blocktranslate with total=tasks_total|intcomma latest=earliest_task|timesince|default:"?" %} {% 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 %} {% endblocktranslate %}
</p> </p>
<div <div
class="progress" id="celery-tasks-progress-bar"
class="progress mb-2"
style="height: 21px;" 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="succeeded" level="success" tasks_count=0 %}
{% 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="retried" level="info" tasks_count=0 %}
{% 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="failed" level="danger" tasks_count=0 %}
</div> </div>
<p> <p>
<span id="task-counts">?</span> {% translate 'running' %} | <span id="running-task-count">?</span> {{ l10nRunning }} |
<span id="queued-tasks-count">?</span> {% translate 'queued' %} <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> </p>
</div> </div>
</div> </div>
@@ -136,24 +161,24 @@
</div> </div>
<script> <script>
const elemRunning = document.getElementById('task-counts'); const taskQueueSettings = {
const elemQueued = document.getElementById('queued-tasks-count'); url: '{% url "authentication:task_counts" %}',
l10n: {
fetchGet({url: '{% url "authentication:task_counts" %}'}) language: '{{ LANGUAGE_CODE }}',
.then((data) => { second_singular: '{{ l10nSecondSingular|escapejs }}',
const running = data.tasks_running; second_plural: '{{ l10nSecondPlural|escapejs }}',
const queued = data.tasks_queued; minute_singular: '{{ l10nMinuteSingular|escapejs }}',
minute_plural: '{{ l10nMinutePlural|escapejs }}',
const updateTaskCount = (element, value) => { hour_singular: '{{ l10nHourSingular|escapejs }}',
element.textContent = value == null ? 'N/A' : value.toLocaleString(); hour_plural: '{{ l10nHourPlural|escapejs }}',
}; na: '{{ l10nNA|escapejs }}',
error: '{{ l10nError|escapejs }}',
updateTaskCount(elemRunning, running); running: '{{ l10nRunning|escapejs }}',
updateTaskCount(elemQueued, queued); queued: '{{ l10nQueued|escapejs }}',
}) succeeded: '{{ l10nSucceeded|escapejs }}',
.catch((error) => { retried: '{{ l10nRetried|escapejs }}',
console.error('Error fetching task queue:', error); failed: '{{ l10nFailed|escapejs }}'
}
[elemRunning, elemQueued].forEach(elem => elem.textContent = 'ERROR'); };
});
</script> </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> <title>{% block title %}{% block page_title %}{% endblock page_title %} - {{ SITE_NAME }}{% endblock title %}</title>
{% include 'bundles/auth-framework-css.html' %}
{% theme_css %} {% theme_css %}
{% include 'bundles/fontawesome.html' %} {% include 'bundles/fontawesome.html' %}
{% include 'bundles/auth-framework-css.html' %}
{% include 'bundles/jquery-js.html' %} {% include 'bundles/jquery-js.html' %}
{% include 'bundles/auth-framework-js.html' %} {% include 'bundles/auth-framework-js.html' %}
@@ -101,44 +102,7 @@
</main> </main>
<!-- End Body --> <!-- End Body -->
<script> {% include "bundles/auth-sidebar-collapse-js.html" %}
(() => {
// 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>
{% theme_js %} {% theme_js %}

View File

@@ -1,21 +1,17 @@
{% load i18n %} {% load i18n %}
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li class="nav-item"> {% translate "Add Character" as nav_item_title %}
<a href="{% url 'authentication:add_character' %}" class="nav-link" title="{% translate 'Add Character' %}"> {% url "authentication:add_character" as nav_item_link %}
<i class="fa-solid fa-user-plus"></i> {% 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 %}
<span class="d-lg-none d-md-inline m-2">{% translate "Add Character" %}</span>
</a> {% translate "Change Main" as nav_item_title %}
</li> {% url "authentication:change_main_character" as nav_item_link %}
<li class="nav-item"> {% 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 %}
<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>
{% else %} {% else %}
<li class="nav-item"> <li class="nav-item">
<a href="{% url 'authentication:login' %}" class="nav-link" title="{% translate 'Sign In' %}"> <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" %} <i class="fa-solid fa-right-to-bracket fa-fw me-2"></i> {% translate "Sign In" %}
</a> </a>
</li> </li>
{% endif %} {% 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) mapped_language = get_datatable_language_code(language)
static_url = ( static_url = (
static( 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 if mapped_language
else "" else ""

View File

@@ -37,7 +37,8 @@ def get_theme(request):
def get_theme_context(request): def get_theme_context(request):
return { 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