- tables.json: "Major Miscast Table" war komplett unuebersetzt und enthielt
zudem 17 themenfremde deutsche Eintraege aus einem fehlerhaften Merge;
jetzt korrekt uebersetzt (20 Eintraege, wie in der FR-Referenz).
- items.json: 84 Eintraege mit Restfranzoesisch bereinigt (doppelte
unuebersetzte Absaetze entfernt, leere/unuebersetzte description-, special-
und tests-Felder uebersetzt, Trade Tools/Petty Magic vollstaendig
uebersetzt).
- Funktionale Bugs behoben: mehrere Effekt-Skripte prueften Fertigkeitsnamen
hartcodiert auf Franzoesisch (z.B. "Escalade", "Discretion", "Perception",
"Esquive", "Pistage", "Ragot", "RZechen") statt auf die tatsaechlichen
deutschen Namen - dadurch griffen Talente wie Waldbewohner, Heimlich,
Spurensucher, Kunstreiter, Trunkenbold und Gesellig in der DE-Version nie.
Zusaetzlich einen Syntaxfehler in Kunstreiter's Skript behoben.
Chargen-Assistent (Charaktererstellung) und diverse Systemtexte
(Ruestungsarten, Lehren-Beschreibungen fuer Daemonologie/Nekromantie/
Nurgle/Pest/Verderben/Slaanesh/Heimlichkeit/Tzeentch, Waffeneigenschaften,
Krankheitssymptome). Lehren-Bezeichnungen konsistent mit der im Modul
etablierten Terminologie (Lehre des X).
Version auf 8.6.20 angehoben.
Abgleich gegen die aktualisierte fr.json ergab 1166 in de.json fehlende
Schluessel (vermutlich neue wfrp4e-Systemversion seit letztem Sync).
Uebersetzung so nah wie moeglich an etablierter Terminologie aus diesem
Modul (Willenskraft, EG, Ausdauer etc.).
Neue Datei missing_keys_review.json enthaelt alle ergaenzten Keys als
{key: [Original, Uebersetzung]} zur Kontrolle, wird mit jedem weiteren
Batch erweitert.
Version auf 8.6.19 angehoben.
items.json (151), mutations.json (89), spells.json (32), tables.json (31).
actors.json und journals.json waren bereits im richtigen Format.
Gleiches bestaetigt funktionierendes Verfahren wie bei den Core-Dateien.
Reine Strukturumwandlung, keine Eintraege verloren, keine doppelten IDs.
Damit ist die gesamte EIS-Erweiterung umgestellt. Up in Arms war bereits
vollstaendig im richtigen Format (keine Aenderung noetig). Zoo-Items hat
aktuell keine Eintraege (nur Label/Folders/Mapping), daher nichts zu tun.
Version auf 8.6.18 angehoben.
actors.json (62), bestiary.json (62), career-descriptions.json (64),
tables.json (53). Gleiches Verfahren wie bei items.json (8.6.16),
bestaetigt funktionierend. Reine Strukturumwandlung, keine Eintraege
verloren, keine doppelten IDs.
Damit ist das komplette Grundregelwerk-Kompendium (Core) umgestellt.
Version auf 8.6.17 angehoben.
Die aktuelle Babele-Version (2.8+) unterstuetzt das alte Array-Format
('entries': [{id, name, ...}]) laut eigener Dokumentation nur noch als
'deprecated legacy format'. Das bekanntermassen funktionierende
franzoesische Referenzmodul nutzt durchgehend das kanonische
Objekt-Format ('entries': {id: {name, ...}}). Testweise zuerst nur fuer
wfrp4e-core.items.json umgestellt, um die Hypothese zu verifizieren,
bevor die uebrigen Dateien konvertiert werden. Reine Strukturumwandlung,
keine inhaltlichen Aenderungen, keine Eintraege verloren (1631 -> 1631,
keine doppelten IDs).
Version auf 8.6.16 angehoben.
Laut Babele 2.8+ Developer Migration Guide muessen register()/
registerConverters() vor dem Aufbau von Babeles eigener Runtime-Session
erfolgen, ueber einen dedizierten Hook 'babele.init' - nicht in Foundrys
allgemeinem 'init'-Hook. Registrierungen, die zu spaet erfolgen, werden
seit Babele 2.8+ still verworfen ('late calls are rejected'), sobald die
Runtime-Session installiert ist.
Das erklaert das beobachtete Verhalten vollstaendig: Babele las unsere
Uebersetzungsdateien zwar erfolgreich ein (Konsole zeigte 'successfully
loaded'), aber ohne erfolgreiche Registrierung blieb inspectMapping()
fuer betroffene Packs leer (layers: [], effective.mapping: {}), und
isTranslated()/translate() lieferten false/{} zurueck - obwohl die
Match-Daten (id/name) nachweislich korrekt waren. Journals funktionierten
vermutlich ueber eingebaute Babele-Standardmappings, die keine eigene
Registrierung benoetigen.
Fix: game.babele.register(...) und game.babele.registerConverters(...)
laufen jetzt in einem eigenen Hooks.once('babele.init', ...) statt im
bisherigen Hooks.once('init', ...). Ausserdem den fehlerhaften Typ-Check
'game.babele !== "undefined"' (String-Vergleich statt typeof) korrigiert.
Version auf 8.6.15 angehoben.
Portiert aus der aktualisierten, v14-verifizierten franzoesischen
Referenzimplementierung (foundryvtt-wh4-lang-fr-fr). Die aktuelle
Babele-Version liefert im Rueckgabewert von game.babele.translate()
offenbar kein .system-Feld mehr zuverlaessig. Unsere bisherigen Checks
(if (trait_fr?.system)) in der bestiary_traits-Converter-Funktion schlugen
deshalb immer fehl und die Uebersetzung von Traits, Skills, Talenten,
Zaubern, Gebeten, Karrieren, Fahrzeugrollen und Ausruestung auf
NPC-Statblaettern wurde stillschweigend uebersprungen - das Item blieb
englisch.
Fix: Pruefung umgestellt auf if (trait_fr?.name && trait_fr?.name != name_en).
Zusaetzlich uebernommen:
- Gefixte Bonus-Formel-Regex (behebt den 'willpower bonus+4' SyntaxError
bei Zauberformeln, u.a. bei Wolfgang Hollseher aufgetreten)
- \r-Stripping-Bug in Trait-Namen behoben
- Symptom-Namen (Fever, Malaise etc.) werden nicht mehr vom Item-Namen
ueberschrieben
- 'Inspiring'-Sonderfall fuer Talente ergaenzt
Version auf 8.6.14 angehoben.
Letzter Batch. Handcart und Pandora Lostpocket waren in der Batch-Planung
uebersprungen worden und wurden nachtraeglich ergaenzt. Alle 154 Eintraege
in wfrp4e-eis.actors.json sind jetzt vollstaendig ins Deutsche uebersetzt,
0 verbleibende franzoesische Textreste. Version auf 8.6.13 angehoben.
Damit ist die gesamte EIS-Erweiterung (Enemy in Shadows) vollstaendig
uebersetzt: spells.json, mutations.json, tables.json, items.json,
actors.json.
121 der 151 Eintraege sind byte-identische Duplikate aus spells.json (32)
und mutations.json (89) und wurden mit den dort bereits erstellten
deutschen Uebersetzungen befuellt. Die verbleibenden 30 einzigartigen
Eintraege (Kreatureneigenschaften, Reittiere, Krankheiten) wurden neu
uebersetzt.
Fruehere Einschaetzung, die Datei sei bereits vollstaendig uebersetzt, war
falsch - name und results waren komplett franzoesisch. Zwei vorbestehende
FR-Syntaxfehler in den Demonic Mien-Tabellen (fehlende/ueberzaehlige
geschweifte Klammer) mitkorrigiert.
Verschiebt die 5 Enemy in Shadows-Kompendien von To Do/ ins aktive
compendium/-Verzeichnis. Alle 32 Zaubereinträge in spells.json vollständig
aus dem Französischen übersetzt (23 einzigartige Zaubertexte, teils als
Ungeteilt-/Tzeentch-Varianten mit gemeinsamem Lehre-Absatz).
1CeYp5MlPcH68UIw.js mixed English and French skill/talent/trapping
names (Intimidate, Commandement, Menaçant, Arme simple...) in an NPC
statblock-building script. Replaced with the actual German names used
in the core compendium, matching the lookup-by-exact-name convention
used throughout scripts/.
Note: the earlier "1 file left" estimate was right; a follow-up grep
across all of scripts/ that showed ~95 hits was a false alarm caused
by bash's grep doing byte-wise matching against the accented-character
class in this shell's locale, flagging German umlauts/en-dashes as
false positives. Verified with Node's proper Unicode regex instead.
Rebuilt modules/loadScripts.js; all 2114 scripts still parse cleanly.
These predate today's script sync (not among the 621 copied files) --
stale/corrupted copies that had already diverged from FR's own fixed
versions, so a syntax error would have crashed the moment the item's
effect actually ran in Foundry:
- E7D4bxz8gy4e1wL7.js: whole condition had no body/return at all
- FAB12eLcSCAOOQwk.js: "scirptMessage" typo + missing closing paren
- Me1wS5XdqUEy7OGt.js: missing paren/brace in a template literal,
and a literal "{this.actor.name}" instead of "${this.actor.name}"
- Na7Nanl9YmxZlTo7.js: stray unmatched closing paren
- nGTxNWBUBgTr87wU.js: loose "speaker : {...}" args instead of being
part of the single options object
- sPvfYQEnyAYNpIhF.js: missing comma between two object properties
- vvVhAqreedtmOR9b.js: missing closing brace before the closing paren
Rebuilt modules/loadScripts.js; all 2114 scripts now parse cleanly.
scripts/ was missing 621 of FR's 2114 effect scripts (referenced via
game.wfrp4e.config.effectScripts by Foundry item id). Copied them all
over so the registry is complete, then translated the 129 that still
contained French user-facing text: skill/talent/trapping name arrays
in NPC-statblock-building scripts, chat/notification messages, and
dialog prompts. Skill/talent/trait names were cross-checked against
the already-translated core compendium rather than translated ad hoc,
since Foundry looks these up by exact document name.
Also fixed real bugs found along the way (present in FR's originals
too, just inherited via the copy):
- Two "let x / let x" duplicate-declaration scripts (SyntaxError)
- A "0rgs.actor" typo (ReferenceError) for "args.actor"
- Two "effet.update(...)" typos for "effect.update(...)"
- A corrupted ui.notifications.warn(...) template literal in 3 of the
NPC-statblock scripts, mangled into stray leftover code text
- 19 scripts across the whole scripts/ folder (not just the 621) using
the wrong game.i18n.localize() key (NAME.Résistance/Démoniaque/
Mort-vivant instead of the actual English key names NAME.Endurance/
Daemonic/Undead), which silently failed to resolve in any language
Rebuilt modules/loadScripts.js via `npm run build` (2114 scripts).
Known follow-up (out of scope here, pre-existing in the scripts DE
already had before this sync): 7 scripts elsewhere in scripts/ have
unrelated syntax bugs, and one has a lingering French accent.
Lore (Skaven/Bestiaria/Chaos/Daemonology/Dark Magic/Tzeentch/Slaanesh/
Necromancy/Politics/Engineer/Torture/Warfare/Tilea), Trade (Engineer/
Farrier), Language (Arabyan/Battle/Guilder), Secret Signs (Cultist),
Acute Sense (Sight), Entertain (Acting/Speeches) and one prayer effect
(ezVl3vFWTwHfNXL3). Reuses the already-translated generic skill
description for each family (only the specialization name differs,
same as every other Lore/Trade/Language/Secret Signs entry).
wfrp4e-core.items.json now has 0 ids missing relative to FR (up from
25) and the leftover-French-description sweep from the last several
commits is complete: every entry that exists in both FR and DE has an
actually-translated German description.
Covers the named spells specific to each Lore of Magic (Beasts, Fire,
Heavens, Life, Light, Metal, Shadow, Death, Hedgecraft, Witchcraft,
Daemonology, Necromancy, Chaos) plus a handful of stragglers (Dazzle,
Haunting Horror, Purple Pall of Shyish, Scythe of Shyish, Shroud of
Invisibility, The Third Portent of Amul).
Text taken verbatim from the corresponding Lore chapters of the
official German rulebook (Magie, p.244-257), matched to each item by
mechanical content since several French/English names translate to
misleading literal German (e.g. "Earthpool"/Eau de la terre is
actually the teleport-through-earth spell "Erdreise", not a water
spell; "Part the Branches" is the Hedgecraft spirit-sight spell "Blick
durch die Hecke", not a Life-lore spell).
This closes out the wfrp4e-core.items.json leftover-French-text sweep:
all 444 originally affected entries (23 generic Lore-magic effects x
12 variants, 19 equipment items, 20 creature/psychology traits and
talents, 24 Petty Magic spells, 9 career class labels, and now ~80
named Lore-specific spells) are translated.
Text taken verbatim from the "Niedere Magie" section of the official
German rulebook, matched to each item by mechanical content rather
than the French id (e.g. "Twitch"/Secousse -> Verschieben, "Sly
Hands"/En catimini -> Zauberhand, "Bearing"/Repères -> Richtung).
Frenzy (player + creature versions), Love, Prejudice, Hatred, Breath,
Corrosive Blood, Infravision (-> Dunkelsicht), Distracting (Perturbant
-> Verstörend), Flight, Tough (-> Robustheit), Magic Resistance, Night
Vision, Regenerate, Tracker (Pisteur -> Spurensucher), Ward, Detect
Artefact, Flagellant, Inspiring (Exaltant -> Inspirierend) and Trapper.
Text taken from the official German rulebook's Bestiarium (creature
traits, p.338-343), Psychologie (p.190-191) and Fähigkeiten und
Talente (p.132-140) chapters, matching each item's actual game role
rather than translating the French id/name literally.
Text taken from the "Einkaufsführer" (Trappings) chapter of the
official German rulebook. Also fixes two wrong names found along the
way: "Grappling Hook" was "Enterhaken" (boarding hook) instead of the
rulebook's "Kletterhaken", and "Dart" -- a Petty Magic spell, not a
piece of gear -- was named "Wurfspeer" (throwing spear) instead of
"Pfeil". "Walking Cane" also renamed to the rulebook's "Spazierstock".
Blast, Bolt, Ward, Terrifying, Teleport, Push, Dome, Aethyric Armour/
Arms, Arrow Shield, Bridge, Chain Attack, Corrosive Blood, Dark Vision,
Distracting, Drop, Entangle, Fearsome, Flight, Magic Shield, Move
Object, Mundane Aura and Breath had only ever been given a German
name while the description stayed a verbatim French leftover; several
base names were also still French (e.g. Aethyric Armour, Terrifying,
Teleport) or an inaccurate translation (Bolt was "Bolzen", the actual
spell name per the German rulebook is "Geschoss").
Text taken verbatim from the "Arkane Zauber" section of the official
German core rulebook (Ulisses Spiele), which lists these as the
generic version of each lore-specific spell. Applied to the base item
plus all 12 lore-suffixed variants (Feuer/Leben/Metall/Himmel/Licht/
Bestien/Tod/Schatten/Nekromantie/Dämonologie/Hexerei/Heckenzauberei),
which share the identical description text per the rulebook's own
"treat as an additional lore option" rule for these generic spells.
294 of the 444 leftover-French items in wfrp4e-core.items.json fixed;
156 singleton items remain for a follow-up pass.
Counsellor, Officer, Penitent, Prophet of Doom, Recruit, Sentry,
Sergeant, Soldier and Zealot each link to their career-class journal
page via @UUID[...]{label}; the label text was still French. Set it to
match the already-translated class name (Ratgeber/Soldat/Flagellant/
Wächter, matching the existing Soldier/Guard/Flagellant/Counsellor
entries). Soldat and Flagellant are spelled identically in French and
German, so only Counsellor and Sentry actually changed text.
These ids never matched the real Foundry document (typo, trailing
space, wrong dash character, or superseded by a rename upstream), so
Babele silently failed to translate them while a correct sibling entry
already existed with equal-or-better content:
- career-descriptions: drop "Duelist"/"Vilager" typo duplicates of the
already-translated "Duellist"/"Villager"
- items: drop stale duplicates now superseded by a correctly-spelled/
renamed id (Resistance (Chaos), Honor Guard, Novitiate, Jewellry,
Open Plate Helm, Beast Within', trailing-space ids, Tongue Attack
(Reichweite))
- items: fix "In-Fighter"/"In-fighter" to use the en dash character
Foundry's actual document id uses (was silently never matching)
- items: merge "Art (Cartogrpahy)" (typo id, correct German text) into
"Art (Cartography)" (correct id, which had leftover French text)
- Remove dead import of babele/script/translated-compendium.js (404,
MIME-type block on load) and its unused TranslatedCompendium usage
- Replace broken game.babele.converters.X() cross-calls (career_skills,
career_careergroup, tableResults) with direct function references,
since Babele 2.8+ wraps converters as objects
- Rename RollTable fields data.text/results[].text -> .description and
documentCollection -> documentUuid to match Babele's current schema
- Migrate ActiveEffect label -> name (Foundry v13 requires name) with
legacy fallback in process_effects, bestiary_traits, effects and
diseases_effects converters
- Fix stray bare duplicate() call and a syntax typo in the infighting
effect script in config-patch.js
- Bump module.json compatibility to minimum 13 / verified 14