« MediaWiki:Common.js » : différence entre les versions

De COSMOCATZ LORE WIKI
Aller à la navigation Aller à la recherche
Page créée avec « // COSMOCATZ Translation System - À ajouter au Common.js $(document).ready(function() { // Initialiser le système de traduction COSMOCATZ initCosmocatzTranslation(); }); function initCosmocatzTranslation() { // Créer le sélecteur de langue createLanguageSelector(); // Charger la langue sauvegardée const savedLang = localStorage.getItem('cosmocatz-lang') || 'fr'; switchCosmocatzLanguage(savedLang); // Auto-détecter... »
 
(Aucune différence)

Dernière version du 17 juin 2025 à 03:45

// COSMOCATZ Translation System - À ajouter au Common.js

$(document).ready(function() {
    // Initialiser le système de traduction COSMOCATZ
    initCosmocatzTranslation();
});

function initCosmocatzTranslation() {
    // Créer le sélecteur de langue
    createLanguageSelector();
    
    // Charger la langue sauvegardée
    const savedLang = localStorage.getItem('cosmocatz-lang') || 'fr';
    switchCosmocatzLanguage(savedLang);
    
    // Auto-détecter les sections traduisibles
    detectTranslatableSections();
}

function createLanguageSelector() {
    // Vérifier si le sélecteur existe déjà
    if ($('#cosmocatz-lang-selector').length > 0) return;
    
    const langSelector = $(`
        <div id="cosmocatz-lang-selector">
            <a href="#" class="cosmocatz-lang-button" data-lang="fr">
                🇫🇷 FR
            </a>
            <a href="#" class="cosmocatz-lang-button" data-lang="en">
                🇺🇸 EN
            </a>
        </div>
    `);
    
    // Ajouter au body
    $('body').append(langSelector);
    
    // Gestionnaire d'événements
    $('.cosmocatz-lang-button').click(function(e) {
        e.preventDefault();
        const lang = $(this).data('lang');
        switchCosmocatzLanguage(lang);
    });
}

function switchCosmocatzLanguage(lang) {
    // Mettre à jour la classe du body
    $('body').removeClass('cosmocatz-lang-fr cosmocatz-lang-en');
    $('body').addClass(`cosmocatz-lang-${lang}`);
    
    // Mettre à jour les boutons
    $('.cosmocatz-lang-button').removeClass('active inactive');
    $(`.cosmocatz-lang-button[data-lang="${lang}"]`).addClass('active');
    $(`.cosmocatz-lang-button[data-lang!="${lang}"]`).addClass('inactive');
    
    // Sauvegarder le choix
    localStorage.setItem('cosmocatz-lang', lang);
    
    // Effet de transition
    $('.lang-fr, .lang-en').css('opacity', '0.5');
    setTimeout(() => {
        $('.lang-fr, .lang-en').css('opacity', '1');
    }, 200);
    
    // Déclencher un événement personnalisé
    $(document).trigger('cosmocatzLanguageChanged', [lang]);
}

function detectTranslatableSections() {
    // Marquer les titres qui ont des traductions
    $('h1, h2, h3, h4, h5, h6').each(function() {
        const $heading = $(this);
        const text = $heading.text().trim();
        
        // Chercher des traductions potentielles
        const $nextElements = $heading.nextAll().slice(0, 3);
        let hasTranslation = false;
        
        $nextElements.each(function() {
            if ($(this).hasClass('lang-fr') || $(this).hasClass('lang-en')) {
                hasTranslation = true;
                return false;
            }
        });
        
        if (hasTranslation) {
            $heading.addClass('translation-available');
        }
    });
}

// Fonctions utilitaires pour les développeurs
window.CosmocatzTranslation = {
    // Obtenir la langue actuelle
    getCurrentLanguage: function() {
        return localStorage.getItem('cosmocatz-lang') || 'fr';
    },
    
    // Changer de langue programmatiquement
    setLanguage: function(lang) {
        switchCosmocatzLanguage(lang);
    },
    
    // Créer un contenu traduisible
    createTranslatable: function(frContent, enContent, tag = 'div') {
        return `
            <${tag} class="lang-fr">${frContent}</${tag}>
            <${tag} class="lang-en">${enContent}</${tag}>
        `;
    },
    
    // Ajouter une traduction à un élément existant
    addTranslation: function(selector, lang, content) {
        const $element = $(selector);
        if ($element.length > 0) {
            const $translation = $(`<div class="lang-${lang}">${content}</div>`);
            $element.after($translation);
        }
    }
};

// Auto-traduction simple pour certains termes (optionnel)
const translations = {
    'fr': {
        'Edit': 'Modifier',
        'Discussion': 'Discussion',
        'History': 'Historique',
        'Search': 'Rechercher',
        'Main Page': 'Accueil',
        'Special pages': 'Pages spéciales',
        'Navigation': 'Navigation',
        'Tools': 'Outils'
    },
    'en': {
        'Modifier': 'Edit',
        'Discussion': 'Discussion',
        'Historique': 'History',
        'Rechercher': 'Search',
        'Accueil': 'Main Page',
        'Pages spéciales': 'Special pages',
        'Navigation': 'Navigation',
        'Outils': 'Tools'
    }
};

function autoTranslateInterface() {
    const currentLang = window.CosmocatzTranslation.getCurrentLanguage();
    const translationMap = translations[currentLang];
    
    if (!translationMap) return;
    
    // Traduire les éléments de navigation
    $('#mw-panel a, .vector-menu-tabs a').each(function() {
        const $link = $(this);
        const text = $link.text().trim();
        
        if (translationMap[text]) {
            $link.text(translationMap[text]);
        }
    });
}

// Écouter les changements de langue
$(document).on('cosmocatzLanguageChanged', function(event, lang) {
    console.log(`COSMOCATZ: Language switched to ${lang}`);
    autoTranslateInterface();
});

// Auto-détection de la langue du navigateur (première visite)
function detectBrowserLanguage() {
    if (!localStorage.getItem('cosmocatz-lang')) {
        const browserLang = navigator.language || navigator.languages[0];
        if (browserLang.startsWith('en')) {
            switchCosmocatzLanguage('en');
        } else {
            switchCosmocatzLanguage('fr');
        }
    }
}

// Initialiser la détection de langue
detectBrowserLanguage();