gestion_table_tournante_libre/src/interface/libelles/import.js
Mathieu Benoit 320b1b1687 [ADD] tags and goals: engine measures, CSV column, commands, bridge
Tags on people and goals on tables now reach every layer below the
screens. The engine measures rounds served, never-served people and
facilitators met, with a floor per goal mode at the diagnostic; the CSV
reads and writes an etiquettes column through the shared split and
spelling reconciliation; commands set tags, goals, their rule and the
two optional criteria, each refusal with cause and remedy; facilitators
and the stored priority order reach the engine through one bridge.
Without goals or the facilitator case, plans equal the reference prints.
Checked: node 4373, navigateur 885, node-long 113.

--- FR ---

[ADD] étiquettes et objectifs : mesures, colonne CSV, commandes, pont

Les étiquettes des personnes et les objectifs des tables atteignent toutes
les couches sous les écrans. Le moteur mesure les tours servis, les
personnes jamais servies et les animateurs rencontrés, avec un plancher
par mode au diagnostic ; le CSV lit et écrit une colonne d'étiquettes par
la découpe et la réconciliation communes ; des commandes posent étiquettes,
objectifs, règle et les deux critères facultatifs, chaque refus avec cause
et remède ; animateurs et ordre écrit passent au moteur par un seul pont.
Sans objectif ni case des animateurs, les plans égalent les empreintes.
Vérifié : node 4373, navigateur 885, node-long 113.

Assisted-by: Claude Opus 5.5
2026-10-11 15:03:13 -04:00

140 lines
6.9 KiB
JavaScript

// © 2026 TechnoLibre (http://www.technolibre.ca)
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
// Les libellés de l'import d'une liste : aperçu et rapport (§ 14.6). Chaque
// clé commence par « import. ». Un nombre, un nom ou un rang s'affiche dans
// son propre nœud de texte : les libellés qui le suivent ne reçoivent que ce
// qui accorde le nom au compte.
// Le singulier jusqu'à un, le pluriel au-delà, comme le veut le français.
const accorde = (n, singulier, pluriel) => (n <= 1 ? singulier : pluriel);
export const TABLE = new Map([
// --- La section et ses commandes (§ 10.1, § 10.2) ----------------------------
[
'import.consigne',
'Choisissez un fichier CSV ou déposez-le sur la fenêtre ; une plage collée dans la grille des participants arrive ici. ' +
"Rien ne s'importe avant l'aperçu.",
],
['import.commande.choisirFichier', 'Choisir un fichier CSV\u{2026}'],
['import.commande.importer', 'Importer'],
['import.commande.fermerApercu', "Fermer l'aperçu"],
['import.commande.ordreDeLaGrille', "Lire les colonnes dans l'ordre de la grille"],
['import.commande.enregistrerRefus', 'Enregistrer les lignes refusées'],
['import.commande.fermerRapport', 'Fermer le rapport'],
['import.refusEnregistres', 'Lignes refusées enregistrées :'],
// --- La sorte d'un message de l'aperçu et du rapport (messageDuBloc) ------
['import.sorte.refus', 'Refus'],
['import.sorte.avis', 'Avis'],
['import.sorte.information', 'Information'],
// --- Le mode de l'import (§ 10.1) -------------------------------------------
['import.mode.titre', "Mode de l'import"],
['import.mode.ajouter', 'Ajouter'],
['import.mode.mettreAJour', 'Mettre à jour'],
['import.mode.remplacer', 'Remplacer'],
// --- L'aperçu : source, encodage, séparateur ---------------------------------
['import.apercu.titre', 'Aperçu'],
['import.apercu.fichier', 'Fichier'],
['import.apercu.collage', 'Texte collé'],
['import.apercu.encodage', 'Encodage'],
['import.apercu.separateur', 'Séparateur'],
['import.encodage.utf8Marque', 'UTF-8 avec marque'],
['import.encodage.utf16le', 'UTF-16 LE'],
['import.encodage.utf16be', 'UTF-16 BE'],
['import.encodage.utf8', 'UTF-8'],
['import.encodage.windows1252', 'windows-1252'],
['import.separateur.pointVirgule', 'point-virgule'],
['import.separateur.virgule', 'virgule'],
['import.separateur.tabulation', 'tabulation'],
['import.separateur.uneColonne', 'une seule colonne'],
// --- L'aperçu : les colonnes et leur association (§ 10.1) --------------------
['import.apercu.colonnes', 'Colonnes'],
['import.apercu.entete', 'En-tête'],
['import.apercu.devient', 'Devient'],
['import.champ.nom', 'nom'],
['import.champ.prenom', 'prénom'],
['import.champ.appartenance', 'appartenance'],
['import.champ.courriel', 'courriel'],
['import.champ.titrePressenti', 'titre pressenti'],
['import.champ.exclu', 'exclu'],
['import.champ.notes', 'notes'],
['import.champ.etiquettes', 'étiquettes'],
['import.exclu.oui', 'oui'],
['import.exclu.non', 'non'],
['import.colonne.nonReconnue', 'non reconnue : ignorée'],
['import.colonne.aTrancher', 'à trancher'],
['import.colonne.ecartee', 'écartée par le choix'],
['import.ambiguite.question', 'Plusieurs colonnes répondent au même champ. Laquelle vaut :'],
// --- L'aperçu : les lignes ---------------------------------------------------
['import.apercu.valides', ({ n }) => accorde(n, 'ligne valide', 'lignes valides')],
['import.apercu.refusees', 'Lignes refusées'],
['import.apercu.ligne', 'Ligne'],
['import.apercu.motif', 'Motif'],
['import.apercu.fusions', 'Orthographes fondues en une appartenance'],
['import.apercu.orthographeLignes', ({ n }) => accorde(n, 'ligne', 'lignes')],
['import.apercu.affichee', 'affichée :'],
['import.apercu.doublons', 'Doublons signalés, jamais fusionnés'],
['import.apercu.doublonLignes', 'lignes'],
['import.apercu.doublonExistants', 'déjà dans la liste :'],
['import.apercu.homonymes', "Ajoutées à côté d'une personne de même nom"],
['import.apercu.multilignes', 'Cellules sur plusieurs lignes qui portent le séparateur : à vérifier'],
// --- Les refus globaux : le remède (§ 10.1) ---------------------------------
['import.remede.caractereNulCollage', 'Retirez le caractère nul du texte collé, ou importez le fichier réenregistré en UTF-8.'],
['import.remede.aucunEntete', "Ajoutez une ligne d'en-tête qui nomme les colonnes, « nom » au moins."],
[
'import.remede.aucunEnteteCollage',
"Ajoutez une ligne d'en-tête qui nomme les colonnes, ou lisez les colonnes dans l'ordre de la grille.",
],
['import.remede.nomNonAssocie', 'Nommez « nom » la colonne des noms.'],
['import.remede.aucuneLigneValide', 'Corrigez les lignes refusées, listées avec leur motif.'],
[
'import.remede.guillemetOuvert',
({ ligne }) => `Fermez le guillemet ouvert${Number.isInteger(ligne) ? ` à la ligne ${ligne}` : ''}.`,
],
[
'import.remede.separateurIntrouvable',
'Séparez les colonnes par « ; », « , » ou une tabulation, en même nombre à chaque ligne.',
],
[
'import.remede.separateurIntrouvableCollage',
"Séparez les colonnes par « ; », « , » ou une tabulation, ou lisez la colonne dans l'ordre de la grille : " +
'chaque ligne devient un nom.',
],
// --- La fenêtre de « Remplacer » (§ 10.1) ------------------------------------
['import.remplacer.titre', 'Remplacer la liste des participants'],
[
'import.remplacer.participants',
({ n }) => `${n} ${accorde(n, 'personne sera supprimée', 'personnes seront supprimées')}`,
],
[
'import.remplacer.reservations',
({ n }) => `${n} ${accorde(n, 'réservation sera supprimée', 'réservations seront supprimées')}`,
],
[
'import.remplacer.titres',
({ n }) =>
`${n} ${accorde(n, 'titre perdra la réservation qui le pourvoit', 'titres perdront la réservation qui les pourvoit')}, ` +
'à un tour au moins',
],
[
'import.remplacer.propositions',
({ n }) => `${n} ${accorde(n, 'proposition deviendra périmée', 'propositions deviendront périmées')}`,
],
// --- Le rapport (§ 10.1) ---------------------------------------------------
['import.rapport.titre', "Rapport d'import"],
['import.rapport.ajoutes', ({ n }) => accorde(n, 'personne ajoutée', 'personnes ajoutées')],
['import.rapport.misAJour', ({ n }) => accorde(n, 'personne mise à jour', 'personnes mises à jour')],
['import.rapport.inchanges', ({ n }) => accorde(n, 'personne inchangée', 'personnes inchangées')],
['import.rapport.retires', ({ n }) => accorde(n, 'personne retirée', 'personnes retirées')],
['import.rapport.reservationsRetirees', ({ n }) => accorde(n, 'réservation retirée', 'réservations retirées')],
['import.rapport.rienEcrit', "Rien n'a changé dans la liste : seules des lignes refusées restent à lire."],
['import.rapport.designees', 'désignées :'],
]);