FDARRMT / translation.js
MMOON's picture
Upload 2 files
e19584f verified
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: {
// This will be populated dynamically if we switch to French and back, or if we want to add more direct English text
}
};
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];
}
});
// Translate elements that don't have a direct data-translate-key but have identifiable text
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();
// Handle cases where the original text might have HTML entities that are not visible in the dictionary
originalText = originalText.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
if (originalText && translations[currentLanguage][originalText]) {
node.nodeValue = translations[currentLanguage][originalText];
}
});
// Update placeholders
const searchInput = document.getElementById('searchInput');
if (searchInput && translations[currentLanguage]["Rechercher..."]) {
searchInput.placeholder = translations[currentLanguage]["Rechercher..."];
}
// Update dynamic content that might not be in the initial DOM
const updateDynamicContent = () => {
document.getElementById('table-title').textContent = translations[currentLanguage][document.getElementById('table-title').textContent] || document.getElementById('table-title').textContent;
// Update other dynamic elements if necessary
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(); // Simple reload to re-apply translations
};
// Add a language toggle button to the header
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'; // Re-use existing button style
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'; // Re-use existing button style
enButton.style.backgroundColor = currentLanguage === 'en' ? 'var(--primary-light)' : 'var(--primary-color)';
enButton.onclick = () => switchLanguage('en');
langToggleContainer.appendChild(enButton);
headerContent.appendChild(langToggleContainer);
}
// Apply translations on DOMContentLoaded
applyTranslations();
});