forked from public/foundryvtt-wh4-lang-fr-fr
155 lines
5.7 KiB
JavaScript
155 lines
5.7 KiB
JavaScript
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import { fileURLToPath } from 'node: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 REVIEW_FILE = path.join(__dirname, 'scripts-to-review.json');
|
|
const OUTPUT_FILE = path.join(__dirname, 'scripts-replaced-list.md');
|
|
|
|
const scriptsToReview = JSON.parse(fs.readFileSync(REVIEW_FILE, 'utf-8'));
|
|
|
|
console.log(`\n=== REMPLACEMENT DES SCRIPTS PAR LES VERSIONS SYSTÈME ===\n`);
|
|
console.log(`Nombre de scripts à remplacer: ${scriptsToReview.length}\n`);
|
|
|
|
let replaced = 0;
|
|
let errors = [];
|
|
const replacedList = [];
|
|
|
|
scriptsToReview.forEach(({file, reason}, index) => {
|
|
const wfrp4ePath = path.join(WFRP4E_SCRIPTS, file);
|
|
const frPath = path.join(FR_SCRIPTS, file);
|
|
const backupPath = frPath + '.fr-backup';
|
|
|
|
try {
|
|
// Sauvegarder la version FR avec traductions
|
|
if (fs.existsSync(frPath)) {
|
|
fs.copyFileSync(frPath, backupPath);
|
|
}
|
|
|
|
// Remplacer par la version WFRP4E
|
|
if (fs.existsSync(wfrp4ePath)) {
|
|
fs.copyFileSync(wfrp4ePath, frPath);
|
|
replaced++;
|
|
|
|
// Extraire les textes traduits de la sauvegarde pour référence
|
|
const frContent = fs.readFileSync(backupPath, 'utf-8');
|
|
const translations = extractTranslations(frContent);
|
|
|
|
replacedList.push({
|
|
index: index + 1,
|
|
file,
|
|
translations
|
|
});
|
|
|
|
console.log(`✓ [${index + 1}/${scriptsToReview.length}] ${file}`);
|
|
} else {
|
|
errors.push(`Source non trouvée: ${file}`);
|
|
console.log(`✗ [${index + 1}/${scriptsToReview.length}] ${file} - Source non trouvée`);
|
|
}
|
|
} catch (error) {
|
|
errors.push(`${file}: ${error.message}`);
|
|
console.log(`✗ [${index + 1}/${scriptsToReview.length}] ${file} - Erreur: ${error.message}`);
|
|
}
|
|
});
|
|
|
|
function extractTranslations(content) {
|
|
const translations = [];
|
|
|
|
// Patterns pour extraire les textes en français
|
|
const patterns = [
|
|
/ui\.notifications\.(info|warn|error|notify)\s*\(\s*["'`]([^"'`]+)["'`]/g,
|
|
/this\.script\.(scriptNotification|scriptMessage|notification)\s*\(\s*["'`]([^"'`]+)["'`]/g,
|
|
/["'`](Chargement|Impossible|Êtes-vous|Voulez-vous|créé|modifié|supprimé|Erreur)[^"'`]*["'`]/gi,
|
|
/warhammer\.utility\.findAllItems\([^,]+,\s*["'`]([^"'`]+)["'`]/g
|
|
];
|
|
|
|
patterns.forEach(pattern => {
|
|
const regex = new RegExp(pattern.source, pattern.flags);
|
|
let match;
|
|
while ((match = regex.exec(content)) !== null) {
|
|
const text = match[2] || match[1];
|
|
if (text && text.length > 3 && /[a-zàâäéèêëïîôöùûüÿçœæ]/i.test(text)) {
|
|
if (!translations.includes(text)) {
|
|
translations.push(text);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
return translations;
|
|
}
|
|
|
|
// Générer le rapport
|
|
let report = `# Scripts remplacés par les versions système\n\n`;
|
|
report += `Date: ${new Date().toISOString()}\n\n`;
|
|
report += `## Résumé\n\n`;
|
|
report += `- **Scripts remplacés**: ${replaced}\n`;
|
|
report += `- **Erreurs**: ${errors.length}\n\n`;
|
|
report += `Tous les scripts ont été remplacés par leurs versions du système WFRP4E.\n`;
|
|
report += `Les versions françaises avec traductions sont sauvegardées avec l'extension \`.fr-backup\`.\n\n`;
|
|
|
|
if (errors.length > 0) {
|
|
report += `## Erreurs\n\n`;
|
|
errors.forEach(error => {
|
|
report += `- ${error}\n`;
|
|
});
|
|
report += `\n`;
|
|
}
|
|
|
|
report += `## Scripts à revoir manuellement\n\n`;
|
|
report += `Pour chaque script, vous devez :\n`;
|
|
report += `1. Comparer la version actuelle (système) avec le backup (.fr-backup)\n`;
|
|
report += `2. Identifier les textes à traduire\n`;
|
|
report += `3. Appliquer les traductions nécessaires\n\n`;
|
|
|
|
report += `| # | Fichier | Traductions trouvées |\n`;
|
|
report += `|---|---------|----------------------|\n`;
|
|
|
|
replacedList.forEach(({index, file, translations}) => {
|
|
const translationsText = translations.length > 0
|
|
? translations.slice(0, 3).join(', ') + (translations.length > 3 ? '...' : '')
|
|
: 'Aucune';
|
|
report += `| ${index} | \`${file}\` | ${translationsText} |\n`;
|
|
});
|
|
|
|
report += `\n## Commandes utiles\n\n`;
|
|
report += `### Comparer un script avec son backup\n\n`;
|
|
report += `\`\`\`bash\n`;
|
|
report += `# Avec meld\n`;
|
|
report += `meld scripts/<fichier> scripts/<fichier>.fr-backup\n\n`;
|
|
report += `# Avec diff\n`;
|
|
report += `diff -u scripts/<fichier>.fr-backup scripts/<fichier>\n`;
|
|
report += `\`\`\`\n\n`;
|
|
|
|
report += `### Exemples de scripts\n\n`;
|
|
if (replacedList.length > 0) {
|
|
const example = replacedList[0];
|
|
report += `Premier script: \`${example.file}\`\n\n`;
|
|
report += `\`\`\`bash\n`;
|
|
report += `meld scripts/${example.file} scripts/${example.file}.fr-backup\n`;
|
|
report += `\`\`\`\n\n`;
|
|
|
|
if (example.translations.length > 0) {
|
|
report += `Traductions à réappliquer:\n`;
|
|
example.translations.forEach(t => {
|
|
report += `- "${t}"\n`;
|
|
});
|
|
}
|
|
}
|
|
|
|
fs.writeFileSync(OUTPUT_FILE, report, 'utf-8');
|
|
|
|
console.log(`\n=== RÉSUMÉ ===`);
|
|
console.log(`Scripts remplacés: ${replaced}/${scriptsToReview.length}`);
|
|
console.log(`Erreurs: ${errors.length}`);
|
|
console.log(`\nBackups créés avec extension: .fr-backup`);
|
|
console.log(`Liste détaillée: ${OUTPUT_FILE}`);
|
|
|
|
console.log(`\n=== PROCHAINES ÉTAPES ===`);
|
|
console.log(`1. Consulter: ${OUTPUT_FILE}`);
|
|
console.log(`2. Pour chaque script, comparer avec son .fr-backup`);
|
|
console.log(`3. Réappliquer les traductions nécessaires`);
|
|
console.log(`4. Supprimer les .fr-backup une fois terminé\n`);
|