iobroker.alias-workbench 0.9.12 → 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 (58) hide show
  1. package/README.md +93 -91
  2. package/admin/css/werkbank.css +23 -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/aufzaehlungen.js +24 -8
  16. package/admin/js/baum.js +13 -2
  17. package/admin/js/detail.js +362 -86
  18. package/admin/js/entwurf.js +159 -41
  19. package/admin/js/enums.js +7 -0
  20. package/admin/js/ergebnis.js +26 -6
  21. package/admin/js/erkennung.js +45 -0
  22. package/admin/js/katalog.js +235 -40
  23. package/admin/js/mqtt.js +421 -90
  24. package/admin/js/musternamen.js +70 -26
  25. package/admin/js/musterwahl.js +103 -26
  26. package/admin/js/objekte.js +5 -0
  27. package/admin/js/pruefungen.js +1 -2
  28. package/admin/js/quellentausch.js +59 -12
  29. package/admin/js/schreiben.js +25 -20
  30. package/admin/js/sprache.js +7 -8
  31. package/admin/js/vorlagen.js +36 -8
  32. package/admin/js/vorlagenblatt.js +277 -71
  33. package/admin/js/vorschlagen.js +60 -7
  34. package/admin/js/werte.js +392 -25
  35. package/admin/js/zielleiste.js +19 -10
  36. package/admin/js/zuordnung.js +47 -23
  37. package/admin/js/zustand.js +9 -1
  38. package/admin/js/zustandsliste.js +194 -27
  39. package/admin/vorlagen/hm-dimmer.json +32 -8
  40. package/admin/vorlagen/hm-fensterkontakt-hm.json +20 -5
  41. package/admin/vorlagen/hm-fensterkontakt-hmip.json +28 -7
  42. package/admin/vorlagen/hm-heizgruppe.json +38 -11
  43. package/admin/vorlagen/hm-heizkoerper.json +42 -12
  44. package/admin/vorlagen/hm-rollladen.json +30 -8
  45. package/admin/vorlagen/hm-schaltaktor-lampe.json +24 -6
  46. package/admin/vorlagen/hm-schaltaktor-mehrfach.json +32 -8
  47. package/admin/vorlagen/hm-schaltaktor-steckdose.json +24 -6
  48. package/admin/vorlagen/hm-temperatur-feuchte.json +8 -2
  49. package/admin/vorlagen/hm-wandthermostat.json +36 -9
  50. package/admin/vorlagen/messpunkt.json +45 -11
  51. package/admin/vorlagen/tasmota-lampe.json +53 -13
  52. package/admin/vorlagen/tasmota-mehrfach.json +45 -11
  53. package/admin/vorlagen/tasmota-rgb.json +41 -10
  54. package/admin/vorlagen/tasmota-steckdose.json +61 -15
  55. package/io-package.json +41 -28
  56. package/package.json +2 -2
  57. package/admin/sprachen/de.json +0 -661
  58. package/admin/sprachen/en.json +0 -661
@@ -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.": "El asistente de configuración del Admin deja en el campo del icono un simple nombre como «Playroom», que ya no lleva a ninguna imagen y aparece como un recuadro roto. Con esta opción activada, el banco de trabajo lo sustituye. Con ello se sobrescribe un campo que no está vacío: la simulación lo indica expresamente.",
11
11
  "The Alias Workbench has no running process — everything happens in the Admin tab. These settings control how it writes.": "El Banco de trabajo de alias no tiene ningún proceso en ejecución: todo ocurre en la pestaña del Admin. Estos ajustes determinan cómo escribe.",
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.": "El banco de trabajo las lee en tiempo de ejecución desde el propio paquete del Admin, en lugar de mantener una copia que envejecería con cada actualización. Si eso falla, las listas de selección solo muestran lo existente: no es un error, solo menos entradas.",
13
- "Where the templates come from": "De dónde vienen las plantillas"
13
+ "Where the templates come from": "De dónde vienen las plantillas",
14
+ "app.connected": "conectado",
15
+ "app.detector": "detector de tipos",
16
+ "app.disconnected": "desconectado",
17
+ "app.objectsCount": "{0} objetos",
18
+ "app.patternsCount": "{0} patrones",
19
+ "app.subsCount": "{0} suscripciones",
20
+ "app.subsCount1": "una suscripción",
21
+ "app.subsHint": "Una suscripción abarca toda una rama, no un único valor: un patrón con un asterisco recoge todos los puntos que hay debajo de él. Al cambiar de nodo, se cancelan todas las suscripciones anteriores; si el número sigue aumentando, alguno se queda atrás. Actualmente viendo:",
22
+ "app.templatesCount": "{0} plantillas",
23
+ "app.title": "Alias Workbench",
24
+ "catalog.loadingText": "Una vez, tras una actualización de Admin —el paquete ocupa unos pocos megabytes—. A partir de entonces, el catálogo queda almacenado y no se volverá a descargar.",
25
+ "catalog.loadingTitle": "Recuperación de las plantillas de administración",
26
+ "catalog.missing": "Catálogo de administración no disponible: solo entradas existentes",
27
+ "check.allDeliver": "todos entregan",
28
+ "check.allFine": "todo bien",
29
+ "check.allOk": "{0} ✓",
30
+ "check.button": "Cheques",
31
+ "check.canSend": "{0} las rutas de escritura funcionan correctamente",
32
+ "check.cannotSend": "No se puede enviar: {0}",
33
+ "check.checked": "{0} marcado",
34
+ "check.duplicate": "No hay puntos duplicados",
35
+ "check.duplicateNone": "cada uno apunta a otro sitio",
36
+ "check.duplicateSome": "apuntan a lo mismo: {0}",
37
+ "check.feedback": "La respuesta llega al instante",
38
+ "check.feedbackFast": "De inmediato, SetOption59 se activa.",
39
+ "check.feedbackNone": "No se ha visto afectada ninguna fila — todo se ha leído de stat/…",
40
+ "check.feedbackSlow": "retrasado: {0}",
41
+ "check.feedbackUnknown": "sin marcar: {0}",
42
+ "check.formulaYields": "La fórmula «read» da como resultado algo",
43
+ "check.hintCount": "notas: {0}",
44
+ "check.noPatternFits": "ningún patrón se ajusta",
45
+ "check.noWritePath": "no point escribe",
46
+ "check.notMqtt": "No hay ruta de escritura MQTT",
47
+ "check.openCount": "{0} abrir",
48
+ "check.publish": "publicar en el punto cmnd",
49
+ "check.rolesMakeDevice": "las funciones conforman un dispositivo",
50
+ "check.sendPointMissing": "Enviar dato que aún no se ha creado: {0}",
51
+ "check.sendUnknown": "En el objeto no se especifica si {0} puede publicar; el tema solo aparece en `native`. Es lo habitual en ioBroker.mqtt y Sonoff.",
52
+ "check.sourceExists": "existe una fuente",
53
+ "check.sourceHasValue": "la fuente tiene un valor",
54
+ "check.targetCan": "El destinatario puede hacer lo que se le pide",
55
+ "check.targetCanFine": "todo bien",
56
+ "check.targetNoWrite": "{0}: no se puede escribir en el destino",
57
+ "check.targetVoidFormula": "{0}: al escribir la fórmula no se encuentra ningún valor; el valor de destino es {1}",
58
+ "check.title": "Comprobaciones: siempre en marcha, sin tocar nada",
59
+ "del.allOutputs": "Eliminar todas las salidas {0} de este dispositivo",
60
+ "del.allOutputsHint": "De lo contrario, el resto se queda atrás, huérfano: {0}",
61
+ "del.alsoFunction": "La función «{0}», creada junto con este alias, también se elimina; de lo contrario, quedaría vacía.",
62
+ "del.alsoRoom": "La sala «{0}», creada junto con este alias, también se elimina; de lo contrario, quedaría vacía.",
63
+ "del.button": "Eliminar alias …",
64
+ "del.channelsBelow": "Atención: debajo de esto hay {0} canales propios que también se eliminarán.",
65
+ "del.count": "Se eliminarán los siguientes objetos: {0}",
66
+ "del.done": "Se han eliminado: {0} objetos.",
67
+ "del.hint": "Se eliminan el alias y todos los puntos de datos que hay debajo de él. Las fuentes permanecen intactas: solo se elimina el shell, no el dispositivo. Esta acción no se puede deshacer.",
68
+ "del.now": "Eliminar definitivamente",
69
+ "del.objects": "Lo que desaparece",
70
+ "del.scriptsHead": "{0} scripts mencionan este ID:",
71
+ "del.scriptsHead1": "En un script se menciona este ID:",
72
+ "del.scriptsHint": "Solo se han analizado los scripts del adaptador de JavaScript, en formato de texto sin formato. Las vistas VIS, las escenas y la configuración de otros adaptadores no se han incluido en el análisis.",
73
+ "del.title": "Eliminar alias",
74
+ "detail.aliasEmpty": "El alias deja este campo en blanco.",
75
+ "detail.aliasHas": "El alias tiene: ",
76
+ "detail.asDelivered": "tal y como se ha entregado",
77
+ "detail.attention": "Atención",
78
+ "detail.buttonNoRead": "Botón sin lectura de texto: no lee el texto a medida que avanza",
79
+ "detail.caption": "Leyenda",
80
+ "detail.captionHint": "se convierte en el nombre que se muestra del estado —aparece en el panel de administración, en VIS y en cualquier lugar donde se utilicen nombres en lugar de identificadores—",
81
+ "detail.converted": "convertido por el alias",
82
+ "detail.datapoint": "Dato",
83
+ "detail.decimals": "Decimales",
84
+ "detail.display": "Pantalla",
85
+ "detail.elsewhere": "(en otro lugar)",
86
+ "detail.expects": "espera {0}",
87
+ "detail.formula": "Leer fórmula",
88
+ "detail.formulaBroken": "la fórmula es errónea",
89
+ "detail.formulaHint": "«ON»/«OFF» → el valor booleano lo establece el propio alias, sin necesidad de fórmulas.",
90
+ "detail.formulaPlaceholder": "vacío = mantener el valor sin cambios",
91
+ "detail.formulaThrows": "La fórmula devuelve: {0}",
92
+ "detail.formulaTooSlow": "Esta fórmula tardó {0} ms en ejecutarse y ya no se ejecuta. Al recargar la pestaña, se vuelve a intentar una vez más.",
93
+ "detail.jsonField": "Campo en el JSON",
94
+ "detail.matchesState": "✓ coincide con el estado",
95
+ "detail.name": "Nombre",
96
+ "detail.namePlaceholder": "p. ej., UNREACH",
97
+ "detail.nameTaken": "Ya hay otra fila con el nombre {0}.",
98
+ "detail.noSource": "— fuente desconocida —",
99
+ "detail.noValue": "sin valor",
100
+ "detail.noWrite": "— No escribas —",
101
+ "detail.notWritable": "no se puede escribir en él",
102
+ "detail.objectId": "ID del objeto",
103
+ "detail.otherObject": "… introduce otro objeto",
104
+ "detail.ownFormula": "fórmula propia",
105
+ "detail.pickOne": "— Elige una opción —",
106
+ "detail.rawNothing": "— la fuente no aporta nada —",
107
+ "detail.rawValue": "Valor bruto",
108
+ "detail.readIsButton": "botón",
109
+ "detail.readIsButtonHint": "Botón de función con un destino de escritura: el punto de datos del alias recibe el valor «read: false», y Vis, Alexa y Matter lo muestran como un botón. La fuente de lectura no supone ningún inconveniente: gracias a ella, el alias detecta cada pulsación, incluida la del botón físico. Tras una pulsación, se mantiene el último valor, al igual que ocurre en la fuente.",
110
+ "detail.readOnlySlotWrites": "{0} es de solo lectura en el patrón — «escribe en» debería ser «— no escribir —», ya que, de lo contrario, el valor escrito se envía al dispositivo.",
111
+ "detail.readsFrom": "se lee en",
112
+ "detail.removePoint": "Elimina este punto",
113
+ "detail.role": "Función",
114
+ "detail.sameAsRead": "— igual que se lee —",
115
+ "detail.separateHint": "Lee de un lugar distinto al que escribe: lo que se muestra es lo que el dispositivo devuelve, no el último comando enviado.",
116
+ "detail.slot": "Colocar siguiendo el patrón",
117
+ "detail.slotHint": "Establece el rol, el tipo, la unidad y la lista de valores tal y como indica el patrón para este campo. El dato y el nombre se mantienen.",
118
+ "detail.slotNone": "— ningún lugar —",
119
+ "detail.slotNotGiven": "Se elige {0}, pero no se le asigna ningún valor; consulta «Rol» para ver qué es lo que no encaja (normalmente el tipo).",
120
+ "detail.slotRequired": "obligatorio",
121
+ "detail.sourceGone": "La fuente no existe",
122
+ "detail.stateSays": "El estado dice {0}",
123
+ "detail.states": "Lista de valores",
124
+ "detail.statesFromSource": "Toma las {0} entradas de la fuente",
125
+ "detail.statesHint": "Convierte los números en texto: el administrador muestra entonces un menú desplegable en lugar de un campo numérico, y algunos campos de patrón lo requieren. Déjalo en blanco si no quieres que aparezca ninguna lista de valores.",
126
+ "detail.statesPlaceholder": "uno por línea: 0 = cerrado",
127
+ "detail.takeFromAlias": "Recupera este valor del alias almacenado",
128
+ "detail.takeOne": "Toma este valor de la plantilla",
129
+ "detail.targetNoWrite": "El punto de destino tiene el valor «write: false», lo que significa que su adaptador no transmite nada al dispositivo. ioBroker almacena el valor de todos modos, pero no ocurrirá nada.",
130
+ "detail.targetTypeHint": "El punto de destino es de tipo {0}. Este determina qué parte de la fórmula de escritura se conserva: los tipos «mixed» y «string» toman el texto, mientras que los tipos «boolean» y «number» lo convierten de nuevo.",
131
+ "detail.targetTypeVoid": "El destino es {0} y no admite texto. La fórmula de escritura sí genera texto; el controlador js lo vuelve a convertir en {0} al escribirlo, por lo que la fórmula no tiene ningún efecto. La conmutación sigue funcionando.",
132
+ "detail.tplWants": "La plantilla requiere: ",
133
+ "detail.tplWantsEmpty": "La plantilla deja este campo en blanco.",
134
+ "detail.type": "Tipo",
135
+ "detail.typeNumber": "número",
136
+ "detail.unit": "Unidad",
137
+ "detail.writeFormula": "Escribir fórmula",
138
+ "detail.writeFormulaHint": "lo invierte: lo que el dispositivo debería recibir al cambiar de modo.",
139
+ "detail.writeFormulaPlaceholder": "p. ej., val ? «ON» : «OFF»",
140
+ "detail.writesTo": "escribe a",
141
+ "detail.yields": "rendimientos",
142
+ "detail.yieldsNothing": "no da ningún resultado",
143
+ "diff.addedNoPlace": "marcado adicionalmente — no forma parte de {0}",
144
+ "diff.addedWithPlace": "marcado además — forma parte de {0}",
145
+ "diff.againstStored": "en comparación con lo que está almacenado",
146
+ "diff.changes": "Cambios",
147
+ "diff.deselectedNoPlace": "sin marcar — de todos modos no habría formado parte de {0}",
148
+ "diff.deselectedWithPlace": "sin marcar — parte de {0}",
149
+ "diff.deviations": "Desviaciones respecto a la propuesta",
150
+ "diff.formulaChange": "Fórmula de lectura: {0} → {1}",
151
+ "diff.newByHand": "nuevo, añadido manualmente",
152
+ "diff.noName": "(sin nombre)",
153
+ "diff.nothingExists": "todavía no existe nada de eso",
154
+ "diff.open": "{0} abrir",
155
+ "diff.points": "{0} puntos",
156
+ "diff.roleChange": "papel: {0} → {1}",
157
+ "diff.sourceChange": "fuente: {0} → {1}",
158
+ "diff.unitChange": "unidad: {0} → {1}",
159
+ "diff.wouldBeAdded": "marcado — se añadirá al actualizar",
160
+ "diff.wouldBeRemoved": "deseleccionado: existe en el alias y se eliminaría",
161
+ "enums.addTo": "se introduce",
162
+ "enums.alsoFolder": "¿Guardar también el alias en «{0}»?",
163
+ "enums.clear": "eliminar la asignación",
164
+ "enums.function": "Función",
165
+ "enums.functionHint": "Asigna el alias a una función, como «luz» o «calefacción». También se almacena en una enumeración, no en el objeto.",
166
+ "enums.iconAdded": "Se añadirá un icono",
167
+ "enums.iconNew": "Aún no hay imagen: el editor la añadirá al escribir el texto.",
168
+ "enums.iconNewMark": "nuevo",
169
+ "enums.iconThere": "La imagen se ha guardado",
170
+ "enums.members": "{0} en él",
171
+ "enums.newSuffix": "nuevo",
172
+ "enums.noMatch": "No se ha encontrado nada para «{0}»",
173
+ "enums.notLoadedField": "No se han podido cargar las salas y funciones, por lo que no se registrarán; no obstante, el alias en sí se ha creado. El entorno de trabajo lo vuelve a intentar tres veces por sí solo; de lo contrario, vuelve a cargar la pestaña.",
174
+ "enums.nowEmpty": "quedará vacía después y se eliminará",
175
+ "enums.placeholder": "vacío = sin asignación",
176
+ "enums.removeFrom": "se retira",
177
+ "enums.room": "Habitación",
178
+ "enums.roomHint": "Asigna el alias a una sala. Este no se almacena en el objeto, sino en la enumeración «enum.rooms»; Alexa, Google y los paneles de control agrupan los datos según este.",
179
+ "enums.suggested": "sugerido",
180
+ "enums.unknown": "No se han cargado las enumeraciones; la sala y la función permanecen inalteradas.",
181
+ "enums.unused": "vacío",
182
+ "enums.willCreate": "crear nuevo",
183
+ "folder.aliasMissing": "falta",
184
+ "folder.aliasThere": "existe",
185
+ "folder.clickHint": "Haz clic en un dispositivo para trabajar con él. ",
186
+ "folder.clickHintText": "Un nodo se considera un dispositivo en cuanto una plantilla coincide con él; si no es así, no se busca nada más. Si no hay ninguna coincidencia, el nodo sigue apareciendo en la lista siempre que tenga sus propios puntos de datos.",
187
+ "folder.colAlias": "Alias",
188
+ "folder.colDetected": "detectado como",
189
+ "folder.colSource": "Fuente",
190
+ "folder.devices": "Dispositivos",
191
+ "folder.devicesBelow": "{0} dispositivos a continuación · {1} puntos de datos",
192
+ "folder.found": "Se han encontrado {0} resultados",
193
+ "folder.nothingHere": "Aquí no hay nada que pueda convertirse en un dispositivo.",
194
+ "folder.withAlias": "{0} con alias",
195
+ "folder.withoutTemplate": "{0} sin plantilla",
196
+ "guess.alsoRow": "con sugerencias: se adapta",
197
+ "guess.bar": "Se han adivinado {0} casillas — compruébalo, por favor",
198
+ "guess.better": "{0} podría quedar mejor",
199
+ "guess.betterGoHint": "Cambia a {0} y pulsa «{1}» inmediatamente. A partir de ese momento, todas las asignaciones aparecen como «adivinadas» y hay que comprobarlas una por una; sigue siendo posible descartarlas. No cambia nada en el dispositivo: solo se establecen los roles en el borrador.",
200
+ "guess.betterHint": "{0} alcanzaría {1} casillas ocupadas, {2} solo {3} — ambas cifras tras la sugerencia. Cambia a esa opción y, a continuación, pulsa «Sugerir casillas libres»; hay que comprobar cada asignación.",
201
+ "guess.betterHintNone": "{0} alcanzaría {1} casillas ocupadas tras la sugerencia; {2} no encaja ni siquiera entonces. Cambia a esa opción y, a continuación, pulsa «Sugerir casillas libres»; hay que comprobar cada asignación.",
202
+ "guess.button": "Recomienda tragaperras gratis",
203
+ "guess.drop": "descartar",
204
+ "guess.hint": "Rellena las casillas vacías del patrón con los datos restantes; se trata de un intento, no de un dato cierto. Se infieren a partir del nombre, la lista de valores, la unidad y el tipo; cada asignación se marca como «infierda» y puede descartarse una por una.",
205
+ "guess.keep": "mantener",
206
+ "guess.keepAll": "conservar todo",
207
+ "guess.locked": "{0}× intentos, aún sin decidir: primero, elegir entre quedárselo (✓) o descartarlo (✕); después, crear y guardar el desbloqueo.",
208
+ "guess.mark": "adivinado",
209
+ "guess.noneFit": "{0} sigue siendo gratuito. Ninguno de los datos restantes se ajusta: la selección se basa en el nombre, la lista de valores, la unidad y el tipo, y ninguno ha superado el umbral.",
210
+ "guess.noneFull": "Todas las casillas del patrón están ocupadas; no queda nada por sugerir.",
211
+ "guess.noneHand": "{0} filas se decidieron manualmente y no se han modificado: {1}.",
212
+ "guess.noneHandOne": "{0} se decidió manualmente y no se ha modificado.",
213
+ "guess.noneUsed": "{0} permanece libre. Cada punto de datos restante ya actúa como fuente de lectura o escritura en una fila completada.",
214
+ "guess.slotsMore": "{0} y {1} más",
215
+ "guess.tplAsk": "Este dispositivo se identifica como «{0}», por lo que la asignación ya está establecida. La sugerencia rellena los campos adicionales a partir de los datos restantes; se trata de un intento, no de un dato cierto, y habría que comprobar cada coincidencia. Está pensada para casos especiales, por ejemplo, cuando el dispositivo tiene más funciones de las que cubre la plantilla.",
216
+ "guess.tplGo": "Sugiere de todos modos",
217
+ "guess.tplHint": "La plantilla ya incluye este dispositivo, por lo que esta sugerencia se refiere únicamente a casos especiales.",
218
+ "guess.tplTitle": "¿Recomiendas tragaperras gratuitas aunque sean de plantilla?",
219
+ "guess.undo": "Descartar sugerencias",
220
+ "help.aliases": "Selecciona un alias existente a la izquierda. Elimina puntos, cambia funciones, fuentes y fórmulas, o bien muévelo, cámbiale el nombre o elimínalo.",
221
+ "help.aliasesAdd": "Para añadir puntos a un alias, es más fácil hacerlo a través de «a la fuente →» (arriba a la derecha, junto al nombre del alias): allí se aplica la plantilla y cada punto de datos del dispositivo aparece con una función ya asignada; en este caso, tendrías que introducir cada uno manualmente.",
222
+ "help.sources": "Elige un dispositivo o un canal a la izquierda. El entorno de trabajo lo identifica y te sugiere un alias ya configurado. Si ya existe uno, se actualiza en su lugar.",
223
+ "help.templates": "Elige una plantilla de la izquierda. Las que vienen incluidas se pueden ver y duplicar, y las que hayas creado tú mismo, editar. La prueba muestra con qué dispositivos es compatible.",
224
+ "info.dlgTitle": "No forma parte del patrón {0}",
225
+ "info.explain": "funcionan con total normalidad y permanecen donde los has creado. No se escribe nada adicional: el alias se mantiene tal cual. Simplemente no forman parte de lo que ioBroker considera un {0}; su función no encaja en ninguna de sus posiciones. Esto solo empieza a tener importancia cuando pasas el alias a Alexa, Google Home o la interfaz de usuario de un dispositivo: estos verán un {0} sin esos puntos. En VIS, en los scripts y en el historial, los utilizas como cualquier otro punto de datos.",
226
+ "info.more": "Qué significa esto",
227
+ "leave.body": "Hay cambios en {0} que aún no se han guardado. Si cambias de pantalla ahora, se perderán.",
228
+ "leave.discard": "Descartar y cambiar",
229
+ "leave.stay": "Quédate aquí",
230
+ "leave.title": "Cambios no guardados",
231
+ "list.addByHand": "Añadir un punto de datos manualmente",
232
+ "list.aliasDiffers": "difiere del alias almacenado",
233
+ "list.all": "todos",
234
+ "list.buttonOnly": "solo escritura",
235
+ "list.byHand": "a mano",
236
+ "list.changed": "modificado",
237
+ "list.colOn": "en",
238
+ "list.colRole": "Función",
239
+ "list.colState": "Estado",
240
+ "list.colValue": "Valor",
241
+ "list.countOf": "{0} de {1}",
242
+ "list.createAria": "crear {0}",
243
+ "list.nameMissing": "falta el nombre",
244
+ "list.newPoint": "nuevo punto",
245
+ "list.noRole": "— sin función —",
246
+ "list.ofDatapoints": "puntos de datos",
247
+ "list.onlyPattern": "solo lo que se ajusta al patrón",
248
+ "list.onlyPatternHint": "Marca únicamente los puntos que ocupan una casilla en el patrón elegido; el resto queda sin marcar y no se crea.",
249
+ "list.onlyWithValue": "solo con un valor",
250
+ "list.otherSource": "de {0}",
251
+ "list.otherSourceHint": "Este punto no se lee desde {0}, sino desde {1}.",
252
+ "list.reset": "restablecer",
253
+ "list.resetHint": "Descarta todos los cambios realizados aquí —casillas de selección, roles, fórmulas, fuentes— y vuelve a mostrar el estado tal y como estaba almacenado.",
254
+ "list.sendPointMissing": "Enviar dato que aún no se ha creado",
255
+ "list.sourceGone": "La fuente no existe",
256
+ "list.sourceHint": "Este punto se lee a partir de {0}.",
257
+ "list.sourceMissing": "Falta la fuente",
258
+ "list.tpl": "plantilla",
259
+ "list.tplDiffers": "difiere de la plantilla",
260
+ "list.tplHint": "Comprueba exactamente los puntos que propone la plantilla, independientemente de lo que contenga actualmente el alias.",
261
+ "list.willBeCreated": "se creará:",
262
+ "move.button": "Mover…",
263
+ "move.done": "Se ha trasladado. El alias se encuentra ahora en {0}.",
264
+ "move.exists": "{0} ya existe. Elimínalo primero o elige otro nombre.",
265
+ "move.from": "de",
266
+ "move.needName": "Es necesario introducir un nombre.",
267
+ "move.nested": "El elemento de destino se encuentra debajo del propio alias (o al revés). Si lo mueves, se eliminaría su propio nodo padre; elige, por favor, un lugar junto a él.",
268
+ "move.newFolder": "carpeta nueva",
269
+ "move.noFolder": "(sin carpeta — directamente en alias.0)",
270
+ "move.noScripts": "El ID no aparece en ningún script.",
271
+ "move.now": "Actúa ya",
272
+ "move.scriptLines": "línea {0}",
273
+ "move.scriptLinesN": "líneas {0}",
274
+ "move.scriptOff": "discapacitado",
275
+ "move.scriptsHead": "{0} scripts mencionan el antiguo ID:",
276
+ "move.scriptsHead1": "En un script se menciona el antiguo ID:",
277
+ "move.title": "Mover alias",
278
+ "move.to": "a",
279
+ "move.unchanged": "La carpeta y el nombre no han cambiado; no hay que hacer nada.",
280
+ "move.warnHistory": "Solo se mantiene la configuración que permite el registro. A partir de ahora, se inicia una nueva serie vacía con el nuevo ID. Todo lo registrado hasta ahora permanece en la base de datos con el ID antiguo: no se pierde, pero ya no se ampliará. Los gráficos y las consultas de Grafana que apuntan al ID antiguo no reciben nada nuevo; si apuntan al nuevo, carecen del historial.",
281
+ "move.warnHistoryHead": "Los valores registrados no varían.",
282
+ "move.warnRefs": "En cuanto a las vistas «vis», los nombres de Alexa y Google y otros adaptadores no se pueden revisar. Todo lo que apunte al ID antiguo debe modificarse manualmente.",
283
+ "move.warnRefsHead": "¿Qué más está vinculado al antiguo número de identificación?",
284
+ "move.willMove": "se trasladará",
285
+ "move.with": "con",
286
+ "mq.andMore": "… y {0} más",
287
+ "mq.ask": "Pregunta al dispositivo",
288
+ "mq.askError": "La consulta ha fallado: {0}",
289
+ "mq.askGotAnswer": "El dispositivo ha respondido: comandos encontrados: {0}",
290
+ "mq.askHint": "Se trata de una consulta sencilla: no activa nada ni modifica ningún ajuste.",
291
+ "mq.askNoAnswer": "No hay respuesta. O bien el dispositivo está desconectado, o bien está a la escucha en un tema diferente.",
292
+ "mq.askOffline": "El dispositivo no está transmitiendo datos en este momento, por lo que la solicitud quedará sin respuesta.",
293
+ "mq.askedDays": "preguntado hace {0} días",
294
+ "mq.askedHours": "preguntado hace {0} horas",
295
+ "mq.askedMinutes": "preguntado hace {0} minutos",
296
+ "mq.asking": "preguntando al dispositivo",
297
+ "mq.commandsFrom": "Comandos, leídos desde {0}",
298
+ "mq.createdBy": "creado con Alias Workbench",
299
+ "mq.dialogTitle": "Crear puntos de envío",
300
+ "mq.done": "Se han escrito {0} objetos.",
301
+ "mq.doneHint": "La detección se volverá a ejecutar en un momento: una plantilla que antes no coincidía puede que ahora sí lo haga.",
302
+ "mq.duplicate": "igual que {0}",
303
+ "mq.fix": "Crear puntos de envío…",
304
+ "mq.instant": "Respuesta inmediata",
305
+ "mq.instantCheck": "preguntar",
306
+ "mq.instantChecking": "preguntando",
307
+ "mq.instantEnable": "Activar",
308
+ "mq.instantEnabling": "habilitar",
309
+ "mq.instantHintOff": "Sin SetOption59, el dispositivo solo envía datos en su ciclo de telemetría. {0} lee los datos de tele/… y sigue mostrando el valor anterior tras el cambio hasta ese momento. Activarla es una configuración permanente del dispositivo: no cambia nada y solo modifica la frecuencia con la que el dispositivo envía datos.",
310
+ "mq.instantHintOffTakt": "Sin SetOption59, el dispositivo solo envía datos cada {1} segundos. {0} lecturas de tele/… y sigue mostrando el valor anterior tras el cambio hasta ese momento. Activarla es una configuración permanente del dispositivo: no cambia nada y solo modifica la frecuencia con la que el dispositivo envía datos.",
311
+ "mq.instantHintOn": "La opción SetOption59 está activada: el dispositivo comunica cada cambio de inmediato, no solo con el siguiente envío de datos de telemetría. Se ha medido en tres segundos.",
312
+ "mq.instantHintUnknown": "Aún no se ha realizado ninguna consulta al dispositivo. La función «Ask» envía una consulta vacía a SetOption59; no cambia nada.",
313
+ "mq.instantOff": "apagado",
314
+ "mq.instantOffShort": "respuesta retrasada",
315
+ "mq.instantOn": "activado",
316
+ "mq.instantUnknown": "desconocido",
317
+ "mq.intro": "No todos los dispositivos Tasmota están configurados de la misma manera. Que falte un punto o que esté silenciado no es un fallo en sí mismo; solo tiene importancia cuando un alias debe activarse a través de él o cuando una plantilla lo necesita para su detección.",
318
+ "mq.justAsked": "preguntado hace un momento",
319
+ "mq.missing": "Faltan {0} puntos de envío",
320
+ "mq.missingIp": "Se desconoce la dirección IP del dispositivo: solo aparece en tele/INFO2 (que se envía una vez al arrancar) o en stat/STATUS5 (solo previa solicitud).",
321
+ "mq.missingPeriod": "Se desconoce la duración del periodo de telemetría: el dispositivo nunca la comunica por iniciativa propia, sino solo cuando se le solicita.",
322
+ "mq.mute": "{0} no puede enviar",
323
+ "mq.neverReported": "El dispositivo no ha enviado todos los datos desde que se puso en marcha, por lo que se desconoce su lista de comandos.",
324
+ "mq.newPoints": "Por crear",
325
+ "mq.nothingYet": "El dispositivo aún no ha enviado nada de lo que se puedan extraer comandos.",
326
+ "mq.nowValue": "Actualmente:",
327
+ "mq.offline": "sin conexión",
328
+ "mq.onlyResult": "Hasta ahora solo ha llegado la respuesta a un único comando, no el estado completo; es posible que la lista esté incompleta.",
329
+ "mq.repair": "Presente, pero en silencio",
330
+ "mq.repairHint": "Estos puntos existen, pero no se permite enviarlos. Un alias que pase por ellos no hace nada, y no se aprecia ningún cambio.",
331
+ "mq.rowAllow": "permitir el envío",
332
+ "mq.rowCreate": "crear",
333
+ "mq.rowWorking": "…",
334
+ "mq.selectedOf": "{0} de {1} seleccionados",
335
+ "mq.silent": "no informar",
336
+ "mq.split": "de {0} ramas",
337
+ "mq.splitHint": "Este dispositivo no se encuentra bajo un único nodo, sino que se distribuye en {0} ramas; así es como lo almacena el adaptador MQTT cuando el FullTopic del dispositivo es «%prefix%/%topic%/» (configuración de fábrica de Tasmota). El Workbench trata las ramas como un único dispositivo; los puntos se crean debajo de dicho dispositivo, no junto a él.",
338
+ "mq.stFine": "en la actualidad, envía",
339
+ "mq.stMissing": "falta un punto",
340
+ "mq.stMute": "no puedo enviar",
341
+ "mq.stOff": "está ahí, pero apagado",
342
+ "mq.stUnknown": "presente, envío desconocido",
343
+ "mq.title": "Dispositivo MQTT",
344
+ "mq.unknownCommand": "comando desconocido",
345
+ "mq.write": "Crear ({0})",
346
+ "pattern.allPatterns": "todos los patrones {0}",
347
+ "pattern.doesNotFit": "✕ no encaja",
348
+ "pattern.expectsType": ", espera {0}",
349
+ "pattern.fitsNotType": "✕ {0}: escribe {1} en lugar de {2}",
350
+ "pattern.fitsOn": "partidos ",
351
+ "pattern.freeSlots": "Tragaperras gratuitas con el patrón {0}",
352
+ "pattern.label": "Patrón",
353
+ "pattern.manualInstead": "a mano en lugar de {0}",
354
+ "pattern.missing": "Falta {0}",
355
+ "pattern.noMatch": "No hay ningún patrón que coincida con «{0}»",
356
+ "pattern.noPlaceBecauseType": "El patrón {0} no se aplica en este momento: {1} requiere {2}, pero {3} está establecido. Por eso ninguna fila tiene una ranura.",
357
+ "pattern.noPlaceLegend": "Las filas sombreadas de esta forma no tienen ninguna ranura en el patrón {0}",
358
+ "pattern.noPlaceLong": "no hay ranura en el patrón {0} — el punto se crea de todos modos y es totalmente utilizable, solo que Alexa y sus amigos lo cuentan por separado",
359
+ "pattern.notDetected": "no detectado",
360
+ "pattern.offCandidate": "{0} se ajusta a {1}, pero no está marcado.",
361
+ "pattern.offCandidateType": "{0} se ajusta a {1} por su función, pero no está marcado y tiene el tipo {2} en lugar de {3}.",
362
+ "pattern.offGuess": "Con «{0}» se aplicaría.",
363
+ "pattern.offMissing": "El patrón {0} no se aplica en este momento: falta {1}. Por eso ninguna fila tiene una ranura.",
364
+ "pattern.orRole": "o {0}",
365
+ "pattern.pointsTaken": "✓ {0} puntos",
366
+ "pattern.required": "OBLIGATORIO — falta",
367
+ "pattern.search": "escribe para buscar …",
368
+ "pattern.slotHeldBy": "{1} ya contiene {0} — así, esta fila no tiene sitio. Elige un sitio libre en la sección «Colocar según el patrón» de arriba.",
369
+ "pattern.slotName": "Este punto se encuentra en la ranura «{0}» del patrón {1}. Los nombres de las ranuras provienen del detector de tipos y son los mismos en todas partes; no se traducen, ya que el punto de datos «alias» se denomina exactamente así.",
370
+ "pattern.slotsTaken": "✓ {0}/{1} completado",
371
+ "pattern.tickIt": "marca la casilla",
372
+ "pattern.tickItType": "marca esta casilla, {0}",
373
+ "pattern.toSlot": " → la posición {0} en el patrón {1}",
374
+ "pattern.typeMismatch": "La ranura {0} requiere {1}, pero está configurada como {2} — el estado se sale del patrón aunque el rol sea el correcto.",
375
+ "pattern.typeOr": " o ",
376
+ "pattern.usualOnly": "solo los de siempre",
377
+ "pattern.viaRole": "papel {0}",
378
+ "result.allAnyway": "En fin, todo ",
379
+ "result.channelsHint": "Este dispositivo tiene {0} canales. Elige una de las siguientes opciones: todo en un único alias, o replicar la estructura de la fuente —una carpeta para el dispositivo y un canal por debajo de cada una—.",
380
+ "result.extraSwitches": "Incluidos: {0} puntos de otros canales para los que el patrón {1} no dispone de ranura. Se crean, pero no cuentan como interruptor ni como retroalimentación del dispositivo. Para un control independiente, utiliza la opción «un dispositivo por canal» que aparece a continuación.",
381
+ "result.header": "Qué deduce el detector de tipos a partir de ello",
382
+ "result.newlyCreated": "se creará",
383
+ "result.noObjectShort": "sin objeto",
384
+ "result.pickSource": "¿Saltar dónde?",
385
+ "result.pointsFromBranches": "{0} puntos de datos de {1} ramas. ",
386
+ "result.sourceCount": "{0} fuentes",
387
+ "result.sourceCountHint": "Los elementos de este alias se leen desde más de un nodo. «A la fuente» lleva al nodo del que proceden la mayoría de ellos; al hacer clic se muestran todos.",
388
+ "result.sourceGone": "La fuente {0} ya no existe.",
389
+ "result.sourceGone1": "1 punto no lleva a ninguna parte",
390
+ "result.sourceGoneN": "{0} puntos no apuntan a ninguna parte",
391
+ "result.states": "{0} estados",
392
+ "result.statesDirect": "{0} estados ({1} directamente)",
393
+ "result.toAlias": "al alias",
394
+ "result.toAliasHint": "Vuelve al alias creado a partir de este dispositivo.",
395
+ "result.toSource": "a la fuente",
396
+ "result.toSourceHint": "Pasa al dispositivo a partir del cual se creó este alias. Las plantillas solo se aplican allí; en el modo de alias, se puede mantener un alias, pero no volver a crearlo a partir de una plantilla.",
397
+ "result.tooManyStates": "Eso sería un dispositivo con {0} estados; normalmente, esto significa que se ha seleccionado el nodo equivocado. En el árbol de la izquierda, los nodos que parecen un único dispositivo llevan un punto. Aún así, puedes montarlo de esta forma.",
398
+ "roles.leadsTo": "→ ranura {0}",
399
+ "roles.noMatch": "no hay coincidencias con «{0}»",
400
+ "roles.patternOnly": "Mostrar solo los roles del patrón",
401
+ "roles.search": "buscar puesto…",
402
+ "roles.showAll": "Mostrar todos los roles {0}",
403
+ "roles.slot": "casilla {0} en el patrón {1}",
404
+ "roles.slotFree": "gratis",
405
+ "roles.slotTaken": "tomada por {0}",
406
+ "swap.blocked": "Decide primero: estos puntos no pueden incluirse: {0}. O bien los eliminas durante el intercambio o bien dejas el intercambio tal cual; un punto destinado a la escritura necesita un destino de escritura.",
407
+ "swap.button": "Intercambiar fuente…",
408
+ "swap.diffRange": "intervalo {0} → {1}",
409
+ "swap.diffType": "tipo {0} → {1}",
410
+ "swap.diffUnit": "unidad {0} → {1}",
411
+ "swap.done": "Se ha cambiado. El alias ahora lee desde {0}.",
412
+ "swap.from": "Actualmente se lee desde:",
413
+ "swap.goHigher": "utiliza el nivel superior",
414
+ "swap.gone": "Este dispositivo ya no existe, y precisamente para eso sirve esto.",
415
+ "swap.guessHint": "Las filas marcadas como «supuestas» se han emparejado por nombre o cargo; por favor, compruébalas una por una.",
416
+ "swap.guessedByName": "Por lo que se deduce del nombre del punto: hay algo en la nueva fuente que también se llama «{0}». Puede que esté muy lejos; compruébalo, por favor.",
417
+ "swap.guessedByRole": "Lo deduzco por la función: un punto debajo de la nueva fuente tiene la misma función «{0}». Por favor, compruébalo.",
418
+ "swap.higherLevel": "Un nivel más arriba ({0}) encuentra un objetivo para {1} de {2} puntos; aquí solo {3}.",
419
+ "swap.keeps": "El alias conserva su identificador, sus nombres, sus roles y sus fórmulas, su historial en la base de datos, así como su sala y su función. Lo único que cambia es el origen y el destino de las lecturas y escrituras de cada punto.",
420
+ "swap.mapping": "Cartografía",
421
+ "swap.mind": "Cuidado:",
422
+ "swap.mindHint": "Las fórmulas de los alias se mantienen tal y como están: si la nueva fuente se escala de forma diferente, los valores serán erróneos posteriormente. La fórmula se encuentra en la fila de detalles del punto.",
423
+ "swap.noDevice": "No se ha encontrado ningún dispositivo.",
424
+ "swap.noMatch": "No se ha encontrado ningún punto coincidente",
425
+ "swap.noWriteMatch": "No se ha encontrado ningún destino de escritura: este punto no se escribirá en ningún sitio",
426
+ "swap.now": "Cambia ahora",
427
+ "swap.pickFirst": "Elige primero una nueva fuente.",
428
+ "swap.removeIt": "eliminar este punto al intercambiar",
429
+ "swap.same": "Es la misma fuente que antes.",
430
+ "swap.search": "Buscar (ID o nombre) …",
431
+ "swap.title": "Intercambiar fuente",
432
+ "swap.to": "Nueva fuente",
433
+ "swap.unchanged": "sin cambios",
434
+ "swap.unknown": "(no se puede determinar)",
435
+ "target.alsoRoom": "¿También se debe establecer la sala en «{0}»?",
436
+ "target.alsoRoomNew": "No existe la carpeta «{0}»: ¿quieres crearla y asignarla?",
437
+ "target.clearField": "borrar el campo",
438
+ "target.exists": "ya existe",
439
+ "target.folder": "Colocar debajo de",
440
+ "target.folderHint": "Separa las subcarpetas con un punto, p. ej., Casa.GF.Cocina",
441
+ "target.folderPlaceholder": "vacío = justo debajo de alias.0",
442
+ "target.moveInstead": "en lugar de eso, muévelo…",
443
+ "target.moveInsteadHint": "Mueve el alias existente al nuevo identificador, en lugar de crear uno nuevo junto a él.",
444
+ "target.name": "Nombre",
445
+ "target.openFolder": "Abrir «{0}»",
446
+ "target.twinExists": "Esta fuente ya tiene {0}; esa se queda donde está.",
447
+ "target.yes": "sí",
448
+ "tpl.applyTemplate": "tomar los valores de la plantilla ({0})",
449
+ "tpl.applyTemplateHint": "Establece los roles, los tipos, las unidades, las fórmulas y las fuentes según lo indicado en la plantilla. El título se mantiene tal cual: ese lo pones tú. No se escribe nada antes de la simulación.",
450
+ "tpl.choose": "— elegir plantilla —",
451
+ "tpl.contains": "{0} contiene {1}",
452
+ "tpl.fits": "se adapta",
453
+ "tpl.fitsNot": "✕ {0}",
454
+ "tpl.forbiddenThere": "{0} existe, pero no debe",
455
+ "tpl.forced": "forzado",
456
+ "tpl.forcedHint": "La detección no se activa para esta plantilla, que se ha seleccionado manualmente.",
457
+ "tpl.identifiedAs": "Identificado como: {0}",
458
+ "tpl.label": "Plantilla",
459
+ "tpl.manuallyChosen": "seleccionados a mano",
460
+ "tpl.missingPoint": "Falta {0}",
461
+ "tpl.nameHint": "El nombre coincide con «{0}» — no se puede detectar desde MQTT",
462
+ "tpl.noJson": "{0} no devuelve ningún JSON",
463
+ "tpl.noNameHint": "El nombre no da ninguna pista: «{0}» es el valor por defecto; desde MQTT son indistinguibles.",
464
+ "tpl.noOutputs": "No se han encontrado resultados",
465
+ "tpl.none": "— sin plantilla —",
466
+ "tpl.noneDetected": "No se ha detectado ninguna plantilla",
467
+ "tpl.nor": " ni en ",
468
+ "tpl.output": "Resultado",
469
+ "tpl.outputsFound": "resultados encontrados: {0}",
470
+ "tpl.own": "propio",
471
+ "tpl.possibleIn": "{0} es un comando que el dispositivo reconoce (el punto de datos aún no se ha creado)",
472
+ "tpl.presentIn": "{0} presente",
473
+ "tpl.remembered": "recordado",
474
+ "tpl.rememberedHint": "Este alias se ha creado a partir de esta plantilla; permanecerá hasta que lo cambies de forma deliberada.",
475
+ "tpl.showAllPoints": "Cargar todos los puntos de datos del dispositivo",
476
+ "tpl.showAllPointsHelp": "Muestra la propuesta de plantilla y enumera todos los puntos de datos que tiene el dispositivo, incluidos aquellos que no se mencionan en ninguna plantilla. Desde aquí puedes seleccionar uno solo para añadirlo al alias.",
477
+ "tpl.showProposal": "Cargar la propuesta de plantilla",
478
+ "tpl.showProposalHelp": "Volvamos a lo que propone la plantilla para este dispositivo.",
479
+ "tpl.skippedChip": "{0} sin fuente",
480
+ "tpl.skippedEmpty": "«{0}» obtendría una puntuación más alta, pero no genera ni una sola fila en este dispositivo — omitido",
481
+ "tpl.skippedHead": "{0} omitido porque falta la fuente",
482
+ "tpl.skippedNowhere": "{0}: ni en {1}",
483
+ "tpl.skippedSource": "{0}: Falta {1}",
484
+ "tpl.skippedWhy": "{0}: {1}",
485
+ "tpl.whyNoField": "{0} no tiene el campo {1}",
486
+ "tpl.whyNoJson": "{0} no devuelve ningún JSON",
487
+ "tpl.whyNoPoint": "{0} no existe",
488
+ "tpl.whyNone": "¿Por qué no se aplica ninguna plantilla?",
489
+ "tpl.whyThis": "¿Por qué esta plantilla?",
490
+ "tpl.withoutField": "{0} sin {1}",
491
+ "tpl.wouldNeed": "falta realmente: {0}",
492
+ "tpls.absolute": "objeto fijo",
493
+ "tpls.absoluteText": "No se encuentra en el dispositivo y, por lo tanto, será el mismo para todos los dispositivos. A veces eso es exactamente lo que se busca —un punto de consigna compartido, por ejemplo—. No cuenta a efectos de la detección.",
494
+ "tpls.absoluteTitle": "Un punto se refiere a un objeto fijo. ",
495
+ "tpls.andMore": "… y {0} más, que no aparecen aquí",
496
+ "tpls.beats": "supera a {0}",
497
+ "tpls.buildsNone": "no encaja: ninguna fila tiene su origen",
498
+ "tpls.button": "Guardar como plantilla…",
499
+ "tpls.channelName": "Canal por salida",
500
+ "tpls.colDefault": "Por defecto",
501
+ "tpls.colInTemplate": "en la plantilla",
502
+ "tpls.colName": "Nombre",
503
+ "tpls.colPath": "Ruta, relativa al dispositivo",
504
+ "tpls.colRequired": "debe existir",
505
+ "tpls.content": "Comprobaciones de contenido",
506
+ "tpls.contentHelp": "Hace que la detección sea más precisa y excluye los dispositivos que no envían ese bloque. Esto es precisamente lo que distingue un «socket» de un «socket con medición».",
507
+ "tpls.contentRow": "{0} debe contener {1}",
508
+ "tpls.contradiction": "Esta plantilla no serviría para nada.",
509
+ "tpls.contradictionText": "Estos puntos aparecen como obligatorios y prohibidos al mismo tiempo: {0}. Elimínalos de una de las dos categorías.",
510
+ "tpls.deviceType": "Tipo de dispositivo",
511
+ "tpls.dropOff": "Omitir por completo",
512
+ "tpls.dropOthers": "Omite las demás salidas",
513
+ "tpls.droppedCount": "{0} puntos sin contar.",
514
+ "tpls.evidence": "{0} verificado",
515
+ "tpls.failed": "Error al guardar:",
516
+ "tpls.fallbacks": "+{0} alternativa",
517
+ "tpls.fitsNot": "{0}× no encaja",
518
+ "tpls.function": "Función",
519
+ "tpls.head": "Encabezado",
520
+ "tpls.hits": "Se han encontrado {0} dispositivos; {1} de ellos han ganado",
521
+ "tpls.id": "Id",
522
+ "tpls.idTaken": "Este identificador ya pertenece a «{0}» (v{1}). Al guardarlo, se sustituiría.",
523
+ "tpls.json": "Esto es lo que se almacena",
524
+ "tpls.loadFailed": "No se han cargado las plantillas propias",
525
+ "tpls.loadFailedHint": "La configuración de la instancia no ha respondido o ha devuelto un error. Tus plantillas no se han perdido; simplemente no aparecen en esta vista. Mientras se mantenga este aviso, al guardar se podría sobrescribir una plantilla existente: actualiza la página primero.",
526
+ "tpls.lockBadHint": "La sugerencia de nombre no es una expresión válida",
527
+ "tpls.lockIdTaken": "El ID ya pertenece a «{0}»",
528
+ "tpls.lockNoId": "Falta el identificador",
529
+ "tpls.lockNoRequired": "No se ha marcado ninguna casilla tal y como se indica; la plantilla no coincidiría con nada.",
530
+ "tpls.lockNoRows": "No queda ninguna fila",
531
+ "tpls.lockedWhy": "El guardado está bloqueado:",
532
+ "tpls.losesTo": "pierde contra {0}",
533
+ "tpls.multiple": "Este dispositivo cuenta con varias salidas",
534
+ "tpls.multipleHelp": "El {0} de las rutas se sustituye por %N% —solo al final de un segmento—, por lo que «ENERGY.Power» permanece intacto.",
535
+ "tpls.multipleNoNumber": "Indica qué número de las rutas corresponde a la salida. Sin ello, la plantilla seguirá siendo única.",
536
+ "tpls.multipleOff": "Un dispositivo con POWER1, POWER2… se convierte en una carpeta con un canal por salida.",
537
+ "tpls.nameDe": "Nombre (en alemán)",
538
+ "tpls.nameEn": "Nombre (inglés)",
539
+ "tpls.nameHint": "Sugerencia para el nombre",
540
+ "tpls.nameHintBad": "No es una expresión válida; se considera «sin coincidencia».",
541
+ "tpls.nameHintHelp": "Solo sirve para desempatar entre plantillas que encajan igual de bien —por ejemplo, «luz» frente a «enchufe»—. Separa las palabras con |. Este recurso se denomina «{0}».",
542
+ "tpls.needsRow": "no coincide — {0} no encuentra nada",
543
+ "tpls.needsRowHint": "No se encuentra en este dispositivo la fila obligatoria de la plantilla; normalmente se trata de un campo que no existe en el mensaje JSON de este dispositivo. La plantilla ni siquiera entra en liza en este caso; la siguiente mejor plantilla ocupa su lugar.",
544
+ "tpls.noFunction": "— ninguno —",
545
+ "tpls.noHits": "De momento no hay ningún dispositivo que cumpla los requisitos. Comprueba los puntos necesarios.",
546
+ "tpls.noInstance": "No se ha encontrado la instancia {0}.",
547
+ "tpls.noRequired": "No se ha marcado ninguna casilla como se indica; la plantilla no coincidiría con nada en absoluto.",
548
+ "tpls.noType": "— ninguno —",
549
+ "tpls.onlyOne": "el único que encaja",
550
+ "tpls.otherOutputs": "{0} puntos se refieren a otros resultados ({1}).",
551
+ "tpls.otherOutputsText": "Una plantilla para varias salidas siempre describe solo una; el resto se derivan de ella. Desmarca los puntos externos del dispositivo; de lo contrario, la plantilla solo se adaptará a ese dispositivo concreto.",
552
+ "tpls.pickDeviceFirst": "Elige primero un dispositivo",
553
+ "tpls.rank": "Clasificación",
554
+ "tpls.rowBuilt": "1 fila",
555
+ "tpls.rowsBuilt": "{0} filas",
556
+ "tpls.saveAsNew": "Guardar como nueva plantilla",
557
+ "tpls.saveAsNewHint": "el actual se mantiene tal y como está",
558
+ "tpls.saveNew": "Guardar plantilla",
559
+ "tpls.saveUpdate": "Actualizar plantilla",
560
+ "tpls.saved": "Plantilla «{0}» guardada, versión {1}.",
561
+ "tpls.savedWhere": "Se encuentra en la configuración de la instancia ({0}) y, por lo tanto, forma parte de la copia de seguridad.",
562
+ "tpls.saving": "guardando…",
563
+ "tpls.shadowsPackage": "entonces sustituirá al que se ha enviado",
564
+ "tpls.someOff": "Deseleccionados en el dispositivo: {0}. Estos puntos aparecen como «desactivados por defecto»; en el siguiente dispositivo aparecerán en la lista, pero sin marcar.",
565
+ "tpls.states": "Datos",
566
+ "tpls.statesCount": "{0} de ellos",
567
+ "tpls.statesHelp": "La marca de la izquierda indica si el punto se incluye en la plantilla. «Predeterminado» es el estado con el que se propondrá en el siguiente dispositivo; esto depende de la selección que hayas realizado en el dispositivo. La marca de la derecha indica si debe estar presente para que la plantilla coincida.",
568
+ "tpls.takesOver": "{0} cambiar plantilla",
569
+ "tpls.title": "Guardar como plantilla — {0}",
570
+ "tpls.tryout": "Prueba",
571
+ "tpls.undrop": "deshacer",
572
+ "tpls.updateIt": "Actualizar la plantilla «{0}»: pasa a ser la versión {1}",
573
+ "tpls.whatToDo": "¿Qué debería pasar?",
574
+ "tpls.whichNumber": "Número de esta salida",
575
+ "tpls.wissen": "+ {0} estados más como información de rol — se utiliza en la vista «Todos los puntos de datos del dispositivo»",
576
+ "tree.aliases": "Editar alias",
577
+ "tree.collapseAll": "ocultar todo",
578
+ "tree.emptyNode": "No hay datos: el nodo existe en la base de datos, pero está vacío.",
579
+ "tree.expandAll": "Mostrar todo",
580
+ "tree.filter": "filtrar …",
581
+ "tree.filterAria": "Filtrar objetos",
582
+ "tree.loading": "Cargando objetos…",
583
+ "tree.looksLikeDevice": "parece un único dispositivo",
584
+ "tree.noObjectHint": "no es una carpeta real",
585
+ "tree.nothingFound": "No se ha encontrado nada",
586
+ "tree.sourceGone": "{0} punto(s) de este alias hacen referencia a una fuente que no existe. El js-controller lo recuerda de forma permanente; la única solución es borrarlo y volver a crearlo.",
587
+ "tree.sources": "Crear alias",
588
+ "tree.templates": "Plantillas",
589
+ "tv.addFallback": "Añadir una fuente alternativa",
590
+ "tv.addState": "Añadir un dato",
591
+ "tv.badContent": "«erkennung.inhalt» debe ser un objeto.",
592
+ "tv.badList": "«{0}» debe ser una lista de puntos.",
593
+ "tv.badName": "El nombre debe ser una cadena o un objeto de idioma.",
594
+ "tv.badNameHint": "La sugerencia de nombre no es una expresión válida.",
595
+ "tv.badNoId": "Falta el identificador.",
596
+ "tv.badNoStates": "Faltan los datos (zustaende).",
597
+ "tv.badNotObject": "Se espera una única plantilla en forma de objeto JSON.",
598
+ "tv.badRecog": "«erkennung» debe ser un objeto.",
599
+ "tv.badState": "{0} puntos de datos sin nombre o sin ruta de lectura ni de escritura.",
600
+ "tv.badType": "Este detector no reconoce el tipo de dispositivo «{0}».",
601
+ "tv.clickRow": "Haz clic en una fila para editar el dato.",
602
+ "tv.clickRowRead": "Haz clic en una fila para verla; las plantillas ya enviadas no se pueden modificar.",
603
+ "tv.delete": "Eliminar",
604
+ "tv.deleteHint": "Si se superpone a una plantilla enviada, esta vuelve a aparecer después.",
605
+ "tv.deleteSure": "Eliminar definitivamente",
606
+ "tv.detection": "Detección",
607
+ "tv.discard": "Deshacer los cambios",
608
+ "tv.duplicate": "Duplicado",
609
+ "tv.export": "Exportar como archivo",
610
+ "tv.fallback": "Fuentes alternativas",
611
+ "tv.fallbackHint": "Si el entorno de trabajo no encuentra el punto de datos anterior —ni el campo que contiene—, prueba con estas opciones por orden. Se utiliza la primera en la que ambos existan realmente.",
612
+ "tv.flagsHelp": "«Por defecto» = ya marcado de antemano en el siguiente dispositivo. «Debe existir» = sin este punto, la plantilla no coincide en absoluto; pasa a la lista de requisitos anterior. «Objeto fijo» = la ruta de lectura no es relativa al dispositivo, sino un identificador de objeto completo, el mismo para todos los dispositivos.",
613
+ "tv.forbidden": "No debe existir",
614
+ "tv.forbiddenHelp": "Estos puntos NO deben aparecer en el dispositivo; de lo contrario, la plantilla no coincidirá. Esto es lo que distingue una toma simple de una múltiple. Separa varios puntos con comas. Los puntos que falten no se considerarán pruebas.",
615
+ "tv.hide": "ocultar",
616
+ "tv.importAndSave": "Importar y guardar",
617
+ "tv.importBad": "Este archivo no es una plantilla.",
618
+ "tv.importFile": "Importar…",
619
+ "tv.importNew": "Al guardar se crea «{0}».",
620
+ "tv.importReplaces": "Al guardar, se sustituye la plantilla «{0}»: la versión {1} pasa a ser la versión {2}.",
621
+ "tv.importShadows": "Guardando las sombras de la plantilla «{0}» incluida.",
622
+ "tv.importTitle": "Aún no se ha guardado nada.",
623
+ "tv.imported": "importado",
624
+ "tv.inTemplate": "en la plantilla",
625
+ "tv.json": "La plantilla en formato JSON",
626
+ "tv.makeOwn": "Crear una copia editable",
627
+ "tv.multi": "varias salidas, un canal {0} por salida",
628
+ "tv.nameHintShort": "Solo sirve para desempatar entre plantillas que se ajustan igual de bien. Separa las palabras con |.",
629
+ "tv.package": "enviado",
630
+ "tv.packageText": "No se puede editar, por lo que siempre se mantiene tal y como se entregó. La opción «Duplicar» crea una copia propia, y esa copia se superpone al original.",
631
+ "tv.packageTitle": "Plantilla enviada.",
632
+ "tv.paneHead": "La plantilla y lo que recoge",
633
+ "tv.rank": "puesto {0}",
634
+ "tv.rankOwn": "La clasificación solo sirve para comparar tus propias plantillas. Frente a una plantilla predeterminada, la tuya siempre gana de todos modos; para eso no hace falta que tenga una clasificación alta.",
635
+ "tv.rankPackage": "La clasificación solo se aplica a las plantillas enviadas, e incluso en ese caso, solo cuando las pruebas y la pista sobre el nombre coincidan.",
636
+ "tv.readOnlyRow": "Plantilla predeterminada: utiliza la opción «Mi copia para editar» para modificarla.",
637
+ "tv.removeFallback": "eliminar",
638
+ "tv.removeState": "Elimina este punto",
639
+ "tv.required2": "Debe existir",
640
+ "tv.requiredCount": "{0} puntos necesarios",
641
+ "tv.requiredHelp": "Estos datos deben estar presentes en el dispositivo; de lo contrario, la plantilla no coincidirá. Separa varios datos con comas. Cada dato obligatorio hace que la plantilla sea más precisa y, al mismo tiempo, más frágil.",
642
+ "tv.save": "Guardar",
643
+ "tv.show": "mostrar",
644
+ "tv.unsaved": "no guardado",
645
+ "use.again": "volver a leer",
646
+ "use.aliasHead": "El alias",
647
+ "use.custom": "Registro, nombres inteligentes",
648
+ "use.enums": "Enumeraciones",
649
+ "use.files": "Archivos",
650
+ "use.head": "Citado en",
651
+ "use.limits": "La búsqueda se realiza en texto sin formato. Solo se incluyen los archivos de las carpetas de instancias (vis.0, vis-2.0, web.0…), quedando excluidas las propias interfaces web de los adaptadores; de lo contrario, el entorno de trabajo encontraría sus ejemplos y sus propios archivos fuente. No se buscan los valores de estado, y ninguna búsqueda de texto encuentra los identificadores generados en tiempo de ejecución.",
652
+ "use.look": "búscalo",
653
+ "use.lookHint": "Busca el identificador del alias y de su origen: en los scripts, en las enumeraciones, en las entradas del propio punto, en cada objeto cargado y en los archivos de las carpetas de la instancia. Se realiza únicamente al hacer clic, ya que todo se lee una sola vez para ello.",
654
+ "use.none": "—",
655
+ "use.objects": "Objetos",
656
+ "use.otherAliases": "más alias en él",
657
+ "use.scripts": "Guiones",
658
+ "use.searching": "Buscando…",
659
+ "use.sourceHead": "La fuente",
660
+ "use.sourceHint": "Que una fuente siga apareciendo no es un error: el script que la alimenta debe estar precisamente ahí. Para decidir si un elemento debe trasladarse al alias, basta con examinarlo.",
661
+ "write.aliasNowAt": "El alias se encuentra ahora en {0}.",
662
+ "write.cannotWrite": "No se puede escribir así:",
663
+ "write.changes": "cambios",
664
+ "write.close": "Cerrar",
665
+ "write.createAlias": "Crear alias…",
666
+ "write.createAll": "Crear todos los {0} …",
667
+ "write.createAsOne": "crear como un único dispositivo…",
668
+ "write.createNamed": "Crear {0} …",
669
+ "write.createPerChannel": "una subcarpeta por canal, {0} de ellas…",
670
+ "write.createSendPoints": "Crear los {0} puntos de datos de envío que faltan",
671
+ "write.deselected": "deseleccionado",
672
+ "write.diffNew": "después de",
673
+ "write.diffOld": "antes de",
674
+ "write.diffRaw": "Mostrar el orden original",
675
+ "write.diffSorted": "campos de ordenación",
676
+ "write.diffSortedHint": "El orden de los campos dentro de un objeto no tiene ningún significado: el mismo administrador escribe objetos alias en cuatro órdenes diferentes. Una vez ordenados, solo quedan las diferencias reales; el orden original muestra cómo se almacena realmente.",
677
+ "write.done": "Se han escrito {0} objetos.",
678
+ "write.doneWithRemoved": "Se han escrito {0} objetos y se han eliminado {1}.",
679
+ "write.dryOutputs": " — {0} resultados",
680
+ "write.dryTitleCreate": "Crear alias: esto es lo que aparecería",
681
+ "write.dryTitleDoneCreate": "Alias creado",
682
+ "write.dryTitleDoneUpdate": "Se ha actualizado el alias",
683
+ "write.dryTitleFailed": "No todo salió bien",
684
+ "write.dryTitleUpdate": "Actualizar alias: esto es lo que aparecería",
685
+ "write.duplicateName": "{0}: el nombre aparece dos veces.",
686
+ "write.enumsUnknown": "No se escribirán «Room» ni «function»: no se han podido cargar las enumeraciones. El alias se crea tal y como se muestra. Sin un estado fiable, una enumeración existente sería sustituida por una nueva que contuviera únicamente este único miembro.",
687
+ "write.failed": "{0} operaciones fallidas:",
688
+ "write.new": "nuevo",
689
+ "write.noName": "Un punto no tiene nombre.",
690
+ "write.noSourceChosen": "{0}: no se ha seleccionado ninguna fuente.",
691
+ "write.noneSelected": "No se ha seleccionado ningún dato.",
692
+ "write.notInProposal": "no figura en la propuesta",
693
+ "write.notUnderAlias": "{0} no está por debajo de «alias». — Aquí no se escribirá nada.",
694
+ "write.now": "Crear ahora",
695
+ "write.nowUpdate": "Actualiza ahora",
696
+ "write.pickDeviceFirst": "Elige primero un dispositivo",
697
+ "write.remove": "Eliminar",
698
+ "write.removeCount": "puntos de datos: {0}",
699
+ "write.removeHint": "existen en el alias, pero ya no aparecen en el borrador",
700
+ "write.retry": "Inténtalo de nuevo",
701
+ "write.rowSource": "fuente",
702
+ "write.rowTarget": "objetivo",
703
+ "write.sourceMissing": "{0}: la fuente {1} no existe.",
704
+ "write.summaryTail": "{0} nuevo, {1} se sobrescribiría",
705
+ "write.summaryTail3": "{0} nuevo, {1} modificado, {2} sin cambios",
706
+ "write.unchanged": "sin cambios",
707
+ "write.updateAlias": "Actualizar alias …",
708
+ "write.updateAsOne": "actualizar como un solo dispositivo…",
709
+ "write.updateNamed": "Actualización {0} …",
710
+ "write.willKeep": "conservado: {0}",
711
+ "write.willRemove": "eliminado: {0}",
712
+ "write.writeSourceMissing": "{0}: el punto de datos de envío {1} aún no existe",
713
+ "write.writing": "escribiendo…"
14
714
  }