Files
foundryvtt-wh4-lang-fr-fr/tools/translate-ids.js

82 lines
2.6 KiB
JavaScript

import fs from 'fs';
import path from 'path';
// Lire et parser le JSON
const jsonPath = './compendium/wfrp4e-core.items.json';
console.log('Lecture du fichier JSON...');
const jsonData = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
// Créer le mapping id -> name
const idToName = {};
jsonData.entries.forEach(entry => {
if (entry.id && entry.name) {
idToName[entry.id] = entry.name;
}
});
console.log(`Nombre d'entrées trouvées: ${Object.keys(idToName).length}`);
// Fonction pour échapper les regex
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
// Parcourir tous les fichiers .js dans scripts/
const scriptsDir = './scripts/';
console.log('Analyse des fichiers dans', scriptsDir);
const files = fs.readdirSync(scriptsDir).filter(f => f.endsWith('.js'));
console.log(`${files.length} fichiers .js trouvés`);
let totalReplacements = 0;
let filesModified = 0;
const modifications = {};
files.forEach(file => {
const filePath = path.join(scriptsDir, file);
let content = fs.readFileSync(filePath, 'utf8');
let originalContent = content;
let fileReplacements = 0;
// Pour chaque ID, chercher et remplacer les occurrences entre guillemets
Object.entries(idToName).forEach(([id, name]) => {
// Chercher l'ID entre guillemets simples ou doubles
const pattern1 = new RegExp('"' + escapeRegExp(id) + '"', 'g');
const pattern2 = new RegExp("'" + escapeRegExp(id) + "'", 'g');
const matches1 = (content.match(pattern1) || []).length;
const matches2 = (content.match(pattern2) || []).length;
if (matches1 > 0 || matches2 > 0) {
content = content.replace(pattern1, '"' + name + '"');
content = content.replace(pattern2, "'" + name + "'");
if (!modifications[file]) modifications[file] = [];
modifications[file].push(` ${id} -> ${name} (${matches1 + matches2} fois)`);
fileReplacements += matches1 + matches2;
}
});
if (content !== originalContent) {
fs.writeFileSync(filePath, content, 'utf8');
filesModified++;
totalReplacements += fileReplacements;
}
});
console.log('\n===== RÉSULTAT =====');
console.log(`Fichiers modifiés: ${filesModified} / ${files.length}`);
console.log(`Total de remplacements: ${totalReplacements}`);
if (filesModified > 0) {
console.log('\n===== DÉTAILS DES MODIFICATIONS =====');
Object.entries(modifications).forEach(([file, changes]) => {
console.log(`\n${file}:`);
changes.slice(0, 10).forEach(change => console.log(change));
if (changes.length > 10) {
console.log(` ... et ${changes.length - 10} autres remplacements`);
}
});
}
console.log('\n✓ Traitement terminé !');