117 lines
4.1 KiB
JavaScript
117 lines
4.1 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 scriptsToReview = JSON.parse(fs.readFileSync(REVIEW_FILE, 'utf-8'));
|
|
|
|
// Dictionnaire de traductions courantes
|
|
const translations = {
|
|
'Loading Spells': 'Chargement des sorts',
|
|
'Loading': 'Chargement',
|
|
'Could not find': 'Impossible de trouver',
|
|
'Try Again': 'Essayez à nouveau',
|
|
'Error': 'Erreur',
|
|
'Success': 'Succès',
|
|
'Warning': 'Avertissement',
|
|
'Created': 'Créé',
|
|
'Modified': 'Modifié',
|
|
'Deleted': 'Supprimé',
|
|
'Are you sure': 'Êtes-vous sûr',
|
|
'Do you want': 'Voulez-vous',
|
|
'Cancel': 'Annuler',
|
|
'Confirm': 'Confirmer',
|
|
'Yes': 'Oui',
|
|
'No': 'Non'
|
|
};
|
|
|
|
function translateText(text) {
|
|
// Remplacer les traductions connues
|
|
let translated = text;
|
|
for (const [en, fr] of Object.entries(translations)) {
|
|
translated = translated.replace(new RegExp(en, 'g'), fr);
|
|
}
|
|
return translated;
|
|
}
|
|
|
|
function mergeScript(wfrp4eContent, frContent) {
|
|
// Commence avec la version WFRP4E (à jour)
|
|
let merged = wfrp4eContent;
|
|
|
|
// Extraire les textes traduits du script FR
|
|
const frTexts = new Map();
|
|
const textPattern = /["'`]([^"'`]+)["'`]/g;
|
|
|
|
let match;
|
|
while ((match = textPattern.exec(frContent)) !== null) {
|
|
const text = match[1];
|
|
// Si le texte contient des mots français caractéristiques
|
|
if (/Chargement|Impossible|Êtes-vous|Voulez-vous|créé|modifié|supprimé|Erreur/i.test(text)) {
|
|
// Chercher le texte anglais correspondant dans WFRP4E
|
|
const enMatch = wfrp4eContent.match(new RegExp(`["'\`]([^"'\`]*${text.split(' ')[0]}[^"'\`]*)["'\`]`));
|
|
if (enMatch) {
|
|
frTexts.set(enMatch[1], text);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Appliquer les traductions connues
|
|
for (const [en, fr] of frTexts.entries()) {
|
|
merged = merged.replace(new RegExp(`["'\`]${en.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}["'\`]`, 'g'), `"${fr}"`);
|
|
}
|
|
|
|
// Appliquer le dictionnaire de traductions
|
|
for (const [en, fr] of Object.entries(translations)) {
|
|
merged = merged.replace(new RegExp(`["'\`]${en}["'\`]`, 'g'), `"${fr}"`);
|
|
}
|
|
|
|
// Cas spéciaux pour les template literals
|
|
merged = merged.replace(/`Could not find \$\{([^}]+)\} spell\. Try Again`/g, '`Impossible de trouver le sort ${$1}. Essayez à nouveau`');
|
|
|
|
return merged;
|
|
}
|
|
|
|
console.log('Révision semi-automatique des scripts...\n');
|
|
|
|
let updated = 0;
|
|
let skipped = 0;
|
|
|
|
scriptsToReview.forEach(({file}) => {
|
|
const wfrp4ePath = path.join(WFRP4E_SCRIPTS, file);
|
|
const frPath = path.join(FR_SCRIPTS, file);
|
|
const backupPath = frPath + '.backup';
|
|
|
|
const wfrp4eContent = fs.readFileSync(wfrp4ePath, 'utf-8');
|
|
const frContent = fs.readFileSync(frPath, 'utf-8');
|
|
|
|
// Sauvegarder l'original
|
|
fs.copyFileSync(frPath, backupPath);
|
|
|
|
// Tenter la fusion
|
|
const merged = mergeScript(wfrp4eContent, frContent);
|
|
|
|
// Vérifier si des traductions ont été préservées
|
|
const hasTranslations = /Chargement|Impossible|Êtes-vous|Voulez-vous|créé|modifié|supprimé|Erreur/i.test(merged);
|
|
|
|
if (hasTranslations) {
|
|
fs.writeFileSync(frPath, merged, 'utf-8');
|
|
updated++;
|
|
console.log(`✓ Mis à jour avec traductions: ${file}`);
|
|
} else {
|
|
// Restaurer l'original si aucune traduction n'a été préservée
|
|
fs.copyFileSync(backupPath, frPath);
|
|
skipped++;
|
|
console.log(`⚠ Révision manuelle requise: ${file}`);
|
|
}
|
|
});
|
|
|
|
console.log(`\n=== Résumé ===`);
|
|
console.log(`Scripts mis à jour automatiquement: ${updated}`);
|
|
console.log(`Scripts nécessitant révision manuelle: ${skipped}`);
|
|
console.log(`\nNOTE: Les fichiers .backup contiennent les versions originales.`);
|
|
console.log(`Vérifiez les fichiers mis à jour avant de supprimer les backups.`);
|