Benutzer-Werkzeuge

Webseiten-Werkzeuge


ki:sitzungen:2026-10-26_mehrsprachigkeit

Mehrsprachigkeit, structbox 0.4.0, indexmenu und Galnet-Konzept

Datum 2026-10-26 (Beginn 2026-10-25)
KI Claude (claude-opus-5-5)
Status erledigt, Galnet-Import geht in einer neuen Sitzung weiter
Vorherige Sitzung 2026-10-25_kleinigkeiten
Bezug codex, galnet, ships, sidebar, structbox, edwiki

Ziel

Kapitel-Links im Codex automatisch erzeugen, ein Konzept für das Galnet-Archiv mit struct finden (bisher Yearbox, Tagesseiten), das Wiki mehrsprachig aufstellen (Frontier-Texte in allen Sprachen archivieren), structbox dafür erweitern und die Navigation von simplenavi auf etwas Passenderes umstellen.

Ergebnis / aktueller Stand

  • Codex: Kapitel-Links im rechten WRAP per nspages statt von Hand: <nspages . -exclude:start -simpleList -textPages="" -h1 -sortId>. Übersicht codex:start als Kacheln der Unter-Namensräume: <nspages . -subns -nopages -usePictures -h1 -textNS="" -defaultPicture=…> – im dev-wiki bestätigt (Bild = erstes Bild der Startseite des Namensraums).
  • Translation-Plugin installiert und eingerichtet (siehe Technische Details). Deutsch liegt ohne Präfix, Übersetzungen in obersten Sprach-Namensräumen: en:hangar:ships:adder. Sprachumschalter erscheint im dev-wiki.
  • structbox 0.4.0 gebaut (ZIP an Oliver), im Testwiki geprüft und im dev-wiki bestätigt: en:hangar:ships:adder zeigt die Box mit Bild und Werten der deutschen Seite, ohne eigene Daten.
  • Navigation: simplenavi ersetzt durch indexmenu – eingeklappt bis auf den aktuellen Bereich, Sprach-Namensräume ausgeblendet. Im dev-wiki bestätigt.
  • Hangar: erste Sprachseite en:hangar:ships:adder mit Frontier-Text angelegt.
  • Galnet: Konzept steht (siehe Entscheidungen), umgesetzt ist noch nichts. Die beiden Abruf-Skripte (EliteArchive.py, elitearchive_new.py) wurden gelesen.

Entscheidungen

  • Deutsch ist die wichtigste Sprache. Andere Sprachen dienen dem Archiv und dem Finden fehlender/fehlerhafter Übersetzungen (vor allem Galnet). Ein großes ausländisches Publikum wird nicht erwartet.
  • Sprachaufbau nach Translation-Plugin: Hauptsprache ohne Präfix, Übersetzungen als <sprache>:<gleiche ID>. Sprachen: en en-us es fr pt-br ru (EN-US wird mit archiviert – Archivgedanke).
  • struct-Daten nur auf der deutschen Seite; Sprachseiten bekommen kein Schema und zeigen per structbox 0.4.0 die deutschen Daten. Ausnahme: Artikel, die es nur auf Englisch gibt, tragen ihre Daten auf der en:-Seite.
  • Überall die deutsche Vorlage (deutsche Beschriftungen auch auf Sprachseiten). Keine en:vorlagen:…, keine Label-Übersetzungen im Schema, keine en:sidebar nötig – geht jederzeit nachträglich.
  • Galnet: eine Seite pro Artikel statt einer Seite pro Tag.
    • ID: galnet:JJJJ:MM:TT_01, _02 … – Echtzeit-Datum, zweistellige Nummer in Frontier-Reihenfolge, in allen Sprachen gleich (en:galnet:JJJJ:MM:TT_01).
    • Infobox per structbox: Datum (intern Echtzeit), Spieldatum (Anzeige), Bild, Schlagwörter (z. B. Faulcon DeLacy, Zorgon Peterson, Eranin, Föderation), Quelle, Übersetzungsstand.
    • Datum: intern Echtzeit, nach außen Spielzeit → zwei Felder (date als Date, date_ingame als Text), füllt das Import-Skript.
    • Übernahme und Verschlagwortung der Artikel macht Oliver von Hand; ältere Artikel (nur Englisch bei Frontier) hat Oliver bereits selbst übersetzt.
  • Navigation mit indexmenu, nicht simplenavi (simplenavi kann Namensräume nur über hidepages ausblenden – das würde Übersetzungen auch aus Suche/Änderungen werfen; Kompatibilität „unknown“, letztes Update 2023).
  • Sprachumschalter: vorerst wie er ist („nicht final, Funktion ist gegeben“).

Verworfen

  • galnet:de:… / hangar:de:…: Das Translation-Plugin erwartet die Sprache als obersten Namensraum, die Standardsprache ohne Präfix. Die Option translationns ist im Plugin als „currently broken“ abgeschaltet.
  • deeplautotranslate-Plugin: übersetzt nur von der Hauptsprache in die Sprach-Namensräume, nicht umgekehrt.
  • structbox 0.5.0 mit $$label:feld$$ / $$text:…$$ (Beschriftungen aus den struct-Label-Übersetzungen, eine Vorlage für alle Sprachen): unnötig, da Deutsch die Hauptsprache ist.
  • Eigener struct-Datentyp „Galnet-Datum“ (speichert Echtzeit, zeigt Spielzeit): zwei Felder reichen.
  • Mini-Plugin für den Sprachumschalter: pageheader.html genügt.

Offene Punkte

  • FIXME useheading auf „Nur Navigation“ stellen (Titel statt IDs in indexmenu und in structbox-Links). Frage: Ausnahme für ki: – geht nicht pro Namensraum (siehe Technische Details).
  • FIXME skipfile+/(^|:)sidebar$/ in die Sidebar-Zeile übernehmen (falls noch nicht geschehen).
  • FIXME curl-Test: Liefert elitedangerous.com/equipment/starships/<schiff> mit Accept-Language: de-DE / fr-FR übersetzte Texte? (Claude kommt nicht an die Seite.) Davon hängt das Import-Skript für die Schiffstexte ab.
  • FIXME Galnet: Schlagwörter als mehrere Felder (Konzerne, Fraktionen, Personen, Systeme, Handlung) – Claudes Empfehlung, von Oliver noch nicht bestätigt.
  • FIXME Galnet: Ersatz für die Yearbox-Übersicht (Oliver findet sie nicht hübsch). Vorschlag: Monatsseiten mit nspages-Kacheln, Jahresseiten mit struct-Tabelle, Seiten pro Handlungsstrang.
  • FIXME Galnet: Was passiert mit den alten Tagesseiten (galnet:2014:09:19)? Behalten als Liste/Weiterleitung oder Links per Skript auf die Artikel umbiegen.
  • FIXME EliteArchive.py: erkennt nur englische Monatskürzel – falls die DE-Seite „MAI/OKT/DEZ“ schreibt, wurden diese DE-Artikel als „UNGÜLTIGES DATUM“ verworfen. Im EliteArchive.log prüfen.
  • FIXME elitearchive_new.py: adate() doppelt definiert, die zweite Fassung verweist auf nicht existierende YEAR/MONTH (betrifft nur Artikel ohne/mit kaputtem Datum).
  • FIXME edwiki und structbox auf 0.4.0 nachziehen; Plugin-Liste: translation, indexmenu neu, simplenavi raus.
  • Optional später: translateui (Oberfläche wechselt mit der Sprache), en:sidebar, en:vorlagen:….

Nächste Schritte

  1. Neue Sitzung „Galnet-Import“: Skript planen, das aus beiden Archiven + Wiki-Backup die Artikelseiten (DE und alle Sprachen) und einen Lückenbericht erzeugt.
  2. Danach dasselbe für die Schiffstexte von Frontier (nach dem curl-Test).
  3. useheading und Sidebar-Zeile im dev-wiki nachziehen.

Technische Details

Translation-Plugin (Stand 2025-05-20)

Einstellung Wert
translations en en-us es fr pt-br ru (Standardsprache nicht angeben)
skiptrans ^:?([a-z-]+:)?(sidebar|vorlagen|wiki|playground|temp)(:|$)
dropdown an (zeigt nur die aktuelle Sprache, Rest beim Draufzeigen)
checkage, copytrans, translateui, redirectstart aus
  • skiptrans listet Seiten ohne Umschalter; das Plugin prüft die ID mit führendem Doppelpunkt (':' . $id). Der Ausdruck oben braucht keine Sprachliste und wächst nicht mit neuen Bereichen. Im Testwiki geprüft: hangar, en:hangar, pt-br:galnet, codex → Umschalter; sidebar, en:sidebar, vorlagen:…, fr:vorlagen:…, temp:… → keiner; vorlagenarchiv:x → Umschalter.
  • Der Umschalter baut sich nicht selbst ins Template ein. Lösung: lib/tpl/dokuwiki/pageheader.html (oder sidebarheader.html):
<?php
$translation = plugin_load('helper', 'translation');
if ($translation) echo $translation->showTranslations();
?>
  • gibt es nicht; schaltet das Plugin für eine Seite ab.
  • struct bietet im Schema-Editor für jedes Feld Labels pro Sprache der Translation-Liste. struct nutzt sie in Tabellen/Listen/Formular nach der Oberflächensprache ($conf['lang'], Rückfall Englisch) – also nur mit translateui sprachabhängig.

structbox 0.4.0

  • Daten: Eine Seite <sprache>:<rest> zeigt die Daten der ersten passenden Seite: <rest> (Hauptsprache) → Ersatzsprachen (Einstellung fallback, Standard en) → eigene Daten. „Passend“ = existiert, hat mindestens einen ausgefüllten Wert, Leser darf sie lesen. Eine neue, leere DE-Seite übernimmt also erst, wenn dort etwas eingetragen ist.
  • Vorlagen: Sprache der Seite → Ersatzsprachen → Hauptsprache (fr:vorlagen:schiffe → en:vorlagen:schiffe → vorlagen:schiffe).
  • Sprachlogik kommt vom Translation-Plugin (getTransParts, buildTransID), keine eigene Sprachliste.
  • Rechte/Cache: Ist das Gegenstück nicht für alle lesbar, wird die Sprachseite nicht gecacht (sonst könnte ein Admin-Aufruf gesperrte Daten in den Cache schreiben). Metadaten (Kachelbild) nur aus öffentlich lesbaren Gegenstücken.
  • Kommandozeile: bin/indexer.php / bin/render.php laufen ohne ACL-System (NOSESSION). structbox liest dann die @ALL-Regeln selbst aus der ACL-Datei – sonst verlören Sprachseiten beim Index-Neuaufbau ihr Kachelbild.
  • Cache-Abhängigkeiten: zusätzlich alle Sprachvorlagen-Kandidaten und die Dateien der Gegenstücke (Anlegen einer DE-Seite oder FR-Vorlage rendert die Sprachseiten neu).
  • Neue Einstellungen: translation (an), fallback (en). Ohne Translation-Plugin oder mit translation = aus identisch zu 0.3.0 (Ausgabe verglichen).
  • Getestet (DokuWiki 2026-07-14c „Mort“, PHP 8.3, struct 2026-09-21, translation 2025-05-20, nspages): DE-Daten auf en/fr/en-us, nur-englischer Artikel (fr folgt en), leere DE-Seite, gesperrte DE-Seite (anonym/Leser/Admin, kein Cache), Daten ändern, Gegenstück neu anlegen, FR-Vorlage neu anlegen, EN-Vorlage als Rückfall, alte Revision (zeigt DE-Daten von damals), Platzhalter im Seitentext, nspages-Kacheln in en:, Metadaten auf der Kommandozeile, keine PHP-Warnungen.
  • Geänderte Dateien: helper.php, syntax/box.php, syntax/field.php, action.php, conf/default.php, conf/metadata.php, lang/*/settings.php, README.md, plugin.info.txt (Datum 2026-10-26).
  • Grenze: struct-Abfragen in der Vorlage mit $ID$ beziehen sich auf die angezeigte Seite, nicht auf die Datenseite. Werte (Auswahllisten, Seitenlinks) werden nicht übersetzt.

struct-Zuweisung

  • Muster hangar:** = Namensraum samt Unter-Namensräumen. Für Galnet: galnet:** und en:galnet:** (nur-englische Artikel). Andere Sprachen kein Schema.

indexmenu (Sidebar)

sidebar:

====== Navigation ======
{{indexmenu>:#1|js navbar nocookie tsort nsort skipns+/^(en|en-us|es|fr|pt-br|ru|vorlagen|temp|playground)$/ skipfile+/(^|:)sidebar$/}}

en:sidebar (optional, für andere Sprachen en an beiden Stellen tauschen):

====== Navigation ======
{{indexmenu>en#1|js navbar nocookie tsort nsort skipns+/^en:vorlagen$/ skipfile+/(^|:)sidebar$/}}
  • #1 = nur oberste Ebene offen, navbar öffnet den Weg zur aktuellen Seite, nocookie = merkt sich nichts, tsort nsort = nach Titel, skipns+/skipfile+ = ausblenden.
  • js verlangt defer_js aus (sonst roter Hinweis).
  • „Indexmenu id conflict“ + doppelte Liste erscheinen nur auf der Seite sidebar selbst (Menü zweimal auf der Seite) – harmlos.
  • Titel statt IDs erst mit useheading = „Nur Navigation“. useheading gilt nur wiki-weit, keine Ausnahme pro Namensraum möglich.

Galnet – Quellen

EliteArchive.py (alt) elitearchive_new.py (neu)
Quelle community.elitedangerous.com, Tagesseiten Frontier-API (elitedangerous.com)
Zeitraum was die Übersicht verlinkt, inkl. 3300 3301–3312
Sprachen EN, DE, FR EN, EN-US, DE, ES, FR, PT-BR, RU
Frontier-ID / URL / Bilder – ja (image_index.csv)
Text HTML entfernt wie von der API geliefert (evtl. HTML)
  • EN bei Frontier ab 3301, DE erst ab ca. 3306 (Frontier lieferte vorher keine Übersetzungen).
  • Die Frontier-ID ist in allen Sprachen gleich – Schlüssel zum Zusammenführen. 3300 hat keine ID → Ersatzschlüssel aus Datum + Titel.
  • Schema-Entwurf galnet: date (Date, Echtzeit), date_ingame (Text), picture (Media), konzerne / fraktionen / personen / handlung (Page, mehrfach), systeme (Text, mehrfach – keine eigenen Seiten), source (Url), translation (Dropdown: Frontier-DE / eigene / KI / fehlt).
  • Beispielabfrage Handlungsstrang: filter: handlung = $ID$, sort: date. Auf Personen-/Schiffsseiten in der Vorlage als <structbox-section> – verschwindet ohne Treffer.
  • Monatsübersicht: <nspages galnet:2017:05 -usePictures -h1 -sortId -textPages=""> (ID beginnt mit dem Tag → -sortId sortiert nach Datum).
  • Lückenbericht als Nebenprodukt des Imports: EN ohne DE, DE auffällig kürzer als EN, DE mit englischen Sätzen; bei Schiffen Frontier-Werte vs. struct-Daten. Evtl. als Wartungsseite wiki:uebersetzungsluecken.

Schiffstexte von Frontier

  • Quelle: elitedangerous.com/equipment/starships/<slug> (z. B. cobra-mk-iii): zwei Absätze Beschreibung + Werte. Kein Sprachumschalter, keine /de/-Adressen sichtbar; vermutlich Sprache per Accept-Language wie bei der Galnet-API (ungeprüft).
  • Test (bei Oliver):
curl -s -A "Mozilla/5.0" -H "Accept-Language: de-DE" https://elitedangerous.com/equipment/starships/cobra-mk-iii | grep -i -o "mehrzweck.\{0,80\}"
curl -s -A "Mozilla/5.0" -H "Accept-Language: fr-FR" https://elitedangerous.com/equipment/starships/cobra-mk-iii | grep -i -o "polyvalent.\{0,80\}"
  • Geplantes Skript: Frontier-Slug ↔ Wiki-Seite zuordnen (Tabelle zum Prüfen), <sprache>:hangar:ships:… mit Text + {{structbox>ships}} erzeugen, DE-Seiten nicht anfassen, Berichte über DE-Abweichungen und Werte-Abweichungen.

Für die nächste KI

Das Wiki ist jetzt mehrsprachig nach dem Muster des Translation-Plugins: Deutsch ohne Präfix, Übersetzungen unter en:, en-us:, es:, fr:, pt-br:, ru: mit identischer Rest-ID. struct-Daten liegen nur auf der deutschen Seite (bei nur-englischen Galnet-Artikeln auf der en:-Seite); structbox 0.4.0 holt sie für alle Sprachseiten. Deutsch ist die Hauptsprache, die anderen dienen dem Archiv und dem Aufspüren von Übersetzungslücken – keine Arbeit in sprachabhängige Beschriftungen stecken. Navigation läuft über indexmenu. Die nächste Sitzung plant das Galnet-Import-Skript (Artikelseiten galnet:JJJJ:MM:TT_NN + alle Sprachen + Lückenbericht) auf Basis von elitearchive_new.py, EliteArchive.py und dem Wiki-Backup; Oliver übernimmt und verschlagwortet die Artikel selbst. Vor jeder Code-Änderung den Plan besprechen und auf „leg los“ warten.

ki/sitzungen/2026-10-26_mehrsprachigkeit.txt · Zuletzt geändert: von nemwar