The Driver's ask: one folder per BUNDLE with its ELEMENTS inside, bundles sorted by capability, highest first. The rail listed every element flat under its own capability, so a bundle's elements were scattered (gospel-resources' five screens sat in three sections). Now each capability section (5 → 1) holds the bundles whose HIGHEST capability it is, in name order; a bundle with several elements is one folder (country-posters, gospel-resources, my-upg-100-list, regions-dashboard, cities-internet), and a single-element bundle is shown as its element. Composites keep their folded composition trees. StudioTree identifies a plugin's row by a `canonical` flag rather than "depth 0", so auto-reveal opens the bundle folder above an element chosen by URL or restored tab. New folder icon; 'elementsCount' and 'elements' in all 11 studio catalogues. check:studio-rail (headless, gates:post) runs the studio's real rail code on the built manifest and asserts the layout and one canonical node per plugin (21 bundles, 33 elements); it fails on the previous rail. Also: poster.json:dpi is declared identical on purpose in check:i18n-never-translated (a unit symbol kept as-is by project decision), which had turned that gate red on main.
54 lines
2.3 KiB
JSON
54 lines
2.3 KiB
JSON
{
|
||
"title": "Studio de plugins",
|
||
"navLabel": "Plugins par capacité",
|
||
"countLabel": "{bundles} paquets · {elements} plugins listés ici",
|
||
"changeLanguage": "Changer de langue",
|
||
"copyEmbed": "Copier le code d’intégration",
|
||
"copy": "Copier",
|
||
"copied": "Copié",
|
||
"scriptEmbed": "Intégration par script",
|
||
"loading": "Chargement de {name}…",
|
||
"couldNotLoad": "Impossible de charger {name}.",
|
||
"chooseElement": "Choisissez un plugin dans la liste.",
|
||
"filterPlaceholder": "Filtrer les plugins",
|
||
"collapseAll": "Tout replier",
|
||
"noMatch": "Aucun plugin ne correspond à « {query} ».",
|
||
"openSection": "Ouvrir {cap}, {label}",
|
||
"part": "partie",
|
||
"noStandalone": "pas de page autonome",
|
||
"cap5": "Coquille d’application",
|
||
"cap4": "Composite",
|
||
"cap3": "Multivue",
|
||
"cap2": "Préréglage",
|
||
"cap1": "Simple",
|
||
"toggleList": "Afficher ou masquer la liste",
|
||
"openViews": "Ouvrir la liste des vues",
|
||
"expandList": "Déplier la liste",
|
||
"collapseList": "Replier la liste",
|
||
"collapse": "Replier",
|
||
"partOf": "partie de {name}, non publiée seule",
|
||
"mapToken": "Jeton de carte",
|
||
"mapboxToken": "Jeton Mapbox",
|
||
"tokenPaste": "Jeton public Mapbox (pk.…)",
|
||
"tokenUrlLabel": "…ou l’URL d’un service de jetons",
|
||
"tokenApply": "Utiliser",
|
||
"tokenClear": "Effacer",
|
||
"tokenStoredHere": "Conservé dans ce navigateur uniquement.",
|
||
"tokenSourceYours": "Votre jeton est utilisé",
|
||
"tokenSourceUrl": "Jeton obtenu de {url}",
|
||
"tokenSourceBuilt": "Jeton intégré à cette page",
|
||
"tokenSourceNone": "Aucun jeton Mapbox : les cartes Mapbox ne peuvent pas charger (MapLibre n’en a pas besoin)",
|
||
"tokenSecret": "C’est un jeton secret (sk.…). Collez un jeton public (pk.…) : cette page est publique.",
|
||
"tokenNotPk": "Un jeton public Mapbox commence par pk.",
|
||
"tokenUrlFailed": "Impossible d’obtenir un jeton depuis cette URL : {why}",
|
||
"settings": "Paramètres",
|
||
"mapEngine": "Moteur de carte",
|
||
"engineDefault": "Celui de chaque carte",
|
||
"engineMapboxNote": "nécessite un jeton",
|
||
"engineMaplibreNote": "aucun jeton requis",
|
||
"tokenNotNeeded": "MapLibre est sélectionné : ses cartes n’ont pas besoin de jeton Mapbox",
|
||
"hideHeader": "Masquer l'en-tête",
|
||
"showHeader": "Afficher l'en-tête",
|
||
"elementsCount": "{n} éléments",
|
||
"elements": "éléments"
|
||
}
|