« MediaWiki:Common.js » : différence entre les versions
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();