Badges hang on guests' necks: their content must be exact and stable. The model builds one badge per non-excluded person, from the retained plan or, on demand, from a proposal, which always prints as a draft. Each round says table, seat when seats are assigned, and a title only where a reservation makes the person its holder there; a constant itinerary takes one line. Names sort by code point, never by locale; namesakes carry their id, and a reprint gives the same texts. Without any placement it refuses, pointing at the proposals. Checked: red first; 3343 node tests green from the index alone. --- FR --- [ADD] badges : modèle de planche, du retenu ou d'une proposition choisie Les badges pendent au cou des invités : leur contenu doit être exact et stable. Le modèle fait un badge par personne non exclue, depuis le retenu ou, sur demande, une proposition, toujours imprimée en brouillon. Chaque tour dit la table, le siège sous attribution, et un titre seulement là où une réservation en fait la personne titulaire ; un itinéraire constant tient en une ligne. Les noms se classent par points de code, jamais selon la locale ; les homonymes portent leur identifiant, et une réédition rend les mêmes textes. Sans aucun placement, il refuse et renvoie aux propositions. Vérifié : rouge d'abord ; 3343 node verts depuis l'index seul. Assisted-by: Claude Opus 5.5
74 lines
3.2 KiB
JavaScript
74 lines
3.2 KiB
JavaScript
// © 2026 TechnoLibre (http://www.technolibre.ca)
|
|
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
|
|
|
// L'assemblage des textes de l'application (§ 14.6) : chaque code que lèvent
|
|
// ou rendent src/stockage, src/csv et src/application — refus, avertissements,
|
|
// raisons, causes et remèdes de leurs détails —, chaque libellé figé d'une
|
|
// entrée ou d'un jalon du journal, et les textes de la mise en forme ont leur
|
|
// texte français dans l'une des tables de libelles/, une par domaine. Ce
|
|
// module les réunit par le mécanisme de traduction (traduction.js), dans
|
|
// l'ordre alphabétique de leurs fichiers ; aucune table ne l'importe.
|
|
//
|
|
// Un code sans texte lève : l'écran ne montre jamais un code brut. Une valeur
|
|
// codée d'un détail — état, champ, mode, échec — que la table ne connaît pas
|
|
// lève aussi, au lieu de se taire.
|
|
//
|
|
// Un libellé d'entrée se compose une fois, à l'écriture du geste, et le
|
|
// journal en garde le texte, jamais le code (§ 8.2) : changer un texte ici ne
|
|
// change aucun libellé déjà écrit. libelle compose toujours en français : un
|
|
// texte qui devient une donnée — libellé figé, motif du CSV des refus — ne
|
|
// passe jamais par la langue témoin.
|
|
import { TABLE as CSV } from './libelles/csv.js';
|
|
import { TABLE as EVENEMENTS } from './libelles/evenements.js';
|
|
import { TABLE as FORMAT } from './libelles/format.js';
|
|
import { TABLE as GENERATION } from './libelles/generation.js';
|
|
import { TABLE as MOBILIER } from './libelles/mobilier.js';
|
|
import { TABLE as MOTEUR } from './libelles/moteur.js';
|
|
import { TABLE as PARTICIPANTS } from './libelles/participants.js';
|
|
import { TABLE as PLACES } from './libelles/places.js';
|
|
import { TABLE as PLANCHE } from './libelles/planche.js';
|
|
import { TABLE as SEANCE } from './libelles/seance.js';
|
|
import { TABLE as SORTIES } from './libelles/sorties.js';
|
|
import { TABLE as STOCKAGE } from './libelles/stockage.js';
|
|
import { creerTraduction } from './traduction.js';
|
|
|
|
/** Les tables de libelles/, dans l'ordre alphabétique de leurs fichiers. */
|
|
export const TABLES_APPLICATION = Object.freeze([
|
|
CSV,
|
|
EVENEMENTS,
|
|
FORMAT,
|
|
GENERATION,
|
|
MOBILIER,
|
|
MOTEUR,
|
|
PARTICIPANTS,
|
|
PLACES,
|
|
PLANCHE,
|
|
SEANCE,
|
|
SORTIES,
|
|
STOCKAGE,
|
|
]);
|
|
|
|
const FRANCAIS = creerTraduction(TABLES_APPLICATION);
|
|
|
|
// Un code : des capitales, des chiffres, des soulignés entre deux mots. Un
|
|
// libellé, préfixé du nom de sa table, porte au moins un point.
|
|
const FORME_CODE = /^[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)*$/;
|
|
|
|
/** Les clés de forme code, seules, triées par unités UTF-16 croissantes. */
|
|
export const CODES = Object.freeze(FRANCAIS.cles().filter((cle) => FORME_CODE.test(cle)));
|
|
|
|
/**
|
|
* Le texte français d'une clé et de ses détails (§ 14.6) : un refus, un
|
|
* avertissement, une raison, le libellé figé d'une entrée ou d'un jalon, ou
|
|
* un libellé de l'application.
|
|
*
|
|
* @param {string} cle
|
|
* @param {Object} [details]
|
|
* @returns {string}
|
|
* @throws {RangeError} une clé sans texte, ou une valeur codée de ses détails
|
|
* — état, champ, mode, échec — que la table ne connaît pas ; jamais
|
|
* une raison, qu'une phrase générique nomme
|
|
*/
|
|
export function libelle(cle, details = {}) {
|
|
return FRANCAIS.t(cle, details);
|
|
}
|