Ajout de la commande /voyage et grosse MAJK de la commande /auberge
This commit is contained in:
196
tools/sync-scripts.js
Normal file
196
tools/sync-scripts.js
Normal file
@@ -0,0 +1,196 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const WFRP4E_SCRIPTS = '/home/morr/work/foundryvtt/WFRP4e-FoundryVTT/scripts';
|
||||
const FR_SCRIPTS = '/home/morr/work/foundryvtt/foundryvtt-wh4-lang-fr-fr/scripts';
|
||||
const REPORT_FILE = '/home/morr/work/foundryvtt/foundryvtt-wh4-lang-fr-fr/tools/script-comparison-report.md';
|
||||
|
||||
// Recherche des patterns qui indiquent du texte localisé
|
||||
const LOCALIZE_PATTERNS = [
|
||||
/game\.i18n\.localize\(/g,
|
||||
/game\.i18n\.format\(/g,
|
||||
/game\.wfrp4e\.i18n\./g
|
||||
];
|
||||
|
||||
// Patterns de textes en dur qui ont probablement été traduits
|
||||
const HARDCODED_TEXT_PATTERNS = [
|
||||
/ui\.notifications\.(info|warn|error|notify)\s*\(\s*["'`]([^"'`]+)["'`]/g,
|
||||
/this\.script\.(scriptNotification|scriptMessage|notification)\s*\(\s*["'`]([^"'`]+)["'`]/g
|
||||
];
|
||||
|
||||
function analyzeScript(filePath) {
|
||||
const content = fs.readFileSync(filePath, 'utf-8');
|
||||
|
||||
// Vérifie si le fichier utilise localize()
|
||||
const hasLocalize = LOCALIZE_PATTERNS.some(pattern => pattern.test(content));
|
||||
|
||||
// Extrait les textes en dur
|
||||
const hardcodedTexts = [];
|
||||
HARDCODED_TEXT_PATTERNS.forEach(pattern => {
|
||||
const matches = content.matchAll(pattern);
|
||||
for (const match of matches) {
|
||||
hardcodedTexts.push(match[2] || match[1]);
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
hasLocalize,
|
||||
hardcodedTexts,
|
||||
content,
|
||||
size: content.length
|
||||
};
|
||||
}
|
||||
|
||||
function compareScripts() {
|
||||
const wfrp4eFiles = fs.readdirSync(WFRP4E_SCRIPTS).filter(f => f.endsWith('.js'));
|
||||
const frFiles = fs.readdirSync(FR_SCRIPTS).filter(f => f.endsWith('.js'));
|
||||
|
||||
const results = {
|
||||
identical: [],
|
||||
needsUpdate: [],
|
||||
usesLocalize: [],
|
||||
onlyInFR: [],
|
||||
onlyInWFRP4E: [],
|
||||
total: 0
|
||||
};
|
||||
|
||||
// Fichiers présents seulement dans le module FR
|
||||
frFiles.forEach(file => {
|
||||
if (!wfrp4eFiles.includes(file)) {
|
||||
results.onlyInFR.push(file);
|
||||
}
|
||||
});
|
||||
|
||||
// Fichiers présents seulement dans WFRP4E
|
||||
wfrp4eFiles.forEach(file => {
|
||||
if (!frFiles.includes(file)) {
|
||||
results.onlyInWFRP4E.push(file);
|
||||
}
|
||||
});
|
||||
|
||||
// Comparaison des fichiers communs
|
||||
const commonFiles = wfrp4eFiles.filter(f => frFiles.includes(f));
|
||||
results.total = commonFiles.length;
|
||||
|
||||
commonFiles.forEach(file => {
|
||||
const wfrp4ePath = path.join(WFRP4E_SCRIPTS, file);
|
||||
const frPath = path.join(FR_SCRIPTS, file);
|
||||
|
||||
const wfrp4e = analyzeScript(wfrp4ePath);
|
||||
const fr = analyzeScript(frPath);
|
||||
|
||||
// Si WFRP4E utilise localize(), le script FR n'est plus nécessaire
|
||||
if (wfrp4e.hasLocalize) {
|
||||
results.usesLocalize.push({
|
||||
file,
|
||||
details: 'Le système utilise maintenant localize() - script FR obsolète'
|
||||
});
|
||||
}
|
||||
// Si les contenus sont identiques
|
||||
else if (wfrp4e.content === fr.content) {
|
||||
results.identical.push(file);
|
||||
}
|
||||
// Si différents, besoin de mise à jour
|
||||
else {
|
||||
results.needsUpdate.push({
|
||||
file,
|
||||
wfrp4eSize: wfrp4e.size,
|
||||
frSize: fr.size,
|
||||
wfrp4eTexts: wfrp4e.hardcodedTexts,
|
||||
frTexts: fr.hardcodedTexts
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
function generateReport(results) {
|
||||
let report = `# Rapport de comparaison des scripts\n\n`;
|
||||
report += `Date: ${new Date().toISOString()}\n\n`;
|
||||
report += `## Résumé\n\n`;
|
||||
report += `- **Total de fichiers communs**: ${results.total}\n`;
|
||||
report += `- **Scripts identiques**: ${results.identical.length}\n`;
|
||||
report += `- **Scripts nécessitant mise à jour**: ${results.needsUpdate.length}\n`;
|
||||
report += `- **Scripts utilisant localize() (obsolètes)**: ${results.usesLocalize.length}\n`;
|
||||
report += `- **Scripts uniquement dans FR**: ${results.onlyInFR.length}\n`;
|
||||
report += `- **Scripts uniquement dans WFRP4E**: ${results.onlyInWFRP4E.length}\n\n`;
|
||||
|
||||
if (results.usesLocalize.length > 0) {
|
||||
report += `## Scripts obsolètes (utilisant localize() dans WFRP4E)\n\n`;
|
||||
report += `Ces scripts peuvent être supprimés du module FR car le système utilise maintenant les fichiers de localisation.\n\n`;
|
||||
results.usesLocalize.forEach(({file, details}) => {
|
||||
report += `- \`${file}\` - ${details}\n`;
|
||||
});
|
||||
report += `\n`;
|
||||
}
|
||||
|
||||
if (results.needsUpdate.length > 0) {
|
||||
report += `## Scripts nécessitant une mise à jour\n\n`;
|
||||
results.needsUpdate.slice(0, 50).forEach(item => {
|
||||
report += `### ${item.file}\n\n`;
|
||||
report += `- Taille WFRP4E: ${item.wfrp4eSize} octets\n`;
|
||||
report += `- Taille FR: ${item.frSize} octets\n`;
|
||||
if (item.wfrp4eTexts.length > 0) {
|
||||
report += `- Textes WFRP4E: ${item.wfrp4eTexts.join(', ')}\n`;
|
||||
}
|
||||
if (item.frTexts.length > 0) {
|
||||
report += `- Textes FR: ${item.frTexts.join(', ')}\n`;
|
||||
}
|
||||
report += `\n`;
|
||||
});
|
||||
if (results.needsUpdate.length > 50) {
|
||||
report += `\n... et ${results.needsUpdate.length - 50} autres fichiers\n\n`;
|
||||
}
|
||||
}
|
||||
|
||||
if (results.onlyInWFRP4E.length > 0) {
|
||||
report += `## Scripts uniquement dans WFRP4E (${results.onlyInWFRP4E.length})\n\n`;
|
||||
report += `Ces scripts existent dans WFRP4E mais pas dans le module FR.\n\n`;
|
||||
results.onlyInWFRP4E.slice(0, 20).forEach(file => {
|
||||
report += `- ${file}\n`;
|
||||
});
|
||||
if (results.onlyInWFRP4E.length > 20) {
|
||||
report += `\n... et ${results.onlyInWFRP4E.length - 20} autres\n`;
|
||||
}
|
||||
report += `\n`;
|
||||
}
|
||||
|
||||
if (results.onlyInFR.length > 0) {
|
||||
report += `## Scripts uniquement dans FR (${results.onlyInFR.length})\n\n`;
|
||||
report += `Ces scripts existent dans le module FR mais plus dans WFRP4E (probablement supprimés).\n\n`;
|
||||
results.onlyInFR.slice(0, 20).forEach(file => {
|
||||
report += `- ${file}\n`;
|
||||
});
|
||||
if (results.onlyInFR.length > 20) {
|
||||
report += `\n... et ${results.onlyInFR.length - 20} autres\n`;
|
||||
}
|
||||
report += `\n`;
|
||||
}
|
||||
|
||||
return report;
|
||||
}
|
||||
|
||||
console.log('Analyse des scripts en cours...');
|
||||
const results = compareScripts();
|
||||
const report = generateReport(results);
|
||||
|
||||
fs.writeFileSync(REPORT_FILE, report, 'utf-8');
|
||||
|
||||
console.log(`\nRapport généré: ${REPORT_FILE}`);
|
||||
console.log(`\nRésumé:`);
|
||||
console.log(` Identiques: ${results.identical.length}`);
|
||||
console.log(` À mettre à jour: ${results.needsUpdate.length}`);
|
||||
console.log(` Obsolètes (localize): ${results.usesLocalize.length}`);
|
||||
console.log(` Uniquement FR: ${results.onlyInFR.length}`);
|
||||
console.log(` Uniquement WFRP4E: ${results.onlyInWFRP4E.length}`);
|
||||
|
||||
// Export des résultats pour utilisation ultérieure
|
||||
fs.writeFileSync(
|
||||
path.join(path.dirname(REPORT_FILE), 'script-comparison-data.json'),
|
||||
JSON.stringify(results, null, 2),
|
||||
'utf-8'
|
||||
);
|
||||
Reference in New Issue
Block a user