Sur Proxmox on déploie le plus souvent un parc MIXTE — un hyperviseur imbriqué à côté de VM ERPLibre. C'est exactement le cas où un réglage par machine sert, et c'est le seul écran qui ne l'offrait pas : ses rangées n'avaient ni branche, ni profil, ni type. Les trois choix et leur gestionnaire — quatre-vingts lignes — rejoignent le socle. Les dupliquer aurait remis en place le mécanisme de dérive qu'on vient d'enlever. L'écran QEMU/KVM perd encore 130 lignes sans qu'un widget, un modèle ou une spec ne bouge : ancien et nouveau montés dans le même processus, mêmes rangées, mêmes valeurs après avoir changé une branche, un type et un profil. Le déploiement suit : il lisait la seule valeur commune alors que le plan portait déjà le choix par rangée. Une seule VM qui s'écarte suffit à rendre la carte nécessaire — « len(set) > 1 » ne l'aurait pas vu. Un défaut trouvé par un test, pas à l'usage : l'écho du montage se reconnaissait à sa commande, or quand la commande imposée par le système n'est pas dans la liste proposée, la liste retombe au rang 0 — et l'écho de ce rang 0 effaçait l'imposition. Un Proxmox imbriqué reprenait ERPLibre et Odoo 18. L'écho se reconnaît maintenant au RANG affiché. --- EN --- On Proxmox you usually deploy a MIXED fleet — a nested hypervisor next to ERPLibre VMs. That is exactly where a per-machine setting earns its keep, and it was the only screen without one: its rows had no branch, no profile, no type. The three choices and their handler — eighty lines — move into the shared foundation. Duplicating them would have restored the very drift mechanism we just removed. The QEMU/KVM screen loses another 130 lines with no widget, model or spec moving: old and new mounted in one process, same rows, same values after changing a branch, a type and a profile. The deployment follows: it read the single common value while the plan already carried the per-row choice. One VM that differs is enough to require the map — "len(set) > 1" would not have seen it. One defect found by a test, not by use: the mount echo was recognised by its command, yet when the command imposed by the guest OS is absent from the offered list, the list falls back to index 0 — and that index-0 echo erased the imposition. A nested Proxmox took ERPLibre and Odoo 18 back. The echo is now recognised by the DISPLAYED index. Assisted-by: Claude Opus 5
9723 lines
352 KiB
Python
9723 lines
352 KiB
Python
#!/usr/bin/env python3
|
||
# © 2021-2026 TechnoLibre (http://www.technolibre.ca)
|
||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||
|
||
import os
|
||
import re
|
||
|
||
ENV_VAR_FILE = "./env_var.sh"
|
||
|
||
_current_lang = None
|
||
|
||
TRANSLATIONS = {
|
||
# Main menu
|
||
"Importation success!": {
|
||
"fr": "L'importation est un succès!",
|
||
"en": "Importation success!",
|
||
},
|
||
"Opening TODO ...": {
|
||
"fr": "Ouverture de TODO en cours ...",
|
||
"en": "Opening TODO ...",
|
||
},
|
||
"=> Enter your choice by number and press Enter!": {
|
||
"fr": "=> Entre tes directives par son chiffre et fait Entrée!",
|
||
"en": "=> Enter your choice by number and press Enter!",
|
||
},
|
||
"Command:": {
|
||
"fr": "Commande :",
|
||
"en": "Command:",
|
||
},
|
||
"Execute": {
|
||
"fr": "🧰 Exécution",
|
||
"en": "🧰 Execute",
|
||
},
|
||
"Install": {
|
||
"fr": "📦 Installation",
|
||
"en": "📦 Install",
|
||
},
|
||
"Assistant": {
|
||
"fr": "🤖 Assistant",
|
||
"en": "🤖 Assistant",
|
||
},
|
||
"Fork - Open TODO in a new tab": {
|
||
"fr": "🔀 Fork - Ouvre TODO dans une nouvelle tabulation",
|
||
"en": "🔀 Fork - Open TODO in a new tab",
|
||
},
|
||
"Quit": {
|
||
"fr": "Quitter",
|
||
"en": "Quit",
|
||
},
|
||
"Command not found !": {
|
||
"fr": "Commande non trouvée !",
|
||
"en": "Command not found !",
|
||
},
|
||
"Back": {
|
||
"fr": "🔙 Retour",
|
||
"en": "🔙 Back",
|
||
},
|
||
# Execute submenu
|
||
"Run - Execute and install an instance": {
|
||
"fr": "🏃 Run - Exécuter et installer une instance",
|
||
"en": "🏃 Run - Execute and install an instance",
|
||
},
|
||
"Automation - Demonstration of developed features": {
|
||
"fr": "🦾 Automatisation - Demonstration des fonctions développées",
|
||
"en": "🦾 Automation - Demonstration of developed features",
|
||
},
|
||
"Update - Update all developed staging source code": {
|
||
"fr": "🔃 Mise à jour - Update all developed staging source code",
|
||
"en": "🔃 Update - Update all developed staging source code",
|
||
},
|
||
"Code - Developer tools": {
|
||
"fr": "💻 Code - Outil pour développeur",
|
||
"en": "💻 Code - Developer tools",
|
||
},
|
||
"Doc - Documentation search": {
|
||
"fr": "📖 Doc - Recherche de documentation",
|
||
"en": "📖 Doc - Documentation search",
|
||
},
|
||
"Database - Database tools": {
|
||
"fr": "💾 Database - Outils sur les bases de données",
|
||
"en": "💾 Database - Database tools",
|
||
},
|
||
"Process - Execution tools": {
|
||
"fr": "📟 Process - Outils sur les executions",
|
||
"en": "📟 Process - Execution tools",
|
||
},
|
||
"Config - Configuration file management": {
|
||
"fr": "🔧 Config - Traitement du fichier de configuration",
|
||
"en": "🔧 Config - Configuration file management",
|
||
},
|
||
"Network - Network tools": {
|
||
"fr": "📡 Réseau - Outil réseautique",
|
||
"en": "📡 Network - Network tools",
|
||
},
|
||
"Security - Dependency security audit": {
|
||
"fr": "🔒 Sécurité - Audit de sécurité des dépendances",
|
||
"en": "🔒 Security - Dependency security audit",
|
||
},
|
||
"RTK - CLI proxy to reduce LLM token consumption": {
|
||
"fr": "RTK - Proxy CLI pour réduire la consommation de tokens LLM",
|
||
"en": "RTK - CLI proxy to reduce LLM token consumption",
|
||
},
|
||
"Language - Change language / Changer la langue": {
|
||
"fr": "🌍 Langue - Changer la langue / Change language",
|
||
"en": "🌍 Language - Change language / Changer la langue",
|
||
},
|
||
# Deploy section
|
||
"Deploy - Deploy ERPLibre locally": {
|
||
"fr": "🚀 Déploiement - Déployer ERPLibre localement",
|
||
"en": "🚀 Deploy - Deploy ERPLibre locally",
|
||
},
|
||
"Deploy ERPLibre to a local directory!": {
|
||
"fr": "Déployer ERPLibre dans un répertoire local!",
|
||
"en": "Deploy ERPLibre to a local directory!",
|
||
},
|
||
"Clone ERPLibre locally (git clone)": {
|
||
"fr": "📥 Cloner ERPLibre localement (git clone)",
|
||
"en": "📥 Clone ERPLibre locally (git clone)",
|
||
},
|
||
"Target directory path (default: ~/erplibre): ": {
|
||
"fr": "Chemin du répertoire cible (défaut: ~/erplibre) : ",
|
||
"en": "Target directory path (default: ~/erplibre): ",
|
||
},
|
||
"Directory already exists: ": {
|
||
"fr": "Le répertoire existe déjà : ",
|
||
"en": "Directory already exists: ",
|
||
},
|
||
"Cloning ERPLibre...": {
|
||
"fr": "Clonage d'ERPLibre en cours...",
|
||
"en": "Cloning ERPLibre...",
|
||
},
|
||
"ERPLibre cloned successfully to: ": {
|
||
"fr": "ERPLibre cloné avec succès dans : ",
|
||
"en": "ERPLibre cloned successfully to: ",
|
||
},
|
||
"Error cloning ERPLibre: ": {
|
||
"fr": "Erreur lors du clonage d'ERPLibre : ",
|
||
"en": "Error cloning ERPLibre: ",
|
||
},
|
||
"Configure sshfs": {
|
||
"fr": "📁 Configurer sshfs",
|
||
"en": "📁 Configure sshfs",
|
||
},
|
||
"Local": {
|
||
"fr": "💻 Local",
|
||
"en": "💻 Local",
|
||
},
|
||
"SSH (remote host)": {
|
||
"fr": "SSH (hôte distant)",
|
||
"en": "SSH (remote host)",
|
||
},
|
||
"Remote & services": {
|
||
"fr": "🌐 Distant & services",
|
||
"en": "🌐 Remote & services",
|
||
},
|
||
"SSH (remote host)...": {
|
||
"fr": "🔐 SSH (hôte distant)…",
|
||
"en": "🔐 SSH (remote host)...",
|
||
},
|
||
"Deploy ERPLibre to a remote host over SSH!": {
|
||
"fr": "Déployer ERPLibre sur un hôte distant via SSH !",
|
||
"en": "Deploy ERPLibre to a remote host over SSH!",
|
||
},
|
||
"Virtualization & notifications": {
|
||
"fr": "Virtualisation & notifications",
|
||
"en": "Virtualization & notifications",
|
||
},
|
||
"Development": {
|
||
"fr": "🧰 Développement",
|
||
"en": "🧰 Development",
|
||
},
|
||
"Data": {
|
||
"fr": "📊 Données",
|
||
"en": "📊 Data",
|
||
},
|
||
"Sources & documentation": {
|
||
"fr": "📚 Sources & documentation",
|
||
"en": "📚 Sources & documentation",
|
||
},
|
||
"AI & automation": {
|
||
"fr": "🧠 IA & automatisation",
|
||
"en": "🧠 AI & automation",
|
||
},
|
||
"Deployment, network & security": {
|
||
"fr": "🌐 Déploiement, réseau & sécurité",
|
||
"en": "🌐 Deployment, network & security",
|
||
},
|
||
"Preferences": {
|
||
"fr": "🎨 Préférences",
|
||
"en": "🎨 Preferences",
|
||
},
|
||
"Deployment": {
|
||
"fr": "🚀 Déploiement",
|
||
"en": "🚀 Deployment",
|
||
},
|
||
"Manage": {
|
||
"fr": "🛠 Gérer",
|
||
"en": "🛠 Manage",
|
||
},
|
||
"Catalog": {
|
||
"fr": "📚 Catalogue",
|
||
"en": "📚 Catalog",
|
||
},
|
||
"Open the console on a VM": {
|
||
"fr": "🖥 Ouvrir la console d'une VM",
|
||
"en": "🖥 Open the console on a VM",
|
||
},
|
||
"Backup": {
|
||
"fr": "Sauvegarde",
|
||
"en": "Backup",
|
||
},
|
||
"Restore": {
|
||
"fr": "Restauration",
|
||
"en": "Restore",
|
||
},
|
||
"Danger zone": {
|
||
"fr": "Zone dangereuse",
|
||
"en": "Danger zone",
|
||
},
|
||
"Setup": {
|
||
"fr": "Installation",
|
||
"en": "Setup",
|
||
},
|
||
"Status": {
|
||
"fr": "Statut",
|
||
"en": "Status",
|
||
},
|
||
"Optimize": {
|
||
"fr": "Optimisation",
|
||
"en": "Optimize",
|
||
},
|
||
"Generate": {
|
||
"fr": "Génération",
|
||
"en": "Generate",
|
||
},
|
||
"Advanced": {
|
||
"fr": "Avancé",
|
||
"en": "Advanced",
|
||
},
|
||
"To leave the console, press Ctrl+] (then Enter).": {
|
||
"fr": "Pour quitter la console, appuyez sur Ctrl+] (puis Entrée).",
|
||
"en": "To leave the console, press Ctrl+] (then Enter).",
|
||
},
|
||
"Default login (if set at deploy): erplibre / erplibre": {
|
||
"fr": "Login par défaut (si défini au déploiement) : "
|
||
"erplibre / erplibre",
|
||
"en": "Default login (if set at deploy): erplibre / erplibre",
|
||
},
|
||
"Console password for 'erplibre' (default: erplibre): ": {
|
||
"fr": "Mot de passe console pour « erplibre » (défaut : erplibre) : ",
|
||
"en": "Console password for 'erplibre' (default: erplibre): ",
|
||
},
|
||
"Console/SSH login:": {
|
||
"fr": "Connexion console/SSH :",
|
||
"en": "Console/SSH login:",
|
||
},
|
||
"Default login:": {
|
||
"fr": "Login par défaut :",
|
||
"en": "Default login:",
|
||
},
|
||
"Add this VM to ~/.ssh/config? (y/N): ": {
|
||
"fr": "Ajouter cette VM à ~/.ssh/config ? (o/N, défaut : non) : ",
|
||
"en": "Add this VM to ~/.ssh/config? (y/N, default: no): ",
|
||
},
|
||
"Add each VM to ~/.ssh/config? (Y/n): ": {
|
||
"fr": "Ajouter chaque VM à ~/.ssh/config ? (O/n, défaut : oui) : ",
|
||
"en": "Add each VM to ~/.ssh/config? (Y/n, default: yes): ",
|
||
},
|
||
"Waiting for the VM IP (DHCP lease)...": {
|
||
"fr": "Attente de l'IP de la VM (bail DHCP)...",
|
||
"en": "Waiting for the VM IP (DHCP lease)...",
|
||
},
|
||
"No IP yet; add it later once the VM has booted.": {
|
||
"fr": "Pas encore d'IP ; à ajouter plus tard une fois la VM démarrée.",
|
||
"en": "No IP yet; add it later once the VM has booted.",
|
||
},
|
||
"Added to ~/.ssh/config:": {
|
||
"fr": "Ajouté à ~/.ssh/config :",
|
||
"en": "Added to ~/.ssh/config:",
|
||
},
|
||
"SSH address input method": {
|
||
"fr": "Méthode de saisie de l'adresse SSH",
|
||
"en": "SSH address input method",
|
||
},
|
||
"Manual entry": {
|
||
"fr": "Saisie manuelle",
|
||
"en": "Manual entry",
|
||
},
|
||
"From ~/.ssh/config": {
|
||
"fr": "Depuis ~/.ssh/config",
|
||
"en": "From ~/.ssh/config",
|
||
},
|
||
"Your choice (1/2): ": {
|
||
"fr": "Votre choix (1/2) : ",
|
||
"en": "Your choice (1/2): ",
|
||
},
|
||
"No SSH hosts found in ~/.ssh/config": {
|
||
"fr": "Aucun hôte SSH trouvé dans ~/.ssh/config",
|
||
"en": "No SSH hosts found in ~/.ssh/config",
|
||
},
|
||
"Select SSH host number: ": {
|
||
"fr": "Numéro de l'hôte SSH à sélectionner : ",
|
||
"en": "Select SSH host number: ",
|
||
},
|
||
"Invalid selection!": {
|
||
"fr": "Sélection invalide!",
|
||
"en": "Invalid selection!",
|
||
},
|
||
"SSH host (e.g.: user@192.168.1.100): ": {
|
||
"fr": "Hôte SSH (ex: user@192.168.1.100) : ",
|
||
"en": "SSH host (e.g.: user@192.168.1.100): ",
|
||
},
|
||
"Mounting sshfs on: ": {
|
||
"fr": "Montage sshfs sur : ",
|
||
"en": "Mounting sshfs on: ",
|
||
},
|
||
"Mounted on: ": {
|
||
"fr": "Monté sur : ",
|
||
"en": "Mounted on: ",
|
||
},
|
||
"To unmount: ": {
|
||
"fr": "Pour démonter : ",
|
||
"en": "To unmount: ",
|
||
},
|
||
"Error mounting sshfs: ": {
|
||
"fr": "Erreur lors du montage sshfs : ",
|
||
"en": "Error mounting sshfs: ",
|
||
},
|
||
# RTK (Rust Token Killer)
|
||
"Manage RTK (Rust Token Killer) for token optimization!": {
|
||
"fr": "Gérer RTK (Rust Token Killer) pour optimiser les tokens!",
|
||
"en": "Manage RTK (Rust Token Killer) for token optimization!",
|
||
},
|
||
"Install RTK": {
|
||
"fr": "Installer RTK",
|
||
"en": "Install RTK",
|
||
},
|
||
"Check RTK version": {
|
||
"fr": "Vérifier la version de RTK",
|
||
"en": "Check RTK version",
|
||
},
|
||
"Show cumulative token savings": {
|
||
"fr": "Afficher les économies de tokens cumulées",
|
||
"en": "Show cumulative token savings",
|
||
},
|
||
"Discover optimization opportunities": {
|
||
"fr": "Identifier les opportunités d'optimisation",
|
||
"en": "Discover optimization opportunities",
|
||
},
|
||
"Initialize global auto-rewrite hook": {
|
||
"fr": "Initialiser le hook auto-rewrite global",
|
||
"en": "Initialize global auto-rewrite hook",
|
||
},
|
||
"Check RTK status": {
|
||
"fr": "Vérifier le statut de RTK",
|
||
"en": "Check RTK status",
|
||
},
|
||
"RTK is not installed. Use option 1 to install it.": {
|
||
"fr": "RTK n'est pas installé. Utilisez l'option 1 pour l'installer.",
|
||
"en": "RTK is not installed. Use option 1 to install it.",
|
||
},
|
||
"RTK is installed, version: ": {
|
||
"fr": "RTK est installé, version : ",
|
||
"en": "RTK is installed, version: ",
|
||
},
|
||
"Global auto-rewrite hook: active": {
|
||
"fr": "Hook auto-rewrite global : actif",
|
||
"en": "Global auto-rewrite hook: active",
|
||
},
|
||
"Global auto-rewrite hook: inactive": {
|
||
"fr": "Hook auto-rewrite global : inactif",
|
||
"en": "Global auto-rewrite hook: inactive",
|
||
},
|
||
"Installation method:": {
|
||
"fr": "Méthode d'installation :",
|
||
"en": "Installation method:",
|
||
},
|
||
"curl - Automatic install script": {
|
||
"fr": "curl - Script d'installation automatique",
|
||
"en": "curl - Automatic install script",
|
||
},
|
||
"brew - Homebrew (macOS/Linux)": {
|
||
"fr": "brew - Homebrew (macOS/Linux)",
|
||
"en": "brew - Homebrew (macOS/Linux)",
|
||
},
|
||
"cargo - Build from source (Rust required)": {
|
||
"fr": "cargo - Compilation depuis les sources (Rust requis)",
|
||
"en": "cargo - Build from source (Rust required)",
|
||
},
|
||
# Prompts and messages
|
||
"Enter your password: ": {
|
||
"fr": "Entrez votre mot de passe : ",
|
||
"en": "Enter your password: ",
|
||
},
|
||
"Write your question ": {
|
||
"fr": "Écrit moi ta question ",
|
||
"en": "Write your question ",
|
||
},
|
||
"Do you want a new instance?": {
|
||
"fr": "Voulez-vous une nouvelle instance?",
|
||
"en": "Do you want a new instance?",
|
||
},
|
||
"SSH port-forwarding": {
|
||
"fr": "SSH port-forwarding",
|
||
"en": "SSH port-forwarding",
|
||
},
|
||
"Network performance request per second": {
|
||
"fr": "Performance réseau en requêtes par seconde",
|
||
"en": "Network performance request per second",
|
||
},
|
||
"Setup queue job for parallelism": {
|
||
"fr": "Configurer la file d'attente pour l'exécution parallèle",
|
||
"en": "Setup queue job for parallelism",
|
||
},
|
||
"Choose your database": {
|
||
"fr": "Choisir sa base de données",
|
||
"en": "Choose your database",
|
||
},
|
||
"Development update": {
|
||
"fr": "Mise à jour du développement",
|
||
"en": "Development update",
|
||
},
|
||
"What do you need for development?": {
|
||
"fr": "Qu'avez-vous de besoin pour développer?",
|
||
"en": "What do you need for development?",
|
||
},
|
||
"Looking for documentation?": {
|
||
"fr": "Vous cherchez de la documentation?",
|
||
"en": "Looking for documentation?",
|
||
},
|
||
"Make changes to databases!": {
|
||
"fr": "Faites des modifications sur les bases de données!",
|
||
"en": "Make changes to databases!",
|
||
},
|
||
# Database drop / erase
|
||
"Erase a database": {
|
||
"fr": "Effacer une base de données",
|
||
"en": "Erase a database",
|
||
},
|
||
"Erase a database — irreversible operation!": {
|
||
"fr": "Effacer une base de données — opération irréversible !",
|
||
"en": "Erase a database — irreversible operation!",
|
||
},
|
||
"Erase ALL databases (make db_drop_all)": {
|
||
"fr": "Effacer TOUTES les bases de données (make db_drop_all)",
|
||
"en": "Erase ALL databases (make db_drop_all)",
|
||
},
|
||
"Erase a single database": {
|
||
"fr": "Effacer une seule base de données",
|
||
"en": "Erase a single database",
|
||
},
|
||
"You are about to erase ALL databases. This cannot be undone.": {
|
||
"fr": (
|
||
"Tu es sur le point d'effacer TOUTES les bases de données."
|
||
" C'est irréversible."
|
||
),
|
||
"en": "You are about to erase ALL databases. This cannot be undone.",
|
||
},
|
||
"You are about to erase the database '{database}'. This cannot be undone.": {
|
||
"fr": (
|
||
"Tu es sur le point d'effacer la base de données « {database} »."
|
||
" C'est irréversible."
|
||
),
|
||
"en": (
|
||
"You are about to erase the database '{database}'."
|
||
" This cannot be undone."
|
||
),
|
||
},
|
||
"Type 'oui' to confirm (default: no): ": {
|
||
"fr": "Tape « oui » pour confirmer (défaut : non) : ",
|
||
"en": "Type 'oui'/'yes' to confirm (default: no): ",
|
||
},
|
||
"Database deletion cancelled.": {
|
||
"fr": "Effacement de la base de données annulé.",
|
||
"en": "Database deletion cancelled.",
|
||
},
|
||
"No database selected.": {
|
||
"fr": "Aucune base de données sélectionnée.",
|
||
"en": "No database selected.",
|
||
},
|
||
"Cannot list the databases (exit code): ": {
|
||
"fr": "Impossible de lister les bases (code de retour) : ",
|
||
"en": "Cannot list the databases (exit code): ",
|
||
},
|
||
"Is PostgreSQL running?": {
|
||
"fr": "PostgreSQL est-il démarré ?",
|
||
"en": "Is PostgreSQL running?",
|
||
},
|
||
"No database on this PostgreSQL server.": {
|
||
"fr": "Aucune base sur ce serveur PostgreSQL.",
|
||
"en": "No database on this PostgreSQL server.",
|
||
},
|
||
"Manage execution processes!": {
|
||
"fr": "Manipuler les processus d'exécution!",
|
||
"en": "Manage execution processes!",
|
||
},
|
||
"Manage ERPLibre and Odoo configuration!": {
|
||
"fr": "Manipuler la configuration ERPLibre et Odoo!",
|
||
"en": "Manage ERPLibre and Odoo configuration!",
|
||
},
|
||
"Network tools!": {
|
||
"fr": "Outil réseautique!",
|
||
"en": "Network tools!",
|
||
},
|
||
"Dependency security audit!": {
|
||
"fr": "Audit de securite des dépendances!",
|
||
"en": "Dependency security audit!",
|
||
},
|
||
"The Bash script failed with return code": {
|
||
"fr": "Le script Bash a échoué avec le code de retour",
|
||
"en": "The Bash script failed with return code",
|
||
},
|
||
"No installed environment found. Install an Odoo version first.": {
|
||
"fr": "Aucun environnement installe trouve. Installez d'abord une version d'Odoo.",
|
||
"en": "No installed environment found. Install an Odoo version first.",
|
||
},
|
||
"Choose an environment for the audit:": {
|
||
"fr": "Choisir un environnement pour l'audit :",
|
||
"en": "Choose an environment for the audit:",
|
||
},
|
||
"Select: ": {
|
||
"fr": "Sélection : ",
|
||
"en": "Select: ",
|
||
},
|
||
"Error, cannot understand value": {
|
||
"fr": "Erreur, impossible de comprendre la valeur",
|
||
"en": "Error, cannot understand value",
|
||
},
|
||
"Dependencies file not found: ": {
|
||
"fr": "Fichier de dépendances introuvable : ",
|
||
"en": "Dependencies file not found: ",
|
||
},
|
||
"Execution: ": {
|
||
"fr": "Execution : ",
|
||
"en": "Execution: ",
|
||
},
|
||
"Current": {
|
||
"fr": "Actuel",
|
||
"en": "Current",
|
||
},
|
||
"Default": {
|
||
"fr": "Défaut",
|
||
"en": "Default",
|
||
},
|
||
"Reboot TODO ...": {
|
||
"fr": "Reboot TODO ...",
|
||
"en": "Reboot TODO ...",
|
||
},
|
||
"pip-audit - Check vulnerabilities on Python environments": {
|
||
"fr": "pip-audit - Verifier les vulnérabilités sur les environnements Python",
|
||
"en": "pip-audit - Check vulnerabilities on Python environments",
|
||
},
|
||
"Will execute:": {
|
||
"fr": "Va exécuter :",
|
||
"en": "Will execute:",
|
||
},
|
||
"Choose a version:": {
|
||
"fr": "Choisir une version :",
|
||
"en": "Choose a version:",
|
||
},
|
||
"Install type:": {
|
||
"fr": "Type d'installation :",
|
||
"en": "Install type:",
|
||
},
|
||
"Standard install (without extra modules)": {
|
||
"fr": "Installation standard (sans modules extra)",
|
||
"en": "Standard install (without extra modules)",
|
||
},
|
||
"Install with extra modules (CybroOdoo - large, slow)": {
|
||
"fr": "Installation avec modules extra (CybroOdoo - gros, lent)",
|
||
"en": "Install with extra modules (CybroOdoo - large, slow)",
|
||
},
|
||
# todo.json translatable prompt_descriptions
|
||
"Test - Minimal base instance": {
|
||
"fr": "Test - Instance de base minimale",
|
||
"en": "Test - Minimal base instance",
|
||
},
|
||
"Open RobotLibre 🤖 minimal": {
|
||
"fr": "Ouvrir RobotLibre 🤖 minimal",
|
||
"en": "Open RobotLibre 🤖 minimal",
|
||
},
|
||
"Open RobotLibre 🤖 with search enabled": {
|
||
"fr": "Ouvrir RobotLibre 🤖 en activant la recherche",
|
||
"en": "Open RobotLibre 🤖 with search enabled",
|
||
},
|
||
"Open ERPLibre with TODO 🤖": {
|
||
"fr": "Ouvrir ERPLibre avec TODO 🤖",
|
||
"en": "Open ERPLibre with TODO 🤖",
|
||
},
|
||
"Update all erplibre_base on database test": {
|
||
"fr": "🔄 Mise à jour de tous les erplibre_base sur la base de données test",
|
||
"en": "🔄 Update all erplibre_base on database test",
|
||
},
|
||
"Show code status": {
|
||
"fr": "🔍 Afficher le statut du code",
|
||
"en": "🔍 Show code status",
|
||
},
|
||
"Stash all code": {
|
||
"fr": "📦 Remiser tout le code",
|
||
"en": "📦 Stash all code",
|
||
},
|
||
"Format modified code": {
|
||
"fr": "🎨 Formater le code modifié",
|
||
"en": "🎨 Format modified code",
|
||
},
|
||
# todo.py hardcoded prompt_descriptions
|
||
"Mobile - Compile and run software": {
|
||
"fr": "Mobile - Compiler et exécuter le logiciel",
|
||
"en": "Mobile - Compile and run software",
|
||
},
|
||
"Upgrade Odoo - Migration Database": {
|
||
"fr": "🚚 Mise à jour Odoo - Migration de base de données",
|
||
"en": "🚚 Upgrade Odoo - Migration Database",
|
||
},
|
||
"Upgrade Poetry - Dependency of Odoo": {
|
||
"fr": "📦 Mise à jour Poetry - Dépendances d'Odoo",
|
||
"en": "📦 Upgrade Poetry - Dependency of Odoo",
|
||
},
|
||
"Open SHELL": {
|
||
"fr": "🐚 Ouvrir le SHELL",
|
||
"en": "🐚 Open SHELL",
|
||
},
|
||
"Upgrade Module": {
|
||
"fr": "🧩 Mise à jour de module",
|
||
"en": "🧩 Upgrade Module",
|
||
},
|
||
"Debug": {
|
||
"fr": "🐛 Débogage",
|
||
"en": "🐛 Debug",
|
||
},
|
||
"Migration module coverage": {
|
||
"fr": "Couverture de migration des modules",
|
||
"en": "Migration module coverage",
|
||
},
|
||
"What change between version": {
|
||
"fr": "Quels changements entre les versions",
|
||
"en": "What change between version",
|
||
},
|
||
"OCA guidelines": {
|
||
"fr": "Directives OCA",
|
||
"en": "OCA guidelines",
|
||
},
|
||
"OCA migration Odoo 19 milestone": {
|
||
"fr": "Migration OCA Odoo 19 - Jalons",
|
||
"en": "OCA migration Odoo 19 milestone",
|
||
},
|
||
"Download database to create backup (.zip)": {
|
||
"fr": "Télécharger une base de données pour créer une sauvegarde (.zip)",
|
||
"en": "Download database to create backup (.zip)",
|
||
},
|
||
"Restore from backup (.zip)": {
|
||
"fr": "Restaurer a partir d'une sauvegarde (.zip)",
|
||
"en": "Restore from backup (.zip)",
|
||
},
|
||
"Create backup (.zip)": {
|
||
"fr": "Créer une sauvegarde (.zip)",
|
||
"en": "Create backup (.zip)",
|
||
},
|
||
"Kill Odoo process from actual port": {
|
||
"fr": "Terminer le processus Odoo du port actuel",
|
||
"en": "Kill Odoo process from actual port",
|
||
},
|
||
"Kill git daemon server process": {
|
||
"fr": "Terminer le processus du serveur git daemon",
|
||
"en": "Kill git daemon server process",
|
||
},
|
||
"Git daemon process killed.": {
|
||
"fr": "Processus git daemon terminé.",
|
||
"en": "Git daemon process killed.",
|
||
},
|
||
"Generate all configuration": {
|
||
"fr": "Générer toute la configuration",
|
||
"en": "Generate all configuration",
|
||
},
|
||
"Generate from pre-configuration": {
|
||
"fr": "Générer a partir de la pre-configuration",
|
||
"en": "Generate from pre-configuration",
|
||
},
|
||
"Generate from backup file": {
|
||
"fr": "Générer a partir d'un fichier de sauvegarde",
|
||
"en": "Generate from backup file",
|
||
},
|
||
"Generate from database": {
|
||
"fr": "Générer a partir de la base de données",
|
||
"en": "Generate from database",
|
||
},
|
||
"base": {
|
||
"fr": "base",
|
||
"en": "base",
|
||
},
|
||
"base + code_generator": {
|
||
"fr": "base + code_generator",
|
||
"en": "base + code_generator",
|
||
},
|
||
"base + image_db": {
|
||
"fr": "base + image_db",
|
||
"en": "base + image_db",
|
||
},
|
||
"all": {
|
||
"fr": "tout",
|
||
"en": "all",
|
||
},
|
||
"Debug todo.py": {
|
||
"fr": "Débogage todo.py",
|
||
"en": "Debug todo.py",
|
||
},
|
||
# Test section
|
||
"Test - Test an Odoo module": {
|
||
"fr": "🧪 Test - Tester un module Odoo",
|
||
"en": "🧪 Test - Test an Odoo module",
|
||
},
|
||
"Test an Odoo module on a temporary database!": {
|
||
"fr": "Tester un module Odoo sur une base de données temporaire!",
|
||
"en": "Test an Odoo module on a temporary database!",
|
||
},
|
||
"Test a module": {
|
||
"fr": "Tester un module",
|
||
"en": "Test a module",
|
||
},
|
||
"Test a module with code coverage": {
|
||
"fr": "Tester un module avec couverture de code",
|
||
"en": "Test a module with code coverage",
|
||
},
|
||
"ERPLibre unit tests": {
|
||
"fr": "Tests unitaires ERPLibre",
|
||
"en": "ERPLibre unit tests",
|
||
},
|
||
"Mail unit tests": {
|
||
"fr": "Tests unitaires courriel",
|
||
"en": "Mail unit tests",
|
||
},
|
||
"Analyse unit tests": {
|
||
"fr": "Tests unitaires analyse",
|
||
"en": "Analyse unit tests",
|
||
},
|
||
"Running unit tests": {
|
||
"fr": "Exécution des tests unitaires",
|
||
"en": "Running unit tests",
|
||
},
|
||
"All unit tests passed": {
|
||
"fr": "Tous les tests unitaires ont réussi",
|
||
"en": "All unit tests passed",
|
||
},
|
||
"Some unit tests failed, exit code": {
|
||
"fr": "Des tests unitaires ont échoué, code de sortie",
|
||
"en": "Some unit tests failed, exit code",
|
||
},
|
||
"Module name to test: ": {
|
||
"fr": "Nom du module à tester : ",
|
||
"en": "Module name to test: ",
|
||
},
|
||
"Temporary database name (default: test_todo_tmp): ": {
|
||
"fr": "Nom de la base de données temporaire (défaut: test_todo_tmp) : ",
|
||
"en": "Temporary database name (default: test_todo_tmp): ",
|
||
},
|
||
"Extra modules to install (comma-separated, empty for none): ": {
|
||
"fr": "Modules supplémentaires à installer (séparés par des virgules, vide pour aucun) : ",
|
||
"en": "Extra modules to install (comma-separated, empty for none): ",
|
||
},
|
||
"Log level (default: test): ": {
|
||
"fr": "Niveau de log (défaut: test) : ",
|
||
"en": "Log level (default: test): ",
|
||
},
|
||
"Creating temporary database": {
|
||
"fr": "Création de la base de données temporaire",
|
||
"en": "Creating temporary database",
|
||
},
|
||
"Installing modules": {
|
||
"fr": "Installation des modules",
|
||
"en": "Installing modules",
|
||
},
|
||
"Running tests": {
|
||
"fr": "Exécution des tests",
|
||
"en": "Running tests",
|
||
},
|
||
"Cleaning up temporary database": {
|
||
"fr": "Suppression de la base de données temporaire",
|
||
"en": "Cleaning up temporary database",
|
||
},
|
||
"Keep the temporary database? (y/N): ": {
|
||
"fr": "Conserver la base de données temporaire? (o/N, défaut : non) : ",
|
||
"en": "Keep the temporary database? (y/N, default: no): ",
|
||
},
|
||
"Database kept": {
|
||
"fr": "Base de données conservée",
|
||
"en": "Database kept",
|
||
},
|
||
"Tests completed successfully!": {
|
||
"fr": "Tests terminés avec succès!",
|
||
"en": "Tests completed successfully!",
|
||
},
|
||
"Tests failed with return code": {
|
||
"fr": "Les tests ont échoué avec le code de retour",
|
||
"en": "Tests failed with return code",
|
||
},
|
||
"Module name is required!": {
|
||
"fr": "Le nom du module est requis!",
|
||
"en": "Module name is required!",
|
||
},
|
||
# Git section
|
||
"Git - Git tools": {
|
||
"fr": "🌿 Git - Outils Git",
|
||
"en": "🌿 Git - Git tools",
|
||
},
|
||
"Git management tools!": {
|
||
"fr": "Outils de gestion Git!",
|
||
"en": "Git management tools!",
|
||
},
|
||
"Local git server": {
|
||
"fr": "Serveur git local",
|
||
"en": "Local git server",
|
||
},
|
||
"Manage local git repository server!": {
|
||
"fr": "Gérer le serveur de dépôts git local!",
|
||
"en": "Manage local git repository server!",
|
||
},
|
||
"Deploy a local git server (~/.git-server)": {
|
||
"fr": "Déployer un serveur git local (~/.git-server)",
|
||
"en": "Deploy a local git server (~/.git-server)",
|
||
},
|
||
"Deploy a production git server (/srv/git, root required)": {
|
||
"fr": "Déployer un serveur git production (/srv/git, root requis)",
|
||
"en": "Deploy a production git server (/srv/git, root required)",
|
||
},
|
||
"Starting git server deployment...": {
|
||
"fr": "Démarrage du déploiement du serveur git...",
|
||
"en": "Starting git server deployment...",
|
||
},
|
||
"Local mode (~/.git-server)": {
|
||
"fr": "Mode local (~/.git-server)",
|
||
"en": "Local mode (~/.git-server)",
|
||
},
|
||
"Production mode (/srv/git, root required)": {
|
||
"fr": "Mode production (/srv/git, root requis)",
|
||
"en": "Production mode (/srv/git, root required)",
|
||
},
|
||
"Run all (init + remote + push + serve)": {
|
||
"fr": "Tout exécuter (init + remote + push + serve)",
|
||
"en": "Run all (init + remote + push + serve)",
|
||
},
|
||
"Init - Create bare repos": {
|
||
"fr": "Init - Créer les bare repos",
|
||
"en": "Init - Create bare repos",
|
||
},
|
||
"Remote - Add local remotes": {
|
||
"fr": "Remote - Ajouter les remotes locaux",
|
||
"en": "Remote - Add local remotes",
|
||
},
|
||
"Push - Push to local server": {
|
||
"fr": "Push - Pousser vers le serveur local",
|
||
"en": "Push - Push to local server",
|
||
},
|
||
"Serve - Start git daemon": {
|
||
"fr": "Serve - Démarrer le daemon git",
|
||
"en": "Serve - Start git daemon",
|
||
},
|
||
# Git remote add
|
||
"Add a remote to a local repository": {
|
||
"fr": "Ajouter un remote vers un dépôt local",
|
||
"en": "Add a remote to a local repository",
|
||
},
|
||
"Remote name (default: localhost): ": {
|
||
"fr": "Nom du remote (défaut: localhost) : ",
|
||
"en": "Remote name (default: localhost): ",
|
||
},
|
||
"Repository address (e.g.: git://192.168.1.100/my-repo.git): ": {
|
||
"fr": "Adresse du dépôt (ex: git://192.168.1.100/mon-repo.git) : ",
|
||
"en": "Repository address (e.g.: git://192.168.1.100/my-repo.git): ",
|
||
},
|
||
"Repository address is required!": {
|
||
"fr": "L'adresse du dépôt est requise!",
|
||
"en": "Repository address is required!",
|
||
},
|
||
"Remote added successfully!": {
|
||
"fr": "Remote ajouté avec succès!",
|
||
"en": "Remote added successfully!",
|
||
},
|
||
"Error adding remote: ": {
|
||
"fr": "Erreur lors de l'ajout du remote : ",
|
||
"en": "Error adding remote: ",
|
||
},
|
||
# Git config vim
|
||
"Configure git local editor to vim": {
|
||
"fr": "Configuration git local par vim",
|
||
"en": "Configure git local editor to vim",
|
||
},
|
||
"Generate git patch to /tmp": {
|
||
"fr": "Générer une patch git dans /tmp",
|
||
"en": "Generate git patch to /tmp",
|
||
},
|
||
"Git editor configured to vim successfully!": {
|
||
"fr": "Éditeur git configuré sur vim avec succès!",
|
||
"en": "Git editor configured to vim successfully!",
|
||
},
|
||
"Error during configuration: ": {
|
||
"fr": "Erreur lors de la configuration : ",
|
||
"en": "Error during configuration: ",
|
||
},
|
||
# GPT code - Claude automation
|
||
"Add an automation with Claude in todo.py": {
|
||
"fr": "Ajouter une automatisation avec Claude dans todo.py",
|
||
"en": "Add an automation with Claude in todo.py",
|
||
},
|
||
"Description of the command to add: ": {
|
||
"fr": "Description de la commande à ajouter : ",
|
||
"en": "Description of the command to add: ",
|
||
},
|
||
"Bash command to execute: ": {
|
||
"fr": "Commande bash à exécuter : ",
|
||
"en": "Bash command to execute: ",
|
||
},
|
||
"Menu section (git/code/config/network/process): ": {
|
||
"fr": "Section du menu (git/code/config/network/process) : ",
|
||
"en": "Menu section (git/code/config/network/process): ",
|
||
},
|
||
"Automation added successfully in todo.json!": {
|
||
"fr": "Automatisation ajoutée avec succès dans todo.json!",
|
||
"en": "Automation added successfully in todo.json!",
|
||
},
|
||
"Error adding automation: ": {
|
||
"fr": "Erreur lors de l'ajout de l'automatisation : ",
|
||
"en": "Error adding automation: ",
|
||
},
|
||
# SSH Deploy section
|
||
"Deploy - Deploy ERPLibre via SSH": {
|
||
"fr": "Déploiement - Déployer ERPLibre via SSH",
|
||
"en": "Deploy - Deploy ERPLibre via SSH",
|
||
},
|
||
"SSH deployment tools!": {
|
||
"fr": "Outils de déploiement SSH!",
|
||
"en": "SSH deployment tools!",
|
||
},
|
||
"SSH - Check connection": {
|
||
"fr": "🔌 SSH - Vérifier la connexion",
|
||
"en": "🔌 SSH - Check connection",
|
||
},
|
||
"SSH - Sync files (rsync)": {
|
||
"fr": "🔄 SSH - Synchroniser les fichiers (rsync)",
|
||
"en": "🔄 SSH - Sync files (rsync)",
|
||
},
|
||
"SSH - Install ERPLibre": {
|
||
"fr": "📦 SSH - Installer ERPLibre",
|
||
"en": "📦 SSH - Install ERPLibre",
|
||
},
|
||
"SSH - Start Odoo": {
|
||
"fr": "🟢 SSH - Démarrer Odoo",
|
||
"en": "🟢 SSH - Start Odoo",
|
||
},
|
||
"SSH - Stop Odoo": {
|
||
"fr": "🔴 SSH - Arrêter Odoo",
|
||
"en": "🔴 SSH - Stop Odoo",
|
||
},
|
||
"SSH - Restart Odoo": {
|
||
"fr": "🔁 SSH - Redémarrer Odoo",
|
||
"en": "🔁 SSH - Restart Odoo",
|
||
},
|
||
"SSH - Service status": {
|
||
"fr": "📊 SSH - Statut du service",
|
||
"en": "📊 SSH - Service status",
|
||
},
|
||
"SSH - View logs": {
|
||
"fr": "📜 SSH - Voir les logs",
|
||
"en": "📜 SSH - View logs",
|
||
},
|
||
"SSH - Run make target": {
|
||
"fr": "🧰 SSH - Exécuter une cible make",
|
||
"en": "🧰 SSH - Run make target",
|
||
},
|
||
"SSH - Install systemd service": {
|
||
"fr": "🧩 SSH - Installer le service systemd",
|
||
"en": "🧩 SSH - Install systemd service",
|
||
},
|
||
"SSH - Configure nginx + SSL": {
|
||
"fr": "🔒 SSH - Configurer nginx + SSL",
|
||
"en": "🔒 SSH - Configure nginx + SSL",
|
||
},
|
||
"Remote host (user@hostname or hostname): ": {
|
||
"fr": "Hôte distant (user@hostname ou hostname) : ",
|
||
"en": "Remote host (user@hostname or hostname): ",
|
||
},
|
||
"SSH user (default: erplibre): ": {
|
||
"fr": "Utilisateur SSH (défaut: erplibre) : ",
|
||
"en": "SSH user (default: erplibre): ",
|
||
},
|
||
"SSH port (default: 22): ": {
|
||
"fr": "Port SSH (défaut: 22) : ",
|
||
"en": "SSH port (default: 22): ",
|
||
},
|
||
"SSH key path (default: ~/.ssh/id_rsa, empty for none): ": {
|
||
"fr": "Chemin de la clé SSH (défaut: ~/.ssh/id_rsa, vide pour aucune) : ",
|
||
"en": "SSH key path (default: ~/.ssh/id_rsa, empty for none): ",
|
||
},
|
||
"Remote path (default: ~/erplibre_deploy_2): ": {
|
||
"fr": "Chemin distant (défaut: ~/erplibre_deploy_2) : ",
|
||
"en": "Remote path (default: ~/erplibre_deploy_2): ",
|
||
},
|
||
"Make target to run remotely: ": {
|
||
"fr": "Cible make à exécuter à distance : ",
|
||
"en": "Make target to run remotely: ",
|
||
},
|
||
"Domain name (e.g.: example.com): ": {
|
||
"fr": "Nom de domaine (ex: example.com) : ",
|
||
"en": "Domain name (e.g.: example.com): ",
|
||
},
|
||
"Admin email for SSL certificate: ": {
|
||
"fr": "Email administrateur pour le certificat SSL : ",
|
||
"en": "Admin email for SSL certificate: ",
|
||
},
|
||
"SSH host is required!": {
|
||
"fr": "L'hôte SSH est requis!",
|
||
"en": "SSH host is required!",
|
||
},
|
||
# Language selection
|
||
"Choose language / Choisir la langue": {
|
||
"fr": "Choisir la langue / Choose language",
|
||
"en": "Choose language / Choisir la langue",
|
||
},
|
||
"French": {
|
||
"fr": "Francais",
|
||
"en": "French",
|
||
},
|
||
"English": {
|
||
"fr": "Anglais",
|
||
"en": "English",
|
||
},
|
||
"Language changed to: English": {
|
||
"fr": "Langue changée pour : Francais",
|
||
"en": "Language changed to: English",
|
||
},
|
||
"TODO execution time": {
|
||
"fr": "Temps d'exécution TODO",
|
||
"en": "TODO execution time",
|
||
},
|
||
"Keyboard interrupt": {
|
||
"fr": "Interruption clavier",
|
||
"en": "Keyboard interrupt",
|
||
},
|
||
# GPT code section
|
||
"GPT code - AI assistant tools": {
|
||
"fr": "🤖 GPT code - Outils d'assistant IA",
|
||
"en": "🤖 GPT code - AI assistant tools",
|
||
},
|
||
"AI assistant tools for development!": {
|
||
"fr": "Outils d'assistant IA pour le développement!",
|
||
"en": "AI assistant tools for development!",
|
||
},
|
||
"Configure Claude Code configurations": {
|
||
"fr": "Configurer les configurations Claude Code",
|
||
"en": "Configure Claude Code configurations",
|
||
},
|
||
"Commit - OCA/Odoo commit command": {
|
||
"fr": "Commit - Commande de commit OCA/Odoo",
|
||
"en": "Commit - OCA/Odoo commit command",
|
||
},
|
||
"Todo Add Command - Add a command to todo.py menu": {
|
||
"fr": "Todo Add Command - Ajouter une commande au menu todo.py",
|
||
"en": "Todo Add Command - Add a command to todo.py menu",
|
||
},
|
||
"Enter your full name: ": {
|
||
"fr": "Entrez votre nom complet : ",
|
||
"en": "Enter your full name: ",
|
||
},
|
||
"Enter your email: ": {
|
||
"fr": "Entrez votre courriel : ",
|
||
"en": "Enter your email: ",
|
||
},
|
||
"Deploy Claude Code commands!": {
|
||
"fr": "Déployer les commandes Claude Code!",
|
||
"en": "Deploy Claude Code commands!",
|
||
},
|
||
"Show installed custom commands": {
|
||
"fr": "Afficher les commandes personnalisées installées",
|
||
"en": "Show installed custom commands",
|
||
},
|
||
"No custom commands found in ~/.claude/commands/": {
|
||
"fr": "Aucune commande personnalisée trouvée dans ~/.claude/commands/",
|
||
"en": "No custom commands found in ~/.claude/commands/",
|
||
},
|
||
"Claude Code custom commands:": {
|
||
"fr": "Commandes personnalisées Claude Code :",
|
||
"en": "Claude Code custom commands:",
|
||
},
|
||
"File already exists: ": {
|
||
"fr": "Le fichier existe déjà : ",
|
||
"en": "File already exists: ",
|
||
},
|
||
"Do you want to overwrite the file? (y/Y): ": {
|
||
"fr": "Voulez-vous écraser le fichier? (y/Y) : ",
|
||
"en": "Do you want to overwrite the file? (y/Y): ",
|
||
},
|
||
"Nothing to do.": {
|
||
"fr": "Rien à faire.",
|
||
"en": "Nothing to do.",
|
||
},
|
||
"File created successfully: ": {
|
||
"fr": "Fichier créé avec succès : ",
|
||
"en": "File created successfully: ",
|
||
},
|
||
"Error creating file: ": {
|
||
"fr": "Erreur lors de la création du fichier : ",
|
||
"en": "Error creating file: ",
|
||
},
|
||
# NTFY section
|
||
"Deploy - Install NTFY notification server": {
|
||
"fr": "🔔 Déployer - Installer le serveur de notifications NTFY",
|
||
"en": "🔔 Deploy - Install NTFY notification server",
|
||
},
|
||
"Deploy a local NTFY push notification server (Ubuntu/Arch)": {
|
||
"fr": "Déployer un serveur local de notifications NTFY (Ubuntu/Arch)",
|
||
"en": "Deploy a local NTFY push notification server (Ubuntu/Arch)",
|
||
},
|
||
"NTFY server port (default: 8080): ": {
|
||
"fr": "Port du serveur NTFY (défaut : 8080) : ",
|
||
"en": "NTFY server port (default: 8080): ",
|
||
},
|
||
"NTFY base URL": {
|
||
"fr": "URL de base NTFY",
|
||
"en": "NTFY base URL",
|
||
},
|
||
"Installing NTFY server (requires sudo)...": {
|
||
"fr": "Installation du serveur NTFY (sudo requis)...",
|
||
"en": "Installing NTFY server (requires sudo)...",
|
||
},
|
||
"NTFY server installed and started successfully!": {
|
||
"fr": "Serveur NTFY installé et démarré avec succès!",
|
||
"en": "NTFY server installed and started successfully!",
|
||
},
|
||
"Error installing NTFY server: ": {
|
||
"fr": "Erreur lors de l'installation du serveur NTFY : ",
|
||
"en": "Error installing NTFY server: ",
|
||
},
|
||
"NTFY install script not found: ": {
|
||
"fr": "Script d'installation NTFY introuvable : ",
|
||
"en": "NTFY install script not found: ",
|
||
},
|
||
# QEMU / KVM (libvirt) VM deployment
|
||
"QEMU/KVM - Deploy an Ubuntu VM (libvirt)": {
|
||
"fr": "💻 QEMU/KVM - Déployer une VM Ubuntu (libvirt)",
|
||
"en": "💻 QEMU/KVM - Deploy an Ubuntu VM (libvirt)",
|
||
},
|
||
"Deploy a QEMU/KVM virtual machine (libvirt)!": {
|
||
"fr": "Déployer une machine virtuelle QEMU/KVM (libvirt) !",
|
||
"en": "Deploy a QEMU/KVM virtual machine (libvirt)!",
|
||
},
|
||
"QEMU deploy script not found: ": {
|
||
"fr": "Script de déploiement QEMU introuvable : ",
|
||
"en": "QEMU deploy script not found: ",
|
||
},
|
||
"Deploy a new VM": {
|
||
"fr": "Déployer une nouvelle VM",
|
||
"en": "Deploy a new VM",
|
||
},
|
||
"Preview a deployment (dry-run, no sudo)": {
|
||
"fr": "🔍 Prévisualiser un déploiement (dry-run, sans sudo)",
|
||
"en": "🔍 Preview a deployment (dry-run, no sudo)",
|
||
},
|
||
"Download a cloud image only": {
|
||
"fr": "⬇ Télécharger seulement une image cloud",
|
||
"en": "⬇ Download a cloud image only",
|
||
},
|
||
"List VMs (virsh list --all)": {
|
||
"fr": "📋 Lister les VM (virsh list --all)",
|
||
"en": "📋 List VMs (virsh list --all)",
|
||
},
|
||
"Show a VM IP address": {
|
||
"fr": "🌐 Afficher l'adresse IP d'une VM",
|
||
"en": "🌐 Show a VM IP address",
|
||
},
|
||
"List available images and specs": {
|
||
"fr": "🗂 Lister les images disponibles et leurs specs",
|
||
"en": "🗂 List available images and specs",
|
||
},
|
||
"Distribution:": {
|
||
"fr": "Distribution :",
|
||
"en": "Distribution:",
|
||
},
|
||
"Choice (number or name, default: ubuntu): ": {
|
||
"fr": "Choix (numéro ou nom, défaut : ubuntu) : ",
|
||
"en": "Choice (number or name, default: ubuntu): ",
|
||
},
|
||
"Invalid selection, using ubuntu": {
|
||
"fr": "Sélection invalide, utilisation d'ubuntu",
|
||
"en": "Invalid selection, using ubuntu",
|
||
},
|
||
"Version for": {
|
||
"fr": "Version des",
|
||
"en": "Version for",
|
||
},
|
||
"Versions for": {
|
||
"fr": "Versions des",
|
||
"en": "Versions of",
|
||
},
|
||
"Architecture:": {
|
||
"fr": "Architecture :",
|
||
"en": "Architecture:",
|
||
},
|
||
"native": {
|
||
"fr": "native",
|
||
"en": "native",
|
||
},
|
||
"IBM Z — emulated, slow on x86; Ubuntu only": {
|
||
"fr": "IBM Z — émulé, lent sur x86 ; Ubuntu uniquement",
|
||
"en": "IBM Z — emulated, slow on x86; Ubuntu only",
|
||
},
|
||
"IBM Z — emulated, slow; Ubuntu only": {
|
||
"fr": "IBM Z — émulé, lent ; Ubuntu uniquement",
|
||
"en": "IBM Z — emulated, slow; Ubuntu only",
|
||
},
|
||
"ARM 64-bit — emulated, slow": {
|
||
"fr": "ARM 64 bits — émulé, lent",
|
||
"en": "ARM 64-bit — emulated, slow",
|
||
},
|
||
"emulated, slow": {
|
||
"fr": "émulé, lent",
|
||
"en": "emulated, slow",
|
||
},
|
||
"This architecture is emulated (TCG): boot and install are"
|
||
" much slower than the native one.": {
|
||
"fr": "Cette architecture est émulée (TCG) : le boot et l'installation"
|
||
" sont bien plus lents que l'architecture native.",
|
||
"en": "This architecture is emulated (TCG): boot and install are"
|
||
" much slower than the native one.",
|
||
},
|
||
"images for this arch only exist for:": {
|
||
"fr": "images pour cette architecture disponibles seulement pour :",
|
||
"en": "images for this arch only exist for:",
|
||
},
|
||
"All supported architectures": {
|
||
"fr": "Toutes les architectures supportées",
|
||
"en": "All supported architectures",
|
||
},
|
||
"installation": {
|
||
"fr": "installation",
|
||
"en": "installation",
|
||
},
|
||
"Resources per VM (x1 = catalog minimum):": {
|
||
"fr": "Ressources par VM (x1 = minimum catalogue) :",
|
||
"en": "Resources per VM (x1 = catalog minimum):",
|
||
},
|
||
"Host:": {
|
||
"fr": "Hôte :",
|
||
"en": "Host:",
|
||
},
|
||
"free": {
|
||
"fr": "libres",
|
||
"en": "free",
|
||
},
|
||
"free RAM unknown": {
|
||
"fr": "RAM libre inconnue",
|
||
"en": "free RAM unknown",
|
||
},
|
||
"> host free RAM": {
|
||
"fr": "> RAM libre de l'hôte",
|
||
"en": "> host free RAM",
|
||
},
|
||
"> host free disk": {
|
||
"fr": "> disque libre de l'hôte",
|
||
"en": "> host free disk",
|
||
},
|
||
"free of": {
|
||
"fr": "libres sur",
|
||
"en": "free of",
|
||
},
|
||
"total RAM": {
|
||
"fr": "RAM totale",
|
||
"en": "total RAM",
|
||
},
|
||
"Choice (1-4, default 1):": {
|
||
"fr": "Choix (1-4, défaut 1) :",
|
||
"en": "Choice (1-4, default 1):",
|
||
},
|
||
"Choice (1-5, default 1):": {
|
||
"fr": "Choix (1-5, défaut 1) :",
|
||
"en": "Choice (1-5, default 1):",
|
||
},
|
||
"Custom - set vCPU, RAM and disk": {
|
||
"fr": "Personnalisé — choisir vCPU, RAM et disque",
|
||
"en": "Custom — set vCPU, RAM and disk",
|
||
},
|
||
"custom": {
|
||
"fr": "personnalisé",
|
||
"en": "custom",
|
||
},
|
||
"varies": {
|
||
"fr": "varié",
|
||
"en": "varies",
|
||
},
|
||
"vCPU per VM, blank = keep": {
|
||
"fr": "vCPU par VM, vide = garder",
|
||
"en": "vCPU per VM, blank = keep",
|
||
},
|
||
"New vCPU count, blank = keep": {
|
||
"fr": "Nouveau nombre de vCPU, vide = garder",
|
||
"en": "New vCPU count, blank = keep",
|
||
},
|
||
"Invalid vCPU count.": {
|
||
"fr": "Nombre de vCPU invalide.",
|
||
"en": "Invalid vCPU count.",
|
||
},
|
||
"More vCPU than host cores": {
|
||
"fr": "Plus de vCPU que de cœurs sur l'hôte",
|
||
"en": "More vCPU than host cores",
|
||
},
|
||
"> host cores": {
|
||
"fr": "> cœurs de l'hôte",
|
||
"en": "> host cores",
|
||
},
|
||
"Total vCPU (all running):": {
|
||
"fr": "vCPU total (toutes démarrées) :",
|
||
"en": "Total vCPU (all running):",
|
||
},
|
||
"Deploy VM(s) (one or many)": {
|
||
"fr": "🚀 Déployer une ou plusieurs VM",
|
||
"en": "🚀 Deploy VM(s) (one or many)",
|
||
},
|
||
"Deploy ERPLibre VM(s)!": {
|
||
"fr": "Déployer une ou plusieurs VM ERPLibre !",
|
||
"en": "Deploy ERPLibre VM(s)!",
|
||
},
|
||
"VM names (default = auto):": {
|
||
"fr": "Noms des VM (défaut = auto) :",
|
||
"en": "VM names (default = auto):",
|
||
},
|
||
"Rename which VMs? (numbers, comma-separated; blank = none): ": {
|
||
"fr": "Renommer quelles VM ? (numéros séparés par des virgules ; "
|
||
"vide = aucune) : ",
|
||
"en": "Rename which VMs? (numbers, comma-separated; blank = none): ",
|
||
},
|
||
"->": {
|
||
"fr": "->",
|
||
"en": "->",
|
||
},
|
||
"VMs (default = no change):": {
|
||
"fr": "VM (défaut = aucune modification) :",
|
||
"en": "VMs (default = no change):",
|
||
},
|
||
"Modify which VMs? (numbers, comma-separated; blank = none): ": {
|
||
"fr": "Modifier quelles VM ? (numéros séparés par des virgules ; "
|
||
"vide = aucune) : ",
|
||
"en": "Modify which VMs? (numbers, comma-separated; blank = none): ",
|
||
},
|
||
"new name (blank = keep):": {
|
||
"fr": "nouveau nom (vide = garder) :",
|
||
"en": "new name (blank = keep):",
|
||
},
|
||
"New disk size in G, blank = keep": {
|
||
"fr": "Nouvelle taille disque en G, vide = garder",
|
||
"en": "New disk size in G, blank = keep",
|
||
},
|
||
"New RAM in MB, blank = keep": {
|
||
"fr": "Nouvelle RAM en Mo, vide = garder",
|
||
"en": "New RAM in MB, blank = keep",
|
||
},
|
||
"Duplicate names detected; keeping as entered.": {
|
||
"fr": "Noms en double détectés ; conservés tels quels.",
|
||
"en": "Duplicate names detected; keeping as entered.",
|
||
},
|
||
"Preview (dry-run):": {
|
||
"fr": "Aperçu (dry-run) :",
|
||
"en": "Preview (dry-run):",
|
||
},
|
||
"(includes emulated architectures — some VMs are slow)": {
|
||
"fr": "(inclut des architectures émulées — certaines VM sont lentes)",
|
||
"en": "(includes emulated architectures — some VMs are slow)",
|
||
},
|
||
"install monitoring": {
|
||
"fr": "suivi d'installation",
|
||
"en": "install monitoring",
|
||
},
|
||
"Navigation telemetry (TUI)": {
|
||
"fr": "📊 Télémétrie de navigation (TUI)",
|
||
"en": "📊 Navigation telemetry (TUI)",
|
||
},
|
||
"Configuration": {
|
||
"fr": "⚙ Configuration",
|
||
"en": "⚙ Configuration",
|
||
},
|
||
"Interface": {
|
||
"fr": "Interface",
|
||
"en": "Interface",
|
||
},
|
||
"Maintenance": {
|
||
"fr": "Maintenance",
|
||
"en": "Maintenance",
|
||
},
|
||
"Language / Langue": {
|
||
"fr": "🌐 Langue / Language",
|
||
"en": "🌐 Language / Langue",
|
||
},
|
||
"QEMU deployment interface": {
|
||
"fr": "🖥 Interface de déploiement QEMU",
|
||
"en": "🖥 QEMU deployment interface",
|
||
},
|
||
"Display while deploying": {
|
||
"fr": "📜 Affichage pendant le déploiement",
|
||
"en": "📜 Display while deploying",
|
||
},
|
||
"Ask every time": {
|
||
"fr": "Demander à chaque fois",
|
||
"en": "Ask every time",
|
||
},
|
||
"TUI form": {
|
||
"fr": "Formulaire TUI",
|
||
"en": "TUI form",
|
||
},
|
||
"Classic questions (line by line)": {
|
||
"fr": "Questions classiques (ligne par ligne)",
|
||
"en": "Classic questions (line by line)",
|
||
},
|
||
"CLI output (easy to copy)": {
|
||
"fr": "Sortie CLI (facile à copier)",
|
||
"en": "CLI output (easy to copy)",
|
||
},
|
||
"TUI, collapsible blocks per VM": {
|
||
"fr": "TUI, blocs repliables par VM",
|
||
"en": "TUI, collapsible blocks per VM",
|
||
},
|
||
"Choice (number, blank = keep):": {
|
||
"fr": "Choix (numéro, vide = garder) :",
|
||
"en": "Choice (number, blank = keep):",
|
||
},
|
||
"SSH port forwarding (open Odoo in the browser)": {
|
||
"fr": "🔌 Redirection de port SSH (ouvrir Odoo dans le navigateur)",
|
||
"en": "🔌 SSH port forwarding (open Odoo in the browser)",
|
||
},
|
||
"SSH port forwarding": {
|
||
"fr": "Redirection de port SSH",
|
||
"en": "SSH port forwarding",
|
||
},
|
||
"Host (number or name):": {
|
||
"fr": "Hôte (numéro ou nom) :",
|
||
"en": "Host (number or name):",
|
||
},
|
||
"Remote port (default:": {
|
||
"fr": "Port distant (défaut :",
|
||
"en": "Remote port (default:",
|
||
},
|
||
"Local port (default:": {
|
||
"fr": "Port local (défaut :",
|
||
"en": "Local port (default:",
|
||
},
|
||
"virsh is missing: libvirt is not installed here.": {
|
||
"fr": "virsh est absent : libvirt n'est pas installé ici.",
|
||
"en": "virsh is missing: libvirt is not installed here.",
|
||
},
|
||
"Every VM command will fail until it is.": {
|
||
"fr": "Toutes les commandes VM échoueront tant que ce sera le cas.",
|
||
"en": "Every VM command will fail until it is.",
|
||
},
|
||
"Install the QEMU/libvirt tools now? (Y/n): ": {
|
||
"fr": "Installer les outils QEMU/libvirt maintenant ? "
|
||
"(O/n, défaut : oui) : ",
|
||
"en": "Install the QEMU/libvirt tools now? (Y/n, default: yes): ",
|
||
},
|
||
"libvirt is available.": {
|
||
"fr": "libvirt est disponible.",
|
||
"en": "libvirt is available.",
|
||
},
|
||
"virsh still missing; a reboot may be required.": {
|
||
"fr": "virsh toujours absent ; un redémarrage est peut-être requis.",
|
||
"en": "virsh still missing; a reboot may be required.",
|
||
},
|
||
"No SSH public key found in ~/.ssh.": {
|
||
"fr": "Aucune clé publique SSH trouvée dans ~/.ssh.",
|
||
"en": "No SSH public key found in ~/.ssh.",
|
||
},
|
||
"Without one the VMs start with no SSH access.": {
|
||
"fr": "Sans elle, les VM démarrent sans accès SSH.",
|
||
"en": "Without one the VMs start with no SSH access.",
|
||
},
|
||
"Generate one now? (Y/n): ": {
|
||
"fr": "En générer une maintenant ? (O/n, défaut : oui) : ",
|
||
"en": "Generate one now? (Y/n, default: yes): ",
|
||
},
|
||
"Checking the remote port...": {
|
||
"fr": "Vérification du port distant...",
|
||
"en": "Checking the remote port...",
|
||
},
|
||
"Nothing is listening on port": {
|
||
"fr": "Rien n'écoute sur le port",
|
||
"en": "Nothing is listening on port",
|
||
},
|
||
"of": {
|
||
"fr": "de",
|
||
"en": "of",
|
||
},
|
||
"Start the service there, or continue anyway.": {
|
||
"fr": "Démarrer le service là-bas, ou continuer quand même.",
|
||
"en": "Start the service there, or continue anyway.",
|
||
},
|
||
"Continue anyway? (y/N): ": {
|
||
"fr": "Continuer quand même ? (o/N, défaut : non) : ",
|
||
"en": "Continue anyway? (y/N, default: no): ",
|
||
},
|
||
"Could not probe the remote port; going on.": {
|
||
"fr": "Impossible de sonder le port distant ; on continue.",
|
||
"en": "Could not probe the remote port; going on.",
|
||
},
|
||
"Local port already in use:": {
|
||
"fr": "Port local déjà occupé :",
|
||
"en": "Local port already in use:",
|
||
},
|
||
"Try anyway? (y/N): ": {
|
||
"fr": "Essayer quand même ? (o/N, défaut : non) : ",
|
||
"en": "Try anyway? (y/N, default: no): ",
|
||
},
|
||
"Local port differs from the remote one.": {
|
||
"fr": "Le port local diffère du port distant.",
|
||
"en": "Local port differs from the remote one.",
|
||
},
|
||
"Odoo redirects using web.base.url; check it": {
|
||
"fr": "Odoo redirige d'après web.base.url ; vérifier qu'il",
|
||
"en": "Odoo redirects using web.base.url; check it",
|
||
},
|
||
"matches http://localhost:": {
|
||
"fr": "vaut bien http://localhost:",
|
||
"en": "matches http://localhost:",
|
||
},
|
||
"Ctrl+C closes the tunnel.": {
|
||
"fr": "Ctrl+C referme le tunnel.",
|
||
"en": "Ctrl+C closes the tunnel.",
|
||
},
|
||
"Tunnel closed.": {
|
||
"fr": "Tunnel refermé.",
|
||
"en": "Tunnel closed.",
|
||
},
|
||
"SSH configuration (~/.ssh/config, ProxyJump)": {
|
||
"fr": "🔑 Configuration SSH (~/.ssh/config, ProxyJump)",
|
||
"en": "🔑 SSH configuration (~/.ssh/config, ProxyJump)",
|
||
},
|
||
"SSH configuration for QEMU VMs": {
|
||
"fr": "Configuration SSH des VM QEMU",
|
||
"en": "SSH configuration for QEMU VMs",
|
||
},
|
||
"Where should the machines come from?": {
|
||
"fr": "D'où viennent les machines à configurer ?",
|
||
"en": "Where should the machines come from?",
|
||
},
|
||
"Local QEMU VMs (virsh)": {
|
||
"fr": "VM QEMU locales (virsh)",
|
||
"en": "Local QEMU VMs (virsh)",
|
||
},
|
||
"Hosts from ~/.ssh/config": {
|
||
"fr": "Hôtes de ~/.ssh/config",
|
||
"en": "Hosts from ~/.ssh/config",
|
||
},
|
||
"Type a host or an IP": {
|
||
"fr": "Saisir un hôte ou une IP",
|
||
"en": "Type a host or an IP",
|
||
},
|
||
"~/.ssh/config holds no host.": {
|
||
"fr": "~/.ssh/config ne contient aucun hôte.",
|
||
"en": "~/.ssh/config holds no host.",
|
||
},
|
||
"Which hosts? (numbers, comma-separated; blank = all): ": {
|
||
"fr": "Quels hôtes ? (numéros séparés par des virgules ; "
|
||
"vide = tous) : ",
|
||
"en": "Which hosts? (numbers, comma-separated; blank = all): ",
|
||
},
|
||
"Host or IP:": {
|
||
"fr": "Hôte ou IP :",
|
||
"en": "Host or IP:",
|
||
},
|
||
"User": {
|
||
"fr": "Utilisateur",
|
||
"en": "User",
|
||
},
|
||
"Name for ~/.ssh/config": {
|
||
"fr": "Nom pour ~/.ssh/config",
|
||
"en": "Name for ~/.ssh/config",
|
||
},
|
||
"Depth (1 = these machines only, default:": {
|
||
"fr": "Profondeur (1 = ces machines seulement, défaut :",
|
||
"en": "Depth (1 = these machines only, default:",
|
||
},
|
||
"Which VMs? (numbers, comma-separated; blank = all): ": {
|
||
"fr": "Quelles VM ? (numéros séparés par des virgules ; "
|
||
"vide = toutes) : ",
|
||
"en": "Which VMs? (numbers, comma-separated; blank = all): ",
|
||
},
|
||
"Depth (default:": {
|
||
"fr": "Profondeur (défaut :",
|
||
"en": "Depth (default:",
|
||
},
|
||
"entry": {
|
||
"fr": "entrée",
|
||
"en": "entry",
|
||
},
|
||
"written": {
|
||
"fr": "écrite(s)",
|
||
"en": "written",
|
||
},
|
||
"skipped": {
|
||
"fr": "ignorée(s)",
|
||
"en": "skipped",
|
||
},
|
||
"Level": {
|
||
"fr": "Niveau",
|
||
"en": "Level",
|
||
},
|
||
"machines to probe": {
|
||
"fr": "machines à sonder",
|
||
"en": "machines to probe",
|
||
},
|
||
"SSH refused the identity.": {
|
||
"fr": "SSH a refusé l'identité.",
|
||
"en": "SSH refused the identity.",
|
||
},
|
||
"Existing key:": {
|
||
"fr": "Clé existante :",
|
||
"en": "Existing key:",
|
||
},
|
||
"Deploy it on this host (ssh-copy-id)? (Y/n): ": {
|
||
"fr": "La déployer sur cet hôte (ssh-copy-id) ? "
|
||
"(O/n, défaut : oui) : ",
|
||
"en": "Deploy it on this host (ssh-copy-id)? (Y/n, default: yes): ",
|
||
},
|
||
"No SSH key in ~/.ssh.": {
|
||
"fr": "Aucune clé SSH dans ~/.ssh.",
|
||
"en": "No SSH key in ~/.ssh.",
|
||
},
|
||
"Create one and deploy it? (Y/n): ": {
|
||
"fr": "En créer une et la déployer ? (O/n, défaut : oui) : ",
|
||
"en": "Create one and deploy it? (Y/n, default: yes): ",
|
||
},
|
||
"access refused": {
|
||
"fr": "accès refusé",
|
||
"en": "access refused",
|
||
},
|
||
"timed out": {
|
||
"fr": "délai dépassé",
|
||
"en": "timed out",
|
||
},
|
||
"unreachable": {
|
||
"fr": "injoignable",
|
||
"en": "unreachable",
|
||
},
|
||
"no QEMU/libvirt here": {
|
||
"fr": "pas de QEMU/libvirt ici",
|
||
"en": "no QEMU/libvirt here",
|
||
},
|
||
"virsh present but not accessible": {
|
||
"fr": "virsh présent mais inaccessible (droits)",
|
||
"en": "virsh present but not accessible (permissions)",
|
||
},
|
||
"Add the user to the libvirt group there:": {
|
||
"fr": "Ajoutez l'utilisateur au groupe libvirt là-bas :",
|
||
"en": "Add the user to the libvirt group there:",
|
||
},
|
||
"QEMU present, no VM": {
|
||
"fr": "QEMU présent, aucune VM",
|
||
"en": "QEMU present, no VM",
|
||
},
|
||
"Create the SSH key if missing and deploy it? (Y/n): ": {
|
||
"fr": "Créer la clé SSH si absente et la déployer ? "
|
||
"(O/n, défaut : oui) : ",
|
||
"en": "Create the SSH key if missing and deploy it? "
|
||
"(Y/n, default: yes): ",
|
||
},
|
||
"Generating an ed25519 SSH key": {
|
||
"fr": "Génération d'une clé SSH ed25519",
|
||
"en": "Generating an ed25519 SSH key",
|
||
},
|
||
"Cannot generate the key": {
|
||
"fr": "Impossible de générer la clé",
|
||
"en": "Cannot generate the key",
|
||
},
|
||
"Deploying the key on": {
|
||
"fr": "Déploiement de la clé sur",
|
||
"en": "Deploying the key on",
|
||
},
|
||
"host": {
|
||
"fr": "hôte",
|
||
"en": "host",
|
||
},
|
||
"key already accepted": {
|
||
"fr": "clé déjà acceptée",
|
||
"en": "key already accepted",
|
||
},
|
||
"deployed": {
|
||
"fr": "déployée(s)",
|
||
"en": "deployed",
|
||
},
|
||
"already there": {
|
||
"fr": "déjà en place",
|
||
"en": "already there",
|
||
},
|
||
"virt-manager detected": {
|
||
"fr": "virt-manager détecté",
|
||
"en": "virt-manager detected",
|
||
},
|
||
"virt-manager: every connection already there": {
|
||
"fr": "virt-manager : toutes les connexions sont déjà là",
|
||
"en": "virt-manager: every connection already there",
|
||
},
|
||
"Add the missing connections to virt-manager? (Y/n): ": {
|
||
"fr": "Ajouter les connexions manquantes à virt-manager ? "
|
||
"(O/n, défaut : oui) : ",
|
||
"en": "Add the missing connections to virt-manager? "
|
||
"(Y/n, default: yes): ",
|
||
},
|
||
"Restart virt-manager to see the new connections": {
|
||
"fr": "Redémarrer virt-manager pour voir les nouvelles connexions",
|
||
"en": "Restart virt-manager to see the new connections",
|
||
},
|
||
"the names apply live": {
|
||
"fr": "les noms s'appliquent à chaud",
|
||
"en": "the names apply live",
|
||
},
|
||
"SSH hosts written": {
|
||
"fr": "Hôtes SSH écrits",
|
||
"en": "SSH hosts written",
|
||
},
|
||
"via": {
|
||
"fr": "via",
|
||
"en": "via",
|
||
},
|
||
"Odoo migration interface": {
|
||
"fr": "🚚 Interface de la migration Odoo",
|
||
"en": "🚚 Odoo migration interface",
|
||
},
|
||
"modules of the list have no code in the active Odoo:": {
|
||
"fr": "modules de la liste n'ont plus de code dans l'Odoo actif :",
|
||
"en": "modules of the list have no code in the active Odoo:",
|
||
},
|
||
"Odoo cannot uninstall a module whose code is gone;": {
|
||
"fr": "Odoo ne peut pas désinstaller un module dont le code a"
|
||
" disparu ;",
|
||
"en": "Odoo cannot uninstall a module whose code is gone;",
|
||
},
|
||
"one of them fails the whole uninstall command.": {
|
||
"fr": "un seul d'entre eux fait échouer toute la désinstallation.",
|
||
"en": "one of them fails the whole uninstall command.",
|
||
},
|
||
"are present and can be uninstalled:": {
|
||
"fr": "sont présents et peuvent être désinstallés :",
|
||
"en": "are present and can be uninstalled:",
|
||
},
|
||
"No module of the list is present.": {
|
||
"fr": "Aucun module de la liste n'est présent.",
|
||
"en": "No module of the list is present.",
|
||
},
|
||
"Uninstall the present ones, skip the missing": {
|
||
"fr": "Désinstaller les présents, ignorer les manquants",
|
||
"en": "Uninstall the present ones, skip the missing",
|
||
},
|
||
"Try the whole list anyway (it will fail)": {
|
||
"fr": "Tout tenter quand même (ça échouera)",
|
||
"en": "Try the whole list anyway (it will fail)",
|
||
},
|
||
"Uninstall nothing, continue": {
|
||
"fr": "Ne rien désinstaller, continuer",
|
||
"en": "Uninstall nothing, continue",
|
||
},
|
||
"Nothing uninstalled.": {
|
||
"fr": "Rien de désinstallé.",
|
||
"en": "Nothing uninstalled.",
|
||
},
|
||
"Retrying alone:": {
|
||
"fr": "Reprise seul :",
|
||
"en": "Retrying alone:",
|
||
},
|
||
"The uninstall did not take:": {
|
||
"fr": "La désinstallation n'a pas pris :",
|
||
"en": "The uninstall did not take:",
|
||
},
|
||
"Odoo exits 0 even when it removes nothing.": {
|
||
"fr": "Odoo sort en 0 même quand il ne retire rien.",
|
||
"en": "Odoo exits 0 even when it removes nothing.",
|
||
},
|
||
"Could not verify the uninstall.": {
|
||
"fr": "Impossible de vérifier la désinstallation.",
|
||
"en": "Could not verify the uninstall.",
|
||
},
|
||
"Check the COW views that drifted": {
|
||
"fr": "Vérifier les vues COW en retard sur leur vue module",
|
||
"en": "Check the COW views that drifted",
|
||
},
|
||
"Tool not found": {
|
||
"fr": "Outil introuvable",
|
||
"en": "Tool not found",
|
||
},
|
||
"To reset one of them onto its module view:": {
|
||
"fr": "Pour réinitialiser l'une d'elles sur sa vue module :",
|
||
"en": "To reset one of them onto its module view:",
|
||
},
|
||
"Read the diff first: a copy can hold a customisation.": {
|
||
"fr": "Lire le diff d'abord : une copie peut porter une"
|
||
" personnalisation.",
|
||
"en": "Read the diff first: a copy can hold a customisation.",
|
||
},
|
||
"Migration statistics (read-only)": {
|
||
"fr": "📊 Statistiques de la migration (lecture seule)",
|
||
"en": "📊 Migration statistics (read-only)",
|
||
},
|
||
"Choice (0-3, default 1): ": {
|
||
"fr": "Choix (0-3, défaut 1) : ",
|
||
"en": "Choice (0-3, default 1): ",
|
||
},
|
||
"Migration statistics": {
|
||
"fr": "Statistiques de la migration",
|
||
"en": "Migration statistics",
|
||
},
|
||
"elapsed": {
|
||
"fr": "écoulé",
|
||
"en": "elapsed",
|
||
},
|
||
"Level reached": {
|
||
"fr": "Niveau atteint",
|
||
"en": "Level reached",
|
||
},
|
||
"Modules": {
|
||
"fr": "Modules",
|
||
"en": "Modules",
|
||
},
|
||
"modules": {
|
||
"fr": "modules",
|
||
"en": "modules",
|
||
},
|
||
"At the start": {
|
||
"fr": "Au départ",
|
||
"en": "At the start",
|
||
},
|
||
"Removed in total": {
|
||
"fr": "Supprimés au total",
|
||
"en": "Removed in total",
|
||
},
|
||
"Reported missing": {
|
||
"fr": "Signalés manquants",
|
||
"en": "Reported missing",
|
||
},
|
||
"Duplicated": {
|
||
"fr": "En double",
|
||
"en": "Duplicated",
|
||
},
|
||
"Migration fixes": {
|
||
"fr": "Correctifs de migration",
|
||
"en": "Migration fixes",
|
||
},
|
||
"COW views": {
|
||
"fr": "Vues COW",
|
||
"en": "COW views",
|
||
},
|
||
"views": {
|
||
"fr": "vues",
|
||
"en": "views",
|
||
},
|
||
"no snapshot": {
|
||
"fr": "aucun instantané",
|
||
"en": "no snapshot",
|
||
},
|
||
"Journal": {
|
||
"fr": "Journal",
|
||
"en": "Journal",
|
||
},
|
||
"commands": {
|
||
"fr": "commandes",
|
||
"en": "commands",
|
||
},
|
||
"recorded decisions": {
|
||
"fr": "décisions annotées",
|
||
"en": "recorded decisions",
|
||
},
|
||
"Removed modules, with their reason": {
|
||
"fr": "Modules supprimés, avec leur justification",
|
||
"en": "Removed modules, with their reason",
|
||
},
|
||
"Removed modules, comma-separated (copy)": {
|
||
"fr": "Modules supprimés, séparés par des virgules (à copier)",
|
||
"en": "Removed modules, comma-separated (copy)",
|
||
},
|
||
"COW views: snapshots and differences": {
|
||
"fr": "Vues COW : instantanés et différences",
|
||
"en": "COW views: snapshots and differences",
|
||
},
|
||
"Recorded decisions (journal)": {
|
||
"fr": "Décisions annotées (journal)",
|
||
"en": "Recorded decisions (journal)",
|
||
},
|
||
"Executed commands (last 30)": {
|
||
"fr": "Commandes exécutées (30 dernières)",
|
||
"en": "Executed commands (last 30)",
|
||
},
|
||
"nothing recorded": {
|
||
"fr": "rien d'annoté",
|
||
"en": "nothing recorded",
|
||
},
|
||
"Need two snapshots to diff.": {
|
||
"fr": "Il faut deux instantanés pour comparer.",
|
||
"en": "Need two snapshots to diff.",
|
||
},
|
||
"Diff which two? (e.g. 1,2 — blank to skip)": {
|
||
"fr": "Comparer lesquels ? (ex. 1,2 — vide pour passer)",
|
||
"en": "Diff which two? (e.g. 1,2 — blank to skip)",
|
||
},
|
||
"No migration in progress to resume.": {
|
||
"fr": "Aucune migration en cours à reprendre.",
|
||
"en": "No migration in progress to resume.",
|
||
},
|
||
"Quit without doing anything": {
|
||
"fr": "Quitter sans rien faire",
|
||
"en": "Quit without doing anything",
|
||
},
|
||
"Version bumps": {
|
||
"fr": "Montées de version",
|
||
"en": "Version bumps",
|
||
},
|
||
"Step": {
|
||
"fr": "Étape",
|
||
"en": "Step",
|
||
},
|
||
"Detail": {
|
||
"fr": "Détail",
|
||
"en": "Detail",
|
||
},
|
||
"Enter on a step or a version = replay from there": {
|
||
"fr": "Entrée sur une étape ou une version = rejouer depuis là",
|
||
"en": "Enter on a step or a version = replay from there",
|
||
},
|
||
"New migration": {
|
||
"fr": "Nouvelle migration",
|
||
"en": "New migration",
|
||
},
|
||
"Keep the zip only": {
|
||
"fr": "Garder seulement le zip",
|
||
"en": "Keep the zip only",
|
||
},
|
||
"Reset all preferences": {
|
||
"fr": "🧹 Réinitialiser toutes les préférences",
|
||
"en": "🧹 Reset all preferences",
|
||
},
|
||
"Preferences reset": {
|
||
"fr": "Préférences réinitialisées",
|
||
"en": "Preferences reset",
|
||
},
|
||
"Interface:": {
|
||
"fr": "Interface :",
|
||
"en": "Interface:",
|
||
},
|
||
"(change the default in TODO > Configuration)": {
|
||
"fr": "(changer le défaut dans TODO > Configuration)",
|
||
"en": "(change the default in TODO > Configuration)",
|
||
},
|
||
"Loading (VM list, branches)...": {
|
||
"fr": "Chargement (liste des VM, branches)...",
|
||
"en": "Loading (VM list, branches)...",
|
||
},
|
||
"Architecture": {
|
||
"fr": "Architecture",
|
||
"en": "Architecture",
|
||
},
|
||
"Resources per VM": {
|
||
"fr": "Ressources par VM",
|
||
"en": "Resources per VM",
|
||
},
|
||
"Install ERPLibre": {
|
||
"fr": "Installer ERPLibre",
|
||
"en": "Install ERPLibre",
|
||
},
|
||
"Production (/opt, confined)": {
|
||
"fr": "Production (/opt, confiné)",
|
||
"en": "Production (/opt, confined)",
|
||
},
|
||
"Monitoring dashboard": {
|
||
"fr": "Tableau de bord de suivi",
|
||
"en": "Monitoring dashboard",
|
||
},
|
||
"Add each VM to ~/.ssh/config": {
|
||
"fr": "Ajouter chaque VM à ~/.ssh/config",
|
||
"en": "Add each VM to ~/.ssh/config",
|
||
},
|
||
"Parallelism": {
|
||
"fr": "Parallélisme",
|
||
"en": "Parallelism",
|
||
},
|
||
"Name": {
|
||
"fr": "Nom",
|
||
"en": "Name",
|
||
},
|
||
"Distro": {
|
||
"fr": "Distro",
|
||
"en": "Distro",
|
||
},
|
||
"Version": {
|
||
"fr": "Version",
|
||
"en": "Version",
|
||
},
|
||
"Arch": {
|
||
"fr": "Archi",
|
||
"en": "Arch",
|
||
},
|
||
"vCPU": {
|
||
"fr": "vCPU",
|
||
"en": "vCPU",
|
||
},
|
||
"RAM (MB)": {
|
||
"fr": "RAM (Mo)",
|
||
"en": "RAM (MB)",
|
||
},
|
||
"cloud-init still running after 20 min - install starts anyway"
|
||
" (it waits for cloud-init first)": {
|
||
"fr": "cloud-init tourne encore apres 20 min - l'installation demarre"
|
||
" quand meme (elle attend d'abord cloud-init)",
|
||
"en": "cloud-init still running after 20 min - install starts anyway"
|
||
" (it waits for cloud-init first)",
|
||
},
|
||
"Waiting for cloud-init to finish (up to 15 min)": {
|
||
"fr": "Attente de la fin de cloud-init (jusqu'a 15 min)",
|
||
"en": "Waiting for cloud-init to finish (up to 15 min)",
|
||
},
|
||
"cloud-init:": {
|
||
"fr": "cloud-init :",
|
||
"en": "cloud-init:",
|
||
},
|
||
"WARNING libvirt unreachable: the IP will not be refreshed"
|
||
" (libvirt group? re-login required)": {
|
||
"fr": "ATTENTION libvirt injoignable : l'IP ne sera pas rafraichie"
|
||
" (groupe libvirt ? reconnexion necessaire)",
|
||
"en": "WARNING libvirt unreachable: the IP will not be refreshed"
|
||
" (libvirt group? re-login required)",
|
||
},
|
||
"DHCP lease moved:": {
|
||
"fr": "bail DHCP deplace :",
|
||
"en": "DHCP lease moved:",
|
||
},
|
||
"An install is still running:": {
|
||
"fr": "Une installation est encore en cours :",
|
||
"en": "An install is still running:",
|
||
},
|
||
"VM(s) in progress": {
|
||
"fr": "VM en cours",
|
||
"en": "VM(s) in progress",
|
||
},
|
||
"Last activity:": {
|
||
"fr": "Dernière activité il y a :",
|
||
"en": "Last activity:",
|
||
},
|
||
"Reopen that monitoring": {
|
||
"fr": "Rouvrir ce suivi",
|
||
"en": "Reopen that monitoring",
|
||
},
|
||
"Deploy anyway (new run)": {
|
||
"fr": "Déployer quand même (nouveau run)",
|
||
"en": "Deploy anyway (new run)",
|
||
},
|
||
"Choice (number, blank = reopen): ": {
|
||
"fr": "Choix (numéro, vide = rouvrir) : ",
|
||
"en": "Choice (number, blank = reopen): ",
|
||
},
|
||
"Python interpreter:": {
|
||
"fr": "Interpreteur Python :",
|
||
"en": "Python interpreter:",
|
||
},
|
||
"mise (precompiled, faster)": {
|
||
"fr": "mise (precompile, plus rapide)",
|
||
"en": "mise (precompiled, faster)",
|
||
},
|
||
"pyenv (compiles from source)": {
|
||
"fr": "pyenv (compile depuis les sources)",
|
||
"en": "pyenv (compiles from source)",
|
||
},
|
||
"Choice (number, blank = mise): ": {
|
||
"fr": "Choix (numero, vide = mise) : ",
|
||
"en": "Choice (number, blank = mise): ",
|
||
},
|
||
"mise has no binary for:": {
|
||
"fr": "mise ne publie pas de binaire pour :",
|
||
"en": "mise has no binary for:",
|
||
},
|
||
"those VMs use pyenv": {
|
||
"fr": "ces VM utiliseront pyenv",
|
||
"en": "those VMs use pyenv",
|
||
},
|
||
"Installing mise (precompiled Python)": {
|
||
"fr": "Installation de mise (Python precompile)",
|
||
"en": "Installing mise (precompiled Python)",
|
||
},
|
||
"VM type:": {
|
||
"fr": "Type de VM :",
|
||
"en": "VM type:",
|
||
},
|
||
"Server (no graphical interface)": {
|
||
"fr": "Serveur (sans interface graphique)",
|
||
"en": "Server (no graphical interface)",
|
||
},
|
||
"Graphical (server + GNOME desktop)": {
|
||
"fr": "Graphique (serveur + bureau GNOME)",
|
||
"en": "Graphical (server + GNOME desktop)",
|
||
},
|
||
"server": {
|
||
"fr": "serveur",
|
||
"en": "server",
|
||
},
|
||
"Graphical (server + desktop):": {
|
||
"fr": "Graphique (serveur + bureau) :",
|
||
"en": "Graphical (server + desktop):",
|
||
},
|
||
"Installing the desktop (long):": {
|
||
"fr": "Installation du bureau (long) :",
|
||
"en": "Installing the desktop (long):",
|
||
},
|
||
"Choice (number, blank = server): ": {
|
||
"fr": "Choix (numero, vide = serveur) : ",
|
||
"en": "Choice (number, blank = server): ",
|
||
},
|
||
"Installing the GNOME desktop (long)": {
|
||
"fr": "Installation du bureau GNOME (long)",
|
||
"en": "Installing the GNOME desktop (long)",
|
||
},
|
||
"openSUSE mirror:": {
|
||
"fr": "miroir openSUSE :",
|
||
"en": "openSUSE mirror:",
|
||
},
|
||
"Remote desktop:": {
|
||
"fr": "Bureau distant :",
|
||
"en": "Remote desktop:",
|
||
},
|
||
"One run per install": {
|
||
"fr": "une execution par installation",
|
||
"en": "One run per install",
|
||
},
|
||
"limit to host cores": {
|
||
"fr": "limiter au nombre de coeurs de l'hote",
|
||
"en": "limit to host cores",
|
||
},
|
||
"free value…": {
|
||
"fr": "valeur libre…",
|
||
"en": "free value…",
|
||
},
|
||
"Disk (e.g. 250G, 1.5T)": {
|
||
"fr": "Disque (ex. 250G, 1,5T)",
|
||
"en": "Disk (e.g. 250G, 1.5T)",
|
||
},
|
||
"all archs": {
|
||
"fr": "toutes",
|
||
"en": "all",
|
||
},
|
||
"Tick what to deploy": {
|
||
"fr": "Cocher ce qu'on veut déployer",
|
||
"en": "Tick what to deploy",
|
||
},
|
||
"F7 main versions · F6 all": {
|
||
"fr": "F7 versions principales · F6 tout",
|
||
"en": "F7 main versions · F6 all",
|
||
},
|
||
"exists - skipped": {
|
||
"fr": "existe — ignorée",
|
||
"en": "exists - skipped",
|
||
},
|
||
"orphan disk - will FAIL": {
|
||
"fr": "disque orphelin — ÉCHOUERA",
|
||
"en": "orphan disk - will FAIL",
|
||
},
|
||
"press F5 again to confirm": {
|
||
"fr": "F5 à nouveau pour confirmer",
|
||
"en": "press F5 again to confirm",
|
||
},
|
||
"Deploy": {
|
||
"fr": "Déployer",
|
||
"en": "Deploy",
|
||
},
|
||
"Edit VM": {
|
||
"fr": "Éditer la VM",
|
||
"en": "Edit VM",
|
||
},
|
||
"Server": {
|
||
"fr": "Serveur",
|
||
"en": "Server",
|
||
},
|
||
"VM type (default):": {
|
||
"fr": "Type de VM (défaut) :",
|
||
"en": "VM type (default):",
|
||
},
|
||
"These values are the default for every VM;": {
|
||
"fr": "Ces valeurs sont le défaut de chaque VM ;",
|
||
"en": "These values are the default for every VM;",
|
||
},
|
||
"adjust any of them per VM on the right.": {
|
||
"fr": "ajustez-les VM par VM dans la vue de droite.",
|
||
"en": "adjust any of them per VM on the right.",
|
||
},
|
||
"Application store:": {
|
||
"fr": "Magasin d'applications :",
|
||
"en": "Application store:",
|
||
},
|
||
"Application store (graphical Ubuntu VMs):": {
|
||
"fr": "Magasin d'applications (VM Ubuntu graphiques) :",
|
||
"en": "Application store (graphical Ubuntu VMs):",
|
||
},
|
||
"deb only (epiphany-browser)": {
|
||
"fr": "deb uniquement (epiphany-browser)",
|
||
"en": "deb only (epiphany-browser)",
|
||
},
|
||
"Flatpak tooling, no Flathub": {
|
||
"fr": "outillage Flatpak, sans Flathub",
|
||
"en": "Flatpak tooling, no Flathub",
|
||
},
|
||
"snap (Ubuntu default, Firefox)": {
|
||
"fr": "snap (défaut Ubuntu, Firefox)",
|
||
"en": "snap (Ubuntu default, Firefox)",
|
||
},
|
||
"snap needs the store; slow under emulation.": {
|
||
"fr": "snap exige le store ; lent sous émulation.",
|
||
"en": "snap needs the store; slow under emulation.",
|
||
},
|
||
"No graphical VM on a snap-based distro.": {
|
||
"fr": "Aucune VM graphique sur une distribution à snap.",
|
||
"en": "No graphical VM on a snap-based distro.",
|
||
},
|
||
"Resources — applied to ALL VMs": {
|
||
"fr": "Ressources — appliquées à TOUTES les VM",
|
||
"en": "Resources — applied to ALL VMs",
|
||
},
|
||
"The profile and these fields change EVERY VM.": {
|
||
"fr": "Le profil et ces champs changent TOUTES les VM.",
|
||
"en": "The profile and these fields change EVERY VM.",
|
||
},
|
||
"A VM edited on the right (marked) keeps its own.": {
|
||
"fr": "Une VM modifiée à droite (marquée ✎) garde les siennes.",
|
||
"en": "A VM edited on the right (marked) keeps its own.",
|
||
},
|
||
"Rename the VM": {
|
||
"fr": "Renommer la VM",
|
||
"en": "Rename the VM",
|
||
},
|
||
"Rename": {
|
||
"fr": "Renommer",
|
||
"en": "Rename",
|
||
},
|
||
"Empty = back to the automatic name:": {
|
||
"fr": "Vide = revenir au nom automatique :",
|
||
"en": "Empty = back to the automatic name:",
|
||
},
|
||
"Invalid name: letters, digits, hyphens.": {
|
||
"fr": "Nom invalide : lettres, chiffres et traits d'union.",
|
||
"en": "Invalid name: letters, digits, hyphens.",
|
||
},
|
||
"default; a VM may differ, see its line": {
|
||
"fr": "défaut ; une VM peut s'en écarter, voir sa ligne",
|
||
"en": "default; a VM may differ, see its line",
|
||
},
|
||
"varies, see each line": {
|
||
"fr": "varie, voir chaque ligne",
|
||
"en": "varies, see each line",
|
||
},
|
||
"From your workstation:": {
|
||
"fr": "Depuis votre poste :",
|
||
"en": "From your workstation:",
|
||
},
|
||
"then point your client at": {
|
||
"fr": "puis pointez votre client sur",
|
||
"en": "then point your client at",
|
||
},
|
||
"Remote desktop tunnel (VNC/RDP through SSH)": {
|
||
"fr": "🖥 Tunnel bureau distant (VNC/RDP par SSH)",
|
||
"en": "🖥 Remote desktop tunnel (VNC/RDP through SSH)",
|
||
},
|
||
"Remote desktop tunnel": {
|
||
"fr": "Tunnel vers le bureau distant",
|
||
"en": "Remote desktop tunnel",
|
||
},
|
||
"Which VM?": {"fr": "Quelle VM ?", "en": "Which VM?"},
|
||
"No IP for this VM; is it running?": {
|
||
"fr": "Pas d'IP pour cette VM ; tourne-t-elle ?",
|
||
"en": "No IP for this VM; is it running?",
|
||
},
|
||
"Run this on YOUR workstation:": {
|
||
"fr": "À lancer sur VOTRE poste :",
|
||
"en": "Run this on YOUR workstation:",
|
||
},
|
||
"Graphical console (virt-viewer, built-in tunnel)": {
|
||
"fr": "Console graphique (virt-viewer, tunnel intégré)",
|
||
"en": "Graphical console (virt-viewer, built-in tunnel)",
|
||
},
|
||
"virt-viewer is missing here; installing it.": {
|
||
"fr": "virt-viewer manque ici ; installation.",
|
||
"en": "virt-viewer is missing here; installing it.",
|
||
},
|
||
"no known package manager here.": {
|
||
"fr": "aucun gestionnaire de paquets connu ici.",
|
||
"en": "no known package manager here.",
|
||
},
|
||
"virt-viewer still missing after the install.": {
|
||
"fr": "virt-viewer manque toujours après l'installation.",
|
||
"en": "virt-viewer still missing after the install.",
|
||
},
|
||
"Opening": {"fr": "Ouverture", "en": "Opening"},
|
||
"Window opening on your display": {
|
||
"fr": "Fenêtre en ouverture sur votre affichage",
|
||
"en": "Window opening on your display",
|
||
},
|
||
"Log:": {"fr": "Journal :", "en": "Log:"},
|
||
"No display here; run this on YOUR workstation:": {
|
||
"fr": "Aucun affichage ici ; à lancer sur VOTRE poste :",
|
||
"en": "No display here; run this on YOUR workstation:",
|
||
},
|
||
"~/.ssh/config written anyway (install)": {
|
||
"fr": "entrée ~/.ssh/config écrite quand même : l'installation passe par le rebond",
|
||
"en": "~/.ssh/config written anyway: the install needs the jump",
|
||
},
|
||
"Still on the distribution kernel:": {
|
||
"fr": "Encore sur le noyau de la distribution :",
|
||
"en": "Still on the distribution kernel:",
|
||
},
|
||
"Reboot the host: no bridge, no NAT until then.": {
|
||
"fr": "Redémarrer l'hôte : ni pont ni NAT avant cela.",
|
||
"en": "Reboot the host: no bridge, no NAT until then.",
|
||
},
|
||
"A ~/.ssh/config alias works there too.": {
|
||
"fr": "Un alias de ~/.ssh/config y fonctionne aussi.",
|
||
"en": "A ~/.ssh/config alias works there too.",
|
||
},
|
||
"It builds its own tunnel; no ssh -L to keep open.": {
|
||
"fr": "Il monte son propre tunnel ; aucun ssh -L à tenir ouvert.",
|
||
"en": "It builds its own tunnel; no ssh -L to keep open.",
|
||
},
|
||
"Missing? Install virt-viewer:": {
|
||
"fr": "Absent ? Installez virt-viewer :",
|
||
"en": "Missing? Install virt-viewer:",
|
||
},
|
||
"repo transfer into the app": {
|
||
"fr": "transfert des dépôts dans l'application",
|
||
"en": "repo transfer into the app",
|
||
},
|
||
"graphical session started": {
|
||
"fr": "session graphique démarrée",
|
||
"en": "graphical session started",
|
||
},
|
||
"graphical session not started; reboot the VM": {
|
||
"fr": "session graphique non démarrée ; redémarrer la VM",
|
||
"en": "graphical session not started; reboot the VM",
|
||
},
|
||
"Hypervisor console (QEMU screen, no guest server)": {
|
||
"fr": "Console de l'hyperviseur (écran QEMU, rien dans l'invitée)",
|
||
"en": "Hypervisor console (QEMU screen, no guest server)",
|
||
},
|
||
"then point your VNC client at": {
|
||
"fr": "puis pointez votre client VNC sur",
|
||
"en": "then point your VNC client at",
|
||
},
|
||
"Target is the hypervisor": {
|
||
"fr": "La cible est l'hyperviseur",
|
||
"en": "Target is the hypervisor",
|
||
},
|
||
"not the VM: the socket is QEMU-side.": {
|
||
"fr": "et non la VM : le socket est du côté de QEMU.",
|
||
"en": "not the VM: the socket is QEMU-side.",
|
||
},
|
||
"This hypervisor is Proxmox VE: it has no libvirt.": {
|
||
"fr": "Cet hyperviseur est un Proxmox VE : il n'a pas de libvirt.",
|
||
"en": "This hypervisor is Proxmox VE: it has no libvirt.",
|
||
},
|
||
"Its screen is served by a ticket, not by a VNC port.": {
|
||
"fr": "Son écran est servi par un ticket, pas par un port VNC.",
|
||
"en": "Its screen is served by a ticket, not by a VNC port.",
|
||
},
|
||
"Two ways in:": {
|
||
"fr": "Deux chemins :",
|
||
"en": "Two ways in:",
|
||
},
|
||
"the serial console, VMID from the Proxmox menu:": {
|
||
"fr": "la console série, le VMID venant du menu Proxmox :",
|
||
"en": "the serial console, VMID from the Proxmox menu:",
|
||
},
|
||
"the web interface, through a tunnel:": {
|
||
"fr": "l'interface web, par un tunnel :",
|
||
"en": "the web interface, through a tunnel:",
|
||
},
|
||
"TODO > Execute > Deploy > Proxmox VE does the first.": {
|
||
"fr": "TODO > Execute > Deploy > Proxmox VE fait le premier.",
|
||
"en": "TODO > Execute > Deploy > Proxmox VE does the first.",
|
||
},
|
||
"This VM exposes no VNC port.": {
|
||
"fr": "Cette VM n'expose aucun port VNC.",
|
||
"en": "This VM exposes no VNC port.",
|
||
},
|
||
"Its display is likely spice with listen=none:": {
|
||
"fr": "Son affichage est probablement spice avec listen=none :",
|
||
"en": "Its display is likely spice with listen=none:",
|
||
},
|
||
"To open it on the loopback (VM restart required):": {
|
||
"fr": "Pour l'ouvrir sur la boucle locale (redémarrage de la VM"
|
||
" requis) :",
|
||
"en": "To open it on the loopback (VM restart required):",
|
||
},
|
||
"New VMs get this by default; see deploy_qemu.": {
|
||
"fr": "Les VM neuves l'ont par défaut ; voir deploy_qemu.",
|
||
"en": "New VMs get this by default; see deploy_qemu.",
|
||
},
|
||
"No ProxyJump for this host in ~/.ssh/config.": {
|
||
"fr": "Aucun ProxyJump pour cet hôte dans ~/.ssh/config.",
|
||
"en": "No ProxyJump for this host in ~/.ssh/config.",
|
||
},
|
||
"Cannot tell which machine runs its QEMU.": {
|
||
"fr": "Impossible de savoir quelle machine fait tourner son QEMU.",
|
||
"en": "Cannot tell which machine runs its QEMU.",
|
||
},
|
||
"(through the ProxyJump already in ~/.ssh/config)": {
|
||
"fr": "(par le ProxyJump déjà dans ~/.ssh/config)",
|
||
"en": "(through the ProxyJump already in ~/.ssh/config)",
|
||
},
|
||
"(the hypervisor only relays; -J puts the VM last)": {
|
||
"fr": "(l'hyperviseur ne fait que relayer ; -J met la VM en dernier)",
|
||
"en": "(the hypervisor only relays; -J puts the VM last)",
|
||
},
|
||
"Choice": {"fr": "Choix", "en": "Choice"},
|
||
"failed steps": {"fr": "étapes en échec", "en": "failed steps"},
|
||
"Failed steps": {"fr": "Étapes en échec", "en": "Failed steps"},
|
||
"Hard signals": {"fr": "Signaux durs", "en": "Hard signals"},
|
||
"Grouped by shape": {"fr": "Regroupé par forme", "en": "Grouped by shape"},
|
||
"line": {"fr": "ligne", "en": "line"},
|
||
"free space": {"fr": "libre", "en": "free"},
|
||
"silent": {"fr": "silence", "en": "silent"},
|
||
"needs the ERPLibre install, skipped:": {
|
||
"fr": "exige l'installation ERPLibre, écarté :",
|
||
"en": "needs the ERPLibre install, skipped:",
|
||
},
|
||
"Forgejo (git forge)": {
|
||
"fr": "Forgejo (forge git)",
|
||
"en": "Forgejo (git forge)",
|
||
},
|
||
"self-hosted git forge on :3000, SQLite": {
|
||
"fr": "forge git auto-hébergée sur :3000, SQLite",
|
||
"en": "self-hosted git forge on :3000, SQLite",
|
||
},
|
||
"no project yet, second try on the warm caches": {
|
||
"fr": "pas de projet encore ; seconde tentative sur les caches chauds",
|
||
"en": "no project yet, second try on the warm caches",
|
||
},
|
||
"already there, download skipped": {
|
||
"fr": "déjà présent, téléchargement évité",
|
||
"en": "already there, download skipped",
|
||
},
|
||
"inotify watches raised for the IDE": {
|
||
"fr": "watches inotify relevées pour l'IDE",
|
||
"en": "inotify watches raised for the IDE",
|
||
},
|
||
"closing what survived the first open:": {
|
||
"fr": "fermeture de ce qui a survécu à la première ouverture :",
|
||
"en": "closing what survived the first open:",
|
||
},
|
||
"Gradle daemon killed: out of memory": {
|
||
"fr": "démon Gradle tué : mémoire épuisée",
|
||
"en": "Gradle daemon killed: out of memory",
|
||
},
|
||
"out of memory": {"fr": "mémoire épuisée", "en": "out of memory"},
|
||
"Gradle heap too small": {
|
||
"fr": "tas Gradle trop petit",
|
||
"en": "Gradle heap too small",
|
||
},
|
||
"too many asset files for one APK (ZIP limit: 65535 entries)": {
|
||
"fr": "trop de fichiers d'assets pour un APK (limite ZIP : 65535"
|
||
" entrées)",
|
||
"en": "too many asset files for one APK (ZIP limit: 65535 entries)",
|
||
},
|
||
"4 GB of swap added for the build": {
|
||
"fr": "4 Go de swap ajoutés pour la compilation",
|
||
"en": "4 GB of swap added for the build",
|
||
},
|
||
"no swap could be added; build may run short": {
|
||
"fr": "swap impossible à ajouter ; la compilation peut manquer de mémoire",
|
||
"en": "no swap could be added; build may run short",
|
||
},
|
||
"memory:": {"fr": "mémoire :", "en": "memory:"},
|
||
"manifest repos not bundled (ZIP entry limit)": {
|
||
"fr": "dépôts du manifeste non empaquetés (limite d'entrées ZIP)",
|
||
"en": "manifest repos not bundled (ZIP entry limit)",
|
||
},
|
||
"MB RAM,": {"fr": "Mo de RAM,", "en": "MB RAM,"},
|
||
"MB swap, kernel OOM kills:": {
|
||
"fr": "Mo de swap, tués par le noyau (OOM) :",
|
||
"en": "MB swap, kernel OOM kills:",
|
||
},
|
||
"Tick the Android emulator tool when deploying.": {
|
||
"fr": "Cochez l'outil Émulateur Android au déploiement.",
|
||
"en": "Tick the Android emulator tool when deploying.",
|
||
},
|
||
"Cannot reach this VM.": {
|
||
"fr": "VM injoignable.",
|
||
"en": "Cannot reach this VM.",
|
||
},
|
||
"No Android SDK in this VM: no emulator binary.": {
|
||
"fr": "Pas de SDK Android dans cette VM : aucun binaire emulator.",
|
||
"en": "No Android SDK in this VM: no emulator binary.",
|
||
},
|
||
"No AVD named erplibre in this VM.": {
|
||
"fr": "Aucun AVD nommé erplibre dans cette VM.",
|
||
"en": "No AVD named erplibre in this VM.",
|
||
},
|
||
"It did not start; the VM log says:": {
|
||
"fr": "Il n'a pas démarré ; le journal de la VM dit :",
|
||
"en": "It did not start; the VM log says:",
|
||
},
|
||
"No ~/.ssh/config entry; see SSH configuration.": {
|
||
"fr": "Aucune entrée ~/.ssh/config ; voir Configuration SSH.",
|
||
"en": "No ~/.ssh/config entry; see SSH configuration.",
|
||
},
|
||
"Not in an SSH session: check the host address.": {
|
||
"fr": "Hors session SSH : vérifiez l'adresse de l'hôte.",
|
||
"en": "Not in an SSH session: check the host address.",
|
||
},
|
||
"The tunnel stays open as long as that ssh runs.": {
|
||
"fr": "Le tunnel reste ouvert tant que ce ssh tourne.",
|
||
"en": "The tunnel stays open as long as that ssh runs.",
|
||
},
|
||
"No VM defined.": {"fr": "Aucune VM définie.", "en": "No VM defined."},
|
||
"No host in ~/.ssh/config and no local VM.": {
|
||
"fr": "Aucun hôte dans ~/.ssh/config et aucune VM locale.",
|
||
"en": "No host in ~/.ssh/config and no local VM.",
|
||
},
|
||
"local VM": {"fr": "VM locale", "en": "local VM"},
|
||
"Remote desktop kind:": {
|
||
"fr": "Type de bureau distant :",
|
||
"en": "Remote desktop kind:",
|
||
},
|
||
"already defined, not counted": {
|
||
"fr": "déjà définie(s), non comptée(s)",
|
||
"en": "already defined, not counted",
|
||
},
|
||
"RAM: 2048 or 8G": {"fr": "RAM : 2048 ou 8G", "en": "RAM: 2048 or 8G"},
|
||
"Diagnostic dump": {"fr": "Diagnostic", "en": "Diagnostic dump"},
|
||
"State written to": {"fr": "État écrit dans", "en": "State written to"},
|
||
"Reset VM": {
|
||
"fr": "Réinit. VM",
|
||
"en": "Reset VM",
|
||
},
|
||
"Preview": {
|
||
"fr": "Aperçu",
|
||
"en": "Preview",
|
||
},
|
||
"All": {
|
||
"fr": "Tout",
|
||
"en": "All",
|
||
},
|
||
"Main versions": {
|
||
"fr": "Versions principales",
|
||
"en": "Main versions",
|
||
},
|
||
"None": {
|
||
"fr": "Rien",
|
||
"en": "None",
|
||
},
|
||
"Cancel": {
|
||
"fr": "Annuler",
|
||
"en": "Cancel",
|
||
},
|
||
"Apply": {
|
||
"fr": "Appliquer",
|
||
"en": "Apply",
|
||
},
|
||
"Close": {
|
||
"fr": "Fermer",
|
||
"en": "Close",
|
||
},
|
||
"Copy log": {
|
||
"fr": "Copier le log",
|
||
"en": "Copy log",
|
||
},
|
||
"Copy all logs": {
|
||
"fr": "Copier tous les logs",
|
||
"en": "Copy all logs",
|
||
},
|
||
"all logs": {
|
||
"fr": "tous les logs",
|
||
"en": "all logs",
|
||
},
|
||
"c copy log · C copy all · q quit": {
|
||
"fr": "c copier le log · C copier tout · q quitter",
|
||
"en": "c copy log · C copy all · q quit",
|
||
},
|
||
"Clipboard": {
|
||
"fr": "Presse-papiers",
|
||
"en": "Clipboard",
|
||
},
|
||
"chars": {
|
||
"fr": "car.",
|
||
"en": "chars",
|
||
},
|
||
"tail only, log was truncated": {
|
||
"fr": "fin seulement, log tronqué",
|
||
"en": "tail only, log was truncated",
|
||
},
|
||
"Needs an OSC 52 capable terminal.": {
|
||
"fr": "Nécessite un terminal compatible OSC 52.",
|
||
"en": "Needs an OSC 52 capable terminal.",
|
||
},
|
||
"Nothing to copy.": {
|
||
"fr": "Rien à copier.",
|
||
"en": "Nothing to copy.",
|
||
},
|
||
"TODO navigation telemetry": {
|
||
"fr": "TODO — télémétrie de navigation",
|
||
"en": "TODO navigation telemetry",
|
||
},
|
||
"navigations": {
|
||
"fr": "navigations",
|
||
"en": "navigations",
|
||
},
|
||
"menus": {
|
||
"fr": "menus",
|
||
"en": "menus",
|
||
},
|
||
"Telemetry reset.": {
|
||
"fr": "Télémétrie réinitialisée.",
|
||
"en": "Telemetry reset.",
|
||
},
|
||
"tree from code": {
|
||
"fr": "arbre issu du code",
|
||
"en": "tree from code",
|
||
},
|
||
"visited paths only": {
|
||
"fr": "chemins visités seulement",
|
||
"en": "visited paths only",
|
||
},
|
||
"Enter = run, F3 = view": {
|
||
"fr": "Entrée = exécuter, F3 = vue",
|
||
"en": "Enter = run, F3 = view",
|
||
},
|
||
"Enter = run, F3/F4 = views": {
|
||
"fr": "Entrée = exécuter, F3/F4 = vues",
|
||
"en": "Enter = run, F3/F4 = views",
|
||
},
|
||
"view": {
|
||
"fr": "vue",
|
||
"en": "view",
|
||
},
|
||
"avg": {
|
||
"fr": "moy",
|
||
"en": "avg",
|
||
},
|
||
"Last install:": {
|
||
"fr": "Dernière install :",
|
||
"en": "Last install:",
|
||
},
|
||
"No command found.": {
|
||
"fr": "Aucune commande trouvée.",
|
||
"en": "No command found.",
|
||
},
|
||
"Back to telemetry (r) or quit (Enter)? ": {
|
||
"fr": "Revenir à la télémétrie (r) ou quitter (Entrée) ? ",
|
||
"en": "Back to telemetry (r) or quit (Enter)? ",
|
||
},
|
||
"F2 system · F3/F4 views · Enter run": {
|
||
"fr": "F2 système · F3/F4 vues · Entrée exécute",
|
||
"en": "F2 system · F3/F4 views · Enter run",
|
||
},
|
||
"State": {"fr": "État", "en": "State"},
|
||
"uptime": {"fr": "actif depuis", "en": "uptime"},
|
||
"load": {"fr": "charge", "en": "load"},
|
||
"cores": {"fr": "cœurs", "en": "cores"},
|
||
"Memory": {"fr": "Mémoire", "en": "Memory"},
|
||
"Disk": {"fr": "Disque", "en": "Disk"},
|
||
"Network": {"fr": "Réseau", "en": "Network"},
|
||
"Battery": {"fr": "Batterie", "en": "Battery"},
|
||
"Temperature": {"fr": "Température", "en": "Temperature"},
|
||
"lm-sensors absent — press i to install": {
|
||
"fr": "lm-sensors absent — appuyez sur i pour installer",
|
||
"en": "lm-sensors absent — press i to install",
|
||
},
|
||
"Sensors already available.": {
|
||
"fr": "Capteurs déjà disponibles.",
|
||
"en": "Sensors already available.",
|
||
},
|
||
"Sensors now available.": {
|
||
"fr": "Capteurs désormais disponibles.",
|
||
"en": "Sensors now available.",
|
||
},
|
||
"Still no temperature (reboot/modprobe may be needed).": {
|
||
"fr": "Toujours pas de température (redémarrage/modprobe requis ?).",
|
||
"en": "Still no temperature (reboot/modprobe may be needed).",
|
||
},
|
||
"Unknown package manager for lm-sensors.": {
|
||
"fr": "Gestionnaire de paquets inconnu pour lm-sensors.",
|
||
"en": "Unknown package manager for lm-sensors.",
|
||
},
|
||
"Proposed install command:": {
|
||
"fr": "Commande d'installation proposée :",
|
||
"en": "Proposed install command:",
|
||
},
|
||
"Install lm-sensors now? (y/N): ": {
|
||
"fr": "Installer lm-sensors maintenant ? (o/N) : ",
|
||
"en": "Install lm-sensors now? (y/N): ",
|
||
},
|
||
"Command failed: ": {
|
||
"fr": "Échec de la commande : ",
|
||
"en": "Command failed: ",
|
||
},
|
||
"Textual is required for this screen.": {
|
||
"fr": "Textual est nécessaire pour cet écran.",
|
||
"en": "Textual is required for this screen.",
|
||
},
|
||
"Install it now? (Y/n): ": {
|
||
"fr": "L'installer maintenant ? (O/n, défaut : oui) : ",
|
||
"en": "Install it now? (Y/n, default: yes): ",
|
||
},
|
||
"Textual is installed.": {
|
||
"fr": "Textual est installé.",
|
||
"en": "Textual is installed.",
|
||
},
|
||
"Installation finished but textual is still missing.": {
|
||
"fr": "Installation terminée mais textual reste introuvable.",
|
||
"en": "Installation finished but textual is still missing.",
|
||
},
|
||
"pip exited with": {
|
||
"fr": "pip a retourné",
|
||
"en": "pip exited with",
|
||
},
|
||
"Your distribution may package it as python3-textual.": {
|
||
"fr": "Votre distribution le fournit peut-être en python3-textual.",
|
||
"en": "Your distribution may package it as python3-textual.",
|
||
},
|
||
"Resize a VM disk": {
|
||
"fr": "📐 Redimensionner le disque d'une VM",
|
||
"en": "📐 Resize a VM disk",
|
||
},
|
||
"VM name to resize: ": {
|
||
"fr": "Nom de la VM à redimensionner : ",
|
||
"en": "VM name to resize: ",
|
||
},
|
||
"VM not found.": {
|
||
"fr": "VM introuvable.",
|
||
"en": "VM not found.",
|
||
},
|
||
"Main disk not found for this VM.": {
|
||
"fr": "Disque principal introuvable pour cette VM.",
|
||
"en": "Main disk not found for this VM.",
|
||
},
|
||
"Current disk:": {
|
||
"fr": "Disque actuel :",
|
||
"en": "Current disk:",
|
||
},
|
||
"Current virtual size:": {
|
||
"fr": "Taille virtuelle actuelle :",
|
||
"en": "Current virtual size:",
|
||
},
|
||
"VM state:": {
|
||
"fr": "État de la VM :",
|
||
"en": "VM state:",
|
||
},
|
||
"Could not read current disk size; aborting.": {
|
||
"fr": "Impossible de lire la taille actuelle du disque ; abandon.",
|
||
"en": "Could not read current disk size; aborting.",
|
||
},
|
||
"Host free space:": {
|
||
"fr": "Espace libre hôte :",
|
||
"en": "Host free space:",
|
||
},
|
||
"max sustainable total (before host full):": {
|
||
"fr": "max soutenable au total (avant hôte plein) :",
|
||
"en": "max sustainable total (before host full):",
|
||
},
|
||
"Beyond host capacity by ~%.1f G — overcommit.": {
|
||
"fr": "Dépasse la capacité de l'hôte de ~%.1f G — surallocation.",
|
||
"en": "Beyond host capacity by ~%.1f G — overcommit.",
|
||
},
|
||
"The qcow2 is thin: fine until the VM fills it, then the "
|
||
"host disk runs out. Max sustainable: ~%.1f G.": {
|
||
"fr": "Le qcow2 est creux : OK tant que la VM ne remplit pas, sinon "
|
||
"l'hôte tombe à court. Max soutenable : ~%.1f G.",
|
||
"en": "The qcow2 is thin: fine until the VM fills it, then the "
|
||
"host disk runs out. Max sustainable: ~%.1f G.",
|
||
},
|
||
"Safe shrink needs libguestfs (virt-resize).": {
|
||
"fr": "La réduction sûre nécessite libguestfs (virt-resize).",
|
||
"en": "Safe shrink needs libguestfs (virt-resize).",
|
||
},
|
||
"Install libguestfs-tools now? (y/N): ": {
|
||
"fr": "Installer libguestfs-tools maintenant ? (o/N) : ",
|
||
"en": "Install libguestfs-tools now? (y/N): ",
|
||
},
|
||
"Shrink aborted; disk left intact.": {
|
||
"fr": "Réduction annulée ; disque laissé intact.",
|
||
"en": "Shrink aborted; disk left intact.",
|
||
},
|
||
"Could not detect the partition to shrink; aborting.": {
|
||
"fr": "Partition à réduire introuvable ; abandon.",
|
||
"en": "Could not detect the partition to shrink; aborting.",
|
||
},
|
||
"Missing tools for safe shrink:": {
|
||
"fr": "Outils manquants pour la réduction sûre :",
|
||
"en": "Missing tools for safe shrink:",
|
||
},
|
||
"Backing up the disk before shrinking…": {
|
||
"fr": "Sauvegarde du disque avant réduction…",
|
||
"en": "Backing up the disk before shrinking…",
|
||
},
|
||
"Back up the disk before shrinking? (Y/n): ": {
|
||
"fr": "Sauvegarder le disque avant réduction ? (O/n, défaut : oui) : ",
|
||
"en": "Back up the disk before shrinking? (Y/n, default: yes): ",
|
||
},
|
||
"No backup: a failure could leave the disk broken.": {
|
||
"fr": "Sans sauvegarde : un échec pourrait rendre le disque inutilisable.",
|
||
"en": "No backup: a failure could leave the disk broken.",
|
||
},
|
||
"Disk safely shrunk.": {
|
||
"fr": "Disque réduit en toute sécurité.",
|
||
"en": "Disk safely shrunk.",
|
||
},
|
||
"No backup to restore; run fsck on the disk before use.": {
|
||
"fr": "Pas de sauvegarde à restaurer ; lancez fsck avant utilisation.",
|
||
"en": "No backup to restore; run fsck on the disk before use.",
|
||
},
|
||
"A disk backup was kept:": {
|
||
"fr": "Une sauvegarde du disque a été conservée :",
|
||
"en": "A disk backup was kept:",
|
||
},
|
||
"Delete this backup now? (y/N): ": {
|
||
"fr": "Effacer cette sauvegarde maintenant ? (o/N) : ",
|
||
"en": "Delete this backup now? (y/N): ",
|
||
},
|
||
"Backup deleted.": {
|
||
"fr": "Sauvegarde effacée.",
|
||
"en": "Backup deleted.",
|
||
},
|
||
"Backup kept (delete later via Clean up QEMU).": {
|
||
"fr": "Sauvegarde conservée (à effacer plus tard via Nettoyer QEMU).",
|
||
"en": "Backup kept (delete later via Clean up QEMU).",
|
||
},
|
||
"disk backup (resize)": {
|
||
"fr": "sauvegarde de disque (redim.)",
|
||
"en": "disk backup (resize)",
|
||
},
|
||
"Backup failed; aborting.": {
|
||
"fr": "Échec de la sauvegarde ; abandon.",
|
||
"en": "Backup failed; aborting.",
|
||
},
|
||
"Could not attach the disk (nbd); aborting.": {
|
||
"fr": "Impossible d'attacher le disque (nbd) ; abandon.",
|
||
"en": "Could not attach the disk (nbd); aborting.",
|
||
},
|
||
"Only ext2/3/4 can be shrunk safely; aborting.": {
|
||
"fr": "Seul ext2/3/4 peut être réduit en sécurité ; abandon.",
|
||
"en": "Only ext2/3/4 can be shrunk safely; aborting.",
|
||
},
|
||
"Target size too small for this layout; aborting.": {
|
||
"fr": "Taille cible trop petite pour cette disposition ; abandon.",
|
||
"en": "Target size too small for this layout; aborting.",
|
||
},
|
||
"Not enough used-space margin to shrink; aborting.": {
|
||
"fr": "Espace utilisé trop proche de la cible ; abandon.",
|
||
"en": "Not enough used-space margin to shrink; aborting.",
|
||
},
|
||
"Shrinking guest ext filesystem": {
|
||
"fr": "Réduction du système de fichiers ext invité",
|
||
"en": "Shrinking guest ext filesystem",
|
||
},
|
||
"resize2fs failed; reverting.": {
|
||
"fr": "resize2fs a échoué ; restauration.",
|
||
"en": "resize2fs failed; reverting.",
|
||
},
|
||
"Internal size check failed; reverting.": {
|
||
"fr": "Contrôle de taille interne échoué ; restauration.",
|
||
"en": "Internal size check failed; reverting.",
|
||
},
|
||
"Shrinking the partition…": {
|
||
"fr": "Réduction de la partition…",
|
||
"en": "Shrinking the partition…",
|
||
},
|
||
"Partition rewrite failed; reverting.": {
|
||
"fr": "Réécriture de la partition échouée ; restauration.",
|
||
"en": "Partition rewrite failed; reverting.",
|
||
},
|
||
"Shrinking the qcow2 container…": {
|
||
"fr": "Réduction du conteneur qcow2…",
|
||
"en": "Shrinking the qcow2 container…",
|
||
},
|
||
"Container shrink failed; reverting.": {
|
||
"fr": "Réduction du conteneur échouée ; restauration.",
|
||
"en": "Container shrink failed; reverting.",
|
||
},
|
||
"Restoring the original disk from backup…": {
|
||
"fr": "Restauration du disque d'origine depuis la sauvegarde…",
|
||
"en": "Restoring the original disk from backup…",
|
||
},
|
||
"Shrinking guest FS + partition via virt-resize": {
|
||
"fr": "Réduction du FS invité + partition via virt-resize",
|
||
"en": "Shrinking guest FS + partition via virt-resize",
|
||
},
|
||
"virt-resize failed; original disk left intact.": {
|
||
"fr": "virt-resize a échoué ; disque d'origine laissé intact.",
|
||
"en": "virt-resize failed; original disk left intact.",
|
||
},
|
||
"Disk safely shrunk. Backup kept at:": {
|
||
"fr": "Disque réduit en toute sécurité. Sauvegarde conservée :",
|
||
"en": "Disk safely shrunk. Backup kept at:",
|
||
},
|
||
"click to expand": {
|
||
"fr": "cliquer pour déplier",
|
||
"en": "click to expand",
|
||
},
|
||
"No error detected.": {
|
||
"fr": "Aucune erreur détectée.",
|
||
"en": "No error detected.",
|
||
},
|
||
"Test a VM (open Odoo in a CLI browser)": {
|
||
"fr": "🧪 Tester une VM (ouvrir Odoo dans un navigateur CLI)",
|
||
"en": "🧪 Test a VM (open Odoo in a CLI browser)",
|
||
},
|
||
"Reopen install monitoring (last run / history)": {
|
||
"fr": "📈 Rouvrir le suivi d'installation (dernier run / historique)",
|
||
"en": "📈 Reopen install monitoring (last run / history)",
|
||
},
|
||
"No install run found in history.": {
|
||
"fr": "Aucun run d'installation dans l'historique.",
|
||
"en": "No install run found in history.",
|
||
},
|
||
"Install runs (most recent first):": {
|
||
"fr": "Runs d'installation (du plus récent) :",
|
||
"en": "Install runs (most recent first):",
|
||
},
|
||
"Choice (number, blank = last): ": {
|
||
"fr": "Choix (numéro, vide = le dernier) : ",
|
||
"en": "Choice (number, blank = last): ",
|
||
},
|
||
"Invalid selection.": {
|
||
"fr": "Sélection invalide.",
|
||
"en": "Invalid selection.",
|
||
},
|
||
"Resolving VM IP...": {
|
||
"fr": "Résolution de l'IP de la VM…",
|
||
"en": "Resolving VM IP...",
|
||
},
|
||
"No IP found for this VM.": {
|
||
"fr": "Aucune IP trouvée pour cette VM.",
|
||
"en": "No IP found for this VM.",
|
||
},
|
||
"No CLI browser installed. Which to install?": {
|
||
"fr": "Aucun navigateur CLI installé. Lequel installer ?",
|
||
"en": "No CLI browser installed. Which to install?",
|
||
},
|
||
"Which browser to install?": {
|
||
"fr": "Quel navigateur installer ?",
|
||
"en": "Which browser to install?",
|
||
},
|
||
"Install another browser": {
|
||
"fr": "Installer un autre navigateur",
|
||
"en": "Install another browser",
|
||
},
|
||
"Choice (number, blank = w3m): ": {
|
||
"fr": "Choix (numéro, vide = w3m) : ",
|
||
"en": "Choice (number, blank = w3m): ",
|
||
},
|
||
"Unknown package manager; install it manually.": {
|
||
"fr": "Gestionnaire de paquets inconnu ; installez-le manuellement.",
|
||
"en": "Unknown package manager; install it manually.",
|
||
},
|
||
"Install now? (y/N): ": {
|
||
"fr": "Installer maintenant ? (o/N) : ",
|
||
"en": "Install now? (y/N): ",
|
||
},
|
||
"Which browser to view the page?": {
|
||
"fr": "Quel navigateur pour voir la page ?",
|
||
"en": "Which browser to view the page?",
|
||
},
|
||
"Choice (number, blank = first): ": {
|
||
"fr": "Choix (numéro, vide = le premier) : ",
|
||
"en": "Choice (number, blank = first): ",
|
||
},
|
||
"Page may not have loaded: Odoo not started on :8069, "
|
||
"or network/firewall.": {
|
||
"fr": "La page ne s'est peut-être pas affichée : Odoo n'est pas "
|
||
"démarré sur :8069, ou réseau/pare-feu.",
|
||
"en": "Page may not have loaded: Odoo not started on :8069, "
|
||
"or network/firewall.",
|
||
},
|
||
"errors": {
|
||
"fr": "erreurs",
|
||
"en": "errors",
|
||
},
|
||
"warnings": {
|
||
"fr": "avertissements",
|
||
"en": "warnings",
|
||
},
|
||
"Esc to close": {
|
||
"fr": "Échap pour fermer",
|
||
"en": "Esc to close",
|
||
},
|
||
"No running VM to pause.": {
|
||
"fr": "Aucune VM en cours à mettre en pause.",
|
||
"en": "No running VM to pause.",
|
||
},
|
||
"No paused VM to resume.": {
|
||
"fr": "Aucune VM en pause à reprendre.",
|
||
"en": "No paused VM to resume.",
|
||
},
|
||
"resumed": {
|
||
"fr": "reprise(s)",
|
||
"en": "resumed",
|
||
},
|
||
"SSH grow failed; trying the guest agent.": {
|
||
"fr": "Échec SSH ; tentative via l'agent invité.",
|
||
"en": "SSH grow failed; trying the guest agent.",
|
||
},
|
||
"No IP; trying the guest agent (no network).": {
|
||
"fr": "Pas d'IP ; tentative via l'agent invité (sans réseau).",
|
||
"en": "No IP; trying the guest agent (no network).",
|
||
},
|
||
"Guest filesystem grown via guest agent.": {
|
||
"fr": "FS invité étendu via l'agent invité.",
|
||
"en": "Guest filesystem grown via guest agent.",
|
||
},
|
||
"Guest agent grow failed; falling back to console.": {
|
||
"fr": "Échec de l'agent invité ; repli sur la console.",
|
||
"en": "Guest agent grow failed; falling back to console.",
|
||
},
|
||
"Guest agent unavailable; falling back to serial console.": {
|
||
"fr": "Agent invité indisponible ; repli sur la console série.",
|
||
"en": "Guest agent unavailable; falling back to serial console.",
|
||
},
|
||
"Running via guest agent (no network)…": {
|
||
"fr": "Exécution via l'agent invité (sans réseau)…",
|
||
"en": "Running via guest agent (no network)…",
|
||
},
|
||
"SSH grow failed; falling back to serial console.": {
|
||
"fr": "Échec de l'extension via SSH ; repli sur la console série.",
|
||
"en": "SSH grow failed; falling back to serial console.",
|
||
},
|
||
"No IP; falling back to serial console.": {
|
||
"fr": "Pas d'IP ; repli sur la console série.",
|
||
"en": "No IP; falling back to serial console.",
|
||
},
|
||
"Serial console fallback. Log in, then paste:": {
|
||
"fr": "Repli console série. Connectez-vous, puis collez :",
|
||
"en": "Serial console fallback. Log in, then paste:",
|
||
},
|
||
"Open the serial console now? (y/N): ": {
|
||
"fr": "Ouvrir la console série maintenant ? (o/N) : ",
|
||
"en": "Open the serial console now? (y/N): ",
|
||
},
|
||
"The VM must be off. Shut it down and retry? (y/N): ": {
|
||
"fr": "La VM doit être éteinte. L'éteindre et réessayer ? (o/N) : ",
|
||
"en": "The VM must be off. Shut it down and retry? (y/N): ",
|
||
},
|
||
"VM is still not off; aborting.": {
|
||
"fr": "La VM n'est toujours pas éteinte ; abandon.",
|
||
"en": "VM is still not off; aborting.",
|
||
},
|
||
"Waiting for the VM to shut down...": {
|
||
"fr": "Attente de l'arrêt de la VM…",
|
||
"en": "Waiting for the VM to shut down...",
|
||
},
|
||
"timeout": {
|
||
"fr": "délai max",
|
||
"en": "timeout",
|
||
},
|
||
"shutting down": {
|
||
"fr": "arrêt en cours",
|
||
"en": "shutting down",
|
||
},
|
||
"remaining": {
|
||
"fr": "restantes",
|
||
"en": "remaining",
|
||
},
|
||
"VM is off.": {
|
||
"fr": "VM éteinte.",
|
||
"en": "VM is off.",
|
||
},
|
||
"The VM was shut down for the resize.": {
|
||
"fr": "La VM a été éteinte pour le redimensionnement.",
|
||
"en": "The VM was shut down for the resize.",
|
||
},
|
||
"Start the VM now? (y/N): ": {
|
||
"fr": "Démarrer la VM maintenant ? (o/N) : ",
|
||
"en": "Start the VM now? (y/N): ",
|
||
},
|
||
"Graceful shutdown timed out. Force off (destroy)? (y/N): ": {
|
||
"fr": "Arrêt gracieux trop long. Forcer l'arrêt (destroy) ? (o/N) : ",
|
||
"en": "Graceful shutdown timed out. Force off (destroy)? (y/N): ",
|
||
},
|
||
"Show advanced info (vCPU, RAM, disk)? (y/N): ": {
|
||
"fr": "Afficher les infos avancées (vCPU, RAM, disque) ? (o/N) : ",
|
||
"en": "Show advanced info (vCPU, RAM, disk)? (y/N): ",
|
||
},
|
||
"What do you want to do?": {
|
||
"fr": "Que voulez-vous faire ?",
|
||
"en": "What do you want to do?",
|
||
},
|
||
"Advanced info (vCPU, RAM, disk)": {
|
||
"fr": "Infos avancées (vCPU, RAM, disque)",
|
||
"en": "Advanced info (vCPU, RAM, disk)",
|
||
},
|
||
"Change the state of one or more VMs": {
|
||
"fr": "Changer l'état d'une ou plusieurs VM",
|
||
"en": "Change the state of one or more VMs",
|
||
},
|
||
"Enter": {
|
||
"fr": "Entrée",
|
||
"en": "Enter",
|
||
},
|
||
"Nothing": {
|
||
"fr": "Rien",
|
||
"en": "Nothing",
|
||
},
|
||
"Choice: ": {
|
||
"fr": "Choix : ",
|
||
"en": "Choice: ",
|
||
},
|
||
"Available VMs:": {
|
||
"fr": "VM disponibles :",
|
||
"en": "Available VMs:",
|
||
},
|
||
"VMs to change (comma-separated): ": {
|
||
"fr": "VM à modifier (séparées par des virgules) : ",
|
||
"en": "VMs to change (comma-separated): ",
|
||
},
|
||
"Adjust hardware only (vCPU, RAM, 3D)": {
|
||
"fr": "Régler le matériel seulement (vCPU, RAM, 3D)",
|
||
"en": "Adjust hardware only (vCPU, RAM, 3D)",
|
||
},
|
||
"Adjust hardware before starting? (y/N): ": {
|
||
"fr": "Régler le matériel avant de démarrer ? (o/N) : ",
|
||
"en": "Adjust hardware before starting? (y/N): ",
|
||
},
|
||
"Not shut off, hardware left untouched:": {
|
||
"fr": "Pas éteintes, matériel inchangé :",
|
||
"en": "Not shut off, hardware left untouched:",
|
||
},
|
||
"Host GPU:": {
|
||
"fr": "GPU de l'hôte :",
|
||
"en": "Host GPU:",
|
||
},
|
||
"none (software rendering)": {
|
||
"fr": "aucun (rendu logiciel)",
|
||
"en": "none (software rendering)",
|
||
},
|
||
"software rendering": {
|
||
"fr": "rendu logiciel",
|
||
"en": "software rendering",
|
||
},
|
||
"Unreadable VM definition.": {
|
||
"fr": "Définition de VM illisible.",
|
||
"en": "Unreadable VM definition.",
|
||
},
|
||
"Nothing to change.": {
|
||
"fr": "Rien à changer.",
|
||
"en": "Nothing to change.",
|
||
},
|
||
"Changes:": {
|
||
"fr": "Changements :",
|
||
"en": "Changes:",
|
||
},
|
||
"Apply these changes? (y/N): ": {
|
||
"fr": "Appliquer ces changements ? (o/N) : ",
|
||
"en": "Apply these changes? (y/N): ",
|
||
},
|
||
"Autostart": {
|
||
"fr": "Démarrage automatique",
|
||
"en": "Autostart",
|
||
},
|
||
"VM hardware": {
|
||
"fr": "Matériel des VM",
|
||
"en": "VM hardware",
|
||
},
|
||
"3D": {
|
||
"fr": "3D",
|
||
"en": "3D",
|
||
},
|
||
"3D acceleration (host GPU)": {
|
||
"fr": "Accélération 3D (GPU de l'hôte)",
|
||
"en": "3D acceleration (host GPU)",
|
||
},
|
||
"Render node": {
|
||
"fr": "Nœud de rendu",
|
||
"en": "Render node",
|
||
},
|
||
"VM ready - taking its measurements": {
|
||
"fr": "VM prête — relevé en cours",
|
||
"en": "VM ready - taking its measurements",
|
||
},
|
||
"VM start-up": {
|
||
"fr": "Mise en route de la VM",
|
||
"en": "VM start-up",
|
||
},
|
||
"system:": {
|
||
"fr": "système :",
|
||
"en": "system:",
|
||
},
|
||
"kernel:": {
|
||
"fr": "noyau :",
|
||
"en": "kernel: ",
|
||
},
|
||
"address:": {
|
||
"fr": "adresse :",
|
||
"en": "address:",
|
||
},
|
||
"disk:": {
|
||
"fr": "disque :",
|
||
"en": "disk: ",
|
||
},
|
||
"uptime:": {
|
||
"fr": "actif :",
|
||
"en": "uptime: ",
|
||
},
|
||
"Watch the VMs start (no install)": {
|
||
"fr": "Suivre le démarrage des VM (sans installation)",
|
||
"en": "Watch the VMs start (no install)",
|
||
},
|
||
"Proxmox VE - Deploy a VM on a remote host": {
|
||
# 🗄 et non 💻 : l'entrée d'à côté déploie sur CETTE machine, celle-ci
|
||
# sur une baie ailleurs. L'icône est ce qui distingue les deux d'un
|
||
# coup d'œil dans le menu.
|
||
"fr": "🗄 Proxmox VE - Déployer une VM sur un hôte distant",
|
||
"en": "🗄 Proxmox VE - Deploy a VM on a remote host",
|
||
},
|
||
"Deploy a virtual machine on Proxmox VE!": {
|
||
"fr": "Déployer une machine virtuelle sur Proxmox VE !",
|
||
"en": "Deploy a virtual machine on Proxmox VE!",
|
||
},
|
||
"Which Proxmox host?": {
|
||
"fr": "Quel hôte Proxmox ?",
|
||
"en": "Which Proxmox host?",
|
||
},
|
||
"From the local QEMU VMs": {
|
||
"fr": "Depuis les VM QEMU locales",
|
||
"en": "From the local QEMU VMs",
|
||
},
|
||
"Type an address": {
|
||
"fr": "Saisir une adresse",
|
||
"en": "Type an address",
|
||
},
|
||
"Keep": {
|
||
"fr": "Garder",
|
||
"en": "Keep",
|
||
},
|
||
"Address (user@host, default user root): ": {
|
||
"fr": "Adresse (utilisateur@hôte, utilisateur root par défaut) : ",
|
||
"en": "Address (user@host, default user root): ",
|
||
},
|
||
"SSH jump host (blank = none): ": {
|
||
"fr": "Rebond SSH (vide = aucun) : ",
|
||
"en": "SSH jump host (blank = none): ",
|
||
},
|
||
"Local VMs:": {
|
||
"fr": "VM locales :",
|
||
"en": "Local VMs:",
|
||
},
|
||
"No IP for this VM: is it running?": {
|
||
"fr": "Pas d'IP pour cette VM : est-elle démarrée ?",
|
||
"en": "No IP for this VM: is it running?",
|
||
},
|
||
"Checking": {
|
||
"fr": "Vérification de",
|
||
"en": "Checking",
|
||
},
|
||
"Not a Proxmox host (or unreachable):": {
|
||
"fr": "Ce n'est pas un hôte Proxmox (ou il est injoignable) :",
|
||
"en": "Not a Proxmox host (or unreachable):",
|
||
},
|
||
"Reachable, but Proxmox VE is not there:": {
|
||
"fr": "Machine joignable, mais Proxmox VE n'y est pas :",
|
||
"en": "Reachable, but Proxmox VE is not there:",
|
||
},
|
||
"SSH does not get through:": {
|
||
"fr": "SSH ne passe pas :",
|
||
"en": "SSH does not get through:",
|
||
},
|
||
"Install it:": {
|
||
"fr": "Pour l'installer :",
|
||
"en": "Install it:",
|
||
},
|
||
"Or redeploy the VM with the hypervisor profile.": {
|
||
"fr": "Ou redéployer la VM avec le profil hyperviseur.",
|
||
"en": "Or redeploy the VM with the hypervisor profile.",
|
||
},
|
||
"Check the address, the SSH access and pveversion.": {
|
||
"fr": "Vérifier l'adresse, l'accès SSH et pveversion.",
|
||
"en": "Check the address, the SSH access and pveversion.",
|
||
},
|
||
"Proxmox host:": {
|
||
"fr": "Hôte Proxmox :",
|
||
"en": "Proxmox host:",
|
||
},
|
||
"through": {
|
||
"fr": "par",
|
||
"en": "through",
|
||
},
|
||
"exit code": {
|
||
"fr": "code de retour",
|
||
"en": "exit code",
|
||
},
|
||
"No VM on this Proxmox host.": {
|
||
"fr": "Aucune VM sur cet hôte Proxmox.",
|
||
"en": "No VM on this Proxmox host.",
|
||
},
|
||
"No running VM on this Proxmox host.": {
|
||
"fr": "Aucune VM démarrée sur cet hôte Proxmox.",
|
||
"en": "No running VM on this Proxmox host.",
|
||
},
|
||
"VMs on this host:": {
|
||
"fr": "VM de cet hôte :",
|
||
"en": "VMs on this host:",
|
||
},
|
||
"Selection (number): ": {
|
||
"fr": "Sélection (numéro) : ",
|
||
"en": "Selection (number): ",
|
||
},
|
||
"Deploy a VM on the Proxmox host": {
|
||
"fr": "Déployer une VM sur l'hôte Proxmox",
|
||
"en": "Deploy a VM on the Proxmox host",
|
||
},
|
||
"Preview a deployment (dry-run, nothing sent)": {
|
||
"fr": "Prévisualiser un déploiement (dry-run, rien n'est envoyé)",
|
||
"en": "Preview a deployment (dry-run, nothing sent)",
|
||
},
|
||
"Download a cloud image on the host": {
|
||
"fr": "Télécharger une image cloud sur l'hôte",
|
||
"en": "Download a cloud image on the host",
|
||
},
|
||
"List VMs (qm list)": {
|
||
"fr": "Lister les VM (qm list)",
|
||
"en": "List VMs (qm list)",
|
||
},
|
||
"Clean up (orphan disks)": {
|
||
"fr": "Nettoyer (disques orphelins)",
|
||
"en": "Clean up (orphan disks)",
|
||
},
|
||
"Statistics (host and VMs)": {
|
||
"fr": "Statistiques (hôte et VM)",
|
||
"en": "Statistics (host and VMs)",
|
||
},
|
||
"Remote desktop tunnel (VNC/RDP over SSH)": {
|
||
"fr": "Tunnel bureau distant (VNC/RDP par SSH)",
|
||
"en": "Remote desktop tunnel (VNC/RDP over SSH)",
|
||
},
|
||
"List available images and their specs": {
|
||
"fr": "Lister les images disponibles et leurs specs",
|
||
"en": "List available images and their specs",
|
||
},
|
||
"Proxmox - example sequence (dry-run)": {
|
||
"fr": "Proxmox - exemple de séquence (dry-run)",
|
||
"en": "Proxmox - example sequence (dry-run)",
|
||
},
|
||
"Host": {
|
||
"fr": "Hôte",
|
||
"en": "Host",
|
||
},
|
||
"Change the Proxmox host": {
|
||
"fr": "Changer d'hôte Proxmox",
|
||
"en": "Change the Proxmox host",
|
||
},
|
||
"VM name (default: erplibre-<distro>): ": {
|
||
"fr": "Nom de la VM (défaut : erplibre-<distro>) : ",
|
||
"en": "VM name (default: erplibre-<distro>): ",
|
||
},
|
||
"RAM in MB, blank = 4096": {
|
||
"fr": "RAM en Mo, vide = 4096",
|
||
"en": "RAM in MB, blank = 4096",
|
||
},
|
||
"vCPU, blank = 2": {
|
||
"fr": "vCPU, vide = 2",
|
||
"en": "vCPU, blank = 2",
|
||
},
|
||
"Disk size (default 32G): ": {
|
||
"fr": "Taille du disque (défaut 32G) : ",
|
||
"en": "Disk size (default 32G): ",
|
||
},
|
||
"Size (+10G to add, 40G for a target): ": {
|
||
"fr": "Taille (+10G pour ajouter, 40G pour une cible) : ",
|
||
"en": "Size (+10G to add, 40G for a target): ",
|
||
},
|
||
"No storage able to hold a VM disk.": {
|
||
"fr": "Aucun stockage capable d'héberger un disque de VM.",
|
||
"en": "No storage able to hold a VM disk.",
|
||
},
|
||
"No network bridge on this host.": {
|
||
"fr": "Aucun pont réseau sur cet hôte.",
|
||
"en": "No network bridge on this host.",
|
||
},
|
||
# --- Écran de déploiement Proxmox VE (formulaire TUI) ---
|
||
"Deploy one or more ERPLibre VMs on Proxmox VE!": {
|
||
"fr": "Déployer une ou plusieurs VM ERPLibre sur Proxmox VE !",
|
||
"en": "Deploy one or more ERPLibre VMs on Proxmox VE!",
|
||
},
|
||
"Proxmox host": {
|
||
"fr": "Hôte Proxmox",
|
||
"en": "Proxmox host",
|
||
},
|
||
"node": {
|
||
"fr": "nœud",
|
||
"en": "node",
|
||
},
|
||
"Proxmox VE": {
|
||
"fr": "Proxmox VE",
|
||
"en": "Proxmox VE",
|
||
},
|
||
"Bridge": {
|
||
"fr": "Pont",
|
||
"en": "Bridge",
|
||
},
|
||
"First VMID": {
|
||
"fr": "Premier VMID",
|
||
"en": "First VMID",
|
||
},
|
||
"Access": {
|
||
"fr": "Accès",
|
||
"en": "Access",
|
||
},
|
||
"SSH public key": {
|
||
"fr": "Clé publique SSH",
|
||
"en": "SSH public key",
|
||
},
|
||
"Start the VM after creating it": {
|
||
"fr": "Démarrer la VM après sa création",
|
||
"en": "Start the VM after creating it",
|
||
},
|
||
"Add an entry to ~/.ssh/config": {
|
||
"fr": "Ajouter une entrée à ~/.ssh/config",
|
||
"en": "Add an entry to ~/.ssh/config",
|
||
},
|
||
"Follow the installation (dashboard)": {
|
||
"fr": "Suivre l'installation (tableau de bord)",
|
||
"en": "Follow the installation (dashboard)",
|
||
},
|
||
"Text prompts": {
|
||
"fr": "Questions texte",
|
||
"en": "Text prompts",
|
||
},
|
||
"Nothing to deploy.": {
|
||
"fr": "Rien à déployer.",
|
||
"en": "Nothing to deploy.",
|
||
},
|
||
"No bridge on the host.": {
|
||
"fr": "Aucun pont sur l'hôte.",
|
||
"en": "No bridge on the host.",
|
||
},
|
||
"more disk than the storage has free": {
|
||
"fr": "plus de disque que le stockage n'en a de libre",
|
||
"en": "more disk than the storage has free",
|
||
},
|
||
"more RAM than the host has free": {
|
||
"fr": "plus de RAM que l'hôte n'en a de libre",
|
||
"en": "more RAM than the host has free",
|
||
},
|
||
"Loading (host, storage, bridges, VMs)...": {
|
||
"fr": "Chargement (hôte, stockage, ponts, VM)…",
|
||
"en": "Loading (host, storage, bridges, VMs)...",
|
||
},
|
||
"TUI unavailable": {
|
||
"fr": "Interface graphique indisponible",
|
||
"en": "TUI unavailable",
|
||
},
|
||
"VM": {
|
||
"fr": "VM",
|
||
"en": "VM",
|
||
},
|
||
"VMID": {
|
||
"fr": "VMID",
|
||
"en": "VMID",
|
||
},
|
||
"address": {
|
||
"fr": "adresse",
|
||
"en": "address",
|
||
},
|
||
"storage": {
|
||
"fr": "stockage",
|
||
"en": "storage",
|
||
},
|
||
"other…": {
|
||
"fr": "autre…",
|
||
"en": "other…",
|
||
},
|
||
"offered": {
|
||
"fr": "proposés",
|
||
"en": "offered",
|
||
},
|
||
"Would run on": {
|
||
"fr": "Serait exécuté sur",
|
||
"en": "Would run on",
|
||
},
|
||
"SSH key ->": {
|
||
"fr": "clé SSH ->",
|
||
"en": "SSH key ->",
|
||
},
|
||
"Deploy this VM now? (Y/n): ": {
|
||
"fr": "Déployer cette VM maintenant ? (O/n) : ",
|
||
"en": "Deploy this VM now? (Y/n): ",
|
||
},
|
||
"SSH key unreadable:": {
|
||
"fr": "Clé SSH illisible :",
|
||
"en": "SSH key unreadable:",
|
||
},
|
||
"SSH key not pushed: password login only.": {
|
||
"fr": "Clé SSH non transmise : connexion par mot de passe seulement.",
|
||
"en": "SSH key not pushed: password login only.",
|
||
},
|
||
"Step failed, stopping here.": {
|
||
"fr": "Étape en échec, on s'arrête ici.",
|
||
"en": "Step failed, stopping here.",
|
||
},
|
||
"Waiting for the VM address…": {
|
||
"fr": "Attente de l'adresse de la VM…",
|
||
"en": "Waiting for the VM address…",
|
||
},
|
||
"No address yet. Try [6] later.": {
|
||
"fr": "Pas encore d'adresse. Réessayer avec [6] plus tard.",
|
||
"en": "No address yet. Try [6] later.",
|
||
},
|
||
"Install ERPLibre on it? (Y/n): ": {
|
||
"fr": "Y installer ERPLibre ? (O/n) : ",
|
||
"en": "Install ERPLibre on it? (Y/n): ",
|
||
},
|
||
"No address from the guest agent.": {
|
||
"fr": "Aucune adresse rendue par l'agent invité.",
|
||
"en": "No address from the guest agent.",
|
||
},
|
||
"Is qemu-guest-agent installed and the VM started?": {
|
||
"fr": "qemu-guest-agent est-il installé et la VM démarrée ?",
|
||
"en": "Is qemu-guest-agent installed and the VM started?",
|
||
},
|
||
"Ctrl+O to quit the serial console.": {
|
||
"fr": "Ctrl+O pour quitter la console série.",
|
||
"en": "Ctrl+O to quit the serial console.",
|
||
},
|
||
"Proxmox can only GROW a disk, never shrink it.": {
|
||
"fr": "Proxmox ne sait qu'AGRANDIR un disque, jamais le rétrécir.",
|
||
"en": "Proxmox can only GROW a disk, never shrink it.",
|
||
},
|
||
"This also destroys their disks and backups.": {
|
||
"fr": "Cela détruit aussi leurs disques et leurs sauvegardes.",
|
||
"en": "This also destroys their disks and backups.",
|
||
},
|
||
"Nothing orphaned.": {
|
||
"fr": "Rien d'orphelin.",
|
||
"en": "Nothing orphaned.",
|
||
},
|
||
"Orphan disks:": {
|
||
"fr": "Disques orphelins :",
|
||
"en": "Orphan disks:",
|
||
},
|
||
"Free them?": {
|
||
"fr": "Les libérer ?",
|
||
"en": "Free them?",
|
||
},
|
||
"no address, skipped": {
|
||
"fr": "pas d'adresse, ignorée",
|
||
"en": "no address, skipped",
|
||
},
|
||
"unreachable from here.": {
|
||
"fr": "injoignable d'ici.",
|
||
"en": "unreachable from here.",
|
||
},
|
||
"Use [13] to add a ProxyJump entry, then a tunnel.": {
|
||
"fr": "Utiliser [13] pour l'entrée ProxyJump, puis un tunnel.",
|
||
"en": "Use [13] to add a ProxyJump entry, then a tunnel.",
|
||
},
|
||
"Example: demo-vm, Debian 13, on a Proxmox host": {
|
||
"fr": "Exemple : demo-vm, Debian 13, sur un hôte Proxmox",
|
||
"en": "Example: demo-vm, Debian 13, on a Proxmox host",
|
||
},
|
||
"storages": {
|
||
"fr": "stockages",
|
||
"en": "storages",
|
||
},
|
||
"memory": {
|
||
"fr": "mémoire",
|
||
"en": "memory",
|
||
},
|
||
"No address for this VM.": {
|
||
"fr": "Aucune adresse pour cette VM.",
|
||
"en": "No address for this VM.",
|
||
},
|
||
"A static address is visible right after creation.": {
|
||
"fr": "Une adresse fixe est connue dès la création.",
|
||
"en": "A static address is visible right after creation.",
|
||
},
|
||
"address given at creation:": {
|
||
"fr": "adresse donnée à la création :",
|
||
"en": "address given at creation:",
|
||
},
|
||
"qm create needs one. Two ways:": {
|
||
"fr": "« qm create » en exige un. Deux voies :",
|
||
"en": "qm create needs one. Two ways:",
|
||
},
|
||
"create an internal": {
|
||
"fr": "créer un pont interne",
|
||
"en": "create an internal",
|
||
},
|
||
"touches no physical NIC": {
|
||
"fr": "ne touche à aucune interface physique",
|
||
"en": "touches no physical NIC",
|
||
},
|
||
"do it myself (bridge-ports <nic>, needs console)": {
|
||
"fr": "le faire moi-même (bridge-ports <nic>, console requise)",
|
||
"en": "do it myself (bridge-ports <nic>, needs console)",
|
||
},
|
||
"To bridge the LAN, on the host:": {
|
||
"fr": "Pour ponter le LAN, sur l'hôte :",
|
||
"en": "To bridge the LAN, on the host:",
|
||
},
|
||
"This moves the host address: do it from a console.": {
|
||
"fr": "Cela déplace l'adresse de l'hôte : à faire depuis une console.",
|
||
"en": "This moves the host address: do it from a console.",
|
||
},
|
||
"uplink for NAT": {"fr": "sortie pour le NAT", "en": "uplink for NAT"},
|
||
"none": {"fr": "aucune", "en": "none"},
|
||
"The bridge did not come up.": {
|
||
"fr": "Le pont n'est pas monté.",
|
||
"en": "The bridge did not come up.",
|
||
},
|
||
"SSH does not know this host key yet.": {
|
||
"fr": "ssh ne connaît pas encore la clé de cet hôte.",
|
||
"en": "SSH does not know this host key yet.",
|
||
},
|
||
"Would record:": {
|
||
"fr": "Enregistrerait :",
|
||
"en": "Would record:",
|
||
},
|
||
"Record it?": {
|
||
"fr": "L'enregistrer ?",
|
||
"en": "Record it?",
|
||
},
|
||
"No host key obtained.": {
|
||
"fr": "Aucune clé d'hôte obtenue.",
|
||
"en": "No host key obtained.",
|
||
},
|
||
"key(s) recorded in ~/.ssh/known_hosts": {
|
||
"fr": "clé(s) enregistrée(s) dans ~/.ssh/known_hosts",
|
||
"en": "key(s) recorded in ~/.ssh/known_hosts",
|
||
},
|
||
"qm needs root: no root, and sudo asks for a password.": {
|
||
"fr": "qm exige root : ni root, ni sudo sans mot de passe.",
|
||
"en": "qm needs root: no root, and sudo asks for a password.",
|
||
},
|
||
"Connect as root@, or allow NOPASSWD sudo.": {
|
||
"fr": "Se connecter en root@, ou autoriser sudo sans mot de passe.",
|
||
"en": "Connect as root@, or allow NOPASSWD sudo.",
|
||
},
|
||
"Proxmox VE hypervisor (no Odoo)": {
|
||
"fr": "Hyperviseur Proxmox VE (sans Odoo)",
|
||
"en": "Proxmox VE hypervisor (no Odoo)",
|
||
},
|
||
"Proxmox will NOT be installed: plain Debian VM.": {
|
||
"fr": "Proxmox ne sera PAS installé : la VM restera une Debian nue.",
|
||
"en": "Proxmox will NOT be installed: plain Debian VM.",
|
||
},
|
||
"Later, in the VM:": {
|
||
"fr": "Plus tard, dans la VM :",
|
||
"en": "Later, in the VM:",
|
||
},
|
||
"sshfs mount failed.": {
|
||
"fr": "Le montage sshfs a échoué.",
|
||
"en": "sshfs mount failed.",
|
||
},
|
||
"Checking SSH access…": {
|
||
"fr": "Vérification de l'accès SSH…",
|
||
"en": "Checking SSH access…",
|
||
},
|
||
"SSH reaches this host: ~/.ssh/config is fine.": {
|
||
"fr": "SSH joint cet hôte : ~/.ssh/config est bon.",
|
||
"en": "SSH reaches this host: ~/.ssh/config is fine.",
|
||
},
|
||
"sshfs reads the « + » as host chaining.": {
|
||
"fr": "sshfs lit le « + » comme un chaînage d'hôtes.",
|
||
"en": "sshfs reads the « + » as host chaining.",
|
||
},
|
||
"Run this instead:": {
|
||
"fr": "À lancer plutôt :",
|
||
"en": "Run this instead:",
|
||
},
|
||
"ssh -G resolved nothing: check ~/.ssh/config.": {
|
||
"fr": "« ssh -G » n'a rien résolu : vérifier ~/.ssh/config.",
|
||
"en": "ssh -G resolved nothing: check ~/.ssh/config.",
|
||
},
|
||
"Is sshfs (and fuse) installed here?": {
|
||
"fr": "sshfs (et fuse) sont-ils installés ici ?",
|
||
"en": "Is sshfs (and fuse) installed here?",
|
||
},
|
||
"SSH fails too:": {
|
||
"fr": "SSH échoue aussi :",
|
||
"en": "SSH fails too:",
|
||
},
|
||
"Update ~/.ssh/config, or check the server is up.": {
|
||
"fr": "Mettre à jour ~/.ssh/config, ou vérifier que le serveur répond.",
|
||
"en": "Update ~/.ssh/config, or check the server is up.",
|
||
},
|
||
"Check the SSH host and that the server is up.": {
|
||
"fr": "Vérifier l'hôte SSH saisi et que le serveur répond.",
|
||
"en": "Check the SSH host and that the server is up.",
|
||
},
|
||
"unknown host name: check HostName": {
|
||
"fr": "nom d'hôte inconnu : vérifier HostName",
|
||
"en": "unknown host name: check HostName",
|
||
},
|
||
"no answer: is the server up and reachable?": {
|
||
"fr": "aucune réponse : le serveur est-il allumé et joignable ?",
|
||
"en": "no answer: is the server up and reachable?",
|
||
},
|
||
"no route: check the network or the ProxyJump": {
|
||
"fr": "pas de route : vérifier le réseau ou le ProxyJump",
|
||
"en": "no route: check the network or the ProxyJump",
|
||
},
|
||
"nothing listening on the SSH port": {
|
||
"fr": "rien n'écoute sur le port SSH",
|
||
"en": "nothing listening on the SSH port",
|
||
},
|
||
"authentication refused: check User and key": {
|
||
"fr": "authentification refusée : vérifier User et la clé",
|
||
"en": "authentication refused: check User and key",
|
||
},
|
||
"host key changed for this address": {
|
||
"fr": "la clé d'hôte a changé pour cette adresse",
|
||
"en": "host key changed for this address",
|
||
},
|
||
"no statistics yet": {
|
||
"fr": "pas encore de statistiques",
|
||
"en": "no statistics yet",
|
||
},
|
||
"10s average": {
|
||
"fr": "moyenne 10 s",
|
||
"en": "10s average",
|
||
},
|
||
"total written": {
|
||
"fr": "cumul écrit",
|
||
"en": "total written",
|
||
},
|
||
"Screens": {
|
||
"fr": "Écrans",
|
||
"en": "Screens",
|
||
},
|
||
"bridge": {
|
||
"fr": "pont",
|
||
"en": "bridge",
|
||
},
|
||
"this VM has no interface": {
|
||
"fr": "cette VM n'a pas d'interface réseau",
|
||
"en": "this VM has no interface",
|
||
},
|
||
"CPU mode": {
|
||
"fr": "Mode CPU",
|
||
"en": "CPU mode",
|
||
},
|
||
"no render node on the host": {
|
||
"fr": "aucun nœud de rendu sur l'hôte",
|
||
"en": "no render node on the host",
|
||
},
|
||
"this VM has no virtual screen": {
|
||
"fr": "cette VM n'a pas d'écran virtuel",
|
||
"en": "this VM has no virtual screen",
|
||
},
|
||
"Unknown VM(s):": {
|
||
"fr": "VM inconnue(s) :",
|
||
"en": "Unknown VM(s):",
|
||
},
|
||
"Target state:": {
|
||
"fr": "État cible :",
|
||
"en": "Target state:",
|
||
},
|
||
"Target environment?": {
|
||
"fr": "Environnement cible ?",
|
||
"en": "Target environment?",
|
||
},
|
||
"Development (~/git/erplibre, SELinux relaxed)": {
|
||
"fr": "Développement (~/git/erplibre, SELinux relâché)",
|
||
"en": "Development (~/git/erplibre, SELinux relaxed)",
|
||
},
|
||
"Production (/opt/erplibre, SELinux enforced)": {
|
||
"fr": "Production (/opt/erplibre, SELinux confiné)",
|
||
"en": "Production (/opt/erplibre, SELinux enforced)",
|
||
},
|
||
"Choice (1-2, default 1): ": {
|
||
"fr": "Choix (1-2, défaut 1) : ",
|
||
"en": "Choice (1-2, default 1): ",
|
||
},
|
||
"Open (start)": {
|
||
"fr": "Ouvrir (démarrer)",
|
||
"en": "Open (start)",
|
||
},
|
||
"Close (shut down)": {
|
||
"fr": "Fermer (éteindre)",
|
||
"en": "Close (shut down)",
|
||
},
|
||
"start": {
|
||
"fr": "démarrer",
|
||
"en": "start",
|
||
},
|
||
"shut down": {
|
||
"fr": "éteindre",
|
||
"en": "shut down",
|
||
},
|
||
"Apply:": {
|
||
"fr": "Appliquer :",
|
||
"en": "Apply:",
|
||
},
|
||
"Confirm for real? (y/N): ": {
|
||
"fr": "Confirmer pour de vrai ? (o/N) : ",
|
||
"en": "Confirm for real? (y/N): ",
|
||
},
|
||
"Storage": {
|
||
"fr": "Stockage",
|
||
"en": "Storage",
|
||
},
|
||
"total": {
|
||
"fr": "au total",
|
||
"en": "total",
|
||
},
|
||
"used": {
|
||
"fr": "utilisés",
|
||
"en": "used",
|
||
},
|
||
"Enter +NG to grow, -NG to shrink, or NG for a target size "
|
||
"(e.g. +20G, -10G, 60G).": {
|
||
"fr": "Entrez +NG pour agrandir, -NG pour réduire, ou NG pour une "
|
||
"taille cible (ex. +20G, -10G, 60G).",
|
||
"en": "Enter +NG to grow, -NG to shrink, or NG for a target size "
|
||
"(e.g. +20G, -10G, 60G).",
|
||
},
|
||
"Resize: ": {
|
||
"fr": "Redimensionner : ",
|
||
"en": "Resize: ",
|
||
},
|
||
"Invalid size.": {
|
||
"fr": "Taille invalide.",
|
||
"en": "Invalid size.",
|
||
},
|
||
"No change.": {
|
||
"fr": "Aucun changement.",
|
||
"en": "No change.",
|
||
},
|
||
"New virtual size:": {
|
||
"fr": "Nouvelle taille virtuelle :",
|
||
"en": "New virtual size:",
|
||
},
|
||
"SHRINKING is DANGEROUS: the guest filesystem is NOT shrunk. "
|
||
"Data beyond the new size is LOST. Shrink the guest FS FIRST, "
|
||
"and only then shrink here.": {
|
||
"fr": "RÉDUIRE est DANGEREUX : le système de fichiers invité n'est "
|
||
"PAS réduit. Les données au-delà de la nouvelle taille sont PERDUES. "
|
||
"Réduisez d'ABORD le FS invité, puis seulement ici.",
|
||
"en": "SHRINKING is DANGEROUS: the guest filesystem is NOT shrunk. "
|
||
"Data beyond the new size is LOST. Shrink the guest FS FIRST, "
|
||
"and only then shrink here.",
|
||
},
|
||
"Shut the VM off before shrinking (virsh shutdown).": {
|
||
"fr": "Éteignez la VM avant de réduire (virsh shutdown).",
|
||
"en": "Shut the VM off before shrinking (virsh shutdown).",
|
||
},
|
||
"Type y to confirm you understand the risk (y/N): ": {
|
||
"fr": "Tapez o pour confirmer que vous comprenez le risque "
|
||
"(o/N, défaut : non) : ",
|
||
"en": "Type y to confirm you understand the risk (y/N): ",
|
||
},
|
||
"Resize failed (see error above).": {
|
||
"fr": "Échec du redimensionnement (voir l'erreur ci-dessus).",
|
||
"en": "Resize failed (see error above).",
|
||
},
|
||
"Virtual disk resized.": {
|
||
"fr": "Disque virtuel redimensionné.",
|
||
"en": "Virtual disk resized.",
|
||
},
|
||
"Grow the guest filesystem now (over SSH)? (y/N): ": {
|
||
"fr": "Étendre le système de fichiers invité maintenant (via SSH) ? "
|
||
"(o/N, défaut : non) : ",
|
||
"en": "Grow the guest filesystem now (over SSH)? (y/N): ",
|
||
},
|
||
"No IP; grow the guest FS manually once booted.": {
|
||
"fr": "Pas d'IP ; étendez le FS invité manuellement après le boot.",
|
||
"en": "No IP; grow the guest FS manually once booted.",
|
||
},
|
||
"completed": {
|
||
"fr": "terminées",
|
||
"en": "completed",
|
||
},
|
||
"deleted": {
|
||
"fr": "effacée",
|
||
"en": "deleted",
|
||
},
|
||
"paused": {
|
||
"fr": "pause",
|
||
"en": "paused",
|
||
},
|
||
"Waiting for the VM to start (boot + cloud-init)": {
|
||
"fr": "En attente du démarrage de la VM (boot + cloud-init)",
|
||
"en": "Waiting for the VM to start (boot + cloud-init)",
|
||
},
|
||
"(an emulated architecture can be slow; this is normal)": {
|
||
"fr": "(une architecture émulée peut être lente ; c'est normal)",
|
||
"en": "(an emulated architecture can be slow; this is normal)",
|
||
},
|
||
"VM ready - starting the ERPLibre install": {
|
||
"fr": "VM prête — installation ERPLibre en cours",
|
||
"en": "VM ready - starting the ERPLibre install",
|
||
},
|
||
"Choice (number or name, blank = native):": {
|
||
"fr": "Choix (numéro ou nom, vide = native) :",
|
||
"en": "Choice (number or name, blank = native):",
|
||
},
|
||
"Pick exact versions (comma-separated list)": {
|
||
"fr": "Choisir des versions précises (liste séparée par des virgules)",
|
||
"en": "Pick exact versions (comma-separated list)",
|
||
},
|
||
"Selection (numbers, 'all', 'principal' or 'granulaire',"
|
||
" default: all): ": {
|
||
"fr": "Sélection (numéros, « all », « principal » ou « granulaire »,"
|
||
" défaut : all) : ",
|
||
"en": "Selection (numbers, 'all', 'principal' or 'granulaire',"
|
||
" default: all): ",
|
||
},
|
||
"All versions:": {
|
||
"fr": "Toutes les versions :",
|
||
"en": "All versions:",
|
||
},
|
||
"Selection (comma-separated numbers): ": {
|
||
"fr": "Sélection (numéros séparés par des virgules) : ",
|
||
"en": "Selection (comma-separated numbers): ",
|
||
},
|
||
"s390x images only exist for:": {
|
||
"fr": "images s390x disponibles seulement pour :",
|
||
"en": "s390x images only exist for:",
|
||
},
|
||
"ignored:": {
|
||
"fr": "ignoré :",
|
||
"en": "ignored:",
|
||
},
|
||
"IBM Z — emulated, slow on x86": {
|
||
"fr": "IBM Z — émulé, lent sur x86",
|
||
"en": "IBM Z — emulated, slow on x86",
|
||
},
|
||
"Choice (number or name, blank = amd64):": {
|
||
"fr": "Choix (numéro ou nom, vide = amd64) :",
|
||
"en": "Choice (number or name, blank = amd64):",
|
||
},
|
||
"s390x is emulated (TCG): boot and install are much "
|
||
"slower than x86.": {
|
||
"fr": "s390x est émulé (TCG) : le boot et l'installation sont bien "
|
||
"plus lents que x86.",
|
||
"en": "s390x is emulated (TCG): boot and install are much "
|
||
"slower than x86.",
|
||
},
|
||
"Choice (number or version, blank = default):": {
|
||
"fr": "Choix (numéro ou version, vide = défaut) :",
|
||
"en": "Choice (number or version, blank = default):",
|
||
},
|
||
"Invalid selection, using": {
|
||
"fr": "Sélection invalide, utilisation de",
|
||
"en": "Invalid selection, using",
|
||
},
|
||
"select all": {
|
||
"fr": "tout sélectionner",
|
||
"en": "select all",
|
||
},
|
||
"Delete VM(s)": {
|
||
"fr": "🗑 Effacer une ou plusieurs VM",
|
||
"en": "🗑 Delete VM(s)",
|
||
},
|
||
"No VM found.": {
|
||
"fr": "Aucune VM trouvée.",
|
||
"en": "No VM found.",
|
||
},
|
||
"Select VMs to delete:": {
|
||
"fr": "Sélectionner les VM à effacer :",
|
||
"en": "Select VMs to delete:",
|
||
},
|
||
"Selection (numbers, or 'all'): ": {
|
||
"fr": "Sélection (numéros, ou « all ») : ",
|
||
"en": "Selection (numbers, or 'all'): ",
|
||
},
|
||
"Also delete disk images (qcow2 + seed ISO)? (y/N): ": {
|
||
"fr": "Effacer aussi les disques (qcow2 + seed ISO) ? (o/N, défaut : non) : ",
|
||
"en": "Also delete disk images (qcow2 + seed ISO)? (y/N, default: no): ",
|
||
},
|
||
"Will delete:": {
|
||
"fr": "Sera effacé :",
|
||
"en": "Will delete:",
|
||
},
|
||
"disk images and seed ISOs": {
|
||
"fr": "les disques et les seed ISO",
|
||
"en": "disk images and seed ISOs",
|
||
},
|
||
"disks kept": {
|
||
"fr": "disques conservés",
|
||
"en": "disks kept",
|
||
},
|
||
"Confirm deletion? (y/N): ": {
|
||
"fr": "Confirmer l'effacement ? (o/N, défaut : non) : ",
|
||
"en": "Confirm deletion? (y/N, default: no): ",
|
||
},
|
||
"Deletion done.": {
|
||
"fr": "Effacement terminé.",
|
||
"en": "Deletion done.",
|
||
},
|
||
"Clean up QEMU (orphan files)": {
|
||
"fr": "🧹 Nettoyer QEMU (fichiers orphelins)",
|
||
"en": "🧹 Clean up QEMU (orphan files)",
|
||
},
|
||
"Scanning for orphan QEMU files...": {
|
||
"fr": "Recherche des fichiers QEMU orphelins...",
|
||
"en": "Scanning for orphan QEMU files...",
|
||
},
|
||
"orphan disk": {
|
||
"fr": "disque orphelin",
|
||
"en": "orphan disk",
|
||
},
|
||
"orphan seed": {
|
||
"fr": "seed orphelin",
|
||
"en": "orphan seed",
|
||
},
|
||
"partial download": {
|
||
"fr": "téléchargement interrompu",
|
||
"en": "partial download",
|
||
},
|
||
"orphan UEFI nvram": {
|
||
"fr": "nvram UEFI orpheline",
|
||
"en": "orphan UEFI nvram",
|
||
},
|
||
"No orphan files found.": {
|
||
"fr": "Aucun fichier orphelin trouvé.",
|
||
"en": "No orphan files found.",
|
||
},
|
||
"Orphan files:": {
|
||
"fr": "Fichiers orphelins :",
|
||
"en": "Orphan files:",
|
||
},
|
||
"connection guide written": {
|
||
"fr": "guide de connexion écrit (/etc/motd)",
|
||
"en": "connection guide written (/etc/motd)",
|
||
},
|
||
"guide not written": {
|
||
"fr": "guide non écrit",
|
||
"en": "guide not written",
|
||
},
|
||
"Quit (q) to start the ERPLibre install": {
|
||
"fr": "Quitter (q) pour lancer l'installation d'ERPLibre",
|
||
"en": "Quit (q) to start the ERPLibre install",
|
||
},
|
||
"Quit (q) to follow the VM starting up": {
|
||
"fr": "Quitter (q) pour suivre la mise en route de la VM",
|
||
"en": "Quit (q) to follow the VM starting up",
|
||
},
|
||
"This name is already taken by": {
|
||
"fr": "Ce nom est déjà pris par",
|
||
"en": "This name is already taken by",
|
||
},
|
||
"a local VM": {
|
||
"fr": "une VM locale",
|
||
"en": "a local VM",
|
||
},
|
||
"A local VM already bears this name:": {
|
||
"fr": "Une VM locale porte déjà ce nom :",
|
||
"en": "A local VM already bears this name:",
|
||
},
|
||
"the alias goes to": {
|
||
"fr": "l'alias devient",
|
||
"en": "the alias goes to",
|
||
},
|
||
"s ssh · c copy log · C copy all · q quit": {
|
||
"fr": "s ssh · c copier le log · C copier tout · q quitter",
|
||
"en": "s ssh · c copy log · C copy all · q quit",
|
||
},
|
||
"No VM created yet.": {
|
||
"fr": "Aucune VM créée pour l'instant.",
|
||
"en": "No VM created yet.",
|
||
},
|
||
# « models » manquait alors que ses trois voisines de la même ligne
|
||
# étaient traduites : le rapport de qualité de migration sortait
|
||
# « 42 modules · 812 models · 1 204 vues ».
|
||
"models": {
|
||
"fr": "modèles",
|
||
"en": "models",
|
||
},
|
||
"shutdown (clean)": {
|
||
"fr": "éteindre (proprement)",
|
||
"en": "shutdown (clean)",
|
||
},
|
||
"stop (pulls the plug)": {
|
||
"fr": "arrêter (coupe le courant)",
|
||
"en": "stop (pulls the plug)",
|
||
},
|
||
"Choice (blank = back): ": {
|
||
"fr": "Choix (vide = retour) : ",
|
||
"en": "Choice (blank = back): ",
|
||
},
|
||
"Confirm? (y/N): ": {
|
||
"fr": "Confirmer ? (o/N) : ",
|
||
"en": "Confirm? (y/N): ",
|
||
},
|
||
"Creating the bridge on the host…": {
|
||
"fr": "Création du pont sur l'hôte…",
|
||
"en": "Creating the bridge on the host…",
|
||
},
|
||
"no disk file found for this VM": {
|
||
"fr": "aucun fichier de disque trouvé pour cette VM",
|
||
"en": "no disk file found for this VM",
|
||
},
|
||
"a running process": {
|
||
"fr": "un processus en cours",
|
||
"en": "a running process",
|
||
},
|
||
"Kept (still attached to a VM):": {
|
||
"fr": "Conservés (encore attachés à une VM) :",
|
||
"en": "Kept (still attached to a VM):",
|
||
},
|
||
"Total:": {
|
||
"fr": "Total :",
|
||
"en": "Total:",
|
||
},
|
||
"files": {
|
||
"fr": "fichiers",
|
||
"en": "files",
|
||
},
|
||
"Delete these orphan files? (y/N): ": {
|
||
"fr": "Effacer ces fichiers orphelins ? (o/N, défaut : non) : ",
|
||
"en": "Delete these orphan files? (y/N, default: no): ",
|
||
},
|
||
"Cleanup done.": {
|
||
"fr": "Nettoyage terminé.",
|
||
"en": "Cleanup done.",
|
||
},
|
||
"Cached base images (reusable):": {
|
||
"fr": "Images de base en cache (réutilisables) :",
|
||
"en": "Cached base images (reusable):",
|
||
},
|
||
"Also delete the cached base images? (y/N): ": {
|
||
"fr": "Effacer aussi les images de base en cache ? (o/N, défaut : non) : ",
|
||
"en": "Also delete the cached base images? (y/N, default: no): ",
|
||
},
|
||
"All cached base images (reusable):": {
|
||
"fr": "Toutes les images de base en cache (réutilisables) :",
|
||
"en": "All cached base images (reusable):",
|
||
},
|
||
"Delete ALL cached base images? (y/N): ": {
|
||
"fr": "Effacer TOUTES les images de base en cache ? (o/N, défaut : non) : ",
|
||
"en": "Delete ALL cached base images? (y/N, default: no): ",
|
||
},
|
||
"Ghost domains (defined but disk missing):": {
|
||
"fr": "Domaines fantômes (définis, disque manquant) :",
|
||
"en": "Ghost domains (defined but disk missing):",
|
||
},
|
||
"Undefine these ghost domains? (y/N): ": {
|
||
"fr": "Supprimer la définition de ces domaines ? (o/N, défaut : non) : ",
|
||
"en": "Undefine these ghost domains? (y/N, default: no): ",
|
||
},
|
||
"Stale codename-named Ubuntu images (duplicates):": {
|
||
"fr": "Images Ubuntu nommées par codename (doublons) :",
|
||
"en": "Stale codename-named Ubuntu images (duplicates):",
|
||
},
|
||
"Delete these duplicate images? (y/N): ": {
|
||
"fr": "Effacer ces images en double ? (o/N, défaut : non) : ",
|
||
"en": "Delete these duplicate images? (y/N, default: no): ",
|
||
},
|
||
"Orphan ~/.ssh/config entries:": {
|
||
"fr": "Entrées ~/.ssh/config orphelines :",
|
||
"en": "Orphan ~/.ssh/config entries:",
|
||
},
|
||
"Kept (still leads somewhere):": {
|
||
"fr": "Conservées (mènent encore quelque part) :",
|
||
"en": "Kept (still leads somewhere):",
|
||
},
|
||
"reached through a jump host": {
|
||
"fr": "joignable par un rebond",
|
||
"en": "reached through a jump host",
|
||
},
|
||
"a VM of the Proxmox host": {
|
||
"fr": "une VM de l'hôte Proxmox",
|
||
"en": "a VM of the Proxmox host",
|
||
},
|
||
"Remove these ~/.ssh/config entries? (y/N): ": {
|
||
"fr": "Retirer ces entrées de ~/.ssh/config ? (o/N, défaut : non) : ",
|
||
"en": "Remove these ~/.ssh/config entries? (y/N, default: no): ",
|
||
},
|
||
"Stale DHCP leases (no matching VM):": {
|
||
"fr": "Baux DHCP périmés (aucune VM correspondante) :",
|
||
"en": "Stale DHCP leases (no matching VM):",
|
||
},
|
||
"Clear these stale leases? (y/N): ": {
|
||
"fr": "Effacer ces baux périmés ? (o/N, défaut : non) : ",
|
||
"en": "Clear these stale leases? (y/N, default: no): ",
|
||
},
|
||
"Deploy ERPLibre infra (one minimal VM per image)": {
|
||
"fr": "Déployer l'infra ERPLibre (une VM minimale par image)",
|
||
"en": "Deploy ERPLibre infra (one minimal VM per image)",
|
||
},
|
||
"Deploy ERPLibre infra: one minimal VM per image": {
|
||
"fr": "Déployer l'infra ERPLibre : une VM minimale par image",
|
||
"en": "Deploy ERPLibre infra: one minimal VM per image",
|
||
},
|
||
"Cannot load QEMU catalog: ": {
|
||
"fr": "Impossible de charger le catalogue QEMU : ",
|
||
"en": "Cannot load QEMU catalog: ",
|
||
},
|
||
"Distributions:": {
|
||
"fr": "Distributions :",
|
||
"en": "Distributions:",
|
||
},
|
||
"Whole catalog (every version)": {
|
||
"fr": "Tout le catalogue (chaque version)",
|
||
"en": "Whole catalog (every version)",
|
||
},
|
||
"The main version of each distro (marked *)": {
|
||
"fr": "La version principale de chaque distro (marquée *)",
|
||
"en": "The main version of each distro (marked *)",
|
||
},
|
||
"Selection (numbers, 'all' or 'principal', default: all): ": {
|
||
"fr": "Sélection (numéros, « all » ou « principal », défaut : all) : ",
|
||
"en": "Selection (numbers, 'all' or 'principal', default: all): ",
|
||
},
|
||
"Selection (numbers, or 'all', default: all): ": {
|
||
"fr": "Sélection (numéros, ou « all », défaut : all) : ",
|
||
"en": "Selection (numbers, or 'all', default: all): ",
|
||
},
|
||
"Nothing selected.": {
|
||
"fr": "Rien de sélectionné.",
|
||
"en": "Nothing selected.",
|
||
},
|
||
"Deployment plan": {
|
||
"fr": "Plan de déploiement",
|
||
"en": "Deployment plan",
|
||
},
|
||
"disk": {
|
||
"fr": "disque",
|
||
"en": "disk",
|
||
},
|
||
"Total RAM (all running):": {
|
||
"fr": "RAM totale (toutes actives) :",
|
||
"en": "Total RAM (all running):",
|
||
},
|
||
"Total virtual disk (thin qcow2):": {
|
||
"fr": "Disque virtuel total (qcow2 thin) :",
|
||
"en": "Total virtual disk (thin qcow2):",
|
||
},
|
||
"Host RAM available:": {
|
||
"fr": "RAM disponible de l'hôte :",
|
||
"en": "Host RAM available:",
|
||
},
|
||
"Total RAM exceeds host free RAM: not all VMs will run at once.": {
|
||
"fr": "La RAM totale dépasse la RAM libre de l'hôte : les VM ne "
|
||
"tourneront pas toutes en même temps.",
|
||
"en": "Total RAM exceeds host free RAM: not all VMs will run at once.",
|
||
},
|
||
"Install ERPLibre into ~/git/erplibre on each VM? (Y/n): ": {
|
||
"fr": "Installer ERPLibre dans ~/git/erplibre sur chaque VM ? "
|
||
"(O/n, défaut : oui) : ",
|
||
"en": "Install ERPLibre into ~/git/erplibre on each VM? "
|
||
"(Y/n, default: yes): ",
|
||
},
|
||
"Deploy these VMs now? (Y/n): ": {
|
||
"fr": "Déployer ces VM maintenant ? (O/n, défaut : oui) : ",
|
||
"en": "Deploy these VMs now? (Y/n, default: yes): ",
|
||
},
|
||
"Discard everything and start over? (y/N): ": {
|
||
"fr": "Tout abandonner et recommencer ? (o/N, défaut : non) : ",
|
||
"en": "Discard everything and start over? (y/N, default: no): ",
|
||
},
|
||
"Final review before deployment": {
|
||
"fr": "Récapitulatif final avant déploiement",
|
||
"en": "Final review before deployment",
|
||
},
|
||
"VMs to create:": {
|
||
"fr": "VM à créer :",
|
||
"en": "VMs to create:",
|
||
},
|
||
"Existing, left untouched:": {
|
||
"fr": "Existantes, laissées intactes :",
|
||
"en": "Existing, left untouched:",
|
||
},
|
||
# Renommée : la case commande TOUTE installation — ERPLibre, Odoo, mais
|
||
# aussi l'hyperviseur Proxmox VE, qui n'installe ni l'un ni l'autre.
|
||
"Install:": {
|
||
"fr": "Installation :",
|
||
"en": "Install:",
|
||
},
|
||
"Install software in the VM": {
|
||
"fr": "Installer un logiciel dans la VM",
|
||
"en": "Install software in the VM",
|
||
},
|
||
"Installation": {
|
||
"fr": "Installation",
|
||
"en": "Installation",
|
||
},
|
||
"Monitoring and parallelism": {
|
||
"fr": "Suivi et parallélisme",
|
||
"en": "Monitoring and parallelism",
|
||
},
|
||
"profile": {
|
||
"fr": "profil",
|
||
"en": "profile",
|
||
},
|
||
"branch": {
|
||
"fr": "branche",
|
||
"en": "branch",
|
||
},
|
||
"production (/opt, confined)": {
|
||
"fr": "production (/opt, confiné)",
|
||
"en": "production (/opt, confined)",
|
||
},
|
||
"development (~/git)": {
|
||
"fr": "développement (~/git)",
|
||
"en": "development (~/git)",
|
||
},
|
||
"no": {
|
||
"fr": "non",
|
||
"en": "no",
|
||
},
|
||
"SSH key:": {
|
||
"fr": "Clé SSH :",
|
||
"en": "SSH key:",
|
||
},
|
||
"~/.ssh/config:": {
|
||
"fr": "~/.ssh/config :",
|
||
"en": "~/.ssh/config:",
|
||
},
|
||
"one entry per VM": {
|
||
"fr": "une entrée par VM",
|
||
"en": "one entry per VM",
|
||
},
|
||
"untouched": {
|
||
"fr": "inchangé",
|
||
"en": "untouched",
|
||
},
|
||
"Parallelism:": {
|
||
"fr": "Parallélisme :",
|
||
"en": "Parallelism:",
|
||
},
|
||
"at a time": {
|
||
"fr": "à la fois",
|
||
"en": "at a time",
|
||
},
|
||
"Nothing to create - every VM already exists.": {
|
||
"fr": "Rien à créer — toutes les VM existent déjà.",
|
||
"en": "Nothing to create — every VM already exists.",
|
||
},
|
||
"Name collisions detected": {
|
||
"fr": "Collisions de noms détectées",
|
||
"en": "Name collisions detected",
|
||
},
|
||
"VM already defined - SKIPPED, nothing overwritten": {
|
||
"fr": "VM déjà définie — IGNORÉE, rien ne sera écrasé",
|
||
"en": "VM already defined — SKIPPED, nothing overwritten",
|
||
},
|
||
"disk present without VM - deployment will FAIL": {
|
||
"fr": "disque présent sans VM — le déploiement ÉCHOUERA",
|
||
"en": "disk present without VM - deployment will FAIL",
|
||
},
|
||
"Remove it by hand, or rename the VM.": {
|
||
"fr": "L'effacer à la main, ou renommer la VM.",
|
||
"en": "Remove it by hand, or rename the VM.",
|
||
},
|
||
"Continue despite these collisions? (y/N): ": {
|
||
"fr": "Continuer malgré ces collisions ? (o/N, défaut : non) : ",
|
||
"en": "Continue despite these collisions? (y/N, default: no): ",
|
||
},
|
||
"Resolving VM IPs (parallel, emulated boot is slow)...": {
|
||
"fr": "Résolution des IP des VM (en parallèle, le démarrage émulé "
|
||
"est lent)...",
|
||
"en": "Resolving VM IPs (parallel, emulated boot is slow)...",
|
||
},
|
||
"no IP": {
|
||
"fr": "pas d'IP",
|
||
"en": "no IP",
|
||
},
|
||
"Cloning ERPLibre on each VM": {
|
||
"fr": "Clonage d'ERPLibre sur chaque VM",
|
||
"en": "Cloning ERPLibre on each VM",
|
||
},
|
||
"per VM": {
|
||
"fr": "par VM",
|
||
"en": "per VM",
|
||
},
|
||
"Installing ERPLibre on each VM": {
|
||
"fr": "Installation d'ERPLibre sur chaque VM",
|
||
"en": "Installing ERPLibre on each VM",
|
||
},
|
||
"Install ERPLibre into ~/git/erplibre on this VM? (y/N): ": {
|
||
"fr": "Installer ERPLibre dans ~/git/erplibre sur cette VM ? (o/N, défaut : non) : ",
|
||
"en": "Install ERPLibre into ~/git/erplibre on this VM? (y/N, default: no): ",
|
||
},
|
||
"installing ERPLibre": {
|
||
"fr": "installation d'ERPLibre",
|
||
"en": "installing ERPLibre",
|
||
},
|
||
"no IP obtained, ERPLibre install skipped.": {
|
||
"fr": "aucune IP obtenue, installation ERPLibre ignorée.",
|
||
"en": "no IP obtained, ERPLibre install skipped.",
|
||
},
|
||
"waiting for SSH...": {
|
||
"fr": "attente du SSH...",
|
||
"en": "waiting for SSH...",
|
||
},
|
||
"SSH not reachable, ERPLibre install skipped.": {
|
||
"fr": "SSH injoignable, installation ERPLibre ignorée.",
|
||
"en": "SSH not reachable, ERPLibre install skipped.",
|
||
},
|
||
"What to install on the VM(s)?": {
|
||
"fr": "Que veut-on installer sur la/les VM ?",
|
||
"en": "What to install on the VM(s)?",
|
||
},
|
||
"Choice (number, blank = Odoo 18): ": {
|
||
"fr": "Choix (numéro, vide = Odoo 18) : ",
|
||
"en": "Choice (number, blank = Odoo 18): ",
|
||
},
|
||
"ERPLibre + all Odoo versions": {
|
||
"fr": "ERPLibre + toutes les versions Odoo",
|
||
"en": "ERPLibre + all Odoo versions",
|
||
},
|
||
"ERPLibre only (no Odoo)": {
|
||
"fr": "ERPLibre seulement (sans Odoo)",
|
||
"en": "ERPLibre only (no Odoo)",
|
||
},
|
||
"ERPLibre mobile (home)": {
|
||
"fr": "ERPLibre mobile (home)",
|
||
"en": "ERPLibre mobile (home)",
|
||
},
|
||
"ERPLibre Deployment (+ QEMU + dev)": {
|
||
"fr": "ERPLibre Déploiement (+ QEMU + dev)",
|
||
"en": "ERPLibre Deployment (+ QEMU + dev)",
|
||
},
|
||
"Interactive monitoring dashboard? (y/N): ": {
|
||
"fr": "Suivi interactif (dashboard) ? (O/n, défaut : oui) : ",
|
||
"en": "Interactive monitoring dashboard? (Y/n, default: yes): ",
|
||
},
|
||
"resolving IP...": {
|
||
"fr": "résolution de l'IP...",
|
||
"en": "resolving IP...",
|
||
},
|
||
"no IP, skipped.": {
|
||
"fr": "pas d'IP, ignorée.",
|
||
"en": "no IP, skipped.",
|
||
},
|
||
"No VM to install.": {
|
||
"fr": "Aucune VM à installer.",
|
||
"en": "No VM to install.",
|
||
},
|
||
"Opening the interactive monitor...": {
|
||
"fr": "Ouverture du suivi interactif...",
|
||
"en": "Opening the interactive monitor...",
|
||
},
|
||
"Monitor closed. Installs keep running in the background.": {
|
||
"fr": "Suivi fermé. Les installations continuent en arrière-plan.",
|
||
"en": "Monitor closed. Installs keep running in the background.",
|
||
},
|
||
"Logs:": {
|
||
"fr": "Logs :",
|
||
"en": "Logs:",
|
||
},
|
||
"Read the logs:": {
|
||
"fr": "Lire les logs :",
|
||
"en": "Read the logs:",
|
||
},
|
||
"Log files:": {
|
||
"fr": "Fichiers de log :",
|
||
"en": "Log files:",
|
||
},
|
||
"Parallel deployments (default:": {
|
||
"fr": "Déploiements en parallèle (défaut :",
|
||
"en": "Parallel deployments (default:",
|
||
},
|
||
"VMs": {
|
||
"fr": "VM",
|
||
"en": "VMs",
|
||
},
|
||
"Deploy summary:": {
|
||
"fr": "Bilan déploiement :",
|
||
"en": "Deploy summary:",
|
||
},
|
||
"IPs resolved:": {
|
||
"fr": "IP résolues :",
|
||
"en": "IPs resolved:",
|
||
},
|
||
"still waiting for": {
|
||
"fr": "encore en attente de",
|
||
"en": "still waiting for",
|
||
},
|
||
"TOTAL summary": {
|
||
"fr": "Sommaire TOTAL",
|
||
"en": "TOTAL summary",
|
||
},
|
||
"VMs deployed:": {
|
||
"fr": "VM déployées :",
|
||
"en": "VMs deployed:",
|
||
},
|
||
"total incl. existing:": {
|
||
"fr": "total avec existantes :",
|
||
"en": "total incl. existing:",
|
||
},
|
||
"Total time:": {
|
||
"fr": "Temps total :",
|
||
"en": "Total time:",
|
||
},
|
||
"Deploying": {
|
||
"fr": "Déploiement de",
|
||
"en": "Deploying",
|
||
},
|
||
"parallel jobs:": {
|
||
"fr": "tâches parallèles :",
|
||
"en": "parallel jobs:",
|
||
},
|
||
"ERPLibre infra deployment done.": {
|
||
"fr": "Déploiement de l'infra ERPLibre terminé.",
|
||
"en": "ERPLibre infra deployment done.",
|
||
},
|
||
"Manage with:": {
|
||
"fr": "Gérer avec :",
|
||
"en": "Manage with:",
|
||
},
|
||
"Fetching ERPLibre branch list...": {
|
||
"fr": "Récupération de la liste des branches ERPLibre...",
|
||
"en": "Fetching ERPLibre branch list...",
|
||
},
|
||
"Branch (default:": {
|
||
"fr": "Branche (défaut :",
|
||
"en": "Branch (default:",
|
||
},
|
||
"Branches:": {
|
||
"fr": "Branches :",
|
||
"en": "Branches:",
|
||
},
|
||
"Choice (number or name, default:": {
|
||
"fr": "Choix (numéro ou nom, défaut :",
|
||
"en": "Choice (number or name, default:",
|
||
},
|
||
"no IP obtained, ERPLibre clone skipped.": {
|
||
"fr": "aucune IP obtenue, clonage ERPLibre ignoré.",
|
||
"en": "no IP obtained, ERPLibre clone skipped.",
|
||
},
|
||
"cloning ERPLibre": {
|
||
"fr": "clonage d'ERPLibre",
|
||
"en": "cloning ERPLibre",
|
||
},
|
||
"VM name (required): ": {
|
||
"fr": "Nom de la VM (requis) : ",
|
||
"en": "VM name (required): ",
|
||
},
|
||
"VM name is required!": {
|
||
"fr": "Le nom de la VM est requis !",
|
||
"en": "VM name is required!",
|
||
},
|
||
"VM name: ": {
|
||
"fr": "Nom de la VM : ",
|
||
"en": "VM name: ",
|
||
},
|
||
"VM name or ID: ": {
|
||
"fr": "Nom ou ID de la VM : ",
|
||
"en": "VM name or ID: ",
|
||
},
|
||
"VM name or ID (or 'all'): ": {
|
||
"fr": "Nom ou ID de la VM (ou « all ») : ",
|
||
"en": "VM name or ID (or 'all'): ",
|
||
},
|
||
"RAM in MB (blank = version minimum): ": {
|
||
"fr": "RAM en Mo (vide = minimum de la version) : ",
|
||
"en": "RAM in MB (blank = version minimum): ",
|
||
},
|
||
"vCPUs (default: 2): ": {
|
||
"fr": "vCPU (défaut : 2) : ",
|
||
"en": "vCPUs (default: 2): ",
|
||
},
|
||
"Disk size (blank = version min; e.g. 30G, 1T): ": {
|
||
"fr": "Taille du disque (vide = min. version ; ex. 30G, 1T) : ",
|
||
"en": "Disk size (blank = version min; e.g. 30G, 1T): ",
|
||
},
|
||
"VM name (default: ": {
|
||
"fr": "Nom de la VM (défaut : ",
|
||
"en": "VM name (default: ",
|
||
},
|
||
"Deployment failed (see the error above).": {
|
||
"fr": "Échec du déploiement (voir l'erreur ci-dessus).",
|
||
"en": "Deployment failed (see the error above).",
|
||
},
|
||
"SSH public key path": {
|
||
"fr": "Chemin de la clé publique SSH",
|
||
"en": "SSH public key path",
|
||
},
|
||
"timezone not set": {
|
||
"fr": "fuseau non posé",
|
||
"en": "timezone not set",
|
||
},
|
||
"Timezone": {
|
||
"fr": "Fuseau horaire",
|
||
"en": "Timezone",
|
||
},
|
||
"virsh cannot reach qemu:///system without sudo.": {
|
||
"fr": "virsh ne peut pas joindre qemu:///system sans sudo.",
|
||
"en": "virsh cannot reach qemu:///system without sudo.",
|
||
},
|
||
"The install monitor runs detached and cannot type a": {
|
||
"fr": "Le suivi d'installation tourne détaché et ne peut pas saisir",
|
||
"en": "The install monitor runs detached and cannot type a",
|
||
},
|
||
"password: it would lose the VM when its lease moves.": {
|
||
"fr": "de mot de passe : il perdrait la VM au changement de bail.",
|
||
"en": "password: it would lose the VM when its lease moves.",
|
||
},
|
||
"You are in the libvirt group, but this session": {
|
||
"fr": "Vous êtes dans le groupe libvirt, mais cette session est",
|
||
"en": "You are in the libvirt group, but this session",
|
||
},
|
||
"predates it. Log out and back in, or run:": {
|
||
"fr": "antérieure. Reconnectez-vous, ou lancez :",
|
||
"en": "predates it. Log out and back in, or run:",
|
||
},
|
||
"Group is active, so the cause is elsewhere:": {
|
||
"fr": "Le groupe est actif : la cause est donc ailleurs.",
|
||
"en": "Group is active, so the cause is elsewhere:",
|
||
},
|
||
"Add your user to the libvirt group?": {
|
||
"fr": "Ajouter votre utilisateur au groupe libvirt ?",
|
||
"en": "Add your user to the libvirt group?",
|
||
},
|
||
"Run it now? (Y/n): ": {
|
||
"fr": "L'exécuter maintenant ? (O/n) : ",
|
||
"en": "Run it now? (Y/n): ",
|
||
},
|
||
"Command failed.": {
|
||
"fr": "La commande a échoué.",
|
||
"en": "Command failed.",
|
||
},
|
||
"Added. Log out and back in for it to take effect,": {
|
||
"fr": "Ajouté. Reconnectez-vous pour que ça prenne effet,",
|
||
"en": "Added. Log out and back in for it to take effect,",
|
||
},
|
||
"or start a new shell with: newgrp libvirt": {
|
||
"fr": "ou ouvrez un shell neuf avec : newgrp libvirt",
|
||
"en": "or start a new shell with: newgrp libvirt",
|
||
},
|
||
"Timezone for the VMs": {
|
||
"fr": "Fuseau horaire des VM",
|
||
"en": "Timezone for the VMs",
|
||
},
|
||
"Locale for the VMs": {
|
||
"fr": "Locale des VM",
|
||
"en": "Locale for the VMs",
|
||
},
|
||
"KVM is unavailable: the VMs will be EMULATED.": {
|
||
"fr": "KVM indisponible : les VM seront ÉMULÉES.",
|
||
"en": "KVM is unavailable: the VMs will be EMULATED.",
|
||
},
|
||
"A boot then takes 10-15 min, not under a minute.": {
|
||
"fr": "Un démarrage prend alors 10 à 15 min, pas moins d'une minute.",
|
||
"en": "A boot then takes 10-15 min, not under a minute.",
|
||
},
|
||
"Cause: /dev/kvm is missing. This host is itself a VM": {
|
||
"fr": "Cause : /dev/kvm est absent. Cet hôte est lui-même une VM",
|
||
"en": "Cause: /dev/kvm is missing. This host is itself a VM",
|
||
},
|
||
"whose hypervisor does not expose nested virtualization.": {
|
||
"fr": "dont l'hyperviseur n'expose pas la virtualisation imbriquée.",
|
||
"en": "whose hypervisor does not expose nested virtualization.",
|
||
},
|
||
"To fix it ON THE PARENT HYPERVISOR, not here:": {
|
||
"fr": "Pour corriger, SUR L'HYPERVISEUR PARENT, pas ici :",
|
||
"en": "To fix it ON THE PARENT HYPERVISOR, not here:",
|
||
},
|
||
"then set this VM to the host-passthrough CPU mode and": {
|
||
"fr": "puis donner à cette VM le mode CPU « host-passthrough », et",
|
||
"en": "then set this VM to the host-passthrough CPU mode and",
|
||
},
|
||
"stop it and start it again - a reboot is not enough.": {
|
||
"fr": "l'arrêter puis la redémarrer — un reboot ne suffit pas.",
|
||
"en": "stop it and start it again - a reboot is not enough.",
|
||
},
|
||
"Without access to that hypervisor, nothing to do here.": {
|
||
"fr": "Sans accès à cet hyperviseur, il n'y a rien à régler ici.",
|
||
"en": "Without access to that hypervisor, nothing to do here.",
|
||
},
|
||
"Usual cause: this host is itself a VM without nested": {
|
||
"fr": "Cause habituelle : cet hôte est lui-même une VM sans",
|
||
"en": "Usual cause: this host is itself a VM without nested",
|
||
},
|
||
"virtualization. Check: systemd-detect-virt": {
|
||
"fr": "virtualisation imbriquée. Vérifier : systemd-detect-virt",
|
||
"en": "virtualization. Check: systemd-detect-virt",
|
||
},
|
||
"Unknown timezone, keeping": {
|
||
"fr": "Fuseau inconnu, on garde",
|
||
"en": "Unknown timezone, keeping",
|
||
},
|
||
"none": {
|
||
"fr": "aucune",
|
||
"en": "none",
|
||
},
|
||
"No SSH key found. Set a password instead? (Y/n): ": {
|
||
"fr": "Aucune clé SSH trouvée. Définir un mot de passe ? (O/n) : ",
|
||
"en": "No SSH key found. Set a password instead? (Y/n): ",
|
||
},
|
||
"Overwrite existing VM disk if present? (y/N): ": {
|
||
"fr": "Écraser le disque de la VM s'il existe ? (o/N, défaut : non) : ",
|
||
"en": "Overwrite existing VM disk if present? (y/N, default: no): ",
|
||
},
|
||
"Verify SHA256 after download? (y/N): ": {
|
||
"fr": "Vérifier le SHA256 après téléchargement ? (o/N, défaut : non) : ",
|
||
"en": "Verify SHA256 after download? (y/N, default: no): ",
|
||
},
|
||
"QEMU - Sample dry-run (demo-vm, Ubuntu 24.04)": {
|
||
"fr": "🧰 QEMU - Exemple dry-run (demo-vm, Ubuntu 24.04)",
|
||
"en": "🧰 QEMU - Sample dry-run (demo-vm, Ubuntu 24.04)",
|
||
},
|
||
# QEMU - statistics screen
|
||
"Statistics (installs, durations, VMs)": {
|
||
"fr": "📊 Statistiques (installations, durées, VM)",
|
||
"en": "📊 Statistics (installs, durations, VMs)",
|
||
},
|
||
"QEMU statistics": {"fr": "Statistiques QEMU", "en": "QEMU statistics"},
|
||
"No installation recorded yet.": {
|
||
"fr": "Aucune installation enregistrée pour l'instant.",
|
||
"en": "No installation recorded yet.",
|
||
},
|
||
"Installations": {"fr": "Installations", "en": "Installations"},
|
||
"Total": {"fr": "Total", "en": "Total"},
|
||
"succeeded": {"fr": "réussies", "en": "succeeded"},
|
||
"failed": {"fr": "échouées", "en": "failed"},
|
||
"Period": {"fr": "Période", "en": "Period"},
|
||
"days": {"fr": "jours", "en": "days"},
|
||
"Median duration": {"fr": "Durée médiane", "en": "Median duration"},
|
||
"min": {"fr": "min", "en": "min"},
|
||
"max": {"fr": "max", "en": "max"},
|
||
"Cumulated time": {"fr": "Temps cumulé", "en": "Cumulated time"},
|
||
"By distribution": {"fr": "Par distribution", "en": "By distribution"},
|
||
"By version": {"fr": "Par version", "en": "By version"},
|
||
"By architecture": {"fr": "Par architecture", "en": "By architecture"},
|
||
"Virtual machines": {
|
||
"fr": "Machines virtuelles",
|
||
"en": "Virtual machines",
|
||
},
|
||
"Defined": {"fr": "Définies", "en": "Defined"},
|
||
"running": {"fr": "en cours", "en": "running"},
|
||
"stopped": {"fr": "arrêtées", "en": "stopped"},
|
||
"Disk used": {"fr": "Disque utilisé", "en": "Disk used"},
|
||
"image": {"fr": "image", "en": "image"},
|
||
"failure": {"fr": "échec", "en": "failure"},
|
||
"Reset the statistics": {
|
||
"fr": "Réinitialiser les statistiques",
|
||
"en": "Reset the statistics",
|
||
},
|
||
"Nothing to reset.": {"fr": "Rien à effacer.", "en": "Nothing to reset."},
|
||
"Erase": {"fr": "Effacer", "en": "Erase"},
|
||
"recorded runs": {"fr": "runs enregistrés", "en": "recorded runs"},
|
||
"runs erased": {"fr": "runs effacés", "en": "runs erased"},
|
||
"Cancelled.": {"fr": "Annulé.", "en": "Cancelled."},
|
||
# Database migration - resume menu
|
||
"Migration in progress": {
|
||
"fr": "Migration en cours",
|
||
"en": "Migration in progress",
|
||
},
|
||
"File": {"fr": "Fichier", "en": "File"},
|
||
"Database": {"fr": "Base", "en": "Database"},
|
||
"Target": {"fr": "Cible", "en": "Target"},
|
||
"Started": {"fr": "Démarrée", "en": "Started"},
|
||
"Steps": {"fr": "Étapes", "en": "Steps"},
|
||
"Prepare the environment": {
|
||
"fr": "Préparer l'environnement",
|
||
"en": "Prepare the environment",
|
||
},
|
||
"Restore and neutralize the database": {
|
||
"fr": "Restaurer et neutraliser la base",
|
||
"en": "Restore and neutralize the database",
|
||
},
|
||
"Update all addons": {
|
||
"fr": "Mettre à jour tous les modules",
|
||
"en": "Update all addons",
|
||
},
|
||
"Clean up before data migration": {
|
||
"fr": "Nettoyer avant la migration des données",
|
||
"en": "Clean up before data migration",
|
||
},
|
||
"Upgrade version by version (OpenUpgrade)": {
|
||
"fr": "Monter de version en version (OpenUpgrade)",
|
||
"en": "Upgrade version by version (OpenUpgrade)",
|
||
},
|
||
"not started": {"fr": "non démarrée", "en": "not started"},
|
||
"done": {"fr": "terminée", "en": "done"},
|
||
"partially done": {"fr": "partielle", "en": "partially done"},
|
||
"version bumps migrated": {
|
||
"fr": "montées de version faites",
|
||
"en": "version bumps migrated",
|
||
},
|
||
"Continue where it stopped": {
|
||
"fr": "Continuer là où ça s'est arrêté",
|
||
"en": "Continue where it stopped",
|
||
},
|
||
"Replay from that step": {
|
||
"fr": "Reprendre à partir de cette étape",
|
||
"en": "Replay from that step",
|
||
},
|
||
"erases the progression of that step and the next ones": {
|
||
"fr": "efface la progression de cette étape et des suivantes",
|
||
"en": "erases the progression of that step and the next ones",
|
||
},
|
||
"New migration, erase everything": {
|
||
"fr": "Nouvelle migration, tout effacer",
|
||
"en": "New migration, erase everything",
|
||
},
|
||
"Keep the zip only, ask every question again": {
|
||
"fr": "Garder seulement le zip, reposer toutes les questions",
|
||
"en": "Keep the zip only, ask every question again",
|
||
},
|
||
"Your choice": {"fr": "Votre choix", "en": "Your choice"},
|
||
"Unknown choice, continuing where it stopped": {
|
||
"fr": "Choix inconnu, on continue là où ça s'est arrêté",
|
||
"en": "Unknown choice, continuing where it stopped",
|
||
},
|
||
"Replaying from step": {
|
||
"fr": "Reprise à partir de l'étape",
|
||
"en": "Replaying from step",
|
||
},
|
||
"Replay the upgrade from version N": {
|
||
"fr": "Reprendre la montée à partir de la version N",
|
||
"en": "Replay the upgrade from version N",
|
||
},
|
||
"rebuilds the intermediate database": {
|
||
"fr": "recrée la base intermédiaire",
|
||
"en": "rebuilds the intermediate database",
|
||
},
|
||
"Unknown version": {"fr": "Version inconnue", "en": "Unknown version"},
|
||
"The progression file is invalid, ignoring it": {
|
||
"fr": "Le fichier de progression est invalide, on l'ignore",
|
||
"en": "The progression file is invalid, ignoring it",
|
||
},
|
||
# --- Menu Execute › Analyse ---
|
||
# L'émoji vit dans la valeur, jamais dans la clé. Deux clés distinctes,
|
||
# comme « Data » / « Database » : l'entrée de menu porte l'émoji,
|
||
# l'étiquette du fil d'Ariane est nue — _todo_telemetry_tui traduit le
|
||
# dernier segment du chemin, et un émoji y détonnerait.
|
||
"Analyse - Odoo database analysis": {
|
||
"fr": "🔬 Analyse - Analyse de base de données Odoo",
|
||
"en": "🔬 Analyse - Odoo database analysis",
|
||
},
|
||
"Analyse": {"fr": "Analyse", "en": "Analysis"},
|
||
"Analyse a database. Reading never writes.": {
|
||
"fr": "Analyser une base ; la lecture n'écrit jamais.",
|
||
"en": "Analyse a database. Reading never writes.",
|
||
},
|
||
"About to install into": {
|
||
"fr": "Sur le point d'installer dans",
|
||
"en": "About to install into",
|
||
},
|
||
"Cannot install from here.": {
|
||
"fr": "Installation impossible d'ici.",
|
||
"en": "Cannot install from here.",
|
||
},
|
||
"Enter = cancel": {
|
||
"fr": "Entrée = annuler",
|
||
"en": "Enter = cancel",
|
||
},
|
||
"Go ahead?": {
|
||
"fr": "On y va ?",
|
||
"en": "Go ahead?",
|
||
},
|
||
"Ignored, not in the list:": {
|
||
"fr": "Ignorés, absents de la liste :",
|
||
"en": "Ignored, not in the list:",
|
||
},
|
||
"Install some of the": {
|
||
"fr": "Installer une partie des",
|
||
"en": "Install some of the",
|
||
},
|
||
"Numbers, space separated:": {
|
||
"fr": "Numéros, séparés par des espaces :",
|
||
"en": "Numbers, space separated:",
|
||
},
|
||
"every one of them": {
|
||
"fr": "tous",
|
||
"en": "every one of them",
|
||
},
|
||
"need repair first": {
|
||
"fr": "à réparer d'abord",
|
||
"en": "need repair first",
|
||
},
|
||
"suggested module(s) waiting in this database?": {
|
||
"fr": "module(s) suggéré(s) qui attendent dans cette base ?",
|
||
"en": "suggested module(s) waiting in this database?",
|
||
},
|
||
"Analyse a database, without ever writing to it!": {
|
||
"fr": "Analyser une base, sans jamais y écrire !",
|
||
"en": "Analyse a database, without ever writing to it!",
|
||
},
|
||
# Les icônes du sous-menu Analyse. Elles sont réservées d'avance pour la
|
||
# famille entière — 🧱 index, 🎈 ballonnement, 📎 pièces jointes,
|
||
# 🔗 ir_model_data — pour qu'ajouter un outil ne demande pas d'en
|
||
# rechercher une libre, et que deux outils voisins ne se ressemblent pas.
|
||
"Structure": {"fr": "🗄 Structure", "en": "🗄 Structure"},
|
||
"Tables and database size": {
|
||
"fr": "📏 Tables et poids de la base",
|
||
"en": "📏 Tables and database size",
|
||
},
|
||
"Customisation": {"fr": "🎭 Personnalisation", "en": "🎭 Customisation"},
|
||
"Customised views, website copies included": {
|
||
"fr": "🖼 Vues personnalisées, copies de site web comprises",
|
||
"en": "🖼 Customised views, website copies included",
|
||
},
|
||
"Analysis failed: ": {
|
||
"fr": "L'analyse a échoué : ",
|
||
"en": "Analysis failed: ",
|
||
},
|
||
"Full list and JSON output:": {
|
||
"fr": "Liste complète et sortie JSON :",
|
||
"en": "Full list and JSON output:",
|
||
},
|
||
"A backup holds no registry, so nothing was compared with the module"
|
||
" source. The classification above needs none; only the differences do."
|
||
" Restore it, or run this on the database.": {
|
||
"fr": "Une sauvegarde n'a pas de registre, donc rien n'a été comparé"
|
||
" avec la source du module. Le classement ci-dessus n'en a pas besoin"
|
||
" ; seuls les écarts en ont. Restaurez-la, ou lancez ceci sur la base.",
|
||
"en": "A backup holds no registry, so nothing was compared with the"
|
||
" module source. The classification above needs none; only the"
|
||
" differences do. Restore it, or run this on the database.",
|
||
},
|
||
"Could not archive the previous log": {
|
||
"fr": "Impossible d'archiver le journal précédent",
|
||
"en": "Could not archive the previous log",
|
||
},
|
||
"Previous migration log kept in": {
|
||
"fr": "Journal de la migration précédente conservé dans",
|
||
"en": "Previous migration log kept in",
|
||
},
|
||
"done early, before the neutralization": {
|
||
"fr": "faite plus tôt, avant la neutralisation",
|
||
"en": "done early, before the neutralization",
|
||
},
|
||
"compare each website copy with the module view it shadows": {
|
||
"fr": "comparer chaque copie de site web à la vue de module qu'elle"
|
||
" masque",
|
||
"en": "compare each website copy with the module view it shadows",
|
||
},
|
||
"Compare the website copies with the view they shadow": {
|
||
"fr": "🪞 Comparer les copies de site web à la vue qu'elles masquent",
|
||
"en": "🪞 Compare the website copies with the view they shadow",
|
||
},
|
||
"website copies compared with their module view,": {
|
||
"fr": "copies de site web comparées à leur vue de module,",
|
||
"en": "website copies compared with their module view,",
|
||
},
|
||
"differ.": {"fr": "diffèrent.", "en": "differ."},
|
||
"What do you want to do with these COW copies?": {
|
||
"fr": "Que voulez-vous faire de ces copies COW ?",
|
||
"en": "What do you want to do with these COW copies?",
|
||
},
|
||
"Enter = decide at the version bump": {
|
||
"fr": "Entrée = décider au palier de version",
|
||
"en": "Enter = decide at the version bump",
|
||
},
|
||
"what each copy holds": {
|
||
"fr": "ce que chaque copie porte",
|
||
"en": "what each copy holds",
|
||
},
|
||
"why it breaks": {
|
||
"fr": "pourquoi ça casse",
|
||
"en": "why it breaks",
|
||
},
|
||
"full screen": {
|
||
"fr": "plein écran",
|
||
"en": "full screen",
|
||
},
|
||
"neutralize now, reversible": {
|
||
"fr": "neutraliser maintenant, réversible",
|
||
"en": "neutralize now, reversible",
|
||
},
|
||
"Undo with": {
|
||
"fr": "Annuler avec",
|
||
"en": "Undo with",
|
||
},
|
||
"Nothing decided": {
|
||
"fr": "Rien de décidé",
|
||
"en": "Nothing decided",
|
||
},
|
||
"the migration will ask again at the version bump.": {
|
||
"fr": "la migration reposera la question au palier de version.",
|
||
"en": "the migration will ask again at the version bump.",
|
||
},
|
||
"Target version directory not found": {
|
||
"fr": "Répertoire de la version cible introuvable",
|
||
"en": "Target version directory not found",
|
||
},
|
||
"No website COW view changes shape in": {
|
||
"fr": "Aucune vue COW de site ne change de forme dans",
|
||
"en": "No website COW view changes shape in",
|
||
},
|
||
"website COW view(s) will break when moving to": {
|
||
"fr": "vue(s) COW de site casseront au passage à",
|
||
"en": "website COW view(s) will break when moving to",
|
||
},
|
||
"the copy keeps an arch whose shape no longer matches what": {
|
||
"fr": "la copie garde une arch dont la forme ne correspond plus à ce que",
|
||
"en": "the copy keeps an arch whose shape no longer matches what",
|
||
},
|
||
"the target module view expects.": {
|
||
"fr": "la vue module cible attend.",
|
||
"en": "the target module view expects.",
|
||
},
|
||
"The migration offers to neutralize them, and shows what": {
|
||
"fr": "La migration propose de les neutraliser, et montre ce que",
|
||
"en": "The migration offers to neutralize them, and shows what",
|
||
},
|
||
"each copy holds before you answer. To look now:": {
|
||
"fr": "chaque copie porte avant que vous répondiez. Pour regarder maintenant :",
|
||
"en": "each copy holds before you answer. To look now:",
|
||
},
|
||
"reversible with --restore": {
|
||
"fr": "réversible avec --restore",
|
||
"en": "reversible with --restore",
|
||
},
|
||
"Or by hand. To neutralize a copy, rename its key": {
|
||
"fr": "Ou à la main. Pour neutraliser une copie, renommer sa clé",
|
||
"en": "Or by hand. To neutralize a copy, rename its key",
|
||
},
|
||
"an unmatched key is never paired with the": {
|
||
"fr": "une clé sans correspondance n'est jamais appariée à la",
|
||
"en": "an unmatched key is never paired with the",
|
||
},
|
||
"module view, so the copy never receives the new": {
|
||
"fr": "vue module, la copie ne reçoit donc jamais le nouveau",
|
||
"en": "module view, so the copy never receives the new",
|
||
},
|
||
"Setting active=false alone is NOT enough:": {
|
||
"fr": "Mettre active=false seul ne suffit PAS :",
|
||
"en": "Setting active=false alone is NOT enough:",
|
||
},
|
||
"an inactive copy keeping the same key still shadows it.": {
|
||
"fr": "une copie inactive gardant la même clé la masque toujours.",
|
||
"en": "an inactive copy keeping the same key still shadows it.",
|
||
},
|
||
"COW view(s) belong to a module absent from": {
|
||
"fr": "vue(s) COW appartiennent à un module absent de",
|
||
"en": "COW view(s) belong to a module absent from",
|
||
},
|
||
"COW view(s) are pages or records made in the website": {
|
||
"fr": "vue(s) COW sont des pages ou des enregistrements faits dans",
|
||
"en": "COW view(s) are pages or records made in the website",
|
||
},
|
||
"editor (no module view of that name): not at risk.": {
|
||
"fr": "l'éditeur de site (aucune vue module de ce nom) : hors de danger.",
|
||
"en": "editor (no module view of that name): not at risk.",
|
||
},
|
||
"Use -v to list them.": {
|
||
"fr": "Utiliser -v pour les lister.",
|
||
"en": "Use -v to list them.",
|
||
},
|
||
"No view with this prefix on": {
|
||
"fr": "Aucune vue avec ce préfixe sur",
|
||
"en": "No view with this prefix on",
|
||
},
|
||
"archived COW view(s) on": {
|
||
"fr": "vue(s) COW archivées sur",
|
||
"en": "archived COW view(s) on",
|
||
},
|
||
"Their arch is intact. Restore them all with --restore,": {
|
||
"fr": "Leur arch est intacte. Toutes les restaurer avec --restore,",
|
||
"en": "Their arch is intact. Restore them all with --restore,",
|
||
},
|
||
"once the module view they shadow has the right shape.": {
|
||
"fr": "une fois que la vue module qu'elles masquent a la bonne forme.",
|
||
"en": "once the module view they shadow has the right shape.",
|
||
},
|
||
"COW view(s) restored on": {
|
||
"fr": "vue(s) COW restaurées sur",
|
||
"en": "COW view(s) restored on",
|
||
},
|
||
"No website COW view to neutralize.": {
|
||
"fr": "Aucune vue COW de site à neutraliser.",
|
||
"en": "No website COW view to neutralize.",
|
||
},
|
||
"website COW view(s) would break the bump": {
|
||
"fr": "vue(s) COW de site casseraient le palier",
|
||
"en": "website COW view(s) would break the bump",
|
||
},
|
||
"to": {
|
||
"fr": "vers",
|
||
"en": "to",
|
||
},
|
||
"Dry-run. Add --apply to rename their key to": {
|
||
"fr": "Simulation. Ajouter --apply pour renommer leur clé en",
|
||
"en": "Dry-run. Add --apply to rename their key to",
|
||
},
|
||
"and deactivate them. Reversible": {
|
||
"fr": "et les désactiver. Réversible",
|
||
"en": "and deactivate them. Reversible",
|
||
},
|
||
"with --restore; the arch stays in database.": {
|
||
"fr": "avec --restore ; l'arch reste en base.",
|
||
"en": "with --restore; the arch stays in database.",
|
||
},
|
||
"COW view(s) neutralized (key prefixed with": {
|
||
"fr": "vue(s) COW neutralisées (clé préfixée par",
|
||
"en": "COW view(s) neutralized (key prefixed with",
|
||
},
|
||
"deactivated). The arch is kept as an": {
|
||
"fr": "désactivées). L'arch est conservée comme",
|
||
"en": "deactivated). The arch is kept as an",
|
||
},
|
||
"archive; use --restore to undo.": {
|
||
"fr": "archive ; utiliser --restore pour annuler.",
|
||
"en": "archive; use --restore to undo.",
|
||
},
|
||
"target inherits, copy holds a standalone template": {
|
||
"fr": "la cible hérite, la copie porte un modèle autonome",
|
||
"en": "target inherits, copy holds a standalone template",
|
||
},
|
||
"target is a root view, copy holds inheritance specs": {
|
||
"fr": "la cible est une vue racine, la copie porte des specs d'héritage",
|
||
"en": "target is a root view, copy holds inheritance specs",
|
||
},
|
||
"No module view carries this key, so there is nothing to": {
|
||
"fr": "Aucune vue module ne porte cette clé, il n'y a donc rien à",
|
||
"en": "No module view carries this key, so there is nothing to",
|
||
},
|
||
"compare: this copy is a page made in the website editor.": {
|
||
"fr": "comparer : cette copie est une page faite dans l'éditeur de site.",
|
||
"en": "compare: this copy is a page made in the website editor.",
|
||
},
|
||
"The copy is identical to the module view.": {
|
||
"fr": "La copie est identique à la vue module.",
|
||
"en": "The copy is identical to the module view.",
|
||
},
|
||
"line(s) added": {
|
||
"fr": "ligne(s) ajoutée(s)",
|
||
"en": "line(s) added",
|
||
},
|
||
"removed": {
|
||
"fr": "retirée(s)",
|
||
"en": "removed",
|
||
},
|
||
"this is what neutralizing gives up.": {
|
||
"fr": "c'est ce que la neutralisation abandonne.",
|
||
"en": "this is what neutralizing gives up.",
|
||
},
|
||
"the module no longer declares this template": {
|
||
"fr": "le module ne déclare plus ce modèle",
|
||
"en": "the module no longer declares this template",
|
||
},
|
||
"inheritance specs (needs inherit_id)": {
|
||
"fr": "des specs d'héritage (exige inherit_id)",
|
||
"en": "inheritance specs (needs inherit_id)",
|
||
},
|
||
"a standalone template": {
|
||
"fr": "un modèle autonome",
|
||
"en": "a standalone template",
|
||
},
|
||
"Odoo changing the shape of its own template is NOT the": {
|
||
"fr": "Qu'Odoo change la forme de son propre modèle n'est PAS le",
|
||
"en": "Odoo changing the shape of its own template is NOT the",
|
||
},
|
||
"problem: on a database without a copy, the module upgrade": {
|
||
"fr": "problème : sur une base sans copie, la mise à jour du module",
|
||
"en": "problem: on a database without a copy, the module upgrade",
|
||
},
|
||
"rewrites the view and nothing breaks. It breaks here because": {
|
||
"fr": "réécrit la vue et rien ne casse. Ça casse ici parce qu'une",
|
||
"en": "rewrites the view and nothing breaks. It breaks here because",
|
||
},
|
||
"a COPY exists and froze the old shape — the copy follows the": {
|
||
"fr": "COPIE existe et a figé l'ancienne forme — la copie suit le",
|
||
"en": "a COPY exists and froze the old shape — the copy follows the",
|
||
},
|
||
"module and becomes an extension, while still holding a": {
|
||
"fr": "module et devient une extension, tout en portant encore un",
|
||
"en": "module and becomes an extension, while still holding a",
|
||
},
|
||
"standalone template. Odoo then applies that template as an": {
|
||
"fr": "modèle autonome. Odoo applique alors ce modèle comme une",
|
||
"en": "standalone template. Odoo then applies that template as an",
|
||
},
|
||
"inheritance spec and stops on « cannot be located in parent": {
|
||
"fr": "spec d'héritage et s'arrête sur « cannot be located in parent",
|
||
"en": "inheritance spec and stops on « cannot be located in parent",
|
||
},
|
||
"view ».": {
|
||
"fr": "view ».",
|
||
"en": "view ».",
|
||
},
|
||
"This copy has no module view of that name: it is a page": {
|
||
"fr": "Cette copie n'a aucune vue module de ce nom : c'est une page",
|
||
"en": "This copy has no module view of that name: it is a page",
|
||
},
|
||
"made in the website editor, and nothing holds its content.": {
|
||
"fr": "faite dans l'éditeur de site, et rien d'autre ne porte son contenu.",
|
||
"en": "made in the website editor, and nothing holds its content.",
|
||
},
|
||
"This copy is IDENTICAL to the module view it shadows: it": {
|
||
"fr": "Cette copie est IDENTIQUE à la vue module qu'elle masque : elle",
|
||
"en": "This copy is IDENTICAL to the module view it shadows: it",
|
||
},
|
||
"holds no customization, so neutralizing it loses nothing.": {
|
||
"fr": "ne porte aucune personnalisation, la neutraliser ne perd rien.",
|
||
"en": "holds no customization, so neutralizing it loses nothing.",
|
||
},
|
||
"This copy differs from the module view by": {
|
||
"fr": "Cette copie diffère de la vue module de",
|
||
"en": "This copy differs from the module view by",
|
||
},
|
||
"line(s):": {
|
||
"fr": "ligne(s) :",
|
||
"en": "line(s):",
|
||
},
|
||
"that is the customization, and all neutralizing gives up.": {
|
||
"fr": "c'est la personnalisation, et tout ce que la neutralisation abandonne.",
|
||
"en": "that is the customization, and all neutralizing gives up.",
|
||
},
|
||
"Run without --shape to read it.": {
|
||
"fr": "Lancer sans --shape pour la lire.",
|
||
"en": "Run without --shape to read it.",
|
||
},
|
||
"No website COW view is at risk.": {
|
||
"fr": "Aucune vue COW de site n'est en danger.",
|
||
"en": "No website COW view is at risk.",
|
||
},
|
||
"No COW copy has drifted from its module view.": {
|
||
"fr": "Aucune copie COW n'a dérivé de sa vue module.",
|
||
"en": "No COW copy has drifted from its module view.",
|
||
},
|
||
"COW copy(ies) drifted from their module": {
|
||
"fr": "copie(s) COW ont dérivé de leur vue",
|
||
"en": "COW copy(ies) drifted from their module",
|
||
},
|
||
"view in": {
|
||
"fr": "module dans",
|
||
"en": "view in",
|
||
},
|
||
"Odoo surfaces this when the module view is rewritten (a": {
|
||
"fr": "Odoo le fait apparaître quand la vue module est réécrite (un",
|
||
"en": "Odoo surfaces this when the module view is rewritten (a",
|
||
},
|
||
"version bump) or when the page is rendered.": {
|
||
"fr": "palier de version) ou quand la page est rendue.",
|
||
"en": "version bump) or when the page is rendered.",
|
||
},
|
||
"NO module view with this key": {
|
||
"fr": "AUCUNE vue module avec cette clé",
|
||
"en": "NO module view with this key",
|
||
},
|
||
"child": {
|
||
"fr": "enfant",
|
||
"en": "child",
|
||
},
|
||
"cannot apply": {
|
||
"fr": "ne peut s'appliquer",
|
||
"en": "cannot apply",
|
||
},
|
||
"Nothing changed. Re-run with --reset <key> --apply to": {
|
||
"fr": "Rien n'a changé. Relancer avec --reset <clé> --apply pour",
|
||
"en": "Nothing changed. Re-run with --reset <key> --apply to",
|
||
},
|
||
"reset a copy onto its module view.": {
|
||
"fr": "réinitialiser une copie sur sa vue module.",
|
||
"en": "reset a copy onto its module view.",
|
||
},
|
||
"no module view to reset onto, skipped.": {
|
||
"fr": "aucune vue module sur laquelle réinitialiser, ignorée.",
|
||
"en": "no module view to reset onto, skipped.",
|
||
},
|
||
"dry-run": {
|
||
"fr": "simulation",
|
||
"en": "dry-run",
|
||
},
|
||
"would reset": {
|
||
"fr": "réinitialiserait",
|
||
"en": "would reset",
|
||
},
|
||
"onto": {
|
||
"fr": "sur",
|
||
"en": "onto",
|
||
},
|
||
"reset": {
|
||
"fr": "réinitialisé",
|
||
"en": "reset",
|
||
},
|
||
"previous arch saved to": {
|
||
"fr": "arch précédente sauvegardée dans",
|
||
"en": "previous arch saved to",
|
||
},
|
||
"copy(ies) reset. Re-apply any real customisation": {
|
||
"fr": "copie(s) réinitialisée(s). Réappliquer toute vraie personnalisation",
|
||
"en": "copy(ies) reset. Re-apply any real customisation",
|
||
},
|
||
"as an INHERITING view, not a copy, so it cannot go stale": {
|
||
"fr": "comme une vue HÉRITANTE, pas une copie, pour qu'elle ne périme plus",
|
||
"en": "as an INHERITING view, not a copy, so it cannot go stale",
|
||
},
|
||
"again.": {
|
||
"fr": "à l'avenir.",
|
||
"en": "again.",
|
||
},
|
||
"lxml is required to resolve the xpath expressions.": {
|
||
"fr": "lxml est requis pour résoudre les expressions xpath.",
|
||
"en": "lxml is required to resolve the xpath expressions.",
|
||
},
|
||
"COW view(s) recorded in": {
|
||
"fr": "vue(s) COW enregistrées dans",
|
||
"en": "COW view(s) recorded in",
|
||
},
|
||
"COW view(s) disappeared": {
|
||
"fr": "vue(s) COW ont disparu",
|
||
"en": "COW view(s) disappeared",
|
||
},
|
||
"COW view(s) appeared": {
|
||
"fr": "vue(s) COW sont apparues",
|
||
"en": "COW view(s) appeared",
|
||
},
|
||
"arch rewritten": {
|
||
"fr": "arch réécrite",
|
||
"en": "arch rewritten",
|
||
},
|
||
"COW view(s) changed": {
|
||
"fr": "vue(s) COW ont changé",
|
||
"en": "COW view(s) changed",
|
||
},
|
||
"No change on the website COW views.": {
|
||
"fr": "Aucun changement sur les vues COW de site.",
|
||
"en": "No change on the website COW views.",
|
||
},
|
||
"Welcome to the Odoo database upgrade with ERPLibre": {
|
||
"fr": "Bienvenue dans la mise à niveau de base de données Odoo avec ERPLibre",
|
||
"en": "Welcome to the Odoo database upgrade with ERPLibre",
|
||
},
|
||
"Select the zip file of your database backup.": {
|
||
"fr": "Sélectionnez le fichier zip de votre sauvegarde de base de données.",
|
||
"en": "Select the zip file of your database backup.",
|
||
},
|
||
"Give the path of the file, or empty to use a file": {
|
||
"fr": "Donnez le chemin du fichier, ou rien pour utiliser un",
|
||
"en": "Give the path of the file, or empty to use a file",
|
||
},
|
||
"browser, or type": {
|
||
"fr": "navigateur de fichiers, ou tapez",
|
||
"en": "browser, or type",
|
||
},
|
||
"to download from production": {
|
||
"fr": "pour télécharger depuis la production",
|
||
"en": "to download from production",
|
||
},
|
||
"Cannot retrieve the database from remote, please retry the migration.": {
|
||
"fr": "Impossible de récupérer la base distante, veuillez relancer la migration.",
|
||
"en": "Cannot retrieve the database from remote, please retry the migration.",
|
||
},
|
||
"Open file": {
|
||
"fr": "Ouverture du fichier",
|
||
"en": "Open file",
|
||
},
|
||
"Detected Odoo CE version": {
|
||
"fr": "Version Odoo CE détectée",
|
||
"en": "Detected Odoo CE version",
|
||
},
|
||
"Which version do you want to upgrade to?": {
|
||
"fr": "Vers quelle version voulez-vous migrer ?",
|
||
"en": "Which version do you want to upgrade to?",
|
||
},
|
||
"Search the Odoo version": {
|
||
"fr": "Recherche de la version Odoo",
|
||
"en": "Search the Odoo version",
|
||
},
|
||
"Find the right environment, read the .zip file": {
|
||
"fr": "Recherche du bon environnement, lecture du fichier .zip",
|
||
"en": "Find the right environment, read the .zip file",
|
||
},
|
||
"Would you like to install": {
|
||
"fr": "Voulez-vous installer",
|
||
"en": "Would you like to install",
|
||
},
|
||
"You need an installed system before": {
|
||
"fr": "Il faut un système installé avant de",
|
||
"en": "You need an installed system before",
|
||
},
|
||
"continuing, check your Odoo installation.": {
|
||
"fr": "continuer, vérifiez votre installation Odoo.",
|
||
"en": "continuing, check your Odoo installation.",
|
||
},
|
||
"Install the environment if missing": {
|
||
"fr": "Installation de l'environnement s'il manque",
|
||
"en": "Install the environment if missing",
|
||
},
|
||
"Search missing modules": {
|
||
"fr": "Recherche des modules manquants",
|
||
"en": "Search missing modules",
|
||
},
|
||
"Install the missing modules, search for them or": {
|
||
"fr": "Installer les modules manquants, les chercher ou",
|
||
"en": "Install the missing modules, search for them or",
|
||
},
|
||
"ask to uninstall them (can break data)": {
|
||
"fr": "demander à les désinstaller (peut casser des données)",
|
||
"en": "ask to uninstall them (can break data)",
|
||
},
|
||
"Cannot set up the environment to begin.": {
|
||
"fr": "Impossible de préparer l'environnement pour commencer.",
|
||
"en": "Cannot set up the environment to begin.",
|
||
},
|
||
"Missing module": {
|
||
"fr": "Module manquant",
|
||
"en": "Missing module",
|
||
},
|
||
"Duplicate module": {
|
||
"fr": "Module en double",
|
||
"en": "Duplicate module",
|
||
},
|
||
"Missing or duplicate module detected at init,": {
|
||
"fr": "Module manquant ou en double détecté à l'init,",
|
||
"en": "Missing or duplicate module detected at init,",
|
||
},
|
||
"do you want to continue?": {
|
||
"fr": "voulez-vous continuer ?",
|
||
"en": "do you want to continue?",
|
||
},
|
||
"Missing or duplicate module detected at init, do": {
|
||
"fr": "Module manquant ou en double détecté à l'init,",
|
||
"en": "Missing or duplicate module detected at init, do",
|
||
},
|
||
"you want to continue?": {
|
||
"fr": "voulez-vous continuer ?",
|
||
"en": "you want to continue?",
|
||
},
|
||
"Which database name do you want to work with?": {
|
||
"fr": "Avec quel nom de base voulez-vous travailler ?",
|
||
"en": "Which database name do you want to work with?",
|
||
},
|
||
"Ignore the database neutralization": {
|
||
"fr": "Ignorer la neutralisation de la base",
|
||
"en": "Ignore the database neutralization",
|
||
},
|
||
"Working with database": {
|
||
"fr": "Travail sur la base",
|
||
"en": "Working with database",
|
||
},
|
||
"will copy": {
|
||
"fr": "va copier",
|
||
"en": "will copy",
|
||
},
|
||
"a file already exists, do you want to": {
|
||
"fr": "un fichier existe déjà, voulez-vous",
|
||
"en": "a file already exists, do you want to",
|
||
},
|
||
"continue?": {
|
||
"fr": "continuer ?",
|
||
"en": "continue?",
|
||
},
|
||
"Restore the database": {
|
||
"fr": "Restauration de la base",
|
||
"en": "Restore the database",
|
||
},
|
||
"Update all addons before neutralizing (already": {
|
||
"fr": "Mettre à jour tous les modules avant la neutralisation (déjà",
|
||
"en": "Update all addons before neutralizing (already",
|
||
},
|
||
"neutralized by Odoo if supported)": {
|
||
"fr": "neutralisée par Odoo si pris en charge)",
|
||
"en": "neutralized by Odoo if supported)",
|
||
},
|
||
"Do you need to upgrade before neutralizing the": {
|
||
"fr": "Faut-il mettre à jour avant de neutraliser la",
|
||
"en": "Do you need to upgrade before neutralizing the",
|
||
},
|
||
"database? Press enter to ignore": {
|
||
"fr": "base ? Entrée pour ignorer",
|
||
"en": "database? Press enter to ignore",
|
||
},
|
||
"Update the database before neutralizing, by module": {
|
||
"fr": "Mise à jour de la base avant neutralisation, par module",
|
||
"en": "Update the database before neutralizing, by module",
|
||
},
|
||
"Neutralize the database": {
|
||
"fr": "Neutralisation de la base",
|
||
"en": "Neutralize the database",
|
||
},
|
||
"Modules to uninstall before the migration": {
|
||
"fr": "Modules à désinstaller avant la migration",
|
||
"en": "Modules to uninstall before the migration",
|
||
},
|
||
"Uninstall modules": {
|
||
"fr": "Désinstallation des modules",
|
||
"en": "Uninstall modules",
|
||
},
|
||
"Install modules": {
|
||
"fr": "Installation des modules",
|
||
"en": "Install modules",
|
||
},
|
||
"Go to Settings / Technical / Cleanup... / Purge and": {
|
||
"fr": "Aller dans Configuration / Technique / Nettoyage... / Purger et",
|
||
"en": "Go to Settings / Technical / Cleanup... / Purge and",
|
||
},
|
||
"purge the obsolete modules": {
|
||
"fr": "purger les modules obsolètes",
|
||
"en": "purge the obsolete modules",
|
||
},
|
||
"Press enter to continue step 3": {
|
||
"fr": "Entrée pour continuer l'étape 3",
|
||
"en": "Press enter to continue step 3",
|
||
},
|
||
"Inspect zip": {
|
||
"fr": "Inspection du zip",
|
||
"en": "Inspect zip",
|
||
},
|
||
"Import database from zip": {
|
||
"fr": "Import de la base depuis le zip",
|
||
"en": "Import database from zip",
|
||
},
|
||
"Succeed update all addons": {
|
||
"fr": "Mise à jour de tous les modules",
|
||
"en": "Succeed update all addons",
|
||
},
|
||
"Clean up database before data migration": {
|
||
"fr": "Nettoyage de la base avant la migration des données",
|
||
"en": "Clean up database before data migration",
|
||
},
|
||
"Upgrade version with OpenUpgrade": {
|
||
"fr": "Montée de version avec OpenUpgrade",
|
||
"en": "Upgrade version with OpenUpgrade",
|
||
},
|
||
"Cleaning up database after upgrade": {
|
||
"fr": "Nettoyage de la base après la montée de version",
|
||
"en": "Cleaning up database after upgrade",
|
||
},
|
||
"Migration finished": {
|
||
"fr": "Migration terminée",
|
||
"en": "Migration finished",
|
||
},
|
||
"Clone to Odoo": {
|
||
"fr": "Clonage vers Odoo",
|
||
"en": "Clone to Odoo",
|
||
},
|
||
"FAILED (status": {
|
||
"fr": "ÉCHEC (statut",
|
||
"en": "FAILED (status",
|
||
},
|
||
"Stopping:": {
|
||
"fr": "Arrêt :",
|
||
"en": "Stopping:",
|
||
},
|
||
"is not usable.": {
|
||
"fr": "n'est pas utilisable.",
|
||
"en": "is not usable.",
|
||
},
|
||
"Clone Odoo": {
|
||
"fr": "Clonage Odoo",
|
||
"en": "Clone Odoo",
|
||
},
|
||
"nothing": {
|
||
"fr": "rien",
|
||
"en": "nothing",
|
||
},
|
||
"Switch Odoo": {
|
||
"fr": "Bascule Odoo",
|
||
"en": "Switch Odoo",
|
||
},
|
||
"done with update": {
|
||
"fr": "terminée avec mise à jour",
|
||
"en": "done with update",
|
||
},
|
||
"Module upgrade Odoo": {
|
||
"fr": "Mise à jour des modules Odoo",
|
||
"en": "Module upgrade Odoo",
|
||
},
|
||
"Database upgrade Odoo": {
|
||
"fr": "Migration de la base Odoo",
|
||
"en": "Database upgrade Odoo",
|
||
},
|
||
"Modules to uninstall before Odoo": {
|
||
"fr": "Modules à désinstaller avant Odoo",
|
||
"en": "Modules to uninstall before Odoo",
|
||
},
|
||
"to redo the command": {
|
||
"fr": "pour refaire la commande",
|
||
"en": "to redo the command",
|
||
},
|
||
"Error detected, press enter to continue or": {
|
||
"fr": "Erreur détectée, Entrée pour continuer ou",
|
||
"en": "Error detected, press enter to continue or",
|
||
},
|
||
"to stop": {
|
||
"fr": "pour arrêter",
|
||
"en": "to stop",
|
||
},
|
||
"Clone done for Odoo": {
|
||
"fr": "Clonage terminé pour Odoo",
|
||
"en": "Clone done for Odoo",
|
||
},
|
||
"Clone already done for Odoo": {
|
||
"fr": "Clonage déjà fait pour Odoo",
|
||
"en": "Clone already done for Odoo",
|
||
},
|
||
"Switch already done for Odoo": {
|
||
"fr": "Bascule déjà faite pour Odoo",
|
||
"en": "Switch already done for Odoo",
|
||
},
|
||
"Switch done with update for Odoo": {
|
||
"fr": "Bascule terminée avec mise à jour pour Odoo",
|
||
"en": "Switch done with update for Odoo",
|
||
},
|
||
"Module upgrade done for Odoo": {
|
||
"fr": "Mise à jour des modules terminée pour Odoo",
|
||
"en": "Module upgrade done for Odoo",
|
||
},
|
||
"Module upgrade already done for Odoo": {
|
||
"fr": "Mise à jour des modules déjà faite pour Odoo",
|
||
"en": "Module upgrade already done for Odoo",
|
||
},
|
||
"Database upgrade done for Odoo": {
|
||
"fr": "Migration de la base terminée pour Odoo",
|
||
"en": "Database upgrade done for Odoo",
|
||
},
|
||
"Database upgrade already done for Odoo": {
|
||
"fr": "Migration de la base déjà faite pour Odoo",
|
||
"en": "Database upgrade already done for Odoo",
|
||
},
|
||
"Cloning to Odoo": {
|
||
"fr": "Clonage vers Odoo",
|
||
"en": "Cloning to Odoo",
|
||
},
|
||
"from": {
|
||
"fr": "depuis",
|
||
"en": "from",
|
||
},
|
||
"Duplicate module in Odoo": {
|
||
"fr": "Module en double dans Odoo",
|
||
"en": "Duplicate module in Odoo",
|
||
},
|
||
"Duplicate module error detected, handle it": {
|
||
"fr": "Erreur de module en double détectée, la traiter",
|
||
"en": "Duplicate module error detected, handle it",
|
||
},
|
||
"manually then press enter to continue.": {
|
||
"fr": "manuellement puis Entrée pour continuer.",
|
||
"en": "manually then press enter to continue.",
|
||
},
|
||
"Missing module error detected, missing in": {
|
||
"fr": "Erreur de module manquant détectée, manquant dans",
|
||
"en": "Missing module error detected, missing in",
|
||
},
|
||
"All of the list above": {
|
||
"fr": "Toute la liste ci-dessus",
|
||
"en": "All of the list above",
|
||
},
|
||
"Add an extra custom one": {
|
||
"fr": "Ajouter un module personnalisé",
|
||
"en": "Add an extra custom one",
|
||
},
|
||
"List the missing modules to delete,": {
|
||
"fr": "Énumérer les modules manquants à supprimer,",
|
||
"en": "List the missing modules to delete,",
|
||
},
|
||
"separated by commas. The others will be": {
|
||
"fr": "séparés par des virgules. Les autres seront",
|
||
"en": "separated by commas. The others will be",
|
||
},
|
||
"migrated": {
|
||
"fr": "migrés",
|
||
"en": "migrated",
|
||
},
|
||
"Migration fix for Odoo": {
|
||
"fr": "Correctif de migration pour Odoo",
|
||
"en": "Migration fix for Odoo",
|
||
},
|
||
"Migration fix done for Odoo": {
|
||
"fr": "Correctif de migration terminé pour Odoo",
|
||
"en": "Migration fix done for Odoo",
|
||
},
|
||
"No migration fix to run for Odoo": {
|
||
"fr": "Aucun correctif de migration à exécuter pour Odoo",
|
||
"en": "No migration fix to run for Odoo",
|
||
},
|
||
"Migration fix already done for Odoo": {
|
||
"fr": "Correctif de migration déjà fait pour Odoo",
|
||
"en": "Migration fix already done for Odoo",
|
||
},
|
||
"List the module names to delete,": {
|
||
"fr": "Énumérer les noms de modules à supprimer,",
|
||
"en": "List the module names to delete,",
|
||
},
|
||
"separated by commas": {
|
||
"fr": "séparés par des virgules",
|
||
"en": "separated by commas",
|
||
},
|
||
"Missing module error": {
|
||
"fr": "Erreur de module manquant",
|
||
"en": "Missing module error",
|
||
},
|
||
"Duplicate module error": {
|
||
"fr": "Erreur de module en double",
|
||
"en": "Duplicate module error",
|
||
},
|
||
"Module error": {
|
||
"fr": "Erreur de module",
|
||
"en": "Module error",
|
||
},
|
||
"Please validate the commits after the code": {
|
||
"fr": "Veuillez valider les commits après la migration",
|
||
"en": "Please validate the commits after the code",
|
||
},
|
||
"migration.": {
|
||
"fr": "du code.",
|
||
"en": "migration.",
|
||
},
|
||
"To show the repo status": {
|
||
"fr": "Pour afficher l'état des dépôts",
|
||
"en": "To show the repo status",
|
||
},
|
||
"Please validate this path in config.conf": {
|
||
"fr": "Veuillez valider ce chemin dans config.conf",
|
||
"en": "Please validate this path in config.conf",
|
||
},
|
||
"Database migration to Odoo": {
|
||
"fr": "Migration de la base vers Odoo",
|
||
"en": "Database migration to Odoo",
|
||
},
|
||
"is now half migrated: replaying the command on": {
|
||
"fr": "est maintenant à moitié migrée : rejouer la commande dessus",
|
||
"en": "is now half migrated: replaying the command on",
|
||
},
|
||
"it would never recover, so it is NOT offered.": {
|
||
"fr": "ne s'en remettrait jamais, ce n'est donc PAS proposé.",
|
||
"en": "it would never recover, so it is NOT offered.",
|
||
},
|
||
"The clone step has been reset. Fix the": {
|
||
"fr": "L'étape de clonage a été réinitialisée. Corrigez la",
|
||
"en": "The clone step has been reset. Fix the",
|
||
},
|
||
"cause, then relaunch the migration and answer": {
|
||
"fr": "cause, puis relancez la migration et répondez",
|
||
"en": "cause, then relaunch the migration and answer",
|
||
},
|
||
"continue": {
|
||
"fr": "continuer",
|
||
"en": "continue",
|
||
},
|
||
"will be dropped and rebuilt from the previous": {
|
||
"fr": "sera supprimée et reconstruite depuis la version",
|
||
"en": "will be dropped and rebuilt from the previous",
|
||
},
|
||
"version before retrying.": {
|
||
"fr": "précédente avant de réessayer.",
|
||
"en": "version before retrying.",
|
||
},
|
||
"Do you want to upgrade all": {
|
||
"fr": "Voulez-vous tout mettre à jour",
|
||
"en": "Do you want to upgrade all",
|
||
},
|
||
"Press y/Y to upgrade all addons of the": {
|
||
"fr": "y/Y pour mettre à jour tous les modules de la",
|
||
"en": "Press y/Y to upgrade all addons of the",
|
||
},
|
||
"Open the server with Selenium": {
|
||
"fr": "Ouvrir le serveur avec Selenium",
|
||
"en": "Open the server with Selenium",
|
||
},
|
||
"Do you want to test this upgrade? Choose": {
|
||
"fr": "Voulez-vous tester cette migration ? Choisissez",
|
||
"en": "Do you want to test this upgrade? Choose",
|
||
},
|
||
"or press enter to ignore it": {
|
||
"fr": "ou Entrée pour ignorer",
|
||
"en": "or press enter to ignore it",
|
||
},
|
||
"Press enter to continue": {
|
||
"fr": "Entrée pour continuer",
|
||
"en": "Press enter to continue",
|
||
},
|
||
"Re-update i18n, purge the data and the tables": {
|
||
"fr": "Remise à jour de l'i18n, purge des données et des tables",
|
||
"en": "Re-update i18n, purge the data and the tables",
|
||
},
|
||
"except mail_test and mail_test_full": {
|
||
"fr": "sauf mail_test et mail_test_full",
|
||
"en": "except mail_test and mail_test_full",
|
||
},
|
||
"A backup can be created": {
|
||
"fr": "Une sauvegarde peut être créée",
|
||
"en": "A backup can be created",
|
||
},
|
||
"Press y/Y or type filename.zip to export, or": {
|
||
"fr": "y/Y ou un nom fichier.zip pour exporter, ou",
|
||
"en": "Press y/Y or type filename.zip to export, or",
|
||
},
|
||
"enter to continue": {
|
||
"fr": "Entrée pour continuer",
|
||
"en": "enter to continue",
|
||
},
|
||
"Test the migration, press y/Y": {
|
||
"fr": "Tester la migration, y/Y",
|
||
"en": "Test the migration, press y/Y",
|
||
},
|
||
"Documentation for this version": {
|
||
"fr": "Documentation de cette version",
|
||
"en": "Documentation for this version",
|
||
},
|
||
"Command not found": {
|
||
"fr": "Commande non trouvée",
|
||
"en": "Command not found",
|
||
},
|
||
"Execute command": {
|
||
"fr": "Exécution de la commande",
|
||
"en": "Execute command",
|
||
},
|
||
"Textual is missing from this interpreter:": {
|
||
"fr": "Textual manque à cet interpréteur :",
|
||
"en": "Textual is missing from this interpreter:",
|
||
},
|
||
"Run it with": {
|
||
"fr": "Le lancer avec",
|
||
"en": "Run it with",
|
||
},
|
||
"No leftover for theme": {
|
||
"fr": "Aucun reste pour le thème",
|
||
"en": "No leftover for theme",
|
||
},
|
||
"attachment(s) still under": {
|
||
"fr": "pièce(s) jointe(s) encore sous",
|
||
"en": "attachment(s) still under",
|
||
},
|
||
"view(s) whose key still names it": {
|
||
"fr": "vue(s) dont la clé le nomme encore",
|
||
"en": "view(s) whose key still names it",
|
||
},
|
||
"Nothing was deleted: their content may be the only trace": {
|
||
"fr": "Rien n'a été supprimé : leur contenu peut être la seule trace",
|
||
"en": "Nothing was deleted: their content may be the only trace",
|
||
},
|
||
"of a customization. Read before removing.": {
|
||
"fr": "d'une personnalisation. Lire avant de retirer.",
|
||
"en": "of a customization. Read before removing.",
|
||
},
|
||
"Installed theme(s) on": {
|
||
"fr": "Thème(s) installé(s) sur",
|
||
"en": "Installed theme(s) on",
|
||
},
|
||
"A theme carries view copies and SCSS through every": {
|
||
"fr": "Un thème traîne des copies de vues et des SCSS à travers chaque",
|
||
"en": "A theme carries view copies and SCSS through every",
|
||
},
|
||
"version bump, and a bump can rename what they rely on.": {
|
||
"fr": "palier de version, et un palier peut renommer ce dont ils dépendent.",
|
||
"en": "version bump, and a bump can rename what they rely on.",
|
||
},
|
||
"Uninstall them properly before migrating?": {
|
||
"fr": "Les désinstaller proprement avant de migrer ?",
|
||
"en": "Uninstall them properly before migrating?",
|
||
},
|
||
"Kept. Nothing was uninstalled.": {
|
||
"fr": "Conservés. Rien n'a été désinstallé.",
|
||
"en": "Kept. Nothing was uninstalled.",
|
||
},
|
||
"No customized SCSS is at risk in": {
|
||
"fr": "Aucun SCSS personnalisé n'est en danger dans",
|
||
"en": "No customized SCSS is at risk in",
|
||
},
|
||
"customized SCSS use(s) a variable that": {
|
||
"fr": "SCSS personnalisé(s) utilisent une variable que",
|
||
"en": "customized SCSS use(s) a variable that",
|
||
},
|
||
"no longer defines: the bundle will not compile.": {
|
||
"fr": "ne définit plus : le bundle ne compilera pas.",
|
||
"en": "no longer defines: the bundle will not compile.",
|
||
},
|
||
"Each one is a copy frozen on an older version. Dropping it": {
|
||
"fr": "Chacun est une copie figée sur une version antérieure. L'abandonner",
|
||
"en": "Each one is a copy frozen on an older version. Dropping it",
|
||
},
|
||
"restores the module file:": {
|
||
"fr": "rend le fichier du module :",
|
||
"en": "restores the module file:",
|
||
},
|
||
"Read it first: what it holds beyond the stale variable is": {
|
||
"fr": "Le lire d'abord : ce qu'il porte au-delà de la variable périmée est",
|
||
"en": "Read it first: what it holds beyond the stale variable is",
|
||
},
|
||
"a real customization, to re-apply as a small file.": {
|
||
"fr": "une vraie personnalisation, à réappliquer en petit fichier.",
|
||
"en": "a real customization, to re-apply as a small file.",
|
||
},
|
||
"Read the customizations above before continuing.": {
|
||
"fr": "Lire les personnalisations ci-dessus avant de continuer.",
|
||
"en": "Read the customizations above before continuing.",
|
||
},
|
||
"Missing:": {
|
||
"fr": "Manquantes :",
|
||
"en": "Missing:",
|
||
},
|
||
"No module file of that name in": {
|
||
"fr": "Aucun fichier de module de ce nom dans",
|
||
"en": "No module file of that name in",
|
||
},
|
||
"the target no longer ships it, so there is nothing to": {
|
||
"fr": "la cible ne le livre plus, il n'y a donc rien sur quoi",
|
||
"en": "the target no longer ships it, so there is nothing to",
|
||
},
|
||
"fall back on. Read the copy before dropping it.": {
|
||
"fr": "retomber. Lire la copie avant de l'abandonner.",
|
||
"en": "fall back on. Read the copy before dropping it.",
|
||
},
|
||
"The copy is identical to the module file.": {
|
||
"fr": "La copie est identique au fichier du module.",
|
||
"en": "The copy is identical to the module file.",
|
||
},
|
||
"line(s): that is what resetting gives up.": {
|
||
"fr": "ligne(s) : c'est ce que la réinitialisation abandonne.",
|
||
"en": "line(s): that is what resetting gives up.",
|
||
},
|
||
"What do you want to do with these customizations?": {
|
||
"fr": "Que voulez-vous faire de ces personnalisations ?",
|
||
"en": "What do you want to do with these customizations?",
|
||
},
|
||
"Enter = nothing": {
|
||
"fr": "Entrée = rien",
|
||
"en": "Enter = nothing",
|
||
},
|
||
"what the copy changed": {
|
||
"fr": "ce que la copie a changé",
|
||
"en": "what the copy changed",
|
||
},
|
||
"reset them onto the module file": {
|
||
"fr": "les réinitialiser sur le fichier du module",
|
||
"en": "reset them onto the module file",
|
||
},
|
||
"Full screen view unavailable.": {
|
||
"fr": "Vue plein écran indisponible.",
|
||
"en": "Full screen view unavailable.",
|
||
},
|
||
"Saved before resetting": {
|
||
"fr": "Sauvegardé avant réinitialisation",
|
||
"en": "Saved before resetting",
|
||
},
|
||
"Reset failed, nothing was changed.": {
|
||
"fr": "La réinitialisation a échoué, rien n'a été modifié.",
|
||
"en": "Reset failed, nothing was changed.",
|
||
},
|
||
"Reset done.": {
|
||
"fr": "Réinitialisation faite.",
|
||
"en": "Reset done.",
|
||
},
|
||
"This copy uses variables that": {
|
||
"fr": "Cette copie utilise des variables que",
|
||
"en": "This copy uses variables that",
|
||
},
|
||
"no longer defines": {
|
||
"fr": "ne définit plus",
|
||
"en": "no longer defines",
|
||
},
|
||
"The copy was written against an older version and frozen": {
|
||
"fr": "La copie a été écrite contre une version antérieure et figée",
|
||
"en": "The copy was written against an older version and frozen",
|
||
},
|
||
"there. The module has since renamed what it relies on.": {
|
||
"fr": "là. Le module a depuis renommé ce dont elle dépend.",
|
||
"en": "there. The module has since renamed what it relies on.",
|
||
},
|
||
"Resetting restores": {
|
||
"fr": "La réinitialisation rend",
|
||
"en": "Resetting restores",
|
||
},
|
||
"(nothing: the target no longer ships this file)": {
|
||
"fr": "(rien : la cible ne livre plus ce fichier)",
|
||
"en": "(nothing: the target no longer ships this file)",
|
||
},
|
||
"Reset command copied.": {
|
||
"fr": "Commande de réinitialisation copiée.",
|
||
"en": "Reset command copied.",
|
||
},
|
||
"Resetting needs Odoo 13.0 or later; this checkout is on": {
|
||
"fr": "La réinitialisation exige Odoo 13.0 ou plus ; ce checkout est sur",
|
||
"en": "Resetting needs Odoo 13.0 or later; this checkout is on",
|
||
},
|
||
"The prediction stands, the fix does not: run it again once": {
|
||
"fr": "La prédiction tient, pas la correction : relancer une fois",
|
||
"en": "The prediction stands, the fix does not: run it again once",
|
||
},
|
||
"the bump is done, on the upgraded database.": {
|
||
"fr": "le palier passé, sur la base montée de version.",
|
||
"en": "the bump is done, on the upgraded database.",
|
||
},
|
||
"Applying it from here fails with": {
|
||
"fr": "L'appliquer d'ici échoue sur",
|
||
"en": "Applying it from here fails with",
|
||
},
|
||
"and changes nothing.": {
|
||
"fr": "et ne change rien.",
|
||
"en": "and changes nothing.",
|
||
},
|
||
"Reset one of them onto its module view": {
|
||
"fr": "Réinitialiser l'une d'elles sur sa vue module",
|
||
"en": "Reset one of them onto its module view",
|
||
},
|
||
"Drifted COW copies": {
|
||
"fr": "Copies COW ayant dérivé",
|
||
"en": "Drifted COW copies",
|
||
},
|
||
"Which one(s) to reset onto the module view?": {
|
||
"fr": "Laquelle ou lesquelles réinitialiser sur la vue module ?",
|
||
"en": "Which one(s) to reset onto the module view?",
|
||
},
|
||
"numbers separated by commas, a = all, empty =": {
|
||
"fr": "numéros séparés par des virgules, a = toutes, vide =",
|
||
"en": "numbers separated by commas, a = all, empty =",
|
||
},
|
||
"Kept. Nothing was reset.": {
|
||
"fr": "Conservées. Rien n'a été réinitialisé.",
|
||
"en": "Kept. Nothing was reset.",
|
||
},
|
||
"Unknown choice, nothing was reset.": {
|
||
"fr": "Choix inconnu, rien n'a été réinitialisé.",
|
||
"en": "Unknown choice, nothing was reset.",
|
||
},
|
||
"Delete these leftovers, or keep them?": {
|
||
"fr": "Effacer ces restes, ou les garder ?",
|
||
"en": "Delete these leftovers, or keep them?",
|
||
},
|
||
"Enter = keep": {
|
||
"fr": "Entrée = garder",
|
||
"en": "Enter = keep",
|
||
},
|
||
"delete, after saving them": {
|
||
"fr": "effacer, après les avoir sauvegardés",
|
||
"en": "delete, after saving them",
|
||
},
|
||
"Kept. Nothing was deleted.": {
|
||
"fr": "Conservés. Rien n'a été effacé.",
|
||
"en": "Kept. Nothing was deleted.",
|
||
},
|
||
"Saved before deleting": {
|
||
"fr": "Sauvegardé avant effacement",
|
||
"en": "Saved before deleting",
|
||
},
|
||
"Deletion failed, nothing was removed.": {
|
||
"fr": "L'effacement a échoué, rien n'a été retiré.",
|
||
"en": "Deletion failed, nothing was removed.",
|
||
},
|
||
"attachment(s) deleted.": {
|
||
"fr": "pièce(s) jointe(s) effacée(s).",
|
||
"en": "attachment(s) deleted.",
|
||
},
|
||
"Request every public URL of this database now?": {
|
||
"fr": "Interroger maintenant toutes les URL publiques de cette base ?",
|
||
"en": "Request every public URL of this database now?",
|
||
},
|
||
"The sitemap listed no URL: nothing was tested.": {
|
||
"fr": "Le sitemap n'a listé aucune URL : rien n'a été testé.",
|
||
"en": "The sitemap listed no URL: nothing was tested.",
|
||
},
|
||
"public URL(s) answered without error.": {
|
||
"fr": "URL publique(s) ont répondu sans erreur.",
|
||
"en": "public URL(s) answered without error.",
|
||
},
|
||
"public URL(s) failed": {
|
||
"fr": "URL publique(s) ont échoué",
|
||
"en": "public URL(s) failed",
|
||
},
|
||
"no answer": {
|
||
"fr": "aucune réponse",
|
||
"en": "no answer",
|
||
},
|
||
"A page listed for search engines that does not answer is": {
|
||
"fr": "Une page listée pour les moteurs de recherche qui ne répond pas est",
|
||
"en": "A page listed for search engines that does not answer is",
|
||
},
|
||
"a page your visitors do not reach either.": {
|
||
"fr": "une page que vos visiteurs n'atteignent pas non plus.",
|
||
"en": "a page your visitors do not reach either.",
|
||
},
|
||
"The server never answered on": {
|
||
"fr": "Le serveur n'a jamais répondu sur",
|
||
"en": "The server never answered on",
|
||
},
|
||
"Could not read": {
|
||
"fr": "Impossible de lire",
|
||
"en": "Could not read",
|
||
},
|
||
"Starting Odoo on": {
|
||
"fr": "Démarrage d'Odoo sur",
|
||
"en": "Starting Odoo on",
|
||
},
|
||
"port": {
|
||
"fr": "port",
|
||
"en": "port",
|
||
},
|
||
"parent view(s) in cause": {
|
||
"fr": "vue(s) parente(s) en cause",
|
||
"en": "parent view(s) in cause",
|
||
},
|
||
"Those parents are copies frozen on an older version;": {
|
||
"fr": "Ces parents sont des copies figées sur une version antérieure ;",
|
||
"en": "Those parents are copies frozen on an older version;",
|
||
},
|
||
"resetting them onto the module view is the fix": {
|
||
"fr": "les réinitialiser sur la vue module est le correctif",
|
||
"en": "resetting them onto the module view is the fix",
|
||
},
|
||
"No parent view named: nothing to offer.": {
|
||
"fr": "Aucune vue parente nommée : rien à proposer.",
|
||
"en": "No parent view named: nothing to offer.",
|
||
},
|
||
"Copies to reset onto their module view": {
|
||
"fr": "Copies à réinitialiser sur leur vue module",
|
||
"en": "Copies to reset onto their module view",
|
||
},
|
||
"Which one(s) to reset?": {
|
||
"fr": "Laquelle ou lesquelles réinitialiser ?",
|
||
"en": "Which one(s) to reset?",
|
||
},
|
||
"Re-checked the": {
|
||
"fr": "Revérification des",
|
||
"en": "Re-checked the",
|
||
},
|
||
"failing URL(s) after the reset": {
|
||
"fr": "URL en échec après la réinitialisation",
|
||
"en": "failing URL(s) after the reset",
|
||
},
|
||
"Something already listens on port": {
|
||
"fr": "Quelque chose écoute déjà sur le port",
|
||
"en": "Something already listens on port",
|
||
},
|
||
"it would be tested instead of this database.": {
|
||
"fr": "il serait testé à la place de cette base.",
|
||
"en": "it would be tested instead of this database.",
|
||
},
|
||
"Enter =": {
|
||
"fr": "Entrée =",
|
||
"en": "Enter =",
|
||
},
|
||
"No COW copy carries this key": {
|
||
"fr": "Aucune copie COW ne porte cette clé",
|
||
"en": "No COW copy carries this key",
|
||
},
|
||
"already identical to the module view.": {
|
||
"fr": "déjà identique à la vue module.",
|
||
"en": "already identical to the module view.",
|
||
},
|
||
"Odoo surfaces this when the module view is rewritten": {
|
||
"fr": "Odoo le fait apparaître quand la vue module est réécrite",
|
||
"en": "Odoo surfaces this when the module view is rewritten",
|
||
},
|
||
"(a version bump) or when the page is rendered.": {
|
||
"fr": "(un palier de version) ou quand la page est rendue.",
|
||
"en": "(a version bump) or when the page is rendered.",
|
||
},
|
||
"Before starting: what already answers, and what": {
|
||
"fr": "Avant de commencer : ce qui répond déjà, et ce qui",
|
||
"en": "Before starting: what already answers, and what",
|
||
},
|
||
"does not. A page broken now will still be broken": {
|
||
"fr": "ne répond pas. Une page cassée maintenant le sera encore",
|
||
"en": "does not. A page broken now will still be broken",
|
||
},
|
||
"after — and that is not the migration.": {
|
||
"fr": "après — et ce ne sera pas la migration.",
|
||
"en": "after — and that is not the migration.",
|
||
},
|
||
"No child fails on this copy: it drifted without": {
|
||
"fr": "Aucun enfant n'échoue sur cette copie : elle a dérivé sans",
|
||
"en": "No child fails on this copy: it drifted without",
|
||
},
|
||
"breaking anything yet.": {
|
||
"fr": "encore rien casser.",
|
||
"en": "breaking anything yet.",
|
||
},
|
||
"These children no longer find their anchor in the copy": {
|
||
"fr": "Ces enfants ne trouvent plus leur point d'ancrage dans la copie",
|
||
"en": "These children no longer find their anchor in the copy",
|
||
},
|
||
"The anchor exists in the module view": {
|
||
"fr": "L'ancrage existe dans la vue module",
|
||
"en": "The anchor exists in the module view",
|
||
},
|
||
"but not in this copy, frozen on an older version.": {
|
||
"fr": "mais pas dans cette copie, figée sur une version antérieure.",
|
||
"en": "but not in this copy, frozen on an older version.",
|
||
},
|
||
"Resetting restores the module arch; the customization the": {
|
||
"fr": "Réinitialiser rend l'arch du module ; la personnalisation que",
|
||
"en": "Resetting restores the module arch; the customization the",
|
||
},
|
||
"copy carried is saved first, and is yours to re-apply as an": {
|
||
"fr": "la copie portait est sauvegardée d'abord, à vous de la réappliquer en",
|
||
"en": "copy carried is saved first, and is yours to re-apply as an",
|
||
},
|
||
"INHERITING view with its own key.": {
|
||
"fr": "vue HÉRITANTE avec sa propre clé.",
|
||
"en": "INHERITING view with its own key.",
|
||
},
|
||
"No module view carries this key: nothing to reset": {
|
||
"fr": "Aucune vue module ne porte cette clé : rien sur quoi",
|
||
"en": "No module view carries this key: nothing to reset",
|
||
},
|
||
"onto.": {
|
||
"fr": "réinitialiser.",
|
||
"en": "onto.",
|
||
},
|
||
"Browse the differences full screen": {
|
||
"fr": "Parcourir les différences en plein écran",
|
||
"en": "Browse the differences full screen",
|
||
},
|
||
"The checkout is on Odoo": {
|
||
"fr": "Le checkout est sur Odoo",
|
||
"en": "The checkout is on Odoo",
|
||
},
|
||
"and the database on": {
|
||
"fr": "et la base sur",
|
||
"en": "and the database on",
|
||
},
|
||
"Opening it with the wrong version writes to it before": {
|
||
"fr": "L'ouvrir avec la mauvaise version y écrit avant",
|
||
"en": "Opening it with the wrong version writes to it before",
|
||
},
|
||
"failing. Switch the checkout first.": {
|
||
"fr": "d'échouer. Basculer le checkout d'abord.",
|
||
"en": "failing. Switch the checkout first.",
|
||
},
|
||
"Database cleanup on": {
|
||
"fr": "Nettoyage de la base",
|
||
"en": "Database cleanup on",
|
||
},
|
||
"Cleaning": {
|
||
"fr": "Nettoyage de",
|
||
"en": "Cleaning",
|
||
},
|
||
"pass": {
|
||
"fr": "passe",
|
||
"en": "pass",
|
||
},
|
||
"purged": {
|
||
"fr": "purgés",
|
||
"en": "purged",
|
||
},
|
||
"purged;": {
|
||
"fr": "purgés ;",
|
||
"en": "purged;",
|
||
},
|
||
"could not be, and are left as they are": {
|
||
"fr": "n'ont pas pu l'être, et restent en l'état",
|
||
"en": "could not be, and are left as they are",
|
||
},
|
||
"entries purged, nothing left.": {
|
||
"fr": "entrées purgées, rien ne reste.",
|
||
"en": "entries purged, nothing left.",
|
||
},
|
||
"no such wizard in this version, skipped.": {
|
||
"fr": "pas d'assistant pour cela dans cette version, ignoré.",
|
||
"en": "no such wizard in this version, skipped.",
|
||
},
|
||
"A database can carry leftovers nothing can remove.": {
|
||
"fr": "Une base peut porter des restes que rien ne peut retirer.",
|
||
"en": "A database can carry leftovers nothing can remove.",
|
||
},
|
||
"This is a warning, not a failure.": {
|
||
"fr": "C'est un avertissement, pas un échec.",
|
||
"en": "This is a warning, not a failure.",
|
||
},
|
||
"The cleanup produced no report.": {
|
||
"fr": "Le nettoyage n'a produit aucun rapport.",
|
||
"en": "The cleanup produced no report.",
|
||
},
|
||
"Unreadable report": {
|
||
"fr": "Rapport illisible",
|
||
"en": "Unreadable report",
|
||
},
|
||
"obsolete models": {
|
||
"fr": "modèles obsolètes",
|
||
"en": "obsolete models",
|
||
},
|
||
"obsolete modules": {
|
||
"fr": "modules obsolètes",
|
||
"en": "obsolete modules",
|
||
},
|
||
"obsolete columns": {
|
||
"fr": "colonnes obsolètes",
|
||
"en": "obsolete columns",
|
||
},
|
||
"obsolete tables": {
|
||
"fr": "tables obsolètes",
|
||
"en": "obsolete tables",
|
||
},
|
||
"obsolete data entries": {
|
||
"fr": "entrées de données obsolètes",
|
||
"en": "obsolete data entries",
|
||
},
|
||
"obsolete menu entries": {
|
||
"fr": "entrées de menu obsolètes",
|
||
"en": "obsolete menu entries",
|
||
},
|
||
"missing indexes": {
|
||
"fr": "index manquants",
|
||
"en": "missing indexes",
|
||
},
|
||
"obsolete properties": {
|
||
"fr": "propriétés obsolètes",
|
||
"en": "obsolete properties",
|
||
},
|
||
"entries would be purged": {
|
||
"fr": "entrées seraient purgées",
|
||
"en": "entries would be purged",
|
||
},
|
||
"nothing was changed": {
|
||
"fr": "rien n'a été modifié",
|
||
"en": "nothing was changed",
|
||
},
|
||
"Enter = 1": {
|
||
"fr": "Entrée = 1",
|
||
"en": "Enter = 1",
|
||
},
|
||
"Enter = all, n = none": {
|
||
"fr": "Entrée = tous, n = aucun",
|
||
"en": "Enter = all, n = none",
|
||
},
|
||
"Enter = delete, after saving them": {
|
||
"fr": "Entrée = effacer, après les avoir sauvegardés",
|
||
"en": "Enter = delete, after saving them",
|
||
},
|
||
"Enter = neutralize now, reversible": {
|
||
"fr": "Entrée = neutraliser maintenant, réversible",
|
||
"en": "Enter = neutralize now, reversible",
|
||
},
|
||
"Enter = reset them onto the module file": {
|
||
"fr": "Entrée = les réinitialiser sur le fichier du module",
|
||
"en": "Enter = reset them onto the module file",
|
||
},
|
||
"Enter upgrades all addons of the": {
|
||
"fr": "Entrée met à jour tous les modules de la",
|
||
"en": "Enter upgrades all addons of the",
|
||
},
|
||
"Open it at EVERY version bump, stop asking": {
|
||
"fr": "L'ouvrir à CHAQUE palier de version, ne plus demander",
|
||
"en": "Open it at EVERY version bump, stop asking",
|
||
},
|
||
"Testing every bump, as chosen earlier.": {
|
||
"fr": "Test à chaque palier, comme choisi plus tôt.",
|
||
"en": "Testing every bump, as chosen earlier.",
|
||
},
|
||
"numbers separated by commas, Enter = all, n =": {
|
||
"fr": "numéros séparés par des virgules, Entrée = toutes, n =",
|
||
"en": "numbers separated by commas, Enter = all, n =",
|
||
},
|
||
"decide at the version bump": {
|
||
"fr": "décider au palier de version",
|
||
"en": "decide at the version bump",
|
||
},
|
||
"keep": {
|
||
"fr": "garder",
|
||
"en": "keep",
|
||
},
|
||
"The server did not serve the login page.": {
|
||
"fr": "Le serveur n'a pas servi la page de connexion.",
|
||
"en": "The server did not serve the login page.",
|
||
},
|
||
"Wrong login or password for user": {
|
||
"fr": "Identifiant ou mot de passe refusé pour l'utilisateur",
|
||
"en": "Wrong login or password for user",
|
||
},
|
||
"Could not read the menus": {
|
||
"fr": "Impossible de lire les menus",
|
||
"en": "Could not read the menus",
|
||
},
|
||
"Apps opened as the test user": {
|
||
"fr": "Applications ouvertes avec l'utilisateur test",
|
||
"en": "Apps opened as the test user",
|
||
},
|
||
"not openable this way (client or server": {
|
||
"fr": "non ouvrables ainsi (action client ou",
|
||
"en": "not openable this way (client or server",
|
||
},
|
||
"action): nothing to render.": {
|
||
"fr": "serveur) : rien à rendre.",
|
||
"en": "action): nothing to render.",
|
||
},
|
||
"opened with an empty domain: theirs": {
|
||
"fr": "ouvertes avec un domaine vide : le leur",
|
||
"en": "opened with an empty domain: theirs",
|
||
},
|
||
"needs the browser to evaluate it.": {
|
||
"fr": "demande le navigateur pour être évalué.",
|
||
"en": "needs the browser to evaluate it.",
|
||
},
|
||
"Every app opened its first page.": {
|
||
"fr": "Chaque application a ouvert sa première page.",
|
||
"en": "Every app opened its first page.",
|
||
},
|
||
"Apps that failed to open": {
|
||
"fr": "Applications qui n'ont pas pu s'ouvrir",
|
||
"en": "Apps that failed to open",
|
||
},
|
||
"reading the action": {
|
||
"fr": "lecture de l'action",
|
||
"en": "reading the action",
|
||
},
|
||
"rendering the views": {
|
||
"fr": "rendu des vues",
|
||
"en": "rendering the views",
|
||
},
|
||
"loading the first records": {
|
||
"fr": "chargement des premiers enregistrements",
|
||
"en": "loading the first records",
|
||
},
|
||
"These are back-office failures: the public smoke test": {
|
||
"fr": "Ce sont des échecs du back-office : le test de fumée public",
|
||
"en": "These are back-office failures: the public smoke test",
|
||
},
|
||
"cannot see them.": {
|
||
"fr": "ne peut pas les voir.",
|
||
"en": "cannot see them.",
|
||
},
|
||
"Could not log in as": {
|
||
"fr": "Connexion impossible en tant que",
|
||
"en": "Could not log in as",
|
||
},
|
||
"No": {
|
||
"fr": "Aucun",
|
||
"en": "No",
|
||
},
|
||
"user in": {
|
||
"fr": "utilisateur dans",
|
||
"en": "user in",
|
||
},
|
||
"the database was not neutralized, nothing to browse.": {
|
||
"fr": "la base n'a pas été neutralisée, rien à parcourir.",
|
||
"en": "the database was not neutralized, nothing to browse.",
|
||
},
|
||
"Back office not browsed": {
|
||
"fr": "Back-office non parcouru",
|
||
"en": "Back office not browsed",
|
||
},
|
||
"no test user: the database was not neutralized": {
|
||
"fr": "pas d'utilisateur test : la base n'a pas été neutralisée",
|
||
"en": "no test user: the database was not neutralized",
|
||
},
|
||
"Could not tell whether the": {
|
||
"fr": "Impossible de savoir si l'utilisateur",
|
||
"en": "Could not tell whether the",
|
||
},
|
||
"user exists in": {
|
||
"fr": "existe dans",
|
||
"en": "user exists in",
|
||
},
|
||
"could not tell whether the test user exists": {
|
||
"fr": "impossible de savoir si l'utilisateur test existe",
|
||
"en": "could not tell whether the test user exists",
|
||
},
|
||
"listing the model fields": {
|
||
"fr": "inventaire des champs du modèle",
|
||
"en": "listing the model fields",
|
||
},
|
||
"model absent from the running registry": {
|
||
"fr": "modèle absent du registre en cours",
|
||
"en": "model absent from the running registry",
|
||
},
|
||
"installed in the database, but its module code": {
|
||
"fr": "installé dans la base, mais le code de son module",
|
||
"en": "installed in the database, but its module code",
|
||
},
|
||
"is not in this addons path.": {
|
||
"fr": "n'est pas dans cet addons path.",
|
||
"en": "is not in this addons path.",
|
||
},
|
||
"Views naming a field the model no longer has": {
|
||
"fr": "Vues nommant un champ que le modèle n'a plus",
|
||
"en": "Views naming a field the model no longer has",
|
||
},
|
||
"Public pages, then the back office as the test user": {
|
||
"fr": "Les pages publiques, puis le back-office avec l'utilisateur test",
|
||
"en": "Public pages, then the back office as the test user",
|
||
},
|
||
"if the database was neutralized.": {
|
||
"fr": "si la base a été neutralisée.",
|
||
"en": "if the database was neutralized.",
|
||
},
|
||
"Portal": {
|
||
"fr": "Portail",
|
||
"en": "Portal",
|
||
},
|
||
"Portal pages opened as the test user": {
|
||
"fr": "Pages du portail ouvertes avec l'utilisateur test",
|
||
"en": "Portal pages opened as the test user",
|
||
},
|
||
"not signed in": {
|
||
"fr": "pas connecté",
|
||
"en": "not signed in",
|
||
},
|
||
"the page served was the login form": {
|
||
"fr": "la page servie était le formulaire de connexion",
|
||
"en": "the page served was the login form",
|
||
},
|
||
"server log": {
|
||
"fr": "journal du serveur",
|
||
"en": "server log",
|
||
},
|
||
"Purging modules reloads the whole registry: on a big": {
|
||
"fr": "Purger les modules recharge tout le registre : sur un grand",
|
||
"en": "Purging modules reloads the whole registry: on a big",
|
||
},
|
||
"addons path this takes minutes, not seconds.": {
|
||
"fr": "addons path cela prend des minutes, pas des secondes.",
|
||
"en": "addons path this takes minutes, not seconds.",
|
||
},
|
||
"Took": {
|
||
"fr": "Durée :",
|
||
"en": "Took",
|
||
},
|
||
"seconds.": {
|
||
"fr": "secondes.",
|
||
"en": "seconds.",
|
||
},
|
||
"pass": {
|
||
"fr": "passe",
|
||
"en": "pass",
|
||
},
|
||
"The cleanup was still running after": {
|
||
"fr": "Le nettoyage tournait encore après",
|
||
"en": "The cleanup was still running after",
|
||
},
|
||
"seconds and was stopped.": {
|
||
"fr": "secondes et a été arrêté.",
|
||
"en": "seconds and was stopped.",
|
||
},
|
||
"the whole batch": {
|
||
"fr": "le lot entier",
|
||
"en": "the whole batch",
|
||
},
|
||
"Still failing after": {
|
||
"fr": "Échoue toujours après",
|
||
"en": "Still failing after",
|
||
},
|
||
"attempts: this one needs a developer.": {
|
||
"fr": "tentatives : celle-ci demande un développeur.",
|
||
"en": "attempts: this one needs a developer.",
|
||
},
|
||
"Error detected. Choose, or ctrl+c to": {
|
||
"fr": "Erreur détectée. Choisissez, ou ctrl+c pour",
|
||
"en": "Error detected. Choose, or ctrl+c to",
|
||
},
|
||
"stop": {
|
||
"fr": "arrêter",
|
||
"en": "stop",
|
||
},
|
||
"Too many turns on this prompt: moving on.": {
|
||
"fr": "Trop de tours sur cette invite : on passe.",
|
||
"en": "Too many turns on this prompt: moving on.",
|
||
},
|
||
"Please validate git commit on repos, press to": {
|
||
"fr": "Veuillez valider les commits sur les dépôts, appuyez pour",
|
||
"en": "Please validate git commit on repos, press to",
|
||
},
|
||
"Check the migrated code, press to continue": {
|
||
"fr": "Vérifiez le code migré, appuyez pour continuer",
|
||
"en": "Check the migrated code, press to continue",
|
||
},
|
||
"Please validate the repo is ready to run": {
|
||
"fr": "Veuillez valider que le dépôt est prêt pour",
|
||
"en": "Please validate the repo is ready to run",
|
||
},
|
||
"press to continue": {
|
||
"fr": "appuyez pour continuer",
|
||
"en": "press to continue",
|
||
},
|
||
"smoke_internal_ui.py is missing": {
|
||
"fr": "smoke_internal_ui.py est absent",
|
||
"en": "smoke_internal_ui.py is missing",
|
||
},
|
||
"the test user is gone from a neutralized database: the back office was NOT checked": {
|
||
"fr": "l'utilisateur test a disparu d'une base neutralisée : le back-office n'a PAS été vérifié",
|
||
"en": "the test user is gone from a neutralized database: the back office was NOT checked",
|
||
},
|
||
"Back office NOT browsed": {
|
||
"fr": "Back-office NON parcouru",
|
||
"en": "Back office NOT browsed",
|
||
},
|
||
"Public pages, then the back office and /my as the": {
|
||
"fr": "Les pages publiques, puis le back-office et /my avec",
|
||
"en": "Public pages, then the back office and /my as the",
|
||
},
|
||
"test user (neutralized database).": {
|
||
"fr": "l'utilisateur test (base neutralisée).",
|
||
"en": "test user (neutralized database).",
|
||
},
|
||
"Public pages only:": {
|
||
"fr": "Pages publiques seulement :",
|
||
"en": "Public pages only:",
|
||
},
|
||
"was not neutralized, so there is no test user to": {
|
||
"fr": "n'a pas été neutralisée, il n'y a donc pas d'utilisateur test pour",
|
||
"en": "was not neutralized, so there is no test user to",
|
||
},
|
||
"sign in with.": {
|
||
"fr": "s'y connecter.",
|
||
"en": "sign in with.",
|
||
},
|
||
"Migration state": {
|
||
"fr": "État de la migration",
|
||
"en": "Migration state",
|
||
},
|
||
"started": {
|
||
"fr": "démarrée",
|
||
"en": "started",
|
||
},
|
||
"last written": {
|
||
"fr": "dernière écriture",
|
||
"en": "last written",
|
||
},
|
||
"current step": {
|
||
"fr": "étape courante",
|
||
"en": "current step",
|
||
},
|
||
"Test results": {
|
||
"fr": "Résultat des tests",
|
||
"en": "Test results",
|
||
},
|
||
"No tool has run yet.": {
|
||
"fr": "Aucun outil n'a encore tourné.",
|
||
"en": "No tool has run yet.",
|
||
},
|
||
"Commands that failed": {
|
||
"fr": "Commandes en échec",
|
||
"en": "Commands that failed",
|
||
},
|
||
"What was done, step by step": {
|
||
"fr": "Ce qui a été fait, étape par étape",
|
||
"en": "What was done, step by step",
|
||
},
|
||
"runs": {
|
||
"fr": "passages",
|
||
"en": "runs",
|
||
},
|
||
"nothing to report": {
|
||
"fr": "rien à signaler",
|
||
"en": "nothing to report",
|
||
},
|
||
"findings to look at": {
|
||
"fr": "des trouvailles à regarder",
|
||
"en": "findings to look at",
|
||
},
|
||
"the tool itself failed": {
|
||
"fr": "l'outil lui-même a échoué",
|
||
"en": "the tool itself failed",
|
||
},
|
||
"unknown result": {
|
||
"fr": "résultat inconnu",
|
||
"en": "unknown result",
|
||
},
|
||
"before the first step": {
|
||
"fr": "avant la première étape",
|
||
"en": "before the first step",
|
||
},
|
||
"No migration in progress.": {
|
||
"fr": "Aucune migration en cours.",
|
||
"en": "No migration in progress.",
|
||
},
|
||
"show the migration state": {
|
||
"fr": "afficher l'état de la migration",
|
||
"en": "show the migration state",
|
||
},
|
||
"Nothing to show yet.": {
|
||
"fr": "Rien à montrer pour l'instant.",
|
||
"en": "Nothing to show yet.",
|
||
},
|
||
"(b = go back a step, t = show the migration state)": {
|
||
"fr": "(b = revenir à une étape précédente,"
|
||
" t = afficher l'état de la migration)",
|
||
"en": "(b = go back a step, t = show the migration state)",
|
||
},
|
||
"Migration state (full screen)": {
|
||
"fr": "État de la migration (plein écran)",
|
||
"en": "Migration state (full screen)",
|
||
},
|
||
"Export a backup?": {
|
||
"fr": "Exporter une sauvegarde ?",
|
||
"en": "Export a backup?",
|
||
},
|
||
"or type filename.zip": {
|
||
"fr": "ou tapez nomfichier.zip",
|
||
"en": "or type filename.zip",
|
||
},
|
||
"The login page itself failed": {
|
||
"fr": "La page de connexion elle-même a échoué",
|
||
"en": "The login page itself failed",
|
||
},
|
||
"No CSRF token on the login page": {
|
||
"fr": "Aucun jeton CSRF sur la page de connexion",
|
||
"en": "No CSRF token on the login page",
|
||
},
|
||
"after the reset": {
|
||
"fr": "après la réinitialisation",
|
||
"en": "after the reset",
|
||
},
|
||
"The differential detection found nothing; resetting": {
|
||
"fr": "La détection différentielle n'a rien trouvé ; réinitialisation",
|
||
"en": "The differential detection found nothing; resetting",
|
||
},
|
||
"the requested key(s) anyway.": {
|
||
"fr": "de la ou des clés demandées malgré tout.",
|
||
"en": "the requested key(s) anyway.",
|
||
},
|
||
"lines": {
|
||
"fr": "lignes",
|
||
"en": "lines",
|
||
},
|
||
"press l to show": {
|
||
"fr": "l pour afficher",
|
||
"en": "press l to show",
|
||
},
|
||
"last": {
|
||
"fr": "dernières",
|
||
"en": "last",
|
||
},
|
||
"Refresh": {
|
||
"fr": "Rafraîchir",
|
||
"en": "Refresh",
|
||
},
|
||
"Logs": {
|
||
"fr": "Journaux",
|
||
"en": "Logs",
|
||
},
|
||
"Panel": {
|
||
"fr": "Panneau",
|
||
"en": "Panel",
|
||
},
|
||
"Wider": {
|
||
"fr": "Élargir",
|
||
"en": "Wider",
|
||
},
|
||
"Narrower": {
|
||
"fr": "Rétrécir",
|
||
"en": "Narrower",
|
||
},
|
||
"finished": {
|
||
"fr": "terminée",
|
||
"en": "finished",
|
||
},
|
||
"duration": {
|
||
"fr": "durée",
|
||
"en": "duration",
|
||
},
|
||
"Panels": {
|
||
"fr": "Panneaux",
|
||
"en": "Panels",
|
||
},
|
||
"summary + list + detail": {
|
||
"fr": "résumé + liste + détail",
|
||
"en": "summary + list + detail",
|
||
},
|
||
"list + detail": {
|
||
"fr": "liste + détail",
|
||
"en": "list + detail",
|
||
},
|
||
"detail only": {
|
||
"fr": "détail seul",
|
||
"en": "detail only",
|
||
},
|
||
"errors in the log": {
|
||
"fr": "erreurs dans le journal",
|
||
"en": "errors in the log",
|
||
},
|
||
"Migration quality, step by step": {
|
||
"fr": "Qualité de la migration, palier par palier",
|
||
"en": "Migration quality, step by step",
|
||
},
|
||
"database not found": {
|
||
"fr": "base introuvable",
|
||
"en": "database not found",
|
||
},
|
||
"attachment files missing from the filestore": {
|
||
"fr": "fichiers de pièces jointes absents du filestore",
|
||
"en": "attachment files missing from the filestore",
|
||
},
|
||
"From start to finish": {
|
||
"fr": "Du départ à l'arrivée",
|
||
"en": "From start to finish",
|
||
},
|
||
"not comparable: a database is missing": {
|
||
"fr": "non comparable : une base manque",
|
||
"en": "not comparable: a database is missing",
|
||
},
|
||
"probable table rename(s)": {
|
||
"fr": "renommage(s) de table probable(s)",
|
||
"en": "probable table rename(s)",
|
||
},
|
||
"table(s) lost rows": {
|
||
"fr": "table(s) ont perdu des lignes",
|
||
"en": "table(s) lost rows",
|
||
},
|
||
"attachments": {
|
||
"fr": "pièces jointes",
|
||
"en": "attachments",
|
||
},
|
||
"probably renamed to": {
|
||
"fr": "probablement renommée en",
|
||
"en": "probably renamed to",
|
||
},
|
||
"steps": {
|
||
"fr": "paliers",
|
||
"en": "steps",
|
||
},
|
||
"Migration": {
|
||
"fr": "🚚 Migration",
|
||
"en": "🚚 Migration",
|
||
},
|
||
"Quality of a migration, step by step": {
|
||
"fr": "📐 Qualité d'une migration, palier par palier",
|
||
"en": "📐 Quality of a migration, step by step",
|
||
},
|
||
"Quality": {
|
||
"fr": "Qualité",
|
||
"en": "Quality",
|
||
},
|
||
"Already inside a running screen: open it in its own": {
|
||
"fr": "Déjà dans un écran en cours : l'ouvrir dans son propre",
|
||
"en": "Already inside a running screen: open it in its own",
|
||
},
|
||
"process instead.": {
|
||
"fr": "processus.",
|
||
"en": "process instead.",
|
||
},
|
||
"Missing files": {
|
||
"fr": "Fichiers absents",
|
||
"en": "Missing files",
|
||
},
|
||
"every attachment file is present": {
|
||
"fr": "tous les fichiers de pièces jointes sont présents",
|
||
"en": "every attachment file is present",
|
||
},
|
||
"Could not read their metadata.": {
|
||
"fr": "Impossible de lire leurs métadonnées.",
|
||
"en": "Could not read their metadata.",
|
||
},
|
||
"by model and field": {
|
||
"fr": "par modèle et par champ",
|
||
"en": "by model and field",
|
||
},
|
||
"one by one": {
|
||
"fr": "un par un",
|
||
"en": "one by one",
|
||
},
|
||
"press m to list them": {
|
||
"fr": "m pour en voir la liste",
|
||
"en": "press m to list them",
|
||
},
|
||
"Pick a step to see its missing files.": {
|
||
"fr": "Choisissez un palier pour voir ses fichiers absents.",
|
||
"en": "Pick a step to see its missing files.",
|
||
},
|
||
"table(s) lost rows, unexplained": {
|
||
"fr": "table(s) ont perdu des lignes, sans explication",
|
||
"en": "table(s) lost rows, unexplained",
|
||
},
|
||
"table(s) explained by an Odoo change": {
|
||
"fr": "table(s) expliquées par un changement d'Odoo",
|
||
"en": "table(s) explained by an Odoo change",
|
||
},
|
||
"Cannot read the database: ": {
|
||
"fr": "Lecture impossible de la base : ",
|
||
"en": "Cannot read the database: ",
|
||
},
|
||
"Cannot read the package file: ": {
|
||
"fr": "Lecture impossible du fichier de packages : ",
|
||
"en": "Cannot read the package file: ",
|
||
},
|
||
"Modules missing from the default package": {
|
||
"fr": "📦 Modules absents du package par défaut",
|
||
"en": "📦 Modules missing from the default package",
|
||
},
|
||
"Dependencies between modules": {
|
||
"fr": "🔗 Dépendances entre les modules",
|
||
"en": "🔗 Dependencies between modules",
|
||
},
|
||
"Website copies that can no longer render": {
|
||
"fr": "Copies de site qui ne savent plus se rendre",
|
||
"en": "Website copies that can no longer render",
|
||
},
|
||
"Every website copy still renders.": {
|
||
"fr": "Chaque copie de site sait encore se rendre.",
|
||
"en": "Every website copy still renders.",
|
||
},
|
||
"No duplicate index.": {
|
||
"fr": "Aucun index en double.",
|
||
"en": "No duplicate index.",
|
||
},
|
||
"attachments of fields and records already gone": {
|
||
"fr": "pièces jointes de champs et d'enregistrements déjà disparus",
|
||
"en": "attachments of fields and records already gone",
|
||
},
|
||
"their field was already gone before this step": {
|
||
"fr": "leur champ porteur avait déjà disparu avant ce palier",
|
||
"en": "their field was already gone before this step",
|
||
},
|
||
"their field was removed at this step": {
|
||
"fr": "leur champ porteur a été retiré à ce palier",
|
||
"en": "their field was removed at this step",
|
||
},
|
||
"their model left the database": {
|
||
"fr": "leur modèle a quitté la base",
|
||
"en": "their model left the database",
|
||
},
|
||
"the field is STILL there — look at these": {
|
||
"fr": "le champ est TOUJOURS là — à regarder",
|
||
"en": "the field is STILL there — look at these",
|
||
},
|
||
"out of": {
|
||
"fr": "sur",
|
||
"en": "out of",
|
||
},
|
||
"Every witness is an administrator: a model only": {
|
||
"fr": "Tous les témoins sont administrateurs : un modèle que seuls les",
|
||
"en": "Every witness is an administrator: a model only",
|
||
},
|
||
"admins can read passes this test.": {
|
||
"fr": "administrateurs peuvent lire passe ce test.",
|
||
"en": "admins can read passes this test.",
|
||
},
|
||
"Reads ir_rule only — masking coded in Python escapes it.": {
|
||
"fr": "Ne lit qu'ir_rule — un masquage codé en Python lui échappe.",
|
||
"en": "Reads ir_rule only — masking coded in Python escapes it.",
|
||
},
|
||
"held no data of their own — nothing to lose": {
|
||
"fr": "sans donnée propre — rien à perdre",
|
||
"en": "held no data of their own — nothing to lose",
|
||
},
|
||
"Configuration records a migration never recreates": {
|
||
"fr": "Réglages qu'une migration ne recrée jamais",
|
||
"en": "Configuration records a migration never recreates",
|
||
},
|
||
"Every default configuration record is there.": {
|
||
"fr": "Chaque réglage par défaut est en place.",
|
||
"en": "Every default configuration record is there.",
|
||
},
|
||
"No pricelist, and the pricelist feature is on.": {
|
||
"fr": "Aucune liste de prix, alors que la fonctionnalité est active.",
|
||
"en": "No pricelist, and the pricelist feature is on.",
|
||
},
|
||
"Every quotation opens without one: raw price, no rule.": {
|
||
"fr": "Tout devis s'ouvre sans liste : prix brut, aucune règle.",
|
||
"en": "Every quotation opens without one: raw price, no rule.",
|
||
},
|
||
"No bank reconciliation model, for": {
|
||
"fr": "Aucun modèle de rapprochement bancaire, pour",
|
||
"en": "No bank reconciliation model, for",
|
||
},
|
||
"cash/bank journal(s).": {
|
||
"fr": "journal(aux) de trésorerie.",
|
||
"en": "cash/bank journal(s).",
|
||
},
|
||
"Every statement line is matched by hand.": {
|
||
"fr": "Chaque ligne de relevé se lettre à la main.",
|
||
"en": "Every statement line is matched by hand.",
|
||
},
|
||
"Use --apply to let Odoo recreate them.": {
|
||
"fr": "Utiliser --apply pour laisser Odoo les recréer.",
|
||
"en": "Use --apply to let Odoo recreate them.",
|
||
},
|
||
"pricelists:": {
|
||
"fr": "listes de prix :",
|
||
"en": "pricelists:",
|
||
},
|
||
"reconcile models:": {
|
||
"fr": "modèles de rapprochement :",
|
||
"en": "reconcile models:",
|
||
},
|
||
"Odoo recreated them.": {
|
||
"fr": "Odoo les a recréés.",
|
||
"en": "Odoo recreated them.",
|
||
},
|
||
"Still missing after the repair.": {
|
||
"fr": "Il en manque encore après la réparation :",
|
||
"en": "Still missing after the repair.",
|
||
},
|
||
"duplicate index pair(s)": {
|
||
"fr": "paire(s) d'index en double",
|
||
"en": "duplicate index pair(s)",
|
||
},
|
||
"safe to drop": {
|
||
"fr": "sans risque à supprimer",
|
||
"en": "safe to drop",
|
||
},
|
||
"drop": {
|
||
"fr": "supprimer",
|
||
"en": "drop",
|
||
},
|
||
"backed by a constraint — left alone": {
|
||
"fr": "adossée(s) à une contrainte — laissée(s) en place",
|
||
"en": "backed by a constraint — left alone",
|
||
},
|
||
"neither name follows the convention — your call": {
|
||
"fr": "sans convention reconnaissable — à vous de juger",
|
||
"en": "neither name follows the convention — your call",
|
||
},
|
||
"Use --apply to drop them.": {
|
||
"fr": "Utiliser --apply pour les supprimer.",
|
||
"en": "Use --apply to drop them.",
|
||
},
|
||
"Duplicate indexes dropped.": {
|
||
"fr": "Index en double supprimés.",
|
||
"en": "Duplicate indexes dropped.",
|
||
},
|
||
"Some duplicates are still there.": {
|
||
"fr": "Des doublons subsistent.",
|
||
"en": "Some duplicates are still there.",
|
||
},
|
||
"website COW view(s) will survive the bump and then fail": {
|
||
"fr": "vue(s) COW de site passeront le palier puis échoueront",
|
||
"en": "website COW view(s) will survive the bump and then fail",
|
||
},
|
||
"to render:": {
|
||
"fr": "à se rendre :",
|
||
"en": "to render:",
|
||
},
|
||
"Repair rather than neutralize — the copy holds a page": {
|
||
"fr": "Réparer plutôt que neutraliser — la copie porte une page",
|
||
"en": "Repair rather than neutralize — the copy holds a page",
|
||
},
|
||
"someone wrote:": {
|
||
"fr": "écrite par quelqu'un :",
|
||
"en": "someone wrote:",
|
||
},
|
||
"Every website copy renders again.": {
|
||
"fr": "Chaque copie de site sait de nouveau se rendre.",
|
||
"en": "Every website copy renders again.",
|
||
},
|
||
"Some copies still cannot render.": {
|
||
"fr": "Des copies ne savent toujours pas se rendre.",
|
||
"en": "Some copies still cannot render.",
|
||
},
|
||
"anchor missing for view": {
|
||
"fr": "ancrage absent pour la vue",
|
||
"en": "anchor missing for view",
|
||
},
|
||
"calls a template that is gone:": {
|
||
"fr": "appelle un gabarit disparu :",
|
||
"en": "calls a template that is gone:",
|
||
},
|
||
"repair(s) available with --apply": {
|
||
"fr": "réparation(s) possible(s) avec --apply",
|
||
"en": "repair(s) available with --apply",
|
||
},
|
||
"cannot be repaired automatically": {
|
||
"fr": "ne se réparent pas toutes seules",
|
||
"en": "cannot be repaired automatically",
|
||
},
|
||
"Removing a call removes its block from the page.": {
|
||
"fr": "Retirer un appel retire son bloc de la page.",
|
||
"en": "Removing a call removes its block from the page.",
|
||
},
|
||
"modules installed": {
|
||
"fr": "modules installés",
|
||
"en": "modules installed",
|
||
},
|
||
"of them installed": {
|
||
"fr": "installé(s)",
|
||
"en": "of them installed",
|
||
},
|
||
"nothing installed depends on it": {
|
||
"fr": "rien d'installé n'en dépend",
|
||
"en": "nothing installed depends on it",
|
||
},
|
||
"Reading the modules and their dependencies…": {
|
||
"fr": "Lecture des modules et de leurs dépendances…",
|
||
"en": "Reading the modules and their dependencies…",
|
||
},
|
||
"Modules and their dependencies": {
|
||
"fr": "Modules et leurs dépendances",
|
||
"en": "Modules and their dependencies",
|
||
},
|
||
"unknown to this database": {
|
||
"fr": "inconnu de cette base",
|
||
"en": "unknown to this database",
|
||
},
|
||
"state": {
|
||
"fr": "état",
|
||
"en": "state",
|
||
},
|
||
"author": {
|
||
"fr": "auteur",
|
||
"en": "author",
|
||
},
|
||
"application": {
|
||
"fr": "application",
|
||
"en": "application",
|
||
},
|
||
"yes": {
|
||
"fr": "oui",
|
||
"en": "yes",
|
||
},
|
||
"depends on": {
|
||
"fr": "dépend de",
|
||
"en": "depends on",
|
||
},
|
||
"needed by": {
|
||
"fr": "requis par",
|
||
"en": "needed by",
|
||
},
|
||
"absent": {
|
||
"fr": "absent",
|
||
"en": "absent",
|
||
},
|
||
"press d to walk the dependencies": {
|
||
"fr": "appuyez sur d pour parcourir les dépendances",
|
||
"en": "press d to walk the dependencies",
|
||
},
|
||
"installed on missing dependencies": {
|
||
"fr": "installé sur des dépendances absentes",
|
||
"en": "installed on missing dependencies",
|
||
},
|
||
"broken dependency(ies)": {
|
||
"fr": "dépendance(s) cassée(s)",
|
||
"en": "broken dependency(ies)",
|
||
},
|
||
"What it needs, directly": {
|
||
"fr": "Ce dont il a besoin, directement",
|
||
"en": "What it needs, directly",
|
||
},
|
||
"What needs it, directly": {
|
||
"fr": "Ce qui en a besoin, directement",
|
||
"en": "What needs it, directly",
|
||
},
|
||
"Everything it pulls in": {
|
||
"fr": "Tout ce qu'il entraîne",
|
||
"en": "Everything it pulls in",
|
||
},
|
||
"Everything that falls with it": {
|
||
"fr": "Tout ce qui tombe avec lui",
|
||
"en": "Everything that falls with it",
|
||
},
|
||
"all modules": {
|
||
"fr": "tous les modules",
|
||
"en": "all modules",
|
||
},
|
||
"installed only": {
|
||
"fr": "installés seulement",
|
||
"en": "installed only",
|
||
},
|
||
"not installed": {
|
||
"fr": "non installés",
|
||
"en": "not installed",
|
||
},
|
||
"broken dependencies": {
|
||
"fr": "dépendances cassées",
|
||
"en": "broken dependencies",
|
||
},
|
||
"in progress": {
|
||
"fr": "en cours",
|
||
"en": "in progress",
|
||
},
|
||
"apps only": {
|
||
"fr": "applications seulement",
|
||
"en": "apps only",
|
||
},
|
||
"left in a transient state": {
|
||
"fr": "laissés dans un état de passage",
|
||
"en": "left in a transient state",
|
||
},
|
||
"Installed": {
|
||
"fr": "Installés",
|
||
"en": "Installed",
|
||
},
|
||
"In progress": {
|
||
"fr": "En cours",
|
||
"en": "In progress",
|
||
},
|
||
"Apps": {
|
||
"fr": "Applications",
|
||
"en": "Apps",
|
||
},
|
||
"Dependencies": {
|
||
"fr": "Dépendances",
|
||
"en": "Dependencies",
|
||
},
|
||
"Filter": {
|
||
"fr": "Filtre",
|
||
"en": "Filter",
|
||
},
|
||
"Search": {
|
||
"fr": "Chercher",
|
||
"en": "Search",
|
||
},
|
||
"module": {
|
||
"fr": "module",
|
||
"en": "module",
|
||
},
|
||
"module name…": {
|
||
"fr": "nom de module…",
|
||
"en": "module name…",
|
||
},
|
||
"Show every entry": {
|
||
"fr": "📜 Tout afficher",
|
||
"en": "📜 Show every entry",
|
||
},
|
||
"List the known packages": {
|
||
"fr": "📚 Lister les packages connus",
|
||
"en": "📚 List the known packages",
|
||
},
|
||
"Already repaired: the group exists.": {
|
||
"fr": "Déjà réparé : le groupe existe.",
|
||
"en": "Already repaired: the group exists.",
|
||
},
|
||
"DMS access groups:": {
|
||
"fr": "Groupes d'accès DMS :",
|
||
"en": "DMS access groups:",
|
||
},
|
||
"DMS documents in the database": {
|
||
"fr": "Documents DMS dans la base",
|
||
"en": "DMS documents in the database",
|
||
},
|
||
"No DMS user to test visibility with.": {
|
||
"fr": "Aucun utilisateur DMS pour éprouver la visibilité.",
|
||
"en": "No DMS user to test visibility with.",
|
||
},
|
||
"Nothing written. Re-run with --apply.": {
|
||
"fr": "Rien d'écrit. Relancer avec --apply.",
|
||
"en": "Nothing written. Re-run with --apply.",
|
||
},
|
||
"Now visible to": {
|
||
"fr": "Désormais visibles pour",
|
||
"en": "Now visible to",
|
||
},
|
||
"Visible to": {
|
||
"fr": "Visibles pour",
|
||
"en": "Visible to",
|
||
},
|
||
"Would create one access group over": {
|
||
"fr": "Créerait un groupe d'accès sur",
|
||
"en": "Would create one access group over",
|
||
},
|
||
"file(s)": {
|
||
"fr": "fichier(s)",
|
||
"en": "file(s)",
|
||
},
|
||
"folder(s)": {
|
||
"fr": "dossier(s)",
|
||
"en": "folder(s)",
|
||
},
|
||
"root folder(s)": {
|
||
"fr": "dossier(s) racine",
|
||
"en": "root folder(s)",
|
||
},
|
||
"No DMS in this database, nothing to repair.": {
|
||
"fr": "Pas de DMS dans cette base, rien à réparer.",
|
||
"en": "No DMS in this database, nothing to repair.",
|
||
},
|
||
"Every one of them is visible to someone.": {
|
||
"fr": "Chacun est visible par quelqu'un.",
|
||
"en": "Every one of them is visible to someone.",
|
||
},
|
||
"No internal user to test visibility with.": {
|
||
"fr": "Aucun utilisateur interne pour éprouver la visibilité.",
|
||
"en": "No internal user to test visibility with.",
|
||
},
|
||
"The data is there; a global rule hides all of it.": {
|
||
"fr": "Les données sont là ; une règle globale les masque entièrement.",
|
||
"en": "The data is there; a global rule hides all of it.",
|
||
},
|
||
"checked against": {
|
||
"fr": "éprouvés avec",
|
||
"en": "checked against",
|
||
},
|
||
"internal user(s)": {
|
||
"fr": "utilisateur(s) interne(s)",
|
||
"en": "internal user(s)",
|
||
},
|
||
"model(s) nobody can see a single row of": {
|
||
"fr": "modèle(s) dont personne ne voit une seule ligne",
|
||
"en": "model(s) nobody can see a single row of",
|
||
},
|
||
"model(s) with a global rule and some data,": {
|
||
"fr": "modèle(s) avec une règle globale et des données,",
|
||
"en": "model(s) with a global rule and some data,",
|
||
},
|
||
"row(s)": {
|
||
"fr": "ligne(s)",
|
||
"en": "row(s)",
|
||
},
|
||
"Against OpenUpgrade": {
|
||
"fr": "Face à OpenUpgrade",
|
||
"en": "Against OpenUpgrade",
|
||
},
|
||
"NOT declared by OpenUpgrade": {
|
||
"fr": "NON déclarés par OpenUpgrade",
|
||
"en": "NOT declared by OpenUpgrade",
|
||
},
|
||
"No OpenUpgrade analysis for this step.": {
|
||
"fr": "Pas d'analyse OpenUpgrade pour ce palier.",
|
||
"en": "No OpenUpgrade analysis for this step.",
|
||
},
|
||
"became a per-company jsonb column": {
|
||
"fr": "passés en colonne jsonb par société",
|
||
"en": "became a per-company jsonb column",
|
||
},
|
||
"computed now — the field remains, the column does not": {
|
||
"fr": "devenus calculés — le champ demeure, la colonne non",
|
||
"en": "computed now — the field remains, the column does not",
|
||
},
|
||
"core module(s) analysed": {
|
||
"fr": "module(s) cœur analysé(s)",
|
||
"en": "core module(s) analysed",
|
||
},
|
||
"declared obsolete": {
|
||
"fr": "déclarés obsolètes",
|
||
"en": "declared obsolete",
|
||
},
|
||
"declared removed": {
|
||
"fr": "déclarés supprimés",
|
||
"en": "declared removed",
|
||
},
|
||
"field(s) lost": {
|
||
"fr": "champ(s) perdu(s)",
|
||
"en": "field(s) lost",
|
||
},
|
||
"model(s) lost": {
|
||
"fr": "modèle(s) perdu(s)",
|
||
"en": "model(s) lost",
|
||
},
|
||
"moved to another module": {
|
||
"fr": "déplacés vers un autre module",
|
||
"en": "moved to another module",
|
||
},
|
||
"renamed by Odoo": {
|
||
"fr": "renommés par Odoo",
|
||
"en": "renamed by Odoo",
|
||
},
|
||
"their model went away too": {
|
||
"fr": "leur modèle a disparu aussi",
|
||
"en": "their model went away too",
|
||
},
|
||
"in a module OpenUpgrade does not analyse": {
|
||
"fr": "dans un module qu'OpenUpgrade n'analyse pas",
|
||
"en": "in a module OpenUpgrade does not analyse",
|
||
},
|
||
"model(s)": {
|
||
"fr": "modèle(s)",
|
||
"en": "model(s)",
|
||
},
|
||
"other field name(s)": {
|
||
"fr": "autre(s) nom(s) de champ",
|
||
"en": "other field name(s)",
|
||
},
|
||
"Filestore of": {
|
||
"fr": "Filestore de",
|
||
"en": "Filestore of",
|
||
},
|
||
"file(s) missing": {
|
||
"fr": "fichier(s) absent(s)",
|
||
"en": "file(s) missing",
|
||
},
|
||
"file(s) on disk": {
|
||
"fr": "fichier(s) sur disque",
|
||
"en": "file(s) on disk",
|
||
},
|
||
"file(s) sit in nested filestores Odoo never reads.": {
|
||
"fr": "fichier(s) échoué(s) dans des filestores imbriqués qu'Odoo ne lit jamais.",
|
||
"en": "file(s) sit in nested filestores Odoo never reads.",
|
||
},
|
||
"intact in another database's filestore": {
|
||
"fr": "intacts dans le filestore d'une autre base",
|
||
"en": "intact in another database's filestore",
|
||
},
|
||
"its field no longer exists — nothing reads it": {
|
||
"fr": "leur champ n'existe plus — rien ne les lit",
|
||
"en": "its field no longer exists — nothing reads it",
|
||
},
|
||
"nowhere to be found — truly lost": {
|
||
"fr": "introuvables — réellement perdus",
|
||
"en": "nowhere to be found — truly lost",
|
||
},
|
||
"still in a backup zip": {
|
||
"fr": "encore dans une sauvegarde zip",
|
||
"en": "still in a backup zip",
|
||
},
|
||
"stored attachment(s)": {
|
||
"fr": "pièce(s) jointe(s) stockée(s)",
|
||
"en": "stored attachment(s)",
|
||
},
|
||
"stranded in a nested filestore Odoo never reads": {
|
||
"fr": "échoués dans un filestore imbriqué qu'Odoo ne lit pas",
|
||
"en": "stranded in a nested filestore Odoo never reads",
|
||
},
|
||
"Files": {
|
||
"fr": "Fichiers",
|
||
"en": "Files",
|
||
},
|
||
"Attachment files missing from the filestore": {
|
||
"fr": "🗄 Fichiers de pièces jointes absents du filestore",
|
||
"en": "🗄 Attachment files missing from the filestore",
|
||
},
|
||
"Scanning filestores and backups…": {
|
||
"fr": "Examen des filestores et des sauvegardes…",
|
||
"en": "Scanning filestores and backups…",
|
||
},
|
||
"Filestore restored:": {
|
||
"fr": "Filestore restauré :",
|
||
"en": "Filestore restored:",
|
||
},
|
||
"file(s) in place": {
|
||
"fr": "fichier(s) en place",
|
||
"en": "file(s) in place",
|
||
},
|
||
"Filestore restore looks wrong for": {
|
||
"fr": "Restauration du filestore suspecte pour",
|
||
"en": "Filestore restore looks wrong for",
|
||
},
|
||
"landed in a nested filestore Odoo never reads": {
|
||
"fr": "atterris dans un filestore imbriqué qu'Odoo ne lit jamais",
|
||
"en": "landed in a nested filestore Odoo never reads",
|
||
},
|
||
"To fix:": {
|
||
"fr": "Pour corriger :",
|
||
"en": "To fix:",
|
||
},
|
||
"never landed at all": {
|
||
"fr": "ne sont arrivés nulle part",
|
||
"en": "never landed at all",
|
||
},
|
||
"record still exists": {
|
||
"fr": "l'enregistrement existe encore",
|
||
"en": "record still exists",
|
||
},
|
||
"record is gone — nothing will miss it": {
|
||
"fr": "l'enregistrement a disparu — personne ne la cherchera",
|
||
"en": "record is gone — nothing will miss it",
|
||
},
|
||
"Delete these": {
|
||
"fr": "Supprimer ces",
|
||
"en": "Delete these",
|
||
},
|
||
"Directory:": {
|
||
"fr": "Dossier :",
|
||
"en": "Directory:",
|
||
},
|
||
"No nested filestore to tidy.": {
|
||
"fr": "Pas de filestore imbriqué à ranger.",
|
||
"en": "No nested filestore to tidy.",
|
||
},
|
||
"Nothing to purge.": {
|
||
"fr": "Rien à purger.",
|
||
"en": "Nothing to purge.",
|
||
},
|
||
"Nothing was deleted.": {
|
||
"fr": "Rien n'a été supprimé.",
|
||
"en": "Nothing was deleted.",
|
||
},
|
||
"Nothing was moved.": {
|
||
"fr": "Rien n'a été déplacé.",
|
||
"en": "Nothing was moved.",
|
||
},
|
||
"The purge failed.": {
|
||
"fr": "La purge a échoué.",
|
||
"en": "The purge failed.",
|
||
},
|
||
"attachment row(s) deleted.": {
|
||
"fr": "ligne(s) de pièce jointe supprimée(s).",
|
||
"en": "attachment row(s) deleted.",
|
||
},
|
||
"attachment row(s) for good?": {
|
||
"fr": "ligne(s) de pièce jointe, définitivement ?",
|
||
"en": "attachment row(s) for good?",
|
||
},
|
||
"duplicate(s) removed": {
|
||
"fr": "doublon(s) supprimé(s)",
|
||
"en": "duplicate(s) removed",
|
||
},
|
||
"file(s) to move up": {
|
||
"fr": "fichier(s) à remonter",
|
||
"en": "file(s) to move up",
|
||
},
|
||
"moved up": {
|
||
"fr": "remonté(s)",
|
||
"en": "moved up",
|
||
},
|
||
"pure duplicate(s) to delete": {
|
||
"fr": "doublon(s) pur(s) à supprimer",
|
||
"en": "pure duplicate(s) to delete",
|
||
},
|
||
"🧹 Purge attachments whose field no longer exists": {
|
||
"fr": "🧹 Purger les pièces jointes dont le champ n'existe plus",
|
||
"en": "🧹 Purge attachments whose field no longer exists",
|
||
},
|
||
"🧹 Tidy the nested filestore Odoo never reads": {
|
||
"fr": "🧹 Ranger le filestore imbriqué qu'Odoo ne lit pas",
|
||
"en": "🧹 Tidy the nested filestore Odoo never reads",
|
||
},
|
||
"The purge ran but said nothing.": {
|
||
"fr": "La purge a tourné sans rien annoncer.",
|
||
"en": "The purge ran but said nothing.",
|
||
},
|
||
"row(s) whose field is gone still hold their file": {
|
||
"fr": "ligne(s) à champ disparu retiennent encore leur fichier",
|
||
"en": "row(s) whose field is gone still hold their file",
|
||
},
|
||
"file(s) sit in a nested filestore Odoo never reads.": {
|
||
"fr": "fichier(s) échoué(s) dans un filestore imbriqué qu'Odoo ne lit jamais.",
|
||
"en": "file(s) sit in a nested filestore Odoo never reads.",
|
||
},
|
||
"such file(s) sit in OTHER databases filestores.": {
|
||
"fr": "fichier(s) de ce genre dorment dans les filestores d'AUTRES bases.",
|
||
"en": "such file(s) sit in OTHER databases filestores.",
|
||
},
|
||
"Could not inspect the attachments: ": {
|
||
"fr": "Inspection des pièces jointes impossible : ",
|
||
"en": "Could not inspect the attachments: ",
|
||
},
|
||
"Delete them?": {
|
||
"fr": "Les supprimer ?",
|
||
"en": "Delete them?",
|
||
},
|
||
"No attachment points at a field that is gone.": {
|
||
"fr": "Aucune pièce jointe ne pointe vers un champ disparu.",
|
||
"en": "No attachment points at a field that is gone.",
|
||
},
|
||
"attachment(s) point at a field that no longer exists": {
|
||
"fr": "pièce(s) jointe(s) pointent vers un champ qui n'existe plus",
|
||
"en": "attachment(s) point at a field that no longer exists",
|
||
},
|
||
"Corrected.": {
|
||
"fr": "Corrigé.",
|
||
"en": "Corrected.",
|
||
},
|
||
"No module update will fix this: the type is set once,": {
|
||
"fr": "Aucune mise à jour de module ne corrigera cela : le type est posé une fois,",
|
||
"en": "No module update will fix this: the type is set once,",
|
||
},
|
||
"The correction failed.": {
|
||
"fr": "La correction a échoué.",
|
||
"en": "The correction failed.",
|
||
},
|
||
"at creation. Re-run with --apply.": {
|
||
"fr": "à la création. Relancer avec --apply.",
|
||
"en": "at creation. Re-run with --apply.",
|
||
},
|
||
"their inheritance": {
|
||
"fr": "leur héritage",
|
||
"en": "their inheritance",
|
||
},
|
||
"view(s) whose stored type contradicts": {
|
||
"fr": "vue(s) dont le type stocké contredit",
|
||
"en": "view(s) whose stored type contradicts",
|
||
},
|
||
"Fix views whose type contradicts their": {
|
||
"fr": "Corriger les vues dont le type contredit leur",
|
||
"en": "Fix views whose type contradicts their",
|
||
},
|
||
"inheritance": {
|
||
"fr": "héritage",
|
||
"en": "inheritance",
|
||
},
|
||
"Correct them?": {
|
||
"fr": "Les corriger ?",
|
||
"en": "Correct them?",
|
||
},
|
||
"Uninstall the theme(s) the error names": {
|
||
"fr": "Désinstaller le(s) thème(s) que l'erreur nomme",
|
||
"en": "Uninstall the theme(s) the error names",
|
||
},
|
||
"Every view agrees with what Odoo expects.": {
|
||
"fr": "Toutes les vues s'accordent avec ce qu'Odoo attend.",
|
||
"en": "Every view agrees with what Odoo expects.",
|
||
},
|
||
"custom — nothing will ever rewrite it": {
|
||
"fr": "faite main — rien ne la réécrira jamais",
|
||
"en": "custom — nothing will ever rewrite it",
|
||
},
|
||
"from a module — a module update also fixes it": {
|
||
"fr": "d'un module — une mise à jour la répare aussi",
|
||
"en": "from a module — a module update also fixes it",
|
||
},
|
||
"renamed to <list>": {
|
||
"fr": "a renommée en <list>",
|
||
"en": "renamed to <list>",
|
||
},
|
||
"view(s) still carry a <tree> tag Odoo 18": {
|
||
"fr": "vue(s) portent encore une balise <tree> qu'Odoo 18",
|
||
"en": "view(s) still carry a <tree> tag Odoo 18",
|
||
},
|
||
"failed at": {
|
||
"fr": "a échoué sur",
|
||
"en": "failed at",
|
||
},
|
||
"Census": {
|
||
"fr": "Recensement",
|
||
"en": "Census",
|
||
},
|
||
"Compared against nothing — census only.": {
|
||
"fr": "Comparé à rien — recensement seul.",
|
||
"en": "Compared against nothing — census only.",
|
||
},
|
||
"Default package:": {
|
||
"fr": "Package par défaut :",
|
||
"en": "Default package:",
|
||
},
|
||
"Every suggested module is installed.": {
|
||
"fr": "Tous les modules suggérés sont installés.",
|
||
"en": "Every suggested module is installed.",
|
||
},
|
||
"Installed modules by author": {
|
||
"fr": "Modules installés, par auteur",
|
||
"en": "Installed modules by author",
|
||
},
|
||
"Modules of": {
|
||
"fr": "Modules de",
|
||
"en": "Modules of",
|
||
},
|
||
"No default package known for this version": {
|
||
"fr": "Aucun package par défaut connu pour cette version",
|
||
"en": "No default package known for this version",
|
||
},
|
||
"Odoo": {
|
||
"fr": "Odoo",
|
||
"en": "Odoo",
|
||
},
|
||
"absent from the addons path — sync the repo first": {
|
||
"fr": "hors du chemin des addons — synchroniser le dépôt d'abord",
|
||
"en": "absent from the addons path — sync the repo first",
|
||
},
|
||
"also needs": {
|
||
"fr": "réclame aussi",
|
||
"en": "also needs",
|
||
},
|
||
"half-way — finish the pending update": {
|
||
"fr": "à mi-chemin — finir la mise à jour en attente",
|
||
"en": "half-way — finish the pending update",
|
||
},
|
||
"installed": {
|
||
"fr": "déjà en place",
|
||
"en": "installed",
|
||
},
|
||
"known": {
|
||
"fr": "connus",
|
||
"en": "known",
|
||
},
|
||
"known to the database — install it": {
|
||
"fr": "dans la base — à installer",
|
||
"en": "known to the database — install it",
|
||
},
|
||
"present but broken — fix the dependency": {
|
||
"fr": "en panne de dépendance — à réparer",
|
||
"en": "present but broken — fix the dependency",
|
||
},
|
||
"suggested module(s)": {
|
||
"fr": "module(s) suggéré(s)",
|
||
"en": "suggested module(s)",
|
||
},
|
||
"suggested module(s) not installed": {
|
||
"fr": "module(s) suggéré(s) non installé(s)",
|
||
"en": "suggested module(s) not installed",
|
||
},
|
||
"unknown author": {
|
||
"fr": "auteur inconnu",
|
||
"en": "unknown author",
|
||
},
|
||
"rows dropped, the table remains": {
|
||
"fr": "lignes supprimées, la table demeure",
|
||
"en": "rows dropped, the table remains",
|
||
},
|
||
"retired from the database": {
|
||
"fr": "retirée de la base",
|
||
"en": "retired from the database",
|
||
},
|
||
"but it gained nothing": {
|
||
"fr": "mais elle n'a rien reçu",
|
||
"en": "but it gained nothing",
|
||
},
|
||
"there": {
|
||
"fr": "là-bas",
|
||
"en": "there",
|
||
},
|
||
"lost": {
|
||
"fr": "perdus",
|
||
"en": "lost",
|
||
},
|
||
"gained": {
|
||
"fr": "gagnés",
|
||
"en": "gained",
|
||
},
|
||
"fields": {
|
||
"fr": "champs",
|
||
"en": "fields",
|
||
},
|
||
"cow": {
|
||
"fr": "copies COW",
|
||
"en": "cow",
|
||
},
|
||
"tables": {
|
||
"fr": "tables",
|
||
"en": "tables",
|
||
},
|
||
"Details": {
|
||
"fr": "Détails",
|
||
"en": "Details",
|
||
},
|
||
"summary": {
|
||
"fr": "résumé",
|
||
"en": "summary",
|
||
},
|
||
"Clean the database before testing the pages?": {
|
||
"fr": "Nettoyer la base avant de tester les pages ?",
|
||
"en": "Clean the database before testing the pages?",
|
||
},
|
||
"Auto-run: take the default answer after": {
|
||
"fr": "Auto-exécution : prendre la réponse par défaut après",
|
||
"en": "Auto-run: take the default answer after",
|
||
},
|
||
"seconds?": {
|
||
"fr": "secondes ?",
|
||
"en": "seconds?",
|
||
},
|
||
"Auto-run on: each prompt waits": {
|
||
"fr": "Auto-exécution activée : chaque invite attend",
|
||
"en": "Auto-run on: each prompt waits",
|
||
},
|
||
"seconds, then takes its default.": {
|
||
"fr": "secondes, puis prend son défaut.",
|
||
"en": "seconds, then takes its default.",
|
||
},
|
||
"(default)": {
|
||
"fr": "(défaut)",
|
||
"en": "(default)",
|
||
},
|
||
"database_cleanup is not installed on this base;": {
|
||
"fr": "database_cleanup n'est pas installé sur cette base ;",
|
||
"en": "database_cleanup is not installed on this base;",
|
||
},
|
||
"installing it first.": {
|
||
"fr": "installation préalable.",
|
||
"en": "installing it first.",
|
||
},
|
||
"Could not install database_cleanup.": {
|
||
"fr": "Impossible d'installer database_cleanup.",
|
||
"en": "Could not install database_cleanup.",
|
||
},
|
||
"Nothing to decide yet": {
|
||
"fr": "Rien à décider pour l'instant",
|
||
"en": "Nothing to decide yet",
|
||
},
|
||
"the migration will offer to neutralize these copies": {
|
||
"fr": "la migration proposera de neutraliser ces copies",
|
||
"en": "the migration will offer to neutralize these copies",
|
||
},
|
||
"at the version bump itself, showing what each one holds.": {
|
||
"fr": "au moment du palier lui-même, en montrant ce que chacune"
|
||
" contient.",
|
||
"en": "at the version bump itself, showing what each one holds.",
|
||
},
|
||
"Press to continue": {
|
||
"fr": "Appuyez pour continuer",
|
||
"en": "Press to continue",
|
||
},
|
||
"(b = go back to a previous step)": {
|
||
"fr": "(b = revenir à une étape précédente)",
|
||
"en": "(b = go back to a previous step)",
|
||
},
|
||
"Neutralize database, press to continue": {
|
||
"fr": "Neutraliser la base, appuyez pour continuer",
|
||
"en": "Neutralize database, press to continue",
|
||
},
|
||
"Replay from which step? (empty to cancel)": {
|
||
"fr": "Rejouer à partir de quelle étape ? (vide pour annuler)",
|
||
"en": "Replay from which step? (empty to cancel)",
|
||
},
|
||
"Rewound.": {"fr": "Rembobiné.", "en": "Rewound."},
|
||
"Relaunch the migration to resume from there.": {
|
||
"fr": "Relancez la migration pour reprendre à partir de là.",
|
||
"en": "Relaunch the migration to resume from there.",
|
||
},
|
||
"Go back to a step": {
|
||
"fr": "Revenir à une étape",
|
||
"en": "Go back to a step",
|
||
},
|
||
"Choose a step, Enter replays from there.": {
|
||
"fr": "Choisissez une étape, Entrée rejoue à partir de là.",
|
||
"en": "Choose a step, Enter replays from there.",
|
||
},
|
||
# --- script/analyse : vues personnalisées ---
|
||
"Customised views": {
|
||
"fr": "Vues personnalisées",
|
||
"en": "Customised views",
|
||
},
|
||
"Views": {"fr": "Vues", "en": "Views"},
|
||
"why": {"fr": "pourquoi", "en": "why"},
|
||
"more": {"fr": "de plus", "en": "more"},
|
||
"From an installed theme": {
|
||
"fr": "Posée par un thème installé",
|
||
"en": "From an installed theme",
|
||
},
|
||
"Website copy (COW)": {
|
||
"fr": "Copie de site web (COW)",
|
||
"en": "Website copy (COW)",
|
||
},
|
||
"Made with Studio": {"fr": "Faite avec Studio", "en": "Made with Studio"},
|
||
"Imported or exported": {
|
||
"fr": "Importée ou exportée",
|
||
"en": "Imported or exported",
|
||
},
|
||
"Created from the interface": {
|
||
"fr": "Créée depuis l'interface",
|
||
"en": "Created from the interface",
|
||
},
|
||
"From a module, flagged as touched": {
|
||
"fr": "D'un module, signalée comme retouchée",
|
||
"en": "From a module, flagged as touched",
|
||
},
|
||
"Straight from a module": {
|
||
"fr": "Telle quelle depuis un module",
|
||
"en": "Straight from a module",
|
||
},
|
||
"Every view comes straight from a module.": {
|
||
"fr": "Toutes les vues viennent telles quelles d'un module.",
|
||
"en": "Every view comes straight from a module.",
|
||
},
|
||
"Views that did not come straight from a module": {
|
||
"fr": "Vues qui ne viennent pas telles quelles d'un module",
|
||
"en": "Views that did not come straight from a module",
|
||
},
|
||
"Website copies are user data: Odoo copies a view instead of editing it."
|
||
" Whether they will survive the next version is another question, and"
|
||
" these tools answer it:": {
|
||
"fr": "Les copies de site web sont des données utilisateur : Odoo"
|
||
" copie une vue au lieu de la modifier. Savoir si elles survivront à"
|
||
" la prochaine version est une autre question, et ces outils y"
|
||
" répondent :",
|
||
"en": "Website copies are user data: Odoo copies a view instead of"
|
||
" editing it. Whether they will survive the next version is another"
|
||
" question, and these tools answer it:",
|
||
},
|
||
"Flags say a view was touched, not how. They are incomplete both ways: a"
|
||
" direct SQL write does not set arch_updated, and reset_arch clears it."
|
||
" Comparing with the module source is what settles it.": {
|
||
"fr": "Les drapeaux disent qu'une vue a été touchée, pas comment. Ils"
|
||
" sont incomplets dans les deux sens : un write SQL direct n'arme pas"
|
||
" arch_updated, et reset_arch l'efface. Seule la comparaison avec la"
|
||
" source du module tranche.",
|
||
"en": "Flags say a view was touched, not how. They are incomplete"
|
||
" both ways: a direct SQL write does not set arch_updated, and"
|
||
" reset_arch clears it. Comparing with the module source is what"
|
||
" settles it.",
|
||
},
|
||
"List the views of an Odoo database that did not come straight from a"
|
||
" module, website copies included (read-only).": {
|
||
"fr": "Lister les vues d'une base Odoo qui ne viennent pas telles"
|
||
" quelles d'un module, copies de site web comprises (lecture seule).",
|
||
"en": "List the views of an Odoo database that did not come straight"
|
||
" from a module, website copies included (read-only).",
|
||
},
|
||
"only show this category": {
|
||
"fr": "n'afficher que cette catégorie",
|
||
"en": "only show this category",
|
||
},
|
||
"how many views to show (default: 20)": {
|
||
"fr": "nombre de vues à afficher (défaut : 20)",
|
||
"en": "how many views to show (default: 20)",
|
||
},
|
||
"list every view": {
|
||
"fr": "afficher toutes les vues",
|
||
"en": "list every view",
|
||
},
|
||
"which views to compare (default: flagged)": {
|
||
"fr": "quelles vues comparer (défaut : celles qui sont signalées)",
|
||
"en": "which views to compare (default: flagged)",
|
||
},
|
||
"From a module, silently drifted": {
|
||
"fr": "D'un module, dérivée en silence",
|
||
"en": "From a module, silently drifted",
|
||
},
|
||
"In --scope all, a difference is a lead, not a verdict:"
|
||
" read_arch_from_file returns the raw file, while the database holds the"
|
||
" arch AFTER load-time processing. Measured on a freshly installed 18.0"
|
||
" database, 160 of its 974 views already differ this way.": {
|
||
"fr": "En --scope all, un écart est une piste, pas un verdict :"
|
||
" read_arch_from_file rend le fichier brut, alors que la base porte"
|
||
" l'arch APRÈS traitement au chargement. Mesuré sur une base 18.0"
|
||
" fraîchement installée, 160 de ses 974 vues diffèrent déjà ainsi.",
|
||
"en": "In --scope all, a difference is a lead, not a verdict:"
|
||
" read_arch_from_file returns the raw file, while the database holds"
|
||
" the arch AFTER load-time processing. Measured on a freshly installed"
|
||
" 18.0 database, 160 of its 974 views already differ this way.",
|
||
},
|
||
"Compare with the module source? (Y/n): ": {
|
||
"fr": "Comparer avec la source du module ? (O/n) : ",
|
||
"en": "Compare with the module source? (Y/n): ",
|
||
},
|
||
# --- Menu Analyse : les actions « aller plus loin ». Ce qui était
|
||
# conseillé en options de ligne de commande est devenu des entrées :
|
||
# dire « utilisez -v » à quelqu'un qui est dans un menu, c'est lui
|
||
# demander d'en sortir pour obtenir ce que le menu pouvait offrir.
|
||
"Browse the differences (TUI)": {
|
||
"fr": "🖥 Naviguer dans les écarts (plein écran)",
|
||
"en": "🖥 Browse the differences (TUI)",
|
||
},
|
||
"Compare every view (slower, noisier)": {
|
||
"fr": "🔬 Comparer toutes les vues (plus long, plus bruyant)",
|
||
"en": "🔬 Compare every view (slower, noisier)",
|
||
},
|
||
"Compare first, then browse.": {
|
||
"fr": "Comparez d'abord, vous naviguerez ensuite.",
|
||
"en": "Compare first, then browse.",
|
||
},
|
||
"Compare the flagged views with the module source": {
|
||
"fr": "🔍 Comparer les vues signalées avec la source du module",
|
||
"en": "🔍 Compare the flagged views with the module source",
|
||
},
|
||
"Count rows exactly (full scan)": {
|
||
"fr": "🔢 Compter les lignes exactement (balayage complet)",
|
||
"en": "🔢 Count rows exactly (full scan)",
|
||
},
|
||
"Counting rows exactly, one scan per table…": {
|
||
"fr": "Comptage exact des lignes, un balayage par table…",
|
||
"en": "Counting rows exactly, one scan per table…",
|
||
},
|
||
"Export as JSON": {"fr": "💾 Exporter en JSON", "en": "💾 Export as JSON"},
|
||
"Go further": {"fr": "🔎 Aller plus loin", "en": "🔎 Go further"},
|
||
"Loading the Odoo registry, this takes a moment…": {
|
||
"fr": "Chargement du registre Odoo, cela prend un moment…",
|
||
"en": "Loading the Odoo registry, this takes a moment…",
|
||
},
|
||
"No view differs from its module source.": {
|
||
"fr": "Aucune vue ne diffère de la source de son module.",
|
||
"en": "No view differs from its module source.",
|
||
},
|
||
"Show every table": {
|
||
"fr": "📜 Afficher toutes les tables",
|
||
"en": "📜 Show every table",
|
||
},
|
||
"Show every view": {
|
||
"fr": "📜 Afficher toutes les vues",
|
||
"en": "📜 Show every view",
|
||
},
|
||
"Written to: ": {"fr": "Écrit dans : ", "en": "Written to: "},
|
||
"Flags say a view was touched, not how: only comparing with the module"
|
||
" source settles it.": {
|
||
"fr": "Les drapeaux disent qu'une vue a été touchée, pas comment :"
|
||
" seule la comparaison avec la source du module tranche.",
|
||
"en": "Flags say a view was touched, not how: only comparing with the"
|
||
" module source settles it.",
|
||
},
|
||
"blocking": {"fr": "bloquants", "en": "blocking"},
|
||
"Studio and hand-made x_ fields": {
|
||
"fr": "🧩 Champs x_ (Studio et faits à la main)",
|
||
"en": "🧩 Studio and hand-made x_ fields",
|
||
},
|
||
"Show every field": {
|
||
"fr": "📜 Afficher tous les champs",
|
||
"en": "📜 Show every field",
|
||
},
|
||
"A database": {"fr": "💾 Une base de données", "en": "💾 A database"},
|
||
"A backup .zip, without restoring it": {
|
||
"fr": "🗜 Une sauvegarde .zip, sans la restaurer",
|
||
"en": "🗜 A backup .zip, without restoring it",
|
||
},
|
||
"Path to the backup .zip (empty to cancel): ": {
|
||
"fr": "Chemin de la sauvegarde .zip (vide pour annuler) : ",
|
||
"en": "Path to the backup .zip (empty to cancel): ",
|
||
},
|
||
"No such file: ": {"fr": "Fichier introuvable : ", "en": "No such file: "},
|
||
"from a backup": {"fr": "depuis une sauvegarde", "en": "from a backup"},
|
||
"Odoo backup .zip to inspect, without restoring it": {
|
||
"fr": "sauvegarde Odoo .zip à examiner, sans la restaurer",
|
||
"en": "Odoo backup .zip to inspect, without restoring it",
|
||
},
|
||
"Not an Odoo backup (no manifest.json): ": {
|
||
"fr": "Pas une sauvegarde Odoo (aucun manifest.json) : ",
|
||
"en": "Not an Odoo backup (no manifest.json): ",
|
||
},
|
||
"Cannot read the backup: ": {
|
||
"fr": "Lecture impossible de la sauvegarde : ",
|
||
"en": "Cannot read the backup: ",
|
||
},
|
||
"This backup holds no dump.sql: ": {
|
||
"fr": "Cette sauvegarde ne contient aucun dump.sql : ",
|
||
"en": "This backup holds no dump.sql: ",
|
||
},
|
||
# --- script/analyse : champs et modèles hors module ---
|
||
"Nothing declares these in a file, so no module will "
|
||
"recreate them. What a version upgrade keeps is what "
|
||
"someone carried over.": {
|
||
"fr": "Rien ne les déclare dans un fichier, donc aucun module "
|
||
"ne les recréera. Ce qu'une montée de version conserve "
|
||
"est ce que quelqu'un a reporté.",
|
||
"en": "Nothing declares these in a file, so no module will "
|
||
"recreate them. What a version upgrade keeps is what "
|
||
"someone carried over.",
|
||
},
|
||
"A stored field without its column stops the registry "
|
||
"from loading, so the upgrade will not even start. Settle "
|
||
"these before anything else.": {
|
||
"fr": "Un champ stocké sans sa colonne empêche le registre de "
|
||
"charger, donc la montée de version ne démarrera même "
|
||
"pas. Réglez cela avant tout le reste.",
|
||
"en": "A stored field without its column stops the registry "
|
||
"from loading, so the upgrade will not even start. Settle "
|
||
"these before anything else.",
|
||
},
|
||
"Use -v to list them all, --json for the raw data.": {
|
||
"fr": "Utilisez -v pour tout afficher, --json pour la donnée "
|
||
"brute.",
|
||
"en": "Use -v to list them all, --json for the raw data.",
|
||
},
|
||
"List the fields and models added outside a module — "
|
||
"Studio or by hand (read-only).": {
|
||
"fr": "Lister les champs et modèles ajoutés hors module — "
|
||
"Studio ou faits à la main (lecture seule).",
|
||
"en": "List the fields and models added outside a module — "
|
||
"Studio or by hand (read-only).",
|
||
},
|
||
"how many to show (default: 30)": {
|
||
"fr": "nombre à afficher (défaut : 30)",
|
||
"en": "how many to show (default: 30)",
|
||
},
|
||
"list every one": {"fr": "tout afficher", "en": "list every one"},
|
||
"Studio": {"fr": "Studio", "en": "Studio"},
|
||
"Made by hand": {"fr": "Fait à la main", "en": "Made by hand"},
|
||
"Declared by a module": {
|
||
"fr": "Déclaré par un module",
|
||
"en": "Declared by a module",
|
||
},
|
||
"stored, but its column is missing": {
|
||
"fr": "stocké, mais sa colonne manque",
|
||
"en": "stored, but its column is missing",
|
||
},
|
||
"points at a model that no longer exists": {
|
||
"fr": "pointe vers un modèle qui n'existe plus",
|
||
"en": "points at a model that no longer exists",
|
||
},
|
||
"its model no longer exists": {
|
||
"fr": "son modèle n'existe plus",
|
||
"en": "its model no longer exists",
|
||
},
|
||
"its table could not be resolved": {
|
||
"fr": "sa table n'a pas pu être résolue",
|
||
"en": "its table could not be resolved",
|
||
},
|
||
"origin": {"fr": "provenance", "en": "origin"},
|
||
"Fields added outside a module": {
|
||
"fr": "Champs ajoutés hors module",
|
||
"en": "Fields added outside a module",
|
||
},
|
||
"Custom fields": {"fr": "Champs personnalisés", "en": "Custom fields"},
|
||
"Custom models": {"fr": "Modèles personnalisés", "en": "Custom models"},
|
||
"No field or model was added outside a module.": {
|
||
"fr": "Aucun champ ni modèle n'a été ajouté hors module.",
|
||
"en": "No field or model was added outside a module.",
|
||
},
|
||
"Blocking": {"fr": "Bloquant", "en": "Blocking"},
|
||
"To carry over by hand": {
|
||
"fr": "À reporter à la main",
|
||
"en": "To carry over by hand",
|
||
},
|
||
# --- script/analyse : comparaison et navigation des écarts ---
|
||
"Differences only": {
|
||
"fr": "Écarts seuls",
|
||
"en": "Differences only",
|
||
},
|
||
"Ignore indentation": {
|
||
"fr": "Ignorer l'indentation",
|
||
"en": "Ignore indentation",
|
||
},
|
||
"Copy": {
|
||
"fr": "Copier",
|
||
"en": "Copy",
|
||
},
|
||
"Reset command": {
|
||
"fr": "Commande de réinitialisation",
|
||
"en": "Reset command",
|
||
},
|
||
"module (file)": {
|
||
"fr": "module (fichier)",
|
||
"en": "module (file)",
|
||
},
|
||
"database": {
|
||
"fr": "base",
|
||
"en": "database",
|
||
},
|
||
"Difference copied.": {
|
||
"fr": "Écart copié.",
|
||
"en": "Difference copied.",
|
||
},
|
||
"No Odoo configuration file found.": {
|
||
"fr": "Aucun fichier de configuration Odoo trouvé.",
|
||
"en": "No Odoo configuration file found.",
|
||
},
|
||
"odoo_bin.sh not found.": {
|
||
"fr": "odoo_bin.sh est introuvable.",
|
||
"en": "odoo_bin.sh not found.",
|
||
},
|
||
"The Odoo shell returned no result: ": {
|
||
"fr": "Le shell Odoo n'a rien renvoyé : ",
|
||
"en": "The Odoo shell returned no result: ",
|
||
},
|
||
"The Odoo shell exceeded the timeout (s): ": {
|
||
"fr": "Le shell Odoo a dépassé le délai imparti (s) : ",
|
||
"en": "The Odoo shell exceeded the timeout (s): ",
|
||
},
|
||
"Unreadable JSON from the Odoo shell: ": {
|
||
"fr": "JSON illisible en sortie du shell Odoo : ",
|
||
"en": "Unreadable JSON from the Odoo shell: ",
|
||
},
|
||
"To restore a view to what its module declares — this "
|
||
"WRITES to the database, so read the difference first:": {
|
||
"fr": "Pour rendre à une vue ce que déclare son module — ceci "
|
||
"ÉCRIT dans la base, lisez donc l'écart d'abord :",
|
||
"en": "To restore a view to what its module declares — this "
|
||
"WRITES to the database, so read the difference first:",
|
||
},
|
||
"compare with the module source (opens an Odoo shell)": {
|
||
"fr": "comparer avec la source du module (ouvre un shell Odoo)",
|
||
"en": "compare with the module source (opens an Odoo shell)",
|
||
},
|
||
"fail if the comparison could not be made": {
|
||
"fr": "échouer si la comparaison n'a pas pu être faite",
|
||
"en": "fail if the comparison could not be made",
|
||
},
|
||
"browse the differences in a full-screen view": {
|
||
"fr": "naviguer dans les écarts en plein écran",
|
||
"en": "browse the differences in a full-screen view",
|
||
},
|
||
"Flags say a view was touched, not how. They are incomplete "
|
||
"both ways: a direct SQL write does not set arch_updated, "
|
||
"and reset_arch clears it. Comparing with the module source "
|
||
"is what settles it — add --diff.": {
|
||
"fr": "Les drapeaux disent qu'une vue a été touchée, pas comment. "
|
||
"Ils sont incomplets dans les deux sens : un write SQL "
|
||
"direct n'arme pas arch_updated, et reset_arch l'efface. "
|
||
"Seule la comparaison avec la source du module tranche — "
|
||
"ajoutez --diff.",
|
||
"en": "Flags say a view was touched, not how. They are incomplete "
|
||
"both ways: a direct SQL write does not set arch_updated, "
|
||
"and reset_arch clears it. Comparing with the module source "
|
||
"is what settles it — add --diff.",
|
||
},
|
||
"Database is Odoo": {
|
||
"fr": "La base est en Odoo",
|
||
"en": "Database is Odoo",
|
||
},
|
||
"checkout is": {
|
||
"fr": "le checkout est en",
|
||
"en": "checkout is",
|
||
},
|
||
"views were flagged but hold exactly what their module "
|
||
"declares: only the comparison could tell.": {
|
||
"fr": "vues étaient signalées mais portent exactement ce que "
|
||
"déclare leur module : seule la comparaison pouvait le "
|
||
"dire.",
|
||
"en": "views were flagged but hold exactly what their module "
|
||
"declares: only the comparison could tell.",
|
||
},
|
||
"No reference arch, so nothing was compared: ": {
|
||
"fr": "Aucune arch de référence, donc rien n'a été comparé : ",
|
||
"en": "No reference arch, so nothing was compared: ",
|
||
},
|
||
"Not a terminal: showing the text report instead.": {
|
||
"fr": "Pas un terminal : affichage du rapport texte à la place.",
|
||
"en": "Not a terminal: showing the text report instead.",
|
||
},
|
||
"To restore this view to what its module declares:": {
|
||
"fr": "Pour rendre à cette vue ce que déclare son module :",
|
||
"en": "To restore this view to what its module declares:",
|
||
},
|
||
# --- script/analyse : erreurs du socle ---
|
||
"Invalid database name: ": {
|
||
"fr": "Nom de base invalide : ",
|
||
"en": "Invalid database name: ",
|
||
},
|
||
"Cannot read from the database: ": {
|
||
"fr": "Lecture impossible dans la base : ",
|
||
"en": "Cannot read from the database: ",
|
||
},
|
||
"is not an Odoo database.": {
|
||
"fr": "n'est pas une base Odoo.",
|
||
"en": "is not an Odoo database.",
|
||
},
|
||
"psql is not installed or not in PATH.": {
|
||
"fr": "psql n'est pas installé, ou absent du PATH.",
|
||
"en": "psql is not installed or not in PATH.",
|
||
},
|
||
"Query exceeded the timeout (s): ": {
|
||
"fr": "La requête a dépassé le délai imparti (s) : ",
|
||
"en": "Query exceeded the timeout (s): ",
|
||
},
|
||
"Unreadable JSON from psql: ": {
|
||
"fr": "JSON illisible en sortie de psql : ",
|
||
"en": "Unreadable JSON from psql: ",
|
||
},
|
||
"shared library, nothing to run here.": {
|
||
"fr": "bibliothèque partagée, rien à lancer ici.",
|
||
"en": "shared library, nothing to run here.",
|
||
},
|
||
"Runnable tools in this directory:": {
|
||
"fr": "Outils exécutables de ce répertoire :",
|
||
"en": "Runnable tools in this directory:",
|
||
},
|
||
"No analysis tool here yet.": {
|
||
"fr": "Aucun outil d'analyse ici pour l'instant.",
|
||
"en": "No analysis tool here yet.",
|
||
},
|
||
"From the menu:": {"fr": "Depuis le menu :", "en": "From the menu:"},
|
||
"in the dump": {"fr": "dans le dump", "en": "in the dump"},
|
||
"Weight in the dump": {
|
||
"fr": "Poids dans le dump",
|
||
"en": "Weight in the dump",
|
||
},
|
||
# --- script/analyse : poids du schéma ---
|
||
"Schema analysis": {
|
||
"fr": "Analyse du schéma",
|
||
"en": "Schema analysis",
|
||
},
|
||
"Database size": {
|
||
"fr": "Poids de la base",
|
||
"en": "Database size",
|
||
},
|
||
"Tables": {"fr": "Tables", "en": "Tables"},
|
||
"Models": {"fr": "Modèles", "en": "Models"},
|
||
"rows": {"fr": "lignes", "en": "rows"},
|
||
"Models without table": {
|
||
"fr": "Modèles sans table",
|
||
"en": "Models without table",
|
||
},
|
||
"abstract models have none, by design": {
|
||
"fr": "les modèles abstraits n'en ont pas, par construction",
|
||
"en": "abstract models have none, by design",
|
||
},
|
||
"ir_model_relation is absent, so m2m tables cannot be told apart from"
|
||
" orphans: the list below is unreliable.": {
|
||
"fr": "ir_model_relation est absente : impossible de distinguer une"
|
||
" table m2m d'une orpheline, la liste ci-dessous n'est pas fiable.",
|
||
"en": "ir_model_relation is absent, so m2m tables cannot be told apart"
|
||
" from orphans: the list below is unreliable.",
|
||
},
|
||
"Heaviest tables": {
|
||
"fr": "Tables les plus lourdes",
|
||
"en": "Heaviest tables",
|
||
},
|
||
"All tables, heaviest first": {
|
||
"fr": "Toutes les tables, de la plus lourde à la plus légère",
|
||
"en": "All tables, heaviest first",
|
||
},
|
||
"use -v to list them all": {
|
||
"fr": "utilisez -v pour toutes les afficher",
|
||
"en": "use -v to list them all",
|
||
},
|
||
"Every table belongs to an installed model.": {
|
||
"fr": "Chaque table appartient à un modèle installé.",
|
||
"en": "Every table belongs to an installed model.",
|
||
},
|
||
"Orphan tables": {
|
||
"fr": "Tables orphelines",
|
||
"en": "Orphan tables",
|
||
},
|
||
"No installed model claims these tables. They are usually left over from"
|
||
" modules uninstalled without DROP TABLE, and every version upgrade"
|
||
" carries them along.": {
|
||
"fr": "Aucun modèle installé ne réclame ces tables. Ce sont le plus"
|
||
" souvent des reliquats de modules désinstallés sans DROP TABLE, que"
|
||
" chaque montée de version transporte avec elle.",
|
||
"en": "No installed model claims these tables. They are usually left"
|
||
" over from modules uninstalled without DROP TABLE, and every version"
|
||
" upgrade carries them along.",
|
||
},
|
||
"Check what they hold before dropping anything.": {
|
||
"fr": "Regardez ce qu'elles contiennent avant de supprimer quoi que ce"
|
||
" soit.",
|
||
"en": "Check what they hold before dropping anything.",
|
||
},
|
||
"Row counts are estimates from the last ANALYZE. Use --exact for real"
|
||
" counts, at the cost of one full scan per table.": {
|
||
"fr": "Les nombres de lignes sont estimés d'après le dernier ANALYZE."
|
||
" Utilisez --exact pour un comptage réel, au prix d'un balayage"
|
||
" complet par table.",
|
||
"en": "Row counts are estimates from the last ANALYZE. Use --exact for"
|
||
" real counts, at the cost of one full scan per table.",
|
||
},
|
||
"Report the size of an Odoo database and the tables no installed model"
|
||
" claims (read-only).": {
|
||
"fr": "Rapporter le poids d'une base Odoo et les tables qu'aucun"
|
||
" modèle installé ne réclame (lecture seule).",
|
||
"en": "Report the size of an Odoo database and the tables no installed"
|
||
" model claims (read-only).",
|
||
},
|
||
"database to inspect": {
|
||
"fr": "base à examiner",
|
||
"en": "database to inspect",
|
||
},
|
||
"count rows exactly: one full scan per table": {
|
||
"fr": "compter les lignes exactement : un balayage complet par table",
|
||
"en": "count rows exactly: one full scan per table",
|
||
},
|
||
"how many tables to show (default: 20)": {
|
||
"fr": "nombre de tables à afficher (défaut : 20)",
|
||
"en": "how many tables to show (default: 20)",
|
||
},
|
||
"list every table": {
|
||
"fr": "afficher toutes les tables",
|
||
"en": "list every table",
|
||
},
|
||
"output JSON": {"fr": "sortie JSON", "en": "output JSON"},
|
||
"path to an Odoo config file": {
|
||
"fr": "chemin d'un fichier de configuration Odoo",
|
||
"en": "path to an Odoo config file",
|
||
},
|
||
# Courriel
|
||
"mail_menu": {
|
||
"fr": "Courriel - Lire et envoyer du courriel",
|
||
"en": "Mail - Read and send email",
|
||
},
|
||
"mail_ai_question": {
|
||
"fr": "Question IA - Poser une question à un modèle",
|
||
"en": "AI question - Ask a model a question",
|
||
},
|
||
"mail_open_tui": {
|
||
"fr": "Ouvrir le client courriel (TUI)",
|
||
"en": "Open the mail client (TUI)",
|
||
},
|
||
"mail_accounts_menu": {"fr": "Comptes", "en": "Accounts"},
|
||
"mail_sync_now": {
|
||
"fr": "Synchroniser maintenant",
|
||
"en": "Synchronise now",
|
||
},
|
||
"mail_cache_menu": {"fr": "Cache", "en": "Cache"},
|
||
"mail_account_list": {"fr": "Lister les comptes", "en": "List accounts"},
|
||
"mail_account_add": {"fr": "Ajouter un compte", "en": "Add an account"},
|
||
"mail_account_delete": {
|
||
"fr": "Supprimer un compte",
|
||
"en": "Delete an account",
|
||
},
|
||
"mail_account_template": {
|
||
"fr": "Générer un modèle accounts.json",
|
||
"en": "Generate an accounts.json template",
|
||
},
|
||
"mail_account_test": {
|
||
"fr": "Tester la connexion d'un compte",
|
||
"en": "Test an account connection",
|
||
},
|
||
"mail_cache_default_mode": {
|
||
"fr": "Mode de cache par défaut",
|
||
"en": "Default cache mode",
|
||
},
|
||
"mail_cache_account_mode": {
|
||
"fr": "Mode de cache d'un compte",
|
||
"en": "Cache mode of one account",
|
||
},
|
||
"mail_cache_size_purge": {
|
||
"fr": "Taille du cache et purge",
|
||
"en": "Cache size and purge",
|
||
},
|
||
"mail_no_account": {
|
||
"fr": "Aucun compte configuré. Ajoutez-en un d'abord.",
|
||
"en": "No account configured. Add one first.",
|
||
},
|
||
"mail_ask_name": {
|
||
"fr": "Nom court du compte : ",
|
||
"en": "Short account name: ",
|
||
},
|
||
"mail_ask_email": {"fr": "Adresse courriel : ", "en": "Email address: "},
|
||
"mail_ask_display_name": {
|
||
"fr": "Nom affiché (facultatif) : ",
|
||
"en": "Display name (optional): ",
|
||
},
|
||
"mail_ask_preset": {"fr": "Fournisseur : ", "en": "Provider: "},
|
||
"mail_ask_password": {"fr": "Mot de passe : ", "en": "Password: "},
|
||
"mail_ask_imap_host": {"fr": "Serveur IMAP : ", "en": "IMAP server: "},
|
||
"mail_ask_smtp_host": {"fr": "Serveur SMTP : ", "en": "SMTP server: "},
|
||
"mail_ask_account": {"fr": "Quel compte ? ", "en": "Which account? "},
|
||
"mail_ask_mode": {
|
||
"fr": "Mode (clear / encrypted / ephemeral) : ",
|
||
"en": "Mode (clear / encrypted / ephemeral): ",
|
||
},
|
||
"mail_app_password_note": {
|
||
"fr": "Ce fournisseur exige un mot de passe d'application.",
|
||
"en": "This provider requires an app password.",
|
||
},
|
||
"mail_account_saved": {"fr": "Compte enregistré.", "en": "Account saved."},
|
||
"mail_account_save": {"fr": "Enregistrer", "en": "Save"},
|
||
"mail_account_missing_fields": {
|
||
"fr": "Nom, adresse et mot de passe sont requis.",
|
||
"en": "Name, address and password are required.",
|
||
},
|
||
"mail_account_add_unavailable": {
|
||
"fr": "Ajout de compte indisponible dans ce contexte.",
|
||
"en": "Adding an account is unavailable in this context.",
|
||
},
|
||
"mail_account_deleted": {
|
||
"fr": "Compte supprimé.",
|
||
"en": "Account deleted.",
|
||
},
|
||
"mail_connection_ok": {
|
||
"fr": "Connexion réussie.",
|
||
"en": "Connection succeeded.",
|
||
},
|
||
"mail_connection_failed": {
|
||
"fr": "Connexion échouée :",
|
||
"en": "Connection failed:",
|
||
},
|
||
"mail_template_written": {
|
||
"fr": "Modèle écrit dans",
|
||
"en": "Template written to",
|
||
},
|
||
"mail_purge_confirm": {
|
||
"fr": "Effacer tout le cache de ce compte ? (o/N) ",
|
||
"en": "Erase this account's whole cache? (y/N) ",
|
||
},
|
||
"mail_purged": {"fr": "Cache effacé.", "en": "Cache erased."},
|
||
"mail_no_vault": {
|
||
"fr": "Aucun coffre disponible : installez pykeepass ou déverrouillez un trousseau système.",
|
||
"en": "No vault available: install pykeepass or unlock a system keyring.",
|
||
},
|
||
# Coffre KeePass, côté infrastructure partagée (`kdbx_manager`) : ces
|
||
# messages servent à TOUT le CLI, pas seulement au courriel.
|
||
"kdbx_vault_is": {
|
||
"fr": "Coffre KeePass :",
|
||
"en": "KeePass vault:",
|
||
},
|
||
"kdbx_ask_password": {
|
||
"fr": "Mot de passe du coffre (vide pour abandonner) : ",
|
||
"en": "Vault password (empty to give up): ",
|
||
},
|
||
"kdbx_wrong_password": {
|
||
"fr": "Mot de passe incorrect pour ce coffre KeePass.",
|
||
"en": "Wrong password for this KeePass vault.",
|
||
},
|
||
"kdbx_give_up": {
|
||
"fr": "Coffre non ouvert : on abandonne.",
|
||
"en": "Vault not opened: giving up.",
|
||
},
|
||
"mail_kdbx_none_configured": {
|
||
"fr": "Aucun fichier kdbx n'est configuré.",
|
||
"en": "No kdbx file is configured.",
|
||
},
|
||
"mail_kdbx_menu_create": {
|
||
"fr": "Créer un nouveau fichier .kdbx",
|
||
"en": "Create a new .kdbx file",
|
||
},
|
||
"mail_kdbx_menu_choose": {
|
||
"fr": "Choisir un fichier existant",
|
||
"en": "Choose an existing file",
|
||
},
|
||
"mail_kdbx_menu_cancel": {"fr": "Annuler", "en": "Cancel"},
|
||
"mail_kdbx_ask_choice": {"fr": "Votre choix : ", "en": "Your choice: "},
|
||
"mail_kdbx_ask_path_new": {
|
||
"fr": "Chemin du nouveau fichier kdbx",
|
||
"en": "Path for the new kdbx file",
|
||
},
|
||
"mail_kdbx_ask_path_existing": {
|
||
"fr": "Chemin du fichier kdbx existant : ",
|
||
"en": "Path to the existing kdbx file: ",
|
||
},
|
||
"mail_kdbx_ask_password": {
|
||
"fr": "Mot de passe du coffre : ",
|
||
"en": "Vault password: ",
|
||
},
|
||
"mail_kdbx_ask_password_confirm": {
|
||
"fr": "Confirmez le mot de passe : ",
|
||
"en": "Confirm the password: ",
|
||
},
|
||
"mail_kdbx_password_mismatch": {
|
||
"fr": "Les mots de passe ne correspondent pas.",
|
||
"en": "Passwords do not match.",
|
||
},
|
||
"mail_kdbx_path_not_found": {
|
||
"fr": "Ce fichier n'existe pas :",
|
||
"en": "This file does not exist:",
|
||
},
|
||
"mail_kdbx_created": {
|
||
"fr": "Fichier kdbx créé :",
|
||
"en": "Kdbx file created:",
|
||
},
|
||
"mail_kdbx_path_recorded": {
|
||
"fr": "Fichier kdbx configuré :",
|
||
"en": "Kdbx file configured:",
|
||
},
|
||
"mail_no_password_stored": {
|
||
"fr": "Aucun mot de passe enregistré pour ce compte.",
|
||
"en": "No password stored for this account.",
|
||
},
|
||
"mail_install_textual": {
|
||
"fr": "Installez textual pour le client courriel (pip).",
|
||
"en": "Install textual for the mail client (pip).",
|
||
},
|
||
"mail_accounts": {"fr": "Comptes", "en": "Accounts"},
|
||
"mail_search": {"fr": "Rechercher…", "en": "Search…"},
|
||
"mail_search_clear": {
|
||
"fr": "Effacer la recherche",
|
||
"en": "Clear search",
|
||
},
|
||
"mail_from": {"fr": "De :", "en": "From:"},
|
||
"mail_to": {"fr": "À :", "en": "To:"},
|
||
"mail_cc": {"fr": "Cc :", "en": "Cc:"},
|
||
"mail_subject": {"fr": "Objet :", "en": "Subject:"},
|
||
"mail_date": {"fr": "Date", "en": "Date"},
|
||
"mail_send": {"fr": "Envoyer", "en": "Send"},
|
||
"mail_attachments": {"fr": "Pièces jointes :", "en": "Attachments:"},
|
||
"mail_attachments_paths": {
|
||
"fr": "Pièces jointes (chemins séparés par des points-virgules)",
|
||
"en": "Attachments (semicolon-separated paths)",
|
||
},
|
||
"mail_browse": {"fr": "Parcourir…", "en": "Browse…"},
|
||
"mail_browse_failed": {
|
||
"fr": "Sélecteur de fichiers impossible :",
|
||
"en": "File browser unavailable:",
|
||
},
|
||
"mail_no_subject": {"fr": "(sans objet)", "en": "(no subject)"},
|
||
"mail_body_needs_network": {
|
||
"fr": "Corps non téléchargé — connexion requise.",
|
||
"en": "Body not downloaded — connection required.",
|
||
},
|
||
"mail_body_error": {
|
||
"fr": "Lecture du corps impossible :",
|
||
"en": "Cannot read the body:",
|
||
},
|
||
"mail_flag_error": {
|
||
"fr": "Drapeau non transmis au serveur :",
|
||
"en": "Flag not sent to the server:",
|
||
},
|
||
"mail_syncing": {"fr": "Synchronisation de", "en": "Synchronising"},
|
||
"mail_new_messages": {"fr": "nouveaux messages", "en": "new messages"},
|
||
"mail_errors": {"fr": "erreurs", "en": "errors"},
|
||
"mail_folders_resynced": {
|
||
"fr": "dossiers resynchronisés (UIDVALIDITY changé) :",
|
||
"en": "folders resynchronised (UIDVALIDITY changed):",
|
||
},
|
||
"mail_offline_cannot_send": {
|
||
"fr": "Compte hors ligne : envoi impossible.",
|
||
"en": "Account offline: cannot send.",
|
||
},
|
||
"mail_sent_to": {"fr": "Envoyé à", "en": "Sent to"},
|
||
"mail_sent_not_filed": {
|
||
"fr": "envoyé, mais pas classé dans Envoyés",
|
||
"en": "sent, but not filed in Sent",
|
||
},
|
||
"mail_nothing_to_reply_to": {
|
||
"fr": "Aucun message sélectionné.",
|
||
"en": "No message selected.",
|
||
},
|
||
"mail_nothing_to_forward": {
|
||
"fr": "Aucun message à transférer.",
|
||
"en": "No message to forward.",
|
||
},
|
||
"mail_attachment_not_found": {
|
||
"fr": "Pièce jointe introuvable.",
|
||
"en": "Attachment not found.",
|
||
},
|
||
"mail_no_attachment": {
|
||
"fr": "Ce message n'a pas de pièce jointe.",
|
||
"en": "This message has no attachment.",
|
||
},
|
||
"mail_save_failed": {
|
||
"fr": "Enregistrement impossible :",
|
||
"en": "Cannot save:",
|
||
},
|
||
"mail_saved_to": {"fr": "Enregistré dans", "en": "Saved to"},
|
||
"mail_log_binding": {"fr": "Journal", "en": "Log"},
|
||
"mail_log_close": {"fr": "Fermer", "en": "Close"},
|
||
"mail_log_tail_heading": {
|
||
"fr": "Journal (fin) :",
|
||
"en": "Log (tail):",
|
||
},
|
||
"mail_log_errors_heading": {
|
||
"fr": "Erreurs de synchronisation (session en cours) :",
|
||
"en": "Sync errors (current session):",
|
||
},
|
||
"mail_log_missing": {
|
||
"fr": "journal introuvable",
|
||
"en": "log not found",
|
||
},
|
||
"mail_log_empty": {"fr": "journal vide", "en": "log empty"},
|
||
"mail_log_unreadable": {
|
||
"fr": "journal illisible",
|
||
"en": "log unreadable",
|
||
},
|
||
"mail_log_no_errors": {
|
||
"fr": "Aucune erreur de synchronisation dans cette session.",
|
||
"en": "No sync errors in this session.",
|
||
},
|
||
"mail_layout_binding": {"fr": "Vue", "en": "View"},
|
||
"mail_layout_switched": {"fr": "Disposition :", "en": "Layout:"},
|
||
"mail_layout_columns": {"fr": "Colonnes", "en": "Columns"},
|
||
"mail_layout_split": {"fr": "Partagée", "en": "Split"},
|
||
"mail_layout_stacked": {"fr": "Empilée", "en": "Stacked"},
|
||
"mail_pane_grow_binding": {"fr": "Agrandir volet", "en": "Grow pane"},
|
||
"mail_pane_shrink_binding": {
|
||
"fr": "Rétrécir volet",
|
||
"en": "Shrink pane",
|
||
},
|
||
"mail_pane_reset_binding": {
|
||
"fr": "Tailles par défaut",
|
||
"en": "Reset sizes",
|
||
},
|
||
"mail_pane_reset_done": {
|
||
"fr": "Tailles des volets réinitialisées.",
|
||
"en": "Pane sizes reset.",
|
||
},
|
||
"mail_pane_splitter_tooltip": {
|
||
"fr": "Glisser pour redimensionner",
|
||
"en": "Drag to resize",
|
||
},
|
||
"mail_fullscreen_binding": {"fr": "Plein écran", "en": "Full screen"},
|
||
# -- Libellés des raccourcis de MailApp (suffixe _binding) -------------
|
||
# Ce sont les descriptions des `Binding` de `MailApp` : elles s'affichent
|
||
# au pied d'écran ET, depuis la tâche 26, dans la fenêtre d'aide (`h`),
|
||
# qui les lit directement dans `MailApp.BINDINGS`. Le français est repris
|
||
# MOT POUR MOT de ce qui était écrit en dur avant cette tâche — le pied
|
||
# d'écran d'un utilisateur francophone ne change pas.
|
||
"mail_quit_binding": {"fr": "Quitter", "en": "Quit"},
|
||
"mail_sync_current_binding": {"fr": "Sync", "en": "Sync"},
|
||
"mail_sync_all_binding": {"fr": "Sync tout", "en": "Sync all"},
|
||
"mail_back_binding": {"fr": "Retour", "en": "Back"},
|
||
"mail_search_binding": {"fr": "Rechercher", "en": "Search"},
|
||
"mail_mark_seen_binding": {"fr": "Lu", "en": "Read"},
|
||
"mail_mark_unseen_binding": {"fr": "Non lu", "en": "Unread"},
|
||
"mail_save_attachment_binding": {
|
||
"fr": "Enregistrer PJ",
|
||
"en": "Save attachment",
|
||
},
|
||
"mail_compose_binding": {"fr": "Écrire", "en": "Compose"},
|
||
"mail_reply_binding": {"fr": "Répondre", "en": "Reply"},
|
||
"mail_reply_all_binding": {"fr": "Répondre à tous", "en": "Reply all"},
|
||
"mail_forward_binding": {"fr": "Transférer", "en": "Forward"},
|
||
"mail_add_account_binding": {
|
||
"fr": "Nouveau compte",
|
||
"en": "New account",
|
||
},
|
||
# -- Fenêtre d'aide (touche h) -----------------------------------------
|
||
# La liste des touches n'est PAS ici : elle est engendrée depuis
|
||
# `MailApp.BINDINGS` (voir `HelpScreen`), avec les libellés ci-dessus.
|
||
# Seul ce qu'une liste de touches ne peut pas dire est rédigé ici.
|
||
"mail_help_binding": {"fr": "Aide", "en": "Help"},
|
||
"mail_help_close": {"fr": "Fermer", "en": "Close"},
|
||
"mail_help_title": {
|
||
"fr": "Aide — client courriel",
|
||
"en": "Help — mail client",
|
||
},
|
||
"mail_help_keys_heading": {
|
||
"fr": "Raccourcis clavier :",
|
||
"en": "Keyboard shortcuts:",
|
||
},
|
||
"mail_help_notes_heading": {"fr": "Bon à savoir :", "en": "Good to know:"},
|
||
"mail_help_mouse": {
|
||
"fr": (
|
||
"Souris : glisser une barre entre deux volets les redimensionne."
|
||
" Au clavier, + et - font de même sur le volet qui a le focus, et"
|
||
" 0 remet les tailles par défaut. Les tailles sont retenues par"
|
||
" disposition."
|
||
),
|
||
"en": (
|
||
"Mouse: drag a bar between two panes to resize them. From the"
|
||
" keyboard, + and - do the same to the focused pane, and 0 resets"
|
||
" the sizes. Sizes are remembered per layout."
|
||
),
|
||
},
|
||
"mail_help_layouts": {
|
||
"fr": (
|
||
"Dispositions : v passe de colonnes à partagée, puis empilée, puis"
|
||
" revient à colonnes."
|
||
),
|
||
"en": (
|
||
"Layouts: v cycles columns, split, stacked, then back to columns."
|
||
),
|
||
},
|
||
"mail_help_sync": {
|
||
"fr": (
|
||
"Synchronisation : r synchronise le compte du dossier sélectionné"
|
||
" (tous ses dossiers), R synchronise tous les comptes. La"
|
||
" synchronisation automatique ne tourne QUE tant que le client est"
|
||
" ouvert, à l'intervalle mail_refresh_sec (300 s par défaut ; 0 la"
|
||
" désactive)."
|
||
),
|
||
"en": (
|
||
"Sync: r syncs the account of the selected folder (all its"
|
||
" folders), R syncs every account. The automatic refresh runs ONLY"
|
||
" while the client is open, at the mail_refresh_sec interval (300 s"
|
||
" by default; 0 disables it)."
|
||
),
|
||
},
|
||
"mail_help_files": {
|
||
"fr": (
|
||
"Fichiers : le journal est dans ~/.erplibre/mail.log (la touche l"
|
||
" en montre la fin), les comptes dans"
|
||
" ~/.erplibre/mail/accounts.json. Les mots de passe n'y sont JAMAIS"
|
||
" écrits : ils vivent dans le coffre kdbx ou le trousseau du"
|
||
" système."
|
||
),
|
||
"en": (
|
||
"Files: the log lives in ~/.erplibre/mail.log (the l key shows its"
|
||
" tail), the accounts in ~/.erplibre/mail/accounts.json. Passwords"
|
||
" are NEVER written there: they live in the kdbx vault or in the"
|
||
" system keyring."
|
||
),
|
||
},
|
||
"mail_help_close_hint": {
|
||
"fr": "Échap ferme cette fenêtre.",
|
||
"en": "Esc closes this window.",
|
||
},
|
||
# -- Exceptions internes au paquet courriel (préfixe mail_err_) --------
|
||
# Label traduit, données dynamiques (chemins, texte serveur, valeurs de
|
||
# config) concaténées crues : jamais de traduction d'un message serveur
|
||
# ou d'un chemin de fichier.
|
||
#
|
||
# Quelques messages ont la donnée dynamique AU MILIEU de la phrase : ils
|
||
# sont donc assemblés à partir de deux clés (voire trois), dans un ordre
|
||
# FIXE codé au site d'appel plutôt que par une seule clé avec un
|
||
# emplacement — mail_err_unknown_security + mail_err_expected,
|
||
# mail_err_key_wrong_length + mail_err_octets_unit,
|
||
# mail_err_mode_prefix + mail_err_mode_requires_key(_no_vault),
|
||
# mail_err_imap_connection_prefix / mail_err_smtp_connection_prefix +
|
||
# mail_err_connection_refused_suffix, et mail_err_keyring_plaintext +
|
||
# mail_err_keyring_plaintext_hint. L'ordre des mots vit donc dans le
|
||
# code, pas dans les chaînes traduisibles : une langue à l'ordre des
|
||
# mots différent devra remplacer ces paires par une convention à
|
||
# emplacement (ex. `.format()`), pas par une simple concaténation.
|
||
"mail_err_envelope_too_short": {
|
||
"fr": "enveloppe trop courte",
|
||
"en": "envelope too short",
|
||
},
|
||
"mail_err_sealed_in_clear_mode": {
|
||
"fr": "donnée chiffrée lue en mode clair : la clé du compte manque",
|
||
"en": "encrypted data read in clear mode: the account key is missing",
|
||
},
|
||
"mail_err_unknown_envelope": {
|
||
"fr": "enveloppe inconnue :",
|
||
"en": "unknown envelope:",
|
||
},
|
||
"mail_err_key_wrong_length": {
|
||
"fr": "la clé doit faire",
|
||
"en": "the key must be",
|
||
},
|
||
"mail_err_octets_unit": {"fr": "octets", "en": "bytes"},
|
||
"mail_err_cryptography_not_installed": {
|
||
"fr": "le paquet cryptography n'est pas installé",
|
||
"en": "the cryptography package is not installed",
|
||
},
|
||
"mail_err_decrypt_refused": {
|
||
"fr": "déchiffrement refusé : clé fausse ou donnée altérée",
|
||
"en": "decryption refused: wrong key or corrupted data",
|
||
},
|
||
"mail_err_envelope_unreadable": {
|
||
"fr": "enveloppe illisible :",
|
||
"en": "unreadable envelope:",
|
||
},
|
||
"mail_err_mode_prefix": {"fr": "le mode", "en": "mode"},
|
||
"mail_err_mode_requires_key": {
|
||
"fr": "exige une clé",
|
||
"en": "requires a key",
|
||
},
|
||
"mail_err_unknown_cache_mode": {
|
||
"fr": "mode de cache inconnu :",
|
||
"en": "unknown cache mode:",
|
||
},
|
||
"mail_err_file_already_exists": {
|
||
"fr": "le fichier existe déjà :",
|
||
"en": "the file already exists:",
|
||
},
|
||
"mail_err_invalid_secret_ref": {
|
||
"fr": "référence de secret invalide :",
|
||
"en": "invalid secret reference:",
|
||
},
|
||
# Notes par fournisseur. Affichées à l'ajout d'un compte ET juste avant
|
||
# de redemander un mot de passe après un refus : elles doivent donner
|
||
# l'adresse EXACTE, pas un chemin de menu — Google et Apple déplacent
|
||
# régulièrement ces pages, et Google cache la sienne.
|
||
"mail_preset_note_gmail": {
|
||
"fr": (
|
||
"Générez-le sur https://myaccount.google.com/apppasswords"
|
||
" (16 caractères, les espaces sont acceptés). La validation en"
|
||
" deux étapes doit être active, sinon la page est vide."
|
||
),
|
||
"en": (
|
||
"Generate one at https://myaccount.google.com/apppasswords"
|
||
" (16 characters, spaces are accepted). Two-step verification"
|
||
" must be on, otherwise the page is empty."
|
||
),
|
||
},
|
||
"mail_preset_note_outlook": {
|
||
"fr": (
|
||
"Générez-le sur https://account.microsoft.com/security."
|
||
" Microsoft ferme l'authentification simple sur les comptes"
|
||
" grand public : sans mot de passe d'application, il faudra"
|
||
" OAuth (phase 2, non implémentée)."
|
||
),
|
||
"en": (
|
||
"Generate one at https://account.microsoft.com/security."
|
||
" Microsoft is closing basic authentication on consumer"
|
||
" accounts: without an app password this needs OAuth (phase 2,"
|
||
" not implemented)."
|
||
),
|
||
},
|
||
"mail_preset_note_icloud": {
|
||
"fr": (
|
||
"Générez-le sur https://account.apple.com, section « Connexion"
|
||
" et sécurité ». L'authentification à deux facteurs doit être"
|
||
" active."
|
||
),
|
||
"en": (
|
||
'Generate one at https://account.apple.com, under "Sign-In and'
|
||
' Security". Two-factor authentication must be on.'
|
||
),
|
||
},
|
||
"mail_preset_note_generic": {
|
||
"fr": "Saisissez les serveurs de votre fournisseur.",
|
||
"en": "Enter your provider's servers.",
|
||
},
|
||
"mail_ask_app_password": {
|
||
"fr": "Mot de passe d'application : ",
|
||
"en": "App password: ",
|
||
},
|
||
"mail_err_password_not_ascii": {
|
||
"fr": (
|
||
"le mot de passe contient un caractère non ASCII, que ce client"
|
||
" IMAP ne sait pas transmettre — il n'a pas été envoyé au"
|
||
" serveur"
|
||
),
|
||
"en": (
|
||
"the password contains a non-ASCII character this IMAP client"
|
||
" cannot transmit — it was never sent to the server"
|
||
),
|
||
},
|
||
"mail_err_no_kdbx_configured": {
|
||
"fr": "aucun fichier kdbx configuré",
|
||
"en": "no kdbx file configured",
|
||
},
|
||
"mail_err_kdbx_unreadable": {
|
||
"fr": "le fichier kdbx n'a pas pu être ouvert",
|
||
"en": "the kdbx file could not be opened",
|
||
},
|
||
"mail_err_no_vault_available": {
|
||
"fr": "aucun coffre disponible : ni kdbx, ni trousseau système",
|
||
"en": "no vault available: neither kdbx nor system keyring",
|
||
},
|
||
"mail_err_keyring_plaintext": {
|
||
"fr": (
|
||
"le trousseau du système écrirait le mot de passe en clair"
|
||
" (backend"
|
||
),
|
||
"en": (
|
||
"the system keyring would store the password in plaintext"
|
||
" (backend"
|
||
),
|
||
},
|
||
"mail_err_keyring_plaintext_hint": {
|
||
"fr": "Utilisez un fichier kdbx, ou déverrouillez un vrai trousseau.",
|
||
"en": "Use a kdbx file, or unlock a real keyring.",
|
||
},
|
||
"mail_err_unknown_security": {
|
||
"fr": "sécurité inconnue :",
|
||
"en": "unknown security:",
|
||
},
|
||
"mail_err_expected": {"fr": "(attendu", "en": "(expected"},
|
||
"mail_err_account_needs_name": {
|
||
"fr": "un compte doit avoir un nom",
|
||
"en": "an account must have a name",
|
||
},
|
||
"mail_err_invalid_account_name": {
|
||
"fr": "nom de compte invalide :",
|
||
"en": "invalid account name:",
|
||
},
|
||
"mail_err_account_name_reason": {
|
||
"fr": "(il sert de nom de dossier et de référence de coffre)",
|
||
"en": "(it is used as a folder name and vault reference)",
|
||
},
|
||
"mail_err_account_unreadable": {
|
||
"fr": "compte illisible :",
|
||
"en": "unreadable account:",
|
||
},
|
||
"mail_err_unknown_preset": {
|
||
"fr": "préréglage inconnu :",
|
||
"en": "unknown preset:",
|
||
},
|
||
"mail_err_not_valid_json": {
|
||
"fr": "n'est pas du JSON valide :",
|
||
"en": "is not valid JSON:",
|
||
},
|
||
"mail_err_should_contain_json_object": {
|
||
"fr": "devrait contenir un objet JSON",
|
||
"en": "should contain a JSON object",
|
||
},
|
||
"mail_err_duplicate_account_names": {
|
||
"fr": "noms de compte en double :",
|
||
"en": "duplicate account names:",
|
||
},
|
||
"mail_err_already_exists_relaunch": {
|
||
"fr": "existe déjà — relancez avec l'option de remplacement",
|
||
"en": "already exists — rerun with the overwrite option",
|
||
},
|
||
"mail_err_symlink_refused": {
|
||
"fr": "est un lien symbolique : cache refusé",
|
||
"en": "is a symlink: cache refused",
|
||
},
|
||
"mail_err_owned_by_other_user": {
|
||
"fr": "appartient à un autre utilisateur : cache refusé",
|
||
"en": "belongs to another user: cache refused",
|
||
},
|
||
"mail_err_cache_unreadable": {
|
||
"fr": "cache illisible, purgez-le et resynchronisez :",
|
||
"en": "unreadable cache, purge it and resynchronise:",
|
||
},
|
||
"mail_err_mode_requires_key_no_vault": {
|
||
"fr": "exige une clé : aucun coffre fourni",
|
||
"en": "requires a key: no vault provided",
|
||
},
|
||
"mail_err_cache_not_open": {
|
||
"fr": "cache non ouvert : appelez open() d'abord",
|
||
"en": "cache not open: call open() first",
|
||
},
|
||
"mail_err_unknown_folder_fields": {
|
||
"fr": "champs de dossier inconnus :",
|
||
"en": "unknown folder fields:",
|
||
},
|
||
"mail_err_unterminated_ampersand": {
|
||
"fr": "séquence & non terminée",
|
||
"en": "unterminated & sequence",
|
||
},
|
||
"mail_err_server_replied": {
|
||
"fr": ": le serveur a répondu",
|
||
"en": ": the server replied",
|
||
},
|
||
"mail_err_no_body_for_uid": {
|
||
"fr": "aucun corps rendu pour l'UID",
|
||
"en": "no body returned for UID",
|
||
},
|
||
"mail_err_imap_connection_prefix": {
|
||
"fr": "connexion IMAP à",
|
||
"en": "IMAP connection to",
|
||
},
|
||
"mail_err_smtp_connection_prefix": {
|
||
"fr": "connexion SMTP à",
|
||
"en": "SMTP connection to",
|
||
},
|
||
"mail_err_connection_refused_suffix": {
|
||
"fr": "refusée :",
|
||
"en": "refused:",
|
||
},
|
||
"mail_err_message_needs_recipient": {
|
||
"fr": "un message doit avoir au moins un destinataire",
|
||
"en": "a message must have at least one recipient",
|
||
},
|
||
"mail_err_attachment_missing": {
|
||
"fr": "pièce jointe introuvable :",
|
||
"en": "attachment not found:",
|
||
},
|
||
"mail_err_no_recipient_nothing_sent": {
|
||
"fr": "aucun destinataire : rien n'a été envoyé",
|
||
"en": "no recipient: nothing was sent",
|
||
},
|
||
"mail_err_send_refused": {"fr": "envoi refusé :", "en": "send refused:"},
|
||
# QEMU — outils de développement des VM graphiques
|
||
"Python IDE, ERPLibre project pre-configured": {
|
||
"fr": "IDE Python, projet ERPLibre pré-configuré",
|
||
"en": "Python IDE, ERPLibre project pre-configured",
|
||
},
|
||
"ERPLibre mobile development (x86_64 only)": {
|
||
"fr": "développement mobile ERPLibre (x86_64 seulement)",
|
||
"en": "ERPLibre mobile development (x86_64 only)",
|
||
},
|
||
"GNOME extensions": {
|
||
"fr": "Extensions GNOME",
|
||
"en": "GNOME extensions",
|
||
},
|
||
"suggested extensions + extension manager": {
|
||
"fr": "extensions suggérées + gestionnaire d'extensions",
|
||
"en": "suggested extensions + extension manager",
|
||
},
|
||
"Development tools for the graphical VMs:": {
|
||
"fr": "Outils de développement des VM graphiques :",
|
||
"en": "Development tools for the graphical VMs:",
|
||
},
|
||
"Development tools (graphical VMs):": {
|
||
"fr": "Outils de développement (VM graphiques) :",
|
||
"en": "Development tools (graphical VMs):",
|
||
},
|
||
"Development tools:": {
|
||
"fr": "Outils de développement :",
|
||
"en": "Development tools:",
|
||
},
|
||
"Disk needed:": {"fr": "Disque nécessaire :", "en": "Disk needed:"},
|
||
"Numbers separated by spaces, [all], blank = none:": {
|
||
"fr": "Numéros séparés par des espaces, [tous], vide = aucun :",
|
||
"en": "Numbers separated by spaces, [all], blank = none:",
|
||
},
|
||
"No graphical VM: these tools are not installed.": {
|
||
"fr": "Aucune VM graphique : ces outils ne seront pas installés.",
|
||
"en": "No graphical VM: these tools are not installed.",
|
||
},
|
||
"Partly skipped (arch or desktop):": {
|
||
"fr": "En partie écartés (architecture ou bureau) :",
|
||
"en": "Partly skipped (arch or desktop):",
|
||
},
|
||
"Installing PyCharm (long)": {
|
||
"fr": "Installation de PyCharm (long)",
|
||
"en": "Installing PyCharm (long)",
|
||
},
|
||
"no JetBrains build for": {
|
||
"fr": "aucune archive JetBrains pour",
|
||
"en": "no JetBrains build for",
|
||
},
|
||
"PyCharm: project config skipped": {
|
||
"fr": "PyCharm : configuration du projet non écrite",
|
||
"en": "PyCharm: project config skipped",
|
||
},
|
||
"PyCharm installed:": {
|
||
"fr": "PyCharm installé :",
|
||
"en": "PyCharm installed:",
|
||
},
|
||
"PyCharm not installed (see above)": {
|
||
"fr": "PyCharm non installé (voir ci-dessus)",
|
||
"en": "PyCharm not installed (see above)",
|
||
},
|
||
"Installing Android Studio (long)": {
|
||
"fr": "Installation d'Android Studio (long)",
|
||
"en": "Installing Android Studio (long)",
|
||
},
|
||
"Android Studio: Google publishes x86_64 only": {
|
||
"fr": "Android Studio : Google ne publie que du x86_64",
|
||
"en": "Android Studio: Google publishes x86_64 only",
|
||
},
|
||
"SDK shared through ANDROID_HOME:": {
|
||
"fr": "SDK partagé via ANDROID_HOME :",
|
||
"en": "SDK shared through ANDROID_HOME:",
|
||
},
|
||
"Android Studio installed:": {
|
||
"fr": "Android Studio installé :",
|
||
"en": "Android Studio installed:",
|
||
},
|
||
"Android Studio not installed (see above)": {
|
||
"fr": "Android Studio non installé (voir ci-dessus)",
|
||
"en": "Android Studio not installed (see above)",
|
||
},
|
||
"no nested KVM: the emulator will not run": {
|
||
"fr": "pas de KVM imbriqué : l'émulateur ne démarrera pas",
|
||
"en": "no nested KVM: the emulator will not run",
|
||
},
|
||
"Suggested GNOME extensions": {
|
||
"fr": "Extensions GNOME suggérées",
|
||
"en": "Suggested GNOME extensions",
|
||
},
|
||
"not in the repos, skipped:": {
|
||
"fr": "absent des dépôts, ignoré :",
|
||
"en": "not in the repos, skipped:",
|
||
},
|
||
"Enable them from Extension Manager, or:": {
|
||
"fr": "À activer depuis le gestionnaire d'extensions, ou :",
|
||
"en": "Enable them from Extension Manager, or:",
|
||
},
|
||
"GNOME Shell not found, site extensions skipped": {
|
||
"fr": "GNOME Shell introuvable, extensions du site ignorées",
|
||
"en": "GNOME Shell not found, site extensions skipped",
|
||
},
|
||
"installed and enabled:": {
|
||
"fr": "installée et activée :",
|
||
"en": "installed and enabled:",
|
||
},
|
||
"not available for this GNOME, skipped:": {
|
||
"fr": "indisponible pour ce GNOME, ignorée :",
|
||
"en": "not available for this GNOME, skipped:",
|
||
},
|
||
"log out and back in to load them": {
|
||
"fr": "se déconnecter puis se reconnecter pour les charger",
|
||
"en": "log out and back in to load them",
|
||
},
|
||
"open the project once and close PyCharm; the .idea it writes is what the install configures": {
|
||
"fr": "ouvrir le projet une fois puis fermer PyCharm : le .idea qu'il écrit est ce que l'installation configure",
|
||
"en": "open the project once and close PyCharm; the .idea it writes is what the install configures",
|
||
},
|
||
"command": {"fr": "commande", "en": "command"},
|
||
"release feed unreachable: unified build, it will ask for a JetBrains account": {
|
||
"fr": "flux des versions injoignable : build unifié, il demandera un compte JetBrains",
|
||
"en": "release feed unreachable: unified build, it will ask for a JetBrains account",
|
||
},
|
||
"Creating the PyCharm project (first open)": {
|
||
"fr": "Création du projet PyCharm (première ouverture)",
|
||
"en": "Creating the PyCharm project (first open)",
|
||
},
|
||
"PyCharm missing, step skipped": {
|
||
"fr": "PyCharm absent, étape sautée",
|
||
"en": "PyCharm missing, step skipped",
|
||
},
|
||
"no Xvfb here, open PyCharm by hand": {
|
||
"fr": "pas de Xvfb ici : ouvrir PyCharm à la main",
|
||
"en": "no Xvfb here, open PyCharm by hand",
|
||
},
|
||
"ERPLibre mobile (build)": {
|
||
"fr": "ERPLibre mobile (compilation)",
|
||
"en": "ERPLibre mobile (build)",
|
||
},
|
||
"APK debug + Vitest, validates the VM": {
|
||
"fr": "APK debug + Vitest, valide la VM",
|
||
"en": "APK debug + Vitest, validates the VM",
|
||
},
|
||
"Building ERPLibre mobile (long)": {
|
||
"fr": "Compilation d'ERPLibre mobile (long)",
|
||
"en": "Building ERPLibre mobile (long)",
|
||
},
|
||
"detailed log in the VM:": {
|
||
"fr": "journal détaillé dans la VM :",
|
||
"en": "detailed log in the VM:",
|
||
},
|
||
"FAILED:": {"fr": "ÉCHEC :", "en": "FAILED:"},
|
||
"probable cause:": {"fr": "cause probable :", "en": "probable cause:"},
|
||
"no known pattern, last lines:": {
|
||
"fr": "aucun motif connu, dernières lignes :",
|
||
"en": "no known pattern, last lines:",
|
||
},
|
||
"a failed mobile build marks the VM as failed": {
|
||
"fr": "une compilation mobile en échec marque la VM en échec",
|
||
"en": "a failed mobile build marks the VM as failed",
|
||
},
|
||
"ERPLibre venv (everything below needs it)": {
|
||
"fr": "venv ERPLibre (tout ce qui suit en dépend)",
|
||
"en": "ERPLibre venv (everything below needs it)",
|
||
},
|
||
"mobile repository (additive manifest)": {
|
||
"fr": "dépôt mobile (manifeste additif)",
|
||
"en": "mobile repository (additive manifest)",
|
||
},
|
||
"prerequisites of the upstream installer": {
|
||
"fr": "prérequis de l'installateur amont",
|
||
"en": "prerequisites of the upstream installer",
|
||
},
|
||
"Android SDK, licences, NDK": {
|
||
"fr": "SDK Android, licences, NDK",
|
||
"en": "Android SDK, licences, NDK",
|
||
},
|
||
"SDK platform required by the project": {
|
||
"fr": "plateforme SDK réclamée par le projet",
|
||
"en": "SDK platform required by the project",
|
||
},
|
||
"npm dependencies": {
|
||
"fr": "dépendances npm",
|
||
"en": "npm dependencies",
|
||
},
|
||
"web bundle (vite build)": {
|
||
"fr": "bundle web (vite build)",
|
||
"en": "web bundle (vite build)",
|
||
},
|
||
"native sync (capacitor)": {
|
||
"fr": "synchronisation native (capacitor)",
|
||
"en": "native sync (capacitor)",
|
||
},
|
||
"debug APK (gradle)": {
|
||
"fr": "APK debug (gradle)",
|
||
"en": "debug APK (gradle)",
|
||
},
|
||
"Vitest tests": {"fr": "tests Vitest", "en": "Vitest tests"},
|
||
"APK built:": {"fr": "APK construit :", "en": "APK built:"},
|
||
"browser debugging (no Android):": {
|
||
"fr": "déverminage au navigateur (sans Android) :",
|
||
"en": "browser debugging (no Android):",
|
||
},
|
||
"no APK produced": {
|
||
"fr": "aucun APK produit",
|
||
"en": "no APK produced",
|
||
},
|
||
"disk full": {"fr": "disque plein", "en": "disk full"},
|
||
"SDK platform missing": {
|
||
"fr": "plateforme SDK absente",
|
||
"en": "SDK platform missing",
|
||
},
|
||
"SDK not found (ANDROID_HOME)": {
|
||
"fr": "SDK introuvable (ANDROID_HOME)",
|
||
"en": "SDK not found (ANDROID_HOME)",
|
||
},
|
||
"SDK licences not accepted": {
|
||
"fr": "licences SDK non acceptées",
|
||
"en": "SDK licences not accepted",
|
||
},
|
||
"NDK missing": {"fr": "NDK absent", "en": "NDK missing"},
|
||
"JDK required by the project missing": {
|
||
"fr": "JDK réclamé par le projet absent",
|
||
"en": "JDK required by the project missing",
|
||
},
|
||
"Gradle running on too old a JDK": {
|
||
"fr": "Gradle tourne sur un JDK trop ancien",
|
||
"en": "Gradle running on too old a JDK",
|
||
},
|
||
"SDK already there (upstream installer replays)": {
|
||
"fr": "SDK déjà là (l'installateur amont se rejoue)",
|
||
"en": "SDK already there (upstream installer replays)",
|
||
},
|
||
"cross-compiled protoc run on the host": {
|
||
"fr": "protoc compilé pour la cible, exécuté sur l'hôte",
|
||
"en": "cross-compiled protoc run on the host",
|
||
},
|
||
"JDK/Gradle mismatch": {
|
||
"fr": "JDK et Gradle incompatibles",
|
||
"en": "JDK/Gradle mismatch",
|
||
},
|
||
"Gradle dependency unreachable (network?)": {
|
||
"fr": "dépendance Gradle injoignable (réseau ?)",
|
||
"en": "Gradle dependency unreachable (network?)",
|
||
},
|
||
"Vitest tests failed": {
|
||
"fr": "tests Vitest en échec",
|
||
"en": "Vitest tests failed",
|
||
},
|
||
"ERPLibre venv incomplete (no pip: python3-venv)": {
|
||
"fr": "venv ERPLibre incomplet (pas de pip : python3-venv)",
|
||
"en": "ERPLibre venv incomplete (no pip: python3-venv)",
|
||
},
|
||
"mobile repository missing": {
|
||
"fr": "dépôt mobile absent",
|
||
"en": "mobile repository missing",
|
||
},
|
||
"ERPLibre venv missing (incomplete install)": {
|
||
"fr": "venv ERPLibre absent (installation incomplète)",
|
||
"en": "ERPLibre venv missing (incomplete install)",
|
||
},
|
||
"smoother, without X11:": {
|
||
"fr": "plus fluide, sans X11 :",
|
||
"en": "smoother, without X11:",
|
||
},
|
||
"Android emulator": {"fr": "Émulateur Android", "en": "Android emulator"},
|
||
"Android emulator (start, tunnel, scrcpy)": {
|
||
"fr": "Émulateur Android (démarrer, tunnel, scrcpy)",
|
||
"en": "Android emulator (start, tunnel, scrcpy)",
|
||
},
|
||
"An emulator is already running on this VM.": {
|
||
"fr": "Un émulateur tourne déjà sur cette VM.",
|
||
"en": "An emulator is already running on this VM.",
|
||
},
|
||
"Only one per AVD; close it first:": {
|
||
"fr": "Un seul par AVD ; le fermer d'abord :",
|
||
"en": "Only one per AVD; close it first:",
|
||
},
|
||
"Close it now? (y/N): ": {
|
||
"fr": "Le fermer maintenant ? (o/N) : ",
|
||
"en": "Close it now? (y/N): ",
|
||
},
|
||
"Closed.": {"fr": "Fermé.", "en": "Closed."},
|
||
"Show a window?": {
|
||
"fr": "Afficher une fenêtre ?",
|
||
"en": "Show a window?",
|
||
},
|
||
"No window - stream with scrcpy (smoother)": {
|
||
"fr": "Sans fenêtre — flux par scrcpy (plus fluide)",
|
||
"en": "No window - stream with scrcpy (smoother)",
|
||
},
|
||
"Window over ssh -X (raw pixels, slower)": {
|
||
"fr": "Fenêtre par ssh -X (pixels bruts, plus lent)",
|
||
"en": "Window over ssh -X (raw pixels, slower)",
|
||
},
|
||
"X11 compression is on (-XC); the screen is 540x1140.": {
|
||
"fr": "La compression X11 est active (-XC) ; l'écran fait 540x1140.",
|
||
"en": "X11 compression is on (-XC); the screen is 540x1140.",
|
||
},
|
||
"Starting the emulator without a window...": {
|
||
"fr": "Démarrage de l'émulateur sans fenêtre…",
|
||
"en": "Starting the emulator without a window...",
|
||
},
|
||
"Could not start it:": {
|
||
"fr": "Démarrage impossible :",
|
||
"en": "Could not start it:",
|
||
},
|
||
"Started. Boot takes about a minute; log in the VM:": {
|
||
"fr": "Démarré. L'amorçage prend environ une minute ; journal dans la VM :",
|
||
"en": "Started. Boot takes about a minute; log in the VM:",
|
||
},
|
||
"1. Emulator started, without a window.": {
|
||
"fr": "1. Émulateur démarré, sans fenêtre.",
|
||
"en": "1. Emulator started, without a window.",
|
||
},
|
||
"If scrcpy will run on THIS machine, I can open it.": {
|
||
"fr": "Si scrcpy tournera sur CETTE machine, je peux l'ouvrir.",
|
||
"en": "If scrcpy will run on THIS machine, I can open it.",
|
||
},
|
||
"Open the tunnel now? (y/N): ": {
|
||
"fr": "Ouvrir le tunnel maintenant ? (o/N) : ",
|
||
"en": "Open the tunnel now? (y/N): ",
|
||
},
|
||
"Port already in use here:": {
|
||
"fr": "Port déjà occupé ici :",
|
||
"en": "Port already in use here:",
|
||
},
|
||
"Close the other tunnel first:": {
|
||
"fr": "Fermer l'autre tunnel d'abord :",
|
||
"en": "Close the other tunnel first:",
|
||
},
|
||
"Tunnel failed:": {"fr": "Tunnel en échec :", "en": "Tunnel failed:"},
|
||
"Tunnel open on localhost:": {
|
||
"fr": "Tunnel ouvert sur localhost:",
|
||
"en": "Tunnel open on localhost:",
|
||
},
|
||
"Then:": {"fr": "Puis :", "en": "Then:"},
|
||
"To close it:": {"fr": "Pour le fermer :", "en": "To close it:"},
|
||
"Android emulator (adb 5555, then scrcpy)": {
|
||
"fr": "Émulateur Android (adb 5555, puis scrcpy)",
|
||
"en": "Android emulator (adb 5555, then scrcpy)",
|
||
},
|
||
"Android emulator over adb + scrcpy": {
|
||
"fr": "Émulateur Android par adb + scrcpy",
|
||
"en": "Android emulator over adb + scrcpy",
|
||
},
|
||
"1. In the VM, start the emulator WITHOUT a window:": {
|
||
"fr": "1. Dans la VM, démarrer l'émulateur SANS fenêtre :",
|
||
"en": "1. In the VM, start the emulator WITHOUT a window:",
|
||
},
|
||
"2. Open the tunnel from YOUR workstation:": {
|
||
"fr": "2. Ouvrir le tunnel depuis VOTRE poste :",
|
||
"en": "2. Open the tunnel from YOUR workstation:",
|
||
},
|
||
"3. Then, still on your workstation:": {
|
||
"fr": "3. Puis, toujours sur votre poste :",
|
||
"en": "3. Then, still on your workstation:",
|
||
},
|
||
"scrcpy on Debian/Ubuntu:": {
|
||
"fr": "scrcpy sur Debian/Ubuntu :",
|
||
"en": "scrcpy on Debian/Ubuntu:",
|
||
},
|
||
"Android emulator (Pixel)": {
|
||
"fr": "Émulateur Android (Pixel)",
|
||
"en": "Android emulator (Pixel)",
|
||
},
|
||
"AVD viewable over ssh -X": {
|
||
"fr": "AVD visible par ssh -X",
|
||
"en": "AVD viewable over ssh -X",
|
||
},
|
||
"Android emulator (AVD)": {
|
||
"fr": "Émulateur Android (AVD)",
|
||
"en": "Android emulator (AVD)",
|
||
},
|
||
"no /dev/kvm: nested virtualisation is off on the host": {
|
||
"fr": "pas de /dev/kvm : virtualisation imbriquée coupée sur l'hôte",
|
||
"en": "no /dev/kvm: nested virtualisation is off on the host",
|
||
},
|
||
"user added to the kvm group (effective at next login)": {
|
||
"fr": "utilisateur ajouté au groupe kvm (effectif à la prochaine session)",
|
||
"en": "user added to the kvm group (effective at next login)",
|
||
},
|
||
"emulator and system image": {
|
||
"fr": "émulateur et image système",
|
||
"en": "emulator and system image",
|
||
},
|
||
"Pixel profile, smallest screen": {
|
||
"fr": "profil Pixel, plus petit écran",
|
||
"en": "Pixel profile, smallest screen",
|
||
},
|
||
"create the AVD": {"fr": "création de l'AVD", "en": "create the AVD"},
|
||
"AVD ready:": {"fr": "AVD prêt :", "en": "AVD ready:"},
|
||
"open it from your workstation:": {
|
||
"fr": "à ouvrir depuis votre poste :",
|
||
"en": "open it from your workstation:",
|
||
},
|
||
"then install the APK:": {
|
||
"fr": "puis installer l'APK :",
|
||
"en": "then install the APK:",
|
||
},
|
||
"ERPLibre mobile, Android SDK (long)": {
|
||
"fr": "ERPLibre mobile, SDK Android (long)",
|
||
"en": "ERPLibre mobile, Android SDK (long)",
|
||
},
|
||
"Gradle task failed": {
|
||
"fr": "tâche Gradle en échec",
|
||
"en": "Gradle task failed",
|
||
},
|
||
"project created, the install will configure it": {
|
||
"fr": "projet créé, l'installation va le configurer",
|
||
"en": "project created, the install will configure it",
|
||
},
|
||
"no .idea: open PyCharm once, then": {
|
||
"fr": "pas de .idea : ouvrir PyCharm une fois, puis",
|
||
"en": "no .idea: open PyCharm once, then",
|
||
},
|
||
"project": {"fr": "projet", "en": "project"},
|
||
"Instance": {
|
||
"fr": "🛰 Instance",
|
||
"en": "🛰 Instance",
|
||
},
|
||
"Monitoring - a backup, a remote copy or a live instance": {
|
||
"fr": "🛰 Monitoring - une sauvegarde, une copie distante ou une instance vivante",
|
||
"en": "🛰 Monitoring - a backup, a remote copy or a live instance",
|
||
},
|
||
"Inspect an instance.": {
|
||
"fr": "Ausculter une instance.",
|
||
"en": "Inspect an instance.",
|
||
},
|
||
"A local backup .zip": {
|
||
"fr": "Une sauvegarde .zip locale",
|
||
"en": "A local backup .zip",
|
||
},
|
||
"A remote backup (https + master password)": {
|
||
"fr": "Une sauvegarde distante (https + mot de passe maître)",
|
||
"en": "A remote backup (https + master password)",
|
||
},
|
||
"A live remote instance": {
|
||
"fr": "Une instance vivante distante",
|
||
"en": "A live remote instance",
|
||
},
|
||
"An API key": {
|
||
"fr": "Une clé d'API",
|
||
"en": "An API key",
|
||
},
|
||
"A password": {
|
||
"fr": "Un mot de passe",
|
||
"en": "A password",
|
||
},
|
||
"API key: ": {
|
||
"fr": "Clé d'API : ",
|
||
"en": "API key: ",
|
||
},
|
||
"Password: ": {
|
||
"fr": "Mot de passe : ",
|
||
"en": "Password: ",
|
||
},
|
||
"User login: ": {
|
||
"fr": "Identifiant : ",
|
||
"en": "User login: ",
|
||
},
|
||
"Instance URL (ex. https://example.com): ": {
|
||
"fr": "URL de l'instance (ex. https://exemple.com) : ",
|
||
"en": "Instance URL (ex. https://example.com): ",
|
||
},
|
||
"Database name on that instance: ": {
|
||
"fr": "Nom de la base sur cette instance : ",
|
||
"en": "Database name on that instance: ",
|
||
},
|
||
"Cannot connect: ": {
|
||
"fr": "Connexion impossible : ",
|
||
"en": "Cannot connect: ",
|
||
},
|
||
"Connected as uid": {
|
||
"fr": "Connecté sous l'uid",
|
||
"en": "Connected as uid",
|
||
},
|
||
"The instance refused these credentials.": {
|
||
"fr": "L'instance a refusé ces identifiants.",
|
||
"en": "The instance refused these credentials.",
|
||
},
|
||
"Monitoring only reads; refused method:": {
|
||
"fr": "Le monitoring ne fait que lire ; méthode refusée :",
|
||
"en": "Monitoring only reads; refused method:",
|
||
},
|
||
"Database:": {
|
||
"fr": "Base :",
|
||
"en": "Database:",
|
||
},
|
||
"Live instance:": {
|
||
"fr": "Instance vivante :",
|
||
"en": "Live instance:",
|
||
},
|
||
"Database name (default=": {
|
||
"fr": "Nom de la base (défaut=",
|
||
"en": "Database name (default=",
|
||
},
|
||
"Neutralize the database (Y/n)? ": {
|
||
"fr": "Neutraliser la base (O/n) ? ",
|
||
"en": "Neutralize the database (Y/n)? ",
|
||
},
|
||
"The restore failed.": {
|
||
"fr": "La restauration a échoué.",
|
||
"en": "The restore failed.",
|
||
},
|
||
"The download did not produce a usable file.": {
|
||
"fr": "Le téléchargement n'a pas produit de fichier utilisable.",
|
||
"en": "The download did not produce a usable file.",
|
||
},
|
||
"db_restore only reads image_db/. Link it there": {
|
||
"fr": "db_restore ne lit que image_db/. Y poser un lien",
|
||
"en": "db_restore only reads image_db/. Link it there",
|
||
},
|
||
"Using the file already in image_db: ": {
|
||
"fr": "On prend le fichier déjà dans image_db : ",
|
||
"en": "Using the file already in image_db: ",
|
||
},
|
||
"Cannot link into image_db: ": {
|
||
"fr": "Impossible de poser le lien dans image_db : ",
|
||
"en": "Cannot link into image_db: ",
|
||
},
|
||
"You can log in with test / test.": {
|
||
"fr": "Vous pouvez vous connecter avec test / test.",
|
||
"en": "You can log in with test / test.",
|
||
},
|
||
"update_prod_to_dev did not finish: do not": {
|
||
"fr": "update_prod_to_dev n'a pas fini : ne comptez pas",
|
||
"en": "update_prod_to_dev did not finish: do not",
|
||
},
|
||
"count on the test/test account.": {
|
||
"fr": "sur le compte test/test.",
|
||
"en": "count on the test/test account.",
|
||
},
|
||
"database.is_neutralized is set.": {
|
||
"fr": "database.is_neutralized est posé.",
|
||
"en": "database.is_neutralized is set.",
|
||
},
|
||
"database.is_neutralized is NOT set — Odoo does not": {
|
||
"fr": "database.is_neutralized n'est PAS posé — Odoo ne considère pas",
|
||
"en": "database.is_neutralized is NOT set — Odoo does not",
|
||
},
|
||
"consider this database neutralised.": {
|
||
"fr": "cette base comme neutralisée.",
|
||
"en": "consider this database neutralised.",
|
||
},
|
||
"scheduled actions are still active.": {
|
||
"fr": "actions planifiées sont encore actives.",
|
||
"en": "scheduled actions are still active.",
|
||
},
|
||
"No scheduled action is active.": {
|
||
"fr": "Aucune action planifiée n'est active.",
|
||
"en": "No scheduled action is active.",
|
||
},
|
||
"No mail server at all: Odoo falls back to smtp_server": {
|
||
"fr": "Aucun serveur de courriel : Odoo retombe sur le smtp_server",
|
||
"en": "No mail server at all: Odoo falls back to smtp_server",
|
||
},
|
||
"from the config file. A blocking one is safer than none.": {
|
||
"fr": "du fichier de configuration. Un serveur bouchon vaut mieux que rien.",
|
||
"en": "from the config file. A blocking one is safer than none.",
|
||
},
|
||
"payment provider(s) are neither disabled nor": {
|
||
"fr": "fournisseur(s) de paiement ne sont ni désactivés ni",
|
||
"en": "payment provider(s) are neither disabled nor",
|
||
},
|
||
"in test mode.": {
|
||
"fr": "en mode test.",
|
||
"en": "in test mode.",
|
||
},
|
||
"Run": {
|
||
"fr": "Lancer",
|
||
"en": "Run",
|
||
},
|
||
"Enter to run it.": {
|
||
"fr": "Entrée pour le lancer.",
|
||
"en": "Enter to run it.",
|
||
},
|
||
"Not available for this source.": {
|
||
"fr": "Indisponible pour cette provenance.",
|
||
"en": "Not available for this source.",
|
||
},
|
||
"Migration leftovers": {
|
||
"fr": "🚚 Restant de migration",
|
||
"en": "🚚 Migration leftovers",
|
||
},
|
||
"What a migration left behind, judged without needing the step-by-step databases.": {
|
||
"fr": "Ce qu'une migration a laissé derrière elle, jugé sans avoir besoin des bases de palier.",
|
||
"en": "What a migration left behind, judged without needing the step-by-step databases.",
|
||
},
|
||
"It reads pg_catalog — indexes and real tables — which no RPC session exposes.": {
|
||
"fr": "Il lit pg_catalog — les index et les vraies tables — qu'aucune session RPC n'expose.",
|
||
"en": "It reads pg_catalog — indexes and real tables — which no RPC session exposes.",
|
||
},
|
||
"Every view someone changed, and every website copy that shadows a module view.": {
|
||
"fr": "Chaque vue que quelqu'un a modifiée, et chaque copie de site web qui masque une vue de module.",
|
||
"en": "Every view someone changed, and every website copy that shadows a module view.",
|
||
},
|
||
"Comparing a copy with the module view it hides is a join on arch_db, done in SQL.": {
|
||
"fr": "Comparer une copie à la vue de module qu'elle masque est une jointure sur arch_db, faite en SQL.",
|
||
"en": "Comparing a copy with the module view it hides is a join on arch_db, done in SQL.",
|
||
},
|
||
"Fields and models added outside any module, and which of them have no column behind them.": {
|
||
"fr": "Champs et modèles ajoutés hors de tout module, et lesquels n'ont aucune colonne derrière eux.",
|
||
"en": "Fields and models added outside any module, and which of them have no column behind them.",
|
||
},
|
||
"Telling a declared field from a real column means reading pg_attribute.": {
|
||
"fr": "Distinguer un champ déclaré d'une vraie colonne demande de lire pg_attribute.",
|
||
"en": "Telling a declared field from a real column means reading pg_attribute.",
|
||
},
|
||
"What a migration left behind, read in one database.": {
|
||
"fr": "Ce qu'une migration a laissé derrière elle, lu dans une seule base.",
|
||
"en": "What a migration left behind, read in one database.",
|
||
},
|
||
"Migration residue in": {
|
||
"fr": "Restant de migration dans",
|
||
"en": "Migration residue in",
|
||
},
|
||
"base module version:": {
|
||
"fr": "version du module base :",
|
||
"en": "base module version:",
|
||
},
|
||
"None of the checks found anything.": {
|
||
"fr": "Aucun contrôle n'a rien trouvé.",
|
||
"en": "None of the checks found anything.",
|
||
},
|
||
"This reads one database on its own — it cannot see": {
|
||
"fr": "Ceci ne lit qu'une base isolée — il ne peut pas voir",
|
||
"en": "This reads one database on its own — it cannot see",
|
||
},
|
||
"what an earlier step silently dropped.": {
|
||
"fr": "ce qu'un palier antérieur a laissé tomber en silence.",
|
||
"en": "what an earlier step silently dropped.",
|
||
},
|
||
"could not read": {
|
||
"fr": "lecture impossible",
|
||
"en": "could not read",
|
||
},
|
||
"no repair tool yet": {
|
||
"fr": "pas encore d'outil de réparation",
|
||
"en": "no repair tool yet",
|
||
},
|
||
"Modules stuck between two states": {
|
||
"fr": "Modules figés entre deux états",
|
||
"en": "Modules stuck between two states",
|
||
},
|
||
"A migration that stopped mid-flight leaves them there; Odoo will retry the transition at every start.": {
|
||
"fr": "Une migration arrêtée en vol les laisse ainsi ; Odoo retentera la transition à chaque démarrage.",
|
||
"en": "A migration that stopped mid-flight leaves them there; Odoo will retry the transition at every start.",
|
||
},
|
||
"Languages whose active flag is NULL": {
|
||
"fr": "Langues dont le drapeau actif est NULL",
|
||
"en": "Languages whose active flag is NULL",
|
||
},
|
||
"A boolean that is neither true nor false: the language is listed nowhere and cannot be re-enabled from the interface.": {
|
||
"fr": "Un booléen qui n'est ni vrai ni faux : la langue n'est listée nulle part et ne peut plus être réactivée depuis l'interface.",
|
||
"en": "A boolean that is neither true nor false: the language is listed nowhere and cannot be re-enabled from the interface.",
|
||
},
|
||
"Indexes duplicated by the Odoo 17 renaming": {
|
||
"fr": "Index doublés par le renommage d'Odoo 17",
|
||
"en": "Indexes duplicated by the Odoo 17 renaming",
|
||
},
|
||
"Odoo 17 changed the naming convention without dropping the old index: both are maintained on every write. This count is a cheap signal — the repair tool compares columns and uniqueness, and is the one to trust.": {
|
||
"fr": "Odoo 17 a changé la convention de nommage sans supprimer l'ancien index : les deux sont entretenus à chaque écriture. Ce compte est un indicateur bon marché — l'outil de réparation compare les colonnes et l'unicité, c'est lui qui fait foi.",
|
||
"en": "Odoo 17 changed the naming convention without dropping the old index: both are maintained on every write. This count is a cheap signal — the repair tool compares columns and uniqueness, and is the one to trust.",
|
||
},
|
||
"Default pricelist missing while product is installed": {
|
||
"fr": "Liste de prix par défaut absente alors que product est installé",
|
||
"en": "Default pricelist missing while product is installed",
|
||
},
|
||
"product.list0 was declared up to Odoo 16 only; nothing recreates it, and a quotation has no price list to pick.": {
|
||
"fr": "product.list0 n'a été déclaré que jusqu'à Odoo 16 ; rien ne le recrée, et un devis n'a aucune liste de prix à choisir.",
|
||
"en": "product.list0 was declared up to Odoo 16 only; nothing recreates it, and a quotation has no price list to pick.",
|
||
},
|
||
"Views bound to a model that no longer exists": {
|
||
"fr": "Vues liées à un modèle qui n'existe plus",
|
||
"en": "Views bound to a model that no longer exists",
|
||
},
|
||
"Opening one raises; the menu that leads to it is a dead end.": {
|
||
"fr": "En ouvrir une lève une erreur ; le menu qui y mène est un cul-de-sac.",
|
||
"en": "Opening one raises; the menu that leads to it is a dead end.",
|
||
},
|
||
"Views inheriting a view that is gone": {
|
||
"fr": "Vues héritant d'une vue disparue",
|
||
"en": "Views inheriting a view that is gone",
|
||
},
|
||
"The whole inheritance chain below them stops rendering.": {
|
||
"fr": "Toute la chaîne d'héritage en dessous cesse de s'afficher.",
|
||
"en": "The whole inheritance chain below them stops rendering.",
|
||
},
|
||
"External ids pointing at a model that is gone": {
|
||
"fr": "Identifiants externes pointant un modèle disparu",
|
||
"en": "External ids pointing at a model that is gone",
|
||
},
|
||
"Every module update that resolves one of them fails.": {
|
||
"fr": "Chaque mise à jour de module qui en résout un échoue.",
|
||
"en": "Every module update that resolves one of them fails.",
|
||
},
|
||
"Attachments whose carrying field is gone": {
|
||
"fr": "Pièces jointes dont le champ porteur a disparu",
|
||
"en": "Attachments whose carrying field is gone",
|
||
},
|
||
"Odoo raises a KeyError merely checking them, and nothing will ever read them again.": {
|
||
"fr": "Odoo lève un KeyError rien qu'en les contrôlant, et plus rien ne les lira jamais.",
|
||
"en": "Odoo raises a KeyError merely checking them, and nothing will ever read them again.",
|
||
},
|
||
"A local database": {
|
||
"fr": "Une base de données locale",
|
||
"en": "A local database",
|
||
},
|
||
"State of the instance": {
|
||
"fr": "🩺 État de l'instance",
|
||
"en": "🩺 State of the instance",
|
||
},
|
||
"Neutralisation, scheduler, backups, queues and who is an administrator — read for the use you intend.": {
|
||
"fr": "Neutralisation, cadenceur, sauvegardes, files et qui est administrateur — lu pour l'usage que vous en faites.",
|
||
"en": "Neutralisation, scheduler, backups, queues and who is an administrator — read for the use you intend.",
|
||
},
|
||
"Several checks read tables no RPC session exposes, and the lateness of a job is computed in SQL.": {
|
||
"fr": "Plusieurs contrôles lisent des tables qu'aucune session RPC n'expose, et le retard d'une tâche se calcule en SQL.",
|
||
"en": "Several checks read tables no RPC session exposes, and the lateness of a job is computed in SQL.",
|
||
},
|
||
"A development copy (restored, neutralised)": {
|
||
"fr": "Une copie de développement (restaurée, neutralisée)",
|
||
"en": "A development copy (restored, neutralised)",
|
||
},
|
||
"An instance in service": {
|
||
"fr": "Une instance en service",
|
||
"en": "An instance in service",
|
||
},
|
||
}
|
||
|
||
|
||
def get_lang() -> str:
|
||
global _current_lang
|
||
if _current_lang is not None:
|
||
return _current_lang
|
||
|
||
# 1. Check env_var.sh file
|
||
if os.path.exists(ENV_VAR_FILE):
|
||
try:
|
||
with open(ENV_VAR_FILE) as f:
|
||
content = f.read()
|
||
match = re.search(
|
||
r'^EL_LANG=["\']?(\w+)["\']?', content, re.MULTILINE
|
||
)
|
||
if match:
|
||
lang = match.group(1)
|
||
if lang in ("fr", "en"):
|
||
_current_lang = lang
|
||
return _current_lang
|
||
except OSError:
|
||
pass
|
||
|
||
# 2. Check env var
|
||
env_lang = os.environ.get("EL_LANG")
|
||
if env_lang in ("fr", "en"):
|
||
_current_lang = env_lang
|
||
return _current_lang
|
||
|
||
# 3. Default
|
||
_current_lang = "fr"
|
||
return _current_lang
|
||
|
||
|
||
def set_lang(lang: str) -> None:
|
||
global _current_lang
|
||
_current_lang = lang
|
||
|
||
# Persist to env_var.sh
|
||
if os.path.exists(ENV_VAR_FILE):
|
||
try:
|
||
with open(ENV_VAR_FILE) as f:
|
||
content = f.read()
|
||
except OSError:
|
||
return
|
||
|
||
new_line = f'EL_LANG="{lang}"'
|
||
if re.search(r"^EL_LANG=", content, re.MULTILINE):
|
||
content = re.sub(
|
||
r'^EL_LANG=["\']?\w*["\']?',
|
||
new_line,
|
||
content,
|
||
count=1,
|
||
flags=re.MULTILINE,
|
||
)
|
||
else:
|
||
content = content.rstrip("\n") + "\n" + new_line + "\n"
|
||
|
||
with open(ENV_VAR_FILE, "w") as f:
|
||
f.write(content)
|
||
|
||
|
||
def lang_is_configured() -> bool:
|
||
"""Check if a language has been explicitly set."""
|
||
if os.path.exists(ENV_VAR_FILE):
|
||
try:
|
||
with open(ENV_VAR_FILE) as f:
|
||
content = f.read()
|
||
return bool(re.search(r"^EL_LANG=", content, re.MULTILINE))
|
||
except OSError:
|
||
pass
|
||
return False
|
||
|
||
|
||
def t(key: str) -> str:
|
||
entry = TRANSLATIONS.get(key)
|
||
if entry is None:
|
||
return key
|
||
lang = get_lang()
|
||
return entry.get(lang, entry.get("fr", key))
|