====== 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 | [[ki:sitzungen:2026-10-25_kleinigkeiten]] | ^ Bezug | [[codex:start]], [[galnet:start]], [[hangar:ships:start]], [[sidebar]], [[ki:edwiki:plugin:structbox]], [[ki:stand: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: ''%%%%''. Übersicht ''codex:start'' als Kacheln der Unter-Namensräume: ''%%%%'' – **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 '':''. 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/'' 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 [[ki:stand:edwiki]] und [[ki:edwiki:plugin: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 ===== - Neue Sitzung „Galnet-Import“: Skript planen, das aus beiden Archiven + Wiki-Backup die Artikelseiten (DE und alle Sprachen) und einen Lückenbericht erzeugt. - Danach dasselbe für die Schiffstexte von Frontier (nach dem ''curl''-Test). - ''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''): showTranslations(); ?> * ''~~TRANS~~'' gibt es nicht; ''~~NOTRANS~~'' 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 '':'' zeigt die Daten der ersten passenden Seite: '''' (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 '''' – verschwindet ohne Treffer. * Monatsübersicht: ''%%%%'' (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/'' (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), '':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.