| const translations = {
|
| fr: {
|
| "Chargement des données...": "Loading data...",
|
| "Veuillez patienter.": "Please wait.",
|
| "Guide d'Utilisation": "Usage Guide",
|
| "Guide Rapide de l'Outil": "Quick Tool Guide",
|
| "1. Choisissez une Vue": "1. Choose a View",
|
| "Utilisez les boutons ci-dessous pour sélectionner votre niveau d'analyse.": "Use the buttons below to select your analysis level.",
|
| "2. Filtrez les Données": "2. Filter Data",
|
| "Utilisez la recherche et les filtres pour affiner les résultats.": "Use search and filters to refine results.",
|
| "3. Analysez en Profondeur": "3. Analyze in Depth",
|
| "Cliquez sur les lignes du tableau ou utilisez la vue comparative.": "Click on table rows or use the comparative view.",
|
| "Comprendre la Méthodologie FDA de Classement des Risques": "Understanding the FDA Risk Ranking Methodology",
|
| "Qu'est-ce que le Modèle de Classement des Risques de la FDA ?": "What is the FDA Risk Ranking Model?",
|
| "Le FDA Risk-Ranking Model est un outil scientifique développé par l'administration américaine (FDA) pour prioriser les efforts de surveillance et de contrôle dans l'industrie alimentaire. Il permet d'identifier quels couples produit/danger représentent les risques les plus élevés pour la santé publique.": "The FDA Risk-Ranking Model is a scientific tool developed by the U.S. administration (FDA) to prioritize surveillance and control efforts in the food industry. It identifies which product/hazard pairs represent the highest risks to public health.",
|
| "Objectif principal :": "Main Objective:",
|
| "Aider les autorités sanitaires et les professionnels de l'alimentaire à concentrer leurs ressources limitées sur les risques qui comptent vraiment.": "Help health authorities and food professionals focus their limited resources on the risks that truly matter.",
|
| "Comment ça fonctionne : Les 7 Critères d'Évaluation": "How it Works: The 7 Evaluation Criteria",
|
| "Chaque couple produit/pathogène est évalué selon 7 critères scientifiques, notés de 1 à 9 :": "Each product/pathogen pair is evaluated according to 7 scientific criteria, rated from 1 to 9:",
|
| "C1 - Gravité : Sévérité des effets sur la santé (mortalité, hospitalisation)": "C1 - Severity: Severity of health effects (mortality, hospitalization)",
|
| "C2 - Exposition : Fréquence et quantité de consommation du produit": "C2 - Exposure: Frequency and quantity of product consumption",
|
| "C3 - Dose-Réponse : Quantité minimale de pathogène nécessaire pour déclencher la maladie": "C3 - Dose-Response: Minimum amount of pathogen needed to trigger illness",
|
| "C4 - Croissance : Capacité du pathogène à survivre/proliférer dans l'aliment": "C4 - Growth: Ability of the pathogen to survive/proliferate in food",
|
| "C5 - Traitement : Efficacité des procédés de décontamination": "C5 - Treatment: Effectiveness of decontamination processes",
|
| "C6 - Contamination : Probabilité de contamination à la production": "C6 - Contamination: Probability of contamination during production",
|
| "C7 - Consommation : Mode de préparation (cru, cuit, transformé)": "C7 - Consumption: Preparation method (raw, cooked, processed)",
|
| "Le score final est calculé en multipliant ces 7 critères, créant un classement objectif des risques.": "The final score is calculated by multiplying these 7 criteria, creating an objective risk ranking.",
|
| "Pourquoi c'est révolutionnaire ?": "Why is it revolutionary?",
|
| "Avant ce modèle, les décisions étaient souvent basées sur :": "Before this model, decisions were often based on:",
|
| "L'intuition ou l'expérience personnelle": "Intuition or personal experience",
|
| "Les crises médiatiques du moment": "Media crises of the moment",
|
| "Des approches fragmentées par produit OU par pathogène": "Fragmented approaches by product OR by pathogen",
|
| "Le modèle FDA apporte :": "The FDA model brings:",
|
| "Une approche scientifique et quantitative": "A scientific and quantitative approach",
|
| "Une vision globale produit × pathogène": "A global product × pathogen view",
|
| "Une transparence dans les décisions de priorisation": "Transparency in prioritization decisions",
|
| "Une comparabilité entre différents risques": "Comparability between different risks",
|
| "Intégration avec votre Plan HACCP": "Integration with your HACCP Plan",
|
| "Ce modèle ne remplace pas HACCP, il le renforce !": "This model does not replace HACCP, it strengthens it!",
|
| "Analyse des Dangers : Utilisez les scores pour prioriser vos dangers significatifs (étape 1 HACCP)": "Hazard Analysis: Use scores to prioritize your significant hazards (HACCP step 1)",
|
| "Points Critiques : Concentrez vos CCP sur les couples à haut score": "Critical Control Points: Focus your CCPs on high-scoring pairs",
|
| "Surveillance : Adaptez la fréquence de monitoring selon les scores de risque": "Monitoring: Adjust monitoring frequency according to risk scores",
|
| "Validation : Justifiez scientifiquement vos choix de maîtrise": "Validation: Scientifically justify your control choices",
|
| "Audits : Orientez vos vérifications sur les zones à plus haut risque": "Audits: Focus your verifications on higher-risk areas",
|
| "Applications Pratiques en Industrie": "Practical Applications in Industry",
|
| "Responsables Qualité : Priorisation des plans de surveillance et contrôles": "Quality Managers: Prioritization of surveillance and control plans",
|
| "Acheteurs : Évaluation et sélection des fournisseurs selon les risques": "Buyers: Evaluation and selection of suppliers based on risks",
|
| "R&D : Conception de produits avec maîtrise des risques intégrée": "R&D: Product design with integrated risk control",
|
| "Direction : Allocation des budgets sécurité alimentaire basée sur les risques réels": "Management: Allocation of food safety budgets based on real risks",
|
| "Auditeurs : Focus des audits sur les couples produit/danger critiques": "Auditors: Focus audits on critical product/hazard pairs",
|
| "Food Traceability List (FTL)": "Food Traceability List (FTL)",
|
| "La Food Traceability List est une liste des aliments à plus haut risque, identifiés grâce à ce modèle. Ces produits sont soumis à des exigences de traçabilité renforcée aux États-Unis depuis janvier 2026.": "The Food Traceability List is a list of higher-risk foods, identified using this model. These products are subject to enhanced traceability requirements in the United States since January 2026.",
|
| "Conseil :": "Tip:",
|
| "Même en Europe, surveiller ces produits FTL peut vous donner un avantage concurrentiel et anticiper les évolutions réglementaires.": "Even in Europe, monitoring these FTL products can give you a competitive advantage and anticipate regulatory changes.",
|
| "Sources et Références Officielles": "Official Sources and References",
|
| "Publications Scientifiques :": "Scientific Publications:",
|
| "Journal of Food Protection, Risk Analysis, Food Control - rechercher \"FDA risk-ranking model\"": "Journal of Food Protection, Risk Analysis, Food Control - search for \"FDA risk-ranking model\"",
|
| "Vue FTL": "FTL View",
|
| "Vue Globale": "Global View",
|
| "Analyse Détaillée": "Detailed Analysis",
|
| "Analyse Comparative": "Comparative Analysis",
|
| "Rechercher...": "Search...",
|
| "Tous les Dangers": "All Hazards",
|
| "Produits Affichés": "Products Displayed",
|
| "Haut Risque (≥400)": "High Risk (≥400)",
|
| "Catégories Uniques": "Unique Categories",
|
| "Score Moyen": "Average Score",
|
| "Points de Vigilance & Actions": "Vigilance Points & Actions",
|
| "Analyse des Critères Pondérés": "Weighted Criteria Analysis",
|
| "FDA Risk Analyzer - Outil d'Analyse des Risques Alimentaires basé sur le modèle de la FDA": "FDA Risk Analyzer - Food Risk Analysis Tool based on the FDA model",
|
| "© 2023 Tous droits réservés": "© 2023 All rights reserved",
|
| "Comment utiliser cet outil": "How to use this tool",
|
| "Cet outil vous aide à explorer le modèle de classement des risques de la FDA pour prioriser vos efforts en sécurité alimentaire.": "This tool helps you explore the FDA risk ranking model to prioritize your food safety efforts.",
|
| "Les Vues d'Analyse": "Analysis Views",
|
| "Se concentre sur les produits à plus haut risque de la Food Traceability List. Idéal pour les audits.": "Focuses on higher-risk products from the Food Traceability List. Ideal for audits.",
|
| "Affiche tous les produits de la base de données pour une vue d'ensemble.": "Displays all products in the database for an overview.",
|
| "Montre les couples produit/danger. Cliquez sur une ligne pour une analyse approfondie (graphique radar et actions recommandées).": "Shows product/hazard pairs. Click on a row for in-depth analysis (radar chart and recommended actions).",
|
| "Permet de comparer visuellement les contributions des différents facteurs de risque pour un produit et ses dangers.": "Allows visual comparison of the contributions of different risk factors for a product and its hazards.",
|
| "Les 7 Critères d'Évaluation de la FDA": "The 7 FDA Evaluation Criteria",
|
| "C1: Gravité": "C1: Severity",
|
| "Gravité des effets sur la santé (mortalité, morbidité, hospitalisation).": "Severity of health effects (mortality, morbidity, hospitalization).",
|
| "C2: Exposition": "C2: Exposure",
|
| "Probabilité d'exposition au danger (fréquence de consommation, quantité).": "Probability of exposure to the hazard (frequency of consumption, quantity).",
|
| "C3: Dose-Réponse": "C3: Dose-Response",
|
| "Dose infectieuse minimale requise pour provoquer la maladie.": "Minimum infectious dose required to cause illness.",
|
| "C4: Croissance": "C4: Growth",
|
| "Capacité du pathogène à croître/survivre dans l'aliment.": "Ability of the pathogen to grow/survive in food.",
|
| "C5: Traitement": "C5: Treatment",
|
| "Efficacité des traitements de décontamination appliqués.": "Effectiveness of decontamination treatments applied.",
|
| "C6: Contamination": "C6: Contamination",
|
| "Probabilité de contamination à la production (sources, environnement).": "Probability of contamination during production (sources, environment).",
|
| "C7: Consommation": "C7: Consumption",
|
| "Mode de préparation/consommation (cru, cuit, transformé).": "Preparation/consumption method (raw, cooked, processed).",
|
| "Source officielle :": "Official source:",
|
| "FDA Risk-Ranking Model": "FDA Risk-Ranking Model",
|
| "Erreur de chargement": "Loading error",
|
| "Impossible de charger les fichiers de données.": "Could not load data files.",
|
| "Vérifiez que les fichiers suivants sont présents dans le répertoire:": "Verify that the following files are present in the directory:",
|
| "Message d'erreur :": "Error message:",
|
| "Produit": "Product",
|
| "Catégorie": "Category",
|
| "Score": "Score",
|
| "Danger": "Hazard",
|
| "Analyse de ": "Analysis of ",
|
| "× Danger ": "× Hazard ",
|
| "Le danger associé est sévère. La maîtrise du CCP est critique.": "The associated hazard is severe. CCP control is critical.",
|
| "Le produit est largement consommé. L'impact d'un rappel serait majeur.": "The product is widely consumed. The impact of a recall would be major.",
|
| "Le pathogène peut proliférer rapidement. Action: Valider la chaîne du froid et les barèmes de DLC/DDM.": "The pathogen can proliferate rapidly. Action: Validate the cold chain and shelf-life/use-by dates.",
|
| "Pas d'étape d'assainissement efficace. Action: Maîtrise des matières premières essentielle.": "No effective sanitation step. Action: Essential raw material control.",
|
| "Risque de contamination à la source élevé. Action: Renforcer audits fournisseurs et contrôles à réception.": "High risk of source contamination. Action: Strengthen supplier audits and reception controls.",
|
| "Souvent consommé cru. Contrôles microbiologiques du produit fini à considérer.": "Often consumed raw. Microbiological controls of the finished product to be considered.",
|
| "Le risque est équilibré.": "The risk is balanced.",
|
| "Analyse des Critères Pondérés pour : ": "Weighted Criteria Analysis for: ",
|
| "Aucune donnée disponible pour cette sélection": "No data available for this selection",
|
| "Score Pondéré": "Weighted Score",
|
| "FDA Risk Analyzer": "FDA Risk Analyzer",
|
| "Vue FTL (Produits à Traçabilité Renforcée)": "FTL View (Enhanced Traceability Products)",
|
| "Vue Globale (Tous les Produits)": "Global View (All Products)",
|
| "Analyse Détaillée (Produit x Danger)": "Detailed Analysis (Product x Hazard)"
|
| },
|
| en: {
|
|
|
| }
|
| };
|
|
|
| let currentLanguage = localStorage.getItem('currentLanguage') || 'fr';
|
|
|
| const applyTranslations = () => {
|
| const elements = document.querySelectorAll('[data-translate-key]');
|
| elements.forEach(element => {
|
| const key = element.getAttribute('data-translate-key');
|
| if (translations[currentLanguage][key]) {
|
| element.textContent = translations[currentLanguage][key];
|
| }
|
| });
|
|
|
|
|
| const textNodes = [];
|
| const walk = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
|
| let node;
|
| while ((node = walk.nextNode())) {
|
| if (node.parentNode.nodeName !== 'SCRIPT' && node.parentNode.nodeName !== 'STYLE') {
|
| textNodes.push(node);
|
| }
|
| }
|
|
|
| textNodes.forEach(node => {
|
| let originalText = node.nodeValue.trim();
|
|
|
| originalText = originalText.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
|
| if (originalText && translations[currentLanguage][originalText]) {
|
| node.nodeValue = translations[currentLanguage][originalText];
|
| }
|
| });
|
|
|
|
|
| const searchInput = document.getElementById('searchInput');
|
| if (searchInput && translations[currentLanguage]["Rechercher..."]) {
|
| searchInput.placeholder = translations[currentLanguage]["Rechercher..."];
|
| }
|
|
|
|
|
| const updateDynamicContent = () => {
|
| document.getElementById('table-title').textContent = translations[currentLanguage][document.getElementById('table-title').textContent] || document.getElementById('table-title').textContent;
|
|
|
| if (document.getElementById('results-count')) {
|
| const resultsText = document.getElementById('results-count').textContent;
|
| const match = resultsText.match(/(\d+)\srésultat\(s\)/);
|
| if (match && translations[currentLanguage]["résultat(s)"]) {
|
| document.getElementById('results-count').textContent = match[1] + ' ' + translations[currentLanguage]["résultat(s)"];
|
| }
|
| }
|
| };
|
| updateDynamicContent();
|
| };
|
|
|
| const switchLanguage = (lang) => {
|
| currentLanguage = lang;
|
| localStorage.setItem('currentLanguage', lang);
|
| location.reload();
|
| };
|
|
|
|
|
| document.addEventListener('DOMContentLoaded', () => {
|
| const headerContent = document.querySelector('.header-content');
|
| if (headerContent) {
|
| const langToggleContainer = document.createElement('div');
|
| langToggleContainer.style.display = 'flex';
|
| langToggleContainer.style.gap = '10px';
|
| langToggleContainer.style.alignItems = 'center';
|
|
|
| const frButton = document.createElement('button');
|
| frButton.textContent = 'FR';
|
| frButton.className = 'guide-btn';
|
| frButton.style.backgroundColor = currentLanguage === 'fr' ? 'var(--primary-light)' : 'var(--primary-color)';
|
| frButton.onclick = () => switchLanguage('fr');
|
| langToggleContainer.appendChild(frButton);
|
|
|
| const enButton = document.createElement('button');
|
| enButton.textContent = 'EN';
|
| enButton.className = 'guide-btn';
|
| enButton.style.backgroundColor = currentLanguage === 'en' ? 'var(--primary-light)' : 'var(--primary-color)';
|
| enButton.onclick = () => switchLanguage('en');
|
| langToggleContainer.appendChild(enButton);
|
|
|
| headerContent.appendChild(langToggleContainer);
|
| }
|
|
|
|
|
| applyTranslations();
|
| });
|
|
|