Skip to content

Commit f1fcc12

Browse files
authored
Merge pull request #83 from MightyMCoder/develop-4.3
Develop 4.3
2 parents 72b98ac + 1e067b4 commit f1fcc12

File tree

8 files changed

+164
-102
lines changed

8 files changed

+164
-102
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import os, re, xml.etree.ElementTree as ET
2+
import argparse
3+
4+
p = argparse.ArgumentParser()
5+
p.add_argument('--exclude', default='', help='Comma‑separated dirs to skip')
6+
args = p.parse_args()
7+
excl = {d.strip() for d in args.exclude.split(',') if d.strip()}
8+
9+
root = ET.parse('languages/en.xml').getroot()
10+
keys = [e.attrib['name'] for e in root.findall('.//string')
11+
if re.fullmatch(r'[A-Z0-9_]+', e.attrib['name'])]
12+
13+
unused = []
14+
for k in keys:
15+
used = False
16+
for dp, _, fs in os.walk('.'):
17+
if any(part in excl for part in dp.split(os.sep)):
18+
continue
19+
for f in fs:
20+
if f.endswith(('.php','.js','.html','.tpl')):
21+
if k in open(os.path.join(dp, f), 'r', errors='ignore').read():
22+
used = True; break
23+
if used: break
24+
if not used:
25+
unused.append(k)
26+
27+
if unused:
28+
for k in unused:
29+
print(f"UNUSED: {k}")
30+
exit(1) # triggers warning via continue-on-error

.github/scripts/sort_en_xml.py

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,38 @@
1-
import xml.etree.ElementTree as ET
1+
from lxml import etree
22

33
file = 'languages/en.xml'
4-
tree = ET.parse(file)
4+
5+
# Load XML with comments preserved
6+
parser = etree.XMLParser(remove_blank_text=False)
7+
tree = etree.parse(file, parser)
58
root = tree.getroot()
6-
root[:] = sorted(root, key=lambda e: e.attrib.get('name',''))
7-
ET.indent(tree, space=" ")
8-
tree.write(file, encoding='utf-8', xml_declaration=True)
9+
10+
new_children = []
11+
buffer = []
12+
13+
def flush_buffer():
14+
"""Sort and add all <string> elements in the buffer."""
15+
if buffer:
16+
sorted_strings = sorted(buffer, key=lambda e: e.attrib.get('name', ''))
17+
new_children.extend(sorted_strings)
18+
buffer.clear()
19+
20+
for elem in root.iterchildren():
21+
if isinstance(elem, etree._Comment):
22+
flush_buffer()
23+
new_children.append(elem)
24+
elif elem.tag == 'string':
25+
buffer.append(elem)
26+
else:
27+
flush_buffer()
28+
new_children.append(elem)
29+
30+
# Flush anything left at the end
31+
flush_buffer()
32+
33+
# Replace root content
34+
root[:] = new_children
35+
36+
# Save result
37+
tree.write(file, encoding='utf-8', xml_declaration=True, pretty_print=True)
938
print("en.xml successfully sorted.")
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: Check Unused Strings
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
paths:
8+
- languages/en.xml
9+
pull_request:
10+
branches:
11+
- master
12+
paths:
13+
- languages/en.xml
14+
workflow_dispatch:
15+
16+
permissions:
17+
contents: read
18+
pull-requests: write
19+
20+
jobs:
21+
unused-strings:
22+
runs-on: ubuntu-latest
23+
steps:
24+
- uses: actions/checkout@v3
25+
with:
26+
fetch-depth: 0
27+
28+
- name: Set up Python
29+
uses: actions/setup-python@v4
30+
with:
31+
python-version: '3.x'
32+
33+
- name: Run unused‑string checker
34+
id: check
35+
run: |
36+
python .github/scripts/check_unused_strings.py --exclude .github > unused_keys.txt
37+
38+
- name: Annotate warning if unused
39+
if: failure()
40+
continue-on-error: true
41+
run: |
42+
echo "::warning file=en.xml::Detected unused translation keys. Please review."
43+
44+
- name: Post PR review with unused keys
45+
if: ${{ github.event_name == 'pull_request' && failure() }}
46+
continue-on-error: true
47+
env:
48+
GITHUB_TOKEN: ${{ github.token }}
49+
run: |
50+
PR_NUMBER=$(jq --raw-output .number "$GITHUB_EVENT_PATH")
51+
BODY=$(echo -e "**WARNING: Unused translation keys detected**\n\n\`\`\`\n$(cat unused_keys.txt)\n\`\`\`\nPlease consider removing or using these keys." | jq -Rs .)
52+
53+
curl -s -X POST -H "Authorization: Bearer $GITHUB_TOKEN" \
54+
-H "Content-Type: application/json" \
55+
https://api.github.com/repos/${{ github.repository }}/pulls/$PR_NUMBER/reviews \
56+
-d "{\"body\": $BODY, \"event\": \"REQUEST_CHANGES\"}"

.github/workflows/sort-en-xml.yml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
name: Sort en.xml
22

33
on:
4+
push:
5+
branches:
6+
- master
7+
paths:
8+
- languages/en.xml
49
workflow_dispatch:
510

611
jobs:
@@ -15,15 +20,21 @@ jobs:
1520
with:
1621
python-version: '3.x'
1722

18-
- name: Sort en.xml
23+
- name: Install lxml
24+
run: pip install lxml
25+
26+
- name: Run sort script
1927
run: python .github/scripts/sort_en_xml.py
2028

21-
- name: Commit sorted file
29+
- name: Commit and push changes
2230
run: |
2331
git config user.name "github-actions"
2432
git config user.email "actions@users.noreply.github.com"
25-
git add languages/en.xml
26-
if ! git diff --quiet; then
33+
34+
if git diff --quiet; then
35+
echo "No changes detected."
36+
else
37+
git add languages/en.xml
2738
git commit -m "chore: sort en.xml alphabetically"
2839
git push
2940
fi

languages/de-DE.xml

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
<string name="PLG_INVENTORY_MANAGER_ALLOW_NEGATIVE_NUMBERS_DESC">Soll es möglich sein, negative Zahlen für Felder des Types "Zahl" oder "Dezimalzahl" einzugeben, so ist der Haken zu setzen. </string>
1515
<string name="PLG_INVENTORY_MANAGER_BASED_ON">(basierend auf #VAR1#)</string>
1616
<string name="PLG_INVENTORY_MANAGER_CATEGORY">Kategorie</string>
17-
<string name="PLG_INVENTORY_MANAGER_CONFIGURATION">Konfiguration</string>
1817
<string name="PLG_INVENTORY_MANAGER_CONNECTION_ERROR">Es konnte keine Verbindung zur GitHub-Relaseseite hergestellt werden! Bitte prüfen Sie Ihre Internetverbindung oder versuchen Sie es zu einem späteren Zeitpunkt nocheinmal. Alternativ können Sie auch manuell auf der Webseite von #VAR1# prüfen ob ein Update vorliegt.</string>
1918
<string name="PLG_INVENTORY_MANAGER_COPY_PREFERENCES">Einstellungen für das Kopieren eines Gegenstandes:</string>
2019
<string name="PLG_INVENTORY_MANAGER_CREATED_WITH">erstellt mit dem Plugin InventoryManager der Online-Mitgliederverwaltung Admidio</string>
@@ -39,7 +38,6 @@
3938
<string name="PLG_INVENTORY_MANAGER_DOCUMENTATION_OPEN_DESC">Hiermit können Sie die Dokumentation zum Plugin öffnen (Eine bestehende Internetverbindung wird vorausgesetzt, da sich die Daten auf GitHub befinden).</string>
4039
<string name="PLG_INVENTORY_MANAGER_DOWNLOAD_PAGE">Gehe zur GitHub-Relaseseite</string>
4140
<string name="PLG_INVENTORY_MANAGER_EXPORT">Export</string>
42-
<string name="PLG_INVENTORY_MANAGER_EXPORT_AND_FILTER">Export und Filter</string>
4341
<string name="PLG_INVENTORY_MANAGER_FIELD">Feld einer lfd. Nr.</string>
4442
<string name="PLG_INVENTORY_MANAGER_FIELD_DESC">Hier können Sie ein Feld mit einer laufenden Nummer auswählen. Bei einer Auswahl wird die aktuelle Nummer ausgelesen und entsprechend der angegebenen Anzahl erhöht.\n\nHINWEIS: InventoryManager kann nur erkennen, ob ein Datenfeld vom Typ "Zahl" ist. Ob in diesem Datenfeld eine laufende Nummer gespeichert ist, kann nicht erkannt werden.</string>
4543
<string name="PLG_INVENTORY_MANAGER_FILE_NAME">Dateiname</string>
@@ -50,20 +48,16 @@
5048
<string name="PLG_INVENTORY_MANAGER_IMPORT">Import</string>
5149
<string name="PLG_INVENTORY_MANAGER_IMPORT_DESC">Hier können Sie Gegenstände aus einer vorherigen Exportdatei oder einer eigenen Datei importieren.</string>
5250
<string name="PLG_INVENTORY_MANAGER_IMPORT_ASSIGN_FIELDS">In der linken Spalte der nachfolgenden Tabelle werden alle Eigenschaftsfelder angezeigt. In der rechten Spalte werden in einer Auswahlliste die Spalten aus der zu importierenden Datei angezeigt. Alle Spalten aus der Datei, die Sie importieren möchten, sollten Sie nun einem Eigenschaftsfeld zuordnen.</string>
53-
<string name="PLG_INVENTORY_MANAGER_IMPORT_ITEMS">Gegenstände importieren</string>
54-
<string name="PLG_INVENTORY_MANAGER_IMPORT_PROGRESS">Der Gegenstand #VAR1_BOLD# wurde #VAR2_BOLD# importiert.</string>
5551
<string name="PLG_INVENTORY_MANAGER_IMPORT_UNUSED_HEAD">Folgenden Spalten der Importdatei sind keine Felder im InventoryManager zugeordnet:</string>
5652
<string name="PLG_INVENTORY_MANAGER_INVENTORY_MANAGER">Inventarverwaltung</string>
5753
<string name="PLG_INVENTORY_MANAGER_ITEM">Gegenstand</string>
5854
<string name="PLG_INVENTORY_MANAGER_ITEM_COPY">Gegenstand kopieren</string>
5955
<string name="PLG_INVENTORY_MANAGER_ITEM_CREATE">Neuen Gegenstand anlegen</string>
60-
<string name="PLG_INVENTORY_MANAGER_ITEM_CREATE_DESC">Hier können Sie einzelne Gegenstände dem Inventar hinzufügen.\n\nHinweis: In der Ansicht "Gegenstand ändern" ist es über den Menüpunkt "Gegenstand kopieren" möglich, einen vorhandenen Gegenstand einfach oder mehrfach zu kopieren.</string>
6156
<string name="PLG_INVENTORY_MANAGER_ITEM_DELETE">Gegenstand löschen</string>
6257
<string name="PLG_INVENTORY_MANAGER_ITEM_DELETE_DESC">Soll dieser Gegenstand gelöscht werden?</string>
6358
<string name="PLG_INVENTORY_MANAGER_ITEM_DELETED">Gegenstand gelöscht</string>
6459
<string name="PLG_INVENTORY_MANAGER_ITEM_EDIT">Gegenstand ändern</string>
6560
<string name="PLG_INVENTORY_MANAGER_ITEM_MADE_TO_FORMER">Gegenstand ausgesondert</string>
66-
<string name="PLG_INVENTORY_MANAGER_ITEM_PRINT">Gegenstandsdaten drucken</string>
6761
<string name="PLG_INVENTORY_MANAGER_ITEM_UNDO_FORMER">Aussonderung des Gegenstandes rückgängig gemacht</string>
6862
<string name="PLG_INVENTORY_MANAGER_ITEM_UNDO_FORMER_DESC">Sie könnent den Gegenstand wieder in die Inventarverwaltung aufnehmen.\n\nWenn Sie Löschen auswählen, wird der Datensatz unwiderruflich aus der Datenbank entfernt und es ist später nicht mehr möglich Daten dieses Gegenstandes einzusehen.</string>
6963
<string name="PLG_INVENTORY_MANAGER_ITEMFIELD">Eigenschaftsfeld</string>
@@ -76,13 +70,11 @@
7670
<string name="PLG_INVENTORY_MANAGER_ITEMFIELDSMANAGE">Felder pflegen</string>
7771
<string name="PLG_INVENTORY_MANAGER_ITEMFIELDSMANAGE_DESC">In der Felderpflege können Sie Eigenschaftsfelder für Gegenstände anlegen und bearbeiten.</string>
7872
<string name="PLG_INVENTORY_MANAGER_ITEMLIST">Gegenstandsliste</string>
79-
<string name="PLG_INVENTORY_MANAGER_ITEMNAME">Gegenstandsname</string>
8073
<string name="PLG_INVENTORY_MANAGER_KEEPER">Verwalter</string>
8174
<string name="PLG_INVENTORY_MANAGER_KEEPER_FORMER_DESC">Sie können den Gegenstand als ausgesondert markieren. Dies hat den Vorteil, dass die Daten erhalten bleiben und Sie später immer wieder sehen können, wer diesen Gegenstand ausgeliehen hat.\n\nWenn Sie den Gegenstand löschen möchten, wenden Sie sich an einen Administrator oder den Verwalter der Inventarverwaltung!</string>
8275
<string name="PLG_INVENTORY_MANAGER_KEEPER_ITEM_UNDO_FORMER_DESC">Sie können den Gegenstand wieder in die Inventarverwaltung aufnehmen.\n\nWenn Sie den Gegenstand löschen möchten, wenden Sie sich an einen Administrator oder den Verwalter der Inventarverwaltung!</string>
8376
<string name="PLG_INVENTORY_MANAGER_MENU_URL_ERROR">Die Authorisierungsprüfung des Plugins ist fehlgeschlagen. Es ist mehr als ein Menüpunkt mit derselben URL definiert.\n\n=> #VAR1_BOLD#</string>
8477
<string name="PLG_INVENTORY_MANAGER_NAME_OF_PLUGIN">InventoryManager</string>
85-
<string name="PLG_INVENTORY_MANAGER_NEW">Neu</string>
8678
<string name="PLG_INVENTORY_MANAGER_NO_NEW_IMPORT_DATA">In der Importdatei waren keine neuen Daten vorhanden!</string>
8779
<string name="PLG_INVENTORY_MANAGER_NOTIFICATION_MESSAGE_ITEM_CHANGED">Der Gegenstand #VAR1_BOLD# wurde von #VAR2_BOLD# geändert:</string>
8880
<string name="PLG_INVENTORY_MANAGER_NOTIFICATION_MESSAGE_ITEM_CREATED">Der Gegenstand #VAR1_BOLD# wurde von #VAR2_BOLD# angelegt:</string>
@@ -96,7 +88,6 @@
9688
<string name="PLG_INVENTORY_MANAGER_NOTIFICATION_SUBJECT_ITEMS_IMPORTED">Im Inventar wurden Gegenstände importiert</string>
9789
<string name="PLG_INVENTORY_MANAGER_NUMBER">Anzahl</string>
9890
<string name="PLG_INVENTORY_MANAGER_NUMBER_DESC">Anzahl der anzufügenden Gegenstände</string>
99-
<string name="PLG_INVENTORY_MANAGER_NUMBER_OF_ITEMS">Anzahl der Gegenstände</string>
10091
<string name="PLG_INVENTORY_MANAGER_ORG_CHOICE">Organisationswahl</string>
10192
<string name="PLG_INVENTORY_MANAGER_PLUGIN_DATE">Stand</string>
10293
<string name="PLG_INVENTORY_MANAGER_PLUGIN_INFORMATION">Plugininformationen</string>
@@ -107,13 +98,6 @@
10798
<string name="PLG_INVENTORY_MANAGER_PROFILE_ADDIN_DESC2">Damit in der Profilansicht Gegenstände angezeigt werden, müssen Sie folgende Zeile in die profile.php einfügen: "require_once(ADMIDIO_PATH . FOLDER_PLUGINS .'/InventoryManager/inventory_manager_profile_addin.php');".\n\nWeitere Informationen hierzu finden Sie in der #VAR1#.</string>
10899
<string name="PLG_INVENTORY_MANAGER_SHOW_ALL_DESC">Bei gesetzter Einstellung werden neben den aktuellen Gegenständen dieser Organisation auch ausgesonderte Gegenstände angezeigt.</string>
109100
<string name="PLG_INVENTORY_MANAGER_SHOW_ALL_ITEMS">Alle anzeigen</string>
110-
<string name="PLG_INVENTORY_MANAGER_SPECIAL_CASE_CURUSER_OR_ADMIN">Sonderfall: Aktueller Benutzer oder Administrator</string>
111-
<string name="PLG_INVENTORY_MANAGER_SYNCHRONIZE">Benutzer mit Empfänger abgleichen</string>
112-
<string name="PLG_INVENTORY_MANAGER_SYNCHRONIZE_DESC">Hierüber können Sie Benutzer ohne ausgeliehene Gegenstände zu Ehemaligen Mitgliedern machen.\n\n V O R S I C H T\n\n Diese Funktion sollte nur verwendet werden, wenn InventoryManager in einer eigenen Organisation betrieben wird.</string>
113-
<string name="PLG_INVENTORY_MANAGER_SYNCHRONIZE_ERROR">Es ist ein Fehler passiert! Benutzer mit #VAR1# konnten nicht gelöscht werden.</string>
114-
<string name="PLG_INVENTORY_MANAGER_SYNCHRONIZE_NO_ASSIGN">Alle Benutzer sind Empfänger eines Gegenstandes, es kann kein Abgleich durchgeführt werden.</string>
115-
<string name="PLG_INVENTORY_MANAGER_SYNCHRONIZE_PREVIEW">Dies ist nur eine Übersicht des Abgleichs, es wurde noch nichts gespeichert.\n\n Benutzer können nur zu Ehemaligen gemacht werden, wenn die Anzahl der Gegenstände 0 beträgt und sie nicht Administrator oder der aktuelle Benutzer sind.</string>
116-
<string name="PLG_INVENTORY_MANAGER_SYNCHRONIZE_SAVED">Die aufgelisteten Benutzer sind jetzt Ehemalige.</string>
117101
<string name="PLG_INVENTORY_MANAGER_UNDO_FORMER">Aussondern rückgängig machen</string>
118102
<string name="PLG_INVENTORY_MANAGER_USE_CURRENT_USER">aktueller Benutzer als Standardauswahl</string>
119103
<string name="PLG_INVENTORY_MANAGER_USE_CURRENT_USER_DESC">Soll der aktuelle Benutzer beim Hinzufügen neuer Gegenstände standardmäßig als Verwalter voreingestellt werden, so ist der Haken zu setzen.</string>

0 commit comments

Comments
 (0)