AccesSight

Améliore l'accessibilité des sites web pour les utilisateurs malvoyants.

目前為 2024-03-16 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         AccesSight
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Améliore l'accessibilité des sites web pour les utilisateurs malvoyants.
// @author       YGL, Benjamin Moine
// @include      *
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_deleteValue
// @license      Gnu GPL 3.0.
// ==/UserScript==

(function() {
    'use strict';

    // Ressources de traduction pour les différentes langues
    const translations = {
        fr: {
            appTitle: "AccesSight",
            functionality1: "Fonctionnalité 1",
            functionality2: "Fonctionnalité 2",
            functionality3: "Fonctionnalité 3",
            // Ajoutez les autres traductions ici...
        },
        en: {
            appTitle: "AccesSight",
            functionality1: "Functionality 1",
            functionality2: "Functionality 2",
            functionality3: "Functionality 3",
            // Ajoutez les autres traductions ici...
        },
        // Ajoutez les autres langues ici...
    };

    // Fonction pour détecter la langue de l'utilisateur
    function detectUserLanguage() {
        const userLanguage = navigator.language || navigator.userLanguage;
        return userLanguage.split("-")[0];
    }

    // Langue par défaut
    const defaultLanguage = 'fr';

    // Langue de l'utilisateur
    const userLanguage = detectUserLanguage();

    // Initialisation de i18next avec la langue détectée
    i18next.init({
        lng: userLanguage || defaultLanguage,
        resources: translations,
        fallbackLng: defaultLanguage
    });

    // Fonction pour changer la langue
    function changeLanguage(lang) {
        i18next.changeLanguage(lang);
    }

    // Création du menu pour choisir la langue
    const languageMenu = document.createElement('div');
    languageMenu.innerHTML = `
        <select id="languageSelect">
            <option value="fr">Français</option>
            <option value="en">English</option>
            <!-- Ajoutez les autres langues ici -->
        </select>
    `;
    languageMenu.style.position = 'fixed';
    languageMenu.style.top = '20px';
    languageMenu.style.right = '20px';
    document.body.appendChild(languageMenu);

    // Événement pour changer la langue lorsque l'utilisateur choisit une option
    document.getElementById('languageSelect').addEventListener('change', function() {
        const selectedLanguage = this.value;
        changeLanguage(selectedLanguage);
    });

    // Styles pour l'interface utilisateur
    const styles = `
        /* Fond sombre pour l'application */
        body {
            background-color: #0f1c29;
            color: #fff; /* Couleur du texte */
        }

        /* Menu utilisateur */
        header {
            background-color: #1f364d;
            border-radius: 10px;
            padding: 20px;
            position: fixed;
            top: 20px;
            right: 20px;
            z-index: 1000;
        }

        /* Liens du menu */
        nav ul {
            list-style-type: none;
            padding: 0;
        }

        nav ul li {
            display: inline;
            margin-right: 10px;
        }

        nav ul li a {
            color: #fff;
            text-decoration: none;
            padding: 5px 10px;
            border-radius: 5px;
            transition: background-color 0.3s ease;
        }

        nav ul li a:hover {
            background-color: #2e4a62;
        }

        /* Contenu principal */
        main {
            margin-top: 100px; /* Pour éviter que le contenu ne soit caché par le header */
        }

        /* Pied de page */
        footer {
            background-color: #1f364d;
            text-align: center;
            padding: 20px;
            color: #fff;
            clear: both;
        }
    `;

    // Injecter les styles dans la page
    const styleElement = document.createElement('style');
    styleElement.textContent = styles;
    document.head.appendChild(styleElement);

    // Balises sémantiques pour améliorer l'accessibilité
    const headerElement = document.createElement('header');
    headerElement.innerHTML = `
        <h1>${i18next.t('appTitle')}</h1>
        <nav>
            <ul>
                <li><a href="#fonctionnalite1">${i18next.t('functionality1')}</a></li>
                <li><a href="#fonctionnalite2">${i18next.t('functionality2')}</a></li>
                <li><a href="#fonctionnalite3">${i18next.t('functionality3')}</a></li>
            </ul>
        </nav>
    `;
    document.body.prepend(headerElement);

    const mainElement = document.createElement('main');
    mainElement.innerHTML = `
        <section id="fonctionnalite1">
            <h2>${i18next.t('functionality1')}</h2>
            <p>Description de la fonctionnalité 1.</p>
        </section>
        
        <section id="fonctionnalite2">
            <h2>${i18next.t('functionality2')}</h2>
            <p>Description de la fonctionnalité 2.</p>
        </section>
        
        <section id="fonctionnalite3">
            <h2>${i18next.t('functionality3')}</h2>
            <p>Description de la fonctionnalité 3.</p>
        </section>
    `;
    document.body.appendChild(mainElement);

    const footerElement = document.createElement('footer');
    footerElement.innerHTML = `<p>${i18next.t('appTitle')} - Tous droits réservés</p>`;
    document.body.appendChild(footerElement);
})();