Neuanfang mit französischem Modul

This commit is contained in:
2025-05-05 23:25:00 +02:00
parent cf24ef97df
commit 3f74b8dfdd
3135 changed files with 38383 additions and 93206 deletions
+4 -2
View File
@@ -327,7 +327,7 @@ const __patchStyleSheet = () => {
/************************************************************************************/
const __add_actors_translation = () => {
const lang = game.settings.get('core', 'language');
if (lang == "fr") {
if (lang == "de") {
let pack_array = [];
for (let metadata of game.packs) {
if (!game.babele.isTranslated(metadata) &&
@@ -391,7 +391,9 @@ Hooks.on('ready', () => {
if (game.user.isGM) {
game.wfrp4e.warnDialog = new Dialog({
title: "Chargement de la traduction FR - Merci d'attendre",
content: `<img src="modules/wh4-fr-translation/images/warhammer-v1-logo.webp"><p class="wfrp4-fr-message">Les moines de l'ordre de l'Enclume, associés aux légistes de Talabaheim, préparent la traduction Bretonnienne de ce monde...</h3><p class="wfrp4-fr-message">Merci d'attendre la disparition de ce message pour vaquer dans l'Empire.</p> <p class="wfrp4-fr-message">Si une bénédiction de Shallya apparait dans le tchat, c'est que tout s'est bien passé.</p>`,
content: `<img src="modules/wh4-fr-translation/images/warhammer-v1-logo.webp"><p class="wfrp4-fr-message">
Die Diener Sigmars der Risikogruppe bereiten zusammen mit den bretonischen Rattenfängern die Übersetzung dieser Welt vor...</h3> <p class="wfrp4-fr-message">Bitte warte , bis diese Nachricht verschwunden ist, bevor du dich im Reich bewegst.</p><p class="wfrp4-fr-message">Wenn ein Segen von Shallya im Chat erscheint, ist alles gut gelaufen.</p>
Les moines de l'ordre de l'Enclume, associés aux légistes de Talabaheim, préparent la traduction Bretonnienne de ce monde...<p >Merci d'attendre la disparition de ce message pour vaquer dans l'Empire.</p> <p>Si une bénédiction de Shallya apparait dans le tchat, c'est que tout s'est bien passé.</p>`,
buttons: {
}
})
+17 -23
View File
@@ -32,7 +32,7 @@ const __SELECT_BONUS_PREFIX_D = {
/************************************************************************************/
export class WFRP4FrTranslation {
static parseSpellContent(spell) {
if (spell.system.range?.value) {
spell.system.range.value = this.processSpellContent(spell.system.range.value)
@@ -55,7 +55,7 @@ export class WFRP4FrTranslation {
//console.log("Spell duration/range/damage/target :", value);
if (value == "") return ""; // Hop !
if (value == "Touch") return "Contact"; // Hop !
if (value == "You") return "Vous"; // Hop !
if (value == "You") return "Vous"; // Hop !
if (value == "Instant") return "Instantané"; // Hop !
let translw = value;
let re = /(.*)\s+[Bb]onus\s*(\w*)/i;
@@ -63,7 +63,7 @@ export class WFRP4FrTranslation {
//console.log("RES1:", res);
let unit = "";
if (res) { // Test "<charac> Bonus <unit>" pattern
if (res[1]) { // We have char name, then convert it
if (res[1]) { // We have char name, then convert it
translw = game.i18n.localize(res[1].trim());
let bonusPrefix = (translw.toLowerCase() in __SELECT_BONUS_PREFIX_D) ? "Bonus d'" : "Bonus de ";
translw = bonusPrefix + translw
@@ -75,7 +75,7 @@ export class WFRP4FrTranslation {
if (res) { // Test : "<number> <unit>" pattern
translw = res[1];
unit = res[2];
} else { // Test
} else { // Test
re = /(\w+) (\w+)/i;
res = re.exec(value);
if (res) { // Test : "<charac> <unit>" pattern
@@ -102,7 +102,7 @@ export class WFRP4FrTranslation {
/************************************************************************************/
Hooks.once('init', () => {
// Check various settings in the installation
// Check various settings in the installation
game.modules.forEach((module, id) => {
if (id == "wfrp4e-core" && module.active) {
compmod = "wfrp4e-core";
@@ -116,7 +116,7 @@ Hooks.once('init', () => {
game.wfrp4e.apps.StatBlockParser.parseStatBlock = async function (statString, type = "npc") {
return statParserFR(statString, type);
}
console.log("WFRP4E-FR | Loading Babele translation module ...");
loadScripts();
@@ -222,9 +222,10 @@ Hooks.once('init', () => {
game.babele.register({
module: 'wh4-fr-translation',
lang: 'fr',
lang: 'de',
dir: 'compendium'
})
},
)
game.babele.registerConverters({
@@ -289,7 +290,7 @@ Hooks.once('init', () => {
if (script?.label) {
// Quand le label du script est strictement identique au nom de l'item concerné
if ( script.label.toLowerCase() == origName.toLowerCase() ) {
script.label = e.name
script.label = e.name
} else if (script.label.toLowerCase().includes("tests to affect")) {
script.label = script.label.replace("Tests to affect", "Tests relatifs à ")
} else if (script.label.toLowerCase().includes("using torn muscle")) {
@@ -325,7 +326,7 @@ Hooks.once('init', () => {
for (let data of results) {
let career = data.text.match(/{(.*)}/)
//console.log(">>>>>", career)
if (career?.[1]) {
if (career && career[1]) {
let careerFR = game.babele.converters.career_careergroup(career[1])
data.text = data.text.replace(career[1], careerFR)
}
@@ -338,6 +339,7 @@ Hooks.once('init', () => {
},
"npc_details": (details) => {
//console.log("DETAILS: ", details);
let newDetails = foundry.utils.duplicate(details);
if (details.species?.value)
newDetails.species.value = game.i18n.localize(details.species.value);
@@ -358,12 +360,9 @@ Hooks.once('init', () => {
for (let compData of validCompendiums) {
let translItem = game.babele.translate(compData.metadata.id, { name: talents_list[i] }, true);
// Specific case management
if (talents_list[i] === "Trapper") {
if (talents_list[i] === "Trapper") {
translItem = game.babele.translate(compData.metadata.id, { name: "a7v422EZcOUUC20X" }, true);
}
if (talents_list[i] === "Inspiring") {
translItem = game.babele.translate(compData.metadata.id, { name: "WCXnFSV4WOSmzzc4" }, true);
}
//console.log("Search talent name:", compData.metadata.id, talents_list[i], translItem);
let transl = translItem?.name || undefined
if (!transl) transl = talents_list[i]
@@ -374,6 +373,7 @@ Hooks.once('init', () => {
let s1 = res[1].trim(); // No () in talents table
translItem = game.babele.translate(compData.metadata.id, { name: s1 }, true)
let translw = translItem?.name || undefined
//console.log("Search talent name:", compData.metadata.id, s1, translw);
if (translw && translw != s1) {
transl = translw + " (" + subword + ")";
}
@@ -390,7 +390,7 @@ Hooks.once('init', () => {
"npc_characteristics": (chars) => { // Auto-convert char names in the sheet
for (let key in chars) {
let char = chars[key];
//console.log("Was here !", key, char );
//console.log("Was here !", key, char );
let abrev = char["abrev"];
let toTransl = "CHAR." + abrev;
if (game.i18n.localize(toTransl) != toTransl) { // Manages unknown language
@@ -437,7 +437,7 @@ Hooks.once('init', () => {
trait_en.name = nbt + trait_fr.name + special;
trait_en.system.description.value = trait_fr.system.description.value;
if (trait_en.system?.specification && isNaN(trait_en.system.specification.value)) { // This is a string, so translate it
//console.log("Translating : ", trait_en.system.specification.value);
//console.log("Translating : ", trait_en.system.specification.value);
trait_en.system.specification.value = game.i18n.localize(trait_en.system.specification.value.trim());
}
break // Translation has been found, skip other compendiums
@@ -480,7 +480,7 @@ Hooks.once('init', () => {
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("spell")
for (let compData of validCompendiums) {
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en }, true)
if (trait_fr?.system) {
if (trait_fr?.system) {
//DEBUG : console.log(">>>>> Spell ?", name_en, special, trait_fr);
WFRP4FrTranslation.parseSpellContent(trait_en)
trait_fr.name = trait_fr.name || name_en
@@ -500,12 +500,6 @@ Hooks.once('init', () => {
}
let validCompendiums = game.wfrp4e.tags.getPacksWithTag("talent")
for (let compData of validCompendiums) {
if (name_en === "Trapper") {
name_en = "a7v422EZcOUUC20X"
}
if (name_en === "Inspiring") {
name_en = "WCXnFSV4WOSmzzc4"
}
let trait_fr = game.babele.translate(compData.metadata.id, { name: name_en }, true)
if (trait_fr?.system) {
trait_fr.name = trait_fr.name || name_en // Security since babele v10
+43 -43
View File
@@ -105,9 +105,9 @@ export class WH4FRPatchConfig {
for ( let key in row) {
if (key != "range") {
if ( row[key].name == 'Slayer' ) {
row[key].name = "Slayer";
row[key].name = "Tueur Nains";
} else if ( row[key].name == 'Duelist' ) {
row[key].name = "Duellant";
row[key].name = "Duelliste";
//console.log(">>>>> Career ?", key, row[key].name, career_fr.name );
} else {
let career_fr = game.babele.translate( compendiumName, {name: row[key].name}, true );
@@ -124,8 +124,8 @@ export class WH4FRPatchConfig {
if (game.user.isGM) {
let coreC7 = game.modules.find(mod => mod.id == "wfrp4e-core")
if (!coreC7 || !coreC7.active) {
ui.notifications.warn("Sie haben das CoreC7-Modul nicht aktiviert! Die Übersetzung wird daher unvollständig und unwirksam sein.")
if (!coreC7 || !coreC7.active) {
ui.notifications.warn("Vous n'avez pas activé le module CoreC7 ! La traduction sera donc incomplète et inopérante.")
return
}
}
@@ -135,52 +135,52 @@ export class WH4FRPatchConfig {
game.wfrp4e.config.qualityDescriptions["distract"] = game.i18n.localize("WFRP4E.Properties.Distract"); // Patch missing quality
game.wfrp4e.config.talentBonuses = {
"gerissenheit": "int",
"einnehmendes wesen": "fel",
"meisterschütze": "bs",
"sehr stark": "s",
"aufgeweckt": "i",
"blitzschnelle reflexe": "ag",
"kühler kopf": "wp",
"unverwüstlich": "t",
"geschickte finger": "dex",
"geborener krieger": "ws"
"perspicace": "int",
"affable": "fel",
"tireur de précision": "bs",
"très fort": "s",
"vivacité": "i",
"reflexes foudroyants": "ag",
"imperturbable": "wp",
"très résistant": "t",
"doigts de fée": "dex",
"guerrier né": "ws"
}
if (game.wfrp4e.config.loreEffects) {
game.wfrp4e.config.loreEffects["beasts"].label = "Lehre der Bestien";
game.wfrp4e.config.loreEffects["death"].label = "Lehre des Todes";
game.wfrp4e.config.loreEffects["fire"].label = "Lehre des Feuers";
game.wfrp4e.config.loreEffects["metal"].label = "Lehre des Metalls";
game.wfrp4e.config.loreEffects["heavens"].label = "Lehre des Himmels";
game.wfrp4e.config.loreEffects["life"].label = "Lehre des Lebens";
game.wfrp4e.config.loreEffects["light"].label = "Lehre des Lichts";
game.wfrp4e.config.loreEffects["shadow"].label = "Lehre der Schatten";
game.wfrp4e.config.loreEffects["hedgecraft"].label = "Lehre der Heckenzauberei";
game.wfrp4e.config.loreEffects["hedgecraft"].label = "Lehre der Hexerei";
game.wfrp4e.config.loreEffects["beasts"].label = "Domaine des Bêtes"
game.wfrp4e.config.loreEffects["death"].label = "Domaine de la Mort"
game.wfrp4e.config.loreEffects["fire"].label = "Domaine du Feu"
game.wfrp4e.config.loreEffects["metal"].label = "Domaine du Métal"
game.wfrp4e.config.loreEffects["heavens"].label = "Domaine des Cieux"
game.wfrp4e.config.loreEffects["life"].label = "Domaine de la Vie"
game.wfrp4e.config.loreEffects["light"].label = "Domaine de la Lumière"
game.wfrp4e.config.loreEffects["shadow"].label = "Domaine des Ombres"
game.wfrp4e.config.loreEffects["hedgecraft"].label = "Domaine de la Magie de Village"
game.wfrp4e.config.loreEffects["hedgecraft"].label = "Domaine de la Sorcellerie"
}
if (game.wfrp4e.config.species) {
game.wfrp4e.config.species["human"] = "Mensch";
game.wfrp4e.config.species["dwarf"] = "Zwerg";
game.wfrp4e.config.species["halfling"] = "Halbling";
game.wfrp4e.config.species["helf"] = "Hochelf";
game.wfrp4e.config.species["welf"] = "Waldelf";
game.wfrp4e.config.species["human"] = "Humain";
game.wfrp4e.config.species["dwarf"] = "Nain";
game.wfrp4e.config.species["halfling"] = "Halfling";
game.wfrp4e.config.species["helf"] = "Haut Elfe";
game.wfrp4e.config.species["welf"] = "Elfe Sylvain";
}
if (game.wfrp4e.config.charastericticsBonus) {
game.wfrp4e.config.charastericticsBonus =
{
"ws": "Kampfgeschickbonus",
"bs": "Ballistische Fertigkeits Bonus",
"s": "Stärkebonus",
"t": "Widerstandsbonus",
"i": "Initiativebonus",
"ag": "Gewandheitsbonus",
"dex": "Geschicklichkeitsbonus",
"int": "Intelligenzbonus",
"wp": "Willenskraftbonus",
"fel": "Charismabonus"
"ws": "Bonus de Capacité de Combat",
"bs": "Bonus de Capacité de Tir",
"s": "Bonus de Force",
"t": "Bonus d'Endurance",
"i": "Bonus d'Initiative",
"ag": "Bonus d'Agilité",
"dex": "Bonus de Dexterité",
"int": "Bonus d'Intelligence",
"wp": "Bonus de Force Mentale",
"fel": "Bonus de Sociabilité"
}
}
@@ -996,7 +996,7 @@ export class WH4FRPatchConfig {
game.wfrp4e.config.symptomEffects = {
"blight": {
label: "Gift",
label: "Toxine",
icon: "modules/wfrp4e-core/icons/diseases/disease.png",
transfer: true,
flags: {
@@ -1006,9 +1006,9 @@ export class WH4FRPatchConfig {
"symptom": true,
"script": `
let difficulty = ""
if (this.effect.label.includes("moderat"))
if (this.effect.label.includes("Modéré"))
difficulty = "easy"
else if (this.effect.label.includes("schwerwiegend"))
else if (this.effect.label.includes("Sévère"))
difficulty = "average"
else
difficulty = "veasy"
@@ -1027,7 +1027,7 @@ export class WH4FRPatchConfig {
}
},
"buboes": {
label: "Blasen",
label: "Bubons",
icon: "modules/wfrp4e-core/icons/diseases/disease.png",
transfer: true,
flags: {