feat(design) : intégration dans l'Observatoire des Polycrises

This commit is contained in:
Stéphan Peccini 2025-06-25 08:42:41 +02:00
parent 2846403860
commit a9bf92a4bc
Signed by: stephan
GPG Key ID: 3A9774E9CCBF3501
6 changed files with 803 additions and 801 deletions

View File

@ -1,332 +1,332 @@
{
"app": {
"title": "Fabnum Chain Analysis",
"description": "Ecosystem exploration and vulnerability identification.",
"dev_mode": "You are in the development environment."
"app": {
"title": "Fabnum Chain Analysis",
"description": "Ecosystem exploration and vulnerability identification.",
"dev_mode": "You are in the development environment."
},
"header": {
"title": "FabNum - Digital Manufacturing Chain",
"subtitle": "Ecosystem exploration and vulnerability identification.\n -> This site is still under development <-"
},
"footer": {
"copyright": "FabNum@Polycrisis Observatory © 2025",
"contact": "Contact",
"license": "License",
"license_text": "CC BY-NC-ND",
"eco_note": "🌱 CO₂ calculations via",
"eco_provider": "The Green Web Foundation",
"powered_by": "🚀 Powered by",
"powered_by_name": "Streamlit"
},
"sidebar": {
"menu": "Main Menu",
"navigation": "Main Navigation",
"theme": "Theme",
"theme_light": "Light",
"theme_dark": "Dark",
"theme_instructions_only": "Theme changes can only be made from the Instructions tab.",
"impact": "Environmental Impact",
"loading": "Loading..."
},
"auth": {
"title": "Authentication",
"username": "Username_token",
"token": "Gitea Personal Access Token",
"login": "Login",
"logout": "Logout",
"logged_as": "Logged in as",
"error": "❌ Access denied.",
"gitea_error": "❌ Unable to verify user with Gitea.",
"success": "Successfully logged out."
},
"navigation": {
"instructions": "Instructions",
"personnalisation": "Customization",
"analyse": "Analysis",
"ia_nalyse": "AI'nalysis",
"plan_d_action": "Actions plan",
"visualisations": "Visualizations",
"fiches": "Cards"
},
"pages": {
"instructions": {
"title": "Instructions"
},
"header": {
"title": "FabNum - Digital Manufacturing Chain",
"subtitle": "Ecosystem exploration and vulnerability identification."
"personnalisation": {
"title": "Final Product Customization",
"help": "How to use this tab?",
"help_content": [
"1. Click on \"Add a final product\" to create a new product",
"2. Give your product a name",
"3. Select an appropriate assembly operation (if relevant)",
"4. Choose the components that make up your product from the list provided",
"5. Save your configuration for future reuse",
"6. You will be able to modify or delete your custom products later"
],
"add_new_product": "Add a new final product",
"new_product_name": "New product name (unique)",
"assembly_operation": "Assembly operation (optional)",
"product_exists": "This product already exists",
"none": "-- None --",
"components_to_link": "Components to link",
"create_product": "Create product",
"added": "added",
"modify_product": "Modify an added final product",
"products_to_modify": "Products to modify",
"delete": "Delete",
"linked_assembly_operation": "Linked assembly operation",
"components_linked_to": "Components linked to",
"update": "Update",
"updated": "updated",
"deleted": "deleted",
"save_restore_config": "Save or restore configuration",
"export_config": "Export configuration",
"download_json": "Download (JSON)",
"import_config": "Import a JSON configuration (max 100 KB)",
"file_too_large": "File too large (max 100 KB).",
"no_products_found": "No products found in the file.",
"select_products_to_restore": "Select products to restore",
"products_to_restore": "Products to restore",
"restore_selected": "Restore selected items",
"config_restored": "Partial configuration successfully restored.",
"import_error": "Import error:"
},
"footer": {
"copyright": "Fabnum © 2025",
"contact": "Contact",
"license": "License",
"license_text": "CC BY-NC-ND",
"eco_note": "🌱 CO₂ calculations via",
"eco_provider": "The Green Web Foundation",
"powered_by": "🚀 Powered by",
"powered_by_name": "Streamlit"
"analyse": {
"title": "Graph Analysis",
"help": "How to use this tab?",
"help_content": [
"1. Select the starting level (final product, component, or mineral)",
"2. Choose the desired destination level",
"3. Refine your selection by specifying either one or more specific minerals to target or specific items at each level (optional)",
"4. Define the analysis criteria by selecting the relevant vulnerability indices",
"5. Choose the index combination mode (AND/OR) according to your analysis needs",
"6. Explore the generated graph using zoom and panning controls; you can switch to full screen mode for the graph"
],
"selection_nodes": "Selection of start and end nodes",
"select_level": "-- Select a level --",
"start_level": "Start level",
"end_level": "End level",
"select_minerals": "Select one or more minerals",
"filter_by_minerals": "Filter by minerals (optional)",
"fine_selection": "Fine selection of items",
"filter_start_nodes": "Filter by start nodes (optional)",
"filter_end_nodes": "Filter by end nodes (optional)",
"vulnerability_filters": "Selection of filters to identify vulnerabilities",
"filter_ics": "Filter paths containing at least one critical mineral for a component (ICS > 66%)",
"filter_ivc": "Filter paths containing at least one critical mineral in relation to sectoral competition (IVC > 30)",
"filter_ihh": "Filter paths containing at least one critical operation in relation to geographical or industrial concentration (IHH countries or actors > 25)",
"apply_ihh_filter": "Apply IHH filter on:",
"countries": "Countries",
"actors": "Actors",
"filter_isg": "Filter paths containing an unstable country (ISG ≥ 60)",
"filter_logic": "Filter logic",
"or": "OR",
"and": "AND",
"run_analysis": "Run analysis",
"sankey": {
"no_paths": "No paths found for the specified criteria.",
"no_matching_paths": "No paths match the criteria.",
"filtered_hierarchy": "Hierarchy filtered by levels and nodes",
"download_dot": "Download filtered DOT file",
"relation": "Relation"
}
},
"sidebar": {
"menu": "Main Menu",
"navigation": "Main Navigation",
"theme": "Theme",
"theme_light": "Light",
"theme_dark": "Dark",
"theme_instructions_only": "Theme changes can only be made from the Instructions tab.",
"impact": "Environmental Impact",
"loading": "Loading..."
"ia_nalyse": {
"title": "Graph Analysis by AI",
"help": "How to use this tab?",
"help_content": [
"The graph covers all levels, from end products to geographic countries.\n",
"1. You can select minerals through which the paths go.",
"2. You can choose end products to perform an analysis tailored to your context.\n",
"These two selections are optional, but strongly recommended for a more relevant analysis.",
"The analysis is carried out using a private AI on a minimalist server. The result is therefore not immediate (approximately 30 minutes) and you will be notified of the progress."
],
"select_minerals": "Select one or more minerals",
"filter_by_minerals": "Filter by minerals (optional, but highly recommended)",
"fine_selection": "End product selection",
"filter_start_nodes": "Filter by start nodes (optional, but recommended)",
"run_analysis": "Run analysis",
"confirm_download": "Confirm download",
"submit_request": "Submit your request",
"empty_graph": "The graph is empty. Please make another selection."
},
"auth": {
"title": "Authentication",
"username": "Username_token",
"token": "Gitea Personal Access Token",
"login": "Login",
"logout": "Logout",
"logged_as": "Logged in as",
"error": "❌ Access denied.",
"gitea_error": "❌ Unable to verify user with Gitea.",
"success": "Successfully logged out."
"plan_d_action": {
"title": "Graph analysis for action",
"help": "How to use this tab?",
"help_content": [
"The graph covers all levels, from end products to geographic countries.\n",
"1. You can select minerals through which the paths go.",
"2. You can choose end products to perform an analysis tailored to your context.\n",
"These two selections are optional, but strongly recommended for a more relevant analysis.",
"The recommendations for actions and indicator monitoring are generic. They must therefore be adapted to the context.",
"The proposed actions or indicators depend on the type of organization concerned and can be applied directly or required of digital providers."
],
"select_minerals": "Select one or more minerals",
"filter_by_minerals": "Filter by minerals (optional, but highly recommended)",
"fine_selection": "End product selection",
"filter_start_nodes": "Filter by start nodes",
"run_analysis": "Run analysis",
"confirm_download": "Confirm download",
"submit_request": "Submit your request",
"empty_graph": "The graph is empty. Please make another selection."
},
"navigation": {
"instructions": "Instructions",
"personnalisation": "Customization",
"analyse": "Analysis",
"ia_nalyse": "AI'nalysis",
"plan_d_action": "Actions plan",
"visualisations": "Visualizations",
"fiches": "Cards"
"visualisations": {
"title": "Visualizations",
"help": "How to use this tab?",
"help_content": [
"1. Explore the graphs presenting the Herfindahl-Hirschmann Index (IHH)",
"2. Analyze its relationship with the average criticality of minerals or their Competitive Vulnerability Index (IVC)",
"3. Zoom in on the graphs to better discover the information",
"",
"It is important to remember that the IHH has two thresholds:",
"* below 15, concentration is considered to be low",
"* above 25, it is considered to be high",
"",
"Thus, the higher a point is positioned in the top right of the graphs, the higher the risks.",
"The graphs present 2 horizontal and vertical lines to mark these thresholds."
],
"ihh_criticality": "Herfindahl-Hirschmann Index - IHH vs Criticality",
"ihh_criticality_desc": "The size of the points indicates the substitutability criticality of the mineral.",
"ihh_ivc": "Herfindahl-Hirschmann Index - IHH vs IVC",
"ihh_ivc_desc": "The size of the points indicates the competitive criticality of the mineral.",
"launch": "Launch",
"no_data": "No data to display.",
"categories": {
"assembly": "Assembly",
"manufacturing": "Manufacturing",
"processing": "Processing",
"extraction": "Extraction"
},
"axis_titles": {
"ihh_countries": "IHH Countries (%)",
"ihh_actors": "IHH Actors (%)",
"ihh_extraction": "IHH Extraction (%)",
"ihh_reserves": "IHH Reserves (%)"
},
"chart_titles": {
"concentration_criticality": "Concentration and Criticality {0}",
"concentration_resources": "Concentration of Critical Resources vs IVC Vulnerability"
}
},
"pages": {
"instructions": {
"title": "Instructions"
},
"personnalisation": {
"title": "Final Product Customization",
"help": "How to use this tab?",
"help_content": [
"1. Click on \"Add a final product\" to create a new product",
"2. Give your product a name",
"3. Select an appropriate assembly operation (if relevant)",
"4. Choose the components that make up your product from the list provided",
"5. Save your configuration for future reuse",
"6. You will be able to modify or delete your custom products later"
],
"add_new_product": "Add a new final product",
"new_product_name": "New product name (unique)",
"assembly_operation": "Assembly operation (optional)",
"product_exists": "This product already exists",
"none": "-- None --",
"components_to_link": "Components to link",
"create_product": "Create product",
"added": "added",
"modify_product": "Modify an added final product",
"products_to_modify": "Products to modify",
"delete": "Delete",
"linked_assembly_operation": "Linked assembly operation",
"components_linked_to": "Components linked to",
"update": "Update",
"updated": "updated",
"deleted": "deleted",
"save_restore_config": "Save or restore configuration",
"export_config": "Export configuration",
"download_json": "Download (JSON)",
"import_config": "Import a JSON configuration (max 100 KB)",
"file_too_large": "File too large (max 100 KB).",
"no_products_found": "No products found in the file.",
"select_products_to_restore": "Select products to restore",
"products_to_restore": "Products to restore",
"restore_selected": "Restore selected items",
"config_restored": "Partial configuration successfully restored.",
"import_error": "Import error:"
},
"analyse": {
"title": "Graph Analysis",
"help": "How to use this tab?",
"help_content": [
"1. Select the starting level (final product, component, or mineral)",
"2. Choose the desired destination level",
"3. Refine your selection by specifying either one or more specific minerals to target or specific items at each level (optional)",
"4. Define the analysis criteria by selecting the relevant vulnerability indices",
"5. Choose the index combination mode (AND/OR) according to your analysis needs",
"6. Explore the generated graph using zoom and panning controls; you can switch to full screen mode for the graph"
],
"selection_nodes": "Selection of start and end nodes",
"select_level": "-- Select a level --",
"start_level": "Start level",
"end_level": "End level",
"select_minerals": "Select one or more minerals",
"filter_by_minerals": "Filter by minerals (optional)",
"fine_selection": "Fine selection of items",
"filter_start_nodes": "Filter by start nodes (optional)",
"filter_end_nodes": "Filter by end nodes (optional)",
"vulnerability_filters": "Selection of filters to identify vulnerabilities",
"filter_ics": "Filter paths containing at least one critical mineral for a component (ICS > 66%)",
"filter_ivc": "Filter paths containing at least one critical mineral in relation to sectoral competition (IVC > 30)",
"filter_ihh": "Filter paths containing at least one critical operation in relation to geographical or industrial concentration (IHH countries or actors > 25)",
"apply_ihh_filter": "Apply IHH filter on:",
"countries": "Countries",
"actors": "Actors",
"filter_isg": "Filter paths containing an unstable country (ISG ≥ 60)",
"filter_logic": "Filter logic",
"or": "OR",
"and": "AND",
"run_analysis": "Run analysis",
"sankey": {
"no_paths": "No paths found for the specified criteria.",
"no_matching_paths": "No paths match the criteria.",
"filtered_hierarchy": "Hierarchy filtered by levels and nodes",
"download_dot": "Download filtered DOT file",
"relation": "Relation"
}
},
"ia_nalyse": {
"title": "Graph Analysis by AI",
"help": "How to use this tab?",
"help_content": [
"The graph covers all levels, from end products to geographic countries.\n",
"1. You can select minerals through which the paths go.",
"2. You can choose end products to perform an analysis tailored to your context.\n",
"These two selections are optional, but strongly recommended for a more relevant analysis.",
"The analysis is carried out using a private AI on a minimalist server. The result is therefore not immediate (approximately 30 minutes) and you will be notified of the progress."
],
"select_minerals": "Select one or more minerals",
"filter_by_minerals": "Filter by minerals (optional, but highly recommended)",
"fine_selection": "End product selection",
"filter_start_nodes": "Filter by start nodes (optional, but recommended)",
"run_analysis": "Run analysis",
"confirm_download": "Confirm download",
"submit_request": "Submit your request",
"empty_graph": "The graph is empty. Please make another selection."
},
"plan_d_action": {
"title": "Graph analysis for action",
"help": "How to use this tab?",
"help_content": [
"The graph covers all levels, from end products to geographic countries.\n",
"1. You can select minerals through which the paths go.",
"2. You can choose end products to perform an analysis tailored to your context.\n",
"These two selections are optional, but strongly recommended for a more relevant analysis.",
"The recommendations for actions and indicator monitoring are generic. They must therefore be adapted to the context.",
"The proposed actions or indicators depend on the type of organization concerned and can be applied directly or required of digital providers."
],
"select_minerals": "Select one or more minerals",
"filter_by_minerals": "Filter by minerals (optional, but highly recommended)",
"fine_selection": "End product selection",
"filter_start_nodes": "Filter by start nodes",
"run_analysis": "Run analysis",
"confirm_download": "Confirm download",
"submit_request": "Submit your request",
"empty_graph": "The graph is empty. Please make another selection."
},
"visualisations": {
"title": "Visualizations",
"help": "How to use this tab?",
"help_content": [
"1. Explore the graphs presenting the Herfindahl-Hirschmann Index (IHH)",
"2. Analyze its relationship with the average criticality of minerals or their Competitive Vulnerability Index (IVC)",
"3. Zoom in on the graphs to better discover the information",
"",
"It is important to remember that the IHH has two thresholds:",
"* below 15, concentration is considered to be low",
"* above 25, it is considered to be high",
"",
"Thus, the higher a point is positioned in the top right of the graphs, the higher the risks.",
"The graphs present 2 horizontal and vertical lines to mark these thresholds."
],
"ihh_criticality": "Herfindahl-Hirschmann Index - IHH vs Criticality",
"ihh_criticality_desc": "The size of the points indicates the substitutability criticality of the mineral.",
"ihh_ivc": "Herfindahl-Hirschmann Index - IHH vs IVC",
"ihh_ivc_desc": "The size of the points indicates the competitive criticality of the mineral.",
"launch": "Launch",
"no_data": "No data to display.",
"categories": {
"assembly": "Assembly",
"manufacturing": "Manufacturing",
"processing": "Processing",
"extraction": "Extraction"
},
"axis_titles": {
"ihh_countries": "IHH Countries (%)",
"ihh_actors": "IHH Actors (%)",
"ihh_extraction": "IHH Extraction (%)",
"ihh_reserves": "IHH Reserves (%)"
},
"chart_titles": {
"concentration_criticality": "Concentration and Criticality {0}",
"concentration_resources": "Concentration of Critical Resources vs IVC Vulnerability"
}
},
"fiches": {
"title": "Card Discovery",
"help": "How to use this tab?",
"help_content": [
"1. Browse the list of available cards by category",
"2. Select a card to display its full content",
"3. Consult detailed data, graphs, and additional analyses",
"4. Use this information to deepen your understanding of the identified vulnerabilities",
"",
"The categories are as follows:",
"* Assembly: operation of assembling final products from components",
"* Related: various operations necessary to manufacture digital technology, but not directly entering its composition",
"* Criticalities: indices used to identify and evaluate vulnerabilities",
"* Manufacturing: operation of manufacturing components from minerals",
"* Mineral: description and operations of extraction and processing of minerals"
],
"no_files": "No cards available at the moment.",
"choose_category": "Choose a card category",
"select_folder": "-- Select a folder --",
"choose_file": "Choose a card",
"select_file": "-- Select a card --",
"loading_error": "Error loading the card:",
"download_pdf": "Download this card as PDF",
"pdf_unavailable": "The PDF file for this card is not available.",
"ticket_management": "Ticket management for this card",
"tickets": {
"create_new": "Create a new ticket linked to this card",
"model_load_error": "Unable to load the ticket template.",
"contribution_type": "Contribution type",
"specify": "Specify",
"other": "Other",
"concerned_card": "Concerned card",
"subject": "Subject of the proposal",
"preview": "Preview ticket",
"cancel": "Cancel",
"preview_title": "Ticket preview",
"summary": "Summary",
"title": "Title",
"labels": "Labels",
"confirm": "Confirm ticket creation",
"created": "Ticket created and form cleared.",
"model_error": "Template loading error:",
"no_linked_tickets": "No tickets linked to this card.",
"associated_tickets": "Tickets associated with this card",
"moderation_notice": "ticket(s) awaiting moderation are not displayed.",
"status": {
"awaiting": "Awaiting processing",
"in_progress": "In progress",
"completed": "Completed",
"rejected": "Rejected",
"others": "Others"
},
"no_title": "No title",
"unknown": "unknown",
"subject_label": "Subject",
"no_labels": "none",
"comments": "Comment(s):",
"no_comments": "No comments.",
"comment_error": "Error retrieving comments:",
"opened_by": "Opened by",
"on_date": "on",
"updated": "UPDATED",
"continue": "Continuer",
"created_success": "Ticket created and placed in moderation",
"created_error": "Ticket creation failed. Please try later",
"see_ticket": "See ticket"
}
}
},
"node_levels": {
"0": "Final product",
"1": "Component",
"2": "Mineral",
"10": "Operation",
"11": "Operation country",
"12": "Operation actor",
"99": "Geographic country"
},
"errors": {
"log_read_error": "Log reading error:",
"graph_preview_error": "Graph preview error:",
"graph_creation_error": "Error creating the graph:",
"ihh_criticality_error": "Error in IHH vs Criticality visualization:",
"ihh_ivc_error": "Error in IHH vs IVC visualization:",
"comment_fetch_error": "Error retrieving comments:",
"template_load_error": "Template loading error:",
"import_error": "Import error:"
},
"buttons": {
"download": "Download",
"run": "Run",
"save": "Save",
"fiches": {
"title": "Card Discovery",
"help": "How to use this tab?",
"help_content": [
"1. Browse the list of available cards by category",
"2. Select a card to display its full content",
"3. Consult detailed data, graphs, and additional analyses",
"4. Use this information to deepen your understanding of the identified vulnerabilities",
"",
"The categories are as follows:",
"* Assembly: operation of assembling final products from components",
"* Related: various operations necessary to manufacture digital technology, but not directly entering its composition",
"* Criticalities: indices used to identify and evaluate vulnerabilities",
"* Manufacturing: operation of manufacturing components from minerals",
"* Mineral: description and operations of extraction and processing of minerals"
],
"no_files": "No cards available at the moment.",
"choose_category": "Choose a card category",
"select_folder": "-- Select a folder --",
"choose_file": "Choose a card",
"select_file": "-- Select a card --",
"loading_error": "Error loading the card:",
"download_pdf": "Download this card as PDF",
"pdf_unavailable": "The PDF file for this card is not available.",
"ticket_management": "Ticket management for this card",
"tickets": {
"create_new": "Create a new ticket linked to this card",
"model_load_error": "Unable to load the ticket template.",
"contribution_type": "Contribution type",
"specify": "Specify",
"other": "Other",
"concerned_card": "Concerned card",
"subject": "Subject of the proposal",
"preview": "Preview ticket",
"cancel": "Cancel",
"confirm": "Confirm",
"filter": "Filter",
"search": "Search",
"create": "Create",
"update": "Update",
"delete": "Delete",
"preview": "Preview",
"export": "Export",
"import": "Import",
"restore": "Restore",
"refresh": "Refresh",
"browse_files": "Browse files"
},
"ui": {
"file_uploader": {
"drag_drop_here": "Drag and drop file here",
"size_limit": "100 KB limit per file • JSON"
}
},
"batch": {
"in_queue": "In queue",
"in_progress": "Analysis in progress",
"failure": "Error",
"unknwon_error": "unknown error",
"no_task": "No task wainting or in progress",
"complete": "Analysis complete. Download the result in zip format, which contains the detailed report and analysis.",
"step": "Step"
"preview_title": "Ticket preview",
"summary": "Summary",
"title": "Title",
"labels": "Labels",
"confirm": "Confirm ticket creation",
"created": "Ticket created and form cleared.",
"model_error": "Template loading error:",
"no_linked_tickets": "No tickets linked to this card.",
"associated_tickets": "Tickets associated with this card",
"moderation_notice": "ticket(s) awaiting moderation are not displayed.",
"status": {
"awaiting": "Awaiting processing",
"in_progress": "In progress",
"completed": "Completed",
"rejected": "Rejected",
"others": "Others"
},
"no_title": "No title",
"unknown": "unknown",
"subject_label": "Subject",
"no_labels": "none",
"comments": "Comment(s):",
"no_comments": "No comments.",
"comment_error": "Error retrieving comments:",
"opened_by": "Opened by",
"on_date": "on",
"updated": "UPDATED",
"continue": "Continuer",
"created_success": "Ticket created and placed in moderation",
"created_error": "Ticket creation failed. Please try later",
"see_ticket": "See ticket"
}
}
},
"node_levels": {
"0": "Final product",
"1": "Component",
"2": "Mineral",
"10": "Operation",
"11": "Operation country",
"12": "Operation actor",
"99": "Geographic country"
},
"errors": {
"log_read_error": "Log reading error:",
"graph_preview_error": "Graph preview error:",
"graph_creation_error": "Error creating the graph:",
"ihh_criticality_error": "Error in IHH vs Criticality visualization:",
"ihh_ivc_error": "Error in IHH vs IVC visualization:",
"comment_fetch_error": "Error retrieving comments:",
"template_load_error": "Template loading error:",
"import_error": "Import error:"
},
"buttons": {
"download": "Download",
"run": "Run",
"save": "Save",
"cancel": "Cancel",
"confirm": "Confirm",
"filter": "Filter",
"search": "Search",
"create": "Create",
"update": "Update",
"delete": "Delete",
"preview": "Preview",
"export": "Export",
"import": "Import",
"restore": "Restore",
"refresh": "Refresh",
"browse_files": "Browse files"
},
"ui": {
"file_uploader": {
"drag_drop_here": "Drag and drop file here",
"size_limit": "100 KB limit per file • JSON"
}
},
"batch": {
"in_queue": "In queue",
"in_progress": "Analysis in progress",
"failure": "Error",
"unknwon_error": "unknown error",
"no_task": "No task wainting or in progress",
"complete": "Analysis complete. Download the result in zip format, which contains the detailed report and analysis.",
"step": "Step"
}
}

View File

@ -1,332 +1,332 @@
{
"app": {
"title": "Fabnum Analyse de chaîne",
"description": "Parcours de l'écosystème et identification des vulnérabilités.",
"dev_mode": "Vous êtes dans l'environnement de développement."
"app": {
"title": "Fabnum Analyse de chaîne",
"description": "Parcours de l'écosystème et identification des vulnérabilités.",
"dev_mode": "Vous êtes dans l'environnement de développement."
},
"header": {
"title": "FabNum - Chaîne de fabrication du numérique",
"subtitle": "Parcours de l'écosystème et identification des vulnérabilités.\n-> Ce site est encore en cours de développement <-"
},
"footer": {
"copyright": "FabNum@Polycrisis Observatory © 2025",
"contact": "Contact",
"license": "Licence",
"license_text": "CC BY-NC-ND",
"eco_note": "🌱 Calculs CO₂ via",
"eco_provider": "The Green Web Foundation",
"powered_by": "🚀 Propulsé par",
"powered_by_name": "Streamlit"
},
"sidebar": {
"menu": "Menu principal",
"navigation": "Navigation principale",
"theme": "Thème",
"theme_light": "Clair",
"theme_dark": "Sombre",
"theme_instructions_only": "Le changement de thème ne peut se faire que depuis l'onglet Instructions.",
"impact": "Impact environnemental",
"loading": "Chargement en cours…"
},
"auth": {
"title": "Authentification",
"username": "Identifiant_token",
"token": "Token d'accès personnel Gitea",
"login": "Se connecter",
"logout": "Se déconnecter",
"logged_as": "Connecté en tant que",
"error": "❌ Accès refusé.",
"gitea_error": "❌ Impossible de vérifier l'utilisateur auprès de Gitea.",
"success": "Déconnecté avec succès."
},
"navigation": {
"instructions": "Instructions",
"personnalisation": "Personnalisation",
"analyse": "Analyse",
"ia_nalyse": "IA'nalyse",
"plan_d_action": "Plan d'action",
"visualisations": "Visualisations",
"fiches": "Fiches"
},
"pages": {
"instructions": {
"title": "Instructions"
},
"header": {
"title": "FabNum - Chaîne de fabrication du numérique",
"subtitle": "Parcours de l'écosystème et identification des vulnérabilités."
"personnalisation": {
"title": "Personnalisation des produits finaux",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"1. Cliquez sur « Ajouter un produit final » pour créer un nouveau produit",
"2. Donnez un nom à votre produit",
"3. Sélectionnez une opération d'assemblage appropriée (si pertinent)",
"4. Choisissez les composants qui constituent votre produit dans la liste proposée",
"5. Sauvegardez votre configuration pour une réutilisation future",
"6. Vous pourrez par la suite modifier ou supprimer vos produits personnalisés"
],
"add_new_product": "Ajouter un nouveau produit final",
"new_product_name": "Nom du nouveau produit (unique)",
"assembly_operation": "Opération d'assemblage (optionnelle)",
"product_exists": "Ce produit existe déjà.",
"none": "-- Aucune --",
"components_to_link": "Composants à lier",
"create_product": "Créer le produit",
"added": "ajouté",
"modify_product": "Modifier un produit final ajouté",
"products_to_modify": "Produits à modifier",
"delete": "Supprimer",
"linked_assembly_operation": "Opération d'assemblage liée",
"components_linked_to": "Composants liés à",
"update": "Mettre à jour",
"updated": "mis à jour",
"deleted": "supprimé",
"save_restore_config": "Sauvegarder ou restaurer la configuration",
"export_config": "Exporter configuration",
"download_json": "Télécharger (JSON)",
"import_config": "Importer une configuration JSON (max 100 Ko)",
"file_too_large": "Fichier trop volumineux (max 100 Ko).",
"no_products_found": "Aucun produit trouvé dans le fichier.",
"select_products_to_restore": "Sélection des produits à restaurer",
"products_to_restore": "Produits à restaurer",
"restore_selected": "Restaurer les éléments sélectionnés",
"config_restored": "Configuration partielle restaurée avec succès.",
"import_error": "Erreur d'import :"
},
"footer": {
"copyright": "Fabnum © 2025",
"contact": "Contact",
"license": "Licence",
"license_text": "CC BY-NC-ND",
"eco_note": "🌱 Calculs CO₂ via",
"eco_provider": "The Green Web Foundation",
"powered_by": "🚀 Propulsé par",
"powered_by_name": "Streamlit"
"analyse": {
"title": "Analyse du graphe",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"1. Sélectionnez le niveau de départ (produit final, composant ou minerai)",
"2. Choisissez le niveau d'arrivée souhaité",
"3. Affinez votre sélection en spécifiant soit un ou des minerais à cibler spécifiquement ou des items précis à chaque niveau (optionnel)",
"4. Définissez les critères d'analyse en sélectionnant les indices de vulnérabilité pertinents",
"5. Choisissez le mode de combinaison des indices (ET/OU) selon votre besoin d'analyse",
"6. Explorez le graphique généré en utilisant les contrôles de zoom et de déplacement ; vous pouvez basculer en mode plein écran pour le graphe"
],
"selection_nodes": "Sélection des nœuds de départ et d'arrivée",
"select_level": "-- Sélectionner un niveau --",
"start_level": "Niveau de départ",
"end_level": "Niveau d'arrivée",
"select_minerals": "Sélectionner un ou plusieurs minerais",
"filter_by_minerals": "Filtrer par minerais (optionnel)",
"fine_selection": "Sélection fine des items",
"filter_start_nodes": "Filtrer par noeuds de départ (optionnel)",
"filter_end_nodes": "Filtrer par noeuds d'arrivée (optionnel)",
"vulnerability_filters": "Sélection des filtres pour identifier les vulnérabilités",
"filter_ics": "Filtrer les chemins contenant au moins minerai critique pour un composant (ICS > 66 %)",
"filter_ivc": "Filtrer les chemins contenant au moins un minerai critique par rapport à la concurrence sectorielle (IVC > 30)",
"filter_ihh": "Filtrer les chemins contenant au moins une opération critique par rapport à la concentration géographique ou industrielle (IHH pays ou acteurs > 25)",
"apply_ihh_filter": "Appliquer le filtre IHH sur :",
"countries": "Pays",
"actors": "Acteurs",
"filter_isg": "Filtrer les chemins contenant un pays instable (ISG ≥ 60)",
"filter_logic": "Logique de filtrage",
"or": "OU",
"and": "ET",
"run_analysis": "Lancer l'analyse",
"sankey": {
"no_paths": "Aucun chemin trouvé pour les critères spécifiés.",
"no_matching_paths": "Aucun chemin ne correspond aux critères.",
"filtered_hierarchy": "Hiérarchie filtrée par niveaux et noeuds",
"download_dot": "Télécharger le fichier DOT filtré",
"relation": "Relation"
}
},
"sidebar": {
"menu": "Menu principal",
"navigation": "Navigation principale",
"theme": "Thème",
"theme_light": "Clair",
"theme_dark": "Sombre",
"theme_instructions_only": "Le changement de thème ne peut se faire que depuis l'onglet Instructions.",
"impact": "Impact environnemental",
"loading": "Chargement en cours…"
"ia_nalyse": {
"title": "Analyse du graphe par IA",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"Le graphe intègre l'ensemble des niveaux, des produits finaux aux pays géographiques.\n",
"1. Vous pouvez sélectionner des minerais par lesquels passent les chemins.",
"2. Vous pouvez choisir des produits finaux pour faire une analyse adaptée à votre contexte.\n",
" Ces deux sélections sont optionnelles, mais fortement recommandées pour avoir une meilleure pertinence de l'analyse.",
"L'analyse se réalise à l'aide d'une IA privée, sur un serveur minimaliste. Le résultat n'est donc pas immédiat (ordre de grandeur : 30 minutes) et vous serez informé de l'avancement."
],
"select_minerals": "Sélectionner un ou plusieurs minerais",
"filter_by_minerals": "Filtrer par minerais (optionnel, mais recommandé)",
"fine_selection": "Sélection des produits finaux",
"filter_start_nodes": "Filtrer par noeuds de départ (optionnel, mais recommandé)",
"run_analysis": "Lancer l'analyse",
"confirm_download": "Confirmer le téléchargement",
"submit_request": "Soumettre votre demande",
"empty_graph": "Le graphe est vide. Veuillez faire une autre sélection."
},
"auth": {
"title": "Authentification",
"username": "Identifiant_token",
"token": "Token d'accès personnel Gitea",
"login": "Se connecter",
"logout": "Se déconnecter",
"logged_as": "Connecté en tant que",
"error": "❌ Accès refusé.",
"gitea_error": "❌ Impossible de vérifier l'utilisateur auprès de Gitea.",
"success": "Déconnecté avec succès."
"plan_d_action": {
"title": "Analyse du graphe pour action",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"Le graphe intègre l'ensemble des niveaux, des produits finaux aux pays géographiques.\n",
"1. Vous pouvez sélectionner des minerais par lesquels passent les chemins.",
"2. Vous pouvez choisir des produits finaux pour faire une analyse adaptée à votre contexte.\n",
" Ces deux sélections sont optionnelles, mais fortement recommandées pour avoir une meilleure pertinence de l'analyse.",
"Les préconisations d'actions et de suivi d'indicateurs sont génériques. Elles doivent donc être adaptées au contexte.",
"Les actions ou les indicateurs proposés dépendent du type d'organisation concernée et peuvent être appliquées directement ou exigées des fournisseurs de numérique."
],
"select_minerals": "Sélectionner un ou plusieurs minerais",
"filter_by_minerals": "Filtrer par minerais (optionnel, mais recommandé)",
"fine_selection": "Sélection des produits finaux",
"filter_start_nodes": "Filtrer par noeuds de départ",
"run_analysis": "Lancer l'analyse",
"confirm_download": "Confirmer le téléchargement",
"submit_request": "Soumettre votre demande",
"empty_graph": "Le graphe est vide. Veuillez faire une autre sélection."
},
"navigation": {
"instructions": "Instructions",
"personnalisation": "Personnalisation",
"analyse": "Analyse",
"ia_nalyse": "IA'nalyse",
"plan_d_action": "Plan d'action",
"visualisations": "Visualisations",
"fiches": "Fiches"
"visualisations": {
"title": "Visualisations",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"1. Explorez les graphiques présentant l'Indice de Herfindahl-Hirschmann (IHH)",
"2. Analysez sa relation avec la criticité moyenne des minerais ou leur Indice de Vulnérabilité Concurrentielle (IVC)",
"3. Zoomer dans les graphes pour mieux découvrir les informations",
"",
"Il est important de se rappeler que l'IHH a deux seuils :",
"* en-dessous de 15, la concentration est considérée comme étant faible",
"* au-dessus de 25, elle est considérée comme étant forte",
"",
"Ainsi plus le positionnement d'un point est en haut à droite des graphiques, plus les risques sont élevés.",
"Les graphiques présentent 2 droites horizontales et vetrticales pour matérialiser ces seuils."
],
"ihh_criticality": "Indice de Herfindahl-Hirschmann - IHH vs Criticité",
"ihh_criticality_desc": "La taille des points donne l'indication de la criticité de substituabilité du minerai.",
"ihh_ivc": "Indice de Herfindahl-Hirschmann - IHH vs IVC",
"ihh_ivc_desc": "La taille des points donne l'indication de la criticité concurrentielle du minerai.",
"launch": "Lancer",
"no_data": "Aucune donnée à visualiser.",
"categories": {
"assembly": "Assemblage",
"manufacturing": "Fabrication",
"processing": "Traitement",
"extraction": "Extraction"
},
"axis_titles": {
"ihh_countries": "IHH Pays (%)",
"ihh_actors": "IHH Acteurs (%)",
"ihh_extraction": "IHH Extraction (%)",
"ihh_reserves": "IHH Réserves (%)"
},
"chart_titles": {
"concentration_criticality": "Concentration et criticité {0}",
"concentration_resources": "Concentration des ressources critiques vs vulnérabilité IVC"
}
},
"pages": {
"instructions": {
"title": "Instructions"
},
"personnalisation": {
"title": "Personnalisation des produits finaux",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"1. Cliquez sur « Ajouter un produit final » pour créer un nouveau produit",
"2. Donnez un nom à votre produit",
"3. Sélectionnez une opération d'assemblage appropriée (si pertinent)",
"4. Choisissez les composants qui constituent votre produit dans la liste proposée",
"5. Sauvegardez votre configuration pour une réutilisation future",
"6. Vous pourrez par la suite modifier ou supprimer vos produits personnalisés"
],
"add_new_product": "Ajouter un nouveau produit final",
"new_product_name": "Nom du nouveau produit (unique)",
"assembly_operation": "Opération d'assemblage (optionnelle)",
"product_exists": "Ce produit existe déjà.",
"none": "-- Aucune --",
"components_to_link": "Composants à lier",
"create_product": "Créer le produit",
"added": "ajouté",
"modify_product": "Modifier un produit final ajouté",
"products_to_modify": "Produits à modifier",
"delete": "Supprimer",
"linked_assembly_operation": "Opération d'assemblage liée",
"components_linked_to": "Composants liés à",
"update": "Mettre à jour",
"updated": "mis à jour",
"deleted": "supprimé",
"save_restore_config": "Sauvegarder ou restaurer la configuration",
"export_config": "Exporter configuration",
"download_json": "Télécharger (JSON)",
"import_config": "Importer une configuration JSON (max 100 Ko)",
"file_too_large": "Fichier trop volumineux (max 100 Ko).",
"no_products_found": "Aucun produit trouvé dans le fichier.",
"select_products_to_restore": "Sélection des produits à restaurer",
"products_to_restore": "Produits à restaurer",
"restore_selected": "Restaurer les éléments sélectionnés",
"config_restored": "Configuration partielle restaurée avec succès.",
"import_error": "Erreur d'import :"
},
"analyse": {
"title": "Analyse du graphe",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"1. Sélectionnez le niveau de départ (produit final, composant ou minerai)",
"2. Choisissez le niveau d'arrivée souhaité",
"3. Affinez votre sélection en spécifiant soit un ou des minerais à cibler spécifiquement ou des items précis à chaque niveau (optionnel)",
"4. Définissez les critères d'analyse en sélectionnant les indices de vulnérabilité pertinents",
"5. Choisissez le mode de combinaison des indices (ET/OU) selon votre besoin d'analyse",
"6. Explorez le graphique généré en utilisant les contrôles de zoom et de déplacement ; vous pouvez basculer en mode plein écran pour le graphe"
],
"selection_nodes": "Sélection des nœuds de départ et d'arrivée",
"select_level": "-- Sélectionner un niveau --",
"start_level": "Niveau de départ",
"end_level": "Niveau d'arrivée",
"select_minerals": "Sélectionner un ou plusieurs minerais",
"filter_by_minerals": "Filtrer par minerais (optionnel)",
"fine_selection": "Sélection fine des items",
"filter_start_nodes": "Filtrer par noeuds de départ (optionnel)",
"filter_end_nodes": "Filtrer par noeuds d'arrivée (optionnel)",
"vulnerability_filters": "Sélection des filtres pour identifier les vulnérabilités",
"filter_ics": "Filtrer les chemins contenant au moins minerai critique pour un composant (ICS > 66 %)",
"filter_ivc": "Filtrer les chemins contenant au moins un minerai critique par rapport à la concurrence sectorielle (IVC > 30)",
"filter_ihh": "Filtrer les chemins contenant au moins une opération critique par rapport à la concentration géographique ou industrielle (IHH pays ou acteurs > 25)",
"apply_ihh_filter": "Appliquer le filtre IHH sur :",
"countries": "Pays",
"actors": "Acteurs",
"filter_isg": "Filtrer les chemins contenant un pays instable (ISG ≥ 60)",
"filter_logic": "Logique de filtrage",
"or": "OU",
"and": "ET",
"run_analysis": "Lancer l'analyse",
"sankey": {
"no_paths": "Aucun chemin trouvé pour les critères spécifiés.",
"no_matching_paths": "Aucun chemin ne correspond aux critères.",
"filtered_hierarchy": "Hiérarchie filtrée par niveaux et noeuds",
"download_dot": "Télécharger le fichier DOT filtré",
"relation": "Relation"
}
},
"ia_nalyse": {
"title": "Analyse du graphe par IA",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"Le graphe intègre l'ensemble des niveaux, des produits finaux aux pays géographiques.\n",
"1. Vous pouvez sélectionner des minerais par lesquels passent les chemins.",
"2. Vous pouvez choisir des produits finaux pour faire une analyse adaptée à votre contexte.\n",
" Ces deux sélections sont optionnelles, mais fortement recommandées pour avoir une meilleure pertinence de l'analyse.",
"L'analyse se réalise à l'aide d'une IA privée, sur un serveur minimaliste. Le résultat n'est donc pas immédiat (ordre de grandeur : 30 minutes) et vous serez informé de l'avancement."
],
"select_minerals": "Sélectionner un ou plusieurs minerais",
"filter_by_minerals": "Filtrer par minerais (optionnel, mais recommandé)",
"fine_selection": "Sélection des produits finaux",
"filter_start_nodes": "Filtrer par noeuds de départ (optionnel, mais recommandé)",
"run_analysis": "Lancer l'analyse",
"confirm_download": "Confirmer le téléchargement",
"submit_request": "Soumettre votre demande",
"empty_graph": "Le graphe est vide. Veuillez faire une autre sélection."
},
"plan_d_action": {
"title": "Analyse du graphe pour action",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"Le graphe intègre l'ensemble des niveaux, des produits finaux aux pays géographiques.\n",
"1. Vous pouvez sélectionner des minerais par lesquels passent les chemins.",
"2. Vous pouvez choisir des produits finaux pour faire une analyse adaptée à votre contexte.\n",
" Ces deux sélections sont optionnelles, mais fortement recommandées pour avoir une meilleure pertinence de l'analyse.",
"Les préconisations d'actions et de suivi d'indicateurs sont génériques. Elles doivent donc être adaptées au contexte.",
"Les actions ou les indicateurs proposés dépendent du type d'organisation concernée et peuvent être appliquées directement ou exigées des fournisseurs de numérique."
],
"select_minerals": "Sélectionner un ou plusieurs minerais",
"filter_by_minerals": "Filtrer par minerais (optionnel, mais recommandé)",
"fine_selection": "Sélection des produits finaux",
"filter_start_nodes": "Filtrer par noeuds de départ",
"run_analysis": "Lancer l'analyse",
"confirm_download": "Confirmer le téléchargement",
"submit_request": "Soumettre votre demande",
"empty_graph": "Le graphe est vide. Veuillez faire une autre sélection."
},
"visualisations": {
"title": "Visualisations",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"1. Explorez les graphiques présentant l'Indice de Herfindahl-Hirschmann (IHH)",
"2. Analysez sa relation avec la criticité moyenne des minerais ou leur Indice de Vulnérabilité Concurrentielle (IVC)",
"3. Zoomer dans les graphes pour mieux découvrir les informations",
"",
"Il est important de se rappeler que l'IHH a deux seuils :",
"* en-dessous de 15, la concentration est considérée comme étant faible",
"* au-dessus de 25, elle est considérée comme étant forte",
"",
"Ainsi plus le positionnement d'un point est en haut à droite des graphiques, plus les risques sont élevés.",
"Les graphiques présentent 2 droites horizontales et vetrticales pour matérialiser ces seuils."
],
"ihh_criticality": "Indice de Herfindahl-Hirschmann - IHH vs Criticité",
"ihh_criticality_desc": "La taille des points donne l'indication de la criticité de substituabilité du minerai.",
"ihh_ivc": "Indice de Herfindahl-Hirschmann - IHH vs IVC",
"ihh_ivc_desc": "La taille des points donne l'indication de la criticité concurrentielle du minerai.",
"launch": "Lancer",
"no_data": "Aucune donnée à visualiser.",
"categories": {
"assembly": "Assemblage",
"manufacturing": "Fabrication",
"processing": "Traitement",
"extraction": "Extraction"
},
"axis_titles": {
"ihh_countries": "IHH Pays (%)",
"ihh_actors": "IHH Acteurs (%)",
"ihh_extraction": "IHH Extraction (%)",
"ihh_reserves": "IHH Réserves (%)"
},
"chart_titles": {
"concentration_criticality": "Concentration et criticité {0}",
"concentration_resources": "Concentration des ressources critiques vs vulnérabilité IVC"
}
},
"fiches": {
"title": "Découverte des fiches",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"1. Parcourez la liste des fiches disponibles par catégorie",
"2. Sélectionnez une fiche pour afficher son contenu complet",
"3. Consultez les données détaillées, graphiques et analyses supplémentaires",
"4. Utilisez ces informations pour approfondir votre compréhension des vulnérabilités identifiées",
"",
"Les catégories sont les suivantes :",
"* Assemblage : opération d'assemblage des produits finaux à partir des composants",
"* Connexe : opérations diverses nécessaires pour fabriquer le numérique, mais n'entrant pas directement dans sa composition",
"* Criticités : indices utilisés pour identifier et évaluer les vulnérabilités",
"* Fabrication : opération de fabrication des composants à partir de minerais",
"* Minerai : description et opérations d'extraction et de traitement des minerais"
],
"no_files": "Aucune fiche disponible pour le moment.",
"choose_category": "Choisissez une catégorie de fiches",
"select_folder": "-- Sélectionner un dossier --",
"choose_file": "Choisissez une fiche",
"select_file": "-- Sélectionner une fiche --",
"loading_error": "Erreur lors du chargement de la fiche :",
"download_pdf": "Télécharger cette fiche en PDF",
"pdf_unavailable": "Le fichier PDF de cette fiche n'est pas disponible.",
"ticket_management": "Gestion des tickets pour cette fiche",
"tickets": {
"create_new": "Créer un nouveau ticket lié à cette fiche",
"model_load_error": "Impossible de charger le modèle de ticket.",
"contribution_type": "Type de contribution",
"specify": "Précisez",
"other": "Autre",
"concerned_card": "Fiche concernée",
"subject": "Sujet de la proposition",
"preview": "Prévisualiser le ticket",
"cancel": "Annuler",
"preview_title": "Prévisualisation du ticket",
"summary": "Résumé",
"title": "Titre",
"labels": "Labels",
"confirm": "Confirmer la création du ticket",
"created": "Ticket créé et formulaire vidé.",
"model_error": "Erreur chargement modèle :",
"no_linked_tickets": "Aucun ticket lié à cette fiche.",
"associated_tickets": "Tickets associés à cette fiche",
"moderation_notice": "ticket(s) en attente de modération ne sont pas affichés.",
"status": {
"awaiting": "En attente de traitement",
"in_progress": "En cours",
"completed": "Terminés",
"rejected": "Non retenus",
"others": "Autres"
},
"no_title": "Sans titre",
"unknown": "inconnu",
"subject_label": "Sujet",
"no_labels": "aucun",
"comments": "Commentaire(s) :",
"no_comments": "Aucun commentaire.",
"comment_error": "Erreur lors de la récupération des commentaires :",
"opened_by": "Ouvert par",
"on_date": "le",
"updated": "MAJ",
"continue": "Continuer",
"created_success": "Ticket créé et placé en modération",
"created_error": "Échec de la création du ticket. Veuillez réessayer plus tard",
"see_ticket": "Voir le ticket"
}
}
},
"node_levels": {
"0": "Produit final",
"1": "Composant",
"2": "Minerai",
"10": "Opération",
"11": "Pays d'opération",
"12": "Acteur d'opération",
"99": "Pays géographique"
},
"errors": {
"log_read_error": "Erreur lecture log:",
"graph_preview_error": "Erreur de prévisualisation du graphe :",
"graph_creation_error": "Erreur lors de la création du graphique :",
"ihh_criticality_error": "Erreur dans la visualisation IHH vs Criticité :",
"ihh_ivc_error": "Erreur dans la visualisation IHH vs IVC :",
"comment_fetch_error": "Erreur lors de la récupération des commentaires :",
"template_load_error": "Erreur chargement modèle :",
"import_error": "Erreur d'import :"
},
"buttons": {
"download": "Télécharger",
"run": "Lancer",
"save": "Enregistrer",
"fiches": {
"title": "Découverte des fiches",
"help": "Comment utiliser cet onglet ?",
"help_content": [
"1. Parcourez la liste des fiches disponibles par catégorie",
"2. Sélectionnez une fiche pour afficher son contenu complet",
"3. Consultez les données détaillées, graphiques et analyses supplémentaires",
"4. Utilisez ces informations pour approfondir votre compréhension des vulnérabilités identifiées",
"",
"Les catégories sont les suivantes :",
"* Assemblage : opération d'assemblage des produits finaux à partir des composants",
"* Connexe : opérations diverses nécessaires pour fabriquer le numérique, mais n'entrant pas directement dans sa composition",
"* Criticités : indices utilisés pour identifier et évaluer les vulnérabilités",
"* Fabrication : opération de fabrication des composants à partir de minerais",
"* Minerai : description et opérations d'extraction et de traitement des minerais"
],
"no_files": "Aucune fiche disponible pour le moment.",
"choose_category": "Choisissez une catégorie de fiches",
"select_folder": "-- Sélectionner un dossier --",
"choose_file": "Choisissez une fiche",
"select_file": "-- Sélectionner une fiche --",
"loading_error": "Erreur lors du chargement de la fiche :",
"download_pdf": "Télécharger cette fiche en PDF",
"pdf_unavailable": "Le fichier PDF de cette fiche n'est pas disponible.",
"ticket_management": "Gestion des tickets pour cette fiche",
"tickets": {
"create_new": "Créer un nouveau ticket lié à cette fiche",
"model_load_error": "Impossible de charger le modèle de ticket.",
"contribution_type": "Type de contribution",
"specify": "Précisez",
"other": "Autre",
"concerned_card": "Fiche concernée",
"subject": "Sujet de la proposition",
"preview": "Prévisualiser le ticket",
"cancel": "Annuler",
"confirm": "Confirmer",
"filter": "Filtrer",
"search": "Rechercher",
"create": "Créer",
"update": "Mettre à jour",
"delete": "Supprimer",
"preview": "Prévisualiser",
"export": "Exporter",
"import": "Importer",
"restore": "Restaurer",
"refresh": "Rafraîchir",
"browse_files": "Parcourir les fichiers"
},
"ui": {
"file_uploader": {
"drag_drop_here": "Glissez-déposez votre fichier ici",
"size_limit": "Limite 100 Ko par fichier • JSON"
}
},
"batch": {
"in_queue": "En attente",
"in_progress": "Analyse en cours",
"failure": "Échec",
"unknwon_error": "erreur inconnue",
"no_task": "Aucune tâche en attente ou en cours",
"complete": "Analyse terminée. Télécharger le résultat au format zip, qui contient le rapport détaillé et l'analyse.",
"step": "Étape"
"preview_title": "Prévisualisation du ticket",
"summary": "Résumé",
"title": "Titre",
"labels": "Labels",
"confirm": "Confirmer la création du ticket",
"created": "Ticket créé et formulaire vidé.",
"model_error": "Erreur chargement modèle :",
"no_linked_tickets": "Aucun ticket lié à cette fiche.",
"associated_tickets": "Tickets associés à cette fiche",
"moderation_notice": "ticket(s) en attente de modération ne sont pas affichés.",
"status": {
"awaiting": "En attente de traitement",
"in_progress": "En cours",
"completed": "Terminés",
"rejected": "Non retenus",
"others": "Autres"
},
"no_title": "Sans titre",
"unknown": "inconnu",
"subject_label": "Sujet",
"no_labels": "aucun",
"comments": "Commentaire(s) :",
"no_comments": "Aucun commentaire.",
"comment_error": "Erreur lors de la récupération des commentaires :",
"opened_by": "Ouvert par",
"on_date": "le",
"updated": "MAJ",
"continue": "Continuer",
"created_success": "Ticket créé et placé en modération",
"created_error": "Échec de la création du ticket. Veuillez réessayer plus tard",
"see_ticket": "Voir le ticket"
}
}
},
"node_levels": {
"0": "Produit final",
"1": "Composant",
"2": "Minerai",
"10": "Opération",
"11": "Pays d'opération",
"12": "Acteur d'opération",
"99": "Pays géographique"
},
"errors": {
"log_read_error": "Erreur lecture log:",
"graph_preview_error": "Erreur de prévisualisation du graphe :",
"graph_creation_error": "Erreur lors de la création du graphique :",
"ihh_criticality_error": "Erreur dans la visualisation IHH vs Criticité :",
"ihh_ivc_error": "Erreur dans la visualisation IHH vs IVC :",
"comment_fetch_error": "Erreur lors de la récupération des commentaires :",
"template_load_error": "Erreur chargement modèle :",
"import_error": "Erreur d'import :"
},
"buttons": {
"download": "Télécharger",
"run": "Lancer",
"save": "Enregistrer",
"cancel": "Annuler",
"confirm": "Confirmer",
"filter": "Filtrer",
"search": "Rechercher",
"create": "Créer",
"update": "Mettre à jour",
"delete": "Supprimer",
"preview": "Prévisualiser",
"export": "Exporter",
"import": "Importer",
"restore": "Restaurer",
"refresh": "Rafraîchir",
"browse_files": "Parcourir les fichiers"
},
"ui": {
"file_uploader": {
"drag_drop_here": "Glissez-déposez votre fichier ici",
"size_limit": "Limite 100 Ko par fichier • JSON"
}
},
"batch": {
"in_queue": "En attente",
"in_progress": "Analyse en cours",
"failure": "Échec",
"unknwon_error": "erreur inconnue",
"no_task": "Aucune tâche en attente ou en cours",
"complete": "Analyse terminée. Télécharger le résultat au format zip, qui contient le rapport détaillé et l'analyse.",
"step": "Étape"
}
}

View File

@ -4,33 +4,33 @@
1. Reset et base
========================================== */
.stAppHeader {
visibility: hidden;
visibility: hidden;
}
body,
html {
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial,
sans-serif;
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial,
sans-serif;
}
body,
.stApp,
.block-container {
background-color: var(--bg-color) !important;
color: var(--text-color) !important;
background-color: var(--bg-color) !important;
color: var(--text-color) !important;
}
/* ==========================================
2. Layout et containers
========================================== */
.block-container {
max-width: 1024px !important;
padding: 0 1rem 10rem;
max-width: 1024px !important;
padding: 0 1rem 10rem;
}
.stVerticalBlock {
gap: 0.5rem !important;
gap: 0.5rem !important;
}
/* ==========================================
@ -42,97 +42,97 @@ body,
.stDownloadButton > button,
.stFormSubmitButton > button,
.stSlider > div > div {
background-color: darkgreen !important;
color: white !important;
border: 1px solid grey;
background-color: #072c6e !important;
color: white !important;
border: 1px solid grey;
}
.st-key-FormSubmitter-auth_form-Se-connecter {
margin-left: auto;
margin-right: auto;
margin-left: auto;
margin-right: auto;
}
section:not([data-testid="stSidebar"])
button[data-testid="stBaseButton-primary"],
button[data-testid="stBaseButton-primary"],
section:not([data-testid="stSidebar"])
button[data-testid="stBaseButton-secondary"] {
color: white !important;
background: darkgreen !important;
button[data-testid="stBaseButton-secondary"] {
color: white !important;
background: #072c6e !important;
}
section:not([data-testid="stSidebar"])
button[data-testid="stBaseButton-primary"]
p,
button[data-testid="stBaseButton-primary"]
p,
section:not([data-testid="stSidebar"])
button[data-testid="stBaseButton-secondary"]
p {
color: white !important;
button[data-testid="stBaseButton-secondary"]
p {
color: white !important;
}
.bouton-fictif {
display: inline-flex;
-moz-box-align: center;
align-items: center;
-moz-box-pack: center;
justify-content: center;
padding: 0.25rem 0.75rem;
border-radius: 0.5rem;
min-height: 2.5rem;
margin-bottom: 20px;
line-height: 1;
text-transform: none;
font-size: x-large;
font-family: inherit;
user-select: none;
border: 1px solid rgba(49, 51, 63, 0.2);
background-color: darkgrey !important;
color: darkgreen !important;
font-weight: bold !important;
width: 100%;
letter-spacing: 0.2em;
display: inline-flex;
-moz-box-align: center;
align-items: center;
-moz-box-pack: center;
justify-content: center;
padding: 0.25rem 0.75rem;
border-radius: 0.5rem;
min-height: 2.5rem;
margin-bottom: 20px;
line-height: 1;
text-transform: none;
font-size: x-large;
font-family: inherit;
user-select: none;
border: 1px solid rgba(49, 51, 63, 0.2);
background-color: darkgrey !important;
color: #072c6e !important;
font-weight: bold !important;
width: 100%;
letter-spacing: 0.2em;
}
button[data-testid="stBaseButton-headerNoPadding"] svg {
fill: var(--text-color) !important;
fill: var(--text-color) !important;
}
/* --- 3.2 Onglets et radiogroup --- */
div[role="radiogroup"] > label {
padding: 0.5em 1em;
border-radius: 0.4em;
margin-right: 0.5em;
cursor: pointer;
border: 1px solid #fff;
padding: 0.5em 1em;
border-radius: 0.4em;
margin-right: 0.5em;
cursor: pointer;
border: 1px solid #fff;
}
div[role="radiogroup"] > label[data-selected="true"] {
font-weight: bold;
border: 2px solid #145a1a;
font-weight: bold;
border: 2px solid #145a1a;
}
section:not([data-testid="stSidebar"]) div[role="radiogroup"] > label p {
background-color: var(--radio-bg) !important;
color: var(--radio-text) !important;
background-color: var(--radio-bg) !important;
color: var(--radio-text) !important;
}
section:not([data-testid="stSidebar"])
div[role="radiogroup"]
> label[data-selected="true"] {
background-color: var(--radio-selected-bg) !important;
color: var(--radio-selected-text) !important;
div[role="radiogroup"]
> label[data-selected="true"] {
background-color: var(--radio-selected-bg) !important;
color: var(--radio-selected-text) !important;
}
/* --- 3.3 Champs de formulaire --- */
div[data-baseweb="select"],
section:not([data-testid="stSidebar"]) div[data-baseweb="base-input"],
section[data-testid="stFileUploaderDropzone"] {
border: 1px solid var(--input-border) !important;
border-radius: 5px;
padding: 4px;
border: 1px solid var(--input-border) !important;
border-radius: 5px;
padding: 4px;
}
small {
display: none;
display: none;
}
section:not([data-testid="stSidebar"]) div[data-testid="stSelectbox"] p,
@ -142,7 +142,7 @@ section:not([data-testid="stSidebar"]) div[data-testid="stCheckbox"] p,
section:not([data-testid="stSidebar"]) div[data-testid="stTextInput"] p,
section:not([data-testid="stSidebar"]) div[data-testid="stTextArea"] p,
section:not([data-testid="stSidebar"]) div[data-testid="stAlertContentInfo"] p {
color: var(--text-color) !important;
color: var(--text-color) !important;
}
/* ==========================================
@ -151,98 +151,98 @@ section:not([data-testid="stSidebar"]) div[data-testid="stAlertContentInfo"] p {
/* --- 4.1 Header --- */
.wide-header {
width: 100vw;
margin-left: calc(-50vw + 50%);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
border-bottom: 1px solid #ddd;
text-align: center;
padding-top: 1rem;
margin-top: -1.25em;
background-color: var(--header-bg);
width: 100vw;
margin-left: calc(-50vw + 50%);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
border-bottom: 1px solid #ddd;
text-align: center;
padding-top: 1rem;
margin-top: -1.25em;
background-color: var(--header-bg);
}
.titre-header {
font-size: 2rem !important;
font-weight: bolder !important;
color: var(--header-title);
font-size: 2rem !important;
font-weight: bolder !important;
color: var(--header-title);
}
/* --- 4.2 Footer --- */
.wide-footer {
width: 100vw;
margin-left: calc(-50vw + 50%);
margin-top: 3rem;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
border-top: 1px solid #ddd;
text-align: center;
padding-top: 1rem;
background-color: var(--footer-bg);
width: 100vw;
margin-left: calc(-50vw + 50%);
margin-top: 3rem;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
border-top: 1px solid #ddd;
text-align: center;
padding-top: 1rem;
background-color: var(--footer-bg);
}
.info-footer {
font-size: 1rem !important;
font-weight: 800;
color: var(--footer-text);
font-size: 1rem !important;
font-weight: 800;
color: var(--footer-text);
}
/* ==========================================
5. Sidebar
========================================== */
section[data-testid="stSidebar"] {
background-color: #ccc !important;
color: #111 !important;
background-color: #ccc !important;
color: #111 !important;
}
section[data-testid="stSidebar"] .stButton > button {
background-color: darkgreen !important;
color: white !important;
font-weight: bold !important;
border: 1px solid #ccc !important;
width: 100%;
background-color: #072c6e !important;
color: white !important;
font-weight: bold !important;
border: 1px solid #ccc !important;
width: 100%;
}
section[data-testid="stSidebar"] .decorative-heading {
font-size: 1.25rem;
font-weight: bold;
margin-bottom: 0.5rem;
text-align: center;
color: #145a1a;
font-size: 1.25rem;
font-weight: bold;
margin-bottom: 0.5rem;
text-align: center;
color: #072c6e;
}
section[data-testid="stSidebar"] div[role="radiogroup"] {
justify-content: center !important;
display: flex !important;
gap: 1rem;
justify-content: center !important;
display: flex !important;
gap: 1rem;
}
/* ==========================================
6. Tables
========================================== */
table {
border: 1px solid var(--table-border) !important;
border-collapse: collapse;
width: 100%;
margin-bottom: 1.5em;
border: 1px solid var(--table-border) !important;
border-collapse: collapse;
width: 100%;
margin-bottom: 1.5em;
}
th,
td {
border: 1px solid var(--table-border) !important;
padding: 8px;
text-align: left;
border: 1px solid var(--table-border) !important;
padding: 8px;
text-align: left;
}
caption {
caption-side: top;
font-weight: bold;
padding: 0.5em;
text-align: left;
caption-side: bottom;
text-align: center;
caption-side: top;
font-weight: bold;
padding: 0.5em;
text-align: left;
caption-side: bottom;
text-align: center;
}
table[role="table"] th[scope="col"] {
background-color: var(--background-color);
background-color: var(--background-color);
}
/* ==========================================
@ -254,99 +254,99 @@ table[role="table"] th[scope="col"] {
/* --- 7.2 Graphiques --- */
.stPlotlyChart text {
fill: var(--plot-text) !important;
fill: var(--plot-text) !important;
}
.stPlotlyChart text {
fill: black !important;
text-shadow: none !important;
font-weight: bold !important;
font-size: 14px !important;
font-family: Verdana, sans-serif !important;
fill: black !important;
text-shadow: none !important;
font-weight: bold !important;
font-size: 14px !important;
font-family: Verdana, sans-serif !important;
}
/* Cache complètement la section d'actions Vega */
.vega-actions {
display: none !important;
display: none !important;
}
/* Et aussi le <details> parent, s'il faut tout masquer */
details[title="Click to view actions"] {
display: none !important;
display: none !important;
}
/* --- 7.3 Détails et paragraphes --- */
details {
border: 1px solid #ccc;
border-radius: 6px;
padding: 0.5em;
margin-bottom: 0.5em;
background-color: var(--background-color);
border-color: var(--details-border) !important;
border: 1px solid #ccc;
border-radius: 6px;
padding: 0.5em;
margin-bottom: 0.5em;
background-color: var(--background-color);
border-color: var(--details-border) !important;
}
section:not([data-testid="stSidebar"])
div:not[data-testid="stElementContainer"]
p:not(#Authentification):not(#Theme) {
color: var(--paragraph-color) !important;
div:not[data-testid="stElementContainer"]
p:not(#Authentification):not(#Theme) {
color: var(--paragraph-color) !important;
}
section:not([data-testid="stSidebar"]) hr {
background-color: var(--hr-color) !important;
background-color: var(--hr-color) !important;
}
/* --- 7.4 Conteneurs de commentaires et tickets --- */
.conteneur_commentaire,
.conteneur_ticket {
background: var(--background-color);
padding: 1em;
border-radius: 8px;
margin-bottom: 1em;
border: 1px solid #ccc;
background: var(--background-color);
padding: 1em;
border-radius: 8px;
margin-bottom: 1em;
border: 1px solid #ccc;
}
.commentaire_auteur,
.ticket_auteur {
color: var(--text-color) !important;
margin: 0;
color: var(--text-color) !important;
margin: 0;
}
.commentaire_contenu,
.ticket_contenu {
color: var(--text-color) !important;
margin: 0.5rem 0 0;
color: var(--text-color) !important;
margin: 0.5rem 0 0;
}
/* --- 7.5 Blocs mathématiques --- */
.math-block {
display: block;
text-align: center;
margin: 1em 0;
border: 1px solid var(--math-block-border);
border-radius: 10px;
background: var(--math-block-bg);
font-size: x-large;
color: var(--text-color);
display: block;
text-align: center;
margin: 1em 0;
border: 1px solid var(--math-block-border);
border-radius: 10px;
background: var(--math-block-bg);
font-size: x-large;
color: var(--text-color);
}
.math-block math {
display: inline-block;
display: inline-block;
}
/* ==========================================
8. Éléments spécifiques
========================================== */
div.stElementContainer.element-container.st-key-nom_utilisateur {
display: none !important;
display: none !important;
}
.st-key-telecharger_fiche_pdf {
margin-left: auto;
margin-right: auto;
margin-top: 1rem;
margin-left: auto;
margin-right: auto;
margin-top: 1rem;
}
.details_introduction {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}

View File

@ -11,7 +11,9 @@ def afficher_pied_de_page():
<div role='contentinfo' aria-labelledby='footer-appli' class='wide-footer'>
<div class='info-footer'>
<p id='footer-appli' class='info-footer'>
{_("footer.copyright")} <a href='mailto:stephan-pro@peccini.fr'>{_("footer.contact")}</a> {_("footer.license")} <a href='https://creativecommons.org/licenses/by-nc-nd/4.0/deed.fr' target='_blank'>{_("footer.license_text")}</a>
{_("footer.copyright")} <a href='mailto:stephan.peccini@polycrisis-observatory.org'>{_("footer.contact")}</a> {_("footer.license")} <a href='https://creativecommons.org/licenses/by-nc-nd/4.0/deed.fr' target='_blank'>{_("footer.license_text")}</a>
</p>
<a href="https://www.polycrisis-observatory.org/" target="_blank"><img src="/app/static/images/polycrisis_observatory.webp" alt="Logo de l'Observatoire des Polycrises"></a>
</p>
<p class='footer-note'>
{_("footer.eco_note")} <a href='https://www.thegreenwebfoundation.org/' target='_blank'>{_("footer.eco_provider")}</a><br>

View File

@ -125,7 +125,7 @@ def afficher_impact(total_bytes):
font-size: 1.25rem;
font-weight: bold;
margin-bottom: 0.5rem;
color: #145a1a;
color: #072c6e;
text-align: center;
}}
span {{

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB