iobroker.alias-workbench 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +39 -91
  2. package/admin/css/werkbank.css +15 -0
  3. package/admin/i18n/de.json +701 -1
  4. package/admin/i18n/en.json +701 -1
  5. package/admin/i18n/es.json +701 -1
  6. package/admin/i18n/fr.json +701 -1
  7. package/admin/i18n/it.json +701 -1
  8. package/admin/i18n/nl.json +701 -1
  9. package/admin/i18n/pl.json +701 -1
  10. package/admin/i18n/pt.json +701 -1
  11. package/admin/i18n/ru.json +701 -1
  12. package/admin/i18n/uk.json +701 -1
  13. package/admin/i18n/zh-cn.json +701 -1
  14. package/admin/js/ablage.js +118 -0
  15. package/admin/js/detail.js +64 -3
  16. package/admin/js/entwurf.js +116 -28
  17. package/admin/js/katalog.js +235 -40
  18. package/admin/js/mqtt.js +297 -27
  19. package/admin/js/musternamen.js +70 -26
  20. package/admin/js/objekte.js +2 -0
  21. package/admin/js/schreiben.js +3 -2
  22. package/admin/js/sprache.js +7 -8
  23. package/admin/js/vorlagen.js +8 -3
  24. package/admin/js/vorlagenblatt.js +228 -64
  25. package/admin/js/werte.js +294 -5
  26. package/admin/js/zielleiste.js +19 -10
  27. package/admin/js/zuordnung.js +8 -7
  28. package/admin/js/zustand.js +4 -0
  29. package/admin/js/zustandsliste.js +9 -2
  30. package/admin/vorlagen/hm-dimmer.json +32 -8
  31. package/admin/vorlagen/hm-fensterkontakt-hm.json +20 -5
  32. package/admin/vorlagen/hm-fensterkontakt-hmip.json +28 -7
  33. package/admin/vorlagen/hm-heizgruppe.json +38 -11
  34. package/admin/vorlagen/hm-heizkoerper.json +42 -12
  35. package/admin/vorlagen/hm-rollladen.json +28 -7
  36. package/admin/vorlagen/hm-schaltaktor-lampe.json +24 -6
  37. package/admin/vorlagen/hm-schaltaktor-mehrfach.json +32 -8
  38. package/admin/vorlagen/hm-schaltaktor-steckdose.json +24 -6
  39. package/admin/vorlagen/hm-temperatur-feuchte.json +8 -2
  40. package/admin/vorlagen/hm-wandthermostat.json +36 -9
  41. package/admin/vorlagen/messpunkt.json +40 -10
  42. package/admin/vorlagen/tasmota-lampe.json +48 -12
  43. package/admin/vorlagen/tasmota-mehrfach.json +40 -10
  44. package/admin/vorlagen/tasmota-rgb.json +36 -9
  45. package/admin/vorlagen/tasmota-steckdose.json +56 -14
  46. package/io-package.json +28 -15
  47. package/package.json +2 -2
  48. package/admin/sprachen/de.json +0 -685
  49. package/admin/sprachen/en.json +0 -685
@@ -10,5 +10,705 @@
10
10
  "The Admin setup wizard leaves a bare name such as \"Playroom\" in the icon field, which no longer resolves to a picture and shows as a broken box. With this on, the workbench replaces it. It overwrites a field that is not empty — the dry run names it explicitly.": "L'assistant de configuration de l'Admin laisse dans le champ d'icône un simple nom tel que « Playroom », qui ne renvoie plus à aucune image et s'affiche comme un cadre cassé. Si cette option est activée, l'établi le remplace. Un champ non vide est alors écrasé — la simulation le signale explicitement.",
11
11
  "The Alias Workbench has no running process — everything happens in the Admin tab. These settings control how it writes.": "L'Établi d'alias n'a aucun processus en cours — tout se passe dans l'onglet Admin. Ces réglages déterminent la manière dont il écrit.",
12
12
  "The workbench reads them at runtime from the Admin's own bundle instead of keeping a copy that would age with every update. If that fails, the selection lists simply show what already exists — no error, just fewer entries.": "L'établi les lit à l'exécution depuis le bundle de l'Admin plutôt que de conserver une copie qui vieillirait à chaque mise à jour. En cas d'échec, les listes de sélection n'affichent que l'existant — pas d'erreur, simplement moins d'entrées.",
13
- "Where the templates come from": "D'où viennent les modèles"
13
+ "Where the templates come from": "D'où viennent les modèles",
14
+ "app.connected": "connecté",
15
+ "app.detector": "détecteur de type",
16
+ "app.disconnected": "déconnecté",
17
+ "app.objectsCount": "{0} objets",
18
+ "app.patternsCount": "{0} modèles",
19
+ "app.subsCount": "{0} abonnement(s)",
20
+ "app.subsCount1": "un abonnement",
21
+ "app.subsHint": "Un abonnement couvre toute une branche, et non une valeur isolée : un motif suivi d'un astérisque capture tous les éléments situés en dessous. Le fait de changer de nœud entraîne la désinscription de tous les précédents ; si leur nombre ne cesse d'augmenter, l'un d'entre eux finit par être laissé de côté. En cours de suivi :",
22
+ "app.templatesCount": "{0} modèle(s)",
23
+ "app.title": "Alias Workbench",
24
+ "catalog.loadingText": "Une fois, après une mise à jour administrative — le fichier d'installation ne fait que quelques mégaoctets. Une fois cette opération terminée, le catalogue est enregistré et ne sera plus récupéré par la suite.",
25
+ "catalog.loadingTitle": "Récupération des modèles d'administration",
26
+ "catalog.missing": "Catalogue d'administration indisponible — entrées existantes uniquement",
27
+ "check.allDeliver": "tous livrent",
28
+ "check.allFine": "Tout va bien",
29
+ "check.allOk": "{0} ✓",
30
+ "check.button": "Chèques",
31
+ "check.canSend": "{0}, l'écriture se passe bien",
32
+ "check.cannotSend": "Impossible d'envoyer : {0}",
33
+ "check.checked": "{0} sélectionné",
34
+ "check.duplicate": "Pas de point en double",
35
+ "check.duplicateNone": "chacun pointe vers un autre endroit",
36
+ "check.duplicateSome": "renvoient tous deux à la même chose : {0}",
37
+ "check.feedback": "les retours arrivent immédiatement",
38
+ "check.feedbackFast": "dès à présent, SetOption59 est activée",
39
+ "check.feedbackNone": "aucune ligne concernée — tout a été lu à partir de stat/…",
40
+ "check.feedbackSlow": "retardé : {0}",
41
+ "check.feedbackUnknown": "non coché : {0}",
42
+ "check.formulaYields": "La formule « read » donne un résultat",
43
+ "check.hintCount": "notes : {0}",
44
+ "check.noPatternFits": "aucun modèle ne correspond",
45
+ "check.noWritePath": "no point écrit :",
46
+ "check.notMqtt": "Pas de chemin d'écriture MQTT",
47
+ "check.openCount": "{0} poste à pourvoir",
48
+ "check.publish": "publier sur le point cmnd",
49
+ "check.rolesMakeDevice": "les rôles constituent un dispositif",
50
+ "check.sendPointMissing": "Envoyer une donnée qui n'a pas encore été créée : {0}",
51
+ "check.sendUnknown": "Le fait que « {0} » puisse publier ou non n'est pas précisé dans l'objet — le sujet se trouve uniquement dans `native`. C'est normal pour ioBroker.mqtt et Sonoff.",
52
+ "check.sourceExists": "la source existe",
53
+ "check.sourceHasValue": "la source a une valeur",
54
+ "check.targetCan": "La cible est capable de faire ce qu'on lui demande",
55
+ "check.targetCanFine": "Tout va bien",
56
+ "check.targetNoWrite": "{0} : la cible n'est pas accessible en écriture",
57
+ "check.targetVoidFormula": "{0} : l'exécution de la formule ne donne aucun résultat, la valeur cible est {1}",
58
+ "check.title": "Contrôles — toujours en cours, sans jamais rien toucher",
59
+ "del.allOutputs": "Supprimer toutes les sorties « {0} » de cet appareil",
60
+ "del.allOutputsHint": "Sinon, les autres restent sur le carreau, livrés à eux-mêmes : {0}",
61
+ "del.alsoFunction": "La fonction « {0} », créée en même temps que cet alias, est également supprimée ; sinon, elle resterait vide.",
62
+ "del.alsoRoom": "La salle « {0} », créée en même temps que ce pseudonyme, est également supprimée — sinon, elle resterait vide.",
63
+ "del.button": "Supprimer l'alias…",
64
+ "del.channelsBelow": "Attention : {0} chaînes qui leur appartiennent se trouvent en dessous et seront également supprimées.",
65
+ "del.count": "nombre d'objets à supprimer : {0}",
66
+ "del.done": "Supprimés : {0} objets.",
67
+ "del.hint": "L'alias et tous les éléments qui lui sont associés sont supprimés. Les sources restent inchangées : seule la coquille est supprimée, pas le périphérique. Cette opération est irréversible.",
68
+ "del.now": "Supprimer définitivement",
69
+ "del.objects": "Ce qui disparaît",
70
+ "del.scriptsHead": "{0} scripts mentionnent cet identifiant :",
71
+ "del.scriptsHead1": "Un script mentionne cet identifiant :",
72
+ "del.scriptsHint": "Seuls les scripts de l'adaptateur JavaScript ont été analysés, sous forme de texte brut. Les vues « vis », les scènes et les paramètres des autres adaptateurs ne sont pas pris en compte.",
73
+ "del.title": "Supprimer l'alias",
74
+ "detail.aliasEmpty": "L'alias laisse ce champ vide.",
75
+ "detail.aliasHas": "L'alias contient : ",
76
+ "detail.asDelivered": "tel que livré",
77
+ "detail.attention": "Attention",
78
+ "detail.buttonNoRead": "Bouton sans source de lecture — ne suit pas la lecture",
79
+ "detail.caption": "Légende",
80
+ "detail.captionHint": "devient le nom d'affichage de l'état — visible dans l'interface d'administration, dans VIS et partout où des noms sont utilisés à la place des identifiants",
81
+ "detail.converted": "converti par l'alias",
82
+ "detail.datapoint": "Donnée",
83
+ "detail.decimals": "Nombres décimaux",
84
+ "detail.display": "Affichage",
85
+ "detail.elsewhere": "(ailleurs)",
86
+ "detail.expects": "prévoit {0}",
87
+ "detail.formula": "Lire la formule",
88
+ "detail.formulaBroken": "la formule est erronée",
89
+ "detail.formulaHint": "« ON »/« OFF » → la valeur booléenne est déterminée par l'alias lui-même, aucune formule n'est nécessaire.",
90
+ "detail.formulaPlaceholder": "vide = conserver la valeur telle quelle",
91
+ "detail.formulaThrows": "erreurs de formule : {0}",
92
+ "detail.formulaTooSlow": "Cette formule a pris {0} ms et n'est plus exécutée. Le rafraîchissement de l'onglet permet de la relancer.",
93
+ "detail.jsonField": "Champ dans le fichier JSON",
94
+ "detail.matchesState": "✓ correspond à l'état",
95
+ "detail.name": "Nom",
96
+ "detail.namePlaceholder": "par exemple : UNREACH",
97
+ "detail.nameTaken": "Une autre ligne porte déjà le nom « {0} ».",
98
+ "detail.noSource": "— source inconnue —",
99
+ "detail.noValue": "aucune valeur",
100
+ "detail.noWrite": "— ne pas écrire —",
101
+ "detail.notWritable": "non inscriptible",
102
+ "detail.objectId": "Identifiant de l'objet",
103
+ "detail.otherObject": "… saisir un autre objet",
104
+ "detail.ownFormula": "sa propre formule",
105
+ "detail.pickOne": "— veuillez choisir —",
106
+ "detail.rawNothing": "— la source ne fournit aucune information —",
107
+ "detail.rawValue": "Valeur brute",
108
+ "detail.readIsButton": "bouton",
109
+ "detail.readIsButtonHint": "Bouton « Role » avec une cible d’écriture : le point de données « alias » reçoit la valeur « read » : « false », et Vis, Alexa et Matter l’affichent sous forme de bouton. La source « read » ne pose aucun problème : grâce à elle, l’alias détecte chaque pression, y compris celle sur le bouton physique. Après une pression, la dernière valeur est conservée, comme c’est le cas sur la source.",
110
+ "detail.readOnlySlotWrites": "La valeur {0} est en lecture seule dans le modèle — « écrit dans » devrait être remplacé par « — ne pas écrire — », sinon une valeur écrite est transmise au périphérique.",
111
+ "detail.readsFrom": "est tiré de",
112
+ "detail.removePoint": "Supprimer ce point",
113
+ "detail.role": "Fonction",
114
+ "detail.sameAsRead": "— tel que lu —",
115
+ "detail.separateHint": "La lecture s'effectue à un autre endroit que l'écriture : ce qui s'affiche correspond à ce que le périphérique renvoie, et non à la dernière commande envoyée.",
116
+ "detail.slot": "Placer selon le motif",
117
+ "detail.slotHint": "Définit le rôle, le type, l'unité et la liste de valeurs conformément au modèle prévu pour cet emplacement. Le point de données et le nom sont conservés.",
118
+ "detail.slotNone": "— nulle part —",
119
+ "detail.slotNotGiven": "La valeur {0} est choisie mais n'est pas attribuée — voir la section « Rôle » pour savoir ce qui ne correspond pas (généralement le type).",
120
+ "detail.slotRequired": "obligatoire",
121
+ "detail.sourceGone": "La source n'existe pas",
122
+ "detail.stateSays": "valeur : {0}",
123
+ "detail.states": "Liste des valeurs",
124
+ "detail.statesFromSource": "Récupérer les {0} entrées de la source",
125
+ "detail.statesHint": "Convertit les nombres en texte — l'administrateur affiche alors une liste déroulante à la place d'un champ numérique, et certains emplacements de modèle l'exigent. Laissez ce champ vide s'il n'y a pas de liste de valeurs.",
126
+ "detail.statesPlaceholder": "un par ligne : 0 = fermé",
127
+ "detail.takeFromAlias": "Récupérez cette valeur à partir de l'alias enregistré",
128
+ "detail.takeOne": "Reprenez cette valeur dans le modèle",
129
+ "detail.targetNoWrite": "Le point cible porte la valeur « write: false » : son adaptateur ne transmet rien au périphérique. ioBroker enregistre tout de même la valeur, mais cela n'aura aucune conséquence.",
130
+ "detail.targetTypeHint": "Le point cible est de type {0}. Il détermine ce qui est conservé dans la formule d'écriture : les types « mixed » et « string » conservent le texte, tandis que les types « boolean » et « number » le reconvertissent.",
131
+ "detail.targetTypeVoid": "La cible est {0} et n'accepte aucun texte. La formule d'écriture génère bien du texte — le contrôleur JS le reconvertit en {0} lors de l'écriture, ce qui fait que la formule n'a aucun effet. La commutation fonctionne toujours.",
132
+ "detail.tplWants": "Le modèle nécessite : ",
133
+ "detail.tplWantsEmpty": "Le modèle laisse ce champ vide.",
134
+ "detail.type": "Type",
135
+ "detail.typeNumber": "nombre",
136
+ "detail.unit": "Unité",
137
+ "detail.writeFormula": "Écrire une formule",
138
+ "detail.writeFormulaHint": "convertit dans l'autre sens : ce que l'appareil doit recevoir une fois allumé.",
139
+ "detail.writeFormulaPlaceholder": "par exemple : val ? « ON » : « OFF »",
140
+ "detail.writesTo": "écrit à",
141
+ "detail.yields": "rendements",
142
+ "detail.yieldsNothing": "ne donne aucun résultat",
143
+ "diff.addedNoPlace": "coché en plus — ne fait pas partie du {0}",
144
+ "diff.addedWithPlace": "également coché — fait partie du {0}",
145
+ "diff.againstStored": "par rapport à ce qui est stocké",
146
+ "diff.changes": "Modifications",
147
+ "diff.deselectedNoPlace": "case non cochée — n'aurait de toute façon pas fait partie de l'{0}",
148
+ "diff.deselectedWithPlace": "non coché — fait partie du {0}",
149
+ "diff.deviations": "Écarts par rapport à la proposition",
150
+ "diff.formulaChange": "formule de lecture : {0} → {1}",
151
+ "diff.newByHand": "nouveau, ajouté manuellement",
152
+ "diff.noName": "(sans nom)",
153
+ "diff.nothingExists": "rien de tout cela n'existe encore",
154
+ "diff.open": "{0} poste à pourvoir",
155
+ "diff.points": "{0} point",
156
+ "diff.roleChange": "rôle : {0} → {1}",
157
+ "diff.sourceChange": "source : {0} → {1}",
158
+ "diff.unitChange": "unité : {0} → {1}",
159
+ "diff.wouldBeAdded": "coché — sera ajouté lors de la mise à jour",
160
+ "diff.wouldBeRemoved": "désélectionné — figure dans l'alias et serait supprimé",
161
+ "enums.addTo": "va dans",
162
+ "enums.alsoFolder": "Faut-il aussi enregistrer l'alias sous « {0} » ?",
163
+ "enums.clear": "supprimer l'affectation",
164
+ "enums.function": "Fonction",
165
+ "enums.functionHint": "Attribue l'alias à une fonction telle que « éclairage » ou « chauffage ». Également stocké dans une énumération, et non sur l'objet.",
166
+ "enums.iconAdded": "une icône sera ajoutée",
167
+ "enums.iconNew": "Pas encore d'image — l'atelier l'ajoutera lors de la rédaction",
168
+ "enums.iconNewMark": "nouveau",
169
+ "enums.iconThere": "L'image est enregistrée",
170
+ "enums.members": "{0} dedans",
171
+ "enums.newSuffix": "nouveau",
172
+ "enums.noMatch": "Aucun résultat trouvé pour « {0} »",
173
+ "enums.notLoadedField": "Les salles et les fonctions n'ont pas pu être chargées — elles ne seront donc pas enregistrées ; l'alias lui-même est toutefois créé. L'environnement de travail effectue automatiquement trois tentatives ; sinon, rechargez l'onglet.",
174
+ "enums.nowEmpty": "sera vide par la suite et sera supprimé",
175
+ "enums.placeholder": "vide = aucune affectation",
176
+ "enums.removeFrom": "est retiré",
177
+ "enums.room": "Chambre",
178
+ "enums.roomHint": "Attribue l'alias à une pièce. Celui-ci n'est pas stocké sur l'objet, mais dans l'énumération « enum.rooms » — Alexa, Google et les tableaux de bord effectuent un regroupement en fonction de celui-ci.",
179
+ "enums.suggested": "suggéré",
180
+ "enums.unknown": "Les énumérations ne sont pas chargées — la salle et la fonction restent inchangées.",
181
+ "enums.unused": "vide",
182
+ "enums.willCreate": "Créer un nouveau",
183
+ "folder.aliasMissing": "manquant",
184
+ "folder.aliasThere": "existe",
185
+ "folder.clickHint": "Cliquez sur un appareil pour travailler dessus. ",
186
+ "folder.clickHintText": "Un nœud est considéré comme un périphérique dès qu'un modèle lui correspond ; en dessous de ce seuil, aucune recherche n'est effectuée. En l'absence de correspondance, le nœud apparaît tout de même dans la liste dès qu'il dispose de ses propres points de données.",
187
+ "folder.colAlias": "Alias",
188
+ "folder.colDetected": "détecté comme",
189
+ "folder.colSource": "Source",
190
+ "folder.devices": "Appareils",
191
+ "folder.devicesBelow": "{0} appareil(s) ci-dessous · {1} point(s) de données",
192
+ "folder.found": "{0} résultat(s) trouvé(s)",
193
+ "folder.nothingHere": "Il n'y a rien ici qui puisse servir d'appareil.",
194
+ "folder.withAlias": "{0}, avec alias",
195
+ "folder.withoutTemplate": "{0}, sans modèle",
196
+ "guess.alsoRow": "avec des suggestions : correspond",
197
+ "guess.bar": "{0} emplacements devinés — veuillez vérifier",
198
+ "guess.better": "{0} serait peut-être plus approprié",
199
+ "guess.betterGoHint": "Il passe sur {0} et appuie immédiatement sur « {1} ». Chaque affectation apparaît alors comme « devinée » et doit être vérifiée une par une ; il reste possible d'en écarter certaines. Rien ne change sur l'appareil — seuls les rôles dans la sélection sont définis.",
200
+ "guess.betterHint": "{0} donnerait {1} emplacements occupés, {2} seulement {3} — ces deux chiffres après les suggestions. Sélectionnez cette option, puis cliquez sur « Suggérer des emplacements libres » ; chaque affectation doit être vérifiée.",
201
+ "guess.betterHintNone": "L'option {0} permettrait d'obtenir {1} emplacements occupés après la suggestion ; l'option {2} ne convient pas, même dans ce cas. Sélectionnez-la, puis cliquez sur « Suggérer des emplacements libres » ; chaque affectation doit être vérifiée.",
202
+ "guess.button": "Proposer des machines à sous gratuites",
203
+ "guess.drop": "écarter",
204
+ "guess.hint": "Remplit les emplacements libres du modèle à partir des points de données restants — il s'agit d'une supposition, et non d'une certitude. Les valeurs sont devinées en fonction du nom, de la liste de valeurs, de l'unité et du type ; chaque affectation est marquée comme « supposée » et peut être supprimée une par une.",
205
+ "guess.keep": "conserver",
206
+ "guess.keepAll": "conserver tout",
207
+ "guess.locked": "{0}× devinées, encore indécis — choisir d'abord entre conserver (✓) ou éliminer (✕), puis créer et enregistrer le déblocage.",
208
+ "guess.mark": "deviné",
209
+ "guess.noneFit": "{0} reste libre. Aucun autre élément ne correspond : la recherche s'effectue en fonction du nom, de la liste des valeurs, de l'unité et du type, et aucun élément n'a atteint le seuil requis.",
210
+ "guess.noneFull": "Toutes les cases du motif sont occupées — il n'y a plus rien à suggérer.",
211
+ "guess.noneHand": "{0} lignes ont été déterminées manuellement et n'ont pas été modifiées : {1}.",
212
+ "guess.noneHandOne": "Le {0} a été déterminé manuellement et reste inchangé.",
213
+ "guess.noneUsed": "{0} reste libre. Chaque point de données restant sert déjà de source de lecture ou d'écriture dans une ligne remplie.",
214
+ "guess.slotsMore": "{0} et {1} de plus",
215
+ "guess.tplAsk": "Cet appareil est identifié par le code « {0} », son affectation est donc déjà définie. La suggestion permet de remplir les champs restants à partir des données disponibles — il s'agit d'une hypothèse, et non d'une certitude, et chaque correspondance devrait être vérifiée. Cette fonctionnalité est destinée à des cas particuliers, par exemple lorsque les capacités de l'appareil dépassent celles couvertes par le modèle.",
216
+ "guess.tplGo": "Proposer quand même",
217
+ "guess.tplHint": "Ce modèle couvre déjà cet appareil — les suggestions fournies ici ne concernent donc que des cas particuliers.",
218
+ "guess.tplTitle": "Proposer des emplacements libres malgré la présence d'un modèle ?",
219
+ "guess.undo": "Ignorer les suggestions",
220
+ "help.aliases": "Sélectionnez un alias existant dans la partie gauche. Supprimez des points, modifiez les rôles, les sources et les formules — ou déplacez-le, renommez-le et supprimez-le.",
221
+ "help.aliasesAdd": "Pour ajouter des points à un alias, il est plus simple d'utiliser le chemin « vers la source → » (en haut à droite, à côté du nom de l'alias) : le modèle s'applique à cet endroit, et chaque point de données de l'appareil est proposé avec un rôle prédéfini — ici, vous devriez les saisir un par un manuellement.",
222
+ "help.sources": "Sélectionnez un périphérique ou un canal dans la partie gauche. L'environnement de travail identifie de quoi il s'agit et propose un alias prêt à l'emploi. Si un alias existe déjà, il est mis à jour à la place.",
223
+ "help.templates": "Choisissez un modèle à gauche. Vous pouvez consulter et dupliquer les modèles fournis, et modifier les vôtres. La simulation vous indique avec quels appareils il est compatible.",
224
+ "info.dlgTitle": "Ne fait pas partie du modèle « {0} »",
225
+ "info.explain": "fonctionnent parfaitement normalement et restent là où vous les avez créés. Rien de supplémentaire n’est écrit — l’alias reste tel quel. Ils ne font tout simplement pas partie de ce qu’ioBroker considère comme un {0} ; leur rôle ne correspond à aucun de ses emplacements. Cela n’a d’importance qu’une fois que vous transmettez l’alias à Alexa, Google Home ou à l’interface utilisateur d’un appareil : ceux-ci verront un {0} sans ces points. Dans VIS, dans les scripts et dans l’historique, vous les utilisez comme n’importe quel autre point de données.",
226
+ "info.more": "Ce que cela signifie",
227
+ "leave.body": "Certaines modifications apportées à la version {0} n'ont pas encore été enregistrées. Si vous effectuez la commutation maintenant, celles-ci seront perdues.",
228
+ "leave.discard": "Jeter et changer",
229
+ "leave.stay": "Restez ici",
230
+ "leave.title": "Modifications non enregistrées",
231
+ "list.addByHand": "Ajouter un point de données manuellement",
232
+ "list.aliasDiffers": "diffère de l'alias enregistré",
233
+ "list.all": "tout",
234
+ "list.buttonOnly": "écriture seule",
235
+ "list.byHand": "à la main",
236
+ "list.changed": "modifié",
237
+ "list.colOn": "sur",
238
+ "list.colRole": "Fonction",
239
+ "list.colState": "État",
240
+ "list.colValue": "Valeur",
241
+ "list.countOf": "{0} sur {1}",
242
+ "list.createAria": "créer {0}",
243
+ "list.nameMissing": "nom manquant",
244
+ "list.newPoint": "nouveau point",
245
+ "list.noRole": "— aucun rôle —",
246
+ "list.ofDatapoints": "données",
247
+ "list.onlyPattern": "uniquement ce qui correspond au modèle",
248
+ "list.onlyPatternHint": "Coche uniquement les points qui occupent une case dans le motif sélectionné — tous les autres restent décochés et ne sont pas créés.",
249
+ "list.onlyWithValue": "uniquement avec une valeur",
250
+ "list.otherSource": "à partir de {0}",
251
+ "list.otherSourceHint": "Cette valeur ne commence pas à {0}, mais à {1}.",
252
+ "list.reset": "réinitialiser",
253
+ "list.resetHint": "Annule toutes les modifications apportées ici — cases à cocher, rôles, formules, sources — et affiche à nouveau l'état tel qu'il a été enregistré.",
254
+ "list.sendPointMissing": "Envoyer une donnée qui n'a pas encore été créée",
255
+ "list.sourceGone": "La source n'existe pas",
256
+ "list.sourceHint": "Cette valeur commence à {0}.",
257
+ "list.sourceMissing": "source manquante",
258
+ "list.tpl": "modèle",
259
+ "list.tplDiffers": "diffère du modèle",
260
+ "list.tplHint": "Vérifie précisément les points proposés par le modèle, quelle que soit la valeur actuelle de l'alias.",
261
+ "list.willBeCreated": "sera créé :",
262
+ "move.button": "Déplacer…",
263
+ "move.done": "Déplacé. L'alias se trouve désormais à la position {0}.",
264
+ "move.exists": "{0} existe déjà. Supprimez-le d'abord ou choisissez un autre nom.",
265
+ "move.from": "de",
266
+ "move.needName": "Un nom est obligatoire.",
267
+ "move.nested": "La cible se trouve en dessous de l'alias lui-même (ou l'inverse). Si vous la déplacez, cela supprimerait son nœud parent — veuillez choisir un emplacement à côté de celui-ci.",
268
+ "move.newFolder": "nouveau dossier",
269
+ "move.noFolder": "(pas de dossier — directement sous alias.0)",
270
+ "move.noScripts": "L'identifiant n'apparaît dans aucun script.",
271
+ "move.now": "Agissez dès maintenant",
272
+ "move.scriptLines": "ligne {0}",
273
+ "move.scriptLinesN": "lignes {0}",
274
+ "move.scriptOff": "handicapé",
275
+ "move.scriptsHead": "{0} scripts mentionnent l'ancien identifiant :",
276
+ "move.scriptsHead1": "Un script mentionne l'ancien identifiant :",
277
+ "move.title": "Déplacer un alias",
278
+ "move.to": "à",
279
+ "move.unchanged": "Le dossier et le nom restent inchangés — rien à faire.",
280
+ "move.warnHistory": "Seul le paramètre d'activation de l'enregistrement est transféré. À partir de maintenant, une nouvelle série vide commence sous le nouvel identifiant. Tout ce qui a été enregistré jusqu’à présent reste dans la base de données sous l’ancien identifiant : ces données ne sont pas perdues, mais la série ne sera plus enrichie. Les graphiques et les requêtes Grafana pointant vers l’ancien identifiant ne reçoivent plus de nouvelles données ; s’ils pointent vers le nouvel identifiant, l’historique leur fait défaut.",
281
+ "move.warnHistoryHead": "Les valeurs enregistrées ne changent pas.",
282
+ "move.warnRefs": "En ce qui concerne les vues, les noms Alexa et Google ainsi que les autres adaptateurs ne peuvent pas être vérifiés. Tout élément pointant vers l'ancien identifiant doit être modifié manuellement.",
283
+ "move.warnRefsHead": "Quels autres éléments font référence à l'ancien identifiant ?",
284
+ "move.willMove": "sera déplacé",
285
+ "move.with": "avec",
286
+ "mq.andMore": "… et {0} de plus",
287
+ "mq.ask": "Demandez à l'appareil",
288
+ "mq.askError": "L'opération a échoué : {0}",
289
+ "mq.askGotAnswer": "L'appareil a répondu — commandes détectées : {0}",
290
+ "mq.askHint": "Il s'agit d'une simple requête : elle ne modifie rien et ne change aucun paramètre.",
291
+ "mq.askNoAnswer": "Pas de réponse. Soit l'appareil est hors ligne, soit il écoute sur un autre sujet.",
292
+ "mq.askOffline": "L'appareil ne communique pas pour le moment ; toute requête restera donc sans réponse.",
293
+ "mq.askedDays": "question posée il y a {0} jours",
294
+ "mq.askedHours": "question posée il y a {0} heure(s)",
295
+ "mq.askedMinutes": "question posée il y a {0} minutes",
296
+ "mq.asking": "en interrogeant l'appareil",
297
+ "mq.commandsFrom": "Commandes, lecture à partir de {0}",
298
+ "mq.createdBy": "créé par Alias Workbench",
299
+ "mq.dialogTitle": "Créer des points d'envoi",
300
+ "mq.done": "{0} objets enregistrés.",
301
+ "mq.doneHint": "La détection va redémarrer dans un instant — un modèle qui ne correspondait pas auparavant peut désormais correspondre.",
302
+ "mq.duplicate": "équivalent à {0}",
303
+ "mq.fix": "Créer des points d'envoi…",
304
+ "mq.instant": "Réponse immédiate",
305
+ "mq.instantCheck": "demander",
306
+ "mq.instantChecking": "en demandant",
307
+ "mq.instantEnable": "Activer",
308
+ "mq.instantEnabling": "permettant",
309
+ "mq.instantHintOff": "Sans SetOption59, l'appareil ne transmet des données qu'à la fréquence de son cycle de télémétrie. La lecture « {0} » dans « tele/… » continue d'afficher l'ancienne valeur après la commutation jusqu'à ce moment-là. L'activation de cette option constitue un paramètre permanent de l'appareil : elle ne modifie rien et ne change que la fréquence à laquelle l'appareil transmet des données.",
310
+ "mq.instantHintOffTakt": "Sans SetOption59, l'appareil ne transmet des données que toutes les {1} seconde. Il effectue {0} lecture sur « tele/… » et continue d'afficher l'ancienne valeur après la commutation jusqu'à ce moment-là. L'activation de cette option constitue un réglage permanent de l'appareil : elle ne modifie rien et ne change que la fréquence à laquelle l'appareil transmet des données.",
311
+ "mq.instantHintOn": "L'option SetOption59 est activée : l'appareil signale chaque modification immédiatement, et non pas seulement lors de la transmission de télémétrie suivante. Mesure effectuée toutes les trois secondes.",
312
+ "mq.instantHintUnknown": "La requête n'a pas encore été envoyée à l'appareil. La commande « Ask » envoie une requête vide à SetOption59 — cela ne change rien.",
313
+ "mq.instantOff": "désactivé",
314
+ "mq.instantOffShort": "réponse retardée",
315
+ "mq.instantOn": "activé",
316
+ "mq.instantUnknown": "inconnu",
317
+ "mq.intro": "Les configurations Tasmota ne sont pas toutes identiques. L'absence d'un point ou un point désactivé ne constitue pas un dysfonctionnement en soi : cela n'a d'importance que lorsqu'un alias est censé passer par ce point, ou qu'un modèle en a besoin pour la détection.",
318
+ "mq.justAsked": "posée tout à l'heure",
319
+ "mq.missing": "{0} points d'envoi manquants",
320
+ "mq.missingIp": "L'adresse IP de l'appareil est inconnue — elle n'apparaît que dans tele/INFO2 (envoyé une seule fois au démarrage) ou dans stat/STATUS5 (uniquement sur demande).",
321
+ "mq.missingPeriod": "La durée de la télémétrie est inconnue : l'appareil ne la communique jamais de lui-même, mais uniquement sur demande.",
322
+ "mq.mute": "{0}, impossible d'envoyer",
323
+ "mq.neverReported": "L'appareil n'a pas transmis toutes les informations depuis sa mise en service ; sa liste de commandes est donc inconnue.",
324
+ "mq.newPoints": "À créer",
325
+ "mq.nothingYet": "L'appareil n'a encore rien envoyé qui permette de lire des commandes.",
326
+ "mq.nowValue": "Actuellement :",
327
+ "mq.offline": "hors ligne",
328
+ "mq.onlyResult": "Pour l'instant, seule la réponse à une commande est parvenue, et non l'état complet — la liste est peut-être incomplète.",
329
+ "mq.repair": "Présent mais silencieux",
330
+ "mq.repairHint": "Ces points existent, mais leur envoi n'est pas autorisé. Un alias qui passe par eux n'a aucun effet, et cela ne se remarque pas.",
331
+ "mq.rowAllow": "permettre l'envoi",
332
+ "mq.rowCreate": "créer",
333
+ "mq.rowWorking": "…",
334
+ "mq.selectedOf": "{0} sur {1} sélectionné(e)",
335
+ "mq.silent": "ne pas signaler",
336
+ "mq.split": "à partir de {0} branche(s)",
337
+ "mq.splitHint": "Cet appareil n'est pas rattaché à un seul nœud, mais réparti sur {0} branches — c'est ainsi que l'adaptateur MQTT le stocke lorsque le FullTopic de l'appareil est « %prefix%/%topic%/ » (réglage d'usine de Tasmota). Le Workbench traite les branches comme un seul et même périphérique ; les points sont créés sous ce périphérique, et non à côté.",
338
+ "mq.stFine": "actuellement, envoie",
339
+ "mq.stMissing": "point manquant",
340
+ "mq.stMute": "impossible d'envoyer",
341
+ "mq.stOff": "présent, mais éteint",
342
+ "mq.stUnknown": "actuellement, envoi inconnu",
343
+ "mq.title": "Appareil MQTT",
344
+ "mq.unknownCommand": "commande inconnue",
345
+ "mq.write": "Créer ({0})",
346
+ "pattern.allPatterns": "{0} modèles au total",
347
+ "pattern.doesNotFit": "✕ ne convient pas",
348
+ "pattern.expectsType": ", s'attend à {0}",
349
+ "pattern.fitsNotType": "✕ {0} : tapez {1} au lieu de {2}",
350
+ "pattern.fitsOn": "rencontres ",
351
+ "pattern.freeSlots": "Places libres selon le schéma « {0} »",
352
+ "pattern.label": "Motif",
353
+ "pattern.manualInstead": "à la main au lieu de {0}",
354
+ "pattern.missing": "{0} manquant",
355
+ "pattern.noMatch": "aucun motif ne correspond à « {0} »",
356
+ "pattern.noPlaceBecauseType": "Le modèle « {0} » ne s'applique pas pour le moment : {1} nécessite {2}, mais {3} est défini. C'est pourquoi aucune ligne ne dispose d'un emplacement.",
357
+ "pattern.noPlaceLegend": "Les lignes ombrées de cette manière ne comportent pas d'emplacement dans le motif « {0} ».",
358
+ "pattern.noPlaceLong": "pas d'emplacement dans le modèle « {0} » — le point est tout de même créé et pleinement utilisable, mais Alexa et ses amis le comptabilisent séparément",
359
+ "pattern.notDetected": "non détecté",
360
+ "pattern.offCandidate": "{0} correspond à {1}, mais n'est pas coché.",
361
+ "pattern.offCandidateType": "{0} correspond à {1} en raison de son rôle, mais n'est pas coché et a le type {2} au lieu de {3}.",
362
+ "pattern.offGuess": "Avec « {0} », cela s'appliquerait.",
363
+ "pattern.offMissing": "Le motif « {0} » ne s'applique pas pour l'instant : il manque le « {1} ». C'est pourquoi aucune ligne ne comporte d'emplacement.",
364
+ "pattern.orRole": "ou {0}",
365
+ "pattern.pointsTaken": "✓ {0} point",
366
+ "pattern.required": "OBLIGATOIRE — manquant",
367
+ "pattern.search": "tapez pour rechercher…",
368
+ "pattern.slotHeldBy": "La colonne {1} contient déjà un {0} — cette ligne n'a donc pas de place. Choisissez une place libre dans la section « Placer dans le motif » ci-dessus.",
369
+ "pattern.slotName": "Ce point se trouve dans l'emplacement « {0} » du modèle {1}. Les noms des emplacements proviennent du détecteur de types et sont identiques partout ; ils ne sont pas traduits, car le point de données « alias » porte exactement ce nom.",
370
+ "pattern.slotsTaken": "✓ {0}/{1} pourvu(e)",
371
+ "pattern.tickIt": "cochez cette case",
372
+ "pattern.tickItType": "cochez cette case, {0}",
373
+ "pattern.toSlot": " → emplacement {0} dans le motif {1}",
374
+ "pattern.typeMismatch": "L'emplacement {0} doit contenir la valeur {1}, mais la valeur {2} est définie — l'état ne correspond plus au modèle, même si le rôle est correct.",
375
+ "pattern.typeOr": " ou ",
376
+ "pattern.usualOnly": "uniquement les habituels",
377
+ "pattern.viaRole": "rôle {0}",
378
+ "result.allAnyway": "Bref, tout ça ",
379
+ "result.channelsHint": "Cet appareil dispose de {0} canal. Choisissez ci-dessous : tout regrouper dans un seul alias, ou reproduire la structure de la source — un dossier pour l'appareil, avec un canal sous chaque sous-dossier.",
380
+ "result.extraSwitches": "Inclus : {0} point provenant d'autres canaux pour lesquels le modèle {1} ne prévoit pas d'emplacement. Ils sont créés, mais ne sont pas pris en compte comme commutateur ou retour d'information de l'appareil. Pour un contrôle séparé, utilisez l'option « un appareil par canal » ci-dessous.",
381
+ "result.header": "Ce qu'en fait le détecteur de type",
382
+ "result.newlyCreated": "sera créé",
383
+ "result.noObjectShort": "sans complément d'objet",
384
+ "result.pickSource": "Sauter où ?",
385
+ "result.pointsFromBranches": "{0} point(s) de données provenant de {1} branche(s). ",
386
+ "result.sourceCount": "{0} source(s)",
387
+ "result.sourceCountHint": "Les éléments de cet alias proviennent de plusieurs nœuds. « Vers la source » permet d'accéder à celui d'où proviennent la plupart d'entre eux ; un clic permet de les afficher tous.",
388
+ "result.sourceGone": "La source {0} n'existe plus.",
389
+ "result.sourceGone1": "1 point ne mène nulle part",
390
+ "result.sourceGoneN": "{0} point ne mène nulle part",
391
+ "result.states": "{0} État(s)",
392
+ "result.statesDirect": "{0} État (dont {1} directement)",
393
+ "result.toAlias": "à l'alias",
394
+ "result.toAliasHint": "Accède à l'alias créé à partir de cet appareil.",
395
+ "result.toSource": "vers la source",
396
+ "result.toSourceHint": "Permet d'accéder à l'appareil à partir duquel cet alias a été créé. Les modèles ne s'appliquent qu'à cet endroit : en mode alias, il est possible de gérer un alias, mais pas de le recréer à partir d'un modèle.",
397
+ "result.tooManyStates": "Il s'agirait alors d'un appareil comportant {0} état — ce qui signifie généralement que le nœud sélectionné n'est pas le bon. Dans l'arborescence de gauche, les nœuds qui correspondent à un seul appareil sont signalés par un point. Vous pouvez tout de même le construire de cette manière.",
398
+ "roles.leadsTo": "→ emplacement {0}",
399
+ "roles.noMatch": "aucune correspondance pour « {0} »",
400
+ "roles.patternOnly": "Afficher uniquement les rôles du modèle",
401
+ "roles.search": "Rechercher un poste…",
402
+ "roles.showAll": "Afficher tous les {0} rôles",
403
+ "roles.slot": "emplacement {0} dans le motif {1}",
404
+ "roles.slotFree": "gratuit",
405
+ "roles.slotTaken": "pris par {0}",
406
+ "swap.blocked": "Décidez d'abord : ces points ne peuvent pas coexister : {0}. Soit vous les supprimez pendant l'échange, soit vous laissez l'échange tel quel ; un point destiné à l'écriture a besoin d'une cible d'écriture.",
407
+ "swap.button": "Échanger la source…",
408
+ "swap.diffRange": "intervalle {0} → {1}",
409
+ "swap.diffType": "type {0} → {1}",
410
+ "swap.diffUnit": "unité {0} → {1}",
411
+ "swap.done": "Inversion. L'alias commence désormais à {0}.",
412
+ "swap.from": "Lecture en cours à partir de :",
413
+ "swap.goHigher": "utilisez le niveau supérieur",
414
+ "swap.gone": "Cet appareil n'existe plus — et c'est justement à cela que sert cet outil.",
415
+ "swap.guessHint": "Les lignes portant la mention « supposé » ont été mises en correspondance en fonction du nom ou du rôle — veuillez les vérifier une par une.",
416
+ "swap.guessedByName": "À en juger par le nom du point : un élément situé sous la nouvelle source est également appelé « {0} ». Cela peut être loin — merci de vérifier.",
417
+ "swap.guessedByRole": "D'après ce que je comprends du rôle : un point sous la nouvelle source correspond au même rôle « {0} ». Merci de vérifier.",
418
+ "swap.higherLevel": "Un niveau plus haut ({0}), on trouve une cible pour {1} des {2} points, ici seulement {3}.",
419
+ "swap.keeps": "L'alias conserve son identifiant, ses noms, ses rôles et ses formules, son historique dans la base de données, ainsi que sa salle et sa fonction. Seuls les emplacements à partir desquels chaque point lit et écrit changent.",
420
+ "swap.mapping": "Cartographie",
421
+ "swap.mind": "Attention :",
422
+ "swap.mindHint": "Les formules d'alias restent inchangées : si la nouvelle source est mise à l'échelle différemment, les valeurs seront erronées par la suite. La formule se trouve dans la ligne de détails du point.",
423
+ "swap.noDevice": "Aucun appareil trouvé.",
424
+ "swap.noMatch": "Aucun point correspondant n'a été trouvé",
425
+ "swap.noWriteMatch": "Aucune cible d'écriture trouvée — ce point ne sera écrit nulle part",
426
+ "swap.now": "Échanger maintenant",
427
+ "swap.pickFirst": "Commence par choisir une nouvelle source.",
428
+ "swap.removeIt": "supprimer ce point lors de l'échange",
429
+ "swap.same": "Il s'agit de la même source que précédemment.",
430
+ "swap.search": "Rechercher (identifiant ou nom) …",
431
+ "swap.title": "Échanger la source",
432
+ "swap.to": "Nouvelle source",
433
+ "swap.unchanged": "inchangé",
434
+ "swap.unknown": "(impossible à déterminer)",
435
+ "target.alsoRoom": "Faut-il aussi régler la valeur « {0} » ?",
436
+ "target.alsoRoomNew": "Il n'y a pas de salle « {0} » — faut-il en créer une et l'attribuer ?",
437
+ "target.clearField": "effacer le champ",
438
+ "target.exists": "existe déjà",
439
+ "target.folder": "Placer sous",
440
+ "target.folderHint": "séparer les sous-dossiers par un point, par exemple : House.GF.Kitchen",
441
+ "target.folderPlaceholder": "vide = juste en dessous de alias.0",
442
+ "target.moveInstead": "déplace-le plutôt…",
443
+ "target.moveInsteadHint": "Déplacez l'alias existant vers le nouvel identifiant au lieu d'en créer un deuxième à côté.",
444
+ "target.name": "Nom",
445
+ "target.openFolder": "ouvrir « {0} »",
446
+ "target.twinExists": "Cette source affiche déjà « {0} » — celle-là reste où elle est.",
447
+ "target.yes": "oui",
448
+ "tpl.applyTemplate": "utiliser les valeurs par défaut du modèle ({0})",
449
+ "tpl.applyTemplateHint": "Définit les rôles, les types, les unités, les formules et les sources conformément au modèle. La légende reste telle quelle — celle-là, c'est la vôtre. Rien n'est écrit avant la simulation.",
450
+ "tpl.choose": "— choisir un modèle —",
451
+ "tpl.contains": "{0} contient {1}",
452
+ "tpl.fits": "convient",
453
+ "tpl.fitsNot": "✕ {0}",
454
+ "tpl.forbiddenThere": "{0} existe, mais ne doit pas",
455
+ "tpl.forced": "forcé",
456
+ "tpl.forcedHint": "La détection ne se déclenche pas pour ce modèle — sélectionné manuellement.",
457
+ "tpl.identifiedAs": "Identifié comme : {0}",
458
+ "tpl.label": "Modèle",
459
+ "tpl.manuallyChosen": "sélectionnés à la main",
460
+ "tpl.missingPoint": "{0} manquant",
461
+ "tpl.nameHint": "le nom correspond à « {0} » — indétectable depuis MQTT",
462
+ "tpl.noJson": "{0} ne renvoie pas de JSON",
463
+ "tpl.noNameHint": "le nom ne donne aucun indice — « {0} » est la valeur par défaut ; avec MQTT, ils sont impossibles à distinguer",
464
+ "tpl.noOutputs": "Aucun résultat trouvé",
465
+ "tpl.none": "— pas de modèle —",
466
+ "tpl.noneDetected": "Aucun modèle détecté",
467
+ "tpl.nor": " ni dans ",
468
+ "tpl.output": "Résultat",
469
+ "tpl.outputsFound": "résultats trouvés : {0}",
470
+ "tpl.own": "propre",
471
+ "tpl.possibleIn": "« {0} » est une commande reconnue par l'appareil (point de données non encore créé)",
472
+ "tpl.presentIn": "{0} cadeau",
473
+ "tpl.remembered": "dont on se souvient",
474
+ "tpl.rememberedHint": "Cet alias a été créé à partir de ce modèle ; il restera en place tant que vous ne le modifierez pas délibérément.",
475
+ "tpl.showAllPoints": "Charger tous les points de données de l'appareil",
476
+ "tpl.showAllPointsHelp": "Affiche la proposition de modèle et répertorie tous les points de données dont dispose l'appareil, y compris ceux qui ne sont mentionnés dans aucun modèle. À partir de là, vous pouvez en sélectionner un seul pour l'ajouter à l'alias.",
477
+ "tpl.showProposal": "Charger le modèle de proposition",
478
+ "tpl.showProposalHelp": "Revenons à ce que propose le modèle pour cet appareil.",
479
+ "tpl.skippedChip": "{0}, sans source",
480
+ "tpl.skippedEmpty": "« {0} » obtiendrait un meilleur score, mais ne génère aucune ligne sur cet appareil — ignoré",
481
+ "tpl.skippedHead": "{0} n'a pas été pris en compte car la source est manquante",
482
+ "tpl.skippedNowhere": "{0} : ni l'un ni l'autre dans {1}",
483
+ "tpl.skippedSource": "{0} : {1} manquant",
484
+ "tpl.skippedWhy": "{0}: {1}",
485
+ "tpl.whyNoField": "{0} ne comporte pas de champ {1}",
486
+ "tpl.whyNoJson": "{0} ne renvoie pas de JSON",
487
+ "tpl.whyNoPoint": "{0} n'existe pas",
488
+ "tpl.whyNone": "Pourquoi aucun modèle ne s'applique",
489
+ "tpl.whyThis": "Pourquoi ce modèle ?",
490
+ "tpl.withoutField": "{0} sans {1}",
491
+ "tpl.wouldNeed": "nombre réel de pièces manquantes : {0}",
492
+ "tpls.absolute": "objet fixe",
493
+ "tpls.absoluteText": "Il ne dépend pas de l'appareil et sera donc identique pour tous les appareils. Parfois, c'est tout à fait justifié — une consigne commune, par exemple. Cela n'est pas pris en compte pour la détection.",
494
+ "tpls.absoluteTitle": "Un point désigne un objet fixe. ",
495
+ "tpls.andMore": "… et {0} autres, qui ne figurent pas ici",
496
+ "tpls.beats": "battements {0}",
497
+ "tpls.buildsNone": "ne correspond pas — aucune ligne ne correspond à la source",
498
+ "tpls.button": "Enregistrer comme modèle…",
499
+ "tpls.channelName": "Canal par sortie",
500
+ "tpls.colDefault": "Par défaut",
501
+ "tpls.colInTemplate": "dans le modèle",
502
+ "tpls.colName": "Nom",
503
+ "tpls.colPath": "Chemin d'accès, par rapport à l'appareil",
504
+ "tpls.colRequired": "doit exister",
505
+ "tpls.content": "Contrôles du contenu",
506
+ "tpls.contentHelp": "Cela permet une détection plus précise — et exclut les appareils qui n'envoient pas ce bloc. C'est précisément ce qui distingue un « socket » d'un « socket avec comptage ».",
507
+ "tpls.contentRow": "{0} doit contenir {1}",
508
+ "tpls.contradiction": "Ce modèle ne conviendrait à rien.",
509
+ "tpls.contradictionText": "Ces points sont à la fois répertoriés comme obligatoires et comme interdits : {0}. Supprimez-les de l'une des deux catégories.",
510
+ "tpls.deviceType": "Type d'appareil",
511
+ "tpls.dropOff": "Ne pas en parler du tout",
512
+ "tpls.dropOthers": "Ne tenez pas compte des autres sorties",
513
+ "tpls.droppedCount": "{0} point(s) n'ont pas été pris en compte.",
514
+ "tpls.evidence": "{0} vérifié",
515
+ "tpls.failed": "Échec de l'enregistrement :",
516
+ "tpls.fallbacks": "+ {0} solution de secours",
517
+ "tpls.fitsNot": "{0} × ne convient pas",
518
+ "tpls.function": "Fonction",
519
+ "tpls.head": "En-tête",
520
+ "tpls.hits": "{0} appareil(s) correspond(ent), dont {1} a(ont) gagné",
521
+ "tpls.id": "Id",
522
+ "tpls.idTaken": "Cet identifiant appartient déjà à « {0} » (v{1}). L'enregistrement le remplacerait.",
523
+ "tpls.json": "Voici ce qui est enregistré",
524
+ "tpls.loadFailed": "les modèles personnalisés ne sont pas chargés",
525
+ "tpls.loadFailedHint": "La configuration de l'instance n'a pas répondu ou a renvoyé une erreur. Vos modèles n'ont pas disparu ; ils ne s'affichent simplement pas dans cette vue. Tant que cet avis reste affiché, l'enregistrement risque d'écraser un modèle existant : veuillez d'abord actualiser la page.",
526
+ "tpls.lockBadHint": "L'indice de nom n'est pas une expression valable.",
527
+ "tpls.lockIdTaken": "L'identifiant appartient déjà à « {0} »",
528
+ "tpls.lockNoId": "L'identifiant est manquant",
529
+ "tpls.lockNoRequired": "Aucune case n'est cochée comme requis — le modèle ne correspondrait à aucun résultat",
530
+ "tpls.lockNoRows": "Il ne reste plus aucune ligne",
531
+ "tpls.lockedWhy": "La sauvegarde est verrouillée :",
532
+ "tpls.losesTo": "perd contre {0}",
533
+ "tpls.multiple": "Cet appareil dispose de plusieurs sorties",
534
+ "tpls.multipleHelp": "Le {0} dans les chemins d'accès est remplacé par %N% — uniquement à la fin d'un segment ; ainsi, ENERGY.Power reste inchangé.",
535
+ "tpls.multipleNoNumber": "Indiquez quel numéro parmi les chemins correspond à la sortie. Sans cette indication, le modèle reste unique.",
536
+ "tpls.multipleOff": "Un périphérique portant les noms POWER1, POWER2… devient un dossier contenant un canal par sortie.",
537
+ "tpls.nameDe": "Nom (allemand)",
538
+ "tpls.nameEn": "Nom (en anglais)",
539
+ "tpls.nameHint": "Indice sur le nom",
540
+ "tpls.nameHintBad": "Cette expression n'est pas valide — elle est considérée comme « sans correspondance ».",
541
+ "tpls.nameHintHelp": "Ne permet de départager que les modèles qui correspondent tous deux aussi bien — « ampoule » et « douille », par exemple. Séparez les mots par |. Cette fonction s'appelle « {0} ».",
542
+ "tpls.needsRow": "ne correspond pas — {0} ne trouve rien",
543
+ "tpls.needsRowHint": "Une ligne obligatoire du modèle ne trouve pas sa source sur cet appareil — il s'agit généralement d'un champ qui n'existe pas dans le message JSON correspondant. Le modèle n'entre même pas en ligne de compte ici ; c'est le meilleur modèle suivant qui prend le relais.",
544
+ "tpls.noFunction": "— aucun —",
545
+ "tpls.noHits": "Aucun appareil ne correspond pour le moment. Vérifiez les critères requis.",
546
+ "tpls.noInstance": "Instance {0} introuvable.",
547
+ "tpls.noRequired": "Aucune case n'est cochée comme requis — le modèle ne correspondrait à rien du tout.",
548
+ "tpls.noType": "— aucun —",
549
+ "tpls.onlyOne": "le seul qui convienne",
550
+ "tpls.otherOutputs": "{0} point correspond à d'autres résultats ({1}).",
551
+ "tpls.otherOutputsText": "Un modèle destiné à plusieurs sorties n'en décrit toujours qu'une seule : les autres en découlent. Désélectionnez les points étrangers sur l'appareil, sinon le modèle ne s'adaptera qu'à cet appareil-là.",
552
+ "tpls.pickDeviceFirst": "Commencez par choisir un appareil",
553
+ "tpls.rank": "Classement",
554
+ "tpls.rowBuilt": "1 ligne",
555
+ "tpls.rowsBuilt": "{0} ligne(s)",
556
+ "tpls.saveAsNew": "Enregistrer en tant que nouveau modèle",
557
+ "tpls.saveAsNewHint": "celui qui existe reste tel quel",
558
+ "tpls.saveNew": "Enregistrer le modèle",
559
+ "tpls.saveUpdate": "Mettre à jour le modèle",
560
+ "tpls.saved": "Modèle « {0} » enregistré, version {1}.",
561
+ "tpls.savedWhere": "Elle se trouve dans la configuration de l'instance ({0}) et fait donc partie de la sauvegarde.",
562
+ "tpls.saving": "enregistrement en cours…",
563
+ "tpls.shadowsPackage": "remplacera alors celui qui a été livré",
564
+ "tpls.someOff": "Désélectionnés sur l'appareil : {0}. Ces éléments sont configurés par défaut sur « désactivé » : sur l'appareil suivant, ils apparaîtront dans la liste, mais ne seront pas cochés.",
565
+ "tpls.states": "Données",
566
+ "tpls.statesCount": "{0} d'entre eux",
567
+ "tpls.statesHelp": "La coche de gauche indique si le point est pris en compte ou non dans le modèle. « Par défaut » correspond à l'état qui sera proposé sur le prochain appareil — celui-ci dépend de votre sélection sur l'appareil. La coche de droite indique si ce point doit impérativement être présent pour que le modèle corresponde.",
568
+ "tpls.takesOver": "{0} modifier le modèle",
569
+ "tpls.title": "Enregistrer comme modèle — {0}",
570
+ "tpls.tryout": "Séance d'essai",
571
+ "tpls.undrop": "annuler",
572
+ "tpls.updateIt": "Mise à jour du modèle « {0} » — il passe à la version {1}",
573
+ "tpls.whatToDo": "Que devrait-il se passer ?",
574
+ "tpls.whichNumber": "Numéro de cette sortie",
575
+ "tpls.wissen": "+ {0} État supplémentaire en tant qu’information sur le rôle — utilisé dans la vue « Tous les points de données de l’appareil »",
576
+ "tree.aliases": "Modifier l'alias",
577
+ "tree.collapseAll": "masquer tout",
578
+ "tree.emptyNode": "aucune donnée — le nœud existe dans la base de données mais est vide",
579
+ "tree.expandAll": "Tout développer",
580
+ "tree.filter": "filtre …",
581
+ "tree.filterAria": "Filtrer les objets",
582
+ "tree.loading": "Chargement des objets…",
583
+ "tree.looksLikeDevice": "on dirait un seul appareil",
584
+ "tree.noObjectHint": "ce n'est pas un vrai dossier",
585
+ "tree.nothingFound": "Aucun résultat trouvé",
586
+ "tree.sourceGone": "{0} point(s) de cet alias renvoient à une source qui n'existe pas. Le js-controller en garde une trace de manière permanente — seule la suppression puis la recréation du point permettent de résoudre le problème.",
587
+ "tree.sources": "Créer un alias",
588
+ "tree.templates": "Modèles",
589
+ "tv.addFallback": "Ajouter une source de secours",
590
+ "tv.addState": "Ajouter un point de données",
591
+ "tv.badContent": "« erkennung.inhalt » doit être un objet.",
592
+ "tv.badList": "« {0} » doit être une liste de points.",
593
+ "tv.badName": "Le nom doit être une chaîne de caractères ou un objet de langue.",
594
+ "tv.badNameHint": "L'indice de nom n'est pas une expression valable.",
595
+ "tv.badNoId": "L'identifiant est manquant.",
596
+ "tv.badNoStates": "Les données (zustaende) sont manquantes.",
597
+ "tv.badNotObject": "Un seul modèle, sous forme d'objet JSON, est attendu.",
598
+ "tv.badRecog": "« erkennung » doit être un objet.",
599
+ "tv.badState": "{0}s points de données sans nom ou sans chemin de lecture ou d'écriture.",
600
+ "tv.badType": "Ce détecteur ne reconnaît pas le type d'appareil « {0} ».",
601
+ "tv.clickRow": "Cliquez sur une ligne pour modifier la valeur correspondante.",
602
+ "tv.clickRowRead": "Cliquez sur une ligne pour l'afficher — les modèles déjà expédiés ne peuvent pas être modifiés.",
603
+ "tv.delete": "Supprimer",
604
+ "tv.deleteHint": "S'il remplace un modèle déjà envoyé, celui-ci réapparaît par la suite.",
605
+ "tv.deleteSure": "Supprimer définitivement",
606
+ "tv.detection": "Détection",
607
+ "tv.discard": "Ignorer les modifications",
608
+ "tv.duplicate": "En double",
609
+ "tv.export": "Exporter sous forme de fichier",
610
+ "tv.fallback": "Sources de secours",
611
+ "tv.fallbackHint": "Si l'environnement de travail ne parvient pas à trouver le point de données ci-dessus — ou le champ qu'il contient —, il essaie les options suivantes dans l'ordre. C'est la première option où les deux existent réellement qui est utilisée.",
612
+ "tv.flagsHelp": "« Par défaut » = coché par défaut sur le périphérique suivant. « Doit exister » = sans cet élément, le modèle ne correspond pas du tout — il est alors déplacé vers la liste des éléments obligatoires ci-dessus. « Objet fixe » = le chemin de lecture n'est pas relatif au périphérique, mais correspond à un identifiant d'objet complet, identique pour tous les périphériques.",
613
+ "tv.forbidden": "Ne doit pas exister",
614
+ "tv.forbiddenHelp": "Ces points ne doivent PAS figurer sur l'appareil, sinon le modèle ne correspond pas. C'est ce qui distingue une prise simple d'une prise multiple. Séparez les différents éléments par des virgules. Les points manquants ne sont pas considérés comme des éléments de preuve.",
615
+ "tv.hide": "masquer",
616
+ "tv.importAndSave": "Importer et enregistrer",
617
+ "tv.importBad": "Ce fichier n'est pas un modèle.",
618
+ "tv.importFile": "Importer…",
619
+ "tv.importNew": "L'enregistrement génère « {0} ».",
620
+ "tv.importReplaces": "En enregistrant, votre modèle « {0} » est remplacé : la version {1} devient la version {2}.",
621
+ "tv.importShadows": "Enregistrement des ombres dans le modèle fourni « {0} ».",
622
+ "tv.importTitle": "Rien n'a encore été enregistré.",
623
+ "tv.imported": "importé",
624
+ "tv.inTemplate": "dans le modèle",
625
+ "tv.json": "Le modèle au format JSON",
626
+ "tv.makeOwn": "Créer une copie modifiable",
627
+ "tv.multi": "plusieurs sorties, un canal {0} par sortie",
628
+ "tv.nameHintShort": "Ne permet de départager que les modèles qui correspondent tous aussi bien. Séparez les mots par |.",
629
+ "tv.package": "expédié",
630
+ "tv.packageText": "Il ne peut pas être modifié, il conserve donc toujours l'état dans lequel il a été livré. La fonction « Dupliquer » crée une copie de votre fichier, et cette copie remplace l'original.",
631
+ "tv.packageTitle": "Modèle envoyé.",
632
+ "tv.paneHead": "Le modèle et ce qu'il permet de détecter",
633
+ "tv.rank": "rang {0}",
634
+ "tv.rankOwn": "Ce classement ne s'applique qu'à vos propres modèles. Face à un modèle fourni par le fabricant, le vôtre l'emporte toujours de toute façon — il n'a pas besoin d'un classement élevé pour cela.",
635
+ "tv.rankPackage": "Le classement ne s'applique qu'aux modèles expédiés, et même dans ce cas, uniquement lorsque les preuves et l'indice sur le nom sont identiques.",
636
+ "tv.readOnlyRow": "Modèle fourni — utilisez l'option « Copie personnelle pour modification » pour le modifier.",
637
+ "tv.removeFallback": "supprimer",
638
+ "tv.removeState": "Supprimer ce point",
639
+ "tv.required2": "Doit exister",
640
+ "tv.requiredCount": "{0} point(s) requis",
641
+ "tv.requiredHelp": "Ces données doivent figurer sur l'appareil, sinon le modèle ne correspond pas. Séparez-les par des virgules. Chaque donnée obligatoire rend le modèle à la fois plus précis et plus fragile.",
642
+ "tv.save": "Enregistrer",
643
+ "tv.show": "afficher",
644
+ "tv.unsaved": "non enregistré",
645
+ "use.again": "relire",
646
+ "use.aliasHead": "L'alias",
647
+ "use.custom": "Journalisation, noms intelligents",
648
+ "use.enums": "Énumérations",
649
+ "use.files": "Fichiers",
650
+ "use.head": "Cité dans",
651
+ "use.limits": "La recherche s'effectue sur du texte brut. Elle porte uniquement sur les fichiers situés dans les dossiers d'instance (vis.0, vis-2.0, web.0, etc.) — les interfaces Web propres aux adaptateurs sont exclues, sinon l'environnement de développement trouverait leurs exemples ainsi que ses propres fichiers source. Les valeurs d'état ne sont pas prises en compte, et aucune recherche textuelle ne porte sur les identifiants générés lors de l'exécution.",
652
+ "use.look": "cherche ça",
653
+ "use.lookHint": "Recherche de l'identifiant de l'alias et de sa source — dans les scripts, les énumérations, les entrées du point lui-même, dans chaque objet chargé et dans les fichiers des dossiers d'instance. Cette opération s'effectue uniquement au clic, car toutes les données sont lues une seule fois à cette occasion.",
654
+ "use.none": "—",
655
+ "use.objects": "Objets",
656
+ "use.otherAliases": "d'autres alias y figurent",
657
+ "use.scripts": "Scripts",
658
+ "use.searching": "Recherche en cours…",
659
+ "use.sourceHead": "La source",
660
+ "use.sourceHint": "Le fait qu'une source soit toujours mentionnée n'est pas un problème : le script qui l'alimente a exactement sa place là. Seul un examen au cas par cas permet de déterminer si un élément doit être déplacé vers l'alias.",
661
+ "write.aliasNowAt": "L'alias est désormais à {0}.",
662
+ "write.cannotWrite": "On ne peut pas l'écrire comme ça :",
663
+ "write.changes": "modifications",
664
+ "write.close": "Fermer",
665
+ "write.createAlias": "Créer un alias…",
666
+ "write.createAll": "Créer tous les {0}…",
667
+ "write.createAsOne": "créer comme un seul appareil…",
668
+ "write.createNamed": "Créer {0}…",
669
+ "write.createPerChannel": "un sous-dossier par chaîne, {0} d'entre eux …",
670
+ "write.createSendPoints": "Créer les {0} points de données d'envoi manquants",
671
+ "write.deselected": "désélectionné",
672
+ "write.diffNew": "après",
673
+ "write.diffOld": "avant",
674
+ "write.diffRaw": "Afficher l'ordre d'origine",
675
+ "write.diffSorted": "trier les champs",
676
+ "write.diffSortedHint": "L'ordre des champs au sein d'un objet n'a aucune signification : le même administrateur écrit des objets alias dans quatre ordres différents. Une fois triés, seules les différences réelles subsistent ; l'ordre d'origine montre comment ils sont réellement stockés.",
677
+ "write.done": "{0} objets enregistrés.",
678
+ "write.doneWithRemoved": "{0} objets enregistrés, {1} supprimés.",
679
+ "write.dryOutputs": " — {0} sortie(s)",
680
+ "write.dryTitleCreate": "Créer un alias — voici ce qui s'afficherait",
681
+ "write.dryTitleDoneCreate": "Alias créé",
682
+ "write.dryTitleDoneUpdate": "Alias mis à jour",
683
+ "write.dryTitleFailed": "Tout n'a pas été pris en compte",
684
+ "write.dryTitleUpdate": "Mettre à jour l'alias — voici ce qui s'afficherait",
685
+ "write.duplicateName": "{0} : le nom apparaît deux fois.",
686
+ "write.enumsUnknown": "La chambre et la fonction ne seront pas définies : les énumérations n'ont pas pu être chargées. L'alias est créé tel qu'indiqué. En l'absence d'un état fiable, une énumération existante serait remplacée par une nouvelle ne contenant que ce seul élément.",
687
+ "write.failed": "{0} opérations ont échoué :",
688
+ "write.new": "nouveau",
689
+ "write.noName": "Un point n'a pas de nom.",
690
+ "write.noSourceChosen": "{0} : aucune source sélectionnée.",
691
+ "write.noneSelected": "Aucun point de données n'est sélectionné.",
692
+ "write.notInProposal": "ne figure pas dans la proposition",
693
+ "write.notUnderAlias": "{0} n'est pas en dessous de « alias ». — Rien ne sera écrit ici.",
694
+ "write.now": "Créer maintenant",
695
+ "write.nowUpdate": "Mettre à jour maintenant",
696
+ "write.pickDeviceFirst": "Commencez par choisir un appareil",
697
+ "write.remove": "Supprimer",
698
+ "write.removeCount": "nombre de points de données : {0}",
699
+ "write.removeHint": "figurent dans l'alias mais n'apparaissent plus dans le brouillon",
700
+ "write.retry": "Réessayez",
701
+ "write.rowSource": "source",
702
+ "write.rowTarget": "cible",
703
+ "write.sourceMissing": "{0} : la source {1} n'existe pas.",
704
+ "write.summaryTail": "{0} nouveau, {1} serait écrasé",
705
+ "write.summaryTail3": "{0} nouveauté, {1} modification, {2} inchangés",
706
+ "write.unchanged": "inchangé",
707
+ "write.updateAlias": "Mettre à jour l'alias…",
708
+ "write.updateAsOne": "mettre à jour comme un seul appareil…",
709
+ "write.updateNamed": "Mise à jour n° {0}…",
710
+ "write.willKeep": "conservé : {0}",
711
+ "write.willRemove": "supprimé : {0}",
712
+ "write.writeSourceMissing": "{0} : le point de données d'envoi {1} n'existe pas encore",
713
+ "write.writing": "écriture…"
14
714
  }